mod_stat.go 2.5 KB

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