Merge pull request #580 from ralphocdol/unique-array-custom-api

added unique to filter arrays with unique items in custom-api
This commit is contained in:
Svilen Markov 2025-04-13 16:04:16 +01:00 committed by GitHub
commit c4e4c62072
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 13 additions and 1 deletions

View File

@ -397,6 +397,7 @@ The following helper functions provided by Glance are available:
- `sortByFloat(key string, order string, arr []JSON): []JSON`: Sorts an array of JSON objects by a float key in either ascending or descending order. - `sortByFloat(key string, order string, arr []JSON): []JSON`: Sorts an array of JSON objects by a float key in either ascending or descending order.
- `sortByTime(key string, layout string, order string, arr []JSON): []JSON`: Sorts an array of JSON objects by a time key in either ascending or descending order. The format must be provided in Go's [date format](https://pkg.go.dev/time#pkg-constants). - `sortByTime(key string, layout string, order string, arr []JSON): []JSON`: Sorts an array of JSON objects by a time key in either ascending or descending order. The format must be provided in Go's [date format](https://pkg.go.dev/time#pkg-constants).
- `concat(strings ...string) string`: Concatenates multiple strings together. - `concat(strings ...string) string`: Concatenates multiple strings together.
- `unique(key string, arr []JSON) []JSON`: Returns a unique array of JSON objects based on the given key.
The following helper functions provided by Go's `text/template` are available: The following helper functions provided by Go's `text/template` are available:

View File

@ -91,7 +91,6 @@ func cliSensorsPrint() int {
fmt.Printf(" - %v\n", w) fmt.Printf(" - %v\n", w)
} }
} }
return 1 return 1
} }

View File

@ -547,6 +547,18 @@ var customAPITemplateFuncs = func() template.FuncMap {
"concat": func(items ...string) string { "concat": func(items ...string) string {
return strings.Join(items, "") return strings.Join(items, "")
}, },
"unique": func(key string, results []decoratedGJSONResult) []decoratedGJSONResult {
seen := make(map[string]struct{})
out := make([]decoratedGJSONResult, 0, len(results))
for _, result := range results {
val := result.String(key)
if _, ok := seen[val]; !ok {
seen[val] = struct{}{}
out = append(out, result)
}
}
return out
},
} }
for key, value := range globalTemplateFunctions { for key, value := range globalTemplateFunctions {