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 +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +5 -2
- data/lib/scaltainer/runner.rb +20 -4
- data/lib/scaltainer/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 84b843eaa45f5b54d142d99fd428d6bc1b2323442e62987b606fb6a140c179f7
|
4
|
+
data.tar.gz: dc2b47fee69f2be100c023c29266c0260be36c9d28ed6ccd505e785008625b33
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2b7e2393442da6423d19d7cccef17f954470fb9d3966ef357367fccaafad5dcaa95a0412aadaf3fc969cb735da1e5832a45893e9de232169f09fd83bfffcfbf3
|
7
|
+
data.tar.gz: 9a033a9f9ae5d0bf876e801261949310f5699291e109e6365a0fb4fdc8c194f58a6cc879ed38c7169448174f82b0a0f743e1246e16f04b80a387ae74344ab138
|
data/Gemfile.lock
CHANGED
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
|
-
- `
|
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
|
-
- `
|
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
|
|
data/lib/scaltainer/runner.rb
CHANGED
@@ -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
|
-
@
|
125
|
-
@
|
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",
|
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
|
-
|
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
|
data/lib/scaltainer/version.rb
CHANGED
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.
|
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-
|
11
|
+
date: 2020-04-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|