netdata-client 1.3.0 → 1.3.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: 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