Commit f64083c2 authored by luxq's avatar luxq

ajust code

parent 89640375
......@@ -17,6 +17,11 @@ func (g GatewayInfo) TimeStamp() int64 {
return g.Timestamp
}
func (g GatewayInfo) Message() json.RawMessage {
d, _ := json.Marshal(g)
return d
}
type gatewayQuery struct {
rdb *redis.Client
service common.ServiceType
......
......@@ -17,6 +17,11 @@ func (g BackendInfo) TimeStamp() int64 {
return g.Timestamp
}
func (g BackendInfo) Message() json.RawMessage {
d, _ := json.Marshal(g)
return d
}
type backendQuery struct {
rdb *redis.Client
service common.ServiceType
......
package query
import "encoding/json"
type ServiceQuery interface {
ModuleName() string
List() ([]string, error)
ServiceInfo(serviceid string) (string, error)
}
type TimeSortable interface {
type ServiceInfo interface {
TimeStamp() int64
Message() json.RawMessage
}
type TimeSortableSlice []TimeSortable
type ServiceInfoList []ServiceInfo
func (s TimeSortableSlice) Len() int {
func (s ServiceInfoList) Len() int {
return len(s)
}
func (s TimeSortableSlice) Swap(i, j int) {
func (s ServiceInfoList) Swap(i, j int) {
s[i], s[j] = s[j], s[i]
}
func (s TimeSortableSlice) Less(i, j int) bool {
func (s ServiceInfoList) Less(i, j int) bool {
return s[i].TimeStamp() < s[j].TimeStamp()
}
......@@ -6,6 +6,7 @@ import (
"fmt"
"github.com/odysseus/service-registry/common"
"github.com/redis/go-redis/v9"
"sort"
)
type NodeManagerInfo struct {
......@@ -17,6 +18,11 @@ func (g NodeManagerInfo) TimeStamp() int64 {
return g.Timestamp
}
func (g NodeManagerInfo) Message() json.RawMessage {
d, _ := json.Marshal(g)
return d
}
type nodeManagerQuery struct {
rdb *redis.Client
service common.ServiceType
......@@ -34,54 +40,80 @@ func (g nodeManagerQuery) ModuleName() string {
}
func (g nodeManagerQuery) List() ([]string, error) {
all, err := getAllNm(g.rdb, g.service)
all, err := getAll(g.rdb, g.service)
if err != nil {
return nil, err
}
sort.Sort(ServiceInfoList(all))
var res []string
for _, v := range all {
d, _ := json.Marshal(v)
res = append(res, string(d))
res = append(res, string(v.Message()))
}
return res, nil
}
func (g nodeManagerQuery) ServiceInfo(serviceid string) (string, error) {
info, err := getOneNm(g.rdb, g.service, serviceid)
if err != nil {
return "", err
}
d, err := json.Marshal(info)
info, err := getOne(g.rdb, g.service, serviceid)
if err != nil {
return "", err
}
return string(info.Message()), nil
}
return string(d), nil
func parseInfo(stype common.ServiceType, res *redis.MapStringStringCmd) ServiceInfo {
var ret ServiceInfo
switch stype {
case common.SERVICE_NODE_MANAGER:
var info NodeManagerInfo
if err := res.Scan(&info); err != nil {
return nil
}
ret = info
case common.SERVICE_API_GATEWAY:
var info GatewayInfo
if err := res.Scan(&info); err != nil {
return nil
}
ret = info
case common.SERVICE_BACKEND:
var info BackendInfo
if err := res.Scan(&info); err != nil {
return nil
}
ret = info
case common.SERVICE_SCHEDULER:
var info SchedulerInfo
if err := res.Scan(&info); err != nil {
return nil
}
ret = info
case common.SERVICE_WORKER:
var info WorkerInfo
if err := res.Scan(&info); err != nil {
return nil
}
ret = info
}
return ret
}
func getAllNm(rdb *redis.Client, serviceType common.ServiceType) ([]NodeManagerInfo, error) {
func getAll(rdb *redis.Client, serviceType common.ServiceType) (ServiceInfoList, error) {
keys, err := rdb.Keys(context.Background(), common.GetServiceKeyPrefix(serviceType)+"*").Result()
if err != nil {
return nil, err
}
var nmInfos []NodeManagerInfo
var list []ServiceInfo
for _, key := range keys {
res := rdb.HGetAll(context.Background(), key)
var info NodeManagerInfo
if err := res.Scan(&info); err != nil {
continue
if info := parseInfo(serviceType, res); info != nil {
list = append(list, info)
}
nmInfos = append(nmInfos, info)
}
return nmInfos, nil
return list, nil
}
func getOneNm(rdb *redis.Client, serviceType common.ServiceType, endpoint string) (NodeManagerInfo, error) {
func getOne(rdb *redis.Client, serviceType common.ServiceType, endpoint string) (ServiceInfo, error) {
k := fmt.Sprintf("%s%s", common.GetServiceKeyPrefix(serviceType), endpoint)
res := rdb.HGetAll(context.Background(), k)
var info NodeManagerInfo
if err := res.Scan(&info); err != nil {
return NodeManagerInfo{}, err
}
return info, nil
return parseInfo(serviceType, res), nil
}
......@@ -17,6 +17,11 @@ func (g SchedulerInfo) TimeStamp() int64 {
return g.Timestamp
}
func (g SchedulerInfo) Message() json.RawMessage {
d, _ := json.Marshal(g)
return d
}
type schedulerQuery struct {
rdb *redis.Client
service common.ServiceType
......
package query
import (
"context"
"encoding/json"
"fmt"
"github.com/odysseus/service-registry/common"
"github.com/redis/go-redis/v9"
)
type WorkerInfo struct {
Timestamp int64 `json:"timestamp"`
HearBeat int64 `json:"heartbeat"`
ActiveNM []string `json:"active_nm"`
MinerAddress string `json:"miner_address"`
BenefitAddress string `json:"benefit_address"`
......@@ -18,6 +22,11 @@ func (g WorkerInfo) TimeStamp() int64 {
return g.Timestamp
}
func (g WorkerInfo) Message() json.RawMessage {
d, _ := json.Marshal(g)
return d
}
type workerQuery struct {
rdb *redis.Client
service common.ServiceType
......@@ -35,9 +44,54 @@ func (g workerQuery) ModuleName() string {
}
func (g workerQuery) List() ([]string, error) {
return []string{}, nil
all, err := getAllWorker(g.rdb, g.service)
if err != nil {
return nil, err
}
var res []string
for _, v := range all {
d, _ := json.Marshal(v)
res = append(res, string(d))
}
return res, nil
}
func (g workerQuery) ServiceInfo(serviceid string) (string, error) {
return "", nil
info, err := getOneWorker(g.rdb, g.service, serviceid)
if err != nil {
return "", err
}
d, err := json.Marshal(info)
if err != nil {
return "", err
}
return string(d), nil
}
func getAllWorker(rdb *redis.Client, serviceType common.ServiceType) ([]WorkerInfo, error) {
keys, err := rdb.Keys(context.Background(), common.GetServiceKeyPrefix(serviceType)+"*").Result()
if err != nil {
return nil, err
}
var nmInfos []WorkerInfo
for _, key := range keys {
res := rdb.HGetAll(context.Background(), key)
var info WorkerInfo
if err := res.Scan(&info); err != nil {
continue
}
nmInfos = append(nmInfos, info)
}
return nmInfos, nil
}
func getOneWorker(rdb *redis.Client, serviceType common.ServiceType, endpoint string) (WorkerInfo, error) {
k := fmt.Sprintf("%s%s", common.GetServiceKeyPrefix(serviceType), endpoint)
res := rdb.HGetAll(context.Background(), k)
var info WorkerInfo
if err := res.Scan(&info); err != nil {
return WorkerInfo{}, err
}
return info, nil
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment