mats 0.0.1 → 0.0.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5c1194e381d20a275be27ff83d3f7d8ac210139a
4
- data.tar.gz: 05c6cb71c3ab6273db0f3cc6d179b066f9ced27b
3
+ metadata.gz: cbc2142027bd71ea27a802c6eb78bb46cd1446c5
4
+ data.tar.gz: 8873881aa5470ef9ed4f6e1382c519c4b1f969c0
5
5
  SHA512:
6
- metadata.gz: 5d3a6480d97877ee60712971cd64f35a0b561a798df3c5544d5860a42bd5eaf987e53bcdb38038ec0f0dcfca43a9c613fbf69f02dc3f700f98a6ee5e6ec2e841
7
- data.tar.gz: 524880ec03b8f01e9d8f2ab528624fc59b643ca4296f90564a63ab486c62163cd8465553c5f824e89856cebd35725198c4dcf8a99114b3f1821f2fd53e4522f0
6
+ metadata.gz: 1425f6963594628762b1f5fa936f70a4fe75cfd02cb01cafbee8ed3c1b9813483b7eeed67b1d61eac0a1611aa6b47ccc90151e9325af2b80fe23e783e54cec86
7
+ data.tar.gz: 16f6d7f0bfa75de76b5842430ac5cc5db546079e679232e191c8190e4c6675f1a0f5a7c31595d20aa437353080fffff10f2924c07827134ff4fc91dbd1a567ac
@@ -0,0 +1,93 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $LOAD_PATH.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
4
+ require 'mats'
5
+ require 'set'
6
+ require 'pp'
7
+
8
+ # MsgPack Prety Print
9
+ class MDiGraph < Mats::Stream
10
+ def initialize
11
+ super
12
+ @path = nil
13
+ @key = nil
14
+ @v_max = nil
15
+ @h_format = false
16
+ @optpsr.on("-p VAL", "Path to graphviz tools such as dot, neato") { |v| @path = v }
17
+ @optpsr.on("-k VAL", "Key to count value") { |v| @key = v }
18
+ @optpsr.on("-h", "Convert value to human readable format") { |v| @h_format = true }
19
+ @route = Hash.new {|h1,k1| h1[k1] = Hash.new {|h2,k2| h2[k2] = 0.0 }}
20
+ @nodes = Set.new
21
+ end
22
+
23
+ def setup(argv)
24
+ @src = argv[0]
25
+ @dst = argv[1]
26
+ end
27
+
28
+ def add_value(src, dst, val)
29
+ if src.instance_of? Array
30
+ src.each { |s| add_value(s, dst, val) }
31
+ elsif src.instance_of? Hash
32
+ src.each { |k,s| add_value(s, dst, val) }
33
+ end
34
+
35
+ if dst.instance_of? Array
36
+ dst.each { |d| add_value(src, d, val) }
37
+ elsif dst.instance_of? Hash
38
+ dst.each { |k,d| add_value(src, d, val) }
39
+ end
40
+
41
+ if src.instance_of? String and dst.instance_of? String
42
+ @route[src][dst] += val
43
+ @nodes.add(src)
44
+ @nodes.add(dst)
45
+ @v_max = @route[src][dst] if @v_max.nil? or @v_max < @route[src][dst]
46
+ end
47
+ end
48
+
49
+ def exec(obj)
50
+ if obj.has_key? @src and obj.has_key? @dst
51
+ if @key.nil?
52
+ add_value(obj[@src], obj[@dst], 1)
53
+ else
54
+ if obj.has_key? @key
55
+ add_value(obj[@src], obj[@dst], obj[@key])
56
+ end
57
+ end
58
+ end
59
+ end
60
+
61
+ def convert_format(v)
62
+ suffix = ''
63
+ suffix_list = ['K', 'M', 'G', 'T']
64
+ while suffix_list.size > 0 and v > 1000.0
65
+ v = v / 1000.0
66
+ suffix = suffix_list.shift
67
+ end
68
+ return v, suffix
69
+ end
70
+
71
+ def teardown
72
+ max_width = 5
73
+ puts "digraph hoge {"
74
+ @route.each do |src, dst_map|
75
+ dst_map.each do |dst, value|
76
+ v, suffix = (@h_format) ? convert_format(value) : [value, '']
77
+ if @key.nil?
78
+ v_str = v.to_i.to_s + suffix
79
+ else
80
+ v_str = sprintf("%.2f%s", v, suffix)
81
+ end
82
+ # v_str = ((@key.nil?) ? value.to_i : value).to_s + suffix
83
+ w = (@v_max <= max_width) ? value.to_i : (value * max_width / @v_max).to_i + 1
84
+ puts " \"#{src}\" -> \"#{dst}\" [label=\"#{v_str}\", penwidth=#{w}];"
85
+ end
86
+ end
87
+ puts "}"
88
+ # pp @route
89
+ end
90
+ end
91
+
92
+ ins = MDiGraph.new()
93
+ ins.run(ARGV, 0..1)
@@ -0,0 +1,83 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $LOAD_PATH.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
4
+ require 'mats'
5
+ require 'pp'
6
+
7
+ class MDist < Mats::Stream
8
+ def initialize
9
+ super
10
+ @fixed_min = nil
11
+ @fixed_max = nil
12
+ @optpsr.on('-l VAL', "lower limit of distribution") { |v| @fixed_min = v.to_f }
13
+ @optpsr.on('-h VAL', "higher limit of distribution") { |v| @fixed_max = v.to_f }
14
+ end
15
+
16
+ def setup(argv)
17
+ @dist_s = Hash.new { |h,k| h[k] = 0 }
18
+ @dist_v = Array.new
19
+ @key = argv[0]
20
+ @v_max = nil
21
+ @v_min = nil
22
+ end
23
+
24
+ def add_value(v)
25
+ @dist_v << v
26
+ @v_max = v if @v_max.nil? or @v_max < v
27
+ @v_min = v if @v_min.nil? or v < @v_min
28
+ end
29
+
30
+ def exec(obj)
31
+ if obj.has_key? @key
32
+ @dist_s[obj[@key]] += 1 if obj[@key].instance_of? String
33
+ add_value(obj[@key].to_f) if obj[@key].instance_of? Fixnum
34
+ add_value(obj[@key]) if obj[@key].instance_of? Float
35
+ end
36
+ end
37
+
38
+ def teardown
39
+ obj = {}
40
+
41
+ if @dist_s.size > 0
42
+ obj['str_dist'] = @dist_s
43
+ end
44
+
45
+ if @dist_v.size > 0
46
+ max = (@fixed_max.nil?) ? @v_max : @fixed_max
47
+ min = (@fixed_min.nil?) ? @v_min : @fixed_min
48
+
49
+ unit_len = 10
50
+ unit_size = (max - min) / unit_len
51
+ out_of_range = 0
52
+
53
+ val_dist = Array.new(unit_len, 0)
54
+ @dist_v.each do |v|
55
+ if v < min or max < v
56
+ out_of_range += 1
57
+ next
58
+ end
59
+
60
+ idx = ((v - min) / unit_size).to_i
61
+ idx = unit_len - 1 if idx >= unit_len
62
+ val_dist[idx] += 1
63
+ end
64
+
65
+ label_dist = []
66
+ unit_len.times do |idx|
67
+ label_dist << (min + (unit_size * idx))
68
+ end
69
+ label_dist << max
70
+
71
+ obj['val_dist'] = {
72
+ "val" => val_dist,
73
+ "label" => label_dist,
74
+ "out_of_range" => out_of_range,
75
+ }
76
+ end
77
+
78
+ write_stream(obj)
79
+ end
80
+ end
81
+
82
+ ins = MDist.new()
83
+ ins.run(ARGV, 0..0)
data/bin/mgrep CHANGED
@@ -27,7 +27,6 @@ class MGrep < Mats::Stream
27
27
  end
28
28
 
29
29
  def setup(argv)
30
- p argv
31
30
  @ptn = /#{argv[0]}/
32
31
  end
33
32
 
@@ -0,0 +1,128 @@
1
+ #!/usr/bin/env ruby
2
+ # coding: utf-8
3
+
4
+
5
+ $LOAD_PATH.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
6
+ require 'mats'
7
+ require 'pp'
8
+ require 'time'
9
+
10
+ # MsgPack Prety Print
11
+ class MHeatMap < Mats::Stream
12
+ BLANK = ' '
13
+ BARS = ['▁', '▂', '▃', '▄', '▅', '▆', '▇', '█']
14
+
15
+ def initialize
16
+ super
17
+
18
+ # Set options
19
+ @ts_key = 'ts'
20
+ @optpsr.on('-t VAL', 'timestamp key name') { |v| @ts_key = v }
21
+
22
+ @count_key = nil
23
+ @optpsr.on('-c VAL', 'key name to sum numbers') { |v| @count_key = v }
24
+
25
+ @width = 80 - 32
26
+ @optpsr.on('-w VAL', 'width') { |v| @width = v.to_i }
27
+
28
+ @relative = false
29
+ @optpsr.on('-r', 'relative time') { |v| @relative = true }
30
+
31
+ # Set internval parameters
32
+ @key = nil
33
+ @ts_min = nil
34
+ @ts_max = nil
35
+ @rows = Hash.new {|h,k| h[k] = Array.new}
36
+ end
37
+
38
+ def setup(argv)
39
+ @key = argv[0]
40
+ end
41
+
42
+ def add_ts(key, ts, val)
43
+ if key.instance_of? Array
44
+ key.each { |v| add_ts(v, ts, val) }
45
+ elsif key.instance_of? Hash
46
+ key.each { |k,v| add_ts(v, ts, val) }
47
+ elsif key.instance_of? String
48
+ @rows[key] << [ts, val]
49
+ end
50
+ end
51
+
52
+ def exec(obj)
53
+ return if !(obj.has_key? @ts_key) or !(obj.has_key? @key)
54
+ ts = obj[@ts_key]
55
+ @ts_min = ts if @ts_min.nil? or ts < @ts_min
56
+ @ts_max = ts if @ts_max.nil? or @ts_max < ts
57
+
58
+ if @count_key.nil?
59
+ add_ts(obj[@key], obj[@ts_key], 1)
60
+ else
61
+ add_ts(obj[@key], obj[@ts_key], obj[@count_key]) if obj.has_key? @count_key
62
+ end
63
+ end
64
+
65
+ def teardown
66
+ dur_ts = @ts_max - @ts_min
67
+ ts_unit = dur_ts / @width
68
+
69
+ cols = Array.new(@width)
70
+ (0..@width-1).each do |i|
71
+ if @relative
72
+ ts = ts_unit * i
73
+ cols[i] = sprintf("%02d:%02d:%02d", (ts / 3600).to_i,
74
+ ((ts % 3600) / 60).to_i, (ts % 60))
75
+ else
76
+ dt = Time.at(@ts_min + ts_unit * i)
77
+ cols[i] = dt.to_s.split(' ')[0..1].join(' ')
78
+ end
79
+ end
80
+
81
+
82
+ data_map = Hash.new {|h,k| h[k] = {
83
+ 'row' => Array.new(@width, 0),
84
+ 'max' => 0,
85
+ }}
86
+ @rows.each do |k, ts_list|
87
+ ts_list.each do |ts, val|
88
+ idx = ((ts - @ts_min) / ts_unit).to_i
89
+ idx = @width - 1 if idx >= @width
90
+ data_map[k]['row'][idx] += val
91
+ end
92
+ end
93
+
94
+ obj = {
95
+ 'cols' => cols,
96
+ 'rows' => data_map,
97
+ 'ts_max' => @ts_max,
98
+ 'ts_min' => @ts_min,
99
+ }
100
+ # write_stream(obj)
101
+
102
+ STDOUT.write(sprintf("%28s | %s", "", cols[0]))
103
+ puts
104
+ STDOUT.write(sprintf("%28s | %s|", "-" * 28,
105
+ "-" * @width))
106
+ puts
107
+
108
+ data_map.each do |k, row|
109
+ label = sprintf("%28s | ", k[0..31])
110
+ STDOUT.write(label)
111
+ v_max = row['row'].max
112
+ row['row'].each do |v|
113
+ if v == 0
114
+ STDOUT.write(BLANK)
115
+ else
116
+ bi = (v / v_max) * BARS.size
117
+ bi = BARS.size - 1 if BARS.size <= bi
118
+ STDOUT.write(BARS[bi])
119
+ end
120
+ end
121
+ STDOUT.write('|')
122
+ puts
123
+ end
124
+ end
125
+ end
126
+
127
+ ins = MHeatMap.new()
128
+ ins.run(ARGV, 0..0)
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $LOAD_PATH.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
4
+ require 'mats'
5
+ require 'pp'
6
+
7
+ # MsgPack Prety Print
8
+ class MVal < Mats::Stream
9
+ def setup(argv)
10
+ @key = argv[0]
11
+ end
12
+
13
+ def exec(obj)
14
+ if obj.instance_of?(Hash) and obj.key?(@key)
15
+ self.write_stream({@key => obj[@key]})
16
+ end
17
+ end
18
+ end
19
+
20
+ ins = MVal.new()
21
+ ins.run(ARGV, 0..0)
@@ -1,3 +1,3 @@
1
1
  module Mats
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mats
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Masayoshi Mizutani
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-20 00:00:00.000000000 Z
11
+ date: 2014-07-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -57,8 +57,12 @@ email:
57
57
  - muret@haeena.net
58
58
  executables:
59
59
  - mcount
60
+ - mdigraph
61
+ - mdist
60
62
  - mgrep
63
+ - mheat
61
64
  - mpp
65
+ - mval
62
66
  extensions: []
63
67
  extra_rdoc_files: []
64
68
  files:
@@ -68,8 +72,12 @@ files:
68
72
  - README.md
69
73
  - Rakefile
70
74
  - bin/mcount
75
+ - bin/mdigraph
76
+ - bin/mdist
71
77
  - bin/mgrep
78
+ - bin/mheat
72
79
  - bin/mpp
80
+ - bin/mval
73
81
  - lib/mats.rb
74
82
  - lib/mats/version.rb
75
83
  - mats.gemspec