mod_stat.go 2.5 KB

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