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 +4 -4
- data/lib/ocular/dsl/cache.rb +38 -0
- data/lib/ocular/dsl/dsl.rb +2 -0
- data/lib/ocular/dsl/graphite.rb +64 -0
- data/lib/ocular/dsl/runcontext.rb +2 -0
- data/lib/ocular/event/eventfactory.rb +2 -0
- data/lib/ocular/logging/kafka_logger.rb +10 -5
- data/lib/ocular/version.rb +1 -1
- metadata +47 -31
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f6c2b17d2ac03cbbe71f12bc7cc7a39e8d043762
|
4
|
+
data.tar.gz: 83919943be706be6b233ba9ad1841484f5f4a450
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
data/lib/ocular/dsl/dsl.rb
CHANGED
@@ -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
|
@@ -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
|
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
|
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
|
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
|
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
|
data/lib/ocular/version.rb
CHANGED
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.
|
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-
|
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
|
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: []
|