hq-log-monitor-server 0.5.1 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- data/features/service-host-page.feature +88 -0
- data/features/support/ui-steps.rb +7 -0
- data/lib/hq/log-monitor-server/logic.rb +61 -0
- data/lib/hq/log-monitor-server/overview-page.rb +1 -1
- data/lib/hq/log-monitor-server/script.rb +2 -2
- data/lib/hq/log-monitor-server/service-host-page.rb +45 -2
- data/lib/hq/log-monitor-server/service-page.rb +2 -1
- metadata +3 -1
@@ -0,0 +1,88 @@
|
|
1
|
+
Feature: View and manipulate all events for a service/host combo
|
2
|
+
|
3
|
+
Background:
|
4
|
+
|
5
|
+
Given the log monitor server config:
|
6
|
+
"""
|
7
|
+
<log-monitor-server-config>
|
8
|
+
<server port="${port}"/>
|
9
|
+
<db host="${db-host}" port="${db-port}" name="${db-name}"/>
|
10
|
+
<icinga command-file="${command-file}">
|
11
|
+
<service name="service" icinga-host="host" icinga-service="service">
|
12
|
+
<type name="warning" level="warning"/>
|
13
|
+
<type name="critical" level="critical"/>
|
14
|
+
</service>
|
15
|
+
</icinga>
|
16
|
+
<assets bootstrap=""/>
|
17
|
+
</log-monitor-server-config>
|
18
|
+
"""
|
19
|
+
|
20
|
+
And the time is 10
|
21
|
+
|
22
|
+
And I submit the following events:
|
23
|
+
"""
|
24
|
+
{
|
25
|
+
type: warning,
|
26
|
+
source: { class: class, host: host, service: service },
|
27
|
+
location: { file: logfile, line: 0 },
|
28
|
+
lines: {
|
29
|
+
before: [],
|
30
|
+
matching: WARNING blah,
|
31
|
+
after: [],
|
32
|
+
}
|
33
|
+
},
|
34
|
+
{
|
35
|
+
type: warning,
|
36
|
+
source: { class: class, host: host, service: service },
|
37
|
+
location: { file: logfile, line: 0 },
|
38
|
+
lines: {
|
39
|
+
before: [],
|
40
|
+
matching: WARNING blah,
|
41
|
+
after: [],
|
42
|
+
}
|
43
|
+
},
|
44
|
+
"""
|
45
|
+
|
46
|
+
Scenario: View the events
|
47
|
+
|
48
|
+
When I visit /service-host/service/class/host
|
49
|
+
|
50
|
+
Then I should see 2 events
|
51
|
+
And I should see a button "mark all as seen"
|
52
|
+
|
53
|
+
And the summary new should be 2
|
54
|
+
And the summary total should be 2
|
55
|
+
And the summary new for type "warning" should be 2
|
56
|
+
And the summary total for type "warning" should be 2
|
57
|
+
|
58
|
+
And icinga should receive:
|
59
|
+
"""
|
60
|
+
[10] PROCESS_SERVICE_CHECK_RESULT;host;service;0;OK no new events
|
61
|
+
[10] PROCESS_SERVICE_CHECK_RESULT;host;service;1;WARNING 1 warning
|
62
|
+
[10] PROCESS_SERVICE_CHECK_RESULT;host;service;1;WARNING 2 warning
|
63
|
+
"""
|
64
|
+
|
65
|
+
Scenario: Mark all as seen
|
66
|
+
|
67
|
+
Given the time is 20
|
68
|
+
|
69
|
+
When I visit /service-host/service/class/host
|
70
|
+
And I click "mark all as seen"
|
71
|
+
|
72
|
+
Then I should see 2 events
|
73
|
+
And I should not see a button "mark all as unseen"
|
74
|
+
|
75
|
+
And the summary new should be 0
|
76
|
+
And the summary total should be 2
|
77
|
+
And the summary new for type "warning" should be 0
|
78
|
+
And the summary total for type "warning" should be 2
|
79
|
+
|
80
|
+
And icinga should receive:
|
81
|
+
"""
|
82
|
+
[10] PROCESS_SERVICE_CHECK_RESULT;host;service;0;OK no new events
|
83
|
+
[10] PROCESS_SERVICE_CHECK_RESULT;host;service;1;WARNING 1 warning
|
84
|
+
[10] PROCESS_SERVICE_CHECK_RESULT;host;service;1;WARNING 2 warning
|
85
|
+
[20] PROCESS_SERVICE_CHECK_RESULT;host;service;0;OK no new events
|
86
|
+
"""
|
87
|
+
|
88
|
+
|
@@ -37,6 +37,67 @@ class Script
|
|
37
37
|
|
38
38
|
end
|
39
39
|
|
40
|
+
def mark_all_as_seen source
|
41
|
+
|
42
|
+
# get types
|
43
|
+
|
44
|
+
query = {
|
45
|
+
"source.service" => source["service"],
|
46
|
+
"source.class" => source["class"],
|
47
|
+
"source.host" => source["host"],
|
48
|
+
"status" => "unseen",
|
49
|
+
}
|
50
|
+
|
51
|
+
types =
|
52
|
+
@db["events"].distinct "type", query
|
53
|
+
|
54
|
+
types.each do
|
55
|
+
|type|
|
56
|
+
|
57
|
+
# update events
|
58
|
+
|
59
|
+
query = {
|
60
|
+
"source.service" => source["service"],
|
61
|
+
"source.class" => source["class"],
|
62
|
+
"source.host" => source["host"],
|
63
|
+
"status" => "unseen",
|
64
|
+
"type" => type,
|
65
|
+
}
|
66
|
+
|
67
|
+
update = {
|
68
|
+
"$set" => {
|
69
|
+
"status" => "seen",
|
70
|
+
},
|
71
|
+
}
|
72
|
+
|
73
|
+
@db["events"].update query, update, :multi => true
|
74
|
+
|
75
|
+
event_count =
|
76
|
+
@db.get_last_error["n"]
|
77
|
+
|
78
|
+
# update summaries
|
79
|
+
|
80
|
+
@db["summaries"].update(
|
81
|
+
{
|
82
|
+
"_id.service" => source["service"],
|
83
|
+
"_id.class" => source["class"],
|
84
|
+
"_id.host" => source["host"],
|
85
|
+
}, {
|
86
|
+
"$inc" => {
|
87
|
+
"combined.new" => -event_count,
|
88
|
+
"types.#{type}.new" => -event_count,
|
89
|
+
}
|
90
|
+
}
|
91
|
+
)
|
92
|
+
|
93
|
+
end
|
94
|
+
|
95
|
+
# notify icinga checks
|
96
|
+
|
97
|
+
do_checks
|
98
|
+
|
99
|
+
end
|
100
|
+
|
40
101
|
def mark_event_as_unseen event_id
|
41
102
|
|
42
103
|
event = get_event event_id
|
@@ -155,8 +155,8 @@ class Script
|
|
155
155
|
when /^\/service\/([^\/]+)$/
|
156
156
|
service_page env, :service => $1
|
157
157
|
|
158
|
-
when /^\/service\/([^\/]+)\/
|
159
|
-
service_host_page env, :service => $1, :host => $
|
158
|
+
when /^\/service-host\/([^\/]+)\/([^\/]+)\/([^\/]+)$/
|
159
|
+
service_host_page env, :service => $1, :class => $2, :host => $3
|
160
160
|
|
161
161
|
when /^\/event\/([^\/]+)$/
|
162
162
|
event_page env, :event_id => $1
|
@@ -5,11 +5,31 @@ class Script
|
|
5
5
|
|
6
6
|
def service_host_page env, context
|
7
7
|
|
8
|
+
req = Rack::Request.new env
|
9
|
+
|
10
|
+
source = {
|
11
|
+
"class" => context[:class],
|
12
|
+
"host" => context[:host],
|
13
|
+
"service" => context[:service],
|
14
|
+
}
|
15
|
+
|
16
|
+
# process form stuff
|
17
|
+
|
18
|
+
if req.request_method == "POST" \
|
19
|
+
&& req.params["mark-all-as-seen"]
|
20
|
+
|
21
|
+
mark_all_as_seen source
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
# read from database
|
26
|
+
|
8
27
|
events =
|
9
28
|
@db["events"]
|
10
29
|
.find({
|
11
|
-
"source.
|
12
|
-
"source.host" =>
|
30
|
+
"source.class" => source["class"],
|
31
|
+
"source.host" => source["host"],
|
32
|
+
"source.service" => source["service"],
|
13
33
|
})
|
14
34
|
.to_a
|
15
35
|
|
@@ -96,6 +116,8 @@ class Script
|
|
96
116
|
html << "</thead>\n"
|
97
117
|
html << "<tbody>\n"
|
98
118
|
|
119
|
+
unseen_count = 0
|
120
|
+
|
99
121
|
events.each do
|
100
122
|
|event|
|
101
123
|
|
@@ -131,11 +153,32 @@ class Script
|
|
131
153
|
|
132
154
|
html << "</tr>\n"
|
133
155
|
|
156
|
+
unseen_count += 1 \
|
157
|
+
if event["status"] == "unseen"
|
158
|
+
|
134
159
|
end
|
135
160
|
|
136
161
|
html << "</tbody>\n"
|
137
162
|
html << "</table>\n"
|
138
163
|
|
164
|
+
html << "<form method=\"post\">\n"
|
165
|
+
|
166
|
+
html << "<p>\n"
|
167
|
+
|
168
|
+
if unseen_count > 0
|
169
|
+
|
170
|
+
html <<
|
171
|
+
"<input " +
|
172
|
+
"type=\"submit\" " +
|
173
|
+
"name=\"mark-all-as-seen\" " +
|
174
|
+
"value=\"mark all as seen\">\n"
|
175
|
+
|
176
|
+
end
|
177
|
+
|
178
|
+
html << "</p>\n"
|
179
|
+
|
180
|
+
html << "</form>\n"
|
181
|
+
|
139
182
|
end
|
140
183
|
|
141
184
|
html << "</div>\n"
|
@@ -112,8 +112,9 @@ class Script
|
|
112
112
|
|
113
113
|
html << "<td class=\"view\">%s</td>\n" % [
|
114
114
|
"<a href=\"%s\">view</a>" % [
|
115
|
-
"/service/%s
|
115
|
+
"/service-host/%s/%s/%s" % [
|
116
116
|
esc_ue(summary["_id"]["service"]),
|
117
|
+
esc_ue(summary["_id"]["class"]),
|
117
118
|
esc_ue(summary["_id"]["host"]),
|
118
119
|
],
|
119
120
|
],
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hq-log-monitor-server
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -236,6 +236,7 @@ files:
|
|
236
236
|
- lib/hq/log-monitor-server/event-page.rb
|
237
237
|
- lib/hq/log-monitor-server/logic.rb
|
238
238
|
- features/event-page.feature
|
239
|
+
- features/service-host-page.feature
|
239
240
|
- features/submit-event.feature
|
240
241
|
- features/overview-page.feature
|
241
242
|
- features/support/steps.rb
|
@@ -268,6 +269,7 @@ specification_version: 3
|
|
268
269
|
summary: HQ log monitor server
|
269
270
|
test_files:
|
270
271
|
- features/event-page.feature
|
272
|
+
- features/service-host-page.feature
|
271
273
|
- features/submit-event.feature
|
272
274
|
- features/overview-page.feature
|
273
275
|
- features/support/steps.rb
|