// cluster, or the default/only configured cluster if clusterID is "".
func (sc *Config) GetCluster(clusterID string) (*Cluster, error) {
if clusterID == "" {
- if len(sc.Clusters) != 1 {
+ if len(sc.Clusters) == 0 {
+ return nil, fmt.Errorf("no clusters configured")
+ } else if len(sc.Clusters) > 1 {
return nil, fmt.Errorf("multiple clusters configured, cannot choose")
} else {
for id, cc := range sc.Clusters {
}
type SystemNode struct {
+ Health Health
Keepstore Keepstore
}
+type Health struct {
+ Listen string
+}
+
type Keepstore struct {
Listen string
}
agg.setupOnce.Do(agg.setup)
sendErr := func(statusCode int, err error) {
resp.WriteHeader(statusCode)
- json.NewEncoder(resp).Encode(map[string]interface{}{"error": err})
+ json.NewEncoder(resp).Encode(map[string]string{"error": err.Error()})
if agg.Log != nil {
agg.Log(req, err)
}
wg.Add(1)
go func(node string) {
defer wg.Done()
- pingResp := agg.ping(node, addr)
+ pingResp := agg.ping(node, addr, cluster)
mtx.Lock()
defer mtx.Unlock()
return resp
}
-func (agg *Aggregator) ping(node, addr string) (result CheckResponse) {
+func (agg *Aggregator) ping(node, addr string, cluster *arvados.Cluster) (result CheckResponse) {
t0 := time.Now()
var err error
if err != nil {
return
}
+ req.Header.Set("Authorization", "Bearer "+cluster.ManagementToken)
ctx, cancel := context.WithCancel(req.Context())
go func() {
result.Status = resp.StatusCode
err = json.NewDecoder(resp.Body).Decode(&result)
if err != nil {
+ err = fmt.Errorf("cannot decode response: %s", err)
return
}
if resp.StatusCode != http.StatusOK {
package main
import (
+ "net/http"
+
"git.curoverse.com/arvados.git/sdk/go/arvados"
"git.curoverse.com/arvados.git/sdk/go/health"
"git.curoverse.com/arvados.git/sdk/go/httpserver"
log.SetFormatter(&log.JSONFormatter{
TimestampFormat: "2006-01-02T15:04:05.000000000Z07:00",
})
- sysConf, err := arvados.GetSystemConfig()
+ cfg, err := arvados.GetConfig()
+ if err != nil {
+ log.Fatal(err)
+ }
+ clusterCfg, err := cfg.GetCluster("")
+ if err != nil {
+ log.Fatal(err)
+ }
+ nodeCfg, err := clusterCfg.GetThisSystemNode()
if err != nil {
log.Fatal(err)
}
srv := &httpserver.Server{
- Addr: ":", // FIXME: should be dictated by Health on this SystemNode
- Handler: &health.Aggregator{
- SystemConfig: sysConf,
+ Addr: nodeCfg.Health.Listen,
+ Server: http.Server{
+ Handler: &health.Aggregator{
+ Config: cfg,
+ },
},
}
- srv.HandleFunc()
if err := srv.Start(); err != nil {
log.Fatal(err)
}