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.
35 lines
1.3 KiB
35 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']
|
|
|