Compare commits

...

3 Commits

Author SHA1 Message Date
26ad05fd9e checker: Precise DS error msg
All checks were successful
continuous-integration/drone/push Build is passing
2022-03-10 19:48:45 +01:00
55b1af83f0 checker: Add offline mode which assumes student default parameters 2022-03-10 19:40:02 +01:00
8632db8e99 checker: Report ping errors 2022-03-10 19:39:30 +01:00
3 changed files with 36 additions and 14 deletions

View File

@ -46,7 +46,7 @@ func check_ping(ip string, cb func(pkt *ping.Packet)) (err error) {
pinger.Count = 1 pinger.Count = 1
pinger.OnRecv = cb pinger.OnRecv = cb
pinger.SetPrivileged(true) pinger.SetPrivileged(true)
pinger.Run() err = pinger.Run()
return return
} }
@ -336,7 +336,7 @@ func check_dnssec(domain, ip string) (err error) {
if !found { if !found {
if err == nil { if err == nil {
return fmt.Errorf("Unable to find a valid DS record in parent zone.") return fmt.Errorf("Unable to find a valid DS record in parent zone (if you use your own domain (ie. not given by maatma), this can be due to a previously cached response, you should wait).")
} else { } else {
return err return err
} }
@ -560,13 +560,23 @@ func minTunnelVersion(std *adlin.Student, suffixip int) (int, error) {
return minversion, nil return minversion, nil
} }
func studentChecker(std *adlin.Student, also_check_matrix bool) { func studentChecker(std *adlin.Student, also_check_matrix bool, offline bool) {
tuns, err := std.GetActivesTunnels() tuns, err := std.GetActivesTunnels()
if err != nil { if err != nil {
if verbose2 { if offline {
log.Printf("SKip %s due to error when getting active tunnels: %s", std.Login, err.Error()) tuns, err = std.GetDefaultTunnels()
if err != nil {
if verbose {
log.Printf("SKip %s as I'm unable to generate default tunnels: %s", std.Login, err.Error())
}
return
}
} else {
if verbose2 {
log.Printf("SKip %s due to error when getting active tunnels: %s", std.Login, err.Error())
}
return
} }
return
} }
if verbose2 && len(tuns) == 0 { if verbose2 && len(tuns) == 0 {
log.Printf("%s has no active tunnels: %s", std.Login, err.Error()) log.Printf("%s has no active tunnels: %s", std.Login, err.Error())
@ -578,14 +588,14 @@ func studentChecker(std *adlin.Student, also_check_matrix bool) {
log.Printf("Tests %s on %s...", std.Login, stdIP) log.Printf("Tests %s on %s...", std.Login, stdIP)
} }
// Check ping // Check ping
check_ping(stdIP, func(pkt *ping.Packet) { err = check_ping(stdIP, func(pkt *ping.Packet) {
tunnel_version, err := minTunnelVersion(std, tun.SuffixIP) tunnel_version, err := minTunnelVersion(std, tun.SuffixIP)
if verbose { if verbose {
log.Printf("%s PONG (on %x); version=%d (%v)\n", std.Login, tun.SuffixIP, tunnel_version, err) log.Printf("%s PONG (on %x); version=%d (%v)\n", std.Login, tun.SuffixIP, tunnel_version, err)
} }
std.OnPong(true) std.OnPong(true)
if tunnel_version == 2147483647 || tunnel_version == 0 { if !offline && (tunnel_version == 2147483647 || tunnel_version == 0) {
log.Printf("%s unknown tunnel version: %d skipping tests (%v)", std.Login, tunnel_version, err) log.Printf("%s unknown tunnel version: %d skipping tests (%v)", std.Login, tunnel_version, err)
return return
} }
@ -803,11 +813,13 @@ func studentChecker(std *adlin.Student, also_check_matrix bool) {
return return
}) })
if err != nil && verbose {
log.Printf("%s: Unable to perform ping to %s: %s", std.Login, stdIP, err.Error())
}
} }
} }
func studentsChecker() { func studentsChecker(offline bool) {
students, err := adlin.GetStudents() students, err := adlin.GetStudents()
if err != nil { if err != nil {
log.Println("Unable to check students:", err) log.Println("Unable to check students:", err)
@ -819,6 +831,6 @@ func studentsChecker() {
for istd, s := range students { for istd, s := range students {
time.Sleep(250 * time.Millisecond) time.Sleep(250 * time.Millisecond)
go studentChecker(s, istd%10 == check_matrix_for) go studentChecker(s, istd%10 == check_matrix_for, offline)
} }
} }

View File

@ -12,9 +12,12 @@ import (
) )
func main() { func main() {
offline := false
var dsn = flag.String("dsn", adlin.DSNGenerator(), "DSN to connect to the MySQL server") var dsn = flag.String("dsn", adlin.DSNGenerator(), "DSN to connect to the MySQL server")
flag.BoolVar(&verbose, "verbose", verbose, "Enable verbose mode") flag.BoolVar(&verbose, "verbose", verbose, "Enable verbose mode")
flag.BoolVar(&verbose2, "verbose2", verbose2, "Enable more verbose mode") 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() flag.Parse()
if verbose2 && !verbose { if verbose2 && !verbose {
@ -44,7 +47,7 @@ func main() {
log.Printf("%s: %s", std_login, err.Error()) log.Printf("%s: %s", std_login, err.Error())
} else { } else {
log.Printf("Checking %s...", std.Login) log.Printf("Checking %s...", std.Login)
studentChecker(std, true) studentChecker(std, true, offline)
} }
} }
@ -59,14 +62,14 @@ func main() {
defer ticker.Stop() defer ticker.Stop()
// Launch checker // Launch checker
studentsChecker() studentsChecker(offline)
loop: loop:
for { for {
select { select {
case <-interrupt: case <-interrupt:
break loop break loop
case <-ticker.C: case <-ticker.C:
studentsChecker() studentsChecker(offline)
} }
} }
} }

View File

@ -225,6 +225,13 @@ func (student *Student) GetActivesTunnels() (ts []*TunnelToken, err error) {
} }
} }
func (student *Student) GetDefaultTunnels() (ts []*TunnelToken, err error) {
t := &TunnelToken{IdStudent: student.Id}
ts = append(ts, t)
return
}
func (student *Student) GetActivesTunnelsPubKey() (ts []ed25519.PublicKey, err error) { func (student *Student) GetActivesTunnelsPubKey() (ts []ed25519.PublicKey, err error) {
var activeTuns []*TunnelToken var activeTuns []*TunnelToken
activeTuns, err = student.GetActivesTunnels() activeTuns, err = student.GetActivesTunnels()