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/lev0/helpers"
  12. . "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kalias"
  13. . "gitp78su.ipnodns.ru/svi/kern/v4/lev0/ktypes"
  14. "gitp78su.ipnodns.ru/svi/kern/v4/lev1/safe_int"
  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. )
  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(60 * 1000),
  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 int) {
  56. sf.statSec.Add(val)
  57. }
  58. // SvgSec -- возвращает посекундную SVG за последнюю минуту.
  59. func (sf *ModStat) SvgSec() string {
  60. return sf.statSec.Svg()
  61. }
  62. // SvgMin -- возвращает поминутную SVG за последнюю минуту.
  63. func (sf *ModStat) SvgMin() string {
  64. return sf.statMin.Svg()
  65. }
  66. // SvgDay -- возвращает SVG за последние сутки по часам.
  67. func (sf *ModStat) SvgDay() string {
  68. return sf.statDay.Svg()
  69. }