118 lines
3.6 KiB
Go
118 lines
3.6 KiB
Go
package mapper
|
|
|
|
import (
|
|
"alfred/config"
|
|
"alfred/model/common"
|
|
"alfred/model/es"
|
|
"alfred/pkg/log"
|
|
"alfred/utils"
|
|
"encoding/json"
|
|
"github.com/elastic/go-elasticsearch/v8/esapi"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
func MapEsResponseToSessionResponse(search *esapi.Response) ([]es.SessionResponse, error) {
|
|
result, err := MapESApiResponseToESResponse(search)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if len(result.Hits.Hits) == 0 {
|
|
return []es.SessionResponse{}, &common.InvalidSessionError{}
|
|
}
|
|
|
|
//fetching sessionId, deviceId and event timestamp from es response.
|
|
var sessionResponse []es.SessionResponse
|
|
jsonHits, err := json.Marshal(result.Hits.Hits)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if err = json.Unmarshal(jsonHits, &sessionResponse); err != nil {
|
|
return nil, err
|
|
}
|
|
for idx := range sessionResponse {
|
|
if sessionResponse[idx].Source.BaseAttributes.ImageType == utils.EMPTY {
|
|
sessionResponse[idx].Source.BaseAttributes.ImageType = utils.ImageTypeJpeg
|
|
}
|
|
if sessionResponse[idx].Source.BaseAttributes.FileTypeExtension == utils.EMPTY {
|
|
sessionResponse[idx].Source.BaseAttributes.FileTypeExtension = utils.ZipExtension.String()
|
|
}
|
|
}
|
|
return sessionResponse, nil
|
|
}
|
|
|
|
func MapEsResponseToSessionWithDurationResponse(search *esapi.Response) ([]es.SessionResponse, error) {
|
|
defer search.Body.Close()
|
|
var result es.SessionEsResponse
|
|
err := json.NewDecoder(search.Body).Decode(&result)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if len(result.Hits.Hits) == 0 {
|
|
return []es.SessionResponse{}, &common.InvalidSessionError{}
|
|
}
|
|
|
|
//fetching sessionId, deviceId and event timestamp from es response.
|
|
var sessionResponse []es.SessionResponse
|
|
jsonHits, err := json.Marshal(result.Hits.Hits)
|
|
if err != nil {
|
|
log.Error("Error while marshalling app session", zap.Error(err))
|
|
return nil, err
|
|
}
|
|
if err = json.Unmarshal(jsonHits, &sessionResponse); err != nil {
|
|
log.Error("Error while unmarshalling app session", zap.Error(err))
|
|
return nil, err
|
|
}
|
|
|
|
var finalSessionResponse []es.SessionResponse
|
|
for _, value := range result.Aggregations.Buckets.Buckets {
|
|
localValue := value
|
|
for _, session := range sessionResponse {
|
|
if session.Source.BaseAttributes.SessionId == value.Key {
|
|
var diff int64
|
|
if localValue.MaxTimestamp.Value == 0 {
|
|
zipUploadTime := config.GetCoreConfig().ZipUploadTimeConfig
|
|
diff = int64(localValue.MaxClientTimestamp.Value+zipUploadTime-localValue.MinTimestamp.Value) / 1000
|
|
} else {
|
|
diff = int64(localValue.MaxTimestamp.Value-localValue.MinTimestamp.Value) / 1000
|
|
}
|
|
session.SessionDuration = &diff
|
|
finalSessionResponse = append(finalSessionResponse, session)
|
|
}
|
|
}
|
|
}
|
|
|
|
return finalSessionResponse, nil
|
|
}
|
|
|
|
func MapEsResponseToSessionResponseForAllSessions(search *esapi.Response) ([]es.SessionResponse, error) {
|
|
result, err := MapESApiResponseToESResponse(search)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if len(result.Hits.Hits) == 0 {
|
|
return []es.SessionResponse{}, &common.InvalidSessionError{}
|
|
}
|
|
|
|
//fetching sessionId, deviceId and event timestamp from es response.
|
|
|
|
var sessionResponse []es.SessionResponse
|
|
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 MapEsApiResponseToSessionDeviceAttributesResponse(search *esapi.Response) (*es.SessionEsResponseForDeviceAttributes, error) {
|
|
defer search.Body.Close()
|
|
var esResponse es.SessionEsResponseForDeviceAttributes
|
|
err := json.NewDecoder(search.Body).Decode(&esResponse)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &esResponse, nil
|
|
}
|