Added flow to sessions and removed ExtractWithAttributes
This commit is contained in:
parent
804b9b2792
commit
d66df080fe
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -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"`
|
||||
|
||||
@ -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"`
|
||||
}
|
||||
|
||||
250
util/extract.go
250
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
|
||||
//}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user