From 636d764b2e4bdf0b920be64eba81088c039b0a11 Mon Sep 17 00:00:00 2001 From: zw <894646498@qq.com> Date: Thu, 24 Nov 2022 09:13:03 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=91=E5=B8=83=E5=88=B0=E6=BC=94=E7=A4=BA?= =?UTF-8?q?=E7=8E=AF=E5=A2=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/cluster.go | 24 ++++++++++++++++------ app/domain.go | 32 ++++++++++++++++++++++++++++++ app/nacos.go | 5 +++++ app/namespace.go | 11 ++++++++-- app/node.go | 43 +++++++++++++++++++++++++++++++++++----- app/overview.go | 24 +++++++++++++++++----- app/propagationPolicy.go | 2 +- app/router.go | 17 +++++++++++++++- app/utils.go | 38 +++++++++++++++++++++++++++++++++++ go.mod | 3 +++ go.sum | 7 +++++++ main.go | 1 + 12 files changed, 187 insertions(+), 20 deletions(-) diff --git a/app/cluster.go b/app/cluster.go index fa2ba61..281f675 100644 --- a/app/cluster.go +++ b/app/cluster.go @@ -9,7 +9,6 @@ import ( "gorm.io/gorm/clause" "gorm.io/gorm/schema" "jcc-schedule/model" - //"github.com/go-sql-driver/mysql" "github.com/golang/glog" "github.com/karmada-io/karmada/pkg/karmadactl" @@ -39,6 +38,8 @@ type Cluster struct { CreateTime time.Time `json:"create_time"` Description *string `json:"description"` NodeNum int32 `json:"node_num"` + Edge bool `json:"edge"` + Monitoring bool `json:"monitoring"` } type JoinRequest struct { @@ -124,7 +125,18 @@ func ListCluster(c *gin.Context) { } } rows.Close() - + // 查询是否有边缘节点 + edge := GetRedis(c, clusters.Items[i].Name) + if strings.EqualFold(edge, "edge") { + cluster.Edge = true + } + //查询是否有监控 + monitoring := GetMonitoringClusters() + for _, clusterName := range monitoring { + if strings.EqualFold(clusterName, clusters.Items[i].Name) { + cluster.Monitoring = true + } + } if len(clusterName) != 0 && !strings.Contains(cluster.ClusterName, clusterName) { continue } else { @@ -132,12 +144,12 @@ func ListCluster(c *gin.Context) { } } - total := len(clusterList) - page := &Page[Cluster]{} - page.List = clusterList pageNum := c.Query("pageNum") pageSize := c.Query("pageSize") - data := Paginator(page, int64(total), pageNum, pageSize) + // 分页 + page := &Page[Cluster]{} + page.List = clusterList + data := Paginator(page, int64(len(clusterList)), pageNum, pageSize) Response(c, http.StatusOK, "success", data) } diff --git a/app/domain.go b/app/domain.go index b206cdf..8a8184d 100644 --- a/app/domain.go +++ b/app/domain.go @@ -1,6 +1,7 @@ package app import ( + "fmt" "github.com/gin-gonic/gin" "github.com/karmada-io/karmada/pkg/util" "net/http" @@ -21,6 +22,12 @@ type Domain struct { LabelId []int32 `json:"labelId"` } +type DomainUsedRate struct { + Rate float64 `json:"rate"` + DomainName string `json:"domainName"` + ClusterCount float64 `json:"clusterCount"` +} + // CreateDomain 创建域 // @Summary 创建域 // @Description 创建域 @@ -287,3 +294,28 @@ func getDomainsByDeployment(namespaceName string, deploymentName string) (domain return domainList } + +func QueryDomainUsedRate(c *gin.Context) { + var domainUsedRates []DomainUsedRate + rows, err := DB.Query("SELECT d.domain_name,COUNT(dc.id) clusterCount from domain d inner join domain_cluster dc on dc.domain_id = d.domain_id group by d.domain_id ") + if err != nil { + Response(c, http.StatusInternalServerError, "update namespace failed", err) + return + } + var domainCount float64 + for rows.Next() { + var domainUsedRate DomainUsedRate + err := rows.Scan(&domainUsedRate.DomainName, &domainUsedRate.ClusterCount) + if err != nil { + return + } + domainUsedRates = append(domainUsedRates, domainUsedRate) + domainCount = domainCount + domainUsedRate.ClusterCount + } + rows.Close() + for index, _ := range domainUsedRates { + float, _ := strconv.ParseFloat(fmt.Sprintf("%.4f", domainUsedRates[index].ClusterCount/domainCount), 64) + domainUsedRates[index].Rate = float + } + Response(c, http.StatusOK, "success", domainUsedRates) +} diff --git a/app/nacos.go b/app/nacos.go index 8e72f48..0428bcf 100644 --- a/app/nacos.go +++ b/app/nacos.go @@ -25,6 +25,11 @@ type Config struct { MaxOpenConn int `yaml:"max-open-conn"` MaxIdleConn int `yaml:"max-idle-conn"` } + Redis struct { + Host string `yaml:"host"` + Password string `yaml:"password"` + DB int `yaml:"db"` + } Karmada struct { ConfigPath string `yaml:"config-path"` MemberConfigPath string `yaml:"member-config-path"` diff --git a/app/namespace.go b/app/namespace.go index 4d038d6..40dab68 100644 --- a/app/namespace.go +++ b/app/namespace.go @@ -150,18 +150,22 @@ func CreateNamespace(c *gin.Context) { return } _, createErr := ClientSet.CoreV1().Namespaces().Create(context.TODO(), ¶m.Namespace, metav1.CreateOptions{}) - if err != nil { + if createErr != nil { Response(c, http.StatusInternalServerError, "failed", createErr) return } // 创建调度策略实例 - CreatePropagationPolicies(PropagationPolicy{ + policyErr := CreatePropagationPolicies(PropagationPolicy{ ClusterName: param.ClusterName, TemplateId: param.TemplateId, ResourceName: param.Namespace.Name, Name: "namespace" + "." + param.Namespace.Name, Kind: "Namespace", }) + if policyErr != nil { + Response(c, http.StatusInternalServerError, "failed", createErr) + return + } } else { result := PostObject(namespaceConst, param.ClusterName[0], "", "", param.Namespace) if result.Error() != nil { @@ -403,6 +407,9 @@ func DescribeNamespace(c *gin.Context) { } domain.Clusters = append(domain.Clusters, clusterName) cluster, _, _ := util.GetClusterWithKarmadaClient(KarmadaClient, clusterName) + if cluster == nil { + continue + } allocatableCPU := cluster.Status.ResourceSummary.Allocatable.Cpu().MilliValue() allocatableMemory := cluster.Status.ResourceSummary.Allocatable.Memory().MilliValue() allocatedCPU := cluster.Status.ResourceSummary.Allocated.Cpu().MilliValue() diff --git a/app/node.go b/app/node.go index 4734411..9e0a098 100644 --- a/app/node.go +++ b/app/node.go @@ -5,6 +5,7 @@ import ( "encoding/json" "fmt" "github.com/gin-gonic/gin" + "github.com/robfig/cron/v3" v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" @@ -15,9 +16,10 @@ import ( "strconv" "strings" "sync" + "time" ) -type NodeRes struct { +type NodeObject struct { Kind string `json:"kind"` ApiVersion string `json:"apiVersion"` Metadata string `json:"metadata"` @@ -84,7 +86,7 @@ func NodeCount(c *gin.Context) { clusterName := c.Query("clusterName") result := SearchObject(nodeConst, clusterName, "", "") raw, _ := result.Raw() - var nodeRes NodeRes + var nodeRes NodeObject json.Unmarshal(raw, &nodeRes) var masterCount int var edgerCount int @@ -146,7 +148,7 @@ func ListNode(c *gin.Context) { status := c.Query("status") nodeResult := SearchObject(nodeConst, clusterName, "", "") raw, _ := nodeResult.Raw() - var nodeRes NodeRes + var nodeRes NodeObject json.Unmarshal(raw, &nodeRes) var result []v1.Node if strings.EqualFold(queryType, "edge") { @@ -296,7 +298,7 @@ func queryNodeInfo(c *gin.Context) { // 查询节点信息 nodeRes := SearchObject(nodeConst, clusterName, "", "") nodeRaw, _ := nodeRes.Raw() - var nodeList NodeRes + var nodeList NodeObject json.Unmarshal(nodeRaw, &nodeList) // 查询pod信息 podResult := SearchObject(podDetailConst, clusterName, namespace, podName) @@ -327,7 +329,7 @@ func ListEdgeNode(c *gin.Context) { clusterName := c.Query("clusterName") result := SearchObject(nodeConst, clusterName, "", "") raw, _ := result.Raw() - var nodeRes NodeRes + var nodeRes NodeObject json.Unmarshal(raw, &nodeRes) var res []v1.Node for _, node := range nodeRes.Items { @@ -457,3 +459,34 @@ func GetNodeMetrics8h(c *gin.Context) { Response(c, http.StatusOK, "success", mr) } + +func QueryNodeEdgeInfo() { + // 查询已有的集群列表 + var clusterNameList []string + rows, _ := DB.Query(`SELECT cluster_name FROM domain_cluster`) + for rows.Next() { + var clusterName string + err := rows.Scan(&clusterName) + if err != nil { + return + } + clusterNameList = append(clusterNameList, clusterName) + } + //创建定时任务 + c := cron.New() + EntryID, err := c.AddFunc("*/1 * * * *", func() { + for _, clusterName := range clusterNameList { + nodeRes := SearchObject(detailNodeConst, clusterName, "", "") + nodeRaw, _ := nodeRes.Raw() + var nodeObject NodeObject + json.Unmarshal(nodeRaw, &nodeObject) + for _, node := range nodeObject.Items { + if _, ok := node.Labels["node-role.kubernetes.io/edge"]; ok { + SetRedis(context.TODO(), clusterName, "edge", 120) + } + } + } + }) + fmt.Println(time.Now(), EntryID, err) + c.Start() +} diff --git a/app/overview.go b/app/overview.go index 21adeaa..2382ed6 100644 --- a/app/overview.go +++ b/app/overview.go @@ -11,7 +11,7 @@ import ( ) const ( - kubesphere_clusters = "group by (cluster_name) (node:load15:ratio)" + monitoring_clusters = "group by (cluster_name) (node:load15:ratio)" apiserver_request_rate = "apiserver:apiserver_request_total:sum_irate{cluster_name='clusterName', prometheus_replica='prometheus-k8s-0'}" apiserver_request_latencies = "apiserver:apiserver_request_duration:avg{cluster_name='clusterName', prometheus_replica='prometheus-k8s-0'}" @@ -61,6 +61,12 @@ type Overview struct { Pod int32 `json:"pod"` } +type Computility struct { + All int `json:"all"` + Top int `json:"top"` + Now int `json:"now"` +} + // @Summary 获取所有kubesphere定义的监控集群 // @Description 获取所有kubesphere定义的监控集群 // @Tags overview @@ -69,10 +75,10 @@ type Overview struct { // @Success 200 // @Failure 400 // @Router /api/v1/overview/getKubesphereClusters [get] -func GetKubesphereClusters(c *gin.Context) { +func GetMonitoringClusters() []string { metricMap := map[string][]MetricUrl{ - "kubesphere_clusters": {{"", "", GetMetricUrl(kubesphere_clusters, nil, "", metric_range_1s, steps_1s)}}, + "monitoring_clusters": {{"", "", GetMetricUrl(monitoring_clusters, nil, "", metric_range_1s, steps_1s)}}, } ch := make(chan MetricResult, len(metricMap)) @@ -101,7 +107,7 @@ func GetKubesphereClusters(c *gin.Context) { } } - Response(c, http.StatusOK, "success", clusters) + return clusters } // @Summary 获取容器集群调度器监控 @@ -316,7 +322,7 @@ func GetApiServerMetrics(c *gin.Context) { func ResourceCount(c *gin.Context) { overview := &Overview{} //纳管资源域、纳管集群总计、容器创建数量 资源域 - rows, _ := DB.Query("select count(*) domain from domain") + rows, _ := DB.Query("SELECT count( t.domain) from (select DISTINCT d.domain_id domain from domain d inner join domain_cluster dc on dc.domain_id = d.domain_id) t ") for rows.Next() { err := rows.Scan(&overview.Domain) if err != nil { @@ -415,3 +421,11 @@ func GetOverallMetrics(c *gin.Context) { Response(c, http.StatusOK, "success", mr) } + +func getComputility(c *gin.Context) { + Response(c, http.StatusOK, "success", Computility{ + All: 100, + Top: 79, + Now: 1, + }) +} diff --git a/app/propagationPolicy.go b/app/propagationPolicy.go index 4786c46..908be04 100644 --- a/app/propagationPolicy.go +++ b/app/propagationPolicy.go @@ -65,7 +65,7 @@ func CreatePropagationPolicies(propagationPolicy PropagationPolicy) error { rst.ReplicaSchedulingType = policyv1alpha1.ReplicaSchedulingTypeDivided rst.ReplicaDivisionPreference = policyv1alpha1.ReplicaDivisionPreferenceWeighted } - if strings.EqualFold(propagationPolicy.Kind, "PersistentVolume") { + if strings.EqualFold(propagationPolicy.Kind, "PersistentVolume") || strings.EqualFold(propagationPolicy.Kind, "Namespace") { policy := &policyv1alpha1.ClusterPropagationPolicy{ ObjectMeta: v1.ObjectMeta{ Name: propagationPolicy.Name, diff --git a/app/router.go b/app/router.go index ece89bd..0cb46af 100644 --- a/app/router.go +++ b/app/router.go @@ -1,9 +1,11 @@ package app import ( + "context" "crypto/tls" "database/sql" "github.com/gin-gonic/gin" + "github.com/go-redis/redis/v8" _ "github.com/go-sql-driver/mysql" karmadaclientset "github.com/karmada-io/karmada/pkg/generated/clientset/versioned" "github.com/karmada-io/karmada/pkg/karmadactl" @@ -27,10 +29,12 @@ var ControlPlaneRestConfig *rest.Config var ClientSet *kubeclient.Clientset var OpenSearchClient *opensearch.Client var CrDClient *clientset.Clientset +var MyRedis *redis.Client var ConfigNacos = GetNacosConfig() func InitRouter() *gin.Engine { + r := gin.New() r.Use(gin.Logger()) r.Use(gin.Recovery()) @@ -42,6 +46,14 @@ func InitRouter() *gin.Engine { DB.SetMaxOpenConns(int(ConfigNacos.Mysql.MaxOpenConn)) DB.SetMaxIdleConns(int(ConfigNacos.Mysql.MaxIdleConn)) + //redis连接 + MyRedis = redis.NewClient(&redis.Options{ + Addr: ConfigNacos.Redis.Host, + Password: ConfigNacos.Redis.Password, // no password set + DB: ConfigNacos.Redis.DB, // use default DB + }) + MyRedis.Ping(context.Background()).Result() + //Karmada Client dir, _ := os.Getwd() KarmadaConfig = karmadactl.NewKarmadaConfig(clientcmd.NewDefaultPathOptions()) @@ -60,6 +72,8 @@ func InitRouter() *gin.Engine { Password: ConfigNacos.OpenSearch.PassWord, }) + //创建定时任务 + //api分组 api := r.Group("/api") v1 := api.Group("/v1") @@ -99,6 +113,7 @@ func InitRouter() *gin.Engine { domain.GET("/describe", DescribeDomain) domain.GET("/list", ListDomain) domain.GET("/listByDeployment", ListByDeployment) + domain.GET("/usedRate", QueryDomainUsedRate) //Pod pod := v1.Group("pod") @@ -243,7 +258,7 @@ func InitRouter() *gin.Engine { overview.GET("/getClusterMetrics", GetClusterMetrics) overview.GET("/getScheduleMetrics", GetScheduleMetrics) overview.GET("/getOverallMetrics", GetOverallMetrics) - overview.GET("/getKubesphereClusters", GetKubesphereClusters) + overview.GET("/getComputility", getComputility) } return r diff --git a/app/utils.go b/app/utils.go index 4239008..04d23fe 100644 --- a/app/utils.go +++ b/app/utils.go @@ -1,9 +1,12 @@ package app import ( + "context" + "fmt" gossh "golang.org/x/crypto/ssh" "net" "strings" + "time" ) // Cli 连接信息 @@ -68,3 +71,38 @@ func LabelsConvertToMap(label string) map[string]string { } return labelMap } + +func SetRedis(ctx context.Context, key string, value string, t int64) bool { + expire := time.Duration(t) * time.Second + if err := MyRedis.Set(ctx, key, value, expire).Err(); err != nil { + return false + } + return true +} + +func GetRedis(ctx context.Context, key string) string { + result, err := MyRedis.Get(ctx, key).Result() + if err != nil { + return "" + } + return result +} + +func DelRedis(ctx context.Context, key string) bool { + _, err := MyRedis.Del(ctx, key).Result() + if err != nil { + fmt.Println(err) + return false + } + return true +} + +func ExpireRedis(ctx context.Context, key string, t int64) bool { + // 延长过期时间 + expire := time.Duration(t) * time.Second + if err := MyRedis.Expire(ctx, key, expire).Err(); err != nil { + fmt.Println(err) + return false + } + return true +} diff --git a/go.mod b/go.mod index 7963ee4..4547ef2 100644 --- a/go.mod +++ b/go.mod @@ -40,6 +40,7 @@ require ( github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5 // indirect github.com/davecgh/go-spew v1.1.1 // indirect + github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect github.com/emicklei/go-restful/v3 v3.8.0 // indirect github.com/evanphx/json-patch v4.12.0+incompatible // indirect github.com/evanphx/json-patch/v5 v5.6.0 // indirect @@ -57,6 +58,7 @@ require ( github.com/go-playground/locales v0.14.0 // indirect github.com/go-playground/universal-translator v0.18.0 // indirect github.com/go-playground/validator/v10 v10.10.0 // indirect + github.com/go-redis/redis/v8 v8.11.5 // indirect github.com/goccy/go-json v0.9.7 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect @@ -101,6 +103,7 @@ require ( github.com/prometheus/common v0.32.1 // indirect github.com/prometheus/procfs v0.7.3 // indirect github.com/rivo/uniseg v0.2.0 // indirect + github.com/robfig/cron/v3 v3.0.1 // indirect github.com/rogpeppe/go-internal v1.8.0 // indirect github.com/russross/blackfriday v1.5.2 // indirect github.com/spf13/cobra v1.4.0 // indirect diff --git a/go.sum b/go.sum index cf44649..dfd8f86 100644 --- a/go.sum +++ b/go.sum @@ -135,6 +135,7 @@ github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx2 github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/certifi/gocertifi v0.0.0-20191021191039-0944d244cd40/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= github.com/certifi/gocertifi v0.0.0-20200922220541-2c3bb06c6054/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= +github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= @@ -185,6 +186,8 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/daviddengcn/go-colortext v0.0.0-20160507010035-511bcaf42ccd/go.mod h1:dv4zxwHi5C/8AeI+4gX4dCWOIvNi7I6JCSX0HvlKPgE= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= @@ -331,6 +334,8 @@ github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/j github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= github.com/go-playground/validator/v10 v10.10.0 h1:I7mrTYv78z8k8VXa/qJlOlEXn/nBh+BF8dHX5nt/dr0= github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos= +github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI= +github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo= github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= @@ -707,6 +712,8 @@ github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1 github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= +github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= diff --git a/main.go b/main.go index 4a7e968..1516df2 100644 --- a/main.go +++ b/main.go @@ -7,6 +7,7 @@ import "jcc-schedule/app" // @description jcc func main() { router := app.InitRouter() + app.QueryNodeEdgeInfo() go app.Watch() _ = router.Run(":8082") }