ddtop 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +10 -0
- data/bin/ddtop +4 -1
- data/lib/ddtop/ddtop.rb +34 -9
- data/lib/ddtop/version.rb +1 -1
- metadata +1 -1
data/README.md
CHANGED
@@ -38,6 +38,16 @@ Swap: 0k total, 0k used, 0k free, 1124444k cached
|
|
38
38
|
|
39
39
|
![datadog-metrics.png](https://bitbucket.org/winebarrel/ddtop/downloads/datadog-metrics.png)
|
40
40
|
|
41
|
+
### `--emits` option
|
42
|
+
|
43
|
+
Sending all processes data to Datadog is too heavy.
|
44
|
+
|
45
|
+
You can specify the process of sending in `--emits` option.
|
46
|
+
|
47
|
+
```sh
|
48
|
+
ddtop --emits httpd.worker,awk,ruby
|
49
|
+
```
|
50
|
+
|
41
51
|
## Contributing
|
42
52
|
|
43
53
|
1. Fork it ( http://github.com/<my-github-username>/ddtop/fork )
|
data/bin/ddtop
CHANGED
data/lib/ddtop/ddtop.rb
CHANGED
@@ -12,12 +12,14 @@ class Ddtop::Ddtop
|
|
12
12
|
def run
|
13
13
|
clear_screen
|
14
14
|
|
15
|
+
emits = get_emits(ARGV)
|
16
|
+
|
15
17
|
summary, fields = nil
|
16
18
|
values = []
|
17
19
|
|
18
20
|
head_hook = proc do
|
19
21
|
if summary and not values.empty?
|
20
|
-
emit_points(summary, fields, values)
|
22
|
+
emit_points(summary, fields, values, emits)
|
21
23
|
values.clear
|
22
24
|
end
|
23
25
|
end
|
@@ -33,6 +35,19 @@ class Ddtop::Ddtop
|
|
33
35
|
|
34
36
|
private
|
35
37
|
|
38
|
+
def get_emits(args)
|
39
|
+
i = args.index('--emits')
|
40
|
+
emits = []
|
41
|
+
|
42
|
+
if i and args[i + 1] and args[i + 1] !~ /\A-/
|
43
|
+
emits = args[i + 1].split(/,/).map {|i| i.strip }.select {|i| not i.empty? }
|
44
|
+
args.delete_at(i + 1)
|
45
|
+
args.delete_at(i)
|
46
|
+
end
|
47
|
+
|
48
|
+
return emits
|
49
|
+
end
|
50
|
+
|
36
51
|
def top_each_lien(head_hook)
|
37
52
|
cmd = [TOP_CMD, ARGV].flatten.join(' ')
|
38
53
|
|
@@ -47,7 +62,7 @@ class Ddtop::Ddtop
|
|
47
62
|
line = top.gets
|
48
63
|
|
49
64
|
if head?(line)
|
50
|
-
@win_rows =
|
65
|
+
@win_rows, @win_cols = get_winsize
|
51
66
|
@curr_row = 0
|
52
67
|
yield if block_given?
|
53
68
|
reset_cursor
|
@@ -55,10 +70,16 @@ class Ddtop::Ddtop
|
|
55
70
|
|
56
71
|
@curr_row += 1
|
57
72
|
|
73
|
+
if @curr_row <= @win_rows
|
74
|
+
line.chomp!
|
75
|
+
delta = @win_cols - line.length
|
76
|
+
line += ' ' * (@win_cols - line.length) if delta > 0
|
77
|
+
end
|
78
|
+
|
58
79
|
if @curr_row < @win_rows
|
59
|
-
|
80
|
+
puts line[0, @win_cols]
|
60
81
|
elsif @curr_row == @win_rows
|
61
|
-
print line
|
82
|
+
print line[0, @win_cols]
|
62
83
|
end
|
63
84
|
|
64
85
|
return line.strip
|
@@ -102,9 +123,9 @@ class Ddtop::Ddtop
|
|
102
123
|
Hash[*items.flatten]
|
103
124
|
end
|
104
125
|
|
105
|
-
def emit_points(summary, names, values)
|
126
|
+
def emit_points(summary, names, values, emits)
|
106
127
|
time = summary.delete(:time)
|
107
|
-
fields = aggregate_fields(names, values)
|
128
|
+
fields = aggregate_fields(names, values, emits)
|
108
129
|
emit_points0(time, summary)
|
109
130
|
emit_points0(time, fields)
|
110
131
|
end
|
@@ -123,7 +144,7 @@ class Ddtop::Ddtop
|
|
123
144
|
# nothing to do
|
124
145
|
end
|
125
146
|
|
126
|
-
def aggregate_fields(names, values)
|
147
|
+
def aggregate_fields(names, values, emits)
|
127
148
|
aggregated = {}
|
128
149
|
|
129
150
|
values.map {|v|
|
@@ -131,6 +152,8 @@ class Ddtop::Ddtop
|
|
131
152
|
%w(PID USER PR NI S).each {|k| h.delete(k) }
|
132
153
|
h['TIME+'] = parse_time_plus(h['TIME+'])
|
133
154
|
h
|
155
|
+
}.select {|h|
|
156
|
+
emits.empty? || emits.include?(h['COMMAND'])
|
134
157
|
}.sort_by {|h|
|
135
158
|
h['COMMAND']
|
136
159
|
}.chunk {|h|
|
@@ -158,8 +181,10 @@ class Ddtop::Ddtop
|
|
158
181
|
t[0] * 60 + t[1] + t[2] / 100
|
159
182
|
end
|
160
183
|
|
161
|
-
def
|
162
|
-
`stty -a`.split("\n").first.split(';')
|
184
|
+
def get_winsize
|
185
|
+
`stty -a`.split("\n").first.split(';').values_at(1, 2).map do |nv|
|
186
|
+
nv.strip.split(/\s+/, 2)[1].to_i
|
187
|
+
end
|
163
188
|
end
|
164
189
|
|
165
190
|
def clear_screen
|
data/lib/ddtop/version.rb
CHANGED