|
|
@ -1,6 +1,13 @@
|
|
|
|
package prommetrics
|
|
|
|
package prommetrics
|
|
|
|
|
|
|
|
|
|
|
|
import "fmt"
|
|
|
|
import (
|
|
|
|
|
|
|
|
"context"
|
|
|
|
|
|
|
|
"fmt"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
"github.com/openimsdk/tools/errs"
|
|
|
|
|
|
|
|
"github.com/openimsdk/tools/utils/jsonutil"
|
|
|
|
|
|
|
|
clientv3 "go.etcd.io/etcd/client/v3"
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
const (
|
|
|
|
const (
|
|
|
|
APIKeyName = "api"
|
|
|
|
APIKeyName = "api"
|
|
|
@ -17,8 +24,12 @@ type RespTarget struct {
|
|
|
|
Labels map[string]string `json:"labels"`
|
|
|
|
Labels map[string]string `json:"labels"`
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func BuildDiscoveryKey(name string) string {
|
|
|
|
func BuildDiscoveryKeyPrefix(name string) string {
|
|
|
|
return fmt.Sprintf("%s/%s/%s", "openim", "prometheus_discovery", name)
|
|
|
|
return fmt.Sprintf("%s/%s/%s/", "openim", "prometheus_discovery", name)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func BuildDiscoveryKey(name string, host string, port int) string {
|
|
|
|
|
|
|
|
return fmt.Sprintf("%s/%s/%s/%s:%d", "openim", "prometheus_discovery", name, host, port)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func BuildDefaultTarget(host string, ip int) Target {
|
|
|
|
func BuildDefaultTarget(host string, ip int) Target {
|
|
|
@ -29,3 +40,30 @@ func BuildDefaultTarget(host string, ip int) Target {
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func Register(ctx context.Context, etcdClient *clientv3.Client, rpcRegisterName string, registerIP string, prometheusPort int) error {
|
|
|
|
|
|
|
|
// create lease
|
|
|
|
|
|
|
|
leaseResp, err := etcdClient.Grant(ctx, 30)
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
|
|
return errs.WrapMsg(err, "failed to create lease in etcd")
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
// release
|
|
|
|
|
|
|
|
keepAliveChan, err := etcdClient.KeepAlive(ctx, leaseResp.ID)
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
|
|
return errs.WrapMsg(err, "failed to keep alive lease")
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
// release resp
|
|
|
|
|
|
|
|
go func() {
|
|
|
|
|
|
|
|
for range keepAliveChan {
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}()
|
|
|
|
|
|
|
|
putOpts := []clientv3.OpOption{}
|
|
|
|
|
|
|
|
if leaseResp != nil {
|
|
|
|
|
|
|
|
putOpts = append(putOpts, clientv3.WithLease(leaseResp.ID))
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
_, err = etcdClient.Put(ctx, BuildDiscoveryKey(rpcRegisterName, registerIP, prometheusPort), jsonutil.StructToJsonString(BuildDefaultTarget(registerIP, prometheusPort)), putOpts...)
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
|
|
return errs.WrapMsg(err, "etcd put err")
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
|
|
|
|
}
|
|
|
|