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 +4 -4
- data/bin/mdigraph +93 -0
- data/bin/mdist +83 -0
- data/bin/mgrep +0 -1
- data/bin/mheat +128 -0
- data/bin/mval +21 -0
- data/lib/mats/version.rb +1 -1
- metadata +10 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cbc2142027bd71ea27a802c6eb78bb46cd1446c5
|
4
|
+
data.tar.gz: 8873881aa5470ef9ed4f6e1382c519c4b1f969c0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1425f6963594628762b1f5fa936f70a4fe75cfd02cb01cafbee8ed3c1b9813483b7eeed67b1d61eac0a1611aa6b47ccc90151e9325af2b80fe23e783e54cec86
|
7
|
+
data.tar.gz: 16f6d7f0bfa75de76b5842430ac5cc5db546079e679232e191c8190e4c6675f1a0f5a7c31595d20aa437353080fffff10f2924c07827134ff4fc91dbd1a567ac
|
data/bin/mdigraph
ADDED
@@ -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)
|
data/bin/mdist
ADDED
@@ -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
data/bin/mheat
ADDED
@@ -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)
|
data/bin/mval
ADDED
@@ -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)
|
data/lib/mats/version.rb
CHANGED
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.
|
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-
|
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
|