package mapper import ( "alfred/model/common" "alfred/model/es" "encoding/json" "github.com/elastic/go-elasticsearch/v8/esapi" ) func MapEsResponseAndGetSessionIds(search *esapi.Response) ([]string, error) { result, err := MapESApiResponseToESResponse(search) if err != nil { return nil, err } var sessionIds []string if len(result.Aggregation.Buckets.Buckets) == 0 { return sessionIds, nil } for _, event := range result.Aggregation.Buckets.Buckets { sessionIds = append(sessionIds, event.Key.(string)) } return sessionIds, nil } func MapEsResponseToErrorEventsResponse(search *esapi.Response) ([]es.ErrorEventsResponse, error) { result, err := MapESApiResponseToESResponse(search) if err != nil { return nil, err } if len(result.Hits.Hits) == 0 { return []es.ErrorEventsResponse{}, nil } var errorEvents []es.ErrorEventsResponse jsonHits, err := json.Marshal(result.Hits.Hits) if err != nil { return nil, err } if err = json.Unmarshal(jsonHits, &errorEvents); err != nil { return nil, err } return errorEvents, nil } func MapEsResponseToTimeStamp(clientName string, search *esapi.Response) (int64, error) { result, err := MapESApiResponseToESResponse(search) if err != nil { return 0, err } if len(result.Hits.Hits) == 0 { return 0, &common.InvalidSessionError{} } timestamp, ok := result.Hits.Hits[0].Source[clientName].(float64) if !ok { return 0, &common.InvalidSessionError{} } return int64(timestamp), nil }