ocular 0.1.20 → 0.1.22

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 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: []