机房环境监测服务端
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.

117 lines
4.7 KiB

from django.shortcuts import render
from django.http import HttpResponse,Http404,HttpResponseRedirect
from .envpost import *
from django.views.decorators.csrf import csrf_exempt
import time
from datetime import datetime
import json
@csrf_exempt
def ntp_time(request):
spot = request.GET.get('spot')
# servaddr = request.GET.get('servaddr')
timespan = request.GET.get('timespan')
afire = request.GET.get('afire')
atemp = request.GET.get('atemp')
ahum = request.GET.get('ahum')
try:
save_deviceinfo(spot, timespan, afire, atemp, ahum)
except:
pass
return HttpResponse(str(int(time.time())+28801))
@csrf_exempt
def epost(request):
if request.method != 'POST':
return HttpResponse('Request method error.')
token = request.POST.get('token')
if not check_token(token):
return HttpResponse('Bad Request.')
sn = request.POST.get('sn')
if not check_spot(sn):
return HttpResponse('POST too soon.')
errcode = request.POST.get('errno')
electricity = request.POST.get('electricity')
fire = request.POST.get('fire')
water = request.POST.get('water')
temperature = request.POST.get('temperature')
humidity = request.POST.get('humidity')
envdata = {'sn':sn,'errcode':errcode, 'electricity':electricity, 'fire':fire, 'water':water, 'temperature':temperature, 'humidity':humidity}
deal_post(envdata)
return HttpResponse('Data received.')
def index(request):
return HttpResponseRedirect('/admin/')
def chart_index(request):
if request.method == 'POST':
topic = request.POST.get('topicval') # 统计主题
tp = request.POST.get('tpval') # 统计分类
spot = request.POST.get('spotval') # 地点
statics_data = ''
if not request.POST.get('startdate'):
startdate = datetime.strftime(datetime.now() - timedelta(days=30), '%Y-%m-%d')
else:
startdate = request.POST.get('startdate')
if not request.POST.get('enddate'):
enddate = datetime.strftime(datetime.now(), '%Y-%m-%d')
else:
enddate = request.POST.get('enddate')
starttime = datetime.strptime(startdate + ' 00:00:00', '%Y-%m-%d %H:%M:%S')
endtime = datetime.strptime(enddate + ' 23:59:59', '%Y-%m-%d %H:%M:%S')
if not topic:
topic = ''
if not tp:
tp = ''
if not spot:
spot = ''
if topic == '报警统计':
statics_data = list(alarm_statics(spot, starttime, endtime))
if topic == '采集统计':
statics_data = list(env_statics(spot, tp, starttime, endtime))
for item in statics_data:
item['rectime'] = datetime.strftime(item['rectime'], '%Y/%m/%d %H:%M:%S')
if topic == '综合统计':
statics_data = compre_statics(starttime, endtime)
spots = parse_spots(get_spots())
return render(request, 'chartindex.html', {'startdate': startdate, 'enddate': enddate, 'topicname': topic,
'tpname': tp, 'statics_data': statics_data, 'spots': spots, 'spot': spot})
else:
startdate = datetime.strftime(datetime.now()-timedelta(days=30), '%Y-%m-%d')
enddate = datetime.strftime(datetime.now(), '%Y-%m-%d')
spots = get_spots()
return render(request, 'chartindex.html', {'startdate': startdate, 'enddate': enddate, 'spots': spots})
def sys_cmd(request):
if request.method == 'GET':
spots = get_spots()
cmdlist = get_cmdlist()
return render(request, 'sysmanager.html', {'spots': spots, 'sptname': '', 'cmdname': '', 'cmdlist':cmdlist})
else:
spots = get_spots()
spot = request.POST.get('spotval')
cmd = request.POST.get('cmdval')
sptname = request.POST.get('sptname')
cmdname = request.POST.get('cmdname')
param = request.POST.get('paramval')
if spot and cmd:
store_cmd(spot, cmd, param)
cmdlist = get_cmdlist()
return render(request, 'sysmanager.html', {'spot': spot, 'cmd': cmd, 'param': param, 'spots': spots,
'sptname':sptname, 'cmdname':cmdname, 'cmdlist':cmdlist})
def cmd_query(request):
# 设备取命令
cmdqueue = pop_cmd(request.GET.get('spot'))
return HttpResponse(cmdqueue)
def cmd_queue(request):
# 获取当前未执行命令列表
cmdlist = get_cmdlist()
return HttpResponse(json.dumps({'cmdlist':cmdlist}))
def query_deviceinfo(request):
# 管理端获取最新定设备参数
deviceinfo = get_deviceinfo(request.GET.get('spot'))
return HttpResponse(json.dumps(deviceinfo))