fix checker arch
Signed-off-by: Nathan13888 <29968201+Nathan13888@users.noreply.github.com>
This commit is contained in:
parent
7ec8740f1a
commit
2a114f89d3
|
@ -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
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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("<---")
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue