go-pingbot/cmd/pingbot/main.go

158 lines
2.7 KiB
Go
Raw Normal View History

2021-07-11 21:19:37 +00:00
package main
import (
"bufio"
"fmt"
2021-08-14 21:43:30 +00:00
"os"
"sync"
"time"
2021-07-29 18:51:15 +00:00
2021-08-12 19:26:54 +00:00
"github.com/MedzikUser/go-utils/common"
2021-08-14 21:43:30 +00:00
"github.com/MedzikUser/go-utils/updater"
"github.com/jpillora/opts"
2021-11-10 13:38:54 +00:00
"github.com/medzikuser/go-pingbot/config"
"github.com/medzikuser/go-pingbot/database/mongo"
"github.com/medzikuser/go-pingbot/ping"
"github.com/medzikuser/go-pingbot/website"
2021-07-11 21:19:37 +00:00
)
var log = common.Log
type cmdOpts struct {
Update bool `opts:"help=update version to latest e.g. if update is major"`
NoUpdate bool `opts:"help=disable auto updater"`
}
2021-07-11 21:19:37 +00:00
func main() {
log.Info("You're using verion: ", config.Version)
var wg sync.WaitGroup
c := cmdOpts{}
opts.Parse(&c)
if c.Update {
client := updater.Client{
GitHub: config.GH_Repo,
GitHubToken: config.GH_Token,
Version: config.Version,
Binary: "pingbot.out",
CheckEvery: config.Toml.AutoUpdate.Check * time.Minute,
AfterUpdate: func() {
log.Info("Updated!")
if !config.Toml.Options.Stop_After_Ping {
os.Exit(0)
}
},
Major: false,
}
err := client.Update()
if err != nil && err.Error() == "major update" {
fmt.Print("Update to new major version? (y/N) ")
reader := bufio.NewReader((os.Stdin))
char, _, err := reader.ReadRune()
if err != nil {
2021-11-10 13:38:54 +00:00
log.Error(err)
}
switch char {
case 'y':
client.Major = true
2021-08-31 18:22:45 +00:00
err := client.Update()
if err != nil {
log.Error(err)
2021-11-10 13:38:54 +00:00
2021-08-31 18:22:45 +00:00
os.Exit(1)
}
case 'Y':
client.Major = true
2021-08-31 18:22:45 +00:00
err := client.Update()
if err != nil {
log.Error(err)
2021-11-10 13:38:54 +00:00
2021-08-31 18:22:45 +00:00
os.Exit(1)
}
default:
log.Warn("Canceled!")
2021-11-10 13:38:54 +00:00
os.Exit(2)
}
} else if err != nil {
log.Error(err)
2021-11-10 13:38:54 +00:00
os.Exit(1)
} else {
log.Info("You're using latest version!")
2021-11-10 13:38:54 +00:00
os.Exit(0)
}
}
2021-09-02 20:44:51 +00:00
2021-09-05 10:50:41 +00:00
err := mongo.Connect()
if err != nil {
log.Error(err)
os.Exit(1)
}
if config.Toml.AutoUpdate.Enabled && !c.NoUpdate {
if config.Version == "dev" {
log.Warn("You using dev version. Auto Update DISABLED!")
} else {
wg.Add(1)
client := updater.Client{
GitHub: config.GH_Repo,
GitHubToken: config.GH_Token,
Version: config.Version,
Binary: "pingbot.out",
CheckEvery: config.Toml.AutoUpdate.Check * time.Minute,
AfterUpdate: func() {
log.Info("Updated!")
if !config.Toml.Options.Stop_After_Ping {
os.Exit(0)
}
},
Major: false,
}
2021-08-14 21:43:30 +00:00
go client.AutoUpdater()
2021-08-14 21:43:30 +00:00
}
2021-07-29 18:51:15 +00:00
} else {
log.Warn("Auto Update -> Disabled")
}
2021-07-11 21:19:37 +00:00
2021-08-29 10:14:35 +00:00
if config.Toml.Options.Stop_After_Ping {
2021-09-08 20:18:35 +00:00
ping.StopAfterPing()
2021-08-29 10:14:35 +00:00
os.Exit(0)
}
if config.Toml.HTTP.Enabled {
wg.Add(1)
2021-11-10 13:38:54 +00:00
2021-08-29 10:14:35 +00:00
go website.Server()
} else {
log.Warn("HTTP Server -> Disabled")
}
if config.Toml.Backend.Enabled {
wg.Add(1)
2021-11-10 13:38:54 +00:00
2021-09-08 20:18:35 +00:00
go ping.Ticker()
2021-08-29 10:14:35 +00:00
} else {
log.Warn("Backend -> Disabled")
}
config.StartTime = time.Now()
wg.Wait()
2021-07-11 21:19:37 +00:00
}