package models import ( "database/sql" "html/template" "log" "main/config" "main/tools" "sync" "time" "git.hikan.ru/serr/candycache" "github.com/gin-gonic/gin" ) // Контекст сайта type Site struct { sync.RWMutex Cfg *config.Config Tmpl *template.Template // Хранилище шаблонов Bot *TGBot // Контроллер для отстука в тг бота LFM *LFMWorker // Контроллер ЛАСТ ФМ LogEntries []string // Журнал логов (отправляется в ТГ бота) Posts Posts // Список со всеми постами из базы данных Tags map[string]int // Список всех тегов Cache *candycache.Cache // Домик для кэша LastTrackAjaxBlock string // HTML Аякс блок, соответствующий последнему кэшированному треку с ластфм RestartTime time.Time // Временной момент рестарта серверного приложения Version int64 // Окончание ?v=version для всех кэшируемых файлов DB *sql.DB // Открытое соединение с БД GinEngine *gin.Engine // Движок Gin } // Функция возвращает пустой экземпляр контекста сайта func NewSiteCtx() *Site { return &Site{ RestartTime: time.Now(), Version: time.Now().Unix(), } } // Запуск параллельных процессов func (s *Site) RunTickers() { go tools.Ticker(config.Cfg.TgTickerTime*time.Hour, func() { if err := s.Bot.BackupAll(config.Cfg.DBPath, s.LogEntries, s.Cache); err != nil { log.Println("s.Bot.Backup() error: ", err) } }) go tools.Ticker(config.Cfg.LastFmTickerTime*time.Second, func() { if track, err := s.LFM.LastTrack(); err != nil { log.Println("s.LFM.LastTrack() error: ", err) } else { s.LastTrackAjaxBlock = s.LFM.TrackAjax(track) } }) } func (s *Site) Run(ip string) error { if err := s.GinEngine.Run(ip); err != nil { return err } return nil }