ducksboard_reporter 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0f166259ade7200cbecbe4b6c47afebab9ec0168
4
- data.tar.gz: b4c7a1700503fb55d363461d70069f35f39fafc4
3
+ metadata.gz: a4fbafb079a9f649c86561507e1b17825d5634dc
4
+ data.tar.gz: c63cf5b41bf246be7f18388d8d659e4178b21441
5
5
  SHA512:
6
- metadata.gz: e9c0f3bacc413c914382430327ed53dc1e23eacb800aa69c0c363c6fc667b70261d77e1a8393775b6bd8d9ac210581155ac285a9776fc0a52669aab5432154ac
7
- data.tar.gz: 7a83efa936333b143b766f3df60043a858ba3623a66a0517779362ab74c349e562a5ab6cf8b03fe9ae91ac317c1cb1b5e69b1d3f3c1582085947886a1a37c429
6
+ metadata.gz: 822a3d67bf1bac56c65ea0f0e73f75c412d3722038c27f9eccba3eb2bb2c3d7f7d0e1e8dab6c4a0d17fa8f3721b0bb380d60586b3cad57b0bf91761f28fc10fa
7
+ data.tar.gz: 4a7707a5cbea6ccdac83e25b826d09aea74fd93daee64f2036c08a74cc7401db5813f2f7a0fd1f1719dee77b2e0dedda090f722b6877f60299cde8e4c8b0d128
data/example_config.yml CHANGED
@@ -8,7 +8,7 @@ reporters:
8
8
  - name: haproxy_log_requests
9
9
  type: HaproxyLogRequests
10
10
  options:
11
- log_file: /var/log/haproxy.log
11
+ log_file: haproxy.log
12
12
 
13
13
  widgets:
14
14
  - type: Box
@@ -0,0 +1,59 @@
1
+ module DucksboardReporter
2
+ class FileTail
3
+
4
+ attr_accessor :value, :timestamp, :name, :options
5
+
6
+ def initialize(path)
7
+ @path = path
8
+ @timestamp = Time.now.to_i
9
+ end
10
+
11
+ def run
12
+ open_file
13
+
14
+ while true do
15
+ if (current_time = Time.now.to_i) > @timestamp # flush every second
16
+ @every_second_block.call(current_time)
17
+ @timestamp = current_time
18
+ end
19
+
20
+ IO.select([@file])
21
+ line = @file.gets
22
+
23
+ if line
24
+ @line_block.call(line)
25
+ else
26
+ raise Errno::ENOENT unless File.exists?(@path)
27
+ sleep 0.001
28
+ end
29
+ end
30
+ rescue Errno::ENOENT
31
+ sleep 0.1
32
+ retry
33
+ end
34
+
35
+ def every_second(&block)
36
+ @every_second_block = block
37
+ end
38
+
39
+ def on_line(&block)
40
+ @line_block = block
41
+ end
42
+
43
+ private
44
+
45
+ def open_file
46
+ if @file && !@file.closed?
47
+ if File.stat(@path).ino == @file.stat.ino
48
+ return
49
+ else
50
+ @file.close
51
+ end
52
+ end
53
+
54
+ @file = File.open(@path, "r")
55
+ @file.seek(0, IO::SEEK_END)
56
+ end
57
+ end
58
+ end
59
+
@@ -9,37 +9,29 @@ module DucksboardReporter
9
9
  nosrvs = 0
10
10
 
11
11
  begin
12
- file = File.open(options[:log_file], "r")
12
+ tail = FileTail.new(options[:log_file])
13
13
  rescue Errno::ENOENT
14
- error("HaproxyLogRequests: Cannot open #{options[:log_file]}")
14
+ error("HaproxyLogRequests: Log file does not exist #{options[:log_file]}")
15
15
  return
16
16
  end
17
17
 
18
- file.seek(0, IO::SEEK_END)
19
- @timestamp = Time.now.to_i
20
-
21
- while true do
22
- if (current_time = Time.now.to_i) > @timestamp # flush every second
23
- @requests, requests = requests, 0
24
- @nosrvs, nosrvs = nosrvs, 0
25
- @timestamp = current_time
26
- end
27
-
28
- IO.select([file])
29
- line = file.gets
18
+ tail.every_second do
19
+ @requests, requests = requests, 0
20
+ @nosrvs, nosrvs = nosrvs, 0
21
+ end
30
22
 
23
+ tail.on_line do |line|
31
24
  case line
32
25
  when /NOSRV/
33
26
  nosrvs += 1
34
27
  when /./
35
28
  requests += 1
36
- else
37
- sleep 0.1
38
29
  end
39
30
  end
31
+
32
+ tail.run
40
33
  end
41
34
  end
42
35
  end
43
36
  end
44
37
 
45
-
@@ -1,3 +1,3 @@
1
1
  module DucksboardReporter
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
3
3
  end
@@ -10,6 +10,7 @@ Hash.include Hashie::Extensions::SymbolizeKeys
10
10
  require "ducksboard_reporter/version"
11
11
  require "ducksboard_reporter/reporter"
12
12
  require "ducksboard_reporter/widget"
13
+ require "ducksboard_reporter/file_tail"
13
14
 
14
15
  require "ducksboard_reporter/reporters/random"
15
16
  require "ducksboard_reporter/reporters/haproxy_log_requests"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ducksboard_reporter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - unnu
@@ -167,6 +167,7 @@ files:
167
167
  - ducksboard_reporter.gemspec
168
168
  - example_config.yml
169
169
  - lib/ducksboard_reporter.rb
170
+ - lib/ducksboard_reporter/file_tail.rb
170
171
  - lib/ducksboard_reporter/reporter.rb
171
172
  - lib/ducksboard_reporter/reporters/bandwidth.rb
172
173
  - lib/ducksboard_reporter/reporters/cpu_usage.rb