fluent-plugin-histogram 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- MTUxMjBkOGI3NTZmZGY2MzY2ZTg5MzcwODZlYjBkYjVmYmEzZjE3Mw==
4
+ YTQwZTlkZmU3MDdjNWUxNjkwYmI5YjI5MGRiODRlNjE0ZWFjNzQ4Nw==
5
5
  data.tar.gz: !binary |-
6
- Mjc4MTFkYzMyODIwZjE5NDJjNWI2ZjFiYjk0NmViNGE3ODU1ZjNmYQ==
6
+ NzcwMWNhM2UwNDE3MzE4NWJlOGJiYmIxNmU4YTk3MDU3MGE1ZDkyMw==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- MzQwYTFiYjlhMTMzYzdlMzdkNWNmYTdhZGU2NWZkOGIwNGI2YzdkZDk2OTZj
10
- NzlhNGQzYzllZDQ1MjZjMzliMzVkM2Q2ZjFhNDkxZDQxYmJiMWU2OWU3YmEy
11
- MGVmNDIwYmIwNjUzNzI2MjI4Y2NiMGNlZWZiMWMxNGMyYmI3MGY=
9
+ YjExZjE5ZTQzMTA1MmIxMTgzNmI1ZTViOTdmMzlhNzA2Yjg1OWNmYTQ1MmZj
10
+ MDk2ZDdkOTBhNDk1ZTA3NmFmZmEzMGZiMWQwZTRkOTJhYTRlMzU5NTllZjY5
11
+ OGM4NjE2YTExMDhiYjkwZWRlN2U2YTI4ODkxMjNlMDAzMjhlZDA=
12
12
  data.tar.gz: !binary |-
13
- NzQ1ZTNjMTFjNGE4ODRiNmUyZGM0MjI1ZTRmYTZhMzJhMmExNDIwY2VjZDMy
14
- OGMyZTYwMmExN2UxZTBjOGIwNzgxYzU3ZWJiZjQxYWRiZTc1Yzk4MTViMjNi
15
- MTNmNmI4ZThkMzg5YTdjZjQ2NWEzZjcyNmVlZmJjNjkyOTVkYTU=
13
+ YmYzM2RjYmY0MzY5YTUxOGQ3M2U5YzFmZTBiYzg5ZDZhZTk4NjA0ZWIyMDgz
14
+ YzJhMWYxYmNkMzNiMWVlOTA2NDEyNmE0OWEzMTA4Njc0NmQ2YTcwOWUzNWNm
15
+ ZmZkMzVlMWE0YzQ4NDllZWM3ZWYyMTc2MTVjNzUxMGY3OWJlYjk=
data/README.md CHANGED
@@ -27,7 +27,9 @@ $ echo '{"keys":["A", "B", "D"]}' | fluent-cat input.sample
27
27
 
28
28
  output is
29
29
  ```
30
- 2013-12-21T11:08:25+09:00 histo.sample.localhost {"hist":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 2, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0], "sum":28, "avg":0, "sd":0}
30
+ 2014-02-01 18:18:04 +0900 histo.localhost: {
31
+ "hist":[0,0,0,0,3,8,8,5,3,1],
32
+ "sum":7,"avg":0,"sd":3}
31
33
  ```
32
34
 
33
35
  count up about you specified key, and make **histogramatic something**.
@@ -42,17 +44,17 @@ And calculate,
42
44
 
43
45
  run bench
44
46
  ```
45
- $ ruby bench/genload.rb input.sample 5000
47
+ $ ruby bench/genload.rb input.sample 7000 -l 5
46
48
  ```
47
49
 
48
50
  output is,
49
51
  ```
50
- 2013-12-21T11:09:52+09:00 histo.sample.localhost
51
- {"hist":
52
- [859, 963, 1224, 1252, 957, 764, 746, 929, 1406, 1519, 1072, 955, 1069, 916, 797, 948, 1090, 915, 727, 730, 898, 1051, 918, 780, 751, 890, 1104, 976, 949, 1138, 996, 959, 1100, 964, 840, 832, 1020, 1196, 969, 756, 750, 939, 1108, 928, 883, 1154, 1173, 951, 871, 837, 776, 896, 1048, 961, 825, 780, 959, 1113, 1034, 1019, 1090, 1274, 1370, 1207, 930, 898, 1029, 907, 951, 1113, 921, 992, 1422, 1509, 1253, 924, 941, 1099, 898, 775, 994, 1182, 1170, 1515, 1788, 1216, 870, 1038, 938, 744, 826, 969, 892, 843, 883, 840, 800, 966, 1115, 978],
53
- "sum":100000,
54
- "avg":1000,
55
- "sd":193}
52
+ 2014-02-01 18:39:52 +0900 histo.sample.localhost: {
53
+ "hist":[0,0,0,0,0,0,0,13,36,38,31,36,37,32,32,32,30,25,10,0,0,0,0,0,0,0,0,76,221,275,248,242,274,302,293,281,274,200,66,0,0,0,0,0,0,0,0,222,655,875,899,917,907,869,851,864,859,640,230,21,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,69,203,261,189,62,0,0,3,7,6,6,7,6,7,8,7,8,10,5,0,225,681,909,873,811,820,873,870,886,923,913,902,902,921,940,900,874,892,899,901,869,839,844,827,809,805,592,192,0,0,0,51,150,193,190,198,200,201,209,203,205,168,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,20,22,16,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,104,147,118,41,0,0,1,5,9,8,4,3,7,10,8,6,5,2,0,0,0,0,0,0,0,0,0,0,0,0,5,13,16,19,21,22,23,18,20,33,31,11,0,0,0,0,0,0,0,0,35,107,152,148,124,122,146,168,172,163,117,38,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,9,22,29,13,0,0,0,0,0,0,1,2,1,0,1,2,1,0,0,38,102,127,100,37,0,0,1,5,9,10,11,11,11,13,14,14,10,4,2,1,1,2,1,0,0,0,0,1,2,2,7,17,24,29,34,36,29,28,41,41,25,8,1,2,1,1,2,2,2,2,30,79,97,95,99,114,122,126,132,122,93,37,2,3,3,2,2,2,3,3,2,2,2,2,1,0,0,0,1,8,22,29,20,7,2,2,2,3,5,8,10,7,3,2,1,0,1,3,3,30,94,138,112,42,4,4,11,14,9,6,5,8,12,8,3,1,1,4,8,12,13,11,10,9,9,9,8,7,3,0,7,20,27,27,22,22,29,27,25,25,16,10,8,6,4,4,7,6,4,3,18,60,94,110,121,110,90,95,116,128,98,38,12,11,11,13,7,2,5,10,11,8,5,4,3,3,8,10,6,12,21,20,19,18,14,11,10,10,13,16,13,9,9,8,5,4,5,9,11,41,95,106,70,26,7,6,4,15,26,19,12,12,14,16,17,15,10,8,6,4,5,5,3,5,8,7,8,10,9,6,7,15,22,25,24,22,29,37,35,27,16,12,11,8,10,12,16,21,18,9,23,72,107,99,108,150,158,135,139,166,148,95,69,71,59,25,10,11,9,8,7,8,13,14,12,13,10,3,1,11,28,37,35,25,15,10,7,9,15,18,13,12,23,26,18,14,15,13,10,38,83,85,54,42,58,68,52,25,15,20,19,17,19,17,12,11,11,9,13,20,22,19,12,13,24,23,15,16,14,13,18,27,38,35,26,26,32,42,47,44,37,26,17,13,16,18,13,13,16,11,29,75,95,94,108,142,171,172,155,139,121,91,73,67,52,36,28,20,11,10,17,27,26,11,4,15,31,36,31,31,37,38,34,33,32,25,19,16,13,13,13,16,22,22,20,24,34,31,14,27,71,105,98,62,57,77,66,34,26,31,28,29,38,39,26,23,30,29,27,29,27,17,10,20,35,36,25,20,24,23,20,27,41,42,33,34,41,45,44,42,40,36,32,29,28,20,20,35,41,40,35,31,34,33,31,46,61,65,74,80,81,79,84,94,77,44,31,31,33,30,17,21,33,30,28,37,51,56,43,30,32,37,34,29,32,33,32,37,39,39,41,41,37,24,20,39,54,51,37,37,51,51,67,118,159,164,148,125,105,101,100,97,102,123,144,131,110,95,81,92,98,96,112,116,107,89,83,111,133,130,126,128,125,139,162,152,131,122,111,120,148,133,100,100,107,121,133,129,115,91,89,117,136,140,139,142,174,193,182,198,206,180,174,194,192,150,126,147,169,170,151,132,129,113,293,719,955,929,902,923,907,876,884,874,676,324,161,165,149,129,99,81,92,100,98,104,121,95,66,108,144,144,139,156,188,177,151,140,115,98,119,135,132,138,137,129,137,150,141,121,126,106,76,278,646,849,716,352,157,160,161,166,182,191,172,143,155,183,179,181,188,171,157,156,153,112,100,187,231,218,229,221,208,208,216,245,271,268,247,245,254,234,221,244,245,218,203,195,188,141,154,285,327,306,417,629,755,757,732,708,707,704,643,615,556,376,280,279,267,250,256,284,266,175,220,457,581,596,617,603,551,522,550,563,553,567,565,512,476,472,468,464,454,429,423,453,447,306,95,0,0,0,0,91,283,386,287,93,0,0,4,12,14,15,20,21,16,9,7,9,9,4,0,0,0,0,0],
54
+ "sum":28415,
55
+ "avg":27,
56
+ "sd":202
57
+ }
56
58
  ```
57
59
 
58
60
  ## Configuration
@@ -65,6 +67,7 @@ output is,
65
67
  tag_prefix histo
66
68
  tag_suffix __HOSTNAME__ # this plugin mixined fluent-mixin-config-placeholders
67
69
  input_tag_remove_prefix input
70
+ bin_num 1024
68
71
  alpha 1 # count up like this, (■ = +1)
69
72
  # ■
70
73
  # ■ ■ ■ ■
@@ -75,6 +78,13 @@ output is,
75
78
  </match>
76
79
  ```
77
80
 
81
+ ##### Adbanced Configuration
82
+
83
+ * 'tag'
84
+ * 'out_include_histo'
85
+ * 'disable_revalue'
86
+ * 'hostname'
87
+
78
88
  ## Installation
79
89
 
80
90
  Add this line to your application's Gemfile:
data/bench/genload.rb CHANGED
@@ -80,8 +80,8 @@ require 'socket'
80
80
  require 'msgpack'
81
81
  require 'benchmark'
82
82
 
83
- def gen_word(len=nil)
84
- len = rand(5) + 1 unless len
83
+ def gen_word(max_len=5)
84
+ len = rand(max_len) + 1
85
85
  rand(36**len).to_s(36)
86
86
  end
87
87
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |gem|
4
4
  gem.name = "fluent-plugin-histogram"
5
- gem.version = "0.2.0"
5
+ gem.version = "0.2.1"
6
6
  gem.authors = ["Yusuke SHIMIZU"]
7
7
  gem.email = "a.ryuklnm@gmail.com"
8
8
  gem.description = "Combine inputs data and make histogram which helps to detect a hotspot."
@@ -102,7 +102,7 @@ module Fluent
102
102
  @hists[tag] ||= @zero_hist.dup
103
103
 
104
104
  # id = key.hash % @bin_num
105
- id = key[0..9].codepoints.collect{|cp| cp}.join().to_i % @bin_num # attention to long key(length > 10)
105
+ id = key.to_s[0..9].codepoints.collect{|cp| cp}.join().to_i % @bin_num # attention to long key(length > 10)
106
106
  @mutex.synchronize {
107
107
  (0..@alpha).each do |alpha|
108
108
  (-alpha..alpha).each do |al|
@@ -38,18 +38,32 @@ class HistogramOutputTest < Test::Unit::TestCase
38
38
  f.run do
39
39
  f.emit({"keys" => "input key"})
40
40
  f.emit({"keys" => "another key"})
41
+ f.emit({"keys" => 12})
42
+ f.emit({"keys" => ["1", "2", "3"]})
41
43
  end
42
44
  hist = f.instance.zero_hist.dup
43
45
  id = "input key"[0..9].codepoints.collect{|cp| cp}.join().to_i % bin_num
44
46
  hist[id] += 1
45
47
  id = "another key"[0..9].codepoints.collect{|cp| cp}.join().to_i % bin_num
46
48
  hist[id] += 1
47
- assert_equal({"test.input" => {:hist => hist, :sum => 2, :avg => 2/bin_num, :sd=>0}},
49
+ id = 12.to_s.codepoints.collect{|cp| cp}.join().to_i % bin_num
50
+ hist[id] += 1
51
+ ["1", "2", "3"].each do |k|
52
+ id = k.ord % bin_num
53
+ hist[id] += 1
54
+ end
55
+
56
+ sd = hist.instance_eval do
57
+ avg = inject(:+) / size
58
+ sigmas = map { |n| (avg - n)**2 }
59
+ Math.sqrt(sigmas.inject(:+) / size)
60
+ end
61
+ assert_equal({"test.input" => {:hist => hist, :sum => 6, :avg => 6/bin_num, :sd=>sd.to_i}},
48
62
  f.instance.flush)
49
63
  end
50
64
 
51
65
  def test_small_increment_with_alpha
52
- bin_num = 100
66
+ bin_num = 10
53
67
  alpha = 1
54
68
  f = create_driver(%[
55
69
  bin_num #{bin_num}
@@ -58,17 +72,38 @@ class HistogramOutputTest < Test::Unit::TestCase
58
72
  f.run do
59
73
  f.emit({"keys" => "A"})
60
74
  f.emit({"keys" => "B"})
75
+ f.emit({"keys" => 12})
76
+ f.emit({"keys" => ["1", "2", "3"]})
61
77
  end
62
78
  hist = f.instance.zero_hist.dup
63
79
  id = "A".ord % bin_num
64
80
  hist[id] += 2
65
81
  hist[(id + alpha) % bin_num] += 1
66
- hist[id - alpha] += 1
82
+ hist[(id - alpha) % bin_num] += 1
83
+
67
84
  id = "B".ord % bin_num
68
85
  hist[id] += 2
69
86
  hist[(id + alpha) % bin_num] += 1
70
- hist[id - alpha] += 1
71
- assert_equal({"test.input" => {:hist => hist, :sum => 2, :avg => 2/bin_num, :sd=>0}},
87
+ hist[(id - alpha) % bin_num] += 1
88
+
89
+ id = 12.to_s.codepoints.collect{|cp| cp}.join().to_i % bin_num
90
+ hist[id] += 2
91
+ hist[(id + alpha) % bin_num] += 1
92
+ hist[(id - alpha) % bin_num] += 1
93
+
94
+ ["1", "2", "3"].each do |k|
95
+ id = k.ord % bin_num
96
+ hist[id] += 2
97
+ hist[(id + alpha) % bin_num] += 1
98
+ hist[(id - alpha) % bin_num] += 1
99
+ end
100
+
101
+ sd = hist.instance_eval do
102
+ avg = inject(:+) / size
103
+ sigmas = map { |n| (avg - n)**2 }
104
+ Math.sqrt(sigmas.inject(:+) / size)
105
+ end
106
+ assert_equal({"test.input" => {:hist => hist, :sum => 6, :avg => 6/bin_num, :sd=>sd.to_i}},
72
107
  f.instance.flush)
73
108
  end
74
109
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-histogram
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yusuke SHIMIZU