From 11ffb5ca958a3c690b8648a1257d5626c7988499 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Mon, 5 Jun 2023 10:05:54 +0200 Subject: [PATCH] add REST + apitool support for listing all resources --- osmo-lpmgd-apitool | 12 +++++++++++- osmocom/lpmgd/rest_server.py | 9 +++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/osmo-lpmgd-apitool b/osmo-lpmgd-apitool index cfd84cd..babfafd 100755 --- a/osmo-lpmgd-apitool +++ b/osmo-lpmgd-apitool @@ -58,28 +58,36 @@ class ApiClient: def release_usage_token(self, resource: str, token: str): return self._rest_get('/resource/%s/token/%s/release' % (resource, token)) + def list_resources(self): + return self._rest_get('/resource') + if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument("-H", "--host", help="host to connect to", default="localhost") parser.add_argument("-p", "--port", help="HTTP port to connect to", type=int, default=9996) parser.add_argument("-v", "--verbose", help="increase output verbosity", action="count", default=0) - parser.add_argument("-r", "--resource", help="name of resource", required=True) subp = parser.add_subparsers() getst_p = subp.add_parser("get-status", help="Get current resource status") + getst_p.add_argument("-r", "--resource", help="name of resource", required=True) getst_p.set_defaults(operation="get-status") obtut_p = subp.add_parser("obtain-usage-token", help="Obtain usage token for resource") obtut_p.add_argument("-n", "--user-name", help="User name", required=True) obtut_p.add_argument("-u", "--usage", help="Usage (string describing reason for use)", required=True) obtut_p.add_argument("-d", "--duration", help="Duration of usage in seconds)", type=int, required=True) + obtut_p.add_argument("-r", "--resource", help="name of resource", required=True) obtut_p.set_defaults(operation="obtain-usage-token") relut_p = subp.add_parser("release-usage-token") relut_p.add_argument("-t", "--token", help="Usage token (previously obtained)", required=True) + relut_p.add_argument("-r", "--resource", help="name of resource", required=True) relut_p.set_defaults(operation="release-usage-token") + lsres_p = subp.add_parser("list-resources") + lsres_p.set_defaults(operation="list-resources") + args = parser.parse_args() api = ApiClient(args.host, args.port) @@ -90,5 +98,7 @@ if __name__ == "__main__": api.obtain_usage_token(args.resource, args.user_name, args.usage, args.duration) elif args.operation == "release-usage-token": api.release_usage_token(args.resource, args.token) + elif args.operation == "list-resources": + api.list_resources() else: raise Exception("Unknown/Unsupported operation") diff --git a/osmocom/lpmgd/rest_server.py b/osmocom/lpmgd/rest_server.py index f84df80..abf43ca 100644 --- a/osmocom/lpmgd/rest_server.py +++ b/osmocom/lpmgd/rest_server.py @@ -46,6 +46,15 @@ class PwrMgmtRestServer: request.setResponseCode(404) return str(ApiError("Unknown resource")) + @app.route('/api/v1/resource', methods=['GET']) + def resource_list(self, request): + out = [] + for r in self.resources.values(): + r.determine_status() + out.append(r.to_dict()) + set_headers(request) + return json.dumps(out) + @app.route('/api/v1/resource//status', methods=['GET']) def resource_status(self, request, resrc): resource = self.resources[resrc]