@@ -134,6 +134,9 @@ func newfileUploadRequest(uri string, params map[string]string, paramName, path
134
134
}
135
135
136
136
req , err := http .NewRequest ("POST" , uri , body )
137
+ if err != nil {
138
+ return nil , err
139
+ }
137
140
req .Header .Set ("Content-Type" , writer .FormDataContentType ())
138
141
return req , err
139
142
}
@@ -145,35 +148,67 @@ func streamImageBuilderLogs(
145
148
imageBuildId string ,
146
149
) {
147
150
defer body .Close ()
151
+
148
152
var sb strings.Builder
153
+ var lastLine string
149
154
reader := bufio .NewReader (body )
150
- // first := true
155
+ logCh := make (chan string )
156
+
157
+ go func () {
158
+ for {
159
+ line , err := reader .ReadBytes ('\n' )
160
+ lastLine = string (line )
161
+ logCh <- lastLine
162
+ if err != nil {
163
+ if err == io .EOF {
164
+ close (logCh )
165
+ break
166
+ }
167
+
168
+ logrus .Errorf ("cannot stream build logs: %s" , err )
169
+ streamImageBuildEvent (messages , userLogin , imageBuildId , "error" , "" )
170
+ return
171
+ }
172
+ }
173
+ }()
174
+
175
+ ticker := time .NewTicker (5 * time .Second )
176
+ defer func () {
177
+ ticker .Stop ()
178
+ }()
179
+
151
180
for {
152
- line , err := reader .ReadBytes ('\n' )
153
- sb .WriteString (string (line ))
154
- if err != nil {
155
- if err == io .EOF {
181
+ logEnded := false
182
+
183
+ select {
184
+ case logLine , ok := <- logCh :
185
+ if ! ok {
186
+ logEnded = true
187
+ streamImageBuildEvent (messages , userLogin , imageBuildId , "running" , sb .String ())
188
+ sb .Reset ()
156
189
break
157
190
}
191
+ sb .WriteString (string (logLine ))
158
192
159
- logrus .Errorf ("cannot stream build logs: %s" , err )
160
- streamImageBuildEvent (messages , userLogin , imageBuildId , "error" , sb .String ())
161
- return
193
+ if sb .Len () > 4000 {
194
+ streamImageBuildEvent (messages , userLogin , imageBuildId , "running" , sb .String ())
195
+ sb .Reset ()
196
+ }
197
+ case <- ticker .C :
198
+ streamImageBuildEvent (messages , userLogin , imageBuildId , "running" , sb .String ())
199
+ sb .Reset ()
162
200
}
163
201
164
- // if first || sb.Len() > 300 {
165
- streamImageBuildEvent (messages , userLogin , imageBuildId , "running" , sb .String ())
166
- sb .Reset ()
167
- // first = false
168
- // }
202
+ if logEnded {
203
+ break
204
+ }
169
205
}
170
206
171
- lastLine := sb .String ()
172
207
if strings .HasSuffix (lastLine , "IMAGE BUILT" ) {
173
- streamImageBuildEvent (messages , userLogin , imageBuildId , "success" , lastLine )
208
+ streamImageBuildEvent (messages , userLogin , imageBuildId , "success" , "" )
174
209
return
175
210
} else {
176
- streamImageBuildEvent (messages , userLogin , imageBuildId , "notBuilt" , lastLine )
211
+ streamImageBuildEvent (messages , userLogin , imageBuildId , "notBuilt" , "" )
177
212
return
178
213
}
179
214
}
@@ -386,22 +421,56 @@ func streamLogs(kubeEnv *agent.KubeEnv,
386
421
var sb strings.Builder
387
422
var lastLine string
388
423
reader := bufio .NewReader (podLogs )
424
+ logCh := make (chan string )
425
+
426
+ go func () {
427
+ for {
428
+ line , err := reader .ReadBytes ('\n' )
429
+ lastLine = string (line )
430
+ logCh <- lastLine
431
+ if err != nil {
432
+ if err == io .EOF {
433
+ close (logCh )
434
+ break
435
+ }
436
+
437
+ logrus .Errorf ("cannot stream build logs: %s" , err )
438
+ streamImageBuildEvent (messages , userLogin , imageBuildId , "error" , "" )
439
+ break
440
+ }
441
+ }
442
+ }()
443
+
444
+ ticker := time .NewTicker (5 * time .Second )
445
+ defer func () {
446
+ ticker .Stop ()
447
+ }()
448
+
389
449
for {
390
- line , err := reader .ReadBytes ('\n' )
391
- sb .WriteString (string (line ))
392
- if err != nil {
393
- if err == io .EOF {
450
+ logEnded := false
451
+
452
+ select {
453
+ case logLine , ok := <- logCh :
454
+ if ! ok {
455
+ logEnded = true
456
+ streamImageBuildEvent (messages , userLogin , imageBuildId , "running" , sb .String ())
457
+ sb .Reset ()
394
458
break
395
459
}
460
+ sb .WriteString (string (logLine ))
396
461
397
- logrus .Errorf ("cannot stream build logs: %s" , err )
398
- streamImageBuildEvent (messages , userLogin , imageBuildId , "error" , "" )
399
- break
462
+ if sb .Len () > 4000 {
463
+ streamImageBuildEvent (messages , userLogin , imageBuildId , "running" , sb .String ())
464
+ sb .Reset ()
465
+ }
466
+ case <- ticker .C :
467
+ streamImageBuildEvent (messages , userLogin , imageBuildId , "running" , sb .String ())
468
+ sb .Reset ()
400
469
}
401
470
402
- lastLine = string ( line )
403
- streamImageBuildEvent ( messages , userLogin , imageBuildId , "running" , sb . String ())
404
- sb . Reset ()
471
+ if logEnded {
472
+ break
473
+ }
405
474
}
406
475
407
476
if strings .Contains (lastLine , "Pushed" ) {
0 commit comments