Files
alfred-be/alfred/mapper/webSessionsMapper.go
2026-03-08 16:14:42 +05:30

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
}