@@ -52,14 +52,11 @@ async function createTicketLogs(tickets: Ticket[]) {
52
52
const categoryPath = await firstTicket . loadCategoryPath ( ) ;
53
53
const category = _ . last ( categoryPath ) ;
54
54
55
- const fieldVariantMap : Record < string , TicketFieldVariant > = { } ;
55
+ let fieldVariants : TicketFieldVariant [ ] = [ ] ;
56
56
if ( category && category . formId ) {
57
57
const form = await TicketForm . find ( category . formId , { useMasterKey : true } ) ;
58
58
if ( form ) {
59
- const fieldVariants = await form . getFieldVariants ( ) ;
60
- for ( const variant of fieldVariants ) {
61
- fieldVariantMap [ variant . fieldId ] = variant ;
62
- }
59
+ fieldVariants = await form . getFieldVariants ( ) ;
63
60
}
64
61
}
65
62
@@ -78,8 +75,8 @@ async function createTicketLogs(tickets: Ticket[]) {
78
75
} ;
79
76
80
77
const fieldValue = ticketFieldValueByTicketId [ ticket . id ] ;
81
- if ( fieldValue ) {
82
- await fillFields ( log , fieldVariantMap , fieldValue ) ;
78
+ if ( fieldVariants . length && fieldValue ) {
79
+ await fillFields ( log , fieldVariants , fieldValue ) ;
83
80
}
84
81
85
82
await fillReplies ( log , ticket ) ;
@@ -117,18 +114,19 @@ function getHumanReadableFieldValue(
117
114
118
115
async function fillFields (
119
116
log : TicketLog ,
120
- fieldVariants : Record < string , TicketFieldVariant > ,
117
+ fieldVariants : TicketFieldVariant [ ] ,
121
118
fieldValue : TicketFieldValue
122
119
) {
123
- fieldValue . values . forEach ( ( value ) => {
124
- const variant = fieldVariants [ value . field ] ;
125
- if ( variant && variant . field ) {
126
- const humanReadableValue = getHumanReadableFieldValue ( variant . field , variant , value ) ;
120
+ const fieldValueMap = _ . keyBy ( fieldValue . values , ( v ) => v . field ) ;
121
+ fieldVariants . forEach ( ( variant ) => {
122
+ const fieldValue = fieldValueMap [ variant . fieldId ] ;
123
+ if ( fieldValue !== undefined && variant . field ) {
124
+ const humanReadableValue = getHumanReadableFieldValue ( variant . field , variant , fieldValue ) ;
127
125
if ( humanReadableValue !== undefined ) {
128
126
log . fields . push ( {
129
- id : value . field ,
127
+ id : fieldValue . field ,
130
128
title : variant . title ,
131
- value : value . value ,
129
+ value : fieldValue . value ,
132
130
} ) ;
133
131
}
134
132
}
@@ -149,13 +147,13 @@ async function fillReplies(log: TicketLog, ticket: Ticket) {
149
147
} ) ;
150
148
}
151
149
152
- let writeLogs : ( logs : TicketLog [ ] ) => Promise < any > = async ( ) => {
150
+ let writeLogs : ( logs : TicketLog [ ] , dryRun ?: boolean ) => Promise < any > = async ( ) => {
153
151
throw new Error ( 'writeLogs is undefined' ) ;
154
152
} ;
155
153
156
- async function processTickets ( tickets : Ticket [ ] ) {
154
+ async function processTickets ( tickets : Ticket [ ] , dryRun = false ) {
157
155
const logs = await createTicketLogs ( tickets ) ;
158
- await writeLogs ( logs ) ;
156
+ await writeLogs ( logs , dryRun ) ;
159
157
}
160
158
161
159
type JobData = {
@@ -164,11 +162,12 @@ type JobData = {
164
162
endTime ?: string ;
165
163
size ?: number ;
166
164
delay ?: number ;
165
+ dryRun ?: boolean ;
167
166
} ;
168
167
169
168
async function processJob ( job : Job < JobData > ) {
170
169
const {
171
- data : { startTime, endTime, size = 50 , delay = 1000 } ,
170
+ data : { startTime, endTime, size = 50 , delay = 1000 , dryRun } ,
172
171
} = job ;
173
172
174
173
const query = Ticket . queryBuilder ( ) ;
@@ -186,11 +185,11 @@ async function processJob(job: Job<JobData>) {
186
185
return ;
187
186
}
188
187
189
- await processTickets ( tickets ) ;
188
+ await processTickets ( tickets , dryRun ) ;
190
189
191
190
const firstTicket = tickets [ 0 ] ;
192
191
const lastTicket = tickets [ tickets . length - 1 ] ;
193
- console . log ( `[Intelligent Operation] ${ tickets . length } tickets synced, ` , {
192
+ console . log ( `[Intelligent Operation] ${ tickets . length } tickets synced,` , {
194
193
startTime : firstTicket . createdAt ,
195
194
endTime : lastTicket . createdAt ,
196
195
} ) ;
@@ -230,7 +229,7 @@ export default async function (install: Function) {
230
229
apiVersion : '2015-06-01' ,
231
230
} ) ;
232
231
233
- writeLogs = async ( ticketLogs ) => {
232
+ writeLogs = async ( ticketLogs , dryRun ) => {
234
233
const time = Math . floor ( Date . now ( ) / 1000 ) ;
235
234
const logs = ticketLogs . map ( ( ticketLog ) => {
236
235
const contents = Object . entries ( ticketLog ) . map ( ( [ key , value ] ) => ( {
@@ -246,6 +245,12 @@ export default async function (install: Function) {
246
245
logGroup : { logs } ,
247
246
} ;
248
247
248
+ if ( dryRun ) {
249
+ console . log ( '[Intelligent Operation] Put logs param:' ) ;
250
+ console . dir ( param , { depth : 5 } ) ;
251
+ return ;
252
+ }
253
+
249
254
return new Promise ( ( resolve , reject ) => {
250
255
sls . putLogs ( param , ( err : any , data : any ) => {
251
256
if ( err ) {
0 commit comments