This repository has been archived on 2024-03-03. You can view files and clone it, but cannot push or open issues or pull requests.
adlin/checker/main.go

76 lines
1.6 KiB
Go
Raw Normal View History

package main
import (
"flag"
"log"
"os"
"os/signal"
"syscall"
"time"
2021-10-31 15:43:43 +00:00
"git.nemunai.re/srs/adlin/libadlin"
)
func main() {
offline := false
var dsn = flag.String("dsn", adlin.DSNGenerator(), "DSN to connect to the MySQL server")
2020-04-02 14:06:47 +00:00
flag.BoolVar(&verbose, "verbose", verbose, "Enable verbose mode")
2021-10-31 16:42:07 +00:00
flag.BoolVar(&verbose2, "verbose2", verbose2, "Enable more verbose mode")
flag.BoolVar(&offline, "offline", offline, "Enable offline mode (doesn't check what wg report)")
flag.Parse()
2021-10-31 16:42:07 +00:00
if verbose2 && !verbose {
verbose = verbose2
}
// Initialize contents
log.Println("Opening database...")
if err := adlin.DBInit(*dsn); err != nil {
log.Fatal("Cannot open the database: ", err)
}
defer adlin.DBClose()
log.Println("Creating database...")
if err := adlin.DBCreate(); err != nil {
log.Fatal("Cannot create database: ", err)
}
if len(flag.Args()) >= 1 {
// Check one or more students and exit
for _, std_login := range flag.Args() {
if verbose {
2021-10-31 19:11:58 +00:00
log.Printf("==============================\n\n")
}
if std, err := adlin.GetStudentByLogin(std_login); err != nil {
log.Printf("%s: %s", std_login, err.Error())
} else {
log.Printf("Checking %s...", std.Login)
studentChecker(std, true, offline)
}
}
return
}
// Prepare graceful shutdown
interrupt := make(chan os.Signal, 1)
signal.Notify(interrupt, os.Interrupt, syscall.SIGTERM)
ticker := time.NewTicker(30 * time.Second)
defer ticker.Stop()
// Launch checker
studentsChecker(offline)
2020-04-25 21:51:16 +00:00
loop:
for {
select {
case <-interrupt:
2020-04-25 21:51:16 +00:00
break loop
case <-ticker.C:
studentsChecker(offline)
}
}
}