scaltainer 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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