package helper import ( "alfred/config" "alfred/internal/clients" "alfred/model/ferret" "alfred/model/ingester" "alfred/utils" ) func BuildESUploadErrorEvent(alfredEvent ingester.BaseAttributes, zipName string, client string, err error, index, eventId string, statusCode int) ferret.ErrorEventsAttributes { return ferret.ErrorEventsAttributes{ ferret.ErrorAttribute{ SessionId: alfredEvent.SessionId, ClientName: ferret.ClientName(client), DeviceId: alfredEvent.DeviceId, CustomerId: alfredEvent.CustomerId, PhoneNumber: alfredEvent.PhoneNumber, AppVersionCode: alfredEvent.AppVersionCode, AppVersionName: alfredEvent.AppVersionName, }, []ferret.ErrorEvent{{ ErrorTimestamp: utils.GetCurrentTimeInMillis(), ZipNames: []string{zipName}, ErrorType: ferret.ES_UPLOAD_FAILURE, RequestURL: ferret.RequestUrl(index), RequestMethod: ferret.POST, ClientTs: alfredEvent.ClientTs, ErrorName: ferret.ES_UPLOAD, ErrorStatusCode: statusCode, ErrorMessage: err.Error(), IsActive: true, SessionId: alfredEvent.SessionId, EventIdList: []string{eventId}, }}, } } func BuildErrorEventsSlackMessage(errorEvent ferret.ErrorEventAttribute) clients.SlackRequest { slackMessage := make(map[string]interface{}) slackMessage["session_id"] = errorEvent.ErrorAttribute.SessionId slackMessage["client_name"] = errorEvent.ErrorAttribute.ClientName slackMessage["device_id"] = errorEvent.ErrorAttribute.DeviceId slackMessage["customer_id"] = errorEvent.ErrorAttribute.CustomerId slackMessage["phone_number"] = errorEvent.ErrorAttribute.PhoneNumber slackMessage["error_timestamp"] = errorEvent.ErrorEvent.ErrorTimestamp slackMessage["zip_names"] = errorEvent.ErrorEvent.ZipNames slackMessage["error_type"] = errorEvent.ErrorEvent.ErrorType slackMessage["request_url"] = errorEvent.ErrorEvent.RequestURL slackMessage["request_method"] = errorEvent.ErrorEvent.RequestMethod slackMessage["client_ts"] = errorEvent.ErrorEvent.ClientTs slackMessage["error_name"] = errorEvent.ErrorEvent.ErrorName slackMessage["error_status_code"] = errorEvent.ErrorEvent.ErrorStatusCode slackMessage["error_message"] = errorEvent.ErrorEvent.ErrorMessage slackMessage["is_active"] = errorEvent.ErrorEvent.IsActive slackMessage["network_strength_in_kbps"] = errorEvent.ErrorEvent.NetworkStrengthInKbps slackMessage["event_session_id"] = errorEvent.ErrorEvent.SessionId slackMessage["event_id_list"] = errorEvent.ErrorEvent.EventIdList return clients.SlackRequest{ Data: slackMessage, TemplateId: config.GetCollectorConfig().ErrorEventsSlackTemplateId, } } func ErrorEventsValidator(event ferret.ErrorEventAttribute) bool { allowedFutureTimestamp := config.GetCollectorConfig().FutureTimestampValidationDiffInHours allowedPastTimestamp := config.GetCollectorConfig().PastTimestampValidationDiffInHours isValidTimeStamp := utils.ValidatePresentTime(event.ErrorEvent.ErrorTimestamp, allowedPastTimestamp, allowedFutureTimestamp) if !isValidTimeStamp { return false } if utils.Contains(config.GetCollectorConfig().IngestErrorEventsFilter, event.ErrorEvent.ErrorMessage) { return false } return true }