68 lines
2.0 KiB
Go
68 lines
2.0 KiB
Go
package mapper
|
|
|
|
import (
|
|
"alfred/model/common"
|
|
"alfred/model/es"
|
|
"alfred/pkg/log"
|
|
"encoding/json"
|
|
"github.com/elastic/go-elasticsearch/v8/esapi"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
func MapEsResponseToWebSessionResponse(search *esapi.Response, page *es.Page) ([]es.WebSessionResponse, error) {
|
|
result, err := MapESApiResponseToESResponse(search)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if len(result.Hits.Hits) == 0 {
|
|
return []es.WebSessionResponse{}, &common.InvalidSessionError{}
|
|
}
|
|
|
|
var sessionResponse []es.WebSessionResponse
|
|
jsonHits, err := json.Marshal(result.Hits.Hits)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if err = json.Unmarshal(jsonHits, &sessionResponse); err != nil {
|
|
return nil, err
|
|
}
|
|
return sessionResponse, nil
|
|
}
|
|
|
|
func MapEsResponseToWebSessionResponseWithDuration(search *esapi.Response, page *es.Page) ([]es.WebSessionResponse, error) {
|
|
defer search.Body.Close()
|
|
var result es.WebSessionEsResponse
|
|
err := json.NewDecoder(search.Body).Decode(&result)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if len(result.Hits.Hits) == 0 {
|
|
return []es.WebSessionResponse{}, &common.InvalidSessionError{}
|
|
}
|
|
|
|
var webSessionResponse []es.WebSessionResponse
|
|
jsonHits, err := json.Marshal(result.Hits.Hits)
|
|
if err != nil {
|
|
log.Error("Error while marshalling web session", zap.Error(err))
|
|
return nil, err
|
|
}
|
|
if err = json.Unmarshal(jsonHits, &webSessionResponse); err != nil {
|
|
log.Error("Error while unmarshalling web session", zap.Error(err))
|
|
return nil, err
|
|
}
|
|
|
|
var finalWebSessionResponse []es.WebSessionResponse
|
|
for _, webSession := range webSessionResponse {
|
|
for _, value := range result.Aggregations.Buckets.Buckets {
|
|
localValue := value
|
|
if webSession.Source.WebBaseAttributes.SessionId == value.Key {
|
|
timeDiff := int64(localValue.MaxEndTimestamp.Value-localValue.MinStartTimestamp.Value) / 1000
|
|
webSession.WebSessionDurationInMillis = timeDiff
|
|
finalWebSessionResponse = append(finalWebSessionResponse, webSession)
|
|
}
|
|
}
|
|
}
|
|
|
|
return finalWebSessionResponse, nil
|
|
}
|