mod_stat.go 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. // package mod_stat -- статистика модуля
  2. //
  3. // Подробная статистика по периодам:
  4. // 60 сек -- первая минута
  5. // 60 минут -- первый час
  6. // 48 получасов -- первые сутки
  7. // 4 часа -- первые 14 суток
  8. package mod_stat
  9. import (
  10. "time"
  11. "gitp78su.ipnodns.ru/svi/kern/v4/d0"
  12. "gitp78su.ipnodns.ru/svi/kern/v4/d2/kmodule/mod_stat/mod_stat_day"
  13. "gitp78su.ipnodns.ru/svi/kern/v4/d2/kmodule/mod_stat/mod_stat_sec"
  14. "gitp78su.ipnodns.ru/svi/kern/v4/d3/mod_ent/module_name"
  15. )
  16. // ModStat -- статистика модуля.
  17. type ModStat struct {
  18. statSec *mod_stat_sec.ModStatSec // Объект статистики 60 секунд
  19. timeMinute *d0.MSafeNum // Интервал ожидания минутного таймера, мсек
  20. statMin *mod_stat_day.ModStatDay // Объект статистики 60 минут
  21. statDay *mod_stat_day.ModStatDay // Объект статистики за последние 24 часа
  22. name *module_name.LModuleName
  23. owner *d0.LOwner
  24. }
  25. // NewModStat -- возвращает новую статистику модуля.
  26. func NewModStat(owner *d0.LOwner, name *module_name.LModuleName) *ModStat {
  27. d0.If(name == nil).Hassert("NewModuleStat(): name==nil")
  28. sf := &ModStat{
  29. statSec: mod_stat_sec.NewModStatSec(),
  30. statMin: mod_stat_day.NewModStatDay(),
  31. statDay: mod_stat_day.NewModStatDay(),
  32. timeMinute: d0.MutSafeNum(owner, 60*1000),
  33. owner: owner,
  34. name: name,
  35. }
  36. go sf.eventMinute()
  37. return sf
  38. }
  39. // Срабатывает раз в минуту.
  40. func (sf *ModStat) eventMinute() {
  41. countPartHour := 20
  42. for {
  43. time.Sleep(time.Millisecond * time.Duration(sf.timeMinute.Get()))
  44. sum := sf.statSec.Sum()
  45. sf.statMin.Add(sum)
  46. countPartHour--
  47. if countPartHour == 0 {
  48. sum := sf.statMin.Sum()
  49. sf.statDay.Add(sum)
  50. countPartHour = 20
  51. }
  52. }
  53. }
  54. // Add -- добавляет значение в статистику.
  55. func (sf *ModStat) Add(val d0.Num) {
  56. sf.statSec.Add(val)
  57. }
  58. // SvgSec -- возвращает посекундную SVG за последнюю минуту.
  59. func (sf *ModStat) SvgSec() *d0.LTxt {
  60. return sf.statSec.Svg()
  61. }
  62. // SvgMin -- возвращает поминутную SVG за последнюю минуту.
  63. func (sf *ModStat) SvgMin() *d0.LTxt {
  64. return sf.statMin.Svg()
  65. }
  66. // SvgDay -- возвращает SVG за последние сутки по часам.
  67. func (sf *ModStat) SvgDay() *d0.LTxt {
  68. return sf.statDay.Svg()
  69. }