Skip to content

Commit ef5b0f1

Browse files
committed
feat: support to print the progress when oci download
1 parent b6188a0 commit ef5b0f1

File tree

3 files changed

+59
-2
lines changed

3 files changed

+59
-2
lines changed

pkg/downloader/oci.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,8 +169,11 @@ func (d *defaultOCIDownloader) getLatestTag(image, authToken string) (tag string
169169
} else {
170170
defer resp.Body.Close()
171171

172+
progressReader := NewProgressReader(resp.Body)
173+
progressReader.SetLength(resp.ContentLength)
174+
172175
var data []byte
173-
if data, err = io.ReadAll(resp.Body); err != nil {
176+
if data, err = io.ReadAll(progressReader); err != nil {
174177
return
175178
}
176179

pkg/downloader/progress.go

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package downloader
2+
3+
import (
4+
"fmt"
5+
"io"
6+
"os"
7+
)
8+
9+
type ProgressReader interface {
10+
io.Reader
11+
Withoutput(io.Writer)
12+
SetLength(int64)
13+
}
14+
15+
type defaultProgressReader struct {
16+
reader io.Reader
17+
w io.Writer
18+
total int64
19+
current int
20+
}
21+
22+
var _ io.Reader = (*defaultProgressReader)(nil)
23+
24+
func NewProgressReader(r io.Reader) ProgressReader {
25+
return &defaultProgressReader{
26+
reader: r,
27+
w: os.Stdout,
28+
}
29+
}
30+
31+
func (r *defaultProgressReader) Read(p []byte) (count int, err error) {
32+
count, err = r.reader.Read(p)
33+
if r.total > 0 {
34+
if count > 0 {
35+
r.current += count
36+
fmt.Println(count, "==", r.total, "==", r.current)
37+
fmt.Fprintf(r.w, "%d\n", int64(r.current*100)/r.total)
38+
}
39+
} else {
40+
fmt.Fprintf(r.w, "%d\n", count)
41+
}
42+
return
43+
}
44+
45+
func (r *defaultProgressReader) Withoutput(w io.Writer) {
46+
r.w = w
47+
}
48+
49+
func (r *defaultProgressReader) SetLength(len int64) {
50+
r.total = len
51+
}

pkg/server/store_ext_manager.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ package server
1818
import (
1919
"context"
2020
"errors"
21-
"github.com/linuxsuren/api-testing/pkg/util/home"
2221
"io"
2322
"net/http"
2423
"os"
@@ -27,6 +26,8 @@ import (
2726
"syscall"
2827
"time"
2928

29+
"github.com/linuxsuren/api-testing/pkg/util/home"
30+
3031
"github.com/linuxsuren/api-testing/pkg/downloader"
3132
"github.com/linuxsuren/api-testing/pkg/logging"
3233

@@ -124,6 +125,8 @@ func (s *storeExtManager) Start(name, socket string) (err error) {
124125

125126
func (s *storeExtManager) startPlugin(socketURL, plugin, pluginName string) (err error) {
126127
socketFile := strings.TrimPrefix(socketURL, s.socketPrefix)
128+
_ = os.RemoveAll(socketFile) // always deleting the socket file to avoid start failing
129+
127130
s.filesNeedToBeRemoved = append(s.filesNeedToBeRemoved, socketFile)
128131
s.extStatusMap[pluginName] = true
129132
if err = s.execer.RunCommandWithIO(plugin, "", os.Stdout, os.Stderr, s.processChan, "--socket", socketFile); err != nil {

0 commit comments

Comments
 (0)