scaltainer 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 911452d89cb658da24d215283c003e31ddf83ea0a2f2a19331b84b10112f8259
4
- data.tar.gz: 10ad4d1bdb1a5f091ae9e2e493fb51f2d3089549961e5743c3f491337f1b9ed4
3
+ metadata.gz: 84b843eaa45f5b54d142d99fd428d6bc1b2323442e62987b606fb6a140c179f7
4
+ data.tar.gz: dc2b47fee69f2be100c023c29266c0260be36c9d28ed6ccd505e785008625b33
5
5
  SHA512:
6
- metadata.gz: f7e017ed3b8813d7fe46ea00d57eae951b03ab0cc0771a5d4322360877074521059ab062dace7844fa36db0dc37440f19c516b15b0c2626991ad85ff1fea6d4d
7
- data.tar.gz: '0295e2c3fdc65986b036491e4b8aa59140a640ee3b73ed34b58e0c4e973dede9d038f9056257c340959eceab325f91bc80cd5f741637b187f3c2d49fe08f93d2'
6
+ metadata.gz: 2b7e2393442da6423d19d7cccef17f954470fb9d3966ef357367fccaafad5dcaa95a0412aadaf3fc969cb735da1e5832a45893e9de232169f09fd83bfffcfbf3
7
+ data.tar.gz: 9a033a9f9ae5d0bf876e801261949310f5699291e109e6365a0fb4fdc8c194f58a6cc879ed38c7169448174f82b0a0f743e1246e16f04b80a387ae74344ab138
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- scaltainer (0.3.0)
4
+ scaltainer (0.4.0)
5
5
  docker-api
6
6
  dotenv
7
7
  excon (>= 0.47.0)
data/README.md CHANGED
@@ -65,10 +65,13 @@ of the push gateway. For Kubernetes environments the above denotes the gateway s
65
65
  name (`prometheus-pushgateway`), where it is installed in the namespace called
66
66
  `monitoring`. Scaltainer will report the following metrics to Prometheus:
67
67
 
68
- - `rayyan_controller_replicas`: number of replicas scaled (or untouched thereof).
68
+ - `scaltainer_web_replicas_total`: number of web replicas scaled (or untouched thereof).
69
69
  This is labeled by the namespace and controller name, both matching the scaltainer
70
70
  configuration file.
71
- - `rayyan_scaltainer_ticks`: iterations scaltainer has performed (if `-w` is used)
71
+ - `scaltainer_worker_replicas_total`: Same as above, but for workers
72
+ - `scaltainer_web_response_time_seconds`: response times as reported by the web services
73
+ - `scaltainer_worker_queue_size_total`: queue sizes as reported by the worker services
74
+ - `scaltainer_ticks_total`: iterations scaltainer has performed (if `-w` is used)
72
75
 
73
76
  ## Configuration
74
77
 
@@ -1,4 +1,5 @@
1
1
  require "yaml"
2
+ require 'socket'
2
3
  require 'prometheus/client'
3
4
  require 'prometheus/client/push'
4
5
 
@@ -81,6 +82,8 @@ module Scaltainer
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 @@ module Scaltainer
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
@@ -1,3 +1,3 @@
1
1
  module Scaltainer
2
- VERSION = "0.3.0"
2
+ VERSION = "0.4.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: scaltainer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hossam Hammady
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-04-26 00:00:00.000000000 Z
11
+ date: 2020-04-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler