further advanced state api and stream checks

This commit is contained in:
2020-02-25 17:00:01 +01:00
parent 1d011af64b
commit f181e4a785
7 changed files with 126 additions and 47 deletions

View File

@@ -11,14 +11,18 @@ from flask_restx import fields, Resource, inputs
from backend import db, app
from backend.api import api_state
from backend.api.models import recorder_model, recorder_model_model, recorder_command_model, state_model
from backend.cron import async_cron_recorder_checker
from backend.cron.cron_state_checker import StateChecker
from backend.models.recorder_model import Recorder, RecorderModel, RecorderCommand
from backend.models.room_model import Room
import backend.recorder_adapters as r_a
# ==
from backend.tools.recorder_state_checker import get_recorder_adapter, check_capture_agent_state, check_stream_sanity
@api_state.route('/<int:id>')
@api_state.route('/recorder/<int:id>')
@api_state.response(404, 'Recorder not found')
@api_state.param('id', 'The recorder identifier')
class RecorderStateResource(Resource):
@@ -27,22 +31,37 @@ class RecorderStateResource(Resource):
@api_state.marshal_with(state_model, skip_none=False)
def get(self, id):
"""Fetch a recorder given its identifier"""
recorder = Recorder.query.get(id)
recorder: Recorder = Recorder.query.get(id)
if recorder is None:
api_state.abort(404)
return recorder
current_states_by_checker = async_cron_recorder_checker.get_current_state()
state = async_cron_recorder_checker.get_current_state_for_recorder_id(recorder.id)
if state is None:
state_checker = StateChecker([check_capture_agent_state], Recorder)
state_checker.add_object_to_state_check(recorder)
state_checker.check_object_state()
state = state_checker.get_current_state_for_recorder_id(recorder.id)
if not state.get('state_ok', False): # if state is not OK, return state -> no more checks!
return state
# do additional checks, such as: check for single color, sound check, etc.
stream_state = check_stream_sanity(recorder)
print(stream_state)
return stream_state
@api_state.route('')
@api_state.route('/recorder')
class RecorderStateList(Resource):
@jwt_required
@api_state.doc('recorders')
@api_state.marshal_list_with(recorder_model, skip_none=False)
@api_state.doc('get_recorders_states')
@api_state.marshal_list_with(state_model, skip_none=False)
def get(self):
"""
List all recorders
:return: recorders
Get state of all recorders
:return: state
"""
return Recorder.get_all()