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.
- checksums.yaml +7 -0
- data/LICENSE.txt +22 -0
- data/README.md +33 -0
- data/bin/autospec +16 -0
- data/bin/bundler +16 -0
- data/bin/htmldiff +16 -0
- data/bin/ldiff +16 -0
- data/bin/monitor +16 -0
- data/bin/rake +16 -0
- data/bin/rspec +16 -0
- data/lib/cloudscale.rb +127 -0
- data/lib/cloudscale/monitor/agent/init.rb +63 -0
- data/lib/cloudscale/monitor/agent/init_charts.rb +60 -0
- data/lib/cloudscale/monitor/agent/init_menus.rb +44 -0
- data/lib/cloudscale/monitor/agent/preops/general_preop.rb +34 -0
- data/lib/cloudscale/monitor/agent/preops/preop.rb +72 -0
- data/lib/cloudscale/monitor/model/agent/agent_instance.rb +33 -0
- data/lib/cloudscale/monitor/model/agent/agent_instance_settings.rb +26 -0
- data/lib/cloudscale/monitor/model/constants/agent_instance_store.rb +42 -0
- data/lib/cloudscale/monitor/model/constants/agent_store.rb +23 -0
- data/lib/cloudscale/monitor/model/constants/influxdb_store.rb +23 -0
- data/lib/cloudscale/monitor/model/influxdb/influxdata.rb +28 -0
- data/lib/cloudscale/monitor/reporter/influxdb_reporter.rb +188 -0
- data/lib/cloudscale/plugins/mongo/data/os_chart.json +362 -0
- data/lib/cloudscale/plugins/mongo/data/os_menu.json +17 -0
- data/lib/cloudscale/plugins/mongo/mongo_db_status.rb +57 -0
- data/lib/cloudscale/plugins/mongo/mongo_replica_status.rb +103 -0
- data/lib/cloudscale/plugins/mongo/mongo_server_status.rb +172 -0
- data/lib/cloudscale/plugins/os/data/os_chart.json +362 -0
- data/lib/cloudscale/plugins/os/data/os_menu.json +17 -0
- data/lib/cloudscale/plugins/os/preops/plugin_preop.rb +56 -0
- data/lib/cloudscale/plugins/os/sigar_cpu_perc.rb +54 -0
- data/lib/cloudscale/plugins/os/sigar_disk_iops.rb +55 -0
- data/lib/cloudscale/plugins/os/sigar_disk_space.rb +54 -0
- data/lib/cloudscale/plugins/os/sigar_net_byte_information.rb +53 -0
- data/lib/cloudscale/plugins/os/sigar_packet_information.rb +63 -0
- data/lib/cloudscale/plugins/os/sigar_ram_usage.rb +46 -0
- data/lib/cloudscale/plugins/os/sigar_swap_usage.rb +46 -0
- data/lib/cloudscale/plugins/plugin.rb +98 -0
- data/lib/cloudscale/plugins/postgres/postgres_server_status.rb +143 -0
- data/lib/cloudscale/plugins/preops/plugin_mongodb_preop.rb +105 -0
- data/lib/cloudscale/plugins/preops/plugin_postgres_preop.rb +70 -0
- data/lib/cloudscale/registry.rb +48 -0
- data/lib/cloudscale/rest/rest_client.rb +198 -0
- data/lib/cloudscale/rest/rest_client_helper.rb +70 -0
- data/lib/cloudscale/schedule.rb +32 -0
- data/lib/cloudscale/store/agent/agent.store +7 -0
- data/lib/cloudscale/store/agent/agent_instance.store +11 -0
- data/lib/cloudscale/store/agent/influxdb.store +6 -0
- data/lib/cloudscale/store/plugin/token +1 -0
- data/lib/cloudscale/version.rb +8 -0
- data/lib/test/rest/rest_client_test.rb +50 -0
- data/lib/test/sigar/sigar_test.rb +36 -0
- 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
|