source: ogClient-Git/ogclient @ 1ab981a

Last change on this file since 1ab981a was ecd735c, checked in by Jose M. Guisado <jguisado@…>, 2 years ago

#1068 add -c/--config optional parameter

ogClient allows the user to specify the json config path with optional
parameters -c / --config:

ogclient -c /foo/bar/foobar.json

If specified config file is malformed ogClient will fail to start.

  • Property mode set to 100755
File size: 2.2 KB
Line 
1#!/usr/bin/python3
2
3#
4# Copyright (C) 2020-2021 Soleta Networks <info@soleta.eu>
5#
6# This program is free software: you can redistribute it and/or modify it under
7# the terms of the GNU Affero General Public License as published by the
8# Free Software Foundation; either version 3 of the License, or
9# (at your option) any later version.
10
11import json
12import logging
13import argparse
14import platform
15import subprocess
16try:
17        from signal import SIG_DFL, SIGPIPE
18except ImportError:
19        from signal import SIG_DFL
20
21
22from src.ogClient import *
23from src.log import configure_logging
24
25
26def send_event_dgram(msg, ip='127.0.0.1', port=55885):
27        sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
28        sock.sendto(bytes(msg, "utf-8"), (ip, port))
29
30
31def create_parser():
32        events = ['login', 'logout']
33        parser = argparse.ArgumentParser()
34        parser.set_defaults(func=None)
35        subparsers = parser.add_subparsers()
36
37        parser_event = subparsers.add_parser('event')
38
39        subparsers_event = parser_event.add_subparsers()
40        parser_event_login = subparsers_event.add_parser('login')
41        parser_event_login.set_defaults(func=lambda x: send_event_dgram(f'session start {x.user}'))
42        parser_event_login.add_argument('user', type=str)
43        parser_event_logout = subparsers_event.add_parser('logout')
44        parser_event_logout.set_defaults(func=lambda x: send_event_dgram(f'session stop {x.user}'))
45        parser_event_logout.add_argument('user', type=str)
46
47        parser.add_argument('-c', '--config', default="",
48                            help='ogClient JSON config file path')
49
50        return parser
51
52
53def main():
54        parser = create_parser()
55        args = parser.parse_args(sys.argv[1:])
56        if args.func:
57                args.func(args)
58                return
59
60        if args.config:
61                config_path = args.config
62        elif platform.system().lower() == 'linux':
63                config_path = f'{ogClient.OG_PATH}ogclient/cfg/ogclient.json'
64        else:
65                config_path = './cfg/ogclient.json'
66
67        try:
68                with open(config_path, 'r') as f:
69                        CONFIG = json.load(f)
70        except:
71                print('Error: Parsing configuration file')
72                return 0
73
74        MODE = CONFIG['opengnsys']['mode']
75        URL = CONFIG['opengnsys']['url']
76        if MODE == 'live':
77                proc = subprocess.Popen(["browser", "-qws", URL])
78        if MODE != 'windows':
79                signal.signal(SIGPIPE, SIG_DFL)
80
81        configure_logging(MODE)
82
83        client = ogClient(config=CONFIG)
84        client.connect()
85        client.run()
86
87if __name__ == "__main__":
88        main()
Note: See TracBrowser for help on using the repository browser.