| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- // package mod_stat -- статистика модуля
- //
- // Подробная статистика по периодам:
- // 60 сек -- первая минута
- // 60 минут -- первый час
- // 48 получасов -- первые сутки
- // 4 часа -- первые 14 суток
- package mod_stat
- import (
- "time"
- . "gitp78su.ipnodns.ru/svi/kern/v3/kc/helpers"
- "gitp78su.ipnodns.ru/svi/kern/v3/kc/safe_int"
- . "gitp78su.ipnodns.ru/svi/kern/v3/krn/kalias"
- "gitp78su.ipnodns.ru/svi/kern/v3/krn/kmodule/mod_stat/mod_stat_day"
- "gitp78su.ipnodns.ru/svi/kern/v3/krn/kmodule/mod_stat/mod_stat_sec"
- . "gitp78su.ipnodns.ru/svi/kern/v3/krn/ktypes"
- )
- // ModStat -- статистика модуля
- type ModStat struct {
- statSec *mod_stat_sec.ModStatSec // Объект статистики 60 секунд
- timeMinute ISafeInt // Интервал ожидания минутного таймера, мсек
- statMin *mod_stat_day.ModStatDay // Объект статистики 60 минут
- statDay *mod_stat_day.ModStatDay // Объект статистики за последние 24 часа
- name AModuleName
- }
- // NewModStat -- возвращает новую статистику модуля
- func NewModStat(name AModuleName) *ModStat {
- Hassert(name != "", "NewModuleStat(): name module is empty")
- sf := &ModStat{
- statSec: mod_stat_sec.NewModStatSec(),
- statMin: mod_stat_day.NewModStatDay(),
- statDay: mod_stat_day.NewModStatDay(),
- timeMinute: safe_int.NewSafeInt(),
- name: name,
- }
- sf.timeMinute.Set(60 * 1000)
- 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()
- }
|