Advertisement
Guest User

Untitled

a guest
Jun 17th, 2019
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.32 KB | None | 0 0
  1. def print_elapsed_time(ref_datetime, description):
  2. print('{} (took {}ms)'.format(description, floor((datetime.now()-ref_datetime).microseconds/1000)))
  3. return datetime.now()
  4.  
  5. def simpleview(request):
  6. time_marker = datetime.now()
  7. device_name = request.GET['device']
  8. device = Datalogger.objects.get(device_name=device_name)
  9.  
  10. sensors = Sensor.objects.filter(datalogger=device).order_by('pk')
  11. sensor_count = len(sensors) # should be no worse than count() since already-evaluated and cached. todo: confirm
  12.  
  13. #assign each sensor an index for the tuples (zero is used for time/x-axis)
  14. sensor_indices = {}
  15. for idx, sensor in enumerate(sensors, start=1):
  16. sensor_indices.update({sensor.sensor_name:idx})
  17.  
  18. time_marker = print_elapsed_time(time_marker, 'basic gets')
  19.  
  20. # process data into timestamp-grouped tuples accessible by sensor-index ([0] is timestamp)
  21. raw_data = SensorDatum.objects.filter(sensor__datalogger__device_name=device_name).order_by('timestamp', 'sensor')
  22. data = []
  23. data_idx = 0
  24.  
  25. time_marker = print_elapsed_time(time_marker, 'queried data')
  26.  
  27. while data_idx < len(raw_data):
  28. row_list = [raw_data[data_idx].timestamp]
  29. row_list.extend([None]*sensor_count)
  30. row_idx = 1
  31.  
  32. while data_idx < len(raw_data) and raw_data[data_idx].timestamp == row_list[0]:
  33. row_idx = sensor_indices.get(raw_data[data_idx].sensor.sensor_name)
  34. row_list[row_idx] = raw_data[data_idx].value
  35. data_idx += 1
  36. data.append(tuple(row_list))
  37.  
  38. time_marker = print_elapsed_time(time_marker, 'split data by sensor')
  39.  
  40. column_labels = ['Time']
  41. column_types = ["datetime"]
  42. for sensor in sensors:
  43. column_labels.append(sensor.sensor_name)
  44. column_types.append("number")
  45.  
  46. time_marker = print_elapsed_time(time_marker, 'prepared column labels/types')
  47.  
  48. gchart_json = prepare_data_for_gchart(column_labels, column_types, data)
  49.  
  50.  
  51. time_marker = print_elapsed_time(time_marker, 'prepared json')
  52.  
  53.  
  54. context = {
  55. 'device': device_name,
  56. 'sensor_count': sensor_count,
  57. 'sensor_indices': sensor_indices,
  58. 'gchart_json': gchart_json,
  59. }
  60.  
  61. time_marker = print_elapsed_time(time_marker, 'created context')
  62.  
  63. return render(request, 'pulogger/simpleTimeSeriesView.html', context)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement