fix checker arch

Signed-off-by: Nathan13888 <29968201+Nathan13888@users.noreply.github.com>
This commit is contained in:
Nathan Chung 2023-10-28 01:45:12 -04:00
parent 7ec8740f1a
commit 2a114f89d3
Signed by: n4chung
SSH Key Fingerprint: SHA256:/+NqYA5MfQIjjfwa4z16mw3Y+lxgY/Ml8wCeGnh6qBU
4 changed files with 65 additions and 40 deletions

View File

@ -2,7 +2,7 @@ package checkers
import ( import (
"encoding/json" "encoding/json"
"io/ioutil" "os"
"github.com/Nathan13888/mirror-checker2/v2/config" "github.com/Nathan13888/mirror-checker2/v2/config"
"github.com/rs/zerolog/log" "github.com/rs/zerolog/log"
@ -10,14 +10,13 @@ import (
type MirrorData map[string]ProjectProperties type MirrorData map[string]ProjectProperties
var data MirrorData
func LoadFromFile(path string) error { func LoadFromFile(path string) error {
raw_data, err := ioutil.ReadFile(path) raw_data, err := os.ReadFile(path)
if err != nil { if err != nil {
return err return err
} }
var data MirrorData
err = json.Unmarshal(raw_data, &data) err = json.Unmarshal(raw_data, &data)
if err != nil { if err != nil {
return err return err

View File

@ -13,10 +13,17 @@ var DebianProject Project = Project{
NumOfCheckers: 1, NumOfCheckers: 1,
Checkers: []*ProjectChecker{ Checkers: []*ProjectChecker{
GetDefaultChecker("debian", true, func(*Project) (bool, error) { GetDefaultChecker("debian", true, func(*Project) (bool, error) {
// config sanity check
data := EnabledProjects["debian"].Properties
err := AssertStrings(config.MirrorBaseURL, data.Upstream, data.File)
if err != nil {
return false, GetError(err, "Debian", "config sanity check")
}
// Modelled after: https://git.csclub.uwaterloo.ca/public/mirror-checker/src/branch/master/projects/debian.py // Modelled after: https://git.csclub.uwaterloo.ca/public/mirror-checker/src/branch/master/projects/debian.py
csc_url := config.MirrorBaseURL + data["debian"].CSC csc_url := config.MirrorBaseURL + data.CSC + data.File
upstream_url := data["debian"].Upstream upstream_url := data.Upstream + data.File
// make HTTP GET request to csc_url // make HTTP GET request to csc_url
csc_body, err := httpGET(csc_url) csc_body, err := httpGET(csc_url)
@ -43,13 +50,13 @@ var DebianProject Project = Project{
// equiv to: "%a %b %d %H:%M:%S UTC %Y" // equiv to: "%a %b %d %H:%M:%S UTC %Y"
date_format := "Mon Jan 2 15:04:05 MST 2006" date_format := "Mon Jan 2 15:04:05 MST 2006"
CSC_date, err := time.Parse(strings.Split(CSC, "\n")[0], date_format) CSC_date, err := time.Parse(date_format, strings.Split(CSC, "\n")[0])
if err != nil { if err != nil {
return false, GetError(err, "Debian", "parsing CSC date") return false, GetError(err, "Debian", "parsing CSC date")
} }
CSC_utc_time := CSC_date.Unix() CSC_utc_time := CSC_date.Unix()
upstream_date, err := time.Parse(strings.Split(upstream, "\n")[0], date_format) upstream_date, err := time.Parse(date_format, strings.Split(upstream, "\n")[0])
if err != nil { if err != nil {
return false, GetError(err, "Debian", "parsing upstream date") return false, GetError(err, "Debian", "parsing upstream date")
} }
@ -57,7 +64,7 @@ var DebianProject Project = Project{
delta := (upstream_utc_time - CSC_utc_time) delta := (upstream_utc_time - CSC_utc_time)
if delta < data["debian"].OOSInterval && delta > -data["debian"].OOSInterval { if delta < data.OOSInterval && delta > -data.OOSInterval {
return true, nil return true, nil
} }

View File

@ -1,7 +1,6 @@
package checkers package checkers
import ( import (
"errors"
"fmt" "fmt"
"time" "time"
@ -156,35 +155,44 @@ func LoadDefaultProjects() {
} }
func GetDefaultChecker(name string, def bool, f func(*Project) (bool, error)) *ProjectChecker { func AssertStrings(s ...string) error {
if def { for i, str := range s {
name = fmt.Sprintf("%s_default", name) if str == "" {
} return fmt.Errorf("failed assert: string %d of %d is empty", i+1, len(s))
checker := ProjectChecker{
Name: name,
CheckProject: func() (bool, error) {
return false, errors.New("Project not supported.")
},
Default: def,
}
proj, err := GetProject(name)
if err != nil {
log.Error().Err(err).Msg("Failed to get project")
return &checker
}
if f == nil {
e := errors.New("Checker function is nil.")
log.Error().Err(e).Msg("Missing custom checker function.")
checker.CheckProject = func() (bool, error) {
return false, e
} }
return &checker }
return nil
}
// TODO: add checker logger
func GetDefaultChecker(name string, def bool, f func(*Project) (bool, error)) *ProjectChecker {
checkerName := name
if def {
checkerName += "_default"
} }
checker.CheckProject = func() (bool, error) { // configure checker function
return f(proj) var checkerFunc func() (bool, error)
if f != nil {
// has custom checker function
checkerFunc = func() (bool, error) {
proj, err := GetProject(name)
if err != nil {
return false, err
}
return f(proj)
}
} else {
// no custom checker function
checkerFunc = func() (bool, error) {
return false, fmt.Errorf("project '%s' not supported", name)
}
}
checker := ProjectChecker{
Name: checkerName,
CheckProject: checkerFunc,
Default: def,
} }
return &checker return &checker

View File

@ -5,29 +5,40 @@ import (
"fmt" "fmt"
"io" "io"
"net/http" "net/http"
"time"
"github.com/rs/zerolog/log"
) )
// http helpers // http helpers
func httpGET(url string) ([]byte, error) { func httpGET(url string) ([]byte, error) {
res, err := http.Get("http://example.com") res, err := http.Get(url)
startTime := time.Now()
if err != nil { if err != nil {
fmt.Println(err) log.Error().Msgf("Error making GET request: %s", err.Error())
return nil, err return nil, err
} }
defer res.Body.Close() defer res.Body.Close()
body, err := io.ReadAll(res.Body) body, err := io.ReadAll(res.Body)
if err != nil { if err != nil {
fmt.Println(err) log.Error().Msgf("Error reading response body: %s", err.Error())
return nil, err return nil, err
} }
log.Debug().
Dur("time", time.Since(startTime)).
Str("status", res.Status).
Msgf("GET %s", url)
return body, nil return body, nil
} }
// error parser // error parser
func GetError(err error, project string, msg string) error { func GetError(err error, project string, msg string) error {
if err != nil { if err == nil {
return errors.New("<---") return errors.New("<---")
} }