47 lines
1.3 KiB
Go
47 lines
1.3 KiB
Go
|
|
package mapper
|
||
|
|
|
||
|
|
import (
|
||
|
|
"alfred/model/es"
|
||
|
|
"alfred/utils"
|
||
|
|
"encoding/json"
|
||
|
|
"errors"
|
||
|
|
"github.com/elastic/go-elasticsearch/v8/esapi"
|
||
|
|
"reflect"
|
||
|
|
"strconv"
|
||
|
|
)
|
||
|
|
|
||
|
|
func MapESApiResponseToESResponse(response *esapi.Response) (*es.ESResponse, error) {
|
||
|
|
defer response.Body.Close()
|
||
|
|
var esResponse es.ESResponse
|
||
|
|
err := json.NewDecoder(response.Body).Decode(&esResponse)
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
return &esResponse, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
func MapESResponseToGetUniqueValues(search *esapi.Response, key string) ([]string, error) {
|
||
|
|
result, err := MapESApiResponseToESResponse(search)
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
if len(result.Aggregation.Buckets.Buckets) == 0 {
|
||
|
|
return nil, errors.New("empty response")
|
||
|
|
}
|
||
|
|
|
||
|
|
var values []string
|
||
|
|
for _, event := range result.Aggregation.Buckets.Buckets {
|
||
|
|
if reflect.TypeOf(event.Key) == reflect.TypeOf("i") && event.Key.(string) != utils.EMPTY {
|
||
|
|
values = append(values, event.Key.(string))
|
||
|
|
} else if reflect.TypeOf(event.Key) == reflect.TypeOf(int64(0)) {
|
||
|
|
str := strconv.FormatInt(event.Key.(int64), 10)
|
||
|
|
values = append(values, str)
|
||
|
|
} else if reflect.TypeOf(event.Key) == reflect.TypeOf(float64(0.0)) {
|
||
|
|
str := strconv.FormatFloat(event.Key.(float64), 'f', 0, 64)
|
||
|
|
values = append(values, str)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
return values, nil
|
||
|
|
}
|