from .ChannelCalc import ChannelCalc, detail_pathes from .algorithm import calc_chspeed, calc_chratio, calc_commit, calc_chprice, calc_chspeed_ratio from .DataStream import EChPosmap as pos_map from .DataStream import ch_calc_cfgs, mktime from .ChannelReader import ChannelReader from .chs_type_spec import type_spec_chs, ch_type_spec from .chs_manager import chs_manager import numpy as np import time as time import json import redis import logging logger = logging.getLogger('ChSpeedControlCalc') class ChSpeedControlCalc(ChannelCalc): def _calc_pmf(self, _commits, _succs): pass def _collect_data(self): start_period, ratio_period, speed_period, monitor_period, cdf_speed_period = ch_calc_cfgs() reader = self._reader() end_time = int(time.time()) # end_time = mktime('2022-11-06 20:00:00') days, start_time, end_time = self.calc_time(reader, end_time - start_period, end_time) day_stamp = days[0] end_pos = end_time - day_stamp tuple_pathes = reader.many_tuple_path(days, card_types=set([4, 5, 6])) gen = detail_pathes(reader, tuple_pathes, days) manager = chs_manager() for _name, _card_type, _spec, _data in gen: manager.add(_name, _card_type, _spec, _data, end_pos) manager.cur_speed() manager.normal_speed() manager.optimize() reckons = manager.get_reckon() return reckons def _calc_handler(self, rclient): result = self._collect_data() logger.debug(result) if len(result) != 0: rclient.set(f"nc_refill_channel_control_speed", json.dumps(result)) rclient.publish('refill', json.dumps({'type': 'channel_speed', 'value': 0})) return 180