123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- #!/usr/bin/env python3
- # -*- coding: utf-8 -*-
- """
- @Copyright (C) ansjer cop Video Technology Co.,Ltd.All rights reserved.
- @AUTHOR: ASJRD018
- @NAME: Ansjer
- @software: PyCharm
- @DATE: 2020/8/14 10:13
- @Version: python3.6
- @MODIFY DECORD:ansjer dev
- @file: AlexaConnectNum.py
- @Contact: sonalh@foxmail.com
- """
- from django.views.generic.base import View
- import os
- import json
- import math
- import time
- import urllib
- import logging
- import logging
- import requests
- import time
- import datetime
- from django.http import JsonResponse, HttpResponseRedirect, HttpResponse
- from Model.models import AlexaConnectStatisticsModel
- from django.views.generic import TemplateView
- from django.utils.decorators import method_decorator
- from django.views.decorators.csrf import csrf_exempt
- from django.views.generic.base import View
- from django.contrib.auth.hashers import make_password, check_password # 对密码加密模块
- from Object.ResponseObject import ResponseObject
- from Object.TokenObject import TokenObject
- from Service.ModelService import ModelService
- from django.db import connection
- rtspServer = "rtsp.zositech.org,3.16.66.144"
- # 获取alexa连接数接口
- class AlexaConnectNum(TemplateView):
- @method_decorator(csrf_exempt)
- def dispatch(self, *args, **kwargs):
- return super(AlexaConnectNum, self).dispatch(*args, **kwargs)
- def get(self, request, *args, **kwargs):
- response = ResponseObject()
- request.encoding = 'utf-8'
- operation = kwargs.get('operation')
- #每隔十分钟定时保存每天最高连接数,crontab 在alexa_oauth2_oserver
- if operation == 'saveConnectNum':
- today = datetime.date.today()
- today_start_time = int(time.mktime(time.strptime(str(today), '%Y-%m-%d')))
- today_end_time = int(time.mktime(time.strptime(str(today), '%Y-%m-%d'))) + 86399
- #获取当前连接数
- current_connect_num = self.currentConnect()
- today_data = AlexaConnectStatisticsModel.objects.\
- filter(data_time__lte=today_end_time,data_time__gte=today_start_time).values('num','data_time')
- if today_data.exists():
- num = list(today_data)[0]['num']
- if current_connect_num > num:
- today_data.update(num=current_connect_num, data_time=time.time())
- else:
- today_data.create(num=current_connect_num, data_time=time.time())
- return response.json(0)
- return response.json(10006)
- def post(self, request, *args, **kwargs):
- request.encoding = 'utf-8'
- response = ResponseObject()
- operation = kwargs.get('operation')
- post_data = request.POST
- token = post_data.get('token', None)
- # tko = TokenObject()
- # newToken = tko.generate( data={'userID': '158943594633713800138000', 'lang': 'cn', 'user': '597471180@qq.com', 'm_code': '123413243214'})
- # return response.json(0, {'data': newToken})
- tko = TokenObject(token)
- response.lang = tko.lang
- if tko.code != 0:
- return response.json(tko.code)
- userID = tko.userID
- own_permission = ModelService.check_perm(userID=userID, permID=30)
- if own_permission is not True:
- return response.json(404)
- #获取当前连接数
- current_connect_num = self.currentConnect()
- res = []
- #最近三十天每天最高连接数
- if operation == 'thirtyDays':
- query_num = AlexaConnectStatisticsModel.objects.\
- extra(select={"month_day_time": "FROM_UNIXTIME(data_time, '%%m-%%d')"}).\
- values('num', 'month_day_time').order_by('-data_time')[:30]
- res = list(query_num)
- #最近十二个月每月最高连接数
- if operation == 'years':
- cursor=connection.cursor()
- cursor.execute("SELECT FROM_UNIXTIME(data_time,'%Y-%m') as month, max(num) as max_num FROM alexa_statistics GROUP BY month order by month asc LIMIT 12")
- res_query = cursor.fetchall()
- for max_num, month in res_query:
- res.append({'num':month, 'month':max_num})
- res_desc = {'result_code': 0, 'reason': '成功', 'current_num':current_connect_num, 'top_num': res, 'error_code': 0}
- result_json = json.dumps(res_desc, ensure_ascii=False)
- return HttpResponse(result_json)
- def currentConnect(self):
- urls = rtspServer.split(',')
- httpPrefix = 'http://'
- postfix = ':10008/api/v1/pushers'
- current_connect_num = 0
- for url in urls:
- apiUrl = httpPrefix + url + postfix
- try:
- selectRtsp = requests.get(url=apiUrl, timeout=5)
- current_connect_num += selectRtsp.json()['total']
- except Exception as e:
- continue
- return current_connect_num
|