mirror of https://git.48k.eu/ogcli/
Compare commits
7 Commits
Author | SHA1 | Date |
---|---|---|
|
4fe97139c5 | |
|
7d2678422e | |
|
2f870d7b6a | |
|
80a68ceb5a | |
|
12d965ce1c | |
|
4b77e1bca8 | |
|
0225502832 |
95
cli/cli.py
95
cli/cli.py
|
@ -26,55 +26,62 @@ import requests
|
|||
import sys
|
||||
|
||||
|
||||
def _log_http_status_code(res):
|
||||
if res.status_code == 400:
|
||||
print('Error 400: invalid payload')
|
||||
elif res.status_code == 404:
|
||||
print('Error 404: object not found')
|
||||
elif res.status_code == 405:
|
||||
print('Error 405: method not allowed')
|
||||
elif res.status_code == 409:
|
||||
print('Error 409: object already exists')
|
||||
elif res.status_code == 423:
|
||||
print('Error 423: object in use')
|
||||
elif res.status_code == 501:
|
||||
print('Error 501: cannot connect to database')
|
||||
elif res.status_code == 507:
|
||||
print('Error 500: disk full')
|
||||
else:
|
||||
print(f'Received status code {res.status_code}')
|
||||
|
||||
class OgREST():
|
||||
def __init__(self, ip, port, api_token):
|
||||
if not ip or not port or not api_token:
|
||||
raise ValueError("IP, port, and API token must be provided.")
|
||||
self.URL = f'http://{ip}:{port}'
|
||||
self.HEADERS = {'Authorization': api_token}
|
||||
|
||||
def get(self, path, payload=None):
|
||||
def _request(self, method, path, payload, expected_status):
|
||||
try:
|
||||
res = requests.get(f'{self.URL}{path}',
|
||||
headers=self.HEADERS,
|
||||
json=payload)
|
||||
|
||||
if res.status_code != 200:
|
||||
print(f"Error: Request to ogServer failed with status code {res.status_code}")
|
||||
res = requests.request(
|
||||
method,
|
||||
f'{self.URL}{path}',
|
||||
headers=self.HEADERS,
|
||||
json=payload,
|
||||
)
|
||||
if res.status_code not in expected_status:
|
||||
_log_http_status_code(res)
|
||||
return None
|
||||
return res
|
||||
|
||||
except requests.exceptions.ConnectionError:
|
||||
print("Cannot connect to ogserver")
|
||||
except requests.exceptions.Timeout:
|
||||
print("Request to ogserver timed out")
|
||||
except requests.exceptions.TooManyRedirects:
|
||||
print("Too many redirects occurred while contacting ogserver")
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"Error: Cannot connect to ogServer: {e}")
|
||||
return None
|
||||
print(f"An error occurred while contacting ogserver: {e}")
|
||||
return None
|
||||
|
||||
return res
|
||||
def get(self, path, payload=None):
|
||||
return self._request('GET', path, payload, expected_status={200})
|
||||
|
||||
def post(self, path, payload):
|
||||
try:
|
||||
res = requests.post(f'{self.URL}{path}',
|
||||
headers=self.HEADERS,
|
||||
json=payload)
|
||||
|
||||
if res.status_code not in {200, 202}:
|
||||
print(f"Error: Request to ogServer failed with status code {res.status_code}")
|
||||
return None
|
||||
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"Error: Cannot connect to ogServer: {e}")
|
||||
return None
|
||||
|
||||
return res
|
||||
return self._request('POST', path, payload, expected_status={200, 202})
|
||||
|
||||
def delete(self, path, payload):
|
||||
try:
|
||||
res = requests.delete(f'{self.URL}{path}',
|
||||
headers=self.HEADERS,
|
||||
json=payload)
|
||||
if res.status_code != 200:
|
||||
print(f"Error: Request to ogServer failed with status code {res.status_code}")
|
||||
return None
|
||||
except IOError as e:
|
||||
print(f"Error: Cannot connect to ogServer: {e}")
|
||||
return None
|
||||
return res
|
||||
return self._request('DELETE', path, payload, expected_status={200})
|
||||
|
||||
|
||||
class OgCLI():
|
||||
|
@ -83,7 +90,8 @@ class OgCLI():
|
|||
|
||||
def list(self, args):
|
||||
choices = ['clients', 'scopes', 'modes', 'hardware',
|
||||
'client', 'images', 'disks', 'servers', 'repos', 'live']
|
||||
'client', 'images', 'disks', 'servers', 'repos',
|
||||
'live', 'lives']
|
||||
parser = argparse.ArgumentParser(prog='ogcli list')
|
||||
parser.add_argument('item', choices=choices)
|
||||
|
||||
|
@ -112,12 +120,12 @@ class OgCLI():
|
|||
ret = OgRepo.list_repos(self.rest)
|
||||
elif parsed_args.item == 'servers':
|
||||
ret = OgServer.list_servers(self.rest)
|
||||
elif parsed_args.item == 'live':
|
||||
elif parsed_args.item in ['live', 'lives']:
|
||||
ret = OgLive.list_live(self.rest, args[1:])
|
||||
return ret
|
||||
|
||||
def set(self, args):
|
||||
choices = ['modes', 'mode', 'repo']
|
||||
choices = ['modes', 'mode', 'repo', 'live', 'lives']
|
||||
parser = argparse.ArgumentParser(prog='ogcli set')
|
||||
parser.add_argument('item', choices=choices)
|
||||
|
||||
|
@ -132,6 +140,8 @@ class OgCLI():
|
|||
ret = OgModes.set_modes(self.rest, args[1:])
|
||||
elif parsed_args.item == 'repo':
|
||||
ret = OgRepo.set_repo(self.rest, args[1:])
|
||||
elif parsed_args.item in ['live', 'lives']:
|
||||
ret = OgLive.set_live(self.rest, args[1:])
|
||||
return ret
|
||||
|
||||
def request(self, args):
|
||||
|
@ -231,7 +241,8 @@ class OgCLI():
|
|||
return ret
|
||||
|
||||
def delete(self, args):
|
||||
choices = ['server', 'repo', 'center', 'room', 'client', 'folder', 'live']
|
||||
choices = ['server', 'repo', 'center', 'room', 'client', 'folder',
|
||||
'live', 'lives']
|
||||
parser = argparse.ArgumentParser(prog='ogcli delete')
|
||||
parser.add_argument('delete_obj', choices=choices)
|
||||
|
||||
|
@ -253,7 +264,7 @@ class OgCLI():
|
|||
ret = OgClient.delete_client(self.rest, args[1:])
|
||||
elif parsed_args.delete_obj == 'folder':
|
||||
ret = OgFolder.delete_folder(self.rest, args[1:])
|
||||
elif parsed_args.delete_obj == 'live':
|
||||
elif parsed_args.delete_obj in ['live', 'lives']:
|
||||
ret = OgLive.delete_live(self.rest, args[1:])
|
||||
return ret
|
||||
|
||||
|
@ -284,7 +295,7 @@ class OgCLI():
|
|||
return ret
|
||||
|
||||
def install(self, args):
|
||||
choices = ['live']
|
||||
choices = ['live', 'lives']
|
||||
parser = argparse.ArgumentParser(prog='ogcli install')
|
||||
parser.add_argument('install_obj', choices=choices)
|
||||
|
||||
|
@ -295,6 +306,6 @@ class OgCLI():
|
|||
|
||||
parsed_args = parser.parse_args([args[0]])
|
||||
ret = 0
|
||||
if parsed_args.install_obj == 'live':
|
||||
if parsed_args.install_obj in ['live', 'lives']:
|
||||
ret = OgLive.install_live(self.rest, args[1:])
|
||||
return ret
|
||||
|
|
|
@ -39,7 +39,7 @@ class OgFolder():
|
|||
payload['room'] = parsed_args.room_id
|
||||
if parsed_args.center_id:
|
||||
payload['center'] = parsed_args.center_id
|
||||
res = restest.post('/folder/add', payload=payload)
|
||||
res = rest.post('/folder/add', payload=payload)
|
||||
if not res:
|
||||
return 1
|
||||
return 0
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
import argparse
|
||||
|
||||
from cli.config import cfg, OG_CLI_CFG_PATH
|
||||
from datetime import datetime
|
||||
from cli.utils import *
|
||||
import requests
|
||||
import shutil
|
||||
|
@ -23,6 +24,15 @@ class OgLive():
|
|||
]
|
||||
tmp_extension = '.tmp'
|
||||
|
||||
@staticmethod
|
||||
def _parse_timestamps(payload):
|
||||
for elem in payload['oglive']:
|
||||
if 'date' in elem:
|
||||
timestamp = elem['date']
|
||||
readable_date = datetime.fromtimestamp(timestamp).strftime("%Y-%m-%d %H:%M:%S")
|
||||
elem['date'] = readable_date
|
||||
|
||||
|
||||
@staticmethod
|
||||
def _get_local_live_dir():
|
||||
local_live_dir = cfg.get('local_live', '/var/www/html/ogrelive')
|
||||
|
@ -155,7 +165,10 @@ class OgLive():
|
|||
res = rest.get('/oglive/list')
|
||||
if not res:
|
||||
return 1
|
||||
print_json(res.text)
|
||||
|
||||
live_data = json.loads(res.text)
|
||||
OgLive._parse_timestamps(live_data)
|
||||
print_json(live_data)
|
||||
return 0
|
||||
|
||||
@staticmethod
|
||||
|
@ -286,3 +299,25 @@ class OgLive():
|
|||
print(f'Error: no directory found for {live_name}')
|
||||
|
||||
return 0
|
||||
|
||||
@staticmethod
|
||||
def set_live(rest, args):
|
||||
parser = argparse.ArgumentParser(prog='ogcli set live')
|
||||
parser.add_argument('--default',
|
||||
action='store_true',
|
||||
required=True,
|
||||
help='set the default live image')
|
||||
parser.add_argument('--name',
|
||||
nargs='?',
|
||||
required=True,
|
||||
help='Name of the live')
|
||||
parsed_args = parser.parse_args(args)
|
||||
live_name = parsed_args.name
|
||||
|
||||
payload = {'name': live_name}
|
||||
res = rest.post('/oglive/default', payload=payload)
|
||||
|
||||
if not res:
|
||||
return 1
|
||||
|
||||
return 0
|
||||
|
|
|
@ -49,8 +49,11 @@ def reorder_json_tree(payload):
|
|||
payload[k] = val
|
||||
reorder_json_tree(val)
|
||||
|
||||
def print_json(text):
|
||||
payload = json.loads(text)
|
||||
def print_json(data):
|
||||
if isinstance(data, (dict, list)):
|
||||
payload = data
|
||||
else:
|
||||
payload = json.loads(data)
|
||||
reorder_json_tree(payload)
|
||||
print(json.dumps(payload, indent=2, ensure_ascii=False))
|
||||
|
||||
|
|
Loading…
Reference in New Issue