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()
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