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

View File

@ -13,10 +13,17 @@ var DebianProject Project = Project{
NumOfCheckers: 1,
Checkers: []*ProjectChecker{
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
csc_url := config.MirrorBaseURL + data["debian"].CSC
upstream_url := data["debian"].Upstream
csc_url := config.MirrorBaseURL + data.CSC + data.File
upstream_url := data.Upstream + data.File
// make HTTP GET request to 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"
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 {
return false, GetError(err, "Debian", "parsing CSC date")
}
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 {
return false, GetError(err, "Debian", "parsing upstream date")
}
@ -57,7 +64,7 @@ var DebianProject Project = Project{
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
}

View File

@ -1,7 +1,6 @@
package checkers
import (
"errors"
"fmt"
"time"
@ -156,35 +155,44 @@ func LoadDefaultProjects() {
}
func GetDefaultChecker(name string, def bool, f func(*Project) (bool, error)) *ProjectChecker {
if def {
name = fmt.Sprintf("%s_default", name)
}
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
func AssertStrings(s ...string) error {
for i, str := range s {
if str == "" {
return fmt.Errorf("failed assert: string %d of %d is empty", i+1, len(s))
}
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) {
return f(proj)
// configure checker function
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

View File

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