Files
apinto/router/router-http/endpoint.go
2021-11-10 18:11:49 +08:00

80 lines
1.9 KiB
Go

/*
* Copyright (c) 2021. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
* Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan.
* Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna.
* Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus.
* Vestibulum commodo. Ut rhoncus gravida arcu.
*/
package router_http
import (
"sync"
http_service "github.com/eolinker/eosc/http-service"
"github.com/eolinker/goku/router"
"github.com/eolinker/goku/service"
)
var _ service.IRouterEndpoint = (*EndPoint)(nil)
//EndPoint 路由端点结构体
type EndPoint struct {
endpoint router.IEndPoint
headers []string
queries []string
once sync.Once
}
//Header 通过header的key返回对应指标值的checker
func (e *EndPoint) Header(name string) (http_service.Checker, bool) {
return e.endpoint.Get(toHeader(name))
}
//Query 通过query的key返回对应指标值的checker
func (e *EndPoint) Query(name string) (http_service.Checker, bool) {
return e.endpoint.Get(toQuery(name))
}
func (e *EndPoint) initCMD() {
e.once.Do(func() {
cs := e.endpoint.CMDs()
e.headers = make([]string, 0, len(cs))
e.queries = make([]string, 0, len(cs))
for _, c := range cs {
if h, yes := headerName(c); yes {
e.headers = append(e.headers, h)
continue
}
if q, yes := queryName(c); yes {
e.queries = append(e.queries, q)
}
}
})
}
//Headers 返回路由端点内header的指标key列表
func (e *EndPoint) Headers() []string {
e.initCMD()
return e.headers
}
//Queries 返回路由端点内query的指标key列表
func (e *EndPoint) Queries() []string {
e.initCMD()
return e.queries
}
//NewEndPoint 创建
func NewEndPoint(endpoint router.IEndPoint) *EndPoint {
return &EndPoint{endpoint: endpoint}
}
//Location 返回location指标的checker
func (e *EndPoint) Location() (http_service.Checker, bool) {
return e.endpoint.Get(cmdLocation)
}