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 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, ...