Ai
1 Star 0 Fork 0

ryancartoon/sensu-go

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
field.go 2.05 KB
一键复制 编辑 原始数据 按行查看 历史
James Phillips 提交于 2019-06-10 23:40 +08:00 . [Graphql] Simple autosuggestion (#3028)
package suggest
import (
"fmt"
v2 "github.com/sensu/sensu-go/api/core/v2"
)
var (
NameField = &CustomField{
Name: "name",
FieldFunc: func(res v2.Resource) []string {
return []string{res.GetObjectMeta().Name}
},
}
LabelsField = &MapField{
Name: "labels",
FieldFunc: func(res v2.Resource) map[string]string {
return res.GetObjectMeta().Labels
},
}
)
type Field interface {
Matches(string) bool
Value(v2.Resource, string) []string
}
type CustomField struct {
Name string
FieldFunc func(v2.Resource) []string
}
func (f *CustomField) Matches(path string) bool {
return f.Name == path
}
func (f *CustomField) Value(res v2.Resource, path string) []string {
return f.FieldFunc(res)
}
type MapField struct {
Name string
FieldFunc func(v2.Resource) map[string]string
}
func (f *MapField) Matches(path string) bool {
return startsWith(path, f.Name)
}
func (f *MapField) Value(res v2.Resource, path string) []string {
key := trimSeg(path, f.Name+"/")
fld := f.FieldFunc(res)
if key == "" {
return collectKeys(fld)
}
val, ok := fld[key]
fmt.Println("key", val, key, ok)
if ok {
return []string{val}
}
return []string{}
}
type ObjectField struct {
Name string
Fields []Field
}
func (f *ObjectField) Matches(path string) bool {
if !startsWith(path, f.Name) {
return false
}
path = trimSeg(path, f.Name+"/")
for _, n := range f.Fields {
if n.Matches(path) {
return true
}
}
return false
}
func (f *ObjectField) Value(res v2.Resource, path string) []string {
path = trimSeg(path, f.Name+"/")
for _, n := range f.Fields {
if n.Matches(path) {
return n.Value(res, path)
}
}
return []string{}
}
func startsWith(path, seg string) bool {
if len(path) < len(seg) {
return false
} else if len(path) == len(seg) {
return path == seg
}
seg += "/"
return path[:len(seg)] == seg
}
func trimSeg(path, seg string) string {
if len(path) < len(seg) {
return ""
}
return path[len(seg):]
}
func collectKeys(labels map[string]string) (vals []string) {
for key, _ := range labels {
vals = append(vals, key)
}
return
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/ryancartoon/sensu-go.git
git@gitee.com:ryancartoon/sensu-go.git
ryancartoon
sensu-go
sensu-go
v5.10.1

搜索帮助