示例#1
0
    def post_valid(self, api_request):
        api_reply = self.reply_class()
        channel = api_request.cleaned_data['channel']
        result = api_request.cleaned_data['result']
        start = api_request.cleaned_data['start']
        end = api_request.cleaned_data['end']
        days = api_request.cleaned_data['days']

        ret_data = {'channel':{}, 'feeds':{}}
        try:
            channel = models.Channel.objects.using("slave").get(channel_id=channel)

            # process channel data
            sensor_setting = {}
            sensor_setting['name'] = channel.name
            sensor_setting['category'] = channel.category
            for sensor_data in models.AlertSetting.objects.using("slave").filter(channel=channel):
                sensor_setting[sensor_data.sensor.name] = str((sensor_data.value)) if sensor_data.value is not None else None
                sensor_setting['alert'] = sensor_data.abnormal >= settings.ALERT_LIMIT
                if sensor_data.sensor.id == 1:
                    sensor_setting['valid_from'] = logic.format_time(sensor_data.valid_from)
                    sensor_setting['valid_to'] = logic.format_time(sensor_data.valid_to)
                    sensor_setting['min_value'] = int(sensor_data.min_value)
                    sensor_setting['max_value'] = int(sensor_data.max_value)
                sensor_setting['updated_at'] = logic.format_date(sensor_data.update_time)
            ret_data['channel'].update(sensor_setting)

            # process feeds
            getcontext().prec = 3
            data_feeds = collections.defaultdict(lambda:0)
            datetime_filter = localtime(now()) - datetime.timedelta(days=1)
            for data in models.HistoryFeeds.objects.using("slave").filter(channel=channel, sensor_id=1, create_time__gt=datetime_filter):
                key = localtime(data.create_time).strftime("%Y%m%d%H")
                if data_feeds[key] == 0:
                    data_feeds[key] = data.value
                else:
                    data_feeds[key] = (data_feeds[key] + data.value) / 2

            ordered = OrderedDict(sorted(data_feeds.items(), key=lambda x:int(x[0]), reverse=True))

            horizen = []
            dataset = []
            for key, value in ordered.iteritems():
                horizen.insert(0, key[-2:]+":00")
                dataset.insert(0, str(value))
                if len(horizen) == 10:
                    break
            ret_data['feeds']['labels'] = horizen
            ret_data['feeds']['data'] = [dataset]

            api_reply.set_field("data", ret_data)
            return api_reply

        except models.Channel.DoesNotExist:
            raise exceptions.ApiChannelNotFound()
示例#2
0
    def post_valid(self, api_request):
        api_reply = self.reply_class()

        channels = []

        channel_setting_dict = collections.defaultdict(list)
        for alert in models.AlertSetting.objects.using("slave").all():
            setting_dict = collections.defaultdict(dict)
            setting_dict[alert.sensor.name]["max"] = str(alert.max_value)
            setting_dict[alert.sensor.name]["min"] = str((alert.min_value))
            setting_dict[alert.sensor.name]["from"] = logic.format_time(alert.valid_from)
            setting_dict[alert.sensor.name]["to"] = logic.format_time(alert.valid_to)
            setting_dict[alert.sensor.name]["value"] = str((alert.value))
            setting_dict[alert.sensor.name]["update_time"] = logic.format_date(alert.update_time)
            setting_dict[alert.sensor.name]["alert"] = alert.abnormal >= settings.ALERT_LIMIT
            # if setting_dict[alert.sensor.name]["alert"] and  alert.sensor_id == 1:
                # sms.send_sms_alert(settings.ALERT_NUMBER,
                                   # alert.sensor.name,
                                   # alert.channel.name,
                                   # alert.min_value,
                                   # alert.max_value,
                                   # alert.value)
            channel_setting_dict[alert.channel.id].append(setting_dict)

        for channel in models.Channel.objects.using("slave").all().order_by("-id"):
            channel_dict = {}
            channel_dict['name'] = channel.name
            channel_dict['api_key'] = channel.api_write_key
            channel_dict['category'] = channel.get_category_display()
            channel_dict['id'] = channel.channel_id
            channel_dict['status'] = channel_setting_dict[channel.id]

            channels.append(channel_dict)

        api_reply.set_field("data", channels)
        return api_reply