175 lines
4.9 KiB
Go
175 lines
4.9 KiB
Go
|
|
package main
|
||
|
|
|
||
|
|
import (
|
||
|
|
"log"
|
||
|
|
"os"
|
||
|
|
"os/signal"
|
||
|
|
"syscall"
|
||
|
|
"time"
|
||
|
|
|
||
|
|
"gordenko.dev/dima/flashscore"
|
||
|
|
fsmodel "gordenko.dev/dima/flashscore/model"
|
||
|
|
"gordenko.dev/dima/qx"
|
||
|
|
"gordenko.dev/dima/tipper/daemon"
|
||
|
|
"gordenko.dev/dima/tipper/model"
|
||
|
|
"gordenko.dev/dima/web"
|
||
|
|
"gordenko.dev/dima/web/api"
|
||
|
|
"gordenko.dev/dima/web/router"
|
||
|
|
"gordenko.dev/dima/ws"
|
||
|
|
|
||
|
|
_ "github.com/go-sql-driver/mysql"
|
||
|
|
)
|
||
|
|
|
||
|
|
const (
|
||
|
|
port = 33465
|
||
|
|
baseDir = "/home/ubuntu/ht"
|
||
|
|
dsn = "user:password@/tipper"
|
||
|
|
)
|
||
|
|
|
||
|
|
func main() {
|
||
|
|
logger := log.New(os.Stdout, "", log.LstdFlags)
|
||
|
|
|
||
|
|
db, err := qx.Open("mysql", dsn)
|
||
|
|
if err != nil {
|
||
|
|
log.Fatalf("qx.Open: %s\n", err)
|
||
|
|
}
|
||
|
|
defer db.Close()
|
||
|
|
|
||
|
|
tipperModel := model.New(db)
|
||
|
|
flashscoreModel := fsmodel.New(db)
|
||
|
|
|
||
|
|
wsServer, err := ws.NewPublicServer(ws.PublicServerOptions{
|
||
|
|
Logger: log.New(os.Stdout, "ws: ", log.LstdFlags),
|
||
|
|
LostConnectionTimeout: time.Duration(60*60*24) * time.Second,
|
||
|
|
})
|
||
|
|
if err != nil {
|
||
|
|
log.Fatalf("ws.NewPublicServer: %s\n", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
d, err := daemon.New(daemon.Options{
|
||
|
|
Logger: logger,
|
||
|
|
FlashscoreAPIAddr: "http://localhost:7767/api",
|
||
|
|
OnexbetWsURL: "ws://localhost:7772/ws",
|
||
|
|
OnexbetAPIURL: "http://localhost:7772/api",
|
||
|
|
FlashscoreModel: flashscoreModel,
|
||
|
|
TipperModel: tipperModel,
|
||
|
|
SportIDs: []int{
|
||
|
|
flashscore.Football,
|
||
|
|
flashscore.Handball,
|
||
|
|
flashscore.Tennis,
|
||
|
|
},
|
||
|
|
})
|
||
|
|
if err != nil {
|
||
|
|
log.Fatalf("daemon.New: %s\n", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
publicAPI, err := api.NewAPI(api.Options{
|
||
|
|
Logger: log.New(os.Stdout, "api: ", log.LstdFlags),
|
||
|
|
})
|
||
|
|
if err != nil {
|
||
|
|
log.Fatalf("api.NewAPI: %s\n", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
publicAPI.PublicFunc("setTipResult", d.SetTipResultManual)
|
||
|
|
publicAPI.PublicFunc("listSportTips", d.ListSportTips)
|
||
|
|
publicAPI.PublicFunc("listTeamZones", flashscoreModel.ListTeamZones)
|
||
|
|
publicAPI.PublicFunc("listTeamsByZone", flashscoreModel.ListTeamsByZone)
|
||
|
|
publicAPI.PublicFunc("listTeamAliases", flashscoreModel.ListTeamAliases)
|
||
|
|
publicAPI.PublicFunc("addTeamAlias", flashscoreModel.AddTeamAlias)
|
||
|
|
publicAPI.PublicFunc("removeTeamAlias", flashscoreModel.RemoveTeamAlias)
|
||
|
|
|
||
|
|
publicAPI.PublicFunc("listStrategies", tipperModel.ListStrategies)
|
||
|
|
publicAPI.PublicFunc("listStrategyRatedChampStats", tipperModel.ListStrategyRatedChampStats)
|
||
|
|
publicAPI.PublicFunc("getStrategyRatedHistory", tipperModel.GetStrategyRatedHistory)
|
||
|
|
|
||
|
|
publicAPI.PublicFunc("listStrategiesReports", tipperModel.ListStrategiesReports)
|
||
|
|
publicAPI.PublicFunc("listStrategies", tipperModel.ListStrategies)
|
||
|
|
publicAPI.PublicFunc("listStrategyChampStats", tipperModel.ListStrategyChampStats)
|
||
|
|
publicAPI.PublicFunc("getStrategyHistory", tipperModel.GetStrategyHistory)
|
||
|
|
publicAPI.PublicFunc("getSportRatedReport", tipperModel.GetSportRatedReport)
|
||
|
|
|
||
|
|
publicAPI.PublicFunc("searchMatchCandidates", d.SearchMatchCandidates)
|
||
|
|
publicAPI.PublicFunc("searchMatchCandidatesByTeamName", d.SearchMatchCandidatesByTeamName)
|
||
|
|
publicAPI.PublicFunc("addTeamsAliases", d.AddTeamsAliases)
|
||
|
|
|
||
|
|
r := router.New()
|
||
|
|
r.HandleFunc("/football", pageFootball)
|
||
|
|
r.HandleFunc("/handball", pageHandball)
|
||
|
|
r.HandleFunc("/tennis", pageTennis)
|
||
|
|
r.HandleFunc("/football-by-days", d.PageFootballByDays)
|
||
|
|
r.HandleFunc("/handball-by-days", d.PageHandballByDays)
|
||
|
|
r.HandleFunc("/tennis-by-days", d.PageTennisByDays)
|
||
|
|
r.HandleFunc("/aliases", pageAliases)
|
||
|
|
r.HandleFunc("/stats", pageStats)
|
||
|
|
r.HandleFunc("/matches", d.PageMatches)
|
||
|
|
//r.HandleFunc("/watch", d.PageWatch)
|
||
|
|
//r.HandleFunc("/unwatch", d.PageUnwatch)
|
||
|
|
r.HandleFunc("/listRatedChamps", d.ListRatedChamps)
|
||
|
|
r.HandleFunc("/", pageIndex)
|
||
|
|
r.HandleFunc("/best-strategies", pageStrategies)
|
||
|
|
//
|
||
|
|
r.Handle("/api", publicAPI)
|
||
|
|
r.Handle("/ws", wsServer)
|
||
|
|
|
||
|
|
app, err := web.NewApp(web.AppOptions{
|
||
|
|
Port: port,
|
||
|
|
Router: r,
|
||
|
|
BaseDir: baseDir,
|
||
|
|
TemplateDir: "templates",
|
||
|
|
StaticDirs: map[string]string{
|
||
|
|
"static": "static",
|
||
|
|
},
|
||
|
|
})
|
||
|
|
if err != nil {
|
||
|
|
log.Fatalf("web.NewApp: %s\n", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
go app.Run()
|
||
|
|
go d.Run()
|
||
|
|
|
||
|
|
sigs := make(chan os.Signal, 1)
|
||
|
|
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
|
||
|
|
|
||
|
|
<-sigs
|
||
|
|
|
||
|
|
logger.Println("daemon stopped.")
|
||
|
|
}
|
||
|
|
|
||
|
|
/*
|
||
|
|
var topChamps = map[string]bool{
|
||
|
|
"/england/premier-league": true,
|
||
|
|
"/germany/bundesliga": true,
|
||
|
|
"/italy/serie-a": true,
|
||
|
|
"/spain/laliga": true,
|
||
|
|
"/portugal/primeira-liga": true,
|
||
|
|
"/switzerland/super-league": true,
|
||
|
|
"/turkey/super-lig": true,
|
||
|
|
"/faroe-islands/premier-league": true,
|
||
|
|
"/usa/mls": true,
|
||
|
|
}
|
||
|
|
|
||
|
|
// Топ чемпы
|
||
|
|
var myIgnoreChamps = map[string]bool{
|
||
|
|
"/england/premier-league": true,
|
||
|
|
"/germany/bundesliga": true,
|
||
|
|
"/spain/laliga": true,
|
||
|
|
"/portugal/primeira-liga": true,
|
||
|
|
"/switzerland/super-league": true,
|
||
|
|
"/turkey/super-lig": true,
|
||
|
|
//"/faroe-islands/premier-league": true,
|
||
|
|
"/usa/mls": true,
|
||
|
|
}
|
||
|
|
|
||
|
|
func acceptedChamps(champs map[string]bool) func(string) bool {
|
||
|
|
return func(champID string) bool {
|
||
|
|
return champs[champID]
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func nonAcceptedChamps(champs map[string]bool) func(string) bool {
|
||
|
|
return func(champID string) bool {
|
||
|
|
return !champs[champID]
|
||
|
|
}
|
||
|
|
}
|
||
|
|
*/
|