Compare commits

..

11 Commits

8 changed files with 378 additions and 294 deletions

31
models/amendment.go Normal file
View File

@@ -0,0 +1,31 @@
package models
import "time"
type DBAmendment struct {
Id int `gorm:"primaryKey;index"`
ConversationId string `gorm:"index"`
AmendmentColumn string
AmendmentValue string
Requestor string
RequestedAt time.Time
}
func (DBAmendment) TableName() string {
return "gc_amendments"
}
type DBAmendmentLog struct {
Id int `gorm:"primaryKey;index"`
ConversationId string `gorm:"index"`
AmendmentColumn string
OldValue string
NewValue string
Requestor string
RequestedAt time.Time
AmendedAt time.Time
}
func (DBAmendmentLog) TableName() string {
return "gc_amendment_logs"
}

View File

@@ -19,8 +19,11 @@ type DBConversation struct {
Start *time.Time `gorm:"index"` Start *time.Time `gorm:"index"`
UtilizationLabelId *string UtilizationLabelId *string
LiveUpdate *time.Time LiveUpdate *time.Time
DetailsUpdate *time.Time
SemiLiveUpdate *time.Time SemiLiveUpdate *time.Time
JobUpdate *time.Time JobUpdate *time.Time
Participants []DBParticipant `gorm:"foreignKey:ConversationId;references:Id"`
} }
func (DBConversation) TableName() string { func (DBConversation) TableName() string {

185
models/gencloud.go Normal file
View File

@@ -0,0 +1,185 @@
package models
type AnalyticsConversationWithAttributesQuery struct {
Conversations []AnalyticsConversationWithAttributes `json:"conversations"`
Cursor *string `json:"cursor"`
}
type AnalyticsConversationWithAttributes struct {
ConversationEnd string `json:"conversationEnd"`
ConversationId string `json:"conversationId"`
ConversationStart string `json:"conversationStart"`
DivisionIds []string `json:"divisionIds"`
ExternalTag string `json:"externalTag"`
MediaStatsMinConversationMos float32 `json:"mediaStatsMinConversationMos"`
MediaStatsMinConversationRFactor float32 `json:"mediaStatsMinConversationRFactor"`
OriginatingDirection string `json:"originatingDirection"`
Participants []struct {
ExternalContactId string `json:"externalContactId"`
ParticipantId string `json:"participantId"`
ParticipantName string `json:"participantName"`
Purpose string `json:"purpose"`
Sessions []struct {
ANI string `json:"ani"`
Direction string `json:"direction"`
DNIS string `json:"dnis"`
EdgeId string `json:"edgeId"`
MediaType string `json:"mediaType"`
ProtocolCallId string `json:"protocolCallId"`
Provider string `json:"provider"`
Recording bool `json:"recording"`
RemoteNameDisplayable string `json:"remoteNameDisplayable"`
SessionDnis string `json:"sessionDnis"`
SessionId string `json:"sessionId"`
MediaEndpointStats []struct {
Codecs []string `json:"codecs"`
EventTime string `json:"eventTime"`
MaxLatencyMs int `json:"maxLatencyMs"`
MinMos float32 `json:"minMos"`
MinRFactor float32 `json:"minRFactor"`
ReceivedPackets int `json:"receivedPackets"`
} `json:"mediaEndpointStats"`
Metrics []struct {
EmitDate string `json:"emitDate"`
Name string `json:"name"`
Value int `json:"value"`
} `json:"metrics"`
Segments []struct {
Conference bool `json:"conference"`
DisconnectType string `json:"disconnectType"`
Q850ResponseCodes []int `json:"q850ResponseCodes"`
SegmentEnd string `json:"segmentEnd"`
SegmentStart string `json:"segmentStart"`
SegmentType string `json:"segmentType"`
WrapUpCode string `json:"wrapUpCode"`
} `json:"segments"`
} `json:"sessions"`
Attributes map[string]any `json:"attributes"`
} `json:"participants"`
}
type AnalyticsConversationWithoutAttributesQuery struct {
Conversations []AnalyticsConversationWithoutAttributes `json:"conversations"`
TotalHits int `json:"totalHits"`
}
type AnalyticsConversationWithoutAttributes struct {
ConversationId string `json:"conversationId"`
ConversationStart string `json:"conversationStart"`
ConversationEnd string `json:"conversationEnd"`
MediaStatsMinConversationMos float32 `json:"mediaStatsMinConversationMos"`
MediaStatsMinConversationRFactor float32 `json:"mediaStatsMinConversationRFactor"`
OriginatingDirection string `json:"originatingDirection"`
DivisionIds []string `json:"divisionIds"`
Participants []struct {
ParticipantId string `json:"participantId"`
ParticipantName string `json:"participantName"`
Purpose string `json:"purpose"`
ExternalContactId string `json:"externalContactId"`
Sessions []struct {
MediaType string `json:"mediaType"`
SessionId string `json:"sessionId"`
ANI string `json:"ani"`
Direction string `json:"direction"`
DNIS string `json:"dnis"`
SessionDNIS string `json:"sessionDnis"`
EdgeId string `json:"edgeId"`
RemoteNameDisplayable string `json:"remoteNameDisplayable"`
Segments []struct {
SegmentStart string `json:"segmentStart"`
SegmentEnd string `json:"segmentEnd"`
WrapUpCode string `json:"wrapUpCode"`
DisconnectType string `json:"disconnectType"`
SegmentType string `json:"SegmentType"`
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"`
EmitDate string `json:"emitDate"`
} `json:"metrics"`
MediaEndpointStats []struct {
Codecs []string `json:"codecs"`
MinMos float32 `json:"minMos"`
MinRFactor float32 `json:"minRFactor"`
MaxLatencyMs int `json:"maxLatencyMs"`
ReceivedPackets int `json:"receivedPackets"`
} `json:"mediaEndpointStats"`
Recording bool `json:"recording"`
ProtocolCallId string `json:"protocolCallId"`
Provider string `json:"provider"`
} `json:"sessions"`
} `json:"participants"`
}
type NotificationConversationWithAttributes struct {
Address string `json:"address"`
Divisions []struct {
Division struct {
Id string `json:"id"`
SelfUri string `json:"selfUri"`
} `json:"division"`
Entities []struct {
DateDivisionUpdated string `json:"dateDivisionUpdated"`
Id string `json:"id"`
SelfUri string `json:"selfUri"`
} `json:"entities"`
} `json:"divisions"`
ExternalTag string `json:"externalTag"`
Id string `json:"id"`
Participants []struct {
Address string `json:"address"`
Attributes map[string]any `json:"attributes"`
Calls []struct {
AfterCallWorkRequired bool `json:"afterCallWorkRequired"`
Confined bool `json:"confined"`
ConnectedTime string `json:"connectedTime"`
Direction string `json:"direction"`
DisconnectReasons []struct{} `json:"disconnectReasons"`
DisconnectType string `json:"disconnectType"`
DisconnectedTime string `json:"disconnectedTime"`
Held bool `json:"held"`
Id string `json:"id"`
InitialState string `json:"initialState"`
Muted bool `json:"muted"`
Other map[string]any `json:"other"`
PeerId string `json:"peerId"`
Provider string `json:"provider"`
Recording bool `json:"recording"`
RecordingState string `json:"recordingState"`
SecurePause bool `json:"securePause"`
Self map[string]any `json:"self"`
State string `json:"state"`
} `json:"calls"`
ConnectedTime string `json:"connectedTime"`
EndTime string `json:"endTime"`
ExternalContactId string `json:"externalContactId"`
ExternalContactInitialDivisionId string `json:"externalContactInitialDivisionId"`
Id string `json:"id"`
MediaRoles []string `json:"mediaRoles"`
Name string `json:"name"`
Purpose string `json:"purpose"`
QueueId string `json:"queueId"`
Wrapup map[string]any `json:"wrapup"`
WrapupExpected bool `json:"wrapupExpected"`
WrapupRequired bool `json:"wrapupRequired"`
} `json:"participants"`
RecentTransfers []map[string]any `json:"recentTransfers"`
RecordingState string `json:"recordingState"`
SecurePause bool `json:"securePause"`
UtilizationLabelId string `json:"utilizationLabelId"`
}

View File

@@ -20,6 +20,8 @@ type DBParticipant struct {
Wrapup *string `gorm:"type:json"` Wrapup *string `gorm:"type:json"`
WrapupExpected *bool WrapupExpected *bool
WrapupRequired *bool WrapupRequired *bool
Sessions []DBSession `gorm:"foreignKey:ParticipantId;references:Id"`
} }
func (DBParticipant) TableName() string { func (DBParticipant) TableName() string {

View File

@@ -7,7 +7,8 @@ type DBQueueLog struct {
ConversationId string `gorm:"primaryKey"` ConversationId string `gorm:"primaryKey"`
Start time.Time `gorm:"index"` Start time.Time `gorm:"index"`
End time.Time `gorm:"index"` End time.Time `gorm:"index"`
Result string `gorm:"type:json"` Duration float64
Result string `gorm:"type:json"`
} }
func (DBQueueLog) TableName() string { func (DBQueueLog) TableName() string {

View File

@@ -1,166 +1,27 @@
package models package models
type AnalyticsConversationWithAttributes struct { import "time"
ConversationEnd string `json:"conversationEnd"`
ConversationId string `json:"conversationId"` type GCRaw struct {
ConversationStart string `json:"conversationStart"` ClientConversationId string
DivisionIds []string `json:"divisionIds"` InterpreterConversationId string
ExternalTag string `json:"externalTag"` LanguageId int
MediaStatsMinConversationMos float32 `json:"mediaStatsMinConversationMos"` CallType string
MediaStatsMinConversationRFactor float32 `json:"mediaStatsMinConversationRFactor"` GenderPreference string
OriginatingDirection string `json:"originatingDirection"` ClientId int
Participants []struct { CustomerDnis string
ExternalContactId string `json:"externalContactId"` CustomerAni string
ParticipantId string `json:"participantId"` ClientConnectTimeUtc *time.Time
ParticipantName string `json:"participantName"` ClientDisconnectTimeUtc *time.Time
Purpose string `json:"purpose"` NesConnectTimeUtc *time.Time
Sessions []struct { NesDisconnectTimeUtc *time.Time
ANI string `json:"ani"` BookingReference *int
Direction string `json:"direction"` IvrData *int
DNIS string `json:"dnis"` InterpreterId int
EdgeId string `json:"edgeId"` InterpreterConnectTimeUtc time.Time
MediaType string `json:"mediaType"` InterpreterDisconnectTimeUtc time.Time
ProtocolCallId string `json:"protocolCallId"`
Provider string `json:"provider"`
Recording bool `json:"recording"`
RemoteNameDisplayable string `json:"remoteNameDisplayable"`
SessionDnis string `json:"sessionDnis"`
SessionId string `json:"sessionId"`
MediaEndpointStats []struct {
Codecs []string `json:"codecs"`
EventTime string `json:"eventTime"`
MaxLatencyMs int `json:"maxLatencyMs"`
MinMos float32 `json:"minMos"`
MinRFactor float32 `json:"minRFactor"`
ReceivedPackets int `json:"receivedPackets"`
} `json:"mediaEndpointStats"`
Metrics []struct {
EmitDate string `json:"emitDate"`
Name string `json:"name"`
Value int `json:"value"`
} `json:"metrics"`
Segments []struct {
Conference bool `json:"conference"`
DisconnectType string `json:"disconnectType"`
Q850ResponseCodes []int `json:"q850ResponseCodes"`
SegmentEnd string `json:"segmentEnd"`
SegmentStart string `json:"segmentStart"`
SegmentType string `json:"segmentType"`
WrapUpCode string `json:"wrapUpCode"`
} `json:"segments"`
} `json:"sessions"`
Attributes map[string]any `json:"attributes"`
} `json:"participants"`
} }
type AnalyticsConversationWithoutAttributesQuery struct { func (GCRaw) TableName() string {
Conversations []AnalyticsConversationWithoutAttributes `json:"conversations"` return "gc_raw"
TotalHits int `json:"totalHits"`
}
type AnalyticsConversationWithoutAttributes struct {
ConversationId string `json:"conversationId"`
ConversationStart string `json:"conversationStart"`
ConversationEnd string `json:"conversationEnd"`
MediaStatsMinConversationMos float32 `json:"mediaStatsMinConversationMos"`
MediaStatsMinConversationRFactor float32 `json:"mediaStatsMinConversationRFactor"`
OriginatingDirection string `json:"originatingDirection"`
DivisionIds []string `json:"divisionIds"`
Participants []struct {
ParticipantId string `json:"participantId"`
ParticipantName string `json:"participantName"`
Purpose string `json:"purpose"`
ExternalContactId string `json:"externalContactId"`
Sessions []struct {
MediaType string `json:"mediaType"`
SessionId string `json:"sessionId"`
ANI string `json:"ani"`
Direction string `json:"direction"`
DNIS string `json:"dnis"`
SessionDNIS string `json:"sessionDnis"`
EdgeId string `json:"edgeId"`
RemoteNameDisplayable string `json:"remoteNameDisplayable"`
Segments []struct {
SegmentStart string `json:"segmentStart"`
SegmentEnd string `json:"segmentEnd"`
WrapUpCode string `json:"wrapUpCode"`
DisconnectType string `json:"disconnectType"`
SegmentType string `json:"SegmentType"`
Q850ResponseCodes []int `json:"q850ResponseCodes"`
Conference bool `json:"conference"`
} `json:"segments"`
Metrics []struct {
Name string `json:"name"`
Value int `json:"value"`
EmitDate string `json:"emitDate"`
} `json:"metrics"`
MediaEndpointStats []struct {
Codecs []string `json:"codecs"`
MinMos float32 `json:"minMos"`
MinRFactor float32 `json:"minRFactor"`
MaxLatencyMs int `json:"maxLatencyMs"`
ReceivedPackets int `json:"receivedPackets"`
} `json:"mediaEndpointStats"`
Recording bool `json:"recording"`
ProtocolCallId string `json:"protocolCallId"`
Provider string `json:"provider"`
} `json:"sessions"`
} `json:"participants"`
}
type NotificationConversationWithAttributes struct {
Address string `json:"address"`
Divisions []struct {
Division struct {
Id string `json:"id"`
SelfUri string `json:"selfUri"`
} `json:"division"`
Entities []struct {
DateDivisionUpdated string `json:"dateDivisionUpdated"`
Id string `json:"id"`
SelfUri string `json:"selfUri"`
} `json:"entities"`
} `json:"divisions"`
ExternalTag string `json:"externalTag"`
Id string `json:"id"`
Participants []struct {
Address string `json:"address"`
Attributes map[string]any `json:"attributes"`
Calls []struct {
AfterCallWorkRequired bool `json:"afterCallWorkRequired"`
Confined bool `json:"confined"`
ConnectedTime string `json:"connectedTime"`
Direction string `json:"direction"`
DisconnectReasons []struct{} `json:"disconnectReasons"`
DisconnectType string `json:"disconnectType"`
DisconnectedTime string `json:"disconnectedTime"`
Held bool `json:"held"`
Id string `json:"id"`
InitialState string `json:"initialState"`
Muted bool `json:"muted"`
Other map[string]any `json:"other"`
PeerId string `json:"peerId"`
Provider string `json:"provider"`
Recording bool `json:"recording"`
RecordingState string `json:"recordingState"`
SecurePause bool `json:"securePause"`
Self map[string]any `json:"self"`
State string `json:"state"`
} `json:"calls"`
ConnectedTime string `json:"connectedTime"`
EndTime string `json:"endTime"`
ExternalContactId string `json:"externalContactId"`
ExternalContactInitialDivisionId string `json:"externalContactInitialDivisionId"`
Id string `json:"id"`
MediaRoles []string `json:"mediaRoles"`
Name string `json:"name"`
Purpose string `json:"purpose"`
QueueId string `json:"queueId"`
Wrapup map[string]any `json:"wrapup"`
WrapupExpected bool `json:"wrapupExpected"`
WrapupRequired bool `json:"wrapupRequired"`
} `json:"participants"`
RecentTransfers []map[string]any `json:"recentTransfers"`
RecordingState string `json:"recordingState"`
SecurePause bool `json:"securePause"`
UtilizationLabelId string `json:"utilizationLabelId"`
} }

View File

@@ -15,6 +15,9 @@ type DBSession struct {
Recording bool Recording bool
RemoteNameDisplayable string RemoteNameDisplayable string
SessionDnis string SessionDnis string
Flow string `gorm:"type:json"`
Segments []DBSegment `gorm:"foreignKey:SessionId;references:Id"`
} }
func (DBSession) TableName() string { func (DBSession) TableName() string {

View File

@@ -33,8 +33,6 @@ func ExtractWithoutAttributes(base models.AnalyticsConversationWithoutAttributes
} }
divisionIdsBytesStr := string(divisionIdsBytes) divisionIdsBytesStr := string(divisionIdsBytes)
currentTime := time.Now()
conversation := models.DBConversation{ conversation := models.DBConversation{
DivisionIds: &divisionIdsBytesStr, DivisionIds: &divisionIdsBytesStr,
End: endTime, End: endTime,
@@ -43,7 +41,6 @@ func ExtractWithoutAttributes(base models.AnalyticsConversationWithoutAttributes
MinRFactor: &base.MediaStatsMinConversationRFactor, MinRFactor: &base.MediaStatsMinConversationRFactor,
OriginatingDirection: &base.OriginatingDirection, OriginatingDirection: &base.OriginatingDirection,
Start: startTime, Start: startTime,
SemiLiveUpdate: &currentTime,
} }
var participants []models.DBParticipant var participants []models.DBParticipant
var sessions []models.DBSession var sessions []models.DBSession
@@ -73,12 +70,17 @@ func ExtractWithoutAttributes(base models.AnalyticsConversationWithoutAttributes
metricsBytes = nil metricsBytes = nil
} }
flowBytes, err := json.Marshal(sess.Flow)
if err != nil {
flowBytes = nil
}
session := models.DBSession{ session := models.DBSession{
Ani: sess.ANI, Ani: sess.ANI,
Direction: sess.Direction, Direction: sess.Direction,
Dnis: sess.DNIS, Dnis: sess.DNIS,
EdgeId: sess.EdgeId, EdgeId: sess.EdgeId,
Id: sess.SessionId, Id: fmt.Sprintf("%s_%s", p.ParticipantId, sess.SessionId),
MediaEndpointStats: string(mediaEndpointStatsBytes), MediaEndpointStats: string(mediaEndpointStatsBytes),
MediaType: sess.MediaType, MediaType: sess.MediaType,
Metrics: string(metricsBytes), Metrics: string(metricsBytes),
@@ -88,6 +90,7 @@ func ExtractWithoutAttributes(base models.AnalyticsConversationWithoutAttributes
Recording: sess.Recording, Recording: sess.Recording,
RemoteNameDisplayable: sess.RemoteNameDisplayable, RemoteNameDisplayable: sess.RemoteNameDisplayable,
SessionDnis: sess.SessionDNIS, SessionDnis: sess.SessionDNIS,
Flow: string(flowBytes),
} }
sessions = append(sessions, session) sessions = append(sessions, session)
@@ -116,7 +119,7 @@ func ExtractWithoutAttributes(base models.AnalyticsConversationWithoutAttributes
SegmentEnd: segmentEnd, SegmentEnd: segmentEnd,
SegmentStart: segmentStart, SegmentStart: segmentStart,
SegmentType: seg.SegmentType, SegmentType: seg.SegmentType,
SessionId: sess.SessionId, SessionId: session.Id,
WrapUpCode: seg.WrapUpCode, WrapUpCode: seg.WrapUpCode,
} }
@@ -129,7 +132,6 @@ func ExtractWithoutAttributes(base models.AnalyticsConversationWithoutAttributes
} }
func ExtractLive(base models.NotificationConversationWithAttributes) (models.DBConversation, []models.DBParticipant, []models.DBCall) { func ExtractLive(base models.NotificationConversationWithAttributes) (models.DBConversation, []models.DBParticipant, []models.DBCall) {
currentTime := time.Now()
conversation := models.DBConversation{ conversation := models.DBConversation{
Id: base.Id, Id: base.Id,
@@ -138,7 +140,6 @@ func ExtractLive(base models.NotificationConversationWithAttributes) (models.DBC
RecordingState: &base.RecordingState, RecordingState: &base.RecordingState,
SecurePause: &base.SecurePause, SecurePause: &base.SecurePause,
UtilizationLabelId: &base.UtilizationLabelId, UtilizationLabelId: &base.UtilizationLabelId,
LiveUpdate: &currentTime,
} }
var participants []models.DBParticipant var participants []models.DBParticipant
@@ -260,128 +261,125 @@ func ExtractLive(base models.NotificationConversationWithAttributes) (models.DBC
} }
func ExtractWithAttributes(base models.AnalyticsConversationWithAttributes) (models.DBConversation, []models.DBParticipant, []models.DBSession, []models.DBSegment) { //func ExtractWithAttributes(base models.AnalyticsConversationWithAttributes) (models.DBConversation, []models.DBParticipant, []models.DBSession, []models.DBSegment) {
//
var startTime *time.Time // var startTime *time.Time
parsedStartTime, err := time.Parse(time.RFC3339, base.ConversationStart) // parsedStartTime, err := time.Parse(time.RFC3339, base.ConversationStart)
if err != nil { // if err != nil {
startTime = nil // startTime = nil
} else { // } else {
startTime = &parsedStartTime // startTime = &parsedStartTime
} // }
//
var endTime *time.Time // var endTime *time.Time
parsedEndTime, err := time.Parse(time.RFC3339, base.ConversationEnd) // parsedEndTime, err := time.Parse(time.RFC3339, base.ConversationEnd)
if err != nil { // if err != nil {
endTime = nil // endTime = nil
} else { // } else {
endTime = &parsedEndTime // endTime = &parsedEndTime
} // }
//
divisionIdsBytes, err := json.Marshal(base.DivisionIds) // divisionIdsBytes, err := json.Marshal(base.DivisionIds)
if err != nil { // if err != nil {
divisionIdsBytes = nil // divisionIdsBytes = nil
} // }
divisionIdsBytesStr := string(divisionIdsBytes) // divisionIdsBytesStr := string(divisionIdsBytes)
//
currentTime := time.Now() // conversation := models.DBConversation{
// DivisionIds: &divisionIdsBytesStr,
conversation := models.DBConversation{ // End: endTime,
DivisionIds: &divisionIdsBytesStr, // Id: base.ConversationId,
End: endTime, // MinMos: &base.MediaStatsMinConversationMos,
Id: base.ConversationId, // MinRFactor: &base.MediaStatsMinConversationRFactor,
MinMos: &base.MediaStatsMinConversationMos, // OriginatingDirection: &base.OriginatingDirection,
MinRFactor: &base.MediaStatsMinConversationRFactor, // Start: startTime,
OriginatingDirection: &base.OriginatingDirection, // }
Start: startTime, // var participants []models.DBParticipant
JobUpdate: &currentTime, // var sessions []models.DBSession
} // var segments []models.DBSegment
var participants []models.DBParticipant //
var sessions []models.DBSession // for _, p := range base.Participants {
var segments []models.DBSegment //
// attributesBytes, err := json.Marshal(p.Attributes)
for _, p := range base.Participants { // if err != nil {
// attributesBytes = nil
attributesBytes, err := json.Marshal(p.Attributes) // }
if err != nil { // attributesBytesStr := string(attributesBytes)
attributesBytes = nil //
} // participant := models.DBParticipant{
attributesBytesStr := string(attributesBytes) // ConnectedTime: nil,
// ConversationId: base.ConversationId,
participant := models.DBParticipant{ // EndTime: nil,
ConnectedTime: nil, // ExternalContactId: &p.ExternalContactId,
ConversationId: base.ConversationId, // Id: p.ParticipantId,
EndTime: nil, // Name: &p.ParticipantName,
ExternalContactId: &p.ExternalContactId, // Purpose: &p.Purpose,
Id: p.ParticipantId, // Attributes: &attributesBytesStr,
Name: &p.ParticipantName, // }
Purpose: &p.Purpose, // participants = append(participants, participant)
Attributes: &attributesBytesStr, //
} // for _, sess := range p.Sessions {
participants = append(participants, participant) // mediaEndpointStatsBytes, err := json.Marshal(sess.MediaEndpointStats)
// if err != nil {
for _, sess := range p.Sessions { // mediaEndpointStatsBytes = nil
mediaEndpointStatsBytes, err := json.Marshal(sess.MediaEndpointStats) // }
if err != nil { //
mediaEndpointStatsBytes = nil // metricsBytes, err := json.Marshal(sess.Metrics)
} // if err != nil {
// metricsBytes = nil
metricsBytes, err := json.Marshal(sess.Metrics) // }
if err != nil { //
metricsBytes = nil // session := models.DBSession{
} // Ani: sess.ANI,
// Direction: sess.Direction,
session := models.DBSession{ // Dnis: sess.DNIS,
Ani: sess.ANI, // EdgeId: sess.EdgeId,
Direction: sess.Direction, // Id: fmt.Sprintf("%s_%s", p.ParticipantId, sess.SessionId),
Dnis: sess.DNIS, // MediaEndpointStats: string(mediaEndpointStatsBytes),
EdgeId: sess.EdgeId, // MediaType: sess.MediaType,
Id: sess.SessionId, // Metrics: string(metricsBytes),
MediaEndpointStats: string(mediaEndpointStatsBytes), // ParticipantId: p.ParticipantId,
MediaType: sess.MediaType, // ProtocolCallId: sess.ProtocolCallId,
Metrics: string(metricsBytes), // Provider: sess.Provider,
ParticipantId: p.ParticipantId, // Recording: sess.Recording,
ProtocolCallId: sess.ProtocolCallId, // RemoteNameDisplayable: sess.RemoteNameDisplayable,
Provider: sess.Provider, // SessionDnis: sess.SessionDnis,
Recording: sess.Recording, // }
RemoteNameDisplayable: sess.RemoteNameDisplayable, // sessions = append(sessions, session)
SessionDnis: sess.SessionDnis, //
} // for _, seg := range sess.Segments {
sessions = append(sessions, session) //
// segmentStart, err := time.Parse(time.RFC3339, seg.SegmentStart)
for _, seg := range sess.Segments { // if err != nil {
// segmentStart = time.Now()
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()
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
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,
segment := models.DBSegment{ // DisconnectType: seg.DisconnectType,
Id: fmt.Sprintf("%s_%s", session.Id, seg.SegmentType), // Q850ResponseCodes: string(q850ResponseCodesBytes),
Conference: seg.Conference, // SegmentEnd: segmentEnd,
DisconnectType: seg.DisconnectType, // SegmentStart: segmentStart,
Q850ResponseCodes: string(q850ResponseCodesBytes), // SegmentType: seg.SegmentType,
SegmentEnd: segmentEnd, // SessionId: sess.SessionId,
SegmentStart: segmentStart, // WrapUpCode: seg.WrapUpCode,
SegmentType: seg.SegmentType, // }
SessionId: sess.SessionId, //
WrapUpCode: seg.WrapUpCode, // segments = append(segments, segment)
} // }
// }
segments = append(segments, segment) // }
} //
} // return conversation, participants, sessions, segments
} //}
return conversation, participants, sessions, segments
}