from rest_framework.response import Response
from rest_framework.views import APIView

from common.permissions import OnlySuperUser
from common.utils import get_logger
from terminal import serializers
from terminal.mixin import LokiMixin

__all__ = ['LokiLogAPI', ]

logger = get_logger(__name__)


class LokiLogAPI(APIView, LokiMixin):
    http_method_names = ['get', ]
    permission_classes = [OnlySuperUser]

    def get(self, request, *args, **kwargs):
        serializer = serializers.LokiLogSerializer(data=request.query_params)
        serializer.is_valid(raise_exception=True)
        components = serializer.validated_data.get('components')
        search = serializer.validated_data.get('search', '')
        start = serializer.validated_data.get('start', )
        end = serializer.validated_data.get('end', )
        loki_logs = self.query_components_log(components, search, start, end)
        return Response(data=loki_logs)

    def query_components_log(self, components, search, start, end):
        # 秒转纳秒
        start_ns = int(start * 1e9)
        end_ns = int(end * 1e9)
        query = self.create_loki_query(components, search)
        loki_client = self.get_loki_client()
        loki_response = loki_client.query_range(query, start_ns, end_ns, limit=100)
        return loki_response['data']['result']