healthcheck.go 770 Bytes
package admin

import (
	"fmt"
	"net/http"
)

//type DatabaseCheck struct {
//}

//func (dc *DatabaseCheck) Check() error {
//	if dc.isConnected() {
//		return nil
//	} else {
//		return errors.New("can't connect database")
//	}
//}

//AddHealthCheck("database",&DatabaseCheck{})

var AdminCheckList map[string]HealthChecker

type HealthChecker interface {
	Check() error
}

func AddHealthCheck(name string, hc HealthChecker) {
	AdminCheckList[name] = hc
}

func Healthcheck(rw http.ResponseWriter, req *http.Request) {
	for name, h := range AdminCheckList {
		if err := h.Check(); err != nil {
			fmt.Fprintf(rw, "%s : ok\n", name)
		} else {
			fmt.Fprintf(rw, "%s : %s\n", name, err.Error())
		}
	}
}

func init() {
	AdminCheckList = make(map[string]HealthChecker)
}