63 lines
2.4 KiB
Python
63 lines
2.4 KiB
Python
# Copyright (c) 2019. Tobias Kurze
|
|
"""
|
|
This module provides functions related to object states through the API.
|
|
"""
|
|
from datetime import datetime
|
|
from pprint import pprint
|
|
|
|
from flask_jwt_extended import jwt_required
|
|
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, async_permanent_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('/recorder/<int:id>')
|
|
@api_state.response(404, 'Recorder not found')
|
|
@api_state.param('id', 'The recorder identifier')
|
|
class RecorderStateResource(Resource):
|
|
@jwt_required
|
|
@api_state.doc('get_recorder_state')
|
|
@api_state.marshal_with(state_model, skip_none=False)
|
|
def get(self, id):
|
|
"""Fetch a recorder given its identifier"""
|
|
recorder: Recorder = Recorder.query.get(id)
|
|
if recorder is None:
|
|
api_state.abort(404)
|
|
|
|
# current_states_by_checker = async_cron_recorder_checker.get_current_state()
|
|
state = async_permanent_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)
|
|
print("lalala")
|
|
print(state)
|
|
return state
|
|
|
|
|
|
@api_state.route('/recorder')
|
|
class RecorderStateList(Resource):
|
|
@jwt_required
|
|
@api_state.doc('get_recorders_states')
|
|
@api_state.marshal_list_with(state_model, skip_none=True)
|
|
def get(self):
|
|
"""
|
|
Get state of all recorders
|
|
:return: state
|
|
"""
|
|
rec_states = async_permanent_cron_recorder_checker.get_current_state()
|
|
print(rec_states)
|
|
res = [{**{'name': rec_state_name}, **rec_states[rec_state_name]} for rec_state_name in rec_states]
|
|
return res
|