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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d8a33c9f8383c9b06b2c6407f5700cb32f53541d
4
- data.tar.gz: 5887f88f04df613831025a986154667afbe80091
3
+ metadata.gz: fc1f4a8170d0381fe795de4f5f16a134d686e074
4
+ data.tar.gz: 6ee9fdcff6aed1c694e3a0bda90d3c8209b8bfc2
5
5
  SHA512:
6
- metadata.gz: 7f7a731402f9d58926023a5de82b8f9c5f604c664a6e2cae85ff531fb0ebae71528ebd761adbab88d99bbae8b9887c936046192fe425e19e3fb0845294a42892
7
- data.tar.gz: 036fea9e0e831ad8ef760f357726834eafd9ea2cb8bfe80c2e0e43468947cf1ec8d98872cf34066197dc9c3c2bbf25327da05a00221da367ea4e17cddf12e75b
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:
@@ -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["metric_data"]["metrics"][0]["timeslices"][0]["values"]
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}.\n#{e.message}"
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)
@@ -1,3 +1,3 @@
1
1
  module Scaltainer
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
data/scaltainer.gemspec CHANGED
@@ -30,4 +30,5 @@ Gem::Specification.new do |spec|
30
30
 
31
31
  spec.add_runtime_dependency 'excon', '>= 0.47.0'
32
32
  spec.add_runtime_dependency "docker-api"
33
+ spec.add_runtime_dependency "dotenv"
33
34
  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.1.0
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-02 00:00:00.000000000 Z
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, ...