59 lines
2.1 KiB
Go
59 lines
2.1 KiB
Go
|
package models
|
|||
|
|
|||
|
import (
|
|||
|
"database/sql"
|
|||
|
"html/template"
|
|||
|
"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) RunSubProcesses() {
|
|||
|
go tools.Ticker(config.Cfg.TgTickerTime*time.Hour, func() {
|
|||
|
s.Bot.Backup(config.Cfg.DBPath, s.LogEntries, s.Cache)
|
|||
|
})
|
|||
|
go tools.Ticker(config.Cfg.LastFmTickerTime*time.Second, func() {
|
|||
|
if track, err := s.LFM.LastTrack(); err == nil {
|
|||
|
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
|
|||
|
}
|