You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
jumpserver/apps/terminal/api/component/loki_log.py

36 lines
1.3 KiB

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']