ChSpeedControlCalc.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  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, mktime
  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())
  21. # end_time = mktime('2022-11-06 20:00:00')
  22. days, start_time, end_time = self.calc_time(reader, end_time - start_period, end_time)
  23. day_stamp = days[0]
  24. end_pos = end_time - day_stamp
  25. tuple_pathes = reader.many_tuple_path(days, card_types=set([4, 5, 6]))
  26. gen = detail_pathes(reader, tuple_pathes, days)
  27. manager = chs_manager()
  28. for _name, _card_type, _spec, _data in gen:
  29. manager.add(_name, _card_type, _spec, _data, end_pos)
  30. manager.cur_speed()
  31. manager.normal_speed()
  32. manager.optimize()
  33. reckons = manager.get_reckon()
  34. return reckons
  35. def _calc_handler(self, rclient):
  36. result = self._collect_data()
  37. logger.debug(result)
  38. if len(result) != 0:
  39. rclient.set(f"nc_refill_channel_control_speed", json.dumps(result))
  40. rclient.publish('refill', json.dumps({'type': 'channel_speed', 'value': 0}))
  41. return 180