scaltainer 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- 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, ...
|