Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

This commit is about adding export as json for event data #249

Merged
merged 1 commit into from Apr 1, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
5 changes: 4 additions & 1 deletion mercury/templates/events.html
Expand Up @@ -84,7 +84,10 @@ <h1>All Events</h1>
<td>{{ item.date }}</td>
<td>{{ item.description }}</td>
<td>
<a class="grafana-btn grafana-btn-green" href="export/{{ item.uuid }}">Export</a>
<a class="grafana-btn grafana-btn-green" href="export/{{ item.uuid }}/csv">Export CSV</a>
<br><br>
<a class="grafana-btn grafana-btn-green" href="export/{{ item.uuid }}/json">Export JSON</a>
<br><br>
<a class="grafana-btn grafana-btn-red" href="delete/{{ item.uuid }}">Delete</a>
</td>
</tr>
Expand Down
3 changes: 2 additions & 1 deletion mercury/urls.py
Expand Up @@ -37,7 +37,8 @@
path("events/delete/<uuid:event_uuid>", events.delete_event),
path("events/update/<uuid:event_uuid>", events.update_event),
path("events/updatevenue/<uuid:venue_uuid>", events.update_venue),
path("events/export/<uuid:event_uuid>", events.export_event),
path("events/export/<uuid:event_uuid>/csv", events.export_event),
path("events/export/<uuid:event_uuid>/json", events.export_event),
path("pitcrew/", pitcrew.PitCrewView.as_view(), name="pitcrew"),
path("gfconfig/", gf_config.GFConfigView.as_view(), name="gfconfig"),
path(
Expand Down
111 changes: 74 additions & 37 deletions mercury/views/events.py
@@ -1,16 +1,17 @@
import csv
import logging

from django.contrib import messages
from django.http import HttpResponse
from django.shortcuts import render
from django.shortcuts import redirect
from django.shortcuts import render
from django.views.generic import TemplateView
from ..event_check import require_event_code
from mercury.forms import EventForm, VenueForm

from ag_data.models import AGMeasurement, AGEvent, AGVenue, AGSensor
from django.contrib import messages
from mercury.forms import EventForm, VenueForm
from mercury.grafanaAPI.grafana_api import Grafana
from mercury.models import GFConfig
from ..event_check import require_event_code

log = logging.getLogger(__name__)
log.setLevel(logging.ERROR)
Expand Down Expand Up @@ -47,48 +48,84 @@ def delete_event(request, event_uuid=None):
return redirect("/events")


def export_event(request, event_uuid=None):
def export_event(request, event_uuid=None, file_format="CSV"):
event_to_export = AGEvent.objects.get(uuid=event_uuid)
if event_to_export:
response = HttpResponse(content_type="text/csv")
filename = event_to_export.name.replace(" ", "").lower()
response["Content-Disposition"] = 'attachment; filename="' + filename + '".csv'
measurement_data = AGMeasurement.objects.filter(event_uuid=event_uuid)
if len(measurement_data) == 0:
return redirect("/events")
writer = csv.writer(response)
writer.writerow(
[
"S.No",
"Event Name",
"Event Date",
"Event Description",
"Venue Name",
"Sensor Name",
"Sensor Data TimeStamp",
"Sensor Value",
]
)
i = 0
venue = AGVenue.objects.get(uuid=event_to_export.venue_uuid.uuid)
sensor = AGSensor.objects.get(id=measurement_data[0].sensor_id.id)
for measurement in measurement_data:
i += 1
if sensor.id != measurement.sensor_id:
sensor = AGSensor.objects.get(id=measurement.sensor_id.id)
if request.path.__contains__("json"):
event_info = {
"name": event_to_export.name,
"event date": str(event_to_export.date),
"event description": event_to_export.description,
}
if venue:
event_info["venue name"] = venue.name
event_info["venue description"] = venue.description

measurement_info = []
if measurement_data:
sensor = AGSensor.objects.get(id=measurement_data[0].sensor_id.id)
for measurement in measurement_data:
if sensor.id != measurement.sensor_id:
sensor = AGSensor.objects.get(id=measurement.sensor_id.id)
temp = {
"sensor name": sensor.name,
"timestamp": str(measurement.timestamp),
"reading": measurement.value["reading"],
}
measurement_info.append(temp)

data = {
"event_info": event_info,
"measurement_info": measurement_info,
}

response = HttpResponse(str(data), content_type="application/json")
response["Content-Disposition"] = (
'attachment; filename="' + filename + '".json'
)
return response
else:
response = HttpResponse(content_type="text/csv")
response["Content-Disposition"] = (
'attachment; filename="' + filename + '".csv'
)
if len(measurement_data) == 0:
return redirect("/events")
writer = csv.writer(response)
writer.writerow(
[
str(i),
event_to_export.name,
event_to_export.date,
event_to_export.description,
venue.name,
sensor.name,
measurement.timestamp,
measurement.value["reading"],
"S.No",
"Event Name",
"Event Date",
"Event Description",
"Venue Name",
"Sensor Name",
"Sensor Data TimeStamp",
"Sensor Value",
]
)
return response
i = 0
sensor = AGSensor.objects.get(id=measurement_data[0].sensor_id.id)
for measurement in measurement_data:
i += 1
if sensor.id != measurement.sensor_id:
sensor = AGSensor.objects.get(id=measurement.sensor_id.id)
writer.writerow(
[
str(i),
event_to_export.name,
event_to_export.date,
event_to_export.description,
venue.name,
sensor.name,
measurement.timestamp,
measurement.value["reading"],
]
)
return response
else:
return redirect("/events")

Expand Down