hq-log-monitor-server 0.7.0 → 0.8.0

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.
@@ -37,7 +37,7 @@ end
37
37
  Given /^the time is (\d+)$/ do
38
38
  |time_str|
39
39
 
40
- Time.stub(:now).and_return { Time.at time_str.to_i }
40
+ set_time Time.at time_str.to_i
41
41
 
42
42
  end
43
43
 
@@ -0,0 +1,21 @@
1
+ # time manipulation which doesn't break background threads
2
+
3
+ Before do
4
+
5
+ original_now = Time.method(:now)
6
+
7
+ @set_time = nil
8
+
9
+ Time.stub(:now) do
10
+ if @set_time
11
+ @set_time
12
+ else
13
+ original_now.call
14
+ end
15
+ end
16
+
17
+ end
18
+
19
+ def set_time new_time
20
+ @set_time = new_time
21
+ end
@@ -3,103 +3,207 @@ module LogMonitorServer
3
3
 
4
4
  class Script
5
5
 
6
+ CHECK_FREQUENCY = 60
7
+
8
+ def background
9
+
10
+ @mutex = Mutex.new
11
+ @run_now_signal = ConditionVariable.new
12
+ @next_check_done_signal = nil
13
+ @current_check_done_signal = nil
14
+ @stop_checks_signal = nil
15
+
16
+ @next_check = Time.now
17
+
18
+ loop do
19
+
20
+ # wait till next invocation
21
+
22
+ @mutex.synchronize do
23
+
24
+ until @next_check_done_signal
25
+
26
+ if @next_check < Time.now
27
+ @next_check_done_signal = ConditionVariable.new
28
+ break
29
+ end
30
+
31
+ @run_now_signal.wait @mutex, 1
32
+
33
+ if @stop_checks_signal
34
+ @stop_checks_signal.broadcast
35
+ return
36
+ end
37
+
38
+ end
39
+
40
+ @current_check_done_signal = @next_check_done_signal
41
+
42
+ end
43
+
44
+ # perform the checks
45
+
46
+ begin
47
+ do_checks_real
48
+ rescue => e
49
+ $stderr.puts e, *e.backtrace
50
+ sleep 10
51
+ ensure
52
+
53
+ # notify waiting threads
54
+
55
+ @mutex.synchronize do
56
+
57
+ if @next_check_done_signal == @current_check_done_signal
58
+ @next_check_done_signal = nil
59
+ end
60
+
61
+ @current_check_done_signal.broadcast
62
+
63
+ end
64
+
65
+ end
66
+
67
+ @next_check = Time.now + CHECK_FREQUENCY
68
+
69
+ end
70
+
71
+ end
72
+
73
+ def stop_checks
74
+
75
+ @mutex.synchronize do
76
+
77
+ unless @stop_checks_signal
78
+ @stop_checks_signal = ConditionVariable.new
79
+ end
80
+
81
+ @run_now_signal.signal
82
+
83
+ @stop_checks_signal.wait @mutex
84
+
85
+ end
86
+
87
+ end
88
+
6
89
  def do_checks
90
+
7
91
  @mutex.synchronize do
8
92
 
9
- File.open @icinga_elem["command-file"], "a" do
10
- |command_io|
93
+ if @next_check_done_signal
11
94
 
12
- summaries_by_service =
13
- get_summaries_by_service
95
+ # next run already scheduled, just wait for it
14
96
 
15
- @icinga_elem.find("service").each do
16
- |service_elem|
97
+ @next_check_done_signal.wait @mutex
17
98
 
18
- service_name = service_elem["name"]
99
+ else
19
100
 
20
- critical_count = 0
21
- warning_count = 0
22
- unknown_count = 0
101
+ # create new next run and wait for it
23
102
 
24
- summaries =
25
- summaries_by_service[service_name]
103
+ @next_check_done_signal = ConditionVariable.new
26
104
 
27
- if summaries
28
- summaries["types"].each do
29
- |type_name, type_info|
105
+ @run_now_signal.signal
30
106
 
31
- case level_for_type service_name, type_name
32
- when "critical"
33
- critical_count += type_info["new"]
34
- when "warning"
35
- warning_count += type_info["new"]
36
- else
37
- unknown_count += type_info["new"]
38
- end
107
+ @next_check_done_signal.wait @mutex
39
108
 
40
- end
41
- end
109
+ end
42
110
 
43
- status_int =
44
- if critical_count > 0
45
- 2
46
- elsif warning_count > 0
47
- 1
48
- elsif unknown_count > 0
49
- 3
50
- else
51
- 0
52
- end
111
+ end
112
+
113
+ end
114
+
115
+ def do_checks_real
53
116
 
54
- status_str =
55
- if critical_count > 0
56
- "CRITICAL"
57
- elsif warning_count > 0
58
- "WARNING"
59
- elsif unknown_count > 0
60
- "UNKNOWN"
117
+ File.open @icinga_elem["command-file"], "a" do
118
+ |command_io|
119
+
120
+ summaries_by_service =
121
+ get_summaries_by_service
122
+
123
+ @icinga_elem.find("service").each do
124
+ |service_elem|
125
+
126
+ service_name = service_elem["name"]
127
+
128
+ critical_count = 0
129
+ warning_count = 0
130
+ unknown_count = 0
131
+
132
+ summaries =
133
+ summaries_by_service[service_name]
134
+
135
+ if summaries
136
+ summaries["types"].each do
137
+ |type_name, type_info|
138
+
139
+ case level_for_type service_name, type_name
140
+ when "critical"
141
+ critical_count += type_info["new"]
142
+ when "warning"
143
+ warning_count += type_info["new"]
61
144
  else
62
- "OK"
145
+ unknown_count += type_info["new"]
63
146
  end
64
147
 
65
- parts = []
148
+ end
149
+ end
66
150
 
151
+ status_int =
67
152
  if critical_count > 0
68
- parts << "%d critical" % critical_count
153
+ 2
154
+ elsif warning_count > 0
155
+ 1
156
+ elsif unknown_count > 0
157
+ 3
158
+ else
159
+ 0
69
160
  end
70
161
 
71
- if warning_count > 0
72
- parts << "%d warning" % warning_count
162
+ status_str =
163
+ if critical_count > 0
164
+ "CRITICAL"
165
+ elsif warning_count > 0
166
+ "WARNING"
167
+ elsif unknown_count > 0
168
+ "UNKNOWN"
169
+ else
170
+ "OK"
73
171
  end
74
172
 
75
- if unknown_count > 0
76
- parts << "%d unknown" % unknown_count
77
- end
173
+ parts = []
78
174
 
79
- if parts.empty?
80
- parts << "no new events"
81
- end
175
+ if critical_count > 0
176
+ parts << "%d critical" % critical_count
177
+ end
82
178
 
179
+ if warning_count > 0
180
+ parts << "%d warning" % warning_count
181
+ end
83
182
 
84
- command_io.print "[%s] %s\n" % [
85
- Time.now.to_i,
86
- [
87
- "PROCESS_SERVICE_CHECK_RESULT",
88
- service_elem["icinga-host"],
89
- service_elem["icinga-service"],
90
- status_int,
91
- "%s %s" % [
92
- status_str,
93
- parts.join(", "),
94
- ]
95
- ].join(";"),
96
- ]
183
+ if unknown_count > 0
184
+ parts << "%d unknown" % unknown_count
185
+ end
97
186
 
187
+ if parts.empty?
188
+ parts << "no new events"
98
189
  end
99
190
 
100
- end
101
191
 
102
- @next_check = Time.now + 60
192
+ command_io.print "[%s] %s\n" % [
193
+ Time.now.to_i,
194
+ [
195
+ "PROCESS_SERVICE_CHECK_RESULT",
196
+ service_elem["icinga-host"],
197
+ service_elem["icinga-service"],
198
+ status_int,
199
+ "%s %s" % [
200
+ status_str,
201
+ parts.join(", "),
202
+ ]
203
+ ].join(";"),
204
+ ]
205
+
206
+ end
103
207
 
104
208
  end
105
209
 
@@ -8,6 +8,11 @@ class Script
8
8
  summaries_by_service =
9
9
  get_summaries_by_service
10
10
 
11
+ summaries =
12
+ summaries_by_service
13
+ .values
14
+ .sort_by { |summary| summary["_id"]["service"] }
15
+
11
16
  headers = {}
12
17
  html = []
13
18
 
@@ -57,7 +62,7 @@ class Script
57
62
  esc_ht(title),
58
63
  ]
59
64
 
60
- if summaries_by_service.empty?
65
+ if summaries.empty?
61
66
  html << "<p>No events have been logged</p>\n"
62
67
  else
63
68
 
@@ -74,8 +79,8 @@ class Script
74
79
  html << "</thead>\n"
75
80
  html << "<tbody>\n"
76
81
 
77
- summaries_by_service.each do
78
- |service, summary|
82
+ summaries.each do
83
+ |summary|
79
84
 
80
85
  html << "<tr class=\"%s\">\n" % [
81
86
  esc_ht([
@@ -19,7 +19,6 @@ class Script
19
19
 
20
20
  def initialize
21
21
  @status = 0
22
- @mutex = Mutex.new
23
22
  end
24
23
 
25
24
  def main
@@ -34,11 +33,12 @@ class Script
34
33
  def start
35
34
  setup
36
35
  Thread.new { run }
37
- Thread.new { background }
36
+ @background_thread = Thread.new { background }
38
37
  end
39
38
 
40
39
  def stop
41
40
  @web_server.shutdown
41
+ stop_checks
42
42
  end
43
43
 
44
44
  def setup
@@ -52,22 +52,6 @@ class Script
52
52
  @web_server.start
53
53
  end
54
54
 
55
- def background
56
-
57
- @next_check = Time.now
58
-
59
- loop do
60
- sleep 1 while Time.now < @next_check
61
- begin
62
- do_checks
63
- rescue => e
64
- $stderr.puts e, *e.backtrace
65
- sleep 10
66
- end
67
- end
68
-
69
- end
70
-
71
55
  def process_args
72
56
 
73
57
  @opts, @args =
@@ -31,15 +31,27 @@ class Script
31
31
 
32
32
  # read from database
33
33
 
34
- events =
34
+ all_events =
35
35
  @db["events"]
36
36
  .find({
37
37
  "source.class" => source["class"],
38
38
  "source.host" => source["host"],
39
39
  "source.service" => source["service"],
40
40
  })
41
+ .sort({
42
+ "timestamp" => -1,
43
+ })
41
44
  .to_a
42
45
 
46
+ page_size = 100
47
+ page_num = req.GET["page"].to_i
48
+
49
+ page_start = page_num * page_size
50
+ page_end = page_start + page_size
51
+ page_count = (all_events.size + page_size - 1) / page_size
52
+
53
+ page_events = all_events[page_start...page_end] || []
54
+
43
55
  title =
44
56
  "%s %s \u2014 Log monitor" % [
45
57
  context[:host],
@@ -103,13 +115,22 @@ class Script
103
115
  esc_ht(title),
104
116
  ]
105
117
 
106
- if events.empty?
118
+ if all_events.size > page_size || page_num > 0
119
+ pagination html, page_count, page_num
120
+ end
121
+
122
+ if all_events.empty?
107
123
 
108
124
  html << "<p>No events have been logged for this service on this " +
109
125
  "host</p>\n"
110
126
 
127
+ elsif page_events.empty?
128
+
129
+ html << "<p>No events on this page</p>\n"
130
+
111
131
  else
112
132
 
133
+
113
134
  html << "<table id=\"events\" class=\"table table-striped\">\n"
114
135
  html << "<thead>\n"
115
136
 
@@ -127,7 +148,7 @@ class Script
127
148
 
128
149
  unseen_count = 0
129
150
 
130
- events.each do
151
+ page_events.each do
131
152
  |event|
132
153
 
133
154
  html << "<tr class=\"%s\">\n" % [
@@ -175,6 +196,10 @@ class Script
175
196
  html << "</tbody>\n"
176
197
  html << "</table>\n"
177
198
 
199
+ if all_events.size > page_size || page_num > 0
200
+ pagination html, page_count, page_num
201
+ end
202
+
178
203
  html << "<form method=\"post\">\n"
179
204
 
180
205
  html << "<p>\n"
@@ -212,6 +237,29 @@ class Script
212
237
 
213
238
  end
214
239
 
240
+ def pagination html, page_count, page_num
241
+
242
+ html << "<div class=\"pagination\">\n"
243
+ html << "<ul>\n"
244
+
245
+ page_count.times do
246
+ |num|
247
+
248
+ if num == page_num
249
+ html << "<li class=\"active\">"
250
+ else
251
+ html << "<li>"
252
+ end
253
+
254
+ html << "<a href=\"?page=#{num}\">#{num+1}</a>\n"
255
+
256
+ end
257
+
258
+ html << "</ul>\n"
259
+ html << "</div>\n"
260
+
261
+ end
262
+
215
263
  end
216
264
 
217
265
  end
@@ -12,6 +12,14 @@ class Script
12
12
  })
13
13
  .to_a
14
14
 
15
+ summaries.sort_by! {
16
+ |summary|
17
+ [
18
+ summary["_id"]["host"],
19
+ summary["_id"]["class"],
20
+ ]
21
+ }
22
+
15
23
  title =
16
24
  "%s - Log monitor" % [
17
25
  context[:service],
@@ -33,88 +33,42 @@ describe Script do
33
33
 
34
34
  before do
35
35
  require "xml"
36
- end
37
-
38
- it "returns nil if the service does not exist" do
39
-
40
- subject.instance_variable_set \
41
- "@icinga_elem",
42
- XML::Document.string("<icinga/>")
43
-
44
- ret = subject.level_for_type "service", "type"
45
-
46
- ret.should == nil
47
-
48
- end
49
-
50
- it "returns nil if the type does not exist" do
51
-
52
36
  subject.instance_variable_set \
53
37
  "@icinga_elem",
54
38
  XML::Document.string("
55
39
  <icinga>
56
- <service name=\"service\"/>
40
+ <service name=\"service\">
41
+ <type name=\"type\" level=\"level\"/>
42
+ <type name=\"no-level\"/>
43
+ <type name=\"empty-level\" level=\"\"/>
44
+ </service>
57
45
  </icinga>
58
46
  ")
47
+ end
59
48
 
60
- ret = subject.level_for_type "service", "type"
61
-
49
+ it "returns nil if the service does not exist" do
50
+ ret = subject.level_for_type "blah", "type"
62
51
  ret.should == nil
52
+ end
63
53
 
54
+ it "returns nil if the type does not exist" do
55
+ ret = subject.level_for_type "service", "blah"
56
+ ret.should == nil
64
57
  end
65
58
 
66
59
  it "returns nil if the type has no level" do
67
-
68
- subject.instance_variable_set \
69
- "@icinga_elem",
70
- XML::Document.string("
71
- <icinga>
72
- <service name=\"service\">
73
- <type name=\"type\"/>
74
- </service>
75
- </icinga>
76
- ")
77
-
78
- ret = subject.level_for_type "service", "type"
79
-
60
+ ret = subject.level_for_type "service", "no-level"
80
61
  ret.should == nil
81
-
82
62
  end
83
63
 
84
64
  it "returns nil if the type has an empty level" do
85
-
86
- subject.instance_variable_set \
87
- "@icinga_elem",
88
- XML::Document.string("
89
- <icinga>
90
- <service name=\"service\">
91
- <type name=\"type\" level=\"\"/>
92
- </service>
93
- </icinga>
94
- ")
95
-
96
- ret = subject.level_for_type "service", "type"
97
-
65
+ ret = subject.level_for_type "service", "empty-level"
98
66
  ret.should == nil
99
-
100
67
  end
101
68
 
102
69
  it "returns the appropriate level if all is well" do
103
-
104
- subject.instance_variable_set \
105
- "@icinga_elem",
106
- XML::Document.string("
107
- <icinga>
108
- <service name=\"service\">
109
- <type name=\"type\" level=\"level\"/>
110
- </service>
111
- </icinga>
112
- ")
113
-
114
70
  ret = subject.level_for_type "service", "type"
115
-
116
71
  ret.should == "level"
117
-
118
72
  end
119
73
 
120
74
  end
metadata CHANGED
@@ -1,195 +1,222 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hq-log-monitor-server
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.8.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-05-08 00:00:00.000000000 Z
12
+ date: 2013-05-09 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: json
127
144
  requirement: !ruby/object:Gem::Requirement
145
+ none: false
128
146
  requirements:
129
- - - '>='
147
+ - - ! '>='
130
148
  - !ruby/object:Gem::Version
131
149
  version: 1.7.7
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: 1.7.7
139
158
  - !ruby/object:Gem::Dependency
140
159
  name: rake
141
160
  requirement: !ruby/object:Gem::Requirement
161
+ none: false
142
162
  requirements:
143
- - - '>='
163
+ - - ! '>='
144
164
  - !ruby/object:Gem::Version
145
165
  version: 10.0.3
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: 10.0.3
153
174
  - !ruby/object:Gem::Dependency
154
175
  name: rspec
155
176
  requirement: !ruby/object:Gem::Requirement
177
+ none: false
156
178
  requirements:
157
- - - '>='
179
+ - - ! '>='
158
180
  - !ruby/object:Gem::Version
159
181
  version: 2.12.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: 2.12.0
167
190
  - !ruby/object:Gem::Dependency
168
191
  name: rspec_junit_formatter
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
  - !ruby/object:Gem::Dependency
182
207
  name: simplecov
183
208
  requirement: !ruby/object:Gem::Requirement
209
+ none: false
184
210
  requirements:
185
- - - '>='
211
+ - - ! '>='
186
212
  - !ruby/object:Gem::Version
187
213
  version: '0'
188
214
  type: :development
189
215
  prerelease: false
190
216
  version_requirements: !ruby/object:Gem::Requirement
217
+ none: false
191
218
  requirements:
192
- - - '>='
219
+ - - ! '>='
193
220
  - !ruby/object:Gem::Version
194
221
  version: '0'
195
222
  description: HQ log monitor system, central component
@@ -214,32 +241,34 @@ files:
214
241
  - features/submit-event.feature
215
242
  - features/overview-page.feature
216
243
  - features/support/steps.rb
244
+ - features/support/time.rb
217
245
  - features/support/env.rb
218
246
  - features/support/ui-steps.rb
219
247
  - spec/hq/log-monitor-server/misc-spec.rb
220
248
  - bin/hq-log-monitor-server
221
249
  homepage: https://github.com/jamespharaoh/hq-log-monitor-server
222
250
  licenses: []
223
- metadata: {}
224
251
  post_install_message:
225
252
  rdoc_options: []
226
253
  require_paths:
227
254
  - lib
228
255
  required_ruby_version: !ruby/object:Gem::Requirement
256
+ none: false
229
257
  requirements:
230
- - - '>='
258
+ - - ! '>='
231
259
  - !ruby/object:Gem::Version
232
260
  version: '0'
233
261
  required_rubygems_version: !ruby/object:Gem::Requirement
262
+ none: false
234
263
  requirements:
235
- - - '>='
264
+ - - ! '>='
236
265
  - !ruby/object:Gem::Version
237
266
  version: 1.3.6
238
267
  requirements: []
239
268
  rubyforge_project: hq-log-monitor-server
240
- rubygems_version: 2.0.3
269
+ rubygems_version: 1.8.23
241
270
  signing_key:
242
- specification_version: 4
271
+ specification_version: 3
243
272
  summary: HQ log monitor server
244
273
  test_files:
245
274
  - features/event-page.feature
@@ -247,6 +276,7 @@ test_files:
247
276
  - features/submit-event.feature
248
277
  - features/overview-page.feature
249
278
  - features/support/steps.rb
279
+ - features/support/time.rb
250
280
  - features/support/env.rb
251
281
  - features/support/ui-steps.rb
252
282
  - spec/hq/log-monitor-server/misc-spec.rb
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: 6c802a656d6c2c2f5cee3eed1f4c866b812fc5ba
4
- data.tar.gz: e234c43d9f6be7a9879c5192b7d0ab0a1b15e33f
5
- SHA512:
6
- metadata.gz: a2db019440cc38fe7319b32cb4d357f6b35eed61f7fdbedcdd651c12110a36c49751bb9c3ec47116660f8d230e2569ec6a9aed44cb4438bdd54215a34b570e7e
7
- data.tar.gz: 4f6b25e91c08a504f272615a4f34a6f03a3ad75532bd621a34fe9c728787bbefa55057e8a4abb963eecd62ab10730161729fae253c553e5ab2f880538038c34d