bipbip 0.1.9 → 0.2.0

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: 3c7ba6a85ef808131e0f1204f577c0b0e830ac61
4
- data.tar.gz: 6e188b74f4a6a4cef5c6802a56ece4d222308f02
3
+ metadata.gz: 23a9fee96f16b13c84f67946b0e3c64c6b8624f4
4
+ data.tar.gz: 1c4a817735f2e4f35cafdb1c421a141990516c09
5
5
  SHA512:
6
- metadata.gz: 20a5386f04c04b870c756c2d476e79f1cc64a4ce7a5b231da6f8b2f0b4fd6f253aa0d9adc3b9511e57fb7369e75d5cc4fac041c642841cbde4b7b290b1d07cb0
7
- data.tar.gz: 124dbd95109248ed84229d4e7695ac3a482928db42b28637d35652535a7e210118f5f802eb50173f6d0426b4f830233c5bdf42e85554192a6f0ae67b9f809dd1
6
+ metadata.gz: bc37152e3c4c278b049c71b1a9d89acca947afddf14ea8c45b31e901bf71b723effe16ef0901ee62992bd3e6478fb807f0c4a4dcc22869ffa32b3576d1687bf2
7
+ data.tar.gz: 78621bb55b7465384c27dadaa0a31a5c8d347bbee9eaa1af7caf42c07a104975756ef74daec69ab04d98850f485d30887eea15600ca630900f86b20579d08b79
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- bipbip
1
+ bipbip [![Build Status](https://travis-ci.org/cargomedia/bipbip.png)](https://travis-ci.org/cargomedia/bipbip)
2
2
  ======
3
3
  Agent to collect server metrics and send them to the [CopperEgg RevealMetrics](http://copperegg.com/) platform.
4
4
  Plugins for different metrics available.
@@ -24,8 +24,10 @@ loglevel: INFO
24
24
  frequency: 15
25
25
  include: services.d/
26
26
 
27
- copperegg:
28
- apikey: YOUR_APIKEY
27
+ storages:
28
+ -
29
+ name: copperegg
30
+ api_key: YOUR_APIKEY
29
31
 
30
32
  services:
31
33
  -
data/lib/bipbip.rb CHANGED
@@ -7,9 +7,12 @@ module Bipbip
7
7
  require 'logger'
8
8
  require 'socket'
9
9
 
10
+ require 'interruptible_sleep'
11
+
10
12
  require 'bipbip/version'
11
- require 'bipbip/interruptible_sleep'
13
+ require 'bipbip/helper'
12
14
  require 'bipbip/agent'
15
+ require 'bipbip/storage'
13
16
  require 'bipbip/plugin'
14
17
 
15
18
  def self.logger
@@ -21,6 +24,6 @@ module Bipbip
21
24
  end
22
25
 
23
26
  def self.fqdn
24
- @fqdn ||= Socket.gethostbyname(Socket.gethostname).first
27
+ @fqdn ||= Socket.gethostbyname(Socket.gethostname).first rescue Socket.gethostname
25
28
  end
26
29
  end
data/lib/bipbip/agent.rb CHANGED
@@ -2,64 +2,36 @@ module Bipbip
2
2
 
3
3
  class Agent
4
4
 
5
- def initialize(config_file)
5
+ attr_accessor :plugins
6
+ attr_accessor :storages
7
+
8
+ def initialize(config_file = nil)
9
+ @plugins = []
10
+ @storages = []
6
11
  @plugin_pids = []
7
- @logfile = STDOUT
8
- @loglevel = 'INFO'
9
- @frequency = 60
10
- @services = []
11
- @copperegg_api_key
12
12
 
13
- load_config(config_file)
13
+ load_config(config_file) if config_file
14
14
  end
15
15
 
16
16
  def run
17
- Bipbip.logger = Logger.new(@logfile)
18
- Bipbip.logger.level = Logger::const_get(@loglevel)
19
17
  Bipbip.logger.info 'Startup...'
18
+ Bipbip.logger.warn 'No services configured' if @plugins.empty?
19
+ Bipbip.logger.warn 'No storages configured' if @storages.empty?
20
20
 
21
- Bipbip.logger.info "Using CopperEgg API key `#{@copperegg_api_key}`"
22
- CopperEgg::Api.apikey = @copperegg_api_key
23
-
24
- if ![5, 15, 60, 300, 900, 3600, 21600].include?(@frequency)
25
- Bipbip.logger.fatal "Invalid frequency: #{@frequency}"
26
- exit 1
21
+ @storages.each do |storage|
22
+ @plugins.each do |plugin|
23
+ Bipbip.logger.info "Setting up plugin #{plugin.name} for storage #{storage.name}"
24
+ storage.setup_plugin(plugin)
25
+ end
27
26
  end
28
27
 
29
28
  ['INT', 'TERM'].each { |sig| trap(sig) {
30
29
  Thread.new { interrupt }
31
30
  } }
32
31
 
33
- metric_groups = get_copperegg_metric_groups
34
- dashboards = get_copperegg_dashboards
35
-
36
- plugin_names = @services.map { |service| service['plugin'] }
37
- plugin_names.each do |plugin_name|
38
- plugin = plugin_factory(plugin_name)
39
-
40
- metric_group = metric_groups.detect { |m| m.name == plugin_name }
41
- if metric_group.nil? || !metric_group.is_a?(CopperEgg::MetricGroup)
42
- Bipbip.logger.info "Creating metric group `#{plugin_name}`"
43
- metric_group = CopperEgg::MetricGroup.new(:name => plugin_name, :label => plugin_name, :frequency => @frequency)
44
- end
45
- metric_group.frequency = @frequency
46
- metric_group.metrics = plugin.metrics_schema
47
- metric_group.save
48
-
49
- dashboard = dashboards.detect { |d| d.name == plugin_name }
50
- if dashboard.nil?
51
- Bipbip.logger.info "Creating dashboard `#{plugin_name}`"
52
- metrics = metric_group.metrics || []
53
- CopperEgg::CustomDashboard.create(metric_group, :name => plugin_name, :identifiers => nil, :metrics => metrics)
54
- end
55
- end
56
-
57
- @services.each do |service|
58
- plugin_name = service['plugin']
59
- plugin = plugin_factory(plugin_name)
60
- service_config = service.reject { |key, value| ['plugin'].include?(key) }
61
- Bipbip.logger.info "Starting plugin #{plugin_name}"
62
- @plugin_pids.push plugin.run(service_config, @frequency)
32
+ @plugins.each do |plugin|
33
+ Bipbip.logger.info "Starting plugin #{plugin.name} with config #{plugin.config}"
34
+ @plugin_pids.push plugin.run(@storages)
63
35
  end
64
36
 
65
37
  while true
@@ -67,58 +39,37 @@ module Bipbip
67
39
  end
68
40
  end
69
41
 
70
- def get_copperegg_metric_groups
71
- Bipbip.logger.info 'Loading metric groups'
72
- metric_groups = CopperEgg::MetricGroup.find
73
- if metric_groups.nil?
74
- Bipbip.logger.fatal 'Cannot load metric groups'
75
- exit 1
76
- end
77
- metric_groups
78
- end
79
-
80
- def get_copperegg_dashboards
81
- Bipbip.logger.info 'Loading dashboards'
82
- dashboards = CopperEgg::CustomDashboard.find
83
- if dashboards.nil?
84
- Bipbip.logger.fatal 'Cannot load dashboards'
85
- exit 1
86
- end
87
- dashboards
88
- end
89
-
90
- def plugin_factory(plugin_name)
91
- file_name = plugin_name.tr('-', '_')
92
- require "bipbip/plugin/#{file_name}"
93
-
94
- class_name = plugin_name.split('-').map{|w| w.capitalize}.join
95
- Plugin::const_get(class_name).new(plugin_name)
96
- end
97
-
98
42
  def load_config(config_file)
99
43
  config = YAML.load(File.open(config_file))
100
- if config.has_key?('logfile')
101
- @logfile = config['logfile'].to_s
102
- end
103
- if config.has_key?('loglevel')
104
- @loglevel = config['loglevel'].to_s
105
- end
106
- if config.has_key?('frequency')
107
- @frequency = config['frequency'].to_i
108
- end
109
- if config.has_key?('services')
110
- @services = config['services'].to_a
111
- end
112
- if config.has_key?('include')
44
+ config = {
45
+ 'logfile' => STDOUT,
46
+ 'loglevel' => 'INFO',
47
+ 'frequency' => 60,
48
+ 'include' => nil,
49
+ 'services' => [],
50
+ 'services' => [],
51
+ }.merge(config)
52
+
53
+ Bipbip.logger = Logger.new(config['logfile'])
54
+ Bipbip.logger.level = Logger::const_get(config['loglevel'])
55
+
56
+ services = config['services'].to_a
57
+ if config['include']
113
58
  include_path = File.expand_path(config['include'].to_s, File.dirname(config_file))
114
59
  files = Dir[include_path + '/**/*.yaml', include_path + '/**/*.yml']
115
- @services += files.map {|file| YAML.load(File.open(file))}
60
+ services += files.map { |file| YAML.load(File.open(file)) }
116
61
  end
117
- if config.has_key?('copperegg')
118
- config_copperegg = config['copperegg']
119
- if config_copperegg.has_key?('apikey')
120
- @copperegg_api_key = config_copperegg['apikey']
121
- end
62
+ @plugins = services.map do |service|
63
+ service_name = service['plugin'].to_s
64
+ service_config = service.reject { |key, value| ['plugin'].include?(key) }
65
+ Bipbip::Plugin.factory(service_name, service_config, config['frequency'])
66
+ end
67
+
68
+ storages = config['storages'].to_a
69
+ @storages = storages.map do |storage|
70
+ storage_name = storage['name'].to_s
71
+ storage_config = storage.reject { |key, value| ['name'].include?(key) }
72
+ Bipbip::Storage.factory(storage_name, storage_config)
122
73
  end
123
74
  end
124
75
 
@@ -0,0 +1,10 @@
1
+ module Bipbip::Helper
2
+
3
+ def self.name_to_classname(name)
4
+ name.split('-').map{|w| w.capitalize}.join
5
+ end
6
+
7
+ def self.name_to_filename(name)
8
+ name.tr('-', '_')
9
+ end
10
+ end
data/lib/bipbip/plugin.rb CHANGED
@@ -3,27 +3,38 @@ module Bipbip
3
3
  class Plugin
4
4
  include InterruptibleSleep
5
5
 
6
- def initialize(name)
6
+ attr_accessor :name
7
+ attr_accessor :config
8
+
9
+ def self.factory(name, config, frequency)
10
+ require "bipbip/plugin/#{Bipbip::Helper.name_to_filename(name)}"
11
+ Plugin::const_get(Bipbip::Helper.name_to_classname(name)).new(name, config, frequency)
12
+ end
13
+
14
+ def initialize(name, config, frequency)
7
15
  @name = name.to_s
16
+ @config = config.to_hash
17
+ @frequency = frequency.to_i
8
18
  end
9
19
 
10
- def run(server, frequency)
20
+ def run(storages)
11
21
  child_pid = fork do
12
22
  ['INT', 'TERM'].each { |sig| trap(sig) {
13
23
  Thread.new { interrupt } if !@interrupted
14
24
  } }
15
25
 
16
26
  retry_delay = frequency
17
- metric_identifier = metric_identifier(server)
18
27
  begin
19
28
  until interrupted? do
20
29
  time = Time.now
21
- data = monitor(server).to_hash
30
+ data = monitor
22
31
  if data.empty?
23
32
  raise "#{name} #{metric_identifier}: Empty data"
24
33
  end
25
34
  Bipbip.logger.debug "#{name} #{metric_identifier}: Data: #{data}"
26
- CopperEgg::MetricSample.save(name, metric_identifier, Time.now.to_i, data)
35
+ storages.each do |storage|
36
+ storage.store_sample(self, time, data)
37
+ end
27
38
  retry_delay = frequency
28
39
  interruptible_sleep (frequency - (Time.now - time))
29
40
  end
@@ -46,14 +57,14 @@ module Bipbip
46
57
  @interrupted || Process.getpgid(Process.ppid) != Process.getpgrp
47
58
  end
48
59
 
49
- def name
50
- @name
60
+ def frequency
61
+ @frequency
51
62
  end
52
63
 
53
- def metric_identifier(server)
64
+ def metric_identifier
54
65
  identifier = Bipbip.fqdn
55
- unless server.empty?
56
- identifier += '::' + server.values.first.to_s
66
+ unless config.empty?
67
+ identifier += '::' + config.values.first.to_s
57
68
  end
58
69
  identifier
59
70
  end
@@ -66,7 +77,7 @@ module Bipbip
66
77
  raise 'Missing method metrics_schema'
67
78
  end
68
79
 
69
- def monitor(server)
80
+ def monitor
70
81
  raise 'Missing method monitor'
71
82
  end
72
83
  end
@@ -4,16 +4,16 @@ module Bipbip
4
4
 
5
5
  def metrics_schema
6
6
  [
7
- {:name => 'request_per_sec', :type => 'ce_gauge', :unit => 'Requests'},
8
- {:name => 'busy_workers', :type => 'ce_gauge', :unit => 'Workers'},
7
+ {:name => 'request_per_sec', :type => 'gauge', :unit => 'Requests'},
8
+ {:name => 'busy_workers', :type => 'gauge', :unit => 'Workers'},
9
9
  ]
10
10
  end
11
11
 
12
- def monitor(server)
13
- uri = URI.parse(server['url'])
12
+ def monitor
13
+ uri = URI.parse(config['url'])
14
14
  response = Net::HTTP.get_response(uri)
15
15
 
16
- raise "Invalid response from server at #{server['url']}" unless response.code == '200'
16
+ raise "Invalid response from server at #{config['url']}" unless response.code == '200'
17
17
 
18
18
  astats = response.body.split(/\r*\n/)
19
19
 
@@ -8,12 +8,12 @@ module Bipbip
8
8
 
9
9
  def metrics_schema
10
10
  [
11
- {:name => 'jobs_queued_total', :type => 'ce_gauge', :unit => 'Jobs'},
11
+ {:name => 'jobs_queued_total', :type => 'gauge', :unit => 'Jobs'},
12
12
  ]
13
13
  end
14
14
 
15
- def monitor(server)
16
- gearman = GearmanServer.new(server['hostname'] + ':' + server['port'].to_s)
15
+ def monitor
16
+ gearman = GearmanServer.new(config['hostname'] + ':' + config['port'].to_s)
17
17
  stats = gearman.status
18
18
 
19
19
  jobs_queued_total = 0
@@ -8,15 +8,15 @@ module Bipbip
8
8
 
9
9
  def metrics_schema
10
10
  [
11
- {:name => 'cmd_get', :type => 'ce_counter'},
12
- {:name => 'cmd_set', :type => 'ce_counter'},
13
- {:name => 'get_misses', :type => 'ce_counter'},
14
- {:name => 'bytes', :type => 'ce_gauge', :unit => 'b'},
11
+ {:name => 'cmd_get', :type => 'counter'},
12
+ {:name => 'cmd_set', :type => 'counter'},
13
+ {:name => 'get_misses', :type => 'counter'},
14
+ {:name => 'bytes', :type => 'gauge', :unit => 'b'},
15
15
  ]
16
16
  end
17
17
 
18
- def monitor(server)
19
- memcached = MemcachedClient.new(server['hostname'] + ':' + server['port'].to_s)
18
+ def monitor
19
+ memcached = MemcachedClient.new(config['hostname'].to_s + ':' + config['port'].to_s)
20
20
  stats = memcached.stats
21
21
  memcached.quit
22
22
 
@@ -6,37 +6,37 @@ module Bipbip
6
6
 
7
7
  def metrics_schema
8
8
  [
9
- {:name => 'Max_used_connections', :type => 'ce_gauge', :unit => 'Connections'},
10
- {:name => 'Connections', :type => 'ce_counter', :unit => 'Connections'},
11
- {:name => 'Threads_connected', :type => 'ce_gauge', :unit => 'Threads'},
9
+ {:name => 'Max_used_connections', :type => 'gauge', :unit => 'Connections'},
10
+ {:name => 'Connections', :type => 'counter', :unit => 'Connections'},
11
+ {:name => 'Threads_connected', :type => 'gauge', :unit => 'Threads'},
12
12
 
13
- {:name => 'Seconds_Behind_Master', :type => 'ce_gauge', :unit => 'Seconds'},
13
+ {:name => 'Seconds_Behind_Master', :type => 'gauge', :unit => 'Seconds'},
14
14
 
15
- {:name => 'Created_tmp_disk_tables', :type => 'ce_counter', :unit => 'Tables'},
15
+ {:name => 'Created_tmp_disk_tables', :type => 'counter', :unit => 'Tables'},
16
16
 
17
- {:name => 'Queries', :type => 'ce_counter', :unit => 'Queries'},
18
- {:name => 'Slow_queries', :type => 'ce_counter', :unit => 'Queries'},
17
+ {:name => 'Queries', :type => 'counter', :unit => 'Queries'},
18
+ {:name => 'Slow_queries', :type => 'counter', :unit => 'Queries'},
19
19
 
20
- {:name => 'Table_locks_immediate', :type => 'ce_counter', :unit => 'Locks'},
21
- {:name => 'Table_locks_waited', :type => 'ce_counter', :unit => 'Locks'},
20
+ {:name => 'Table_locks_immediate', :type => 'counter', :unit => 'Locks'},
21
+ {:name => 'Table_locks_waited', :type => 'counter', :unit => 'Locks'},
22
22
 
23
- {:name => 'Processlist', :type => 'ce_gauge', :unit => 'Processes'},
24
- {:name => 'Processlist_Locked', :type => 'ce_gauge', :unit => 'Processes'},
23
+ {:name => 'Processlist', :type => 'gauge', :unit => 'Processes'},
24
+ {:name => 'Processlist_Locked', :type => 'gauge', :unit => 'Processes'},
25
25
 
26
- {:name => 'Com_select', :type => 'ce_counter', :unit => 'Commands'},
27
- {:name => 'Com_delete', :type => 'ce_counter', :unit => 'Commands'},
28
- {:name => 'Com_insert', :type => 'ce_counter', :unit => 'Commands'},
29
- {:name => 'Com_update', :type => 'ce_counter', :unit => 'Commands'},
30
- {:name => 'Com_replace', :type => 'ce_counter', :unit => 'Commands'},
26
+ {:name => 'Com_select', :type => 'counter', :unit => 'Commands'},
27
+ {:name => 'Com_delete', :type => 'counter', :unit => 'Commands'},
28
+ {:name => 'Com_insert', :type => 'counter', :unit => 'Commands'},
29
+ {:name => 'Com_update', :type => 'counter', :unit => 'Commands'},
30
+ {:name => 'Com_replace', :type => 'counter', :unit => 'Commands'},
31
31
  ]
32
32
  end
33
33
 
34
- def monitor(server)
34
+ def monitor
35
35
  mysql = Mysql2::Client.new(
36
- :host => server['hostname'],
37
- :port => server['port'],
38
- :username => server['username'],
39
- :password => server['password']
36
+ :host => config['hostname'],
37
+ :port => config['port'],
38
+ :username => config['username'],
39
+ :password => config['password']
40
40
  )
41
41
 
42
42
  stats = Hash.new(0)
@@ -4,11 +4,11 @@ module Bipbip
4
4
 
5
5
  def metrics_schema
6
6
  [
7
- {:name => 'connections_total', :type => 'ce_gauge', :unit => 'Connections'},
7
+ {:name => 'connections_total', :type => 'gauge', :unit => 'Connections'},
8
8
  ]
9
9
  end
10
10
 
11
- def monitor(server)
11
+ def monitor
12
12
  connections = `netstat -tn | wc -l`
13
13
  {:connections_total => connections.to_i}
14
14
  end
@@ -4,15 +4,15 @@ module Bipbip
4
4
 
5
5
  def metrics_schema
6
6
  [
7
- {:name => 'connections_requested', :type => 'ce_counter', :unit => 'Requests'},
7
+ {:name => 'connections_requested', :type => 'counter', :unit => 'Requests'},
8
8
  ]
9
9
  end
10
10
 
11
- def monitor(server)
12
- uri = URI.parse(server['url'])
11
+ def monitor
12
+ uri = URI.parse(config['url'])
13
13
  response = Net::HTTP.get_response(uri)
14
14
 
15
- raise "Invalid response from server at #{server['url']}" unless response.code == "200"
15
+ raise "Invalid response from server at #{config['url']}" unless response.code == "200"
16
16
 
17
17
  nstats = response.body.split(/\r*\n/)
18
18
  connections_requested = nstats[2].lstrip.split(/\s+/)[2].to_i
@@ -4,16 +4,16 @@ module Bipbip
4
4
 
5
5
  def metrics_schema
6
6
  [
7
- {:name => 'opcode_mem_size', :type => 'ce_gauge', :unit => 'b'},
8
- {:name => 'user_mem_size', :type => 'ce_gauge', :unit => 'b'},
7
+ {:name => 'opcode_mem_size', :type => 'gauge', :unit => 'b'},
8
+ {:name => 'user_mem_size', :type => 'gauge', :unit => 'b'},
9
9
  ]
10
10
  end
11
11
 
12
- def monitor(server)
13
- uri = URI.parse(server['url'])
12
+ def monitor
13
+ uri = URI.parse(config['url'])
14
14
  response = Net::HTTP.get_response(uri)
15
15
 
16
- raise "Invalid response from server at #{server['url']}" unless response.code == '200'
16
+ raise "Invalid response from server at #{config['url']}" unless response.code == '200'
17
17
 
18
18
  stats = JSON.parse(response.body)
19
19
 
@@ -8,15 +8,15 @@ module Bipbip
8
8
 
9
9
  def metrics_schema
10
10
  [
11
- {:name => 'total_commands_processed', :type => 'ce_counter', :unit => 'Commands'},
12
- {:name => 'used_memory', :type => 'ce_gauge', :unit => 'b'},
11
+ {:name => 'total_commands_processed', :type => 'counter', :unit => 'Commands'},
12
+ {:name => 'used_memory', :type => 'gauge', :unit => 'b'},
13
13
  ]
14
14
  end
15
15
 
16
- def monitor(server)
16
+ def monitor
17
17
  redis = RedisClient.new(
18
- :host => server['hostname'],
19
- :port => server['port']
18
+ :host => config['hostname'],
19
+ :port => config['port']
20
20
  )
21
21
  stats = redis.info
22
22
  redis.quit
@@ -0,0 +1,27 @@
1
+ module Bipbip
2
+
3
+ class Storage
4
+
5
+ attr_accessor :name
6
+ attr_accessor :config
7
+
8
+ def self.factory(name, config)
9
+ require "bipbip/storage/#{Bipbip::Helper.name_to_filename(name)}"
10
+ Storage::const_get(Bipbip::Helper.name_to_classname(name)).new(name, config)
11
+ end
12
+
13
+ def initialize(name, config)
14
+ @name = name.to_s
15
+ @config = config.to_hash
16
+ end
17
+
18
+ def setup_plugin(plugin)
19
+ raise 'Missing method setup_plugin'
20
+ end
21
+
22
+ def store_sample(plugin, time, data)
23
+ raise 'Missing method store_sample'
24
+ end
25
+
26
+ end
27
+ end
@@ -0,0 +1,67 @@
1
+ module Bipbip
2
+
3
+ class Storage::Copperegg < Storage
4
+
5
+ def initialize(name, config)
6
+ super(name, config)
7
+ CopperEgg::Api.apikey = config['api_key']
8
+ end
9
+
10
+ def setup_plugin(plugin)
11
+ @metric_groups ||= _load_metric_groups
12
+ @dashboards ||= _load_dashboards
13
+
14
+ if ![5, 15, 60, 300, 900, 3600, 21600].include?(plugin.frequency)
15
+ Bipbip.logger.fatal "Copperegg cannot use frequency #{plugin.frequency}"
16
+ exit 1
17
+ end
18
+
19
+ metric_group = @metric_groups.detect { |m| m.name == plugin.name }
20
+ if metric_group.nil? || !metric_group.is_a?(CopperEgg::MetricGroup)
21
+ Bipbip.logger.info "Creating copperegg metric group `#{plugin.name}`"
22
+ metric_group = CopperEgg::MetricGroup.new(:name => plugin.name, :label => plugin.name, :frequency => plugin.frequency)
23
+ end
24
+ metric_group.frequency = plugin.frequency
25
+ metric_group.metrics = plugin.metrics_schema.map do |sample|
26
+ {
27
+ :name => sample[:name],
28
+ :type => 'ce_' + sample[:type],
29
+ :unit => sample[:unit],
30
+ }
31
+ end
32
+ metric_group.save
33
+
34
+ dashboard = @dashboards.detect { |d| d.name == plugin.name }
35
+ if dashboard.nil?
36
+ Bipbip.logger.info "Creating copperegg dashboard `#{plugin.name}`"
37
+ metrics = metric_group.metrics || []
38
+ CopperEgg::CustomDashboard.create(metric_group, :name => plugin.name, :identifiers => nil, :metrics => metrics)
39
+ end
40
+ end
41
+
42
+ def store_sample(plugin, time, data)
43
+ CopperEgg::MetricSample.save(plugin.name, plugin.metric_identifier, time.to_i, data)
44
+ end
45
+
46
+ def _load_metric_groups
47
+ Bipbip.logger.info 'Loading copperegg metric groups'
48
+ metric_groups = CopperEgg::MetricGroup.find
49
+ if metric_groups.nil?
50
+ Bipbip.logger.fatal 'Cannot load copperegg metric groups'
51
+ exit 1
52
+ end
53
+ metric_groups
54
+ end
55
+
56
+ def _load_dashboards
57
+ Bipbip.logger.info 'Loading copperegg dashboards'
58
+ dashboards = CopperEgg::CustomDashboard.find
59
+ if dashboards.nil?
60
+ Bipbip.logger.fatal 'Cannot load copperegg dashboards'
61
+ exit 1
62
+ end
63
+ dashboards
64
+ end
65
+
66
+ end
67
+ end
@@ -1,3 +1,3 @@
1
1
  module Bipbip
2
- VERSION = '0.1.9'
2
+ VERSION = '0.2.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bipbip
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.9
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cargo Media
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-12-16 00:00:00.000000000 Z
11
+ date: 2013-12-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: copperegg
@@ -80,6 +80,34 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rake
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rspec
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '2.0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '2.0'
83
111
  description: Agent to collect data for common server programs and push them to CopperEgg
84
112
  email: hello@cargomedia.ch
85
113
  executables:
@@ -91,7 +119,7 @@ files:
91
119
  - README.md
92
120
  - bin/bipbip
93
121
  - lib/bipbip/agent.rb
94
- - lib/bipbip/interruptible_sleep.rb
122
+ - lib/bipbip/helper.rb
95
123
  - lib/bipbip/plugin/apache2.rb
96
124
  - lib/bipbip/plugin/gearman.rb
97
125
  - lib/bipbip/plugin/memcached.rb
@@ -101,8 +129,11 @@ files:
101
129
  - lib/bipbip/plugin/php_apc.rb
102
130
  - lib/bipbip/plugin/redis.rb
103
131
  - lib/bipbip/plugin.rb
132
+ - lib/bipbip/storage/copperegg.rb
133
+ - lib/bipbip/storage.rb
104
134
  - lib/bipbip/version.rb
105
135
  - lib/bipbip.rb
136
+ - lib/interruptible_sleep.rb
106
137
  homepage: https://github.com/cargomedia/bipbip
107
138
  licenses:
108
139
  - MIT