hq-log-monitor-server 0.2.2 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,109 @@
1
+ module HQ
2
+ module LogMonitorServer
3
+
4
+ class Script
5
+
6
+ def service_host_page env, context
7
+
8
+ events =
9
+ @db["events"]
10
+ .find({
11
+ "source.service" => context[:service],
12
+ "source.host" => context[:host],
13
+ })
14
+ .to_a
15
+
16
+ title =
17
+ "%s %s \u2014 Log monitor" % [
18
+ context[:host],
19
+ context[:service],
20
+ ]
21
+
22
+ headers = {}
23
+ html = []
24
+
25
+ headers["content-type"] = "text/html; charset=utf-8"
26
+
27
+ html << "<!DOCTYPE html>\n"
28
+ html << "<html>\n"
29
+ html << "<head>\n"
30
+
31
+ html << "<title>%s</title>\n" % [
32
+ esc_ht(title),
33
+ ]
34
+
35
+ html << "</head>\n"
36
+ html << "<body>\n"
37
+
38
+ html << "<h1>%s</h1>\n" % [
39
+ esc_ht(title),
40
+ ]
41
+
42
+ if events.empty?
43
+ html << "<p>No events have been logged for this service on this " +
44
+ "host</p>\n"
45
+ else
46
+
47
+ html << "<table id=\"events\">\n"
48
+ html << "<thead>\n"
49
+
50
+ html << "<tr>\n"
51
+ html << "<th>Timestamp</th>\n"
52
+ html << "<th>File</th>\n"
53
+ html << "<th>Line</th>\n"
54
+ html << "<th>Type</th>\n"
55
+ html << "<th>View</th>\n"
56
+ html << "</tr>\n"
57
+
58
+ html << "</thead>\n"
59
+ html << "<tbody>\n"
60
+
61
+ events.each do
62
+ |event|
63
+
64
+ html << "<tr class=\"event\">\n"
65
+
66
+ html << "<td class=\"timestamp\">%s</td>\n" % [
67
+ esc_ht(event["timestamp"].to_s),
68
+ ]
69
+
70
+ html << "<td class=\"file\">%s</td>\n" % [
71
+ esc_ht(event["location"]["file"]),
72
+ ]
73
+
74
+ html << "<td class=\"line\">%s</td>\n" % [
75
+ esc_ht(event["location"]["line"].to_s),
76
+ ]
77
+
78
+ html << "<td class=\"type\">%s</td>\n" % [
79
+ esc_ht(event["type"]),
80
+ ]
81
+
82
+ html << "<td class=\"view\">%s</td>\n" % [
83
+ "<a href=\"%s\">view</a>" % [
84
+ "/event/%s" % [
85
+ esc_ue(event["_id"].to_s),
86
+ ],
87
+ ],
88
+ ]
89
+
90
+ html << "</tr>\n"
91
+
92
+ end
93
+
94
+ html << "</tbody>\n"
95
+ html << "</table>\n"
96
+
97
+ end
98
+
99
+ html << "</body>\n"
100
+ html << "</html>\n"
101
+
102
+ return 200, headers, html
103
+
104
+ end
105
+
106
+ end
107
+
108
+ end
109
+ end
@@ -0,0 +1,112 @@
1
+ module HQ
2
+ module LogMonitorServer
3
+
4
+ class Script
5
+
6
+ def service_page env, context
7
+
8
+ summaries =
9
+ @db["summaries"]
10
+ .find({
11
+ "_id.service" => context[:service]
12
+ })
13
+ .to_a
14
+
15
+ title =
16
+ "%s - Log monitor" % [
17
+ context[:service],
18
+ ]
19
+
20
+ headers = {}
21
+ html = []
22
+
23
+ headers["content-type"] = "text/html; charset=utf-8"
24
+
25
+ html << "<!DOCTYPE html>\n"
26
+ html << "<html>\n"
27
+ html << "<head>\n"
28
+
29
+ html << "<title>%s</title>\n" % [
30
+ esc_ht(title),
31
+ ]
32
+
33
+ html << "</head>\n"
34
+ html << "<body>\n"
35
+
36
+ html << "<h1>%s</h1>\n" % [
37
+ esc_ht(title),
38
+ ]
39
+
40
+ if summaries.empty?
41
+ html << "<p>No events have been logged for this service</p>\n"
42
+ else
43
+
44
+ html << "<table id=\"summaries\">\n"
45
+ html << "<thead>\n"
46
+
47
+ html << "<tr>\n"
48
+ html << "<th>Host</th>\n"
49
+ html << "<th>Class</th>\n"
50
+ html << "<th>Alerts</th>\n"
51
+ html << "<th>Details</th>\n"
52
+ html << "<th>View</th>\n"
53
+ html << "</tr>\n"
54
+
55
+ html << "</thead>\n"
56
+ html << "<tbody>\n"
57
+
58
+ summaries.each do
59
+ |summary|
60
+
61
+ html << "<tr class=\"summary\">\n"
62
+
63
+ html << "<td class=\"host\">%s</td>\n" % [
64
+ esc_ht(summary["_id"]["host"]),
65
+ ]
66
+
67
+ html << "<td class=\"service\">%s</td>\n" % [
68
+ esc_ht(summary["_id"]["class"]),
69
+ ]
70
+
71
+ html << "<td class=\"alerts\">%s</td>\n" % [
72
+ esc_ht(summary["combined"]["new"].to_s),
73
+ ]
74
+
75
+ html << "<td class=\"detail\">%s</td>\n" % [
76
+ esc_ht(
77
+ summary["types"].map {
78
+ |type, counts|
79
+ "%s %s" % [ counts["new"], type ]
80
+ }.join ", "
81
+ ),
82
+ ]
83
+
84
+ html << "<td class=\"view\">%s</td>\n" % [
85
+ "<a href=\"%s\">view</a>" % [
86
+ "/service/%s/host/%s" % [
87
+ esc_ue(summary["_id"]["service"]),
88
+ esc_ue(summary["_id"]["host"]),
89
+ ],
90
+ ],
91
+ ]
92
+
93
+ html << "</tr>\n"
94
+
95
+ end
96
+
97
+ html << "</tbody>\n"
98
+ html << "</table>\n"
99
+
100
+ end
101
+
102
+ html << "</body>\n"
103
+ html << "</html>\n"
104
+
105
+ return 200, headers, html
106
+
107
+ end
108
+
109
+ end
110
+
111
+ end
112
+ end
@@ -0,0 +1,58 @@
1
+ module HQ
2
+ module LogMonitorServer
3
+
4
+ class Script
5
+
6
+ def submit_log_event env
7
+
8
+ # decode it
9
+
10
+ event = MultiJson.load env["rack.input"].read
11
+
12
+ # add some fields
13
+
14
+ event["timestamp"] = Time.now
15
+ event["status"] = "unseen"
16
+
17
+ # insert it
18
+
19
+ @db["events"].insert event
20
+
21
+ # update summary
22
+
23
+ summary =
24
+ @db["summaries"].find({
25
+ "_id" => event["source"],
26
+ }).first
27
+
28
+ summary ||= {
29
+ "_id" => event["source"],
30
+ "combined" => { "new" => 0, "total" => 0 },
31
+ "types" => {},
32
+ }
33
+
34
+ summary["types"][event["type"]] ||=
35
+ { "new" => 0, "total" => 0 }
36
+
37
+ summary["types"][event["type"]]["new"] += 1
38
+ summary["types"][event["type"]]["total"] += 1
39
+
40
+ summary["combined"]["new"] += 1
41
+ summary["combined"]["total"] += 1
42
+
43
+ @db["summaries"].save summary
44
+
45
+ # perform checks
46
+
47
+ do_checks
48
+
49
+ # respond successfully
50
+
51
+ return 202, {}, []
52
+
53
+ end
54
+
55
+ end
56
+
57
+ end
58
+ end
metadata CHANGED
@@ -1,181 +1,206 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hq-log-monitor-server
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.3.0
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - James Pharaoh
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2013-04-30 00:00:00.000000000 Z
12
+ date: 2013-05-08 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: bson_ext
15
16
  requirement: !ruby/object:Gem::Requirement
17
+ none: false
16
18
  requirements:
17
- - - '>='
19
+ - - ! '>='
18
20
  - !ruby/object:Gem::Version
19
21
  version: 1.8.2
20
22
  type: :runtime
21
23
  prerelease: false
22
24
  version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
23
26
  requirements:
24
- - - '>='
27
+ - - ! '>='
25
28
  - !ruby/object:Gem::Version
26
29
  version: 1.8.2
27
30
  - !ruby/object:Gem::Dependency
28
31
  name: hq-tools
29
32
  requirement: !ruby/object:Gem::Requirement
33
+ none: false
30
34
  requirements:
31
- - - '>='
35
+ - - ! '>='
32
36
  - !ruby/object:Gem::Version
33
37
  version: 0.2.0
34
38
  type: :runtime
35
39
  prerelease: false
36
40
  version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
37
42
  requirements:
38
- - - '>='
43
+ - - ! '>='
39
44
  - !ruby/object:Gem::Version
40
45
  version: 0.2.0
41
46
  - !ruby/object:Gem::Dependency
42
47
  name: libxml-ruby
43
48
  requirement: !ruby/object:Gem::Requirement
49
+ none: false
44
50
  requirements:
45
- - - '>='
51
+ - - ! '>='
46
52
  - !ruby/object:Gem::Version
47
53
  version: 2.6.0
48
54
  type: :runtime
49
55
  prerelease: false
50
56
  version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
51
58
  requirements:
52
- - - '>='
59
+ - - ! '>='
53
60
  - !ruby/object:Gem::Version
54
61
  version: 2.6.0
55
62
  - !ruby/object:Gem::Dependency
56
63
  name: mongo
57
64
  requirement: !ruby/object:Gem::Requirement
65
+ none: false
58
66
  requirements:
59
- - - '>='
67
+ - - ! '>='
60
68
  - !ruby/object:Gem::Version
61
69
  version: 1.8.2
62
70
  type: :runtime
63
71
  prerelease: false
64
72
  version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
65
74
  requirements:
66
- - - '>='
75
+ - - ! '>='
67
76
  - !ruby/object:Gem::Version
68
77
  version: 1.8.2
69
78
  - !ruby/object:Gem::Dependency
70
79
  name: multi_json
71
80
  requirement: !ruby/object:Gem::Requirement
81
+ none: false
72
82
  requirements:
73
- - - '>='
83
+ - - ! '>='
74
84
  - !ruby/object:Gem::Version
75
85
  version: 1.6.1
76
86
  type: :runtime
77
87
  prerelease: false
78
88
  version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
79
90
  requirements:
80
- - - '>='
91
+ - - ! '>='
81
92
  - !ruby/object:Gem::Version
82
93
  version: 1.6.1
83
94
  - !ruby/object:Gem::Dependency
84
95
  name: rack
85
96
  requirement: !ruby/object:Gem::Requirement
97
+ none: false
86
98
  requirements:
87
- - - '>='
99
+ - - ! '>='
88
100
  - !ruby/object:Gem::Version
89
101
  version: 1.5.1
90
102
  type: :runtime
91
103
  prerelease: false
92
104
  version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
93
106
  requirements:
94
- - - '>='
107
+ - - ! '>='
95
108
  - !ruby/object:Gem::Version
96
109
  version: 1.5.1
97
110
  - !ruby/object:Gem::Dependency
98
111
  name: capybara
99
112
  requirement: !ruby/object:Gem::Requirement
113
+ none: false
100
114
  requirements:
101
- - - '>='
115
+ - - ! '>='
102
116
  - !ruby/object:Gem::Version
103
117
  version: 2.0.2
104
118
  type: :development
105
119
  prerelease: false
106
120
  version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
107
122
  requirements:
108
- - - '>='
123
+ - - ! '>='
109
124
  - !ruby/object:Gem::Version
110
125
  version: 2.0.2
111
126
  - !ruby/object:Gem::Dependency
112
127
  name: cucumber
113
128
  requirement: !ruby/object:Gem::Requirement
129
+ none: false
114
130
  requirements:
115
- - - '>='
131
+ - - ! '>='
116
132
  - !ruby/object:Gem::Version
117
133
  version: 1.2.1
118
134
  type: :development
119
135
  prerelease: false
120
136
  version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
121
138
  requirements:
122
- - - '>='
139
+ - - ! '>='
123
140
  - !ruby/object:Gem::Version
124
141
  version: 1.2.1
125
142
  - !ruby/object:Gem::Dependency
126
143
  name: rake
127
144
  requirement: !ruby/object:Gem::Requirement
145
+ none: false
128
146
  requirements:
129
- - - '>='
147
+ - - ! '>='
130
148
  - !ruby/object:Gem::Version
131
149
  version: 10.0.3
132
150
  type: :development
133
151
  prerelease: false
134
152
  version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
135
154
  requirements:
136
- - - '>='
155
+ - - ! '>='
137
156
  - !ruby/object:Gem::Version
138
157
  version: 10.0.3
139
158
  - !ruby/object:Gem::Dependency
140
159
  name: rspec
141
160
  requirement: !ruby/object:Gem::Requirement
161
+ none: false
142
162
  requirements:
143
- - - '>='
163
+ - - ! '>='
144
164
  - !ruby/object:Gem::Version
145
165
  version: 2.12.0
146
166
  type: :development
147
167
  prerelease: false
148
168
  version_requirements: !ruby/object:Gem::Requirement
169
+ none: false
149
170
  requirements:
150
- - - '>='
171
+ - - ! '>='
151
172
  - !ruby/object:Gem::Version
152
173
  version: 2.12.0
153
174
  - !ruby/object:Gem::Dependency
154
175
  name: rspec_junit_formatter
155
176
  requirement: !ruby/object:Gem::Requirement
177
+ none: false
156
178
  requirements:
157
- - - '>='
179
+ - - ! '>='
158
180
  - !ruby/object:Gem::Version
159
181
  version: '0'
160
182
  type: :development
161
183
  prerelease: false
162
184
  version_requirements: !ruby/object:Gem::Requirement
185
+ none: false
163
186
  requirements:
164
- - - '>='
187
+ - - ! '>='
165
188
  - !ruby/object:Gem::Version
166
189
  version: '0'
167
190
  - !ruby/object:Gem::Dependency
168
191
  name: simplecov
169
192
  requirement: !ruby/object:Gem::Requirement
193
+ none: false
170
194
  requirements:
171
- - - '>='
195
+ - - ! '>='
172
196
  - !ruby/object:Gem::Version
173
197
  version: '0'
174
198
  type: :development
175
199
  prerelease: false
176
200
  version_requirements: !ruby/object:Gem::Requirement
201
+ none: false
177
202
  requirements:
178
- - - '>='
203
+ - - ! '>='
179
204
  - !ruby/object:Gem::Version
180
205
  version: '0'
181
206
  description: HQ log monitor system, central component
@@ -186,37 +211,49 @@ executables:
186
211
  extensions: []
187
212
  extra_rdoc_files: []
188
213
  files:
214
+ - lib/hq/log-monitor-server/overview-page.rb
215
+ - lib/hq/log-monitor-server/do-checks.rb
216
+ - lib/hq/log-monitor-server/submit-log-event.rb
189
217
  - lib/hq/log-monitor-server/script.rb
218
+ - lib/hq/log-monitor-server/service-host-page.rb
219
+ - lib/hq/log-monitor-server/service-page.rb
220
+ - lib/hq/log-monitor-server/event-page.rb
221
+ - lib/hq/log-monitor-server/logic.rb
222
+ - features/event-page.feature
190
223
  - features/submit-event.feature
191
- - features/overview.feature
224
+ - features/overview-page.feature
192
225
  - features/support/steps.rb
193
226
  - features/support/env.rb
227
+ - features/support/ui-steps.rb
194
228
  - bin/hq-log-monitor-server
195
229
  homepage: https://github.com/jamespharaoh/hq-log-monitor-server
196
230
  licenses: []
197
- metadata: {}
198
231
  post_install_message:
199
232
  rdoc_options: []
200
233
  require_paths:
201
234
  - lib
202
235
  required_ruby_version: !ruby/object:Gem::Requirement
236
+ none: false
203
237
  requirements:
204
- - - '>='
238
+ - - ! '>='
205
239
  - !ruby/object:Gem::Version
206
240
  version: '0'
207
241
  required_rubygems_version: !ruby/object:Gem::Requirement
242
+ none: false
208
243
  requirements:
209
- - - '>='
244
+ - - ! '>='
210
245
  - !ruby/object:Gem::Version
211
246
  version: 1.3.6
212
247
  requirements: []
213
248
  rubyforge_project: hq-log-monitor-server
214
- rubygems_version: 2.0.3
249
+ rubygems_version: 1.8.23
215
250
  signing_key:
216
- specification_version: 4
251
+ specification_version: 3
217
252
  summary: HQ log monitor server
218
253
  test_files:
254
+ - features/event-page.feature
219
255
  - features/submit-event.feature
220
- - features/overview.feature
256
+ - features/overview-page.feature
221
257
  - features/support/steps.rb
222
258
  - features/support/env.rb
259
+ - features/support/ui-steps.rb