views.py
5.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
from datetime import datetime
from django.http import HttpResponse
from django.shortcuts import render
from common.models import AgentCmd, WeatherWatchHistory
from django.http import Http404
import json, csv
from django.db.models import Q
from django.views.decorators.csrf import csrf_exempt
from django.core import serializers
# Create your views here.
def index(request):
if request.user.is_authenticated:
# return the initial view (the dashboard's one)
return render(request, 'monitoring/monitoring_index.html',{"base_template":"base.html"})
return render(request, 'monitoring/monitoring_index.html',{'USER_LEVEL': "Visitor", 'base_template' : "base.html"})
def get_weather_history_from_date(start_datetime:datetime, end_datetime:datetime):
if WeatherWatchHistory.objects.all().exists():
weather_history_queryset = WeatherWatchHistory.objects.filter(Q(datetime__gte=start_datetime) & Q(datetime__lte=end_datetime)).order_by("datetime")
weather = serializers.serialize('json', weather_history_queryset)
return weather
def weather_history(request):
if request.GET:
start_datetime = request.GET.get("start_datetime")
end_datetime = request.GET.get("end_datetime")
if start_datetime and end_datetime:
start_datetime = datetime.strptime(start_datetime, "%d/%m/%Y %H:%M:%S")
end_datetime = datetime.strptime(end_datetime, "%d/%m/%Y %H:%M:%S")
try:
weather_history = get_weather_history_from_date(start_datetime, end_datetime)
#return HttpResponse(json.dumps(weather), content_type="application/json")
return HttpResponse(weather_history, content_type="application/json")
except WeatherWatchHistory.DoesNotExist:
raise Http404("No WeatherWatchHistory matches the given query.")
else:
return HttpResponse(json.dumps({"result":"No required start and end datetime found in query"}), content_type="application/json")
end_datetime =datetime.utcnow().strftime("%d/%m/%Y %H:%M:%S")
return render(request,"monitoring/weather_history.html",{
"default_end_datetime" : end_datetime
})
def weather_config(request):
""" PM 20180926 prototype without database
http://127.0.0.1:8000/dashboard/weather/config
Moved to monitoring
"""
try:
# Import PLC status sensor parser
from monitoring.plc_checker import PlcChecker
# Parse PLC status in colibri-new-fixed-2.json
#colibri_json = open("../simulators/plc/colibri-new-fixed-2.json")
#colibri_struct = json.load(colibri_json)
#plc_status = colibri_struct["statuses"][1]["entities"][0]
plc_checker = PlcChecker()
_struct = {"origin":plc_checker.origin, "sensors_table":plc_checker.sensors_table, "monitoring_names":list(plc_checker.monitoring_names.keys())}
# Return template with sensors list
return render(request, 'dashboard/config_weather.html', {'weather_config' : _struct, 'base_template' : "base.html"})
except Config.DoesNotExist:
return render(request, 'dashboard/config_weather.html', {'weather_info' : None})
def weather_config_update(request):
""" PM 20190716 ajax
http://127.0.0.1:8000/dashboard/weather/config/update
Get data...
"""
try:
# print(request.GET["data"])
cmd_name, cmd_args = request.GET["data"].split(" ", 1)
# ['nom', 'monitoring_name actuel', 'id(json path) du capteur', 'nouveau monitoring_name']
# <class 'list'>: ['monitor_name_switch', 'None', 'Came:/S/N_A5EM:/Power_input', 'Rain_boolean']
if "Error_code" in cmd_args:
something = 5/0
AgentCmd.send_command('Dashboard', 'AgentM', cmd_name, cmd_args)
#TODO: Pour l'instant, on ne recupere pas encore ce retour
return HttpResponse('{"update":"OK", "cmd_name":"' + cmd_name + '"}', content_type="application/json")
except:
return HttpResponse('{"update":"ERROR", "cmd_name":"' + cmd_name + '"}', content_type="application/json", status="500")
def export_weather_data(request):
if request.GET:
start_datetime = request.GET.get("start_datetime")
end_datetime = request.GET.get("end_datetime")
if start_datetime and end_datetime:
start_datetime = datetime.strptime(start_datetime, "%d/%m/%Y %H:%M:%S")
end_datetime = datetime.strptime(end_datetime, "%d/%m/%Y %H:%M:%S")
try:
weather_history_queryset = WeatherWatchHistory.objects.filter(Q(datetime__gte=start_datetime) & Q(datetime__lte=end_datetime)).order_by("datetime")
response = HttpResponse(
content_type='text/csv',
headers={f'Content-Disposition': 'attachment; filename="weather_history_{}_{}.csv"'.format(start_datetime,end_datetime)},
)
writer = csv.writer(response)
writer.writerow(["datetime","humidity","wind","wind_dir","temperature","pressure","rain","cloud"])
for weather in weather_history_queryset:
writer.writerow([weather.datetime,weather.humidity,weather.wind,weather.wind_dir,weather.temperature,weather.pressure,weather.rain,weather.cloud])
return response
except WeatherWatchHistory.DoesNotExist:
raise Http404("No WeatherWatchHistory matches the given query.")