mod_stat.go 2.6 KB

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