| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 | #!/usr/bin/env python3# -*- coding: utf-8 -*-import timeimport boto3import botocoreimport oss2from django.views.generic.base import Viewfrom Ansjer.config import OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET, REGION_NAME, ACCESS_KEY_ID, SECRET_ACCESS_KEY, \    LOG_BUCKETfrom Model.models import AppLogModelfrom Object.ResponseObject import ResponseObjectfrom Object.TokenObject import TokenObjectfrom Service.CommonService import CommonServicefrom Service.ModelService import ModelServiceclass AppLogView(View):    def get(self, request, *args, **kwargs):        request.encoding = 'utf-8'        operation = kwargs.get('operation', None)        return self.validate(request.GET, operation)    def post(self, request, *args, **kwargs):        request.encoding = 'utf-8'        operation = kwargs.get('operation', None)        return self.validate(request.POST, operation)    def validate(self, request_dict, operation):        token = request_dict.get('token', None)        response = ResponseObject()        if token is None:            return response.json(444)        token = TokenObject(token)        if token.code != 0:            return response.json(token.code)        if operation == 'getUploadUrl':            return self.get_upload_url(token.userID, request_dict, response)        elif operation == 'add':            return self.do_add(token.userID, request_dict, response)        elif operation == 'queryByAdmin':            return self.do_query_by_admin(token.userID, request_dict, response)        elif operation == 'deleteByAdmin':            return self.do_delete_by_admin(token.userID, request_dict, response)        elif operation == 'downloadByAdmin':            return response.json(404)        else:            return response.json(414)    def get_upload_url(self, userID, request_dict, response):        upload_type = request_dict.get('upload_type', None)        if not upload_type:            return response.json(444)        name = CommonService.createOrderID()        filename = str(name) + '.' + upload_type        obj = 'app_log/{userID}/'.format(userID=userID) + filename        aws_s3_client = boto3.client(            's3',            region_name=REGION_NAME,            aws_access_key_id=ACCESS_KEY_ID,            aws_secret_access_key=SECRET_ACCESS_KEY,            config=botocore.client.Config(signature_version='s3v4'),        )        response_url = aws_s3_client.generate_presigned_url(            ClientMethod='put_object',            Params={                'Bucket': LOG_BUCKET,                'Key': obj            },            ExpiresIn=3600        )        return response.json(0, {'put_url': response_url, 'filename': filename})    def do_add(self, userID, request_dict, response):        uid = request_dict.get('uid', None)        average_delay = request_dict.get('average_delay', None)        status = request_dict.get('status', None)        filename = request_dict.get('filename', None)        if uid is None or average_delay is None or status is None or filename is None:            return response.json(444)        else:            # if len(uid) < 20:            #     return response.json(444, 'uid')            # ModelService.app_log_log(userID, uid)            now_time = int(time.time())            uid = uid.strip()            data = {                'uid': uid[0:20],                'average_delay': average_delay,                'status': status,                'filename': filename,                'add_time': now_time,                'user_id': userID,            }            AppLogModel.objects.create(**data)            return response.json(0)    def do_query_by_admin(self, userID, request_dict, response):        own_perm = ModelService.check_perm(userID, 30)        if own_perm:            page = request_dict.get('page', None)            line = request_dict.get('line', None)            status = request_dict.get('status', None)            uid = request_dict.get('uid', None)            if page and line:                page = int(page)                line = int(line)                filter_data = {}                if status:                    filter_data['status'] = status                if uid:                    filter_data['uid'] = uid                al_qs = AppLogModel.objects.filter(**filter_data).order_by('-add_time')                if al_qs.exists():                    count = al_qs.count()                    start = (page - 1) * line                    al_qs = al_qs[start: (start + line)].values('id', 'user__username', 'user_id', 'uid',                                                                'average_delay', 'status', 'filename', 'add_time')                    res = []                    auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)                    bucket = oss2.Bucket(auth, 'oss-cn-hongkong.aliyuncs.com', 'statres')                    for al in al_qs:                        filename = al['filename']                        obj = 'app_log/' + al['user_id'] + '/' + filename                        url = bucket.sign_url('GET', obj, 3600)                        al['url'] = url                        del al['filename']                        res.append(al)                    return response.json(0, {'datas': res, 'count': count})                else:                    return response.json(0, {'datas': [], 'count': 0})            else:                return response.json(444, 'page, line')        else:            return response.json(404)    def do_delete_by_admin(self, userID, request_dict, response):        own_perm = ModelService.check_perm(userID, 10)        if own_perm:            id = request_dict.get('id', None)            if id:                try:                    AppLogModel.objects.filter(id=id).delete()                except Exception as e:                    print(repr(e))                    return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))                else:                    return response.json(0)            else:                return response.json(444)        else:            return response.json(404)
 |