|
1 | 1 | require "yaml" |
| 2 | +require 'socket' |
2 | 3 | require 'prometheus/client' |
3 | 4 | require 'prometheus/client/push' |
4 | 5 |
|
@@ -81,6 +82,8 @@ def process_service(service_name, config, state, namespace, type, metrics) |
81 | 82 | @logger.debug "#{service.type.capitalize} #{service.name} is currently configured for #{current_replicas} replica(s)" |
82 | 83 | metric = metrics[service.name] |
83 | 84 | raise Scaltainer::Warning.new("Configured #{service.type} '#{service.name}' not found in metrics endpoint") unless metric |
| 85 | + state["metric"] = metric |
| 86 | + state["service_type"] = type.to_s |
84 | 87 | desired_replicas = type.determine_desired_replicas metric, config, current_replicas |
85 | 88 | @logger.debug "Desired number of replicas for #{service.type} #{service.name} is #{desired_replicas}" |
86 | 89 | adjusted_replicas = type.adjust_desired_replicas(desired_replicas, config) |
@@ -121,16 +124,29 @@ def scale_out(service, current_replicas, desired_replicas) |
121 | 124 |
|
122 | 125 | def register_pushgateway(pushgateway) |
123 | 126 | @registry = Prometheus::Client.registry |
124 | | - @replicas_gauge = @registry.gauge(:rayyan_controller_replicas, docstring: 'Rayyan replicas', labels: [:controller, :namespace]) |
125 | | - @ticks_counter = @registry.counter(:rayyan_scaltainer_ticks, docstring: 'Rayyan Scaltainer ticks', labels: [:namespace]) |
| 127 | + @web_replicas_gauge = @registry.gauge(:scaltainer_web_replicas_total, docstring: 'Scaltainer controller replicas for web services', labels: [:controller, :namespace]) |
| 128 | + @worker_replicas_gauge = @registry.gauge(:scaltainer_worker_replicas_total, docstring: 'Scaltainer controller replicas for worker services', labels: [:controller, :namespace]) |
| 129 | + @web_metrics_gauge = @registry.gauge(:scaltainer_web_response_time_seconds, docstring: 'Scaltainer controller response time metric in seconds', labels: [:controller, :namespace]) |
| 130 | + @worker_metrics_gauge = @registry.gauge(:scaltainer_worker_queue_size_total, docstring: 'Scaltainer controller queue size metric', labels: [:controller, :namespace]) |
| 131 | + @ticks_counter = @registry.counter(:scaltainer_ticks_total, docstring: 'Scaltainer ticks', labels: [:namespace]) |
126 | 132 |
|
127 | | - @pushgateway = Prometheus::Client::Push.new("scaltainer", "scaltainer", "http://#{pushgateway}") |
| 133 | + @pushgateway = Prometheus::Client::Push.new("scaltainer", Socket.gethostname, "http://#{pushgateway}") |
128 | 134 | end |
129 | 135 |
|
130 | 136 | def sync_pushgateway(namespace, state) |
131 | 137 | @logger.debug("Now syncing state #{state} in namespace #{namespace}") |
| 138 | + factor = 1 |
132 | 139 | state.each do |service, state| |
133 | | - @replicas_gauge.set(state["replicas"], labels: {namespace: namespace, controller: service}) if state["replicas"] |
| 140 | + if state["service_type"] == 'Web' |
| 141 | + replicas_gauge = @web_replicas_gauge |
| 142 | + metrics_gauge = @web_metrics_gauge |
| 143 | + factor = 0.001 |
| 144 | + else |
| 145 | + replicas_gauge = @worker_replicas_gauge |
| 146 | + metrics_gauge = @worker_metrics_gauge |
| 147 | + end |
| 148 | + replicas_gauge.set(state["replicas"], labels: {namespace: namespace, controller: service}) |
| 149 | + metrics_gauge.set(state["metric"] * factor, labels: {namespace: namespace, controller: service}) |
134 | 150 | end |
135 | 151 | @ticks_counter.increment(labels: {namespace: namespace}) |
136 | 152 | begin |
|
0 commit comments