tryd to fix a oid connect related bug, but there is still a BIG problem

This commit is contained in:
2020-07-24 16:45:18 +02:00
parent 1d4c4c8ec2
commit de398d189a
7 changed files with 86 additions and 30 deletions

View File

@@ -1,4 +1,7 @@
from backend import LrcException
import logging
logger = logging.getLogger("lrc.tools.exception_decorator")
def exception_decorator(*exceptions):
@@ -8,6 +11,9 @@ def exception_decorator(*exceptions):
ret = func(*args, **kwargs)
return ret
except exceptions as e:
logger.error(str(e))
raise LrcException(e)
return new_func
return decorator
return decorator

View File

@@ -11,6 +11,7 @@ from typing import Union
import requests
from requests.auth import HTTPBasicAuth
from requests.exceptions import ConnectionError
from multiprocessing.pool import ThreadPool
from multiprocessing.context import TimeoutError
@@ -26,6 +27,8 @@ from backend.recorder_adapters.extron_smp import SMP35x
from backend.tools.recorder_streams_sanity_checks import check_frame_is_valid, check_if_audio_is_valid
from backend.tools.send_mail import send_error_mail, get_smtp_error_handler
from backend.tools.exception_decorator import exception_decorator
logger = logging.getLogger("lrc.tools.simple_state_checker")
smtp_error_handler = get_smtp_error_handler(subject="Errors have been detected while checking recorder states!")
@@ -50,6 +53,7 @@ agent_states_lock = threading.RLock()
agent_states = {}
@exception_decorator(ConnectionError)
def get_service_url(service_type: str):
if service_type in config['service_urls']:
return config['service_urls'][service_type]
@@ -64,19 +68,23 @@ def get_service_url(service_type: str):
return None
@exception_decorator(ConnectionError)
def get_calender(rec_id):
params = {'agentid': rec_id}
url = get_service_url('org.opencastproject.scheduler') + "/calendars"
res = session.get(url, params=params)
if res.ok:
return Calendar(res.text)
raise LrcException(res.text, res.status_code)
@exception_decorator(ConnectionError)
def get_capture_agents():
url = get_service_url("org.opencastproject.capture.admin") + "/agents.json"
res = session.get(url)
if res.ok:
return res.json()["agents"]["agent"]
raise LrcException(res.text, res.status_code)
def get_recorder_details_old():
@@ -117,19 +125,25 @@ def get_recorder_adapter(recorder_info: Union[dict, Recorder]) -> RecorderAdapte
type = recorder_info.get("type")
except KeyError:
type = RecorderModel.get_by_id(recorder_info.get('recorder_model_id')).model_name
if "SMP" in type:
rec = SMP35x(recorder_info.get('ip'), recorder_info.get('password'))
else:
rec = Epiphan(recorder_info.get('ip'), recorder_info.get("username"), recorder_info.get("password"))
return rec
try:
if "SMP" in type:
rec = SMP35x(recorder_info.get('ip'), recorder_info.get('password'))
else:
rec = Epiphan(recorder_info.get('ip'), recorder_info.get("username"), recorder_info.get("password"))
return rec
except LrcException:
raise
def check_stream_sanity(recorder_agent: Union[Recorder, dict], recorder_adapter: RecorderAdapter = None):
if recorder_adapter is None:
recorder_info = get_recorder_by_name(recorder_agent.get('name'))
recorder_adapter = get_recorder_adapter(recorder_info)
if not recorder_adapter.is_recording():
return True, "not recording, so there is no stream!", recorder_agent.get('name')
try:
if recorder_adapter is None:
recorder_info = get_recorder_by_name(recorder_agent.get('name'))
recorder_adapter = get_recorder_adapter(recorder_info)
if not recorder_adapter.is_recording():
return True, "not recording, so there is no stream!", recorder_agent.get('name')
except LrcException:
return False, "Could not determine if recorder is recording!", recorder_agent.get('name')
if recorder_agent.get('archive_stream1') is None and recorder_agent.get(
'archive_stream2') is None: # fall back to default names and rtsp
archive_stream_1_url = "rtsp://{}/{}".format(recorder_adapter.address, Config.DEFAULT_ARCHIVE_STREAM_1_NAME)
@@ -186,7 +200,12 @@ def check_capture_agent_state(recorder_agent: Union[Recorder, dict]):
return True, "Recorder is in offline / maintenance mode", recorder_agent.get('name')
agent_state_error_msg = None
logger.debug("Checking Agent {}".format(recorder_agent.get('name')))
c = get_calender(recorder_agent.get('name'))
try:
c = get_calender(recorder_agent.get('name'))
except LrcException:
error_msg = "Could not get calender of recorder agent: {}!".format(recorder_agent.get('name'))
logger.fatal(error_msg)
return False, error_msg, recorder_agent.get('name')
is_recording_in_calendar = len(list(c.timeline.now())) >= 1
if is_recording_in_calendar:
logger.info("{} has entry in Calender and should therefore be recording... checking now!".format(