Class: GDK::PortManager

Inherits:
Object
  • Object
show all
Defined in:
lib/gdk/port_manager.rb

Direct Known Subclasses

CellsPortManager

Constant Summary collapse

ServiceUnknownError =
Class.new(StandardError)
PortAlreadyAllocated =
Class.new(StandardErrorWithMessage)
PortInUseError =
Class.new(StandardError)
DEFAULT_PORTS_FOR_SERVICES =
{
  2222 => 'sshd',
  3000 => 'gdk',
  3005 => 'gitlab_docs',
  3010 => 'gitlab_pages',
  3030 => 'gitlab_docs_https',
  3038 => 'vite',
  3333 => 'workhorse',
  3444 => 'smartcard_nginx',
  3807 => 'sidekiq_exporter',
  3808 => 'webpack',
  3907 => 'sidekiq_health_check',
  4000 => 'grafana',
  5000 => 'registry',
  5052 => 'gitlab_ai_gateway',
  5431 => 'postgresql_geo',
  5432 => 'postgresql',
  6000 => 'redis_cluster_dev_1',
  6001 => 'redis_cluster_dev_2',
  6002 => 'redis_cluster_dev_3',
  6003 => 'redis_cluster_test_1',
  6004 => 'redis_cluster_test_2',
  6005 => 'redis_cluster_test_3',
  6060 => 'gitlab-zoekt-indexer-test',
  6070 => 'zoekt-webserver-test',
  6080 => 'gitlab-zoekt-indexer-development-1',
  6081 => 'gitlab-zoekt-indexer-development-2',
  6090 => 'zoekt-webserver-development-1',
  6091 => 'zoekt-webserver-development-2',
  6432 => 'pgbouncer_replica-1',
  6433 => 'pgbouncer_replica-2',
  6434 => 'pgbouncer_replica-2-1',
  6435 => 'pgbouncer_replica-2-2',
  8001 => 'gitlab_spamcheck',
  8065 => 'mattermost',
  8080 => 'nginx',
  8081 => 'gitlab_spamcheck_external', # was 8080
  8082 => 'gitlab_ai_gateway_exporter',
  8123 => 'clickhouse_http',
  8200 => 'vault',
  8201 => 'openbao_cluster',
  9000 => 'object_store',
  9001 => 'clickhouse_tcp',
  9002 => 'object_store_console',
  9009 => 'clickhouse_interserver',
  9090 => 'prometheus',
  9091 => 'snowplow_micro',
  9095 => 'gitlab_topology_service_grpc',
  9096 => 'gitlab_topology_service_rest',
  9122 => 'gitlab_shell_exporter',
  9229 => 'workhorse_exporter',
  9236 => 'gitaly_exporter',
  9393 => 'gitlab_http_router',
  10101 => 'praefect_exporter',
  50052 => 'duo-workflow-service'
}.freeze

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(config:) ⇒ PortManager

Returns a new instance of PortManager.



79
80
81
82
# File 'lib/gdk/port_manager.rb', line 79

def initialize(config:)
  @claimed_ports_and_services = {}
  @config = config
end

Instance Attribute Details

#claimed_ports_and_servicesObject

Returns the value of attribute claimed_ports_and_services.



71
72
73
# File 'lib/gdk/port_manager.rb', line 71

def claimed_ports_and_services
  @claimed_ports_and_services
end

Class Method Details

.new_from_config(config: GDK.config) ⇒ Object



73
74
75
76
77
# File 'lib/gdk/port_manager.rb', line 73

def self.new_from_config(config: GDK.config)
  return GDK::CellsPortManager.new(config: config) if CellManager.are_we_in_a_cell?(config: config)

  GDK::PortManager.new(config: config)
end

Instance Method Details

#claim(port, service_name) ⇒ Object



84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/gdk/port_manager.rb', line 84

def claim(port, service_name)
  existing_service_name = claimed_service_for_port(port)

  if existing_service_name
    return true if existing_service_name == service_name

    raise PortAlreadyAllocated, "Port #{port} is already allocated for service '#{existing_service_name}'"
  end

  claimed_ports_and_services[port] = service_name

  true
end

#claimed_service_for_port(port) ⇒ Object



98
99
100
# File 'lib/gdk/port_manager.rb', line 98

def claimed_service_for_port(port)
  claimed_ports_and_services[port]
end

#default_port_for_service(name) ⇒ Object



102
103
104
# File 'lib/gdk/port_manager.rb', line 102

def default_port_for_service(name)
  resolve_service(name)[:port]
end

#resolve_service(name) ⇒ Object (protected)



108
109
110
111
112
113
114
115
116
117
118
# File 'lib/gdk/port_manager.rb', line 108

def resolve_service(name)
  services = DEFAULT_PORTS_FOR_SERVICES.to_a
  index = services.index { |service| service[1] == name }

  raise ServiceUnknownError, "Service '#{name}' is unknown, please add to GDK::PortManager::DEFAULT_PORTS_FOR_SERVICES" unless index

  {
    index: index,
    port: services[index][0]
  }
end