]> git.ipfire.org Git - collecty.git/blame - src/collecty/client.py
Add version information
[collecty.git] / src / collecty / client.py
CommitLineData
f37913e8 1#!/usr/bin/python3
73db5226
MT
2###############################################################################
3# #
4# collecty - A system statistics collection daemon for IPFire #
5# Copyright (C) 2012 IPFire development team #
6# #
7# This program is free software: you can redistribute it and/or modify #
8# it under the terms of the GNU General Public License as published by #
9# the Free Software Foundation, either version 3 of the License, or #
10# (at your option) any later version. #
11# #
12# This program is distributed in the hope that it will be useful, #
13# but WITHOUT ANY WARRANTY; without even the implied warranty of #
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
15# GNU General Public License for more details. #
16# #
17# You should have received a copy of the GNU General Public License #
18# along with this program. If not, see <http://www.gnu.org/licenses/>. #
19# #
20###############################################################################
21
c968f6d9
MT
22import argparse
23import dbus
73241420 24import platform
c968f6d9
MT
25import sys
26
f37913e8
MT
27from .constants import *
28from .i18n import _
73db5226
MT
29
30import logging
31log = logging.getLogger("collectly.client")
32
33class CollectyClient(object):
c968f6d9
MT
34 def __init__(self):
35 self.bus = dbus.SystemBus()
36
37 self.proxy = self.bus.get_object(BUS_DOMAIN, "/GraphGenerator")
38
39 def list_templates(self):
40 templates = self.proxy.ListTemplates()
41
42 return ["%s" % t for t in templates]
43
44 def list_templates_cli(self, ns):
45 templates = self.list_templates()
46
47 for t in sorted(templates):
f37913e8 48 print(t)
c968f6d9
MT
49
50 def generate_graph(self, template_name, **kwargs):
51 byte_array = self.proxy.GenerateGraph(template_name, kwargs,
52 signature="sa{sv}")
53
54 # Convert the byte array into a byte string again
55 if byte_array:
695624fc 56 return bytes(byte_array)
c968f6d9
MT
57
58 def generate_graph_cli(self, ns):
59 kwargs = {
5913a52c 60 "format" : ns.format,
c968f6d9
MT
61 "object_id" : ns.object,
62 }
63
64 if ns.height or ns.width:
65 kwargs.update({
66 "height" : ns.height or 0,
67 "width" : ns.width or 0,
68 })
69
70 if ns.interval:
71 kwargs["interval"] = ns.interval
72
73 # Generate the graph image
74 graph = self.generate_graph(ns.template, **kwargs)
75
76 # Write file to disk
77 with open(ns.filename, "wb") as f:
78 f.write(graph)
79
73241420
MT
80 def version_cli(self, args):
81 daemon_version = self.proxy.Version()
82
83 print(_("collecty %s running on Python %s") % \
84 (COLLECTY_VERSION, platform.python_version()))
85
86 if not COLLECTY_VERSION == daemon_version:
87 print(_("daemon %s") % daemon_version)
88
c968f6d9
MT
89 def parse_cli(self, args):
90 parser = argparse.ArgumentParser(prog="collecty-client")
91 subparsers = parser.add_subparsers(help="sub-command help")
92
93 # generate-graph
94 parser_generate_graph = subparsers.add_parser("generate-graph",
95 help=_("Generate a graph image"))
96 parser_generate_graph.set_defaults(func=self.generate_graph_cli)
97 parser_generate_graph.add_argument("--filename",
98 help=_("filename"), required=True)
5913a52c
MT
99 parser_generate_graph.add_argument("--format",
100 help=_("image format"), default=DEFAULT_IMAGE_FORMAT)
c968f6d9
MT
101 parser_generate_graph.add_argument("--interval", help=_("interval"))
102 parser_generate_graph.add_argument("--object",
103 help=_("Object identifier"), default="default")
104 parser_generate_graph.add_argument("--template",
105 help=_("The graph template identifier"), required=True)
73db5226 106
c968f6d9
MT
107 # Dimensions
108 parser_generate_graph.add_argument("--height", type=int, default=0,
109 help=_("Height of the generated image"))
110 parser_generate_graph.add_argument("--width", type=int, default=0,
111 help=_("Width of the generated image"))
73db5226 112
c968f6d9
MT
113 # list-templates
114 parser_list_templates = subparsers.add_parser("list-templates",
115 help=_("Lists all graph templates"))
116 parser_list_templates.set_defaults(func=self.list_templates_cli)
73db5226 117
73241420
MT
118 # version
119 parser_version = subparsers.add_parser("version", help=_("Show version"))
120 parser_version.set_defaults(func=self.version_cli)
121
c968f6d9 122 return parser.parse_args(args)
73db5226 123
c968f6d9
MT
124 def run_cli(self, args=None):
125 args = self.parse_cli(args or sys.argv[1:])
73db5226 126
c968f6d9 127 return args.func(args)