mod_stat.go 2.5 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. . "gitp78su.ipnodns.ru/svi/kern/v2/kc/helpers"
  12. "gitp78su.ipnodns.ru/svi/kern/v2/kc/safe_int"
  13. . "gitp78su.ipnodns.ru/svi/kern/v2/krn/kalias"
  14. "gitp78su.ipnodns.ru/svi/kern/v2/krn/kmodule/mod_stat/mod_stat_day"
  15. "gitp78su.ipnodns.ru/svi/kern/v2/krn/kmodule/mod_stat/mod_stat_sec"
  16. . "gitp78su.ipnodns.ru/svi/kern/v2/krn/ktypes"
  17. )
  18. // ModStat -- статистика модуля
  19. type ModStat struct {
  20. statSec *mod_stat_sec.ModStatSec // Объект статистики 60 секунд
  21. timeMinute ISafeInt // Интервал ожидания минутного таймера, мсек
  22. statMin *mod_stat_day.ModStatDay // Объект статистики 60 минут
  23. statDay *mod_stat_day.ModStatDay // Объект статистики за последние 24 часа
  24. name AModuleName
  25. }
  26. // NewModStat -- возвращает новую статистику модуля
  27. func NewModStat(name AModuleName) *ModStat {
  28. Hassert(name != "", "NewModuleStat(): name module is empty")
  29. sf := &ModStat{
  30. statSec: mod_stat_sec.NewModStatSec(),
  31. statMin: mod_stat_day.NewModStatDay(),
  32. statDay: mod_stat_day.NewModStatDay(),
  33. timeMinute: safe_int.NewSafeInt(),
  34. name: name,
  35. }
  36. sf.timeMinute.Set(60 * 1000)
  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 int) {
  57. sf.statSec.Add(val)
  58. }
  59. // SvgSec -- возвращает посекундную SVG за последнюю минуту
  60. func (sf *ModStat) SvgSec() string {
  61. return sf.statSec.Svg()
  62. }
  63. // SvgMin -- возвращает поминутную SVG за последнюю минуту
  64. func (sf *ModStat) SvgMin() string {
  65. return sf.statMin.Svg()
  66. }
  67. // SvgDay -- возвращает SVG за последние сутки по часам
  68. func (sf *ModStat) SvgDay() string {
  69. return sf.statDay.Svg()
  70. }