OSDN Git Service

Add message for locale translator
[karesansui/karesansui.git] / karesansui / lib / rrd / interface.py
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3 #
4 # This file is part of Karesansui Core.
5 #
6 # Copyright (C) 2010 HDE, Inc.
7 #
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.
12 #
13
14 import re
15 import datetime
16 import rrdtool
17 import karesansui
18 from karesansui.lib.const import GRAPH_COMMON_PARAM, DEFAULT_LANGS
19 from karesansui.lib.utils import is_readable, generate_phrase
20
21 def is_interface_file_exist(rrd_dir, dev):
22     ret = True
23
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),
27                     )
28
29     for filepath in rrd_filepath:
30         if is_readable(filepath) is False:
31             ret = False
32
33     return ret
34
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)
38
39     rrd_filepath = ("%s/interface/if_%s-%s.rrd" % (rrd_dir, type, dev),
40                     )
41     # TRANSLATORS:
42     #  ネットワークのグラフのタイトル
43     graph_title = {
44         "packets":"%%s - %s" % (_('Packets').encode("utf-8")),
45         "octets":"%%s - %s" % (_('Traffic').encode("utf-8")),
46         "errors":"%%s - %s" % (_('Errors').encode("utf-8")),
47         }
48
49     # TRANSLATORS:
50     #  ネットワークのグラフの縦軸のラベル
51     #    packetsは1秒あたりのパケット数
52     #    octetsは1秒あたりのバイト数
53     #    errorsは1秒あたりのエラーパケット数
54     graph_label = {
55         "packets":_("Packets / sec").encode("utf-8"),
56         "octets":_("Octet / sec").encode("utf-8"),
57         "errors":_("Packets / sec").encode("utf-8"),
58         }
59
60     for filepath in rrd_filepath:
61         if is_readable(filepath) is False:
62             return ""
63
64     legend_header_label = {"min":_('Min'),
65                            "max":_('Max'),
66                            "ave":_('Ave'),
67                            "last":_('Last'),
68                            }
69
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"))
73         else:
74             legend_header_label[key] = "%s" % (legend_header_label[key].encode("utf-8"))
75
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']
80                                                                                 )
81
82     legend_label = {"rx":_('RX'),
83                     "tx":_('TX'),
84                     }
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"))
88         else:
89             legend_label[key] = "%s" % (legend_label[key].encode("utf-8"))
90
91     title = "<tt>%s</tt>" % (graph_title[type] % (dev))
92
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"))
96     else:
97         created_label = "%s" % (created_label.encode("utf-8"))
98
99     created_time = "%s" % (datetime.datetime.today().strftime(DEFAULT_LANGS[lang]['DATE_FORMAT'][1]))
100     created_time = re.sub(r':', '\:', created_time)
101
102     legend_footer = "<tt>%s \: %s</tt>" % (created_label, created_time)
103
104     data = rrdtool.graph(graph_filepath,
105                          GRAPH_COMMON_PARAM,
106                          "--title", title,
107                          "--vertical-label", graph_label[type],
108                          "--start", start,
109                          "--end",  end,
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),
126                          "COMMENT: \\n",
127                          "LINE1:rx#E7EF00",
128                          "STACK:tx#80AA00",
129                          )
130
131     return graph_filepath