Skip to content

Commit e396794

Browse files
committed
#2327 Stream uploaded file to s3 bucket instead of loading it all upfront into memory
Signed-off-by: Jannik Hollenbach <jannik.hollenbach@iteratec.com>
1 parent 135bcc2 commit e396794

1 file changed

Lines changed: 25 additions & 14 deletions

File tree

lurker/main.go

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,9 @@
55
package main
66

77
import (
8-
"bytes"
98
"context"
109
"flag"
1110
"fmt"
12-
"io/ioutil"
1311
"log"
1412
"net/http"
1513
"net/http/httputil"
@@ -66,18 +64,29 @@ func main() {
6664
}
6765

6866
func uploadFile(path, url string) error {
69-
fileBytes, err := ioutil.ReadFile(path)
70-
size := len(fileBytes)
71-
log.Printf("File has a size of %d bytes", size)
67+
file, err := os.Open(path)
7268
if err != nil {
73-
log.Println("Failed to read file")
74-
log.Fatal(err)
69+
log.Printf("Failed to open file: %v", err)
70+
return err
7571
}
76-
req, err := http.NewRequest("PUT", url, bytes.NewReader(fileBytes))
72+
defer file.Close()
73+
74+
fileInfo, err := file.Stat()
7775
if err != nil {
78-
log.Fatal(err)
76+
log.Printf("Failed to get file stats: %v", err)
77+
return err
78+
}
79+
size := fileInfo.Size()
80+
log.Printf("Scan result file has a size of %d bytes", size)
81+
82+
// Create a new file upload request
83+
req, err := http.NewRequest("PUT", url, file)
84+
if err != nil {
85+
log.Fatalf("Failed to create request: %v", err)
86+
return err
7987
}
8088

89+
req.ContentLength = size
8190
client := &http.Client{}
8291

8392
res, err := client.Do(req)
@@ -86,22 +95,24 @@ func uploadFile(path, url string) error {
8695
}
8796
defer res.Body.Close()
8897

89-
if res.StatusCode < 300 {
98+
// Check the response status code
99+
if res.StatusCode >= 200 && res.StatusCode < 300 {
90100
// all good
91101
return nil
92102
}
93103

94104
log.Printf("File upload returned non 2xx status code (%d)", res.StatusCode)
95105

96-
bytes, err := httputil.DumpResponse(res, true)
106+
// Dump response for debugging purposes
107+
resultBytes, err := httputil.DumpResponse(res, true)
97108
if err != nil {
98109
log.Fatal(errors.Wrap(err, "Failed to dump out failed requests to upload scan report to the s3 bucket"))
99110
}
100111

101-
log.Println("Failed Request:")
102-
log.Println(string(bytes))
112+
log.Println("Response of Failed Request:")
113+
log.Println(string(resultBytes))
103114

104-
return fmt.Errorf("Lurker failed to upload scan result file. File upload returned non 2xx status code (%d)", res.StatusCode)
115+
return fmt.Errorf("lurker failed to upload scan result file. File upload returned non 2xx status code (%d)", res.StatusCode)
105116
}
106117

107118
func waitForMainContainerToEnd(container, pod, namespace string) {

0 commit comments

Comments
 (0)