package prometheus import ( "fmt" "net/http" "sync" "github.com/prometheus/client_golang/prometheus/promhttp" "github.com/zeromicro/go-zero/core/logx" "github.com/zeromicro/go-zero/core/syncx" "github.com/zeromicro/go-zero/core/threading" ) var ( once sync.Once enabled syncx.AtomicBool ) // Enabled returns if prometheus is enabled. func Enabled() bool { return enabled.True() } // Enable enables prometheus. func Enable() { enabled.Set(true) } // StartAgent starts a prometheus agent. func StartAgent(c Config) { if len(c.Host) == 0 { return } once.Do(func() { enabled.Set(true) threading.GoSafe(func() { http.Handle(c.Path, promhttp.Handler()) addr := fmt.Sprintf("%s:%d", c.Host, c.Port) logx.Infof("Starting prometheus agent at %s", addr) if err := http.ListenAndServe(addr, nil); err != nil { logx.Error(err) } }) }) }