Skip to content

Commit

Permalink
Fix and optimize sensors (#4461)
Browse files Browse the repository at this point in the history
* Fix sensor import

* Optimize sensor usage

* Performance improvement

* Add comment

---------

Co-authored-by: Alex Swindler <[email protected]>
  • Loading branch information
haneslinger and axelstudios authored Jan 5, 2024
1 parent d7adb2b commit 2f24661
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 12 deletions.
2 changes: 1 addition & 1 deletion seed/static/seed/partials/sensors_upload_modal.html
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ <h4 class="modal-title" ng-switch-when="4" translate>UPLOAD_COMPLETE_TITLE</h4>
class="btn btn-primary col-sm-6 center-block"
sd-uploader
organization-id="organization_id"
sourcetype="SensorMetaData"
sourcetype="SensorMetadata"
sourceprog=""
sourcever=""
importrecord="selectedDataset.id"
Expand Down
26 changes: 15 additions & 11 deletions seed/utils/sensors.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,9 @@ def _usages_by_exact_times(self, page, per_page):
sensor_readings = SensorReading.objects.filter(sensor__in=self.sensors)
if self.showOnlyOccupiedReadings:
sensor_readings = sensor_readings.filter(is_occupied=True)
timestamps = sensor_readings.distinct('timestamp').order_by("timestamp").values_list("timestamp", flat=True)

# order by id **greatly** speeds this up (cause of indexing, I think
timestamps = sensor_readings.distinct('timestamp').order_by("timestamp", "id").values_list("timestamp", flat=True)
paginator = Paginator(timestamps, per_page)
timestamps_in_page = paginator.page(page)

Expand All @@ -71,19 +73,21 @@ def _usages_by_exact_times(self, page, per_page):

time_format = "%Y-%m-%d %H:%M:%S"

for sensor in self.sensors:
field_name = self._build_column_def(sensor, column_defs)
field_name_by_sensor_id = {
sensor.id: self._build_column_def(sensor, column_defs)
for sensor in self.sensors
}

sensor_readings = sensor.sensor_readings.filter(timestamp__range=[earliest_time, latest_time])
if self.showOnlyOccupiedReadings:
sensor_readings = sensor_readings.filter(is_occupied=True)
sensor_readings = SensorReading.objects.filter(timestamp__range=[earliest_time, latest_time], sensor__in=self.sensors)
if self.showOnlyOccupiedReadings:
sensor_readings = sensor_readings.filter(is_occupied=True)

for sensor_reading in sensor_readings.all():
timestamp = sensor_reading.timestamp.astimezone(tz=self.tz).strftime(time_format)
times_key = str(timestamp)
for sensor_reading in sensor_readings.all():
timestamp = sensor_reading.timestamp.astimezone(tz=self.tz).strftime(time_format)
times_key = str(timestamp)

timestamps[times_key]["timestamp"] = timestamp
timestamps[times_key][field_name] = sensor_reading.reading
timestamps[times_key]["timestamp"] = timestamp
timestamps[times_key][field_name_by_sensor_id[sensor_reading.sensor_id]] = sensor_reading.reading

return {
'pagination': {
Expand Down

0 comments on commit 2f24661

Please sign in to comment.