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 (
|
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
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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("<---")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue