2 # -*- coding: utf-8 -*-
4 # This file is part of Karesansui Core.
6 # Copyright (C) 2010 HDE, Inc.
8 # This program is free software; you can redistribute it and/or
9 # modify it under the terms of the GNU Lesser General Public
10 # License as published by the Free Software Foundation; either
11 # version 2.1 of the License, or (at your option) any later version.
18 from karesansui.lib.const import GRAPH_COMMON_PARAM, DEFAULT_LANGS
19 from karesansui.lib.utils import is_readable, generate_phrase
21 def is_interface_file_exist(rrd_dir, dev):
24 rrd_filepath = ("%s/interface/if_packets-%s.rrd" % (rrd_dir, dev),
25 "%s/interface/if_octets-%s.rrd" % (rrd_dir, dev),
26 "%s/interface/if_errors-%s.rrd" % (rrd_dir, dev),
29 for filepath in rrd_filepath:
30 if is_readable(filepath) is False:
35 def create_interface_graph(_, lang, graph_dir, rrd_dir, start, end, dev, type):
36 graph_filename = "%s.png" % (generate_phrase(12,'abcdefghijklmnopqrstuvwxyz'))
37 graph_filepath = "%s/%s" % (graph_dir, graph_filename)
39 rrd_filepath = ("%s/interface/if_%s-%s.rrd" % (rrd_dir, type, dev),
44 "packets":"%%s - %s" % (_('Packets').encode("utf-8")),
45 "octets":"%%s - %s" % (_('Traffic').encode("utf-8")),
46 "errors":"%%s - %s" % (_('Errors').encode("utf-8")),
53 # errorsは1秒あたりのエラーパケット数
55 "packets":_("Packets / sec").encode("utf-8"),
56 "octets":_("Octet / sec").encode("utf-8"),
57 "errors":_("Packets / sec").encode("utf-8"),
60 for filepath in rrd_filepath:
61 if is_readable(filepath) is False:
64 legend_header_label = {"min":_('Min'),
70 for key in legend_header_label.keys():
71 if re.search(u"[^a-zA-Z0-9]", legend_header_label[key]):
72 legend_header_label[key] = "</tt>%s<tt>" % (legend_header_label[key].encode("utf-8"))
74 legend_header_label[key] = "%s" % (legend_header_label[key].encode("utf-8"))
76 legend_header = "<tt> %s %s %s %s</tt>" % (legend_header_label['min'],
77 legend_header_label['max'],
78 legend_header_label['ave'],
79 legend_header_label['last']
82 legend_label = {"rx":_('RX'),
85 for key in legend_label.keys():
86 if re.search(u"[^a-zA-Z0-9]", legend_label[key]):
87 legend_label[key] = "</tt>%s<tt>" % (legend_label[key].encode("utf-8"))
89 legend_label[key] = "%s" % (legend_label[key].encode("utf-8"))
91 title = "<tt>%s</tt>" % (graph_title[type] % (dev))
93 created_label = _('Graph created')
94 if re.search(u"[^a-zA-Z0-9 ]", created_label):
95 created_label = "</tt>%s<tt>" % (created_label.encode("utf-8"))
97 created_label = "%s" % (created_label.encode("utf-8"))
99 created_time = "%s" % (datetime.datetime.today().strftime(DEFAULT_LANGS[lang]['DATE_FORMAT'][1]))
100 created_time = re.sub(r':', '\:', created_time)
102 legend_footer = "<tt>%s \: %s</tt>" % (created_label, created_time)
104 data = rrdtool.graph(graph_filepath,
107 "--vertical-label", graph_label[type],
110 "--legend-direction", "bottomup",
111 "DEF:rx=%s:rx:AVERAGE" % (rrd_filepath[0]),
112 "DEF:tx=%s:tx:AVERAGE" % (rrd_filepath[0]),
113 "COMMENT:%s\\r" % legend_footer,
114 "COMMENT:<tt>---------------------------------------------------------------------------</tt>\\n",
115 "AREA:rx#E7EF00:<tt>%s </tt>" % (legend_label["rx"]),
116 "GPRINT:rx:MIN:<tt>%8.2lf%s</tt>",
117 "GPRINT:rx:MAX:<tt>%8.2lf%s</tt>",
118 "GPRINT:rx:AVERAGE:<tt>%8.2lf%s</tt>",
119 "GPRINT:rx:LAST:<tt>%8.2lf%s</tt>\\n",
120 "STACK:tx#80AA00:<tt>%s </tt>" % (legend_label["tx"]),
121 "GPRINT:tx:MIN:<tt>%8.2lf%s</tt>",
122 "GPRINT:tx:MAX:<tt>%8.2lf%s</tt>",
123 "GPRINT:tx:AVERAGE:<tt>%8.2lf%s</tt>",
124 "GPRINT:tx:LAST:<tt>%8.2lf%s</tt>\\n",
125 "COMMENT:%s\\n" % (legend_header),
131 return graph_filepath