ocular 0.1.20 → 0.1.22

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: b708d299a7b3b89d8a5cafd01e951e425c92f5a9
4
- data.tar.gz: d38f64555894415292a57b0f6fd2533d18f1e61f
3
+ metadata.gz: f6c2b17d2ac03cbbe71f12bc7cc7a39e8d043762
4
+ data.tar.gz: 83919943be706be6b233ba9ad1841484f5f4a450
5
5
  SHA512:
6
- metadata.gz: 3a3b598021d288280c3ea97e4e899fd5ddc47ed291701ea36c4563a819cc3d017e85d766d47fffb78b72d9c8b0bfbbadef259505d0c5a12bcceb6d152cdc84f6
7
- data.tar.gz: d17343570d2be86673a7785e640acf8ff0edde04d86136bc2640fbc5f6b266db5a6e4d734415e818ceee3bdebc157936f94103a35613daaa97f77d3e2974eda6
6
+ metadata.gz: 20d1e8a42ebd9e4c8b9b125f31d639b25d3d80c8fdd3a8f92acf41095ff21743faf6791530de4ef00543e6836d41bbf6cb91fc628d033b6bd9bf7d2d04c3e0e6
7
+ data.tar.gz: 55789022a0f6aa864b73d2321cc8367a01d4b4f116ed77cbd06c40ea3cfd4db0dda638436ea827c98bbd604f908d4ff52b017326561dd0747ff5d9adeeb9909f
@@ -0,0 +1,38 @@
1
+ require 'logger'
2
+ require 'net/http'
3
+ require 'cgi'
4
+
5
+ class Ocular
6
+ module DSL
7
+ module Cache
8
+
9
+ def cache_set(key, value, ttl=nil)
10
+ m = mysql()
11
+ if ttl
12
+ ttl = Time.now.to_i + ttl.to_i
13
+ end
14
+ begin
15
+ m.query("REPLACE INTO ocular_cache VALUES('#{m.escape(key)}', '#{m.escape(value)}', #{ttl == nil ? "NULL" : ttl});")
16
+ rescue Mysql2::Error => e
17
+ puts "Got #{e}, #{e.to_s}"
18
+ if e.to_s.include?("doesn't exist")
19
+ m.query("CREATE TABLE IF NOT EXISTS ocular_cache (keyname varchar(100) PRIMARY KEY, value text, expires int(11) null)")
20
+ m.query("REPLACE INTO ocular_cache VALUES('#{m.escape(key)}', '#{m.escape(value)}', #{ttl == nil ? "NULL" : ttl});")
21
+ end
22
+ end
23
+ end
24
+
25
+ def cache_get(key)
26
+ m = mysql()
27
+ begin
28
+ ret = m.query("SELECT value FROM ocular_cache WHERE keyname = '#{m.escape(key)}' AND (expires IS NULL OR expires > UNIX_TIMESTAMP(NOW()))").first
29
+ return ret["value"]
30
+ rescue
31
+ return nil
32
+ end
33
+ end
34
+
35
+ end
36
+
37
+ end
38
+ end
@@ -19,4 +19,6 @@ require 'ocular/dsl/ssh.rb'
19
19
  require 'ocular/dsl/orbit.rb'
20
20
  require 'ocular/dsl/mysql.rb'
21
21
  require 'ocular/dsl/rabbitmq.rb'
22
+ require 'ocular/dsl/graphite.rb'
23
+ require 'ocular/dsl/cache.rb'
22
24
 
@@ -0,0 +1,64 @@
1
+ require 'logger'
2
+ require 'net/http'
3
+ require 'cgi'
4
+
5
+ class Ocular
6
+ module DSL
7
+ module Graphite
8
+
9
+ #add_help "graphite", "what?"
10
+
11
+ def graphite(target, options = {})
12
+ datasources = ::Ocular::Settings::get(:datasources)
13
+ if !datasources or !datasources[:graphite]
14
+ raise "No graphite client settings"
15
+ end
16
+ settings = datasources[:graphite]
17
+
18
+ uri = URI.parse(settings[:url])
19
+ http = Net::HTTP.new(uri.host, uri.port)
20
+ http.use_ssl = uri.instance_of?(URI::HTTPS)
21
+
22
+ if !options[:from]
23
+ options[:from] = "-1min"
24
+ end
25
+
26
+ if options[:format]
27
+ options.delete(:format)
28
+ end
29
+
30
+ query = "/render?target=#{CGI.escape(target)}&format=json"
31
+ options.each do |k, v|
32
+ query += "&#{k}=#{CGI.escape(v)}"
33
+ end
34
+
35
+ request = Net::HTTP::Get.new(query)
36
+ response = http.request(request)
37
+ if !response
38
+ raise "error, no response from post request"
39
+ end
40
+ if response.code.to_i != 200
41
+ raise "Invalid response from graphite for query #{query}. Response code: #{response.code}, response body: #{response.body}"
42
+ end
43
+
44
+ return JSON.parse(response.body)
45
+ end
46
+
47
+ def graphite_get_latests(target, options = {})
48
+ values = {}
49
+ response = graphite(target, options)
50
+ response.each do |reply|
51
+ # Discard null replies
52
+ # sort in descending order
53
+ # pick latests datapoint
54
+ # from that pick the value
55
+ values[reply["target"]] = reply["datapoints"].select {|x| x[0] }.sort {|a,b| b[1] <=> a[1]}.first[0]
56
+ end
57
+
58
+ return values
59
+ end
60
+
61
+ end
62
+
63
+ end
64
+ end
@@ -18,6 +18,8 @@ class Ocular
18
18
  include Ocular::DSL::Orbit
19
19
  include Ocular::DSL::MySQL
20
20
  include Ocular::DSL::RabbitMQ
21
+ include Ocular::DSL::Graphite
22
+ include Ocular::DSL::Cache
21
23
 
22
24
  include Ocular::Inputs::Cron::DSL
23
25
 
@@ -27,6 +27,8 @@ class Ocular
27
27
  include Ocular::DSL::Etcd
28
28
  include Ocular::DSL::MySQL
29
29
  include Ocular::DSL::RabbitMQ
30
+ include Ocular::DSL::Graphite
31
+ include Ocular::DSL::Cache
30
32
 
31
33
  include Ocular::Inputs::HTTP::DSL
32
34
  include Ocular::Inputs::HTTP::ErrorDSL
@@ -25,7 +25,7 @@ class Ocular
25
25
  def reconnect()
26
26
  @kafka = Kafka.new(@settings[:client])
27
27
  end
28
-
28
+
29
29
  def debug(message = nil, &block)
30
30
  add(Severity::DEBUG, message, @run_id, &block)
31
31
  end
@@ -64,8 +64,9 @@ class Ocular
64
64
  begin
65
65
  @producer.produce(@formatter.format_message(severity, Time.now, run_id, message), topic: @settings[:topic], partition_key: run_id)
66
66
  @producer.deliver_messages
67
- rescue RuntimeError => e
67
+ rescue StandardError => e
68
68
  STDERR.puts "Error on producing kafka message: #{e}"
69
+ STDERR.puts "Message was #{message}, stacktrace: #{e.backtrace.join("\n")}"
69
70
  end
70
71
  end
71
72
 
@@ -73,8 +74,9 @@ class Ocular
73
74
  begin
74
75
  @producer.produce(@formatter.format_event(property, value, Time.now, run_id), topic: @settings[:topic], partition_key: run_id)
75
76
  @producer.deliver_messages
76
- rescue RuntimeError => e
77
+ rescue StandardError => e
77
78
  STDERR.puts "Error on producing kafka log_event: #{e}"
79
+ STDERR.puts "#{property} => #{value}, stacktrace: #{e.backtrace.join("\n")}"
78
80
  end
79
81
  end
80
82
 
@@ -82,8 +84,9 @@ class Ocular
82
84
  begin
83
85
  @producer.produce(@formatter.format_cause(type, environment, Time.now, run_id), topic: @settings[:topic], partition_key: run_id)
84
86
  @producer.deliver_messages
85
- rescue RuntimeError => e
87
+ rescue StandardError => e
86
88
  STDERR.puts "Error on producing kafka log_cause: #{e}"
89
+ STDERR.puts "type: #{type}, stacktrace: #{e.backtrace.join("\n")}"
87
90
  end
88
91
 
89
92
  end
@@ -92,8 +95,10 @@ class Ocular
92
95
  begin
93
96
  @producer.produce(@formatter.format_event("timing:" + key, value, Time.now, run_id), topic: @settings[:topic], partition_key: run_id)
94
97
  @producer.deliver_messages
95
- rescue RuntimeError => e
98
+ rescue StandardError => e
96
99
  STDERR.puts "Error on producing kafka log_timing: #{e}"
100
+ STDERR.puts "Timing: #{key} => #{value}, stacktrace: #{e.backtrace.join("\n")}"
101
+
97
102
  end
98
103
 
99
104
  end
@@ -1,3 +1,3 @@
1
1
  class Ocular
2
- Version = "0.1.20"
2
+ Version = "0.1.22"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ocular
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.20
4
+ version: 0.1.22
5
5
  platform: ruby
6
6
  authors:
7
7
  - Juho Mäkinen
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-05-19 00:00:00.000000000 Z
11
+ date: 2016-07-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rye
@@ -17,13 +17,13 @@ dependencies:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
19
  version: 0.9.13
20
- type: :runtime
21
- prerelease: false
22
20
  version_requirements: !ruby/object:Gem::Requirement
23
21
  requirements:
24
22
  - - '='
25
23
  - !ruby/object:Gem::Version
26
24
  version: 0.9.13
25
+ prerelease: false
26
+ type: :runtime
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: fog
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -31,13 +31,13 @@ dependencies:
31
31
  - - '='
32
32
  - !ruby/object:Gem::Version
33
33
  version: 1.37.0
34
- type: :runtime
35
- prerelease: false
36
34
  version_requirements: !ruby/object:Gem::Requirement
37
35
  requirements:
38
36
  - - '='
39
37
  - !ruby/object:Gem::Version
40
38
  version: 1.37.0
39
+ prerelease: false
40
+ type: :runtime
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: puma
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -45,13 +45,13 @@ dependencies:
45
45
  - - '='
46
46
  - !ruby/object:Gem::Version
47
47
  version: 2.16.0
48
- type: :runtime
49
- prerelease: false
50
48
  version_requirements: !ruby/object:Gem::Requirement
51
49
  requirements:
52
50
  - - '='
53
51
  - !ruby/object:Gem::Version
54
52
  version: 2.16.0
53
+ prerelease: false
54
+ type: :runtime
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rack
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -59,13 +59,13 @@ dependencies:
59
59
  - - '='
60
60
  - !ruby/object:Gem::Version
61
61
  version: 1.6.4
62
- type: :runtime
63
- prerelease: false
64
62
  version_requirements: !ruby/object:Gem::Requirement
65
63
  requirements:
66
64
  - - '='
67
65
  - !ruby/object:Gem::Version
68
66
  version: 1.6.4
67
+ prerelease: false
68
+ type: :runtime
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rack-protection
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -73,13 +73,13 @@ dependencies:
73
73
  - - '='
74
74
  - !ruby/object:Gem::Version
75
75
  version: 1.5.3
76
- type: :runtime
77
- prerelease: false
78
76
  version_requirements: !ruby/object:Gem::Requirement
79
77
  requirements:
80
78
  - - '='
81
79
  - !ruby/object:Gem::Version
82
80
  version: 1.5.3
81
+ prerelease: false
82
+ type: :runtime
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: faraday
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -87,13 +87,13 @@ dependencies:
87
87
  - - '='
88
88
  - !ruby/object:Gem::Version
89
89
  version: 0.9.2
90
- type: :runtime
91
- prerelease: false
92
90
  version_requirements: !ruby/object:Gem::Requirement
93
91
  requirements:
94
92
  - - '='
95
93
  - !ruby/object:Gem::Version
96
94
  version: 0.9.2
95
+ prerelease: false
96
+ type: :runtime
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: etcd
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -101,13 +101,13 @@ dependencies:
101
101
  - - '='
102
102
  - !ruby/object:Gem::Version
103
103
  version: 0.3.0
104
- type: :runtime
105
- prerelease: false
106
104
  version_requirements: !ruby/object:Gem::Requirement
107
105
  requirements:
108
106
  - - '='
109
107
  - !ruby/object:Gem::Version
110
108
  version: 0.3.0
109
+ prerelease: false
110
+ type: :runtime
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: rufus-scheduler
113
113
  requirement: !ruby/object:Gem::Requirement
@@ -115,13 +115,13 @@ dependencies:
115
115
  - - '='
116
116
  - !ruby/object:Gem::Version
117
117
  version: 3.2.0
118
- type: :runtime
119
- prerelease: false
120
118
  version_requirements: !ruby/object:Gem::Requirement
121
119
  requirements:
122
120
  - - '='
123
121
  - !ruby/object:Gem::Version
124
122
  version: 3.2.0
123
+ prerelease: false
124
+ type: :runtime
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: ruby-kafka
127
127
  requirement: !ruby/object:Gem::Requirement
@@ -129,13 +129,13 @@ dependencies:
129
129
  - - '='
130
130
  - !ruby/object:Gem::Version
131
131
  version: 0.3.2
132
- type: :runtime
133
- prerelease: false
134
132
  version_requirements: !ruby/object:Gem::Requirement
135
133
  requirements:
136
134
  - - '='
137
135
  - !ruby/object:Gem::Version
138
136
  version: 0.3.2
137
+ prerelease: false
138
+ type: :runtime
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: mysql2
141
141
  requirement: !ruby/object:Gem::Requirement
@@ -143,13 +143,13 @@ dependencies:
143
143
  - - '='
144
144
  - !ruby/object:Gem::Version
145
145
  version: 0.4.3
146
- type: :runtime
147
- prerelease: false
148
146
  version_requirements: !ruby/object:Gem::Requirement
149
147
  requirements:
150
148
  - - '='
151
149
  - !ruby/object:Gem::Version
152
150
  version: 0.4.3
151
+ prerelease: false
152
+ type: :runtime
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: bunny
155
155
  requirement: !ruby/object:Gem::Requirement
@@ -157,13 +157,27 @@ dependencies:
157
157
  - - '='
158
158
  - !ruby/object:Gem::Version
159
159
  version: 2.3.1
160
- type: :runtime
161
- prerelease: false
162
160
  version_requirements: !ruby/object:Gem::Requirement
163
161
  requirements:
164
162
  - - '='
165
163
  - !ruby/object:Gem::Version
166
164
  version: 2.3.1
165
+ prerelease: false
166
+ type: :runtime
167
+ - !ruby/object:Gem::Dependency
168
+ name: jolokia
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - '='
172
+ - !ruby/object:Gem::Version
173
+ version: 0.1.0
174
+ version_requirements: !ruby/object:Gem::Requirement
175
+ requirements:
176
+ - - '='
177
+ - !ruby/object:Gem::Version
178
+ version: 0.1.0
179
+ prerelease: false
180
+ type: :runtime
167
181
  - !ruby/object:Gem::Dependency
168
182
  name: rspec
169
183
  requirement: !ruby/object:Gem::Requirement
@@ -171,13 +185,13 @@ dependencies:
171
185
  - - '='
172
186
  - !ruby/object:Gem::Version
173
187
  version: 3.4.0
174
- type: :development
175
- prerelease: false
176
188
  version_requirements: !ruby/object:Gem::Requirement
177
189
  requirements:
178
190
  - - '='
179
191
  - !ruby/object:Gem::Version
180
192
  version: 3.4.0
193
+ prerelease: false
194
+ type: :development
181
195
  description: |+
182
196
  Framework to automate responses for infrastructure events.
183
197
 
@@ -198,9 +212,11 @@ files:
198
212
  - lib/blocktest.rb
199
213
  - lib/ocular.rb
200
214
  - lib/ocular/daemon.rb
215
+ - lib/ocular/dsl/cache.rb
201
216
  - lib/ocular/dsl/dsl.rb
202
217
  - lib/ocular/dsl/etcd.rb
203
218
  - lib/ocular/dsl/fog.rb
219
+ - lib/ocular/dsl/graphite.rb
204
220
  - lib/ocular/dsl/logging.rb
205
221
  - lib/ocular/dsl/mysql.rb
206
222
  - lib/ocular/dsl/orbit.rb
@@ -232,7 +248,7 @@ homepage: http://github.com/garo/ocular
232
248
  licenses:
233
249
  - Apache 2.0
234
250
  metadata: {}
235
- post_install_message:
251
+ post_install_message:
236
252
  rdoc_options: []
237
253
  require_paths:
238
254
  - lib
@@ -247,9 +263,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
247
263
  - !ruby/object:Gem::Version
248
264
  version: '0'
249
265
  requirements: []
250
- rubyforge_project:
251
- rubygems_version: 2.4.5.1
252
- signing_key:
266
+ rubyforge_project:
267
+ rubygems_version: 2.6.4
268
+ signing_key:
253
269
  specification_version: 4
254
270
  summary: Tool to create simple operational scripts
255
271
  test_files: []