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,198 @@
1
+ require "yaml"
2
+ require "json"
3
+ require "rest_client"
4
+ require "singleton"
5
+ require "#{File.dirname(__FILE__)}/rest_client_helper"
6
+
7
+ ##
8
+ #
9
+ # @author Johannes Hiemer.
10
+ #
11
+ ##
12
+ class RestClientWrapper < RestClientHelper
13
+ include Singleton
14
+
15
+ attr_accessor :endpoint, :key, :token, :header
16
+
17
+ def load_hash()
18
+ begin
19
+ YAML.load(File.read("#{File.dirname(__FILE__)}/../store/agent/agent.store"))
20
+ rescue
21
+ return nil
22
+ end
23
+ end
24
+
25
+ def initialize
26
+ if (endpoint == nil && key == nil && token == nil)
27
+ hash = load_hash()
28
+ end
29
+ @endpoint = hash["host"] + ":" + hash["port"].to_s + hash["path"].to_s
30
+ @key = hash["key"]
31
+ @token = load_token("token")
32
+ @header = {
33
+ :key => key,
34
+ :token => token,
35
+ 'Content-Type' => 'application/json',
36
+ }
37
+ end
38
+
39
+ def list_with_params(entity, params)
40
+ uri = uri_with_params(entity, params)
41
+ load(uri)
42
+ end
43
+
44
+ def list(entity)
45
+ uri = uri(entity)
46
+ load(uri)
47
+ end
48
+
49
+ def get(entity, id)
50
+ uri = uriWithId(entity, id)
51
+ load(uri)
52
+ end
53
+
54
+ def load(uri)
55
+ RestClient.get(uri, header) { | response, request, result |
56
+ case response.code
57
+ when 200
58
+ return JSON.parse(response.body)
59
+ else
60
+ puts request.to_yaml
61
+ puts response.code
62
+ puts response.body
63
+ end
64
+ }
65
+ end
66
+
67
+ def searchOne(entity, method, params)
68
+ searchQuery = String::new(uri(entity) + '/search/' + method + '?')
69
+
70
+ params.each { | key, value|
71
+ searchQuery += key.to_s + '=' + value.to_s + '&'
72
+ }
73
+
74
+ RestClient.get(searchQuery, header) { | response, request, result |
75
+ case response.code
76
+ when 200
77
+ responseBody = JSON.parse(response.body)
78
+ if (responseBody["content"].length == 1)
79
+ return responseBody["content"][0]
80
+ end
81
+ else
82
+ puts request.to_yaml
83
+ puts response.code
84
+ puts response.body
85
+ end
86
+ }
87
+ end
88
+
89
+ def searchAny(entity, method, params)
90
+ searchQuery = String::new(uri(entity) + '/search/' + method + '?')
91
+
92
+ params.each { | key, value|
93
+ searchQuery += key.to_s + '=' + value.to_s + '&'
94
+ }
95
+
96
+ RestClient.get(searchQuery, header) { | response, request, result |
97
+ case response.code
98
+ when 200
99
+ return JSON.parse(response.body)
100
+ else
101
+ puts request.to_yaml
102
+ puts response.code
103
+ puts response.body
104
+ end
105
+ }
106
+ end
107
+
108
+ def post(entity, value)
109
+
110
+ if (value.is_a?(Object) || value.is_a?(Hash))
111
+ hash = value.to_dh
112
+ end
113
+
114
+ RestClient.post(uri(entity), hash.to_json, header) { | response, request, result |
115
+ case response.code
116
+ when 200, 201
117
+ if (response.body != nil && response.body.length > 2)
118
+ return JSON.parse(response.body)
119
+ end
120
+ else
121
+ puts request.to_yaml
122
+ puts response.code
123
+ puts response.body
124
+ end
125
+ }
126
+ end
127
+
128
+ def put(entity, id, value)
129
+ id = id.to_s.gsub('{?projection}','')
130
+
131
+ if (value.is_a?(Object) || value.is_a?(Hash))
132
+ hash = value.to_dh
133
+ end
134
+
135
+ RestClient.put(uriWithId(entity, id), hash.to_json, header) { | response, request, result |
136
+ case response.code
137
+ when 200, 204
138
+ if (response.body != nil && response.body.length > 2)
139
+ return JSON.parse(response.body)
140
+ end
141
+ else
142
+ puts request.to_yaml
143
+ puts response.code
144
+ puts response.body
145
+ end
146
+ }
147
+ end
148
+
149
+ def patch(entity, id, value)
150
+ id = id.to_s.gsub('{?projection}','')
151
+
152
+ if (value.is_a?(Object) || value.is_a?(Hash))
153
+ hash = value.to_dh
154
+ end
155
+
156
+ RestClient.patch(uriWithId(entity, id), hash.to_json, header) { | response, request, result |
157
+ case response.code
158
+ when 200, 204
159
+ if (response.body != nil && response.body.length > 2)
160
+ return JSON.parse(response.body)
161
+ end
162
+ else
163
+ puts request.to_yaml
164
+ puts response.code
165
+ puts response.body
166
+ end
167
+ }
168
+ end
169
+
170
+ def delete(entity, id)
171
+ id = id.to_s.gsub('{?projection}','')
172
+
173
+ RestClient.delete(uriWithId(entity, id), header) { | response, request, result |
174
+ case response.code
175
+ when 200, 204
176
+ else
177
+ puts response.code
178
+ end
179
+ }
180
+ end
181
+
182
+ def customDelete(entity, method, params)
183
+ id = id.to_s.gsub('{?projection}','')
184
+
185
+ query = String::new(uri(entity) + '/' + method + '?')
186
+ params.each { | key, value|
187
+ query += key.to_s + '=' + value.to_s + '&'
188
+ }
189
+ RestClient.delete(query, header) { | response, request, result |
190
+ case response.code
191
+ when 200
192
+ else
193
+ puts response.code
194
+ end
195
+ }
196
+ end
197
+
198
+ end
@@ -0,0 +1,70 @@
1
+
2
+ ##
3
+ #
4
+ # @author Johannes Hiemer.
5
+ #
6
+ ##
7
+ class RestClientHelper
8
+
9
+ def load_token(token)
10
+ db = FSDB::Database.new("#{File.dirname(__FILE__)}/../store/plugin/")
11
+ return db[token]
12
+ end
13
+
14
+ def uri(entity)
15
+ if (!endpoint.to_s.end_with? '/')
16
+ @endpoint << '/'
17
+ end
18
+ String::new(@endpoint + entity)
19
+ end
20
+
21
+ def uri_with_params(entity, params)
22
+ if (!endpoint.to_s.end_with? '/')
23
+ @endpoint << '/'
24
+ end
25
+
26
+ uri = String::new(@endpoint + entity)
27
+ if (params.is_a?(Hash))
28
+ uri << '?'
29
+ params.each { | key, value|
30
+ uri += key.to_s + '=' + value.to_s + '&'
31
+ }
32
+ end
33
+ return uri
34
+ end
35
+
36
+ def uriWithId(entity, id)
37
+ if (!endpoint.to_s.end_with? '/')
38
+ @endpoint << '/'
39
+ end
40
+ String::new(@endpoint + entity + '/' + id.to_s)
41
+ end
42
+
43
+ def self.load_entity_id(entity)
44
+ if (entity != nil && entity["links"].is_a?(Array))
45
+ entity["links"].each { | link |
46
+ if (link["rel"] == "self")
47
+ return link["href"][link["href"].rindex('/') + 1, link["href"].length]
48
+ end
49
+ }
50
+ end
51
+ end
52
+
53
+ def self.load_entity_ref(entity)
54
+ if (entity != nil && entity["links"].is_a?(Array))
55
+ entity["links"].each { | link |
56
+ if (link["rel"] == "self")
57
+ return link
58
+ end
59
+ }
60
+ end
61
+ end
62
+
63
+ def removeLinks(hash, key)
64
+ if (hash.key?(key))
65
+ hash.tap { | x |
66
+ x.delete(key)
67
+ }
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,32 @@
1
+ require "rufus-scheduler"
2
+ require "#{File.dirname(__FILE__)}/monitor/reporter/influxdb_reporter"
3
+
4
+ ##
5
+ #
6
+ # @author Johannes Hiemer.
7
+ # rufus-scheduler: https://github.com/jmettraux/rufus-scheduler
8
+ # rest-client: https://github.com/rest-client/rest-client
9
+ #
10
+ ##
11
+ module Cloudscale
12
+ module Monitor
13
+ class Schedule
14
+ def initialize(plugins, agentInstanceId)
15
+ scheduler = Rufus::Scheduler.new
16
+ registry = Monitor::Registry.instance
17
+
18
+ scheduler.every '5s', :first => :now do
19
+ plugins.each do | plugin |
20
+ if plugin.respond_to?('collect') && plugin.is_enabled
21
+ plugin.collect(agentInstanceId)
22
+ end
23
+ end
24
+
25
+ Monitor::InfluxDbReporter.instance.report(registry.metrics)
26
+ end
27
+
28
+ scheduler.join
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,7 @@
1
+ ---
2
+ agentId: 32093209323
3
+ host: "localhost"
4
+ path : "/service"
5
+ port: 8080
6
+ key: "monitoring"
7
+ token: "e2FsZz1IUzI1NiwgdHlwPUNUfQ.e3Y9MCwgZD1tb25pdG9yaW5nLCBpYXQ9MTQwNDc1NzMyNH0.rG0biCuH_-X1vulEr19H2m42i4DGRR8PGwgXastyk3Q"
@@ -0,0 +1,11 @@
1
+ ---
2
+ agent: http://localhost:8080/service/agents/532c68eca5ee0383d3a07a91
3
+ agentInstanceId: de0236433156a4417943ef9f55d52234
4
+ token: e2FsZz1IUzI1NiwgdHlwPUNUfQ.e3Y9MCwgZD1tb25pdG9yaW5nLCBpYXQ9MTQwNDc1NzMyNH0.rG0biCuH_-X1vulEr19H2m42i4DGRR8PGwgXastyk3Q
5
+ server: jhiemer-evoila.fritz.box
6
+ settings: !ruby/object:Cloudscale::Monitor::Settings
7
+ measurementCollectionInterval: 15
8
+ coredataCollectionInterval: 0
9
+ tableCollectionInterval: 1500
10
+ reportingInterval: 5
11
+ started: 1439644965000
@@ -0,0 +1,6 @@
1
+ ---
2
+ host: 88.198.249.51
3
+ port: 8086
4
+ database: monitoring
5
+ username: monitoring
6
+ password: monitoring
@@ -0,0 +1 @@
1
+ I"{e2FsZz1IUzI1NiwgdHlwPUNUfQ.e3Y9MCwgZD1tb25pdG9yaW5nLCBpYXQ9MTQwNDc1NzMyNH0.rG0biCuH_-X1vulEr19H2m42i4DGRR8PGwgXastyk3Q:ET
@@ -0,0 +1,8 @@
1
+ ##
2
+ #
3
+ # @author Johannes Hiemer.
4
+ #
5
+ ##
6
+ module Cloudscale
7
+ VERSION = "0.0.1" unless const_defined?(:VERSION)
8
+ end
@@ -0,0 +1,50 @@
1
+ require "test/unit"
2
+ require "yaml"
3
+ require "json"
4
+ require "#{File.dirname(__FILE__)}/../../lib/rest/rest_client"
5
+
6
+
7
+ ##
8
+ #
9
+ # @author Johannes Hiemer.
10
+ #
11
+ ##
12
+ class RestClientWrapperTest < Test::Unit::TestCase
13
+
14
+ def test_search
15
+ client = RestClientWrapper.instance
16
+ search = client.searchOne('agentInstances', 'findByAgentId', { :id => "5315cf2d4d1a44fb9d21b1f9" })
17
+
18
+ assert_equal(search.is_a?(Array), false)
19
+ assert_equal(search["links"].is_a?(Array), true)
20
+ end
21
+
22
+ def test_list
23
+ client = RestClientWrapper.instance
24
+ agents = client.list('agents')
25
+
26
+ assert_equal(agents["links"].is_a?(Array), true)
27
+ assert_equal(agents["content"].is_a?(Array), true)
28
+ end
29
+
30
+ def test_get
31
+ client = RestClientWrapper.instance
32
+ agent = client.get('agents', '5315cf2d4d1a44fb9d21b1f9')
33
+
34
+ assert_equal(agent["links"].is_a?(Array), true)
35
+ end
36
+
37
+ def test_list_with_params
38
+ client = RestClientWrapper.instance
39
+
40
+ $i = 0
41
+ $num = 1000
42
+
43
+ while $i < $num do
44
+ units = client.list_with_params('units', { :size => 100 })
45
+ assert_equal(units["content"].is_a?(Array), true)
46
+ $i +=1
47
+ end
48
+ end
49
+
50
+ end
@@ -0,0 +1,36 @@
1
+ require "yaml"
2
+ require "logger"
3
+ require "test/unit"
4
+ require "csigar"
5
+
6
+ ##
7
+ #
8
+ # @author Johannes Hiemer.
9
+ #
10
+ ##
11
+ class SigarUnitTest < Test::Unit::TestCase
12
+ def setup
13
+ end
14
+
15
+ def format_size(size)
16
+ return Csigar.format_size(size * 1024)
17
+ end
18
+
19
+ def test_cpu()
20
+ sigar = Csigar.new
21
+
22
+ puts "hekljelkeml"
23
+ puts sigar
24
+
25
+ sigar.cpu_list.each do |cpu|
26
+ puts cpu.user.to_s << " user"
27
+ puts cpu.sys.to_s << " sys"
28
+ puts cpu.idle.to_s << " idle"
29
+ puts cpu.wait.to_s << " wait"
30
+ puts cpu.irq.to_s << " irq"
31
+ puts cpu.soft_irq.to_s << " soft_irq"
32
+ puts cpu.stolen.to_s << " stolen"
33
+ puts cpu.total.to_s << " total"
34
+ end
35
+ end
36
+ end
metadata ADDED
@@ -0,0 +1,264 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cloudscale
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Johannes Hiemer
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-08-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rest_client
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.7'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.7'
27
+ - !ruby/object:Gem::Dependency
28
+ name: OptionParser
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '0.5'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '0.5'
41
+ - !ruby/object:Gem::Dependency
42
+ name: hashable
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '0.1'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '0.1'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rufus-scheduler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '3.0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: '3.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: fsdb
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: '0.7'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: '0.7'
83
+ - !ruby/object:Gem::Dependency
84
+ name: bunny
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ~>
88
+ - !ruby/object:Gem::Version
89
+ version: 1.4.0
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ~>
95
+ - !ruby/object:Gem::Version
96
+ version: 1.4.0
97
+ - !ruby/object:Gem::Dependency
98
+ name: csigar
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ~>
102
+ - !ruby/object:Gem::Version
103
+ version: 0.7.4
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ~>
109
+ - !ruby/object:Gem::Version
110
+ version: 0.7.4
111
+ - !ruby/object:Gem::Dependency
112
+ name: influxdb
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ~>
116
+ - !ruby/object:Gem::Version
117
+ version: 0.1.9
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ~>
123
+ - !ruby/object:Gem::Version
124
+ version: 0.1.9
125
+ - !ruby/object:Gem::Dependency
126
+ name: ruby-metrics
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ~>
130
+ - !ruby/object:Gem::Version
131
+ version: 0.9.3
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ~>
137
+ - !ruby/object:Gem::Version
138
+ version: 0.9.3
139
+ - !ruby/object:Gem::Dependency
140
+ name: bundler
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ~>
144
+ - !ruby/object:Gem::Version
145
+ version: '1.7'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ~>
151
+ - !ruby/object:Gem::Version
152
+ version: '1.7'
153
+ - !ruby/object:Gem::Dependency
154
+ name: rake
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ~>
158
+ - !ruby/object:Gem::Version
159
+ version: '10.0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ~>
165
+ - !ruby/object:Gem::Version
166
+ version: '10.0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: rspec
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ~>
172
+ - !ruby/object:Gem::Version
173
+ version: '2.14'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ~>
179
+ - !ruby/object:Gem::Version
180
+ version: '2.14'
181
+ description: A Monitoring Client for Cloud Infrastructure provided by evoila.de
182
+ email:
183
+ - jhiemer@cloudscale.de
184
+ executables: []
185
+ extensions: []
186
+ extra_rdoc_files: []
187
+ files:
188
+ - bin/autospec
189
+ - bin/bundler
190
+ - bin/htmldiff
191
+ - bin/ldiff
192
+ - bin/monitor
193
+ - bin/rake
194
+ - bin/rspec
195
+ - lib/cloudscale/monitor/agent/init.rb
196
+ - lib/cloudscale/monitor/agent/init_charts.rb
197
+ - lib/cloudscale/monitor/agent/init_menus.rb
198
+ - lib/cloudscale/monitor/agent/preops/general_preop.rb
199
+ - lib/cloudscale/monitor/agent/preops/preop.rb
200
+ - lib/cloudscale/monitor/model/agent/agent_instance.rb
201
+ - lib/cloudscale/monitor/model/agent/agent_instance_settings.rb
202
+ - lib/cloudscale/monitor/model/constants/agent_instance_store.rb
203
+ - lib/cloudscale/monitor/model/constants/agent_store.rb
204
+ - lib/cloudscale/monitor/model/constants/influxdb_store.rb
205
+ - lib/cloudscale/monitor/model/influxdb/influxdata.rb
206
+ - lib/cloudscale/monitor/reporter/influxdb_reporter.rb
207
+ - lib/cloudscale/plugins/mongo/data/os_chart.json
208
+ - lib/cloudscale/plugins/mongo/data/os_menu.json
209
+ - lib/cloudscale/plugins/mongo/mongo_db_status.rb
210
+ - lib/cloudscale/plugins/mongo/mongo_replica_status.rb
211
+ - lib/cloudscale/plugins/mongo/mongo_server_status.rb
212
+ - lib/cloudscale/plugins/os/data/os_chart.json
213
+ - lib/cloudscale/plugins/os/data/os_menu.json
214
+ - lib/cloudscale/plugins/os/preops/plugin_preop.rb
215
+ - lib/cloudscale/plugins/os/sigar_cpu_perc.rb
216
+ - lib/cloudscale/plugins/os/sigar_disk_iops.rb
217
+ - lib/cloudscale/plugins/os/sigar_disk_space.rb
218
+ - lib/cloudscale/plugins/os/sigar_net_byte_information.rb
219
+ - lib/cloudscale/plugins/os/sigar_packet_information.rb
220
+ - lib/cloudscale/plugins/os/sigar_ram_usage.rb
221
+ - lib/cloudscale/plugins/os/sigar_swap_usage.rb
222
+ - lib/cloudscale/plugins/plugin.rb
223
+ - lib/cloudscale/plugins/postgres/postgres_server_status.rb
224
+ - lib/cloudscale/plugins/preops/plugin_mongodb_preop.rb
225
+ - lib/cloudscale/plugins/preops/plugin_postgres_preop.rb
226
+ - lib/cloudscale/registry.rb
227
+ - lib/cloudscale/rest/rest_client.rb
228
+ - lib/cloudscale/rest/rest_client_helper.rb
229
+ - lib/cloudscale/schedule.rb
230
+ - lib/cloudscale/store/agent/agent.store
231
+ - lib/cloudscale/store/agent/agent_instance.store
232
+ - lib/cloudscale/store/agent/influxdb.store
233
+ - lib/cloudscale/store/plugin/token
234
+ - lib/cloudscale/version.rb
235
+ - lib/cloudscale.rb
236
+ - lib/test/rest/rest_client_test.rb
237
+ - lib/test/sigar/sigar_test.rb
238
+ - LICENSE.txt
239
+ - README.md
240
+ homepage: http://www.evoila.de
241
+ licenses:
242
+ - MIT
243
+ metadata: {}
244
+ post_install_message:
245
+ rdoc_options: []
246
+ require_paths:
247
+ - lib
248
+ required_ruby_version: !ruby/object:Gem::Requirement
249
+ requirements:
250
+ - - '>='
251
+ - !ruby/object:Gem::Version
252
+ version: '0'
253
+ required_rubygems_version: !ruby/object:Gem::Requirement
254
+ requirements:
255
+ - - '>='
256
+ - !ruby/object:Gem::Version
257
+ version: '0'
258
+ requirements: []
259
+ rubyforge_project:
260
+ rubygems_version: 2.0.14
261
+ signing_key:
262
+ specification_version: 4
263
+ summary: Cloud Monitoring of evoila.de
264
+ test_files: []