hq-log-monitor-server 0.7.0 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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