add osmo-lpmgd-apitool for command-line usage of the REST API
This commit is contained in:
parent
3d2692656a
commit
b3c507af2f
|
@ -0,0 +1,94 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import argparse
|
||||||
|
import requests
|
||||||
|
|
||||||
|
class ApiClient:
|
||||||
|
|
||||||
|
def __init__(self, server_host: str, server_port: int):
|
||||||
|
self.server_host = server_host
|
||||||
|
self.server_port = server_port
|
||||||
|
|
||||||
|
def _build_url(self, suffix):
|
||||||
|
BASE_PATH = "/api/v1"
|
||||||
|
return "http://%s:%u%s%s" % (self.server_host, self.server_port, BASE_PATH, suffix)
|
||||||
|
|
||||||
|
def _rest_get(self, suffix):
|
||||||
|
try:
|
||||||
|
resp = requests.get(self._build_url(suffix))
|
||||||
|
except Exception as e:
|
||||||
|
print("REST GET failed:", e)
|
||||||
|
return
|
||||||
|
if resp.ok:
|
||||||
|
try:
|
||||||
|
js = resp.json()
|
||||||
|
print("%s: %s" % (suffix, js))
|
||||||
|
except:
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
|
def _rest_post(self, suffix, js = None):
|
||||||
|
try:
|
||||||
|
resp = requests.post(self._build_url(suffix), json=js)
|
||||||
|
except Exception as e:
|
||||||
|
print("REST POST failed: %s", e)
|
||||||
|
return
|
||||||
|
if resp.ok:
|
||||||
|
try:
|
||||||
|
js = resp.json()
|
||||||
|
print("%s: %s" % (suffix, js))
|
||||||
|
except:
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
|
def get_resource_status(self, resource: str):
|
||||||
|
return self._rest_get("/resource/%s/status" % resource)
|
||||||
|
|
||||||
|
def obtain_usage_token(self, resource: str, user_name: str, usage: str, duration_s: int):
|
||||||
|
body = {
|
||||||
|
'user_name': user_name,
|
||||||
|
'usage': usage,
|
||||||
|
'duration_seconds': duration_s,
|
||||||
|
}
|
||||||
|
return self._rest_post('/resource/%s/obtain_usage_token' % resource, js=body)
|
||||||
|
|
||||||
|
def release_usage_token(self, resource: str, token: str):
|
||||||
|
return self._rest_get('/resource/%s/token/%s/release')
|
||||||
|
|
||||||
|
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.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.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.set_defaults(operation="release-usage-token")
|
||||||
|
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
api = ApiClient(args.host, args.port)
|
||||||
|
|
||||||
|
if args.operation == "get-status":
|
||||||
|
api.get_resource_status(args.resource)
|
||||||
|
elif args.operation == "obtain-usage-token":
|
||||||
|
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)
|
||||||
|
else:
|
||||||
|
raise Exception("Unknown/Unsupported operation")
|
|
@ -31,7 +31,7 @@ from osmocom.lpmgd.avail_always import AlwaysAvailChecker
|
||||||
def main(argv):
|
def main(argv):
|
||||||
parser = argparse.ArgumentParser()
|
parser = argparse.ArgumentParser()
|
||||||
parser.add_argument("-H", "--host", help="Host/IP to bind HTTP to", default="localhost")
|
parser.add_argument("-H", "--host", help="Host/IP to bind HTTP to", default="localhost")
|
||||||
parser.add_argument("-p", "--port", help="TCP port to bind HTTP to", default=8000)
|
parser.add_argument("-p", "--port", help="TCP port to bind HTTP to", default=9996)
|
||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue