Esempio n. 1
0
 def serialize(self):
     data = {
         '_links': {
             'self': {'href': full_reverse('api-root', self._request)},
             'curies': CHAIN_CURIES,
             'ch:sites': {
                 'title': 'Sites',
                 'href': full_reverse('sites-list', self._request)
             }
         }
     }
     return data
Esempio n. 2
0
 def site_summary_view(cls, request, id):
     #filters = request.GET.dict()
     devices = Device.objects.filter(site_id=id).select_related(
         'sensors',
         'sensors__metric',
         'sensors__unit'
     )
     response = {
         '_links': {
             'self': {'href': full_reverse('site-summary', request,
                                           args=(id,))},
         },
         'devices': []
     }
     for device in devices:
         dev_resource = DeviceResource(obj=device, request=request)
         dev_data = dev_resource.serialize(rels=False)
         dev_data['href'] = dev_resource.get_single_href()
         response['devices'].append(dev_data)
         dev_data['sensors'] = []
         for sensor in device.sensors.all():
             sensor_resource = ScalarSensorResource(
                 obj=sensor,
                 request=request)
             sensor_data = sensor_resource.serialize(rels=False)
             sensor_data['href'] = sensor_resource.get_single_href()
             dev_data['sensors'].append(sensor_data)
             sensor_data['data'] = []
     return cls.render_response(response, request)
Esempio n. 3
0
 def serialize_stream(self):
     '''Serialize this resource for a stream'''
     data = self.serialize_single(rels=False)
     data['_links'] = {
         'ch:sensor': {'href': full_reverse(
             'scalar_sensors-single', self._request,
             args=(self._filters['sensor_id'],))}
     }
     return data
Esempio n. 4
0
 def serialize_stream(self):
     '''Serialize this resource for a stream'''
     data = self.serialize_single(rels=False)
     data['_links'] = {
         'self': {'href': self.get_single_href()},
         'ch:device': {'href': full_reverse(
             'device-single', self._request,
             args=(self._filters['device_id'],))}
     }
     return data
Esempio n. 5
0
 def serialize_single(self, embed, cache):
     data = super(SiteResource, self).serialize_single(embed, cache)
     if embed:
         stream = self._obj.raw_zmq_stream
         if stream:
             data['_links']['rawZMQStream'] = {
                 'href': stream,
                 'title': 'Raw ZMQ Stream'}
         data['_links']['ch:siteSummary'] = {
             'title': 'Summary',
             'href': full_reverse('site-summary', self._request,
                                  args=(self._obj.id,))
         }
     return data
Esempio n. 6
0
    def site_summary_view(cls, request, id):
        time_begin = timezone.now() - timedelta(hours=2)
        #filters = request.GET.dict()
        devices = Device.objects.filter(site_id=id).select_related(
            'sensors',
            'sensors__metric',
            'sensors__unit'
        )
        db_sensor_data = ScalarData.objects.filter(sensor__device__site_id=id,
                                                   timestamp__gt=time_begin)
        response = {
            '_links': {
                'self': {'href': full_reverse('site-summary', request,
                                              args=(id,))},
            },
            'devices': []
        }
        sensor_hash = {}
        for device in devices:
            dev_resource = DeviceResource(obj=device, request=request)
            dev_data = dev_resource.serialize(rels=False)
            dev_data['href'] = dev_resource.get_single_href()
            response['devices'].append(dev_data)
            dev_data['sensors'] = []
            for sensor in device.sensors.all():
                sensor_resource = ScalarSensorResource(
                    obj=sensor,
                    request=request)
                sensor_data = sensor_resource.serialize(rels=False)
                sensor_data['href'] = sensor_resource.get_single_href()
                dev_data['sensors'].append(sensor_data)
                sensor_data['data'] = []
                sensor_hash[sensor.id] = sensor_data

        #import pdb; pdb.set_trace()
        for data in db_sensor_data:
            data_data = ScalarSensorDataResource(
                obj=data, request=request).serialize(rels=False)
            sensor_hash[data.sensor_id]['data'].append(data_data)
        return cls.render_response(response, request)
Esempio n. 7
0
 def site_summary_view(cls, request, id):
     #filters = request.GET.dict()
     devices = Device.objects.filter(site_id=id).select_related(
         'sensors', 'sensors__metric', 'sensors__unit')
     response = {
         '_links': {
             'self': {
                 'href': full_reverse('site-summary', request, args=(id, ))
             },
         },
         'devices': []
     }
     sensor_data_list = influx_client.get_last_data_from_all_sensors(id)
     sensor_data_dict = {}
     for data_point in sensor_data_list:
         sensor_data_dict[int(
             data_point['sensor_id'])] = (data_point['last_value'],
                                          data_point['time'])
     for device in devices:
         dev_resource = DeviceResource(obj=device, request=request)
         dev_data = dev_resource.serialize(rels=False)
         dev_data['href'] = dev_resource.get_single_href()
         response['devices'].append(dev_data)
         dev_data['sensors'] = []
         for sensor in device.sensors.all():
             sensor_resource = ScalarSensorResource(obj=sensor,
                                                    request=request)
             sensor_data = sensor_resource.serialize(rels=False,
                                                     include_data=False)
             try:
                 sensor_data['value'] = sensor_data_dict[sensor.id][0]
                 sensor_data['updated'] = sensor_data_dict[sensor.id][1]
             except KeyError:
                 # looks like we don't have any data for this sensor
                 pass
             sensor_data['href'] = sensor_resource.get_single_href()
             dev_data['sensors'].append(sensor_data)
             sensor_data['data'] = []
     return cls.render_response(response, request)
Esempio n. 8
0
 def site_summary_view(cls, request, id):
     #filters = request.GET.dict()
     devices = Device.objects.filter(site_id=id).select_related(
         'sensors',
         'sensors__metric',
         'sensors__unit'
     )
     response = {
         '_links': {
             'self': {'href': full_reverse('site-summary', request,
                                           args=(id,))},
         },
         'devices': []
     }
     sensor_data_list = influx_client.get_last_data_from_all_sensors(id)
     sensor_data_dict = {}
     for data_point in sensor_data_list:
         sensor_data_dict[int(data_point['sensor_id'])] = (data_point['last_value'], data_point['time'])
     for device in devices:
         dev_resource = DeviceResource(obj=device, request=request)
         dev_data = dev_resource.serialize(rels=False)
         dev_data['href'] = dev_resource.get_single_href()
         response['devices'].append(dev_data)
         dev_data['sensors'] = []
         for sensor in device.sensors.all():
             sensor_resource = ScalarSensorResource(
                 obj=sensor,
                 request=request)
             sensor_data = sensor_resource.serialize(rels=False, include_data=False)
             try:
                 sensor_data['value'] = sensor_data_dict[sensor.id][0]
                 sensor_data['updated'] = sensor_data_dict[sensor.id][1]
             except KeyError:
                 # looks like we don't have any data for this sensor
                 pass
             sensor_data['href'] = sensor_resource.get_single_href()
             dev_data['sensors'].append(sensor_data)
             sensor_data['data'] = []
     return cls.render_response(response, request)
Esempio n. 9
0
    def site_summary_view(cls, request, id):
        time_begin = timezone.now() - timedelta(hours=2)
        #filters = request.GET.dict()
        devices = Device.objects.filter(site_id=id).select_related(
            'sensors',
            'sensors__metric',
            'sensors__unit')
        db_sensor_data = ScalarData.objects.filter(sensor__device__site_id=id,
                                                   timestamp__gt=time_begin)
        response = {
            '_links': {
                'self': {'href': full_reverse('site-summary', request,
                                              args=(id,))},
            },
            'devices': []
        }
        sensor_hash = {}
        for device in devices:
            dev_resource = DeviceResource(obj=device, request=request)
            dev_data = dev_resource.serialize(rels=False)
            dev_data['href'] = dev_resource.get_single_href()
            response['devices'].append(dev_data)
            dev_data['sensors'] = []
            for sensor in device.sensors.all():
                sensor_resource = SensorResource(obj=sensor, request=request)
                sensor_data = sensor_resource.serialize(rels=False)
                sensor_data['href'] = sensor_resource.get_single_href()
                dev_data['sensors'].append(sensor_data)
                sensor_data['data'] = []
                sensor_hash[sensor.id] = sensor_data

        #import pdb; pdb.set_trace()
        for data in db_sensor_data:
            data_data = SensorDataResource(
                obj=data, request=request).serialize(rels=False)
            sensor_hash[data.sensor_id]['data'].append(data_data)
        return cls.render_response(response, request)
Esempio n. 10
0
 def get_single_href(self):
     return full_reverse(self.resource_name + '-single',
                         self._request,
                         args=(self.sensor_id, self.timestamp))
Esempio n. 11
0
 def get_single_href(self):
     return full_reverse(self.resource_name + '-single',
                         self._request, args=(self.sensor_id,self.timestamp))
Esempio n. 12
0
    def organization_summary_view(cls, request, id):
        time_begin = timezone.now() - timedelta(days=1)
        #filters = request.GET.dict()
        deployments = Deployment.objects.filter(organization_id=id)
        response = {
            '_links': {
                'self': {'href': full_reverse('organization-summary', request,
                                              args=(id,))},
            },
            'deployments': []
        }
        #add each deployment in organization
        for deployment in deployments:
            dep_resource = DeploymentResource(obj=deployment, request=request)
            dep_data = dep_resource.serialize(rels=False)
            dep_data['href'] = dep_resource.get_single_href()
            response['deployments'].append(dep_data)
            #deployments can have devices, or sites that have devices
            dep_data['devices'] = []
            dep_data['sites'] = []
            #first add direct child devices
            deployment_devices = Device.objects.filter(deployment_id=deployment.id)
            for device in deployment_devices:
                device_resource = DeviceResource(obj=device, request=request)
                device_data = device_resource.serialize(rels=False)
                device_data['href'] = device_resource.get_single_href()
                #add sensors to device
                device_data['sensors'] = []
                for sensor in device.sensors.all():
                    sensor_resource = SensorResource(
                        obj=sensor,
                        request=request)
                    sensor_data = sensor_resource.serialize(rels=False)
                    sensor_data['href'] = sensor_resource.get_single_href()
                    device_data['sensors'].append(sensor_data)
                dep_data['devices'].append(device_data)

            #now add direct child sites, and their devices
            sites = FixedSite.objects.filter(deployment_id=deployment.id)
            for site in sites:
                site_resource = FixedSiteResource(obj=site, request=request)
                site_data = site_resource.serialize(rels=False)
                site_data['href'] = site_resource.get_single_href()
                #now add child devices that live in sites
                site_data['devices']=[]
                site_devices = Device.objects.filter(site_id=site.id)
                for device in site_devices:
                    device_resource = DeviceResource(obj=device, request=request)
                    device_data = device_resource.serialize(rels=False)
                    device_data['href'] = device_resource.get_single_href()
                    #add sensors to device
                    device_data['sensors'] = []
                    for sensor in device.sensors.all():
                        sensor_resource = SensorResource(
                            obj=sensor,
                            request=request)
                        sensor_data = sensor_resource.serialize(rels=False)
                        sensor_data['href'] = sensor_resource.get_single_href()
                        device_data['sensors'].append(sensor_data)
                    site_data['devices'].append(device_data)

                dep_data['sites'].append(site_data)
        return cls.render_response(response, request)