Skip to content
This repository was archived by the owner on Mar 9, 2025. It is now read-only.

Commit daf3150

Browse files
authored
Storing SHA and Repository on all events (#817)
1 parent ef49366 commit daf3150

File tree

32 files changed

+1540
-338
lines changed

32 files changed

+1540
-338
lines changed

cmd/agent/imagebuild.go

+95-26
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,9 @@ func newfileUploadRequest(uri string, params map[string]string, paramName, path
134134
}
135135

136136
req, err := http.NewRequest("POST", uri, body)
137+
if err != nil {
138+
return nil, err
139+
}
137140
req.Header.Set("Content-Type", writer.FormDataContentType())
138141
return req, err
139142
}
@@ -145,35 +148,67 @@ func streamImageBuilderLogs(
145148
imageBuildId string,
146149
) {
147150
defer body.Close()
151+
148152
var sb strings.Builder
153+
var lastLine string
149154
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+
151180
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()
156189
break
157190
}
191+
sb.WriteString(string(logLine))
158192

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()
162200
}
163201

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+
}
169205
}
170206

171-
lastLine := sb.String()
172207
if strings.HasSuffix(lastLine, "IMAGE BUILT") {
173-
streamImageBuildEvent(messages, userLogin, imageBuildId, "success", lastLine)
208+
streamImageBuildEvent(messages, userLogin, imageBuildId, "success", "")
174209
return
175210
} else {
176-
streamImageBuildEvent(messages, userLogin, imageBuildId, "notBuilt", lastLine)
211+
streamImageBuildEvent(messages, userLogin, imageBuildId, "notBuilt", "")
177212
return
178213
}
179214
}
@@ -386,22 +421,56 @@ func streamLogs(kubeEnv *agent.KubeEnv,
386421
var sb strings.Builder
387422
var lastLine string
388423
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+
389449
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()
394458
break
395459
}
460+
sb.WriteString(string(logLine))
396461

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()
400469
}
401470

402-
lastLine = string(line)
403-
streamImageBuildEvent(messages, userLogin, imageBuildId, "running", sb.String())
404-
sb.Reset()
471+
if logEnded {
472+
break
473+
}
405474
}
406475

407476
if strings.Contains(lastLine, "Pushed") {

cmd/image-builder/main.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ func main() {
4747
})
4848
r.Post("/build-image", uploadFile)
4949

50-
err = http.ListenAndServe(":9000", r)
50+
err = http.ListenAndServe(":9999", r)
5151
log.Error(err)
5252
}
5353

pkg/dashboard/model/event.go

+4
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,15 @@ type Status int
2222
const (
2323
Success Status = iota
2424
Failure
25+
Pending
2526
)
2627

2728
func (s Status) String() string {
2829
switch s {
2930
case Success:
3031
return "success"
32+
case Pending:
33+
return "pending"
3134
case Failure:
3235
return "failure"
3336
default:
@@ -48,6 +51,7 @@ type Result struct {
4851
GitopsRepo string
4952

5053
TriggeredDeployRequestID string `json:"triggeredDeployRequestID"`
54+
Log string `json:"log"`
5155
}
5256

5357
type Event struct {

pkg/dashboard/notifications/discord_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ func TestSendingGitopsDeployMessage(t *testing.T) {
139139
Version: *version,
140140
},
141141
TriggeredBy: "Gimlet",
142-
Status: 1,
142+
Status: model.Failure,
143143
StatusDesc: "",
144144
GitopsRef: "76ab7d611242f7c6742f0ab662133e02b2ba2b1c",
145145
GitopsRepo: "testrepo",

0 commit comments

Comments
 (0)