ChSpeedControlCalc.py 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. from .ChannelCalc import ChannelCalc, detail_pathes
  2. from .algorithm import calc_chspeed, calc_chratio, calc_commit, calc_chprice, calc_chspeed_ratio
  3. from .DataStream import EChPosmap as pos_map
  4. from .DataStream import ch_calc_cfgs
  5. from .ChannelReader import ChannelReader
  6. from .chs_type_spec import type_spec_chs, ch_type_spec
  7. from .chs_manager import chs_manager
  8. import numpy as np
  9. import time as time
  10. import json
  11. import redis
  12. import logging
  13. logger = logging.getLogger('ChSpeedControlCalc')
  14. class ChSpeedControlCalc(ChannelCalc):
  15. def _calc_pmf(self, _commits, _succs):
  16. pass
  17. def _collect_data(self):
  18. start_period, ratio_period, speed_period, monitor_period, cdf_speed_period = ch_calc_cfgs()
  19. reader = self._reader()
  20. end_time = int(time.time()) #- 6 * 86400
  21. days, start_time, end_time = self.calc_time(reader, end_time - start_period, end_time)
  22. day_stamp = days[0]
  23. end_pos = end_time - day_stamp
  24. tuple_pathes = reader.many_tuple_path(days, card_types=set([4, 5, 6]))
  25. gen = detail_pathes(reader, tuple_pathes, days)
  26. manager = chs_manager()
  27. for _name, _card_type, _spec, _data in gen:
  28. manager.add(_name, _card_type, _spec, _data, end_pos)
  29. manager.cur_speed()
  30. manager.optimize()
  31. reckons = manager.get_reckon()
  32. return reckons
  33. pass
  34. def _calc_handler(self, rclient):
  35. result = self._collect_data()
  36. logger.debug(result)
  37. if len(result) != 0:
  38. rclient.set(f"nc_refill_channel_control_speed", json.dumps(result))
  39. rclient.publish('refill', json.dumps({'type': 'channel_speed', 'value': 0}))
  40. return 60