// package mod_stat -- статистика модуля // // Подробная статистика по периодам: // 60 сек -- первая минута // 60 минут -- первый час // 48 получасов -- первые сутки // 4 часа -- первые 14 суток package mod_stat import ( "time" "gitp78su.ipnodns.ru/svi/kern/v4/lev0" "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" "gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_ent/module_name" ) // ModStat -- статистика модуля. type ModStat struct { statSec *mod_stat_sec.ModStatSec // Объект статистики 60 секунд timeMinute *lev0.MSafeNum // Интервал ожидания минутного таймера, мсек statMin *mod_stat_day.ModStatDay // Объект статистики 60 минут statDay *mod_stat_day.ModStatDay // Объект статистики за последние 24 часа name *module_name.LModuleName } // NewModStat -- возвращает новую статистику модуля. func NewModStat(name *module_name.LModuleName) *ModStat { lev0.If(name == nil).Hassert("NewModuleStat(): name==nil") sf := &ModStat{ statSec: mod_stat_sec.NewModStatSec(), statMin: mod_stat_day.NewModStatDay(), statDay: mod_stat_day.NewModStatDay(), timeMinute: lev0.MutSafeNum(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 lev0.Num) { sf.statSec.Add(val) } // SvgSec -- возвращает посекундную SVG за последнюю минуту. func (sf *ModStat) SvgSec() *lev0.LTxt { return sf.statSec.Svg() } // SvgMin -- возвращает поминутную SVG за последнюю минуту. func (sf *ModStat) SvgMin() *lev0.LTxt { return sf.statMin.Svg() } // SvgDay -- возвращает SVG за последние сутки по часам. func (sf *ModStat) SvgDay() *lev0.LTxt { return sf.statDay.Svg() }