cloudscale 0.0.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.
Files changed (54) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +22 -0
  3. data/README.md +33 -0
  4. data/bin/autospec +16 -0
  5. data/bin/bundler +16 -0
  6. data/bin/htmldiff +16 -0
  7. data/bin/ldiff +16 -0
  8. data/bin/monitor +16 -0
  9. data/bin/rake +16 -0
  10. data/bin/rspec +16 -0
  11. data/lib/cloudscale.rb +127 -0
  12. data/lib/cloudscale/monitor/agent/init.rb +63 -0
  13. data/lib/cloudscale/monitor/agent/init_charts.rb +60 -0
  14. data/lib/cloudscale/monitor/agent/init_menus.rb +44 -0
  15. data/lib/cloudscale/monitor/agent/preops/general_preop.rb +34 -0
  16. data/lib/cloudscale/monitor/agent/preops/preop.rb +72 -0
  17. data/lib/cloudscale/monitor/model/agent/agent_instance.rb +33 -0
  18. data/lib/cloudscale/monitor/model/agent/agent_instance_settings.rb +26 -0
  19. data/lib/cloudscale/monitor/model/constants/agent_instance_store.rb +42 -0
  20. data/lib/cloudscale/monitor/model/constants/agent_store.rb +23 -0
  21. data/lib/cloudscale/monitor/model/constants/influxdb_store.rb +23 -0
  22. data/lib/cloudscale/monitor/model/influxdb/influxdata.rb +28 -0
  23. data/lib/cloudscale/monitor/reporter/influxdb_reporter.rb +188 -0
  24. data/lib/cloudscale/plugins/mongo/data/os_chart.json +362 -0
  25. data/lib/cloudscale/plugins/mongo/data/os_menu.json +17 -0
  26. data/lib/cloudscale/plugins/mongo/mongo_db_status.rb +57 -0
  27. data/lib/cloudscale/plugins/mongo/mongo_replica_status.rb +103 -0
  28. data/lib/cloudscale/plugins/mongo/mongo_server_status.rb +172 -0
  29. data/lib/cloudscale/plugins/os/data/os_chart.json +362 -0
  30. data/lib/cloudscale/plugins/os/data/os_menu.json +17 -0
  31. data/lib/cloudscale/plugins/os/preops/plugin_preop.rb +56 -0
  32. data/lib/cloudscale/plugins/os/sigar_cpu_perc.rb +54 -0
  33. data/lib/cloudscale/plugins/os/sigar_disk_iops.rb +55 -0
  34. data/lib/cloudscale/plugins/os/sigar_disk_space.rb +54 -0
  35. data/lib/cloudscale/plugins/os/sigar_net_byte_information.rb +53 -0
  36. data/lib/cloudscale/plugins/os/sigar_packet_information.rb +63 -0
  37. data/lib/cloudscale/plugins/os/sigar_ram_usage.rb +46 -0
  38. data/lib/cloudscale/plugins/os/sigar_swap_usage.rb +46 -0
  39. data/lib/cloudscale/plugins/plugin.rb +98 -0
  40. data/lib/cloudscale/plugins/postgres/postgres_server_status.rb +143 -0
  41. data/lib/cloudscale/plugins/preops/plugin_mongodb_preop.rb +105 -0
  42. data/lib/cloudscale/plugins/preops/plugin_postgres_preop.rb +70 -0
  43. data/lib/cloudscale/registry.rb +48 -0
  44. data/lib/cloudscale/rest/rest_client.rb +198 -0
  45. data/lib/cloudscale/rest/rest_client_helper.rb +70 -0
  46. data/lib/cloudscale/schedule.rb +32 -0
  47. data/lib/cloudscale/store/agent/agent.store +7 -0
  48. data/lib/cloudscale/store/agent/agent_instance.store +11 -0
  49. data/lib/cloudscale/store/agent/influxdb.store +6 -0
  50. data/lib/cloudscale/store/plugin/token +1 -0
  51. data/lib/cloudscale/version.rb +8 -0
  52. data/lib/test/rest/rest_client_test.rb +50 -0
  53. data/lib/test/sigar/sigar_test.rb +36 -0
  54. metadata +264 -0
@@ -0,0 +1,17 @@
1
+ {
2
+ "os":{
3
+ "menuId" : "os",
4
+ "label" : "Operating System",
5
+ "description": "All Operating System relevant information",
6
+ "order" : 1,
7
+ "agentInstanceId" : null,
8
+ "subItems" : [
9
+ {
10
+ "menuId" : "os.overview",
11
+ "label" : "OS Overview",
12
+ "description" : "All relevant information regarding the currently running Operating System below the Application",
13
+ "order" : 1
14
+ }
15
+ ]
16
+ }
17
+ }
@@ -0,0 +1,56 @@
1
+ require "optparse"
2
+ require "logger"
3
+ require "csigar"
4
+ require "#{File.dirname(__FILE__)}/../../../monitor/agent/preops/preop"
5
+
6
+ ##
7
+ #
8
+ # @author Johannes Hiemer.
9
+ #
10
+ ##
11
+ module Cloudscale
12
+ module Plugins
13
+ class NullLogger < Logger
14
+ def initialize
15
+ end
16
+
17
+ def add(level, message)
18
+ # do nothing
19
+ end
20
+ end
21
+
22
+ class PluginPreop < Preops::Preop
23
+ include Singleton
24
+ @@options = {
25
+ }
26
+
27
+ def options
28
+ @@options
29
+ end
30
+
31
+ def register
32
+ init_charts("#{File.dirname(__FILE__)}/../data/os_chart.json")
33
+ init_menus("#{File.dirname(__FILE__)}/../data/os_menu.json")
34
+ end
35
+
36
+ def initialize
37
+ self.init
38
+
39
+ sigar = nil
40
+ begin
41
+ GC.disable
42
+ sigar = Csigar.new
43
+ sigar.logger = NullLogger.new
44
+ ensure
45
+ GC.enable
46
+ end
47
+ @sigar = sigar
48
+ end
49
+
50
+ def sigar
51
+ @sigar
52
+ end
53
+
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,54 @@
1
+ require "#{File.dirname(__FILE__)}/preops/plugin_preop"
2
+ require "#{File.dirname(__FILE__)}/../plugin"
3
+
4
+ ##
5
+ #
6
+ # @author Johannes Hiemer.
7
+ #
8
+ ##
9
+ module Cloudscale
10
+ module Plugins
11
+ class SigarCpuPerc < Plugins::Plugin
12
+
13
+ def is_enabled
14
+ true
15
+ end
16
+
17
+ def initialize
18
+ super
19
+ if is_enabled
20
+ @sigar = Plugins::PluginPreop.instance.sigar
21
+ end
22
+ end
23
+
24
+ def collect(agentInstanceId)
25
+ registry = Monitor::Registry.instance
26
+ metrics = Metrics::Agent.new
27
+
28
+ log.info("Calling Collect on SigarCpuPerformance")
29
+ cpu_perc = @sigar.cpu_perc
30
+
31
+ begin
32
+ registry.metrics["os.cpu.perc.sys"] = metrics.gauge :cpu_perc_sys do
33
+ { :value => cpu_perc.sys * 100 }
34
+ end
35
+ registry.metrics["os.cpu.perc.idle"] = metrics.gauge :cpu_perc_idle do
36
+ { :value => cpu_perc.idle * 100 }
37
+ end
38
+ registry.metrics["os.cpu.perc.nice"] = metrics.gauge :cpu_perc_nice do
39
+ { :value => cpu_perc.nice * 100 }
40
+ end
41
+ registry.metrics["os.cpu.perc.wait"] = metrics.gauge :cpu_perc_wait do
42
+ { :value => cpu_perc.wait * 100 }
43
+ end
44
+ registry.metrics["os.cpu.perc.combined"] = metrics.gauge :cpu_perc_combined do
45
+ { :value => cpu_perc.combined * 100 }
46
+ end
47
+ rescue Exception => e
48
+ puts e
49
+ end
50
+ end
51
+
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,55 @@
1
+ require "#{File.dirname(__FILE__)}/preops/plugin_preop"
2
+ require "#{File.dirname(__FILE__)}/../plugin"
3
+
4
+ ##
5
+ #
6
+ # @author Johannes Hiemer.
7
+ #
8
+ ##
9
+ module Cloudscale
10
+ module Plugins
11
+ class SigarDiskIops < Plugins::Plugin
12
+
13
+ def is_enabled
14
+ true
15
+ end
16
+
17
+ def initialize
18
+ super
19
+ if is_enabled
20
+ @sigar = Plugins::PluginPreop.instance.sigar
21
+ end
22
+ end
23
+
24
+ def collect(agentInstanceId)
25
+ registry = Monitor::Registry.instance
26
+ metrics = Metrics::Agent.new
27
+ log.info("Calling Collect on SigarDiskIops")
28
+
29
+ fslist = @sigar.file_system_list
30
+ fslist.each do |fs|
31
+ dir_name = fs.dir_name
32
+ begin
33
+ usage = @sigar.file_system_usage(dir_name)
34
+ dir = dir_name.gsub(/[^0-9A-Za-z]/, '')
35
+ registry.metrics["os.disk.iops.read." + dir] = metrics.gauge :iops_read do
36
+ { :value => usage.disk_reads }
37
+ end
38
+ registry.metrics["os.disk.iops.writes." + dir] = metrics.gauge :iops_write do
39
+ { :value => usage.disk_writes }
40
+ end
41
+ registry.metrics["os.disk.iops.read_bytes." + dir] = metrics.gauge :bytes_read do
42
+ { :value => usage.disk_read_bytes }
43
+ end
44
+ registry.metrics["os.disk.iops.write_bytes." + dir] = metrics.gauge :bytes_write do
45
+ { :value => usage.disk_write_bytes }
46
+ end
47
+ rescue Exception => e
48
+ puts e
49
+ end
50
+ end
51
+ end
52
+
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,54 @@
1
+ require "#{File.dirname(__FILE__)}/preops/plugin_preop"
2
+ require "#{File.dirname(__FILE__)}/../plugin"
3
+
4
+ ##
5
+ #
6
+ # @author Johannes Hiemer.
7
+ #
8
+ ##
9
+ module Cloudscale
10
+ module Plugins
11
+ class SigarDiskSpace < Plugins::Plugin
12
+
13
+ def is_enabled
14
+ true
15
+ end
16
+
17
+ def initialize
18
+ super
19
+ if is_enabled
20
+ @sigar = Plugins::PluginPreop.instance.sigar
21
+ end
22
+ end
23
+
24
+ def collect(agentInstanceId)
25
+ registry = Monitor::Registry.instance
26
+ metrics = Metrics::Agent.new
27
+ log.info("Calling Collect on SigarDiskSpace")
28
+
29
+ fslist = @sigar.file_system_list
30
+ fslist.each do |fs|
31
+ dir_name = fs.dir_name
32
+ begin
33
+ usage = @sigar.file_system_usage(dir_name)
34
+ dir = dir_name.gsub(/[^0-9A-Za-z]/, '')
35
+
36
+ registry.metrics["os.disk.usage.total." + dir] = metrics.gauge :usage_total do
37
+ { :value => usage.total * 1024 }
38
+ end
39
+ registry.metrics["os.disk.usage.free." + dir] = metrics.gauge :usage_free do
40
+ { :value => (usage.total - usage.free) * 1024 }
41
+ end
42
+ registry.metrics["os.disk.usage.available." + dir] = metrics.gauge :usage_available do
43
+ { :value => usage.avail * 1024 }
44
+ end
45
+
46
+ rescue Exception => e
47
+ puts e
48
+ end
49
+ end
50
+ end
51
+ end
52
+
53
+ end
54
+ end
@@ -0,0 +1,53 @@
1
+ require "#{File.dirname(__FILE__)}/preops/plugin_preop"
2
+ require "#{File.dirname(__FILE__)}/../plugin"
3
+
4
+ ##
5
+ #
6
+ # @author Johannes Hiemer.
7
+ #
8
+ ##
9
+ module Cloudscale
10
+ module Plugins
11
+ class SigarNetByteInformation < Plugins::Plugin
12
+
13
+ def is_enabled
14
+ true
15
+ end
16
+
17
+ def initialize
18
+ super
19
+ if is_enabled
20
+ @sigar = Plugins::PluginPreop.instance.sigar
21
+ end
22
+
23
+ end
24
+
25
+ def collect(agentInstanceId)
26
+ registry = Monitor::Registry.instance
27
+ metrics = Metrics::Agent.new
28
+ log.info("Calling Collect on SigarNetByteInformation")
29
+ iflist = @sigar.net_interface_list
30
+
31
+ iflist.each do |ifname|
32
+ ifconfig = @sigar.net_interface_config(ifname)
33
+ if (!ifname.include?(":"))
34
+ ifstat = @sigar.net_interface_stat(ifname)
35
+ begin
36
+
37
+ registry.metrics["os.network.received.bytes." + ifname] = metrics.gauge :bytes_received do
38
+ { :value => ifstat.rx_bytes }
39
+ end
40
+ registry.metrics["os.network.send.bytes." + ifname] = metrics.gauge :bytes_send do
41
+ { :value => ifstat.rx_bytes }
42
+ end
43
+
44
+ rescue Exception => e
45
+ puts e
46
+ end
47
+ end
48
+ end
49
+ end
50
+
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,63 @@
1
+ require "#{File.dirname(__FILE__)}/preops/plugin_preop"
2
+ require "#{File.dirname(__FILE__)}/../plugin"
3
+
4
+ ##
5
+ #
6
+ # @author Johannes Hiemer.
7
+ #
8
+ ##
9
+ module Cloudscale
10
+ module Plugins
11
+ class SigarNetPacketInformation < Plugins::Plugin
12
+
13
+ def is_enabled
14
+ true
15
+ end
16
+
17
+ def initialize
18
+ super
19
+ if is_enabled
20
+ @sigar = Plugins::PluginPreop.instance.sigar
21
+ end
22
+ end
23
+
24
+ def collect(agentInstanceId)
25
+ registry = Monitor::Registry.instance
26
+ metrics = Metrics::Agent.new
27
+ log.info("Calling Collect on SigarNetPacketInformation")
28
+ iflist = @sigar.net_interface_list
29
+
30
+ iflist.each do |ifname|
31
+ if (!ifname.include?(":"))
32
+ ifstat = @sigar.net_interface_stat(ifname)
33
+ begin
34
+ registry.metrics[("os.network.received.packets." + ifname).to_s] = metrics.gauge ("packets_received_" + ifname).to_sym do
35
+ { :value => ifstat.rx_packets }
36
+ end
37
+ registry.metrics[("os.network.received.errors.packets." + ifname).to_s] = metrics.gauge ("packets_errors_received_" + ifname).to_sym do
38
+ { :value => ifstat.rx_errors }
39
+ end
40
+ registry.metrics[("os.network.received.dropped.packets." + ifname).to_s] = metrics.gauge ("packets_dropped_received_" + ifname).to_sym do
41
+ { :value => ifstat.rx_dropped }
42
+ end
43
+
44
+ registry.metrics[("os.network.send.packets." + ifname).to_s] = metrics.gauge ("packets_send_" + ifname).to_sym do
45
+ { :value => ifstat.tx_packets }
46
+ end
47
+ registry.metrics[("os.network.send.errors.packets." + ifname).to_s] = metrics.gauge ("packets_errors_send_" + ifname).to_sym do
48
+ { :value => ifstat.tx_errors }
49
+ end
50
+ registry.metrics[("os.network.send.dropped.packets." + ifname).to_s] = metrics.gauge ("packets_dropped_send_" + ifname).to_sym do
51
+ { :value => ifstat.tx_dropped }
52
+ end
53
+
54
+ rescue Exception => e
55
+ puts e
56
+ end
57
+ end
58
+ end
59
+ end
60
+
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,46 @@
1
+ require "#{File.dirname(__FILE__)}/preops/plugin_preop"
2
+ require "#{File.dirname(__FILE__)}/../plugin"
3
+
4
+ ##
5
+ #
6
+ # @author Johannes Hiemer.
7
+ #
8
+ ##
9
+ module Cloudscale
10
+ module Plugins
11
+ class SigarRamUsage < Plugins::Plugin
12
+
13
+ def is_enabled
14
+ true
15
+ end
16
+
17
+ def initialize
18
+ super
19
+ if is_enabled
20
+ @sigar = Plugins::PluginPreop.instance.sigar
21
+ end
22
+ end
23
+
24
+ def collect(agentInstanceId)
25
+ registry = Monitor::Registry.instance
26
+ metrics = Metrics::Agent.new
27
+ log.info("Calling Collect on SigarRamUsage")
28
+ mem = @sigar.mem
29
+ begin
30
+ registry.metrics["os.ram.total"] = metrics.gauge :mem_total do
31
+ { :value => mem.total }
32
+ end
33
+ registry.metrics["os.ram.used"] = metrics.gauge :mem_used do
34
+ { :value => mem.used }
35
+ end
36
+ registry.metrics["os.ram.free"] = metrics.gauge :mem_free do
37
+ { :value => mem.free }
38
+ end
39
+ rescue Exception => e
40
+ puts e
41
+ end
42
+ end
43
+
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,46 @@
1
+ require "#{File.dirname(__FILE__)}/preops/plugin_preop"
2
+ require "#{File.dirname(__FILE__)}/../plugin"
3
+
4
+ ##
5
+ #
6
+ # @author Johannes Hiemer.
7
+ #
8
+ ##
9
+ module Cloudscale
10
+ module Plugins
11
+ class SigarSwapUsage < Plugins::Plugin
12
+
13
+ def is_enabled
14
+ true
15
+ end
16
+
17
+ def initialize
18
+ super
19
+ if is_enabled
20
+ @sigar = Plugins::PluginPreop.instance.sigar
21
+ end
22
+ end
23
+
24
+ def collect(agentInstanceId)
25
+ registry = Monitor::Registry.instance
26
+ metrics = Metrics::Agent.new
27
+ log.info("Calling Collect on SigarSwapUsage")
28
+ swap = @sigar.swap
29
+ begin
30
+ registry.metrics["os.swap.total"] = metrics.gauge :swap_total do
31
+ { :value => swap.total }
32
+ end
33
+ registry.metrics["os.swap.used"] = metrics.gauge :swap_used do
34
+ { :value => swap.used }
35
+ end
36
+ registry.metrics["os.swap.free"] = metrics.gauge :swap_free do
37
+ { :value => swap.free }
38
+ end
39
+ rescue Exception => e
40
+ puts e
41
+ end
42
+ end
43
+
44
+ end
45
+ end
46
+ end