43 lines
1.5 KiB
Python
43 lines
1.5 KiB
Python
from devices.models.endpoint_device import EndpointModel
|
|
from devices.services.endpoint.endpoint_redis import RedisInterface
|
|
|
|
|
|
def get_status(request, pk: int) -> dict:
|
|
""" Function to respond with current Endpoint states. Current response states are:
|
|
config_errors,
|
|
request_config
|
|
:param request: request instance
|
|
:param pk: Corresponding Endpoint pk
|
|
:return: JSON response with endpoint configuration errors
|
|
"""
|
|
try:
|
|
endpoint = EndpointModel.objects.get(pk=pk)
|
|
except EndpointModel.DoesNotExist:
|
|
return {'status': 'error', 'reason': 'no such endpoint record'}
|
|
return {
|
|
'endpoint_config_errors': endpoint.config_errors,
|
|
'is_requested_config_correct': endpoint.is_requested_config_correct
|
|
}
|
|
|
|
|
|
class EndpointStatusService:
|
|
"""Service return endpoint connect status"""
|
|
|
|
def __init__(self, endpoint: EndpointModel):
|
|
if isinstance(endpoint, EndpointModel):
|
|
self.endpoint = endpoint
|
|
else:
|
|
self.endpoint = EndpointModel.objects.get(pk=endpoint.pk)
|
|
self.redis = RedisInterface()
|
|
|
|
def get_status(self) -> dict:
|
|
endpoint_status = {}
|
|
if self.redis.get_keepalive(self.endpoint.pk):
|
|
if self.endpoint.config_errors:
|
|
endpoint_status['status'] = 'config_errors'
|
|
endpoint_status['config_errors'] = self.endpoint.incorrect_settings
|
|
else:
|
|
endpoint_status['status'] = 'online'
|
|
else:
|
|
endpoint_status['status'] = 'offline'
|
|
return endpoint_status
|