| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- // package mod_stat -- статистика модуля
- //
- // Подробная статистика по периодам:
- // 60 сек -- первая минута
- // 60 минут -- первый час
- // 48 получасов -- первые сутки
- // 4 часа -- первые 14 суток
- package mod_stat
- import (
- "time"
- mKd "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
- mKh "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
- mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
- mL1 "gitp78su.ipnodns.ru/svi/kern/v4/lev1"
- "gitp78su.ipnodns.ru/svi/kern/v4/lev2/kmodule/mod_stat/mod_stat_day"
- "gitp78su.ipnodns.ru/svi/kern/v4/lev2/kmodule/mod_stat/mod_stat_sec"
- )
- // ModStat -- статистика модуля.
- type ModStat struct {
- statSec *mod_stat_sec.ModStatSec // Объект статистики 60 секунд
- timeMinute mKs.ISafeInt // Интервал ожидания минутного таймера, мсек
- statMin *mod_stat_day.ModStatDay // Объект статистики 60 минут
- statDay *mod_stat_day.ModStatDay // Объект статистики за последние 24 часа
- name *mKd.ModuleName
- }
- // NewModStat -- возвращает новую статистику модуля.
- func NewModStat(name *mKd.ModuleName) *ModStat {
- mKh.Hassert(name != nil, "NewModuleStat(): name==nil")
- sf := &ModStat{
- statSec: mod_stat_sec.NewModStatSec(),
- statMin: mod_stat_day.NewModStatDay(),
- statDay: mod_stat_day.NewModStatDay(),
- timeMinute: mL1.NewSafeInt(60 * 1000),
- name: name,
- }
- go sf.eventMinute()
- return sf
- }
- // Срабатывает раз в минуту.
- func (sf *ModStat) eventMinute() {
- countPartHour := 20
- for {
- time.Sleep(time.Millisecond * time.Duration(sf.timeMinute.Get()))
- sum := sf.statSec.Sum()
- sf.statMin.Add(sum)
- countPartHour--
- if countPartHour == 0 {
- sum := sf.statMin.Sum()
- sf.statDay.Add(sum)
- countPartHour = 20
- }
- }
- }
- // Add -- добавляет значение в статистику.
- func (sf *ModStat) Add(val int) {
- sf.statSec.Add(val)
- }
- // SvgSec -- возвращает посекундную SVG за последнюю минуту.
- func (sf *ModStat) SvgSec() string {
- return sf.statSec.Svg()
- }
- // SvgMin -- возвращает поминутную SVG за последнюю минуту.
- func (sf *ModStat) SvgMin() string {
- return sf.statMin.Svg()
- }
- // SvgDay -- возвращает SVG за последние сутки по часам.
- func (sf *ModStat) SvgDay() string {
- return sf.statDay.Svg()
- }
|