mirror of https://github.com/jumpserver/jumpserver
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.
36 lines
1.3 KiB
36 lines
1.3 KiB
7 months ago
|
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']
|