blob: 50f0e72914868b64a7ff3cbf222556892e377ae6 [file] [log] [blame]
Joachim Steigera008e622019-07-26 18:38:28 +02001#!/usr/bin/env python3
2
3import sys
4import argparse
5import requests
6
7version = "0.1"
8
9#access rest
10def build_url(suffix):
11 BASE_PATH = "/api/backend/v1"
12 return ("http://" + server_host + ":" + server_port + BASE_PATH + suffix)
13
14def rest_get(suffix):
15 if verbose:
16 print("GET "+ build_url(suffix))
17 try:
18 resp = requests.get(build_url(suffix))
19 except:
20 print("REST GET failed")
21 return
22 if resp.ok:
23 try:
24 js = resp.json()
25 print("%s: %s" % (suffix, js))
26 except:
27 return
28 else:
29 return None
30
31def rest_post(suffix, js = None):
32 if verbose:
33 print("POST "+ build_url(suffix)+ str(js))
34 resp = requests.post(build_url(suffix), json=js)
35 if not resp.ok:
36 print("post failed")
37
38def rest_delete(suffix):
39 if verbose:
40 print("DELETE "+ build_url(suffix))
41 resp = requests.delete(build_url(suffix))
42 if not resp.ok:
43 print("delete failed")
44
45#rest calls
46def slotmap_create(bank_id, bank_slot, client_id, client_slot):
47 js = {
Harald Weltefc0fff12019-09-12 19:57:04 +020048 'bank': {'bankId': int(bank_id), 'slotNr': int(bank_slot)},
49 'client': {'clientId': int(client_id), 'slotNr': int(client_slot)},
Joachim Steigera008e622019-07-26 18:38:28 +020050 }
51 return rest_post('/slotmaps', js)
52
53def slotmap_delete(bank_id, bank_slot):
54 slotmap_id = bank_id * 65536 + bank_slot
55 return rest_delete("/slotmaps/%u"%slotmap_id)
56
57def reset_global():
58 return rest_post('/global-reset')
59
60def main(argv):
61 global server_port, server_host, verbose
62
63 parser = argparse.ArgumentParser()
64 parser.add_argument("-H", "--host", help="host to connect to", default="127.0.0.1")
65 parser.add_argument("-p", "--port", help="port to connect to", default="9997")
66 parser.add_argument("-v", "--verbose", help="increase output verbosity", action="count", default=0)
67 group = parser.add_mutually_exclusive_group()
68 group.add_argument("-r", "--reset", help="remove all mappings (POST /global-reset)", action="store_true")
69 group.add_argument("-c", "--show-clients", help="show clients (GET /clients)",nargs='?',const="all",default=None)
70 group.add_argument("-b", "--show-banks", help="show banks (GET /banks)",nargs='?',const="all",default=None)
71 group.add_argument("-s", "--show-slotmaps", help="show slotmaps (GET /slotmaps)",nargs='?',const="all",default=None)
Kévin Redon3119c2e2019-09-10 18:36:06 +020072 group.add_argument("-m", "--create-slotmap", help="create new slotmap (POST /slotmaps)", type=int, nargs=4,metavar=('bank_id', 'bank_slot','client_id','client_slot'))
Joachim Steigera008e622019-07-26 18:38:28 +020073 group.add_argument("-d", "--delete-slotmap", help="delete slotmapping (DELETE /slotmaps/<id>)", type=int, nargs=2, metavar=('bank_id','bank_slot'))
74 group.add_argument("-a", "--show-all", help="show all (default if no argument given)", action="store_true")
75
76 args = parser.parse_args()
77 if args.verbose:
78 print("verbosity = ", args.verbose)
79
80 server_host = args.host
81 server_port = args.port
82 verbose = args.verbose
83
84 if args.reset:
85 reset_global()
86 return
87 if args.show_clients:
88 if args.show_clients == "all":
89 rest_get("/clients")
90 else:
91 rest_get("/clients/" + str(args.show_clients))
92 return
93 if args.show_banks:
94 if args.show_banks == "all":
95 rest_get("/banks")
96 else:
97 rest_get("/banks/" + str(args.show_banks))
98 return
99 if args.show_slotmaps:
100 if args.show_slotmaps == "all":
101 rest_get("/slotmaps")
102 else:
103 rest_get("/slotmaps/" + str(args.show_slotmaps))
104 return
105 if args.create_slotmap:
106 slotmap_create(args.create_slotmap[0],args.create_slotmap[1],args.create_slotmap[2],args.create_slotmap[3])
107 return
108 if args.delete_slotmap:
109 slotmap_delete(args.delete_slotmap[0],args.delete_slotmap[1])
110 return
111 rest_get("/clients")
112 rest_get("/banks")
113 rest_get("/slotmaps")
114
115if __name__ == "__main__":
116 main(sys.argv)
117