health_router.go 2.1 KB
Newer Older
7
710leo 已提交
1 2 3 4 5 6
package routes

import (
	"fmt"
	"os"

7 8
	"github.com/toolkits/pkg/logger"

7
710leo 已提交
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
	"github.com/didi/nightingale/src/modules/transfer/backend"
	"github.com/didi/nightingale/src/modules/transfer/cache"
	"github.com/didi/nightingale/src/toolkits/http/render"
	"github.com/didi/nightingale/src/toolkits/str"

	"github.com/gin-gonic/gin"
	"github.com/toolkits/pkg/errors"
)

func ping(c *gin.Context) {
	c.String(200, "pong")
}

func addr(c *gin.Context) {
	c.String(200, c.Request.RemoteAddr)
}

func pid(c *gin.Context) {
	c.String(200, fmt.Sprintf("%d", os.Getpid()))
}

type getStraReq struct {
	Endpoint string `json:"endpoint"`
	Metric   string `json:"metric"`
}

func getStra(c *gin.Context) {
	var input getStraReq
	errors.Dangerous(c.ShouldBindJSON(&input))
	key := str.PK(input.Metric, input.Endpoint)
	stras := cache.StraMap.GetByKey(key)

	render.Data(c, stras, nil)
}

type tsdbInstanceRecv struct {
	Endpoint string            `json:"endpoint"`
	Metric   string            `json:"metric"`
	TagMap   map[string]string `json:"tags"`
}

func tsdbInstance(c *gin.Context) {
	var input tsdbInstanceRecv
	errors.Dangerous(c.ShouldBindJSON(&input))

54 55 56 57 58
	dataSource, err := backend.GetDataSourceFor("tsdb")
	if err != nil {
		logger.Warningf("could not find datasource")
		render.Message(c, err)
		return
7
710leo 已提交
59 60
	}

61
	addrs := dataSource.GetInstance(input.Metric, input.Endpoint, input.TagMap)
7
710leo 已提交
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
	render.Data(c, addrs, nil)
}

type judgeInstanceRecv struct {
	Endpoint string            `json:"endpoint"`
	Metric   string            `json:"metric"`
	TagMap   map[string]string `json:"tags"`
	Step     int               `json:"step"`
	Sid      int64             `json:"sid"`
}

func judgeInstance(c *gin.Context) {
	var input judgeInstanceRecv
	errors.Dangerous(c.ShouldBindJSON(&input))
	var instance string
	key := str.PK(input.Metric, input.Endpoint)
	stras := cache.StraMap.GetByKey(key)
	for _, stra := range stras {
		if input.Sid != stra.Id || !backend.TagMatch(stra.Tags, input.TagMap) {
			continue
		}
		instance = stra.JudgeInstance
	}

	render.Data(c, instance, nil)
}

func judges(c *gin.Context) {
	render.Data(c, backend.GetJudges(), nil)
}