scaltainer 0.1.0 → 0.1.1
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 +4 -4
- data/README.md +6 -0
- data/lib/scaltainer/command.rb +25 -0
- data/lib/scaltainer/newrelic/metrics.rb +6 -3
- data/lib/scaltainer/service_types/web.rb +1 -1
- data/lib/scaltainer/version.rb +1 -1
- data/scaltainer.gemspec +1 -0
- metadata +16 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: fc1f4a8170d0381fe795de4f5f16a134d686e074
|
|
4
|
+
data.tar.gz: 6ee9fdcff6aed1c694e3a0bda90d3c8209b8bfc2
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 4b8c5e16a59f0ab61f25f78f376df5b6296346d9c5eb91b8c328c7e492c2f717bb7ba9f2137c2d02e68c703649d6968db60e19f73d208e159cee5b6ef3a4931b
|
|
7
|
+
data.tar.gz: 7ee00f85b2604f9df32ea2555171e7cba53c6e0efbdf63ff9acb4d1b72434c24e7ddcd2197700730835340b441c5e6676a2ab05a1b01a2da3fadce1f64ae0ec8
|
data/README.md
CHANGED
|
@@ -68,6 +68,12 @@ measure average response time in the past 3 minutes. Default value is 5.
|
|
|
68
68
|
- `LOG_LEVEL`: Accepted values here are: `DEBUG`, `INFO` (default), `WARN`, `ERROR`, `FATAL`.
|
|
69
69
|
Log output goes to stdout.
|
|
70
70
|
|
|
71
|
+
- `DOCKER_SECRETS_PATH_GLOB`: Path glob containing environment files to load.
|
|
72
|
+
This is useful if running from a docker swarm mode environment where one or more of the above
|
|
73
|
+
environment variables are set using `docker config` or `docker secret`.
|
|
74
|
+
These files should be in the form `VARIABLE=value`.
|
|
75
|
+
A typical value of this variable would be: `{/run/secrets/*,/config1,/config2}`
|
|
76
|
+
|
|
71
77
|
### Configuration file
|
|
72
78
|
|
|
73
79
|
The configuration file (determined by `-f FILE` command line parameter) should be in the following form:
|
data/lib/scaltainer/command.rb
CHANGED
|
@@ -15,6 +15,13 @@ module Scaltainer
|
|
|
15
15
|
end
|
|
16
16
|
opts.on_tail("-h", "--help", "Show this message") do
|
|
17
17
|
puts opts
|
|
18
|
+
puts "\nEnvironment variables: \n"
|
|
19
|
+
puts "- DOCKER_URL: defaults to local socket"
|
|
20
|
+
puts "- HIREFIRE_TOKEN"
|
|
21
|
+
puts "- NEW_RELIC_LICENSE_KEY"
|
|
22
|
+
puts "- RESPONSE_TIME_WINDOW: defaults to 5"
|
|
23
|
+
puts "- LOG_LEVEL: defaults to INFO"
|
|
24
|
+
puts "- DOCKER_SECRETS_PATH_GLOB: path glob containing env files to load"
|
|
18
25
|
exit
|
|
19
26
|
end
|
|
20
27
|
end.parse!
|
|
@@ -22,10 +29,28 @@ module Scaltainer
|
|
|
22
29
|
statefile = "#{configfile}.state" unless statefile
|
|
23
30
|
|
|
24
31
|
raise ConfigurationError.new("File not found: #{configfile}") unless File.exists?(configfile)
|
|
32
|
+
|
|
33
|
+
load_env
|
|
34
|
+
|
|
25
35
|
logger = Logger.new(STDOUT)
|
|
26
36
|
logger.level = %w(debug info warn error fatal unknown).find_index((ENV['LOG_LEVEL'] || '').downcase) || 1
|
|
27
37
|
|
|
28
38
|
return configfile, statefile, logger
|
|
29
39
|
end
|
|
40
|
+
|
|
41
|
+
private
|
|
42
|
+
|
|
43
|
+
def self.load_env
|
|
44
|
+
# load docker configs/secrets
|
|
45
|
+
path = ENV['DOCKER_SECRETS_PATH_GLOB']
|
|
46
|
+
unless path.nil?
|
|
47
|
+
files = Dir[path]
|
|
48
|
+
unless files.empty?
|
|
49
|
+
require 'dotenv'
|
|
50
|
+
Dotenv.load(*files)
|
|
51
|
+
puts ENV['NEW_RELIC_LICENSE_KEY']
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
30
55
|
end
|
|
31
56
|
end
|
|
@@ -18,7 +18,7 @@ module Newrelic
|
|
|
18
18
|
http_call_count, http_average_call_time = response_array[0]["call_count"], response_array[0]["average_call_time"]
|
|
19
19
|
webfe_call_count, webfe_average_response_time = response_array[1]["call_count"], response_array[1]["average_response_time"]
|
|
20
20
|
|
|
21
|
-
http_average_call_time + (1.0 * webfe_call_count * webfe_average_response_time / http_call_count)
|
|
21
|
+
http_average_call_time + (1.0 * webfe_call_count * webfe_average_response_time / http_call_count) rescue 0.0/0
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
private
|
|
@@ -33,9 +33,12 @@ module Newrelic
|
|
|
33
33
|
responses = conn.requests requests
|
|
34
34
|
responses.map {|response|
|
|
35
35
|
body = JSON.parse(response.body)
|
|
36
|
-
body["
|
|
36
|
+
if body["error"] && body["error"]["title"]
|
|
37
|
+
raise body["error"]["title"]
|
|
38
|
+
else
|
|
39
|
+
body["metric_data"]["metrics"][0]["timeslices"][0]["values"] rescue {}
|
|
40
|
+
end
|
|
37
41
|
}
|
|
38
42
|
end
|
|
39
|
-
|
|
40
43
|
end
|
|
41
44
|
end
|
|
@@ -19,7 +19,7 @@ module Scaltainer
|
|
|
19
19
|
begin
|
|
20
20
|
metric = nr.get_avg_response_time app_id, from, to
|
|
21
21
|
rescue => e
|
|
22
|
-
raise NetworkError.new "Could not retrieve metrics from New Relic API for #{service_name}
|
|
22
|
+
raise NetworkError.new "Could not retrieve metrics from New Relic API for #{service_name}: #{e.message}"
|
|
23
23
|
end
|
|
24
24
|
|
|
25
25
|
hash.merge!(service_name => metric)
|
data/lib/scaltainer/version.rb
CHANGED
data/scaltainer.gemspec
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.1.
|
|
4
|
+
version: 0.1.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Hossam Hammady
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2017-11-
|
|
11
|
+
date: 2017-11-12 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -108,6 +108,20 @@ dependencies:
|
|
|
108
108
|
- - ">="
|
|
109
109
|
- !ruby/object:Gem::Version
|
|
110
110
|
version: '0'
|
|
111
|
+
- !ruby/object:Gem::Dependency
|
|
112
|
+
name: dotenv
|
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
|
114
|
+
requirements:
|
|
115
|
+
- - ">="
|
|
116
|
+
- !ruby/object:Gem::Version
|
|
117
|
+
version: '0'
|
|
118
|
+
type: :runtime
|
|
119
|
+
prerelease: false
|
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
121
|
+
requirements:
|
|
122
|
+
- - ">="
|
|
123
|
+
- !ruby/object:Gem::Version
|
|
124
|
+
version: '0'
|
|
111
125
|
description: |-
|
|
112
126
|
A ruby gem inspired by HireFire to autoscale docker swarm services.
|
|
113
127
|
Metrics can be standard average response time, New Relic web metrics, queue size for workers, ...
|