async def process_integral_month(self, last_date): """ Запрос интегральных показаний за месяц """ narc = self.get_narc(last_date) num_page = self.eval_num_page(narc) total_reponse = [] for i in range(num_page // 10): int_months = await self.read_metrics( 3, narc & 255, narc >> 8, 10, type_metrics='read_arch_month') narc += 10 for int_month in int_months: tmp_response = { 'metric_type': INTEGRAL_MONTH, 'event_time': now(), 'metrics': {} } tmp_response['metrics']['1'] = { key: int_month.get(key) for key in self.int_archive_keys } if tmp_response['metrics']['1']['wN_arc'] != 0: total_reponse.append(tmp_response) remainder = num_page % 10 if remainder: int_months = await self.read_metrics( 3, narc & 255, narc >> 8, remainder, type_metrics='read_arch_month') for int_month in int_months: tmp_response = { 'metric_type': INTEGRAL_MONTH, 'event_time': now(), 'metrics': {} } tmp_response['metrics']['1'] = { key: int_month.get(key) for key in self.int_archive_keys } if tmp_response['metrics']['1']['wN_arc'] != 0: total_reponse.append(tmp_response) return total_reponse
def eval_num_page(self, last_num_page): now_num_page = self.get_narc(now()) if now_num_page - last_num_page < 0: raise IncorrectArchDate('eval_num_page: Incorrect las_date') return now_num_page - last_num_page
async def wrapper(self, metric_type, last_date): if last_date and CURRENT not in metric_type: next_date = last_date + delta(metric_type) if MONTH in metric_type: scheme = await self.get_scheme() report_day = scheme.get('report_day', 31) next_date = get_report_date(next_date, report_day) if next_date > now(): return return await func(self, metric_type, last_date)
async def process_period_current(self): """ Запрос переодических текущих показаний """ per_current = await self.read_metrics(0, type_metrics='read_current') response = { 'metric_type': PERIOD_CURRENT, 'event_time': now(), 'metrics': { '1': { key: per_current[0].get(key) for key in self.per_current_keys } } } return [response]
async def process_integral_current(self): """ Запрос интегральных текущих показаний """ int_current = await self.read_metrics(0, type_metrics='read_current') response = { 'metric_type': INTEGRAL_CURRENT, 'event_time': now(), 'metrics': { '1': { key: int_current[1].get(key) for key in self.int_current_keys } } } return [response]
async def process_integral_hour(self, last_date): """ Запрос интегральных показаний за час """ int_hours = await self.read_metrics(3, 0, 1, 3, type_metrics='read_arch_hour') response = { 'metric_type': INTEGRAL_HOUR, 'event_time': now(), 'metrics': {} } for i, int_hour in enumerate(int_hours): response['metrics'][str(i + 1)] = { key: int_hour.get(key) for key in self.int_archive_keys } return [response]