diff --git a/models/full_conversation.go b/models/full_conversation.go deleted file mode 100644 index 48f1f80..0000000 --- a/models/full_conversation.go +++ /dev/null @@ -1,67 +0,0 @@ -package models - -import "time" - -type Conversation struct { - Address *string - DivisionIds *string `gorm:"type:json"` - End *time.Time `gorm:"index"` - ExternalTag *string - Id string `gorm:"primaryKey;index"` - MinMos *float32 - MinRFactor *float32 - OriginatingDirection *string - RecentTransfers *string `gorm:"type:json"` - RecordingState *string - SecurePause *bool - Start *time.Time `gorm:"index"` - UtilizationLabelId *string - LiveUpdate *time.Time - DetailsUpdate *time.Time - SemiLiveUpdate *time.Time - JobUpdate *time.Time - Participants []struct { - Address *string - Attributes *string `gorm:"type:json"` - ConnectedTime *time.Time `gorm:"index"` - ConversationId string `gorm:"foreignKey;index"` - EndTime *time.Time `gorm:"index"` - ExternalContactId *string - ExternalContactInitialDivisionId *string - Id string `gorm:"primaryKey;index"` - MediaRoles *string `gorm:"type:json"` - Name *string `gorm:"index"` - Purpose *string `gorm:"index"` - QueueId *string - Wrapup *string `gorm:"type:json"` - WrapupExpected *bool - WrapupRequired *bool - Sessions []struct { - Ani string - Direction string - Dnis string - EdgeId string - Id string `gorm:"primaryKey;index"` - MediaEndpointStats string `gorm:"type:json"` - MediaType string - Metrics string `gorm:"type:json"` - ParticipantId string `gorm:"foreignKey;index"` - ProtocolCallId string - Provider string - Recording bool - RemoteNameDisplayable string - SessionDnis string - Segments []struct { - Id string `gorm:"primaryKey;index"` - Conference bool - DisconnectType string - Q850ResponseCodes string `gorm:"type:json"` - SegmentEnd time.Time `gorm:"index"` - SegmentStart time.Time `gorm:"index"` - SegmentType string `gorm:"index"` - SessionId string `gorm:"foreignKey"` - WrapUpCode string - } - } - } -} diff --git a/models/raw.go b/models/raw.go index a7d350c..037948b 100644 --- a/models/raw.go +++ b/models/raw.go @@ -93,6 +93,20 @@ type AnalyticsConversationWithoutAttributes struct { Q850ResponseCodes []int `json:"q850ResponseCodes"` Conference bool `json:"conference"` } `json:"segments"` + Flow struct { + EndingLanguage string `json:"endingLanguage"` + EntryReason string `json:"entryReason"` + EntryType string `json:"entryType"` + ExitReason string `json:"exitReason"` + FlowId string `json:"flowId"` + FlowName string `json:"flowName"` + FlowType string `json:"flowType"` + FlowVersion string `json:"flowVersion"` + StartingLanguage string `json:"startingLanguage"` + TransferTargetAddress string `json:"transferTargetAddress"` + TransferTargetName string `json:"transferTargetName"` + TransferType string `json:"transferType"` + } `json:"flow"` Metrics []struct { Name string `json:"name"` Value int `json:"value"` diff --git a/models/session.go b/models/session.go index 39ae059..1d67d68 100644 --- a/models/session.go +++ b/models/session.go @@ -15,6 +15,7 @@ type DBSession struct { Recording bool RemoteNameDisplayable string SessionDnis string + Flow string `gorm:"type:json"` Segments []DBSegment `gorm:"foreignKey:SessionId;references:Id"` } diff --git a/util/extract.go b/util/extract.go index 75b0ad5..2fa87a8 100644 --- a/util/extract.go +++ b/util/extract.go @@ -70,6 +70,11 @@ func ExtractWithoutAttributes(base models.AnalyticsConversationWithoutAttributes metricsBytes = nil } + flowBytes, err := json.Marshal(sess.Flow) + if err != nil { + flowBytes = nil + } + session := models.DBSession{ Ani: sess.ANI, Direction: sess.Direction, @@ -85,6 +90,7 @@ func ExtractWithoutAttributes(base models.AnalyticsConversationWithoutAttributes Recording: sess.Recording, RemoteNameDisplayable: sess.RemoteNameDisplayable, SessionDnis: sess.SessionDNIS, + Flow: string(flowBytes), } sessions = append(sessions, session) @@ -255,125 +261,125 @@ func ExtractLive(base models.NotificationConversationWithAttributes) (models.DBC } -func ExtractWithAttributes(base models.AnalyticsConversationWithAttributes) (models.DBConversation, []models.DBParticipant, []models.DBSession, []models.DBSegment) { - - var startTime *time.Time - parsedStartTime, err := time.Parse(time.RFC3339, base.ConversationStart) - if err != nil { - startTime = nil - } else { - startTime = &parsedStartTime - } - - var endTime *time.Time - parsedEndTime, err := time.Parse(time.RFC3339, base.ConversationEnd) - if err != nil { - endTime = nil - } else { - endTime = &parsedEndTime - } - - divisionIdsBytes, err := json.Marshal(base.DivisionIds) - if err != nil { - divisionIdsBytes = nil - } - divisionIdsBytesStr := string(divisionIdsBytes) - - conversation := models.DBConversation{ - DivisionIds: &divisionIdsBytesStr, - End: endTime, - Id: base.ConversationId, - MinMos: &base.MediaStatsMinConversationMos, - MinRFactor: &base.MediaStatsMinConversationRFactor, - OriginatingDirection: &base.OriginatingDirection, - Start: startTime, - } - var participants []models.DBParticipant - var sessions []models.DBSession - var segments []models.DBSegment - - for _, p := range base.Participants { - - attributesBytes, err := json.Marshal(p.Attributes) - if err != nil { - attributesBytes = nil - } - attributesBytesStr := string(attributesBytes) - - participant := models.DBParticipant{ - ConnectedTime: nil, - ConversationId: base.ConversationId, - EndTime: nil, - ExternalContactId: &p.ExternalContactId, - Id: p.ParticipantId, - Name: &p.ParticipantName, - Purpose: &p.Purpose, - Attributes: &attributesBytesStr, - } - participants = append(participants, participant) - - for _, sess := range p.Sessions { - mediaEndpointStatsBytes, err := json.Marshal(sess.MediaEndpointStats) - if err != nil { - mediaEndpointStatsBytes = nil - } - - metricsBytes, err := json.Marshal(sess.Metrics) - if err != nil { - metricsBytes = nil - } - - session := models.DBSession{ - Ani: sess.ANI, - Direction: sess.Direction, - Dnis: sess.DNIS, - EdgeId: sess.EdgeId, - Id: fmt.Sprintf("%s_%s", p.ParticipantId, sess.SessionId), - MediaEndpointStats: string(mediaEndpointStatsBytes), - MediaType: sess.MediaType, - Metrics: string(metricsBytes), - ParticipantId: p.ParticipantId, - ProtocolCallId: sess.ProtocolCallId, - Provider: sess.Provider, - Recording: sess.Recording, - RemoteNameDisplayable: sess.RemoteNameDisplayable, - SessionDnis: sess.SessionDnis, - } - sessions = append(sessions, session) - - for _, seg := range sess.Segments { - - segmentStart, err := time.Parse(time.RFC3339, seg.SegmentStart) - if err != nil { - segmentStart = time.Now() - } - - segmentEnd, err := time.Parse(time.RFC3339, seg.SegmentEnd) - if err != nil { - segmentEnd = time.Now() - } - - q850ResponseCodesBytes, err := json.Marshal(seg.Q850ResponseCodes) - if err != nil { - q850ResponseCodesBytes = nil - } - - segment := models.DBSegment{ - Id: fmt.Sprintf("%s_%s", session.Id, seg.SegmentType), - Conference: seg.Conference, - DisconnectType: seg.DisconnectType, - Q850ResponseCodes: string(q850ResponseCodesBytes), - SegmentEnd: segmentEnd, - SegmentStart: segmentStart, - SegmentType: seg.SegmentType, - SessionId: sess.SessionId, - WrapUpCode: seg.WrapUpCode, - } - - segments = append(segments, segment) - } - } - } - - return conversation, participants, sessions, segments -} +//func ExtractWithAttributes(base models.AnalyticsConversationWithAttributes) (models.DBConversation, []models.DBParticipant, []models.DBSession, []models.DBSegment) { +// +// var startTime *time.Time +// parsedStartTime, err := time.Parse(time.RFC3339, base.ConversationStart) +// if err != nil { +// startTime = nil +// } else { +// startTime = &parsedStartTime +// } +// +// var endTime *time.Time +// parsedEndTime, err := time.Parse(time.RFC3339, base.ConversationEnd) +// if err != nil { +// endTime = nil +// } else { +// endTime = &parsedEndTime +// } +// +// divisionIdsBytes, err := json.Marshal(base.DivisionIds) +// if err != nil { +// divisionIdsBytes = nil +// } +// divisionIdsBytesStr := string(divisionIdsBytes) +// +// conversation := models.DBConversation{ +// DivisionIds: &divisionIdsBytesStr, +// End: endTime, +// Id: base.ConversationId, +// MinMos: &base.MediaStatsMinConversationMos, +// MinRFactor: &base.MediaStatsMinConversationRFactor, +// OriginatingDirection: &base.OriginatingDirection, +// Start: startTime, +// } +// var participants []models.DBParticipant +// var sessions []models.DBSession +// var segments []models.DBSegment +// +// for _, p := range base.Participants { +// +// attributesBytes, err := json.Marshal(p.Attributes) +// if err != nil { +// attributesBytes = nil +// } +// attributesBytesStr := string(attributesBytes) +// +// participant := models.DBParticipant{ +// ConnectedTime: nil, +// ConversationId: base.ConversationId, +// EndTime: nil, +// ExternalContactId: &p.ExternalContactId, +// Id: p.ParticipantId, +// Name: &p.ParticipantName, +// Purpose: &p.Purpose, +// Attributes: &attributesBytesStr, +// } +// participants = append(participants, participant) +// +// for _, sess := range p.Sessions { +// mediaEndpointStatsBytes, err := json.Marshal(sess.MediaEndpointStats) +// if err != nil { +// mediaEndpointStatsBytes = nil +// } +// +// metricsBytes, err := json.Marshal(sess.Metrics) +// if err != nil { +// metricsBytes = nil +// } +// +// session := models.DBSession{ +// Ani: sess.ANI, +// Direction: sess.Direction, +// Dnis: sess.DNIS, +// EdgeId: sess.EdgeId, +// Id: fmt.Sprintf("%s_%s", p.ParticipantId, sess.SessionId), +// MediaEndpointStats: string(mediaEndpointStatsBytes), +// MediaType: sess.MediaType, +// Metrics: string(metricsBytes), +// ParticipantId: p.ParticipantId, +// ProtocolCallId: sess.ProtocolCallId, +// Provider: sess.Provider, +// Recording: sess.Recording, +// RemoteNameDisplayable: sess.RemoteNameDisplayable, +// SessionDnis: sess.SessionDnis, +// } +// sessions = append(sessions, session) +// +// for _, seg := range sess.Segments { +// +// segmentStart, err := time.Parse(time.RFC3339, seg.SegmentStart) +// if err != nil { +// segmentStart = time.Now() +// } +// +// segmentEnd, err := time.Parse(time.RFC3339, seg.SegmentEnd) +// if err != nil { +// segmentEnd = time.Now() +// } +// +// q850ResponseCodesBytes, err := json.Marshal(seg.Q850ResponseCodes) +// if err != nil { +// q850ResponseCodesBytes = nil +// } +// +// segment := models.DBSegment{ +// Id: fmt.Sprintf("%s_%s", session.Id, seg.SegmentType), +// Conference: seg.Conference, +// DisconnectType: seg.DisconnectType, +// Q850ResponseCodes: string(q850ResponseCodesBytes), +// SegmentEnd: segmentEnd, +// SegmentStart: segmentStart, +// SegmentType: seg.SegmentType, +// SessionId: sess.SessionId, +// WrapUpCode: seg.WrapUpCode, +// } +// +// segments = append(segments, segment) +// } +// } +// } +// +// return conversation, participants, sessions, segments +//}