netdata-client 1.3.0 → 1.3.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: 98909afdec410b912d32322eb69a25308d26cb64
4
- data.tar.gz: b3fd0a0da36948ea9e825ed78b8f3c3684f535dd
3
+ metadata.gz: f135a517b6df6c479328589612bb49daaecd1146
4
+ data.tar.gz: 85847fd61b274f20155eb9dafdd10fcabbd4adf3
5
5
  SHA512:
6
- metadata.gz: 15e94291b79e885ea9fa105a8dfb4f0180254b1d0e16206f388ab2ca2042aa0b712050425d19f7740b83e658e959df91f9fb05986ee5987f9f9f111f340567b1
7
- data.tar.gz: 288114bb9add9eb929f79386d59f017eee038fb27b4547db68593be1a5805e861fc1702c190181e59947207cc5cf16cd0550bd7292ae2f4512ba0050f34c1eaf
6
+ metadata.gz: 3ea7479044223aa0a6f17639ddc3f3a017918d19181f3e6b121ad958c7b77751c4535abafcba1eace7b4bf947c1db9d53331504ec0f6e103047a5ca0c03e54e6
7
+ data.tar.gz: dc7916e2f0f0ece3c45e071b96345ab555ffdddfcaf9ab3f5caef990d191a3af6b298858da495453af22f3345eb3b785ee139865300d217a0f56083f1c38a4bd
data/Rakefile CHANGED
@@ -1,9 +1,9 @@
1
- require "bundler/gem_tasks"
2
- require "rake/testtask"
1
+ require 'bundler/gem_tasks'
2
+ require 'rake/testtask'
3
3
 
4
4
  Rake::TestTask.new(:test) do |t|
5
- t.libs << "test"
6
- t.libs << "lib"
5
+ t.libs << 'test'
6
+ t.libs << 'lib'
7
7
  t.test_files = FileList['test/**/*_test.rb']
8
8
  end
9
9
 
data/exe/netdatacli CHANGED
@@ -2,15 +2,15 @@
2
2
  lib = File.expand_path('../../lib', __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
- require "netdata/client"
6
- require "optparse"
5
+ require 'netdata/client'
6
+ require 'optparse'
7
7
 
8
8
  main = false
9
9
 
10
10
  OptionParser.new do |opt|
11
- # opt.banner = "netdatacli [...flags]"
11
+ # opt.banner = 'netdatacli [...flags]'
12
12
 
13
- opt.on("-m", "--2min", "Trigger the 2 minute actions") { |o| main = true }
13
+ opt.on('-m', '--2min', 'Trigger the 2 minute actions') { |o| main = true }
14
14
  end.parse!
15
15
 
16
16
  client = Netdata::Client::Controller.new
@@ -3,7 +3,8 @@ module Netdata
3
3
  class Controller
4
4
  def initialize
5
5
  @network = Helper::Network.new
6
- @config = ::YAML::load_file(File.expand_path("~/.netdatacli.yml"))
6
+ @aggregator = Helper::DataAggregator.new
7
+ @config = ::YAML::load_file(File.expand_path('~/.netdatacli.yml'))
7
8
  end
8
9
 
9
10
  def report_interval_2_mins
@@ -13,22 +14,19 @@ module Netdata
13
14
  return unless @config
14
15
 
15
16
  @config["instances"].each do |url|
16
- alarms = @network.get("alarms", url, {})
17
+ alarms = @network.get('alarms', url, {})
17
18
 
18
19
  return unless alarms
19
20
 
20
- alarms_resp = parse_alarms(JSON.parse(alarms.body))
21
-
22
- # system CPU stats
23
- cpu_value = get_cpu(url)
21
+ alarms_resp = @aggregator.parse_alarms(JSON.parse(alarms.body))
24
22
 
25
23
  # CPU on a per-user basis
26
- users_cpu_value_history, users_cpu_value, users_cpu_users = get_cpu_users(url)
24
+ users_cpu_value_history, users_cpu_value, users_cpu_users = @aggregator.get_cpu_users(url)
27
25
 
28
- aggregator[alarms_resp["hostname"]] = {}
29
- aggregator[alarms_resp["hostname"]][:cpu] = cpu_value
30
- aggregator[alarms_resp["hostname"]][:users_cpu] = { users: users_cpu_users, value: users_cpu_value, history: users_cpu_value_history.select { |val| val > threshold } }
31
- aggregator[alarms_resp["hostname"]][:alarms] = alarms_resp unless alarms_resp["alarms"].nil?
26
+ aggregator[alarms_resp['hostname']] = {}
27
+ aggregator[alarms_resp['hostname']][:cpu] = @aggregator.get_cpu(url)
28
+ aggregator[alarms_resp['hostname']][:users_cpu] = { users: users_cpu_users, value: users_cpu_value, history: users_cpu_value_history.select { |val| val > threshold } }
29
+ aggregator[alarms_resp['hostname']][:alarms] = alarms_resp unless alarms_resp['alarms'].nil?
32
30
  end
33
31
 
34
32
  pp aggregator
@@ -36,7 +34,7 @@ module Netdata
36
34
  aggregator.each_pair do |host, data|
37
35
  # new thread for each host so we can see mulitple notifications
38
36
  Thread.new {
39
- message = ""
37
+ message = ''
40
38
  message += "CPU Warning - #{data[:cpu].round(2)}%\n" if data[:cpu] > threshold
41
39
  message += "#{data[:users_cpu][:users].size} system users active (#{data[:users_cpu][:value].round(2)}% CPU)\n" if data[:users_cpu][:value] > threshold
42
40
  message += "Alarms are ringing\n" if data[:alarms]
@@ -46,54 +44,6 @@ module Netdata
46
44
  }.join
47
45
  end
48
46
  end
49
-
50
- private
51
-
52
- def parse_alarms(data)
53
- out = data.dup
54
- out["alarms"] = nil
55
-
56
- return {} if data["alarms"].empty?
57
-
58
- data['alarms'].each do |alarm|
59
- alarm_name = alarm[0]
60
- alarm_value = alarm[1]
61
- out["alarms"] = alarm_value unless alarm_value["recipient"] == 'silent'
62
- end
63
-
64
- out
65
- end
66
-
67
- def get_cpu(url)
68
- cpu_opts = {
69
- "chart" => "system.cpu",
70
- "format" => "array",
71
- "points" => 54,
72
- "group" => "average",
73
- "options" => "absolute|jsonwrap|nonzero",
74
- "after" => -540
75
- }
76
- cpu = @network.get("data", url, cpu_opts)
77
- cpu_value = JSON.parse(cpu.body)["result"].first
78
- end
79
-
80
- def get_cpu_users(url)
81
- users_cpu_opts = {
82
- "chart" => "users.cpu",
83
- "format" => "array",
84
- "points" => 54,
85
- "group" => "average",
86
- "options" => "absolute|jsonwrap|nonzero",
87
- "after" => -540
88
- }
89
- users_cpu = @network.get("data", url, users_cpu_opts)
90
- users_cpu_resp = JSON.parse(users_cpu.body)
91
- users_cpu_value = users_cpu_resp["result"].first
92
- users_cpu_value_history = users_cpu_resp["result"][0..119]
93
- users_cpu_users = users_cpu_resp["dimension_names"]
94
-
95
- [users_cpu_value_history, users_cpu_value, users_cpu_users]
96
- end
97
47
  end
98
48
  end
99
- end
49
+ end
@@ -0,0 +1,72 @@
1
+ module Netdata
2
+ module Client
3
+ module Helper
4
+ # Organize and parse data for certain flags
5
+ class DataAggregator
6
+ # Initializer
7
+ def initialize
8
+ @network = Network.new
9
+
10
+ # CPU usage per-user request options
11
+ @users_cpu_opts = {
12
+ 'chart' => 'users.cpu',
13
+ 'format' => 'array',
14
+ 'points' => 54,
15
+ 'group' => 'average',
16
+ 'options' => 'absolute|jsonwrap|nonzero',
17
+ 'after' => -540
18
+ }
19
+
20
+ # raw CPU request options
21
+ @cpu_opts = {
22
+ 'chart' => 'system.cpu',
23
+ 'format' => 'array',
24
+ 'points' => 54,
25
+ 'group' => 'average',
26
+ 'options' => 'absolute|jsonwrap|nonzero',
27
+ 'after' => -540
28
+ }
29
+ end
30
+
31
+ # ...
32
+ # Params:
33
+ def parse_alarms(data)
34
+ out = data.dup
35
+
36
+ return { 'hostname' => data['hostname'] } if data['alarms'].empty?
37
+
38
+ out['alarms'] = nil
39
+
40
+ data['alarms'].each do |alarm|
41
+ alarm_value = alarm[1]
42
+ recipient = alarm_value['recipient']
43
+ out['alarms'] = alarm_value unless recipient == 'silent'
44
+ end
45
+
46
+ out
47
+ end
48
+
49
+ # ...
50
+ # Params:
51
+ def get_cpu(url)
52
+ cpu = @network.get('data', url, @cpu_opts)
53
+
54
+ JSON.parse(cpu.body)['result'].first
55
+ end
56
+
57
+ # ...
58
+ # Params:
59
+ def get_cpu_users(url)
60
+ users_cpu = @network.get('data', url, @users_cpu_opts)
61
+
62
+ users_cpu_resp = JSON.parse(users_cpu.body)
63
+ users_cpu_value = users_cpu_resp['result'].first
64
+ users_cpu_value_history = users_cpu_resp['result'][0..119]
65
+ users_cpu_users = users_cpu_resp['dimension_names']
66
+
67
+ [users_cpu_value_history, users_cpu_value, users_cpu_users]
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
@@ -1,6 +1,7 @@
1
1
  module Netdata
2
2
  module Client
3
3
  module Helper
4
+ # Perform HTTP requests
4
5
  class Network
5
6
  # Access the configuration object instance externally
6
7
  attr_accessor :config
@@ -9,7 +10,7 @@ module Netdata
9
10
  # Params:
10
11
  # +url+:: The URL you want to hit
11
12
  # +key+:: The authentication key to pass via headers to the URL
12
- def get(endpoint, url, args, version = "v1")
13
+ def get(endpoint, url, args, version = 'v1')
13
14
  qs = build_qs(args)
14
15
  req_url = "#{url}/api/#{version}/#{endpoint}?#{qs}"
15
16
 
@@ -20,7 +21,7 @@ module Netdata
20
21
  # Params:
21
22
  # +url+:: The URL you want to hit
22
23
  # +key+:: The authentication key to pass via headers to the URL
23
- def post(endpoint, url, args, version = "v1")
24
+ def post(endpoint, url, args, version = 'v1')
24
25
  qs = build_qs(args)
25
26
  req_url = "#{url}/api/#{version}/#{endpoint}?#{qs}"
26
27
 
@@ -56,7 +57,7 @@ module Netdata
56
57
  # Params:
57
58
  # +args+:: The hash
58
59
  def build_qs(args)
59
- args.map{|k, v| "#{k}=#{v}"}.join("&")
60
+ args.map { |k, v| "#{k}=#{v}" }.join('&')
60
61
  end
61
62
  end
62
63
  end
@@ -1,5 +1,5 @@
1
1
  module Netdata
2
2
  module Client
3
- VERSION = "1.3.0"
3
+ VERSION = '1.3.1'.freeze
4
4
  end
5
5
  end
@@ -1,14 +1,16 @@
1
- require "yaml"
2
- require "json"
3
- require "net/http"
4
- require "notifaction"
5
- require "pp"
1
+ require 'yaml'
2
+ require 'json'
3
+ require 'net/http'
4
+ require 'notifaction'
5
+ require 'pp'
6
6
 
7
- require "netdata/client/controller"
8
- require "netdata/client/helper/network"
9
- require "netdata/client/version"
7
+ require 'netdata/client/controller'
8
+ require 'netdata/client/helper/network'
9
+ require 'netdata/client/helper/data_aggregator'
10
+ require 'netdata/client/version'
10
11
 
11
12
  module Netdata
13
+ # Client module
12
14
  module Client
13
15
  # something...
14
16
  end
@@ -4,22 +4,22 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require 'netdata/client/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
- spec.name = "netdata-client"
7
+ spec.name = 'netdata-client'
8
8
  spec.version = Netdata::Client::VERSION
9
- spec.authors = ["Ryan Priebe"]
10
- spec.email = ["rpriebe@me.com"]
9
+ spec.authors = ['Ryan Priebe']
10
+ spec.email = ['rpriebe@me.com']
11
11
 
12
- spec.summary = "Monitor your netdata instances, spawn OS notifications"
13
- spec.homepage = "http://github.com/aapis/netdata-client"
14
- spec.license = "MIT"
12
+ spec.summary = 'Monitor your netdata instances, spawn OS notifications'
13
+ spec.homepage = 'http://github.com/aapis/netdata-client'
14
+ spec.license = 'MIT'
15
15
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
16
- spec.bindir = "exe"
16
+ spec.bindir = 'exe'
17
17
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
18
- spec.require_paths = ["lib"]
18
+ spec.require_paths = ['lib']
19
19
 
20
20
  spec.add_runtime_dependency 'notifaction'
21
21
 
22
- spec.add_development_dependency "bundler", "~> 1.12"
23
- spec.add_development_dependency "rake", "~> 10.0"
24
- spec.add_development_dependency "minitest", "~> 5.0"
22
+ spec.add_development_dependency 'bundler', '~> 1.12'
23
+ spec.add_development_dependency 'rake', '~> 10.0'
24
+ spec.add_development_dependency 'minitest', '~> 5.0'
25
25
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: netdata-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Priebe
@@ -86,6 +86,7 @@ files:
86
86
  - exe/netdatacli
87
87
  - lib/netdata/client.rb
88
88
  - lib/netdata/client/controller.rb
89
+ - lib/netdata/client/helper/data_aggregator.rb
89
90
  - lib/netdata/client/helper/network.rb
90
91
  - lib/netdata/client/version.rb
91
92
  - netdata-client.gemspec