Compare commits
3 Commits
v0.2.5
...
5c7ae6ab8a
| Author | SHA1 | Date | |
|---|---|---|---|
| 5c7ae6ab8a | |||
| 608f05d395 | |||
| b5420f9dbd |
90
config/config.go
Normal file
90
config/config.go
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
// Package config provides NTP Pool specific
|
||||||
|
// configuration tools.
|
||||||
|
package config
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/url"
|
||||||
|
"os"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"go.ntppool.org/common/logger"
|
||||||
|
)
|
||||||
|
|
||||||
|
//go:generate accessory -type Config
|
||||||
|
|
||||||
|
type Config struct {
|
||||||
|
deploymentMode string `accessor:"getter"`
|
||||||
|
|
||||||
|
manageHostname string `accessor:"getter"`
|
||||||
|
manageTLS bool
|
||||||
|
|
||||||
|
webHostname string `accessor:"getter"`
|
||||||
|
webHostnames []string
|
||||||
|
webTLS bool
|
||||||
|
|
||||||
|
valid bool `accessor:"getter"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func New() *Config {
|
||||||
|
c := Config{}
|
||||||
|
c.deploymentMode = os.Getenv("deployment_mode")
|
||||||
|
c.manageHostname = os.Getenv("manage_hostname")
|
||||||
|
|
||||||
|
c.webHostnames = strings.Split(os.Getenv("web_hostname"), ",")
|
||||||
|
for i, h := range c.webHostnames {
|
||||||
|
c.webHostnames[i] = strings.TrimSpace(h)
|
||||||
|
}
|
||||||
|
if len(c.webHostnames) > 0 {
|
||||||
|
c.webHostname = c.webHostnames[0]
|
||||||
|
c.valid = true
|
||||||
|
}
|
||||||
|
|
||||||
|
c.manageTLS = parseBool(os.Getenv("manage_tls"))
|
||||||
|
c.webTLS = parseBool(os.Getenv("web_tls"))
|
||||||
|
|
||||||
|
return &c
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Config) WebURL(path string, query *url.Values) string {
|
||||||
|
return baseURL(c.webHostname, c.webTLS, path, query)
|
||||||
|
}
|
||||||
|
|
||||||
|
func baseURL(host string, tls bool, path string, query *url.Values) string {
|
||||||
|
uri := url.URL{}
|
||||||
|
uri.Host = host
|
||||||
|
if tls {
|
||||||
|
uri.Scheme = "https"
|
||||||
|
} else {
|
||||||
|
uri.Scheme = "http"
|
||||||
|
}
|
||||||
|
uri.Path = path
|
||||||
|
if query != nil {
|
||||||
|
uri.RawQuery = query.Encode()
|
||||||
|
}
|
||||||
|
|
||||||
|
return uri.String()
|
||||||
|
}
|
||||||
|
|
||||||
|
func parseBool(s string) bool {
|
||||||
|
switch strings.ToLower(s) {
|
||||||
|
case "yes":
|
||||||
|
return true
|
||||||
|
case "y":
|
||||||
|
return true
|
||||||
|
case "no":
|
||||||
|
return false
|
||||||
|
case "n":
|
||||||
|
return false
|
||||||
|
case "":
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
t, err := strconv.ParseBool(s)
|
||||||
|
if err != nil {
|
||||||
|
logger.Setup().Error("could not parse bool", "string", s, "err", err)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
return t
|
||||||
|
}
|
||||||
31
config/config_accessor.go
Normal file
31
config/config_accessor.go
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
// Code generated by accessory; DO NOT EDIT.
|
||||||
|
|
||||||
|
package config
|
||||||
|
|
||||||
|
func (c *Config) DeploymentMode() string {
|
||||||
|
if c == nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
return c.deploymentMode
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Config) ManageHostname() string {
|
||||||
|
if c == nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
return c.manageHostname
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Config) WebHostname() string {
|
||||||
|
if c == nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
return c.webHostname
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Config) Valid() bool {
|
||||||
|
if c == nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return c.valid
|
||||||
|
}
|
||||||
26
config/config_test.go
Normal file
26
config/config_test.go
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
package config
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/url"
|
||||||
|
"os"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestBaseURL(t *testing.T) {
|
||||||
|
|
||||||
|
os.Setenv("web_hostname", "www.ntp.dev, web.ntppool.dev")
|
||||||
|
os.Setenv("web_tls", "yes")
|
||||||
|
|
||||||
|
c := New()
|
||||||
|
if !c.Valid() {
|
||||||
|
t.Fatalf("config not valid")
|
||||||
|
}
|
||||||
|
|
||||||
|
q := url.Values{}
|
||||||
|
q.Set("foo", "bar")
|
||||||
|
u := c.WebURL("/foo", &q)
|
||||||
|
if u != "https://www.ntp.dev/foo?foo=bar" {
|
||||||
|
t.Fatalf("unexpected WebURL: %s", u)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -4,6 +4,15 @@ set -euo pipefail
|
|||||||
|
|
||||||
go install github.com/goreleaser/goreleaser@v1.22.1
|
go install github.com/goreleaser/goreleaser@v1.22.1
|
||||||
|
|
||||||
|
if [ ! -z "$harbor_username"]; then
|
||||||
|
DOCKER_FILE=~/.docker/config.json
|
||||||
|
if [ ! -e $DOCKER_FILE ]; then
|
||||||
|
mkdir -p ~/.docker/
|
||||||
|
export harbor_auth=`cat /dev/null | jq -s -r '[ env.harbor_username, env.harbor_password ] | join(":") | @base64'`
|
||||||
|
echo '{"auths":{"harbor.ntppool.org":{"auth":""}}}' | jq '.auths["harbor.ntppool.org"].auth=env.harbor_auth' > $DOCKER_FILE
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
DRONE_TAG=${DRONE_TAG-""}
|
DRONE_TAG=${DRONE_TAG-""}
|
||||||
|
|
||||||
is_snapshot=""
|
is_snapshot=""
|
||||||
|
|||||||
52
types/log_scores.go
Normal file
52
types/log_scores.go
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
package types
|
||||||
|
|
||||||
|
import (
|
||||||
|
"database/sql/driver"
|
||||||
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
|
)
|
||||||
|
|
||||||
|
type LogScoreAttributes struct {
|
||||||
|
Leap int8 `json:"leap,omitempty"`
|
||||||
|
Stratum int8 `json:"stratum,omitempty"`
|
||||||
|
NoResponse bool `json:"no_response,omitempty"`
|
||||||
|
Error string `json:"error,omitempty"`
|
||||||
|
Warning string `json:"warning,omitempty"`
|
||||||
|
|
||||||
|
FromLSID int `json:"from_ls_id,omitempty"`
|
||||||
|
FromSSID int `json:"from_ss_id,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (lsa *LogScoreAttributes) String() string {
|
||||||
|
b, err := json.Marshal(lsa)
|
||||||
|
if err != nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
return string(b)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (lsa *LogScoreAttributes) Value() (driver.Value, error) {
|
||||||
|
return json.Marshal(lsa)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (lsa *LogScoreAttributes) Scan(value interface{}) error {
|
||||||
|
var source []byte
|
||||||
|
_t := LogScoreAttributes{}
|
||||||
|
|
||||||
|
switch v := value.(type) {
|
||||||
|
case []uint8:
|
||||||
|
source = v
|
||||||
|
case string:
|
||||||
|
source = []byte(v)
|
||||||
|
case nil:
|
||||||
|
return nil
|
||||||
|
default:
|
||||||
|
return errors.New("incompatible type for StringInterfaceMap")
|
||||||
|
}
|
||||||
|
err := json.Unmarshal(source, &_t)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
*lsa = _t
|
||||||
|
return nil
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user