Joachim Steiger | a008e62 | 2019-07-26 18:38:28 +0200 | [diff] [blame] | 1 | #!/usr/bin/env python3 |
| 2 | |
| 3 | import sys |
| 4 | import argparse |
| 5 | import requests |
| 6 | |
| 7 | version = "0.1" |
| 8 | |
| 9 | #access rest |
| 10 | def build_url(suffix): |
| 11 | BASE_PATH = "/api/backend/v1" |
| 12 | return ("http://" + server_host + ":" + server_port + BASE_PATH + suffix) |
| 13 | |
| 14 | def 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 | |
| 31 | def 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 | |
| 38 | def 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 |
| 46 | def slotmap_create(bank_id, bank_slot, client_id, client_slot): |
| 47 | js = { |
Harald Welte | fc0fff1 | 2019-09-12 19:57:04 +0200 | [diff] [blame] | 48 | 'bank': {'bankId': int(bank_id), 'slotNr': int(bank_slot)}, |
| 49 | 'client': {'clientId': int(client_id), 'slotNr': int(client_slot)}, |
Joachim Steiger | a008e62 | 2019-07-26 18:38:28 +0200 | [diff] [blame] | 50 | } |
| 51 | return rest_post('/slotmaps', js) |
| 52 | |
| 53 | def slotmap_delete(bank_id, bank_slot): |
| 54 | slotmap_id = bank_id * 65536 + bank_slot |
| 55 | return rest_delete("/slotmaps/%u"%slotmap_id) |
| 56 | |
| 57 | def reset_global(): |
| 58 | return rest_post('/global-reset') |
| 59 | |
| 60 | def 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 Redon | 3119c2e | 2019-09-10 18:36:06 +0200 | [diff] [blame] | 72 | 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 Steiger | a008e62 | 2019-07-26 18:38:28 +0200 | [diff] [blame] | 73 | 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 | |
| 115 | if __name__ == "__main__": |
| 116 | main(sys.argv) |
| 117 | |