author | Tero Marttila <terom@fixme.fi> |
Tue, 25 Jan 2011 01:28:06 +0200 | |
changeset 32 | 47e977c23ba2 |
permissions | -rw-r--r-- |
32
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
1 |
from rrdweb import rrd |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
2 |
|
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
3 |
import operator |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
4 |
|
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
5 |
def host_def (idx, name, dir, ds_in, ds_out, cf) : |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
6 |
""" |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
7 |
VDEFs for given host, giving its avg/max values: |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
8 |
|
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
9 |
DEF:in/out_{idx} |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
10 |
CDEFtraf_{idx} |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
11 |
VDEF:avg/max_{idx} |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
12 |
PRINT:{idx} avg/max {value} |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
13 |
""" |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
14 |
|
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
15 |
params = dict( |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
16 |
dir=dir, ds_in=ds_in, ds_out=ds_out, cf=cf, |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
17 |
idx=idx, rrd='%s/%s.rrd' % (dir, name) |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
18 |
) |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
19 |
|
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
20 |
return [ |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
21 |
# in/out bandwidth in bytes/s |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
22 |
'DEF:in_%(idx)d=%(rrd)s:%(ds_in)s:%(cf)s' % params, |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
23 |
'DEF:out_%(idx)d=%(rrd)s:%(ds_out)s:%(cf)s' % params, |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
24 |
|
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
25 |
# total traffic in bits/s |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
26 |
'CDEF:traf_%(idx)d=in_%(idx)d,out_%(idx)d,+,8,*' % params, |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
27 |
|
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
28 |
# average + maximum values |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
29 |
'VDEF:avg_%(idx)d=traf_%(idx)d,AVERAGE' % params, |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
30 |
'VDEF:max_%(idx)d=traf_%(idx)d,MAXIMUM' % params, |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
31 |
|
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
32 |
# output |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
33 |
'PRINT:avg_%(idx)d:%(idx)d avg %%lf' % params, |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
34 |
'PRINT:max_%(idx)d:%(idx)d max %%lf' % params, |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
35 |
] |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
36 |
|
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
37 |
def parse_report (rrds, lines) : |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
38 |
""" |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
39 |
Parse the report output into a [ (name, avg, max) ] list |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
40 |
""" |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
41 |
|
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
42 |
# idx values by type |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
43 |
data = { |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
44 |
'avg': {}, |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
45 |
'max': {}, |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
46 |
} |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
47 |
|
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
48 |
# interpret output |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
49 |
for line in lines : |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
50 |
# parse |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
51 |
idx, type, value = line.split() |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
52 |
|
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
53 |
# convert |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
54 |
idx = int(idx) |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
55 |
value = float(value) |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
56 |
|
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
57 |
# store |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
58 |
data[type][idx] = value |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
59 |
|
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
60 |
# build into name : (values) dict |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
61 |
return [ |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
62 |
( |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
63 |
(name, data['avg'][idx], data['max'][idx]) |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
64 |
) for idx, name in enumerate(rrds) |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
65 |
] |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
66 |
|
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
67 |
def calc_top_hosts (dir, rrds, ds_in, ds_out, period='15m', count=5, cf='AVERAGE') : |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
68 |
""" |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
69 |
Return the list of top-N rrd's in the given dir, sorted by total in/out bandwidth average over the given period. |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
70 |
""" |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
71 |
|
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
72 |
# vdefs for hosts, avg/max_<idx> in bits/s + prints |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
73 |
defs = [stmt for idx, name in enumerate(rrds) for stmt in host_def(idx, name, dir, ds_in, ds_out, cf)] |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
74 |
|
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
75 |
# execute |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
76 |
_, _, output, _ = rrd.graph(False, *defs, start=('-%s' % period)) |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
77 |
|
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
78 |
# parse |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
79 |
data = parse_report(rrds, output) |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
80 |
|
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
81 |
# sort for top-N avg |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
82 |
data.sort(key=operator.itemgetter(1)) |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
83 |
top_avg = data[:count] |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
84 |
|
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
85 |
# sort for top-N max |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
86 |
data.sort(key=operator.itemgetter(2)) |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
87 |
top_max = data[:count] |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
88 |
|
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
89 |
# merge hosts (we lose sorting order) |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
90 |
return set(host for host, avg, max in top_avg + top_max) |
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
91 |
|
47e977c23ba2
implement rendering of pmacct rrd graphs, and a dir/top.png feature
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
92 |