Skip to content

Commit 6efaee3

Browse files
committed
Faster fetch
Signed-off-by: David Gageot <david.gageot@docker.com>
1 parent e3eb713 commit 6efaee3

1 file changed

Lines changed: 10 additions & 21 deletions

File tree

‎pkg/modelsdev/store.go‎

Lines changed: 10 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"context"
55
"encoding/json"
66
"fmt"
7-
"io"
87
"log/slog"
98
"net/http"
109
"os"
@@ -158,16 +157,12 @@ func loadDatabase(cacheFile string) (*Database, error) {
158157
}
159158

160159
func fetchFromAPI() (*Database, error) {
161-
client := &http.Client{
162-
Timeout: 30 * time.Second,
163-
}
164-
165160
req, err := http.NewRequestWithContext(context.Background(), http.MethodGet, ModelsDevAPIURL, http.NoBody)
166161
if err != nil {
167162
return nil, fmt.Errorf("failed to create request: %w", err)
168163
}
169164

170-
resp, err := client.Do(req)
165+
resp, err := (&http.Client{Timeout: 30 * time.Second}).Do(req)
171166
if err != nil {
172167
return nil, fmt.Errorf("failed to fetch from API: %w", err)
173168
}
@@ -177,33 +172,27 @@ func fetchFromAPI() (*Database, error) {
177172
return nil, fmt.Errorf("API returned status %d", resp.StatusCode)
178173
}
179174

180-
body, err := io.ReadAll(resp.Body)
181-
if err != nil {
182-
return nil, fmt.Errorf("failed to read response body: %w", err)
183-
}
184-
185175
var providers map[string]Provider
186-
if err := json.Unmarshal(body, &providers); err != nil {
187-
return nil, fmt.Errorf("failed to unmarshal response: %w", err)
176+
if err := json.NewDecoder(resp.Body).Decode(&providers); err != nil {
177+
return nil, fmt.Errorf("failed to decode response: %w", err)
188178
}
189179

190-
database := &Database{
180+
return &Database{
191181
Providers: providers,
192182
UpdatedAt: time.Now(),
193-
}
194-
195-
return database, nil
183+
}, nil
196184
}
197185

198186
func loadFromCache(cacheFile string) (*CachedData, error) {
199-
data, err := os.ReadFile(cacheFile)
187+
f, err := os.Open(cacheFile)
200188
if err != nil {
201-
return nil, fmt.Errorf("failed to read cache file: %w", err)
189+
return nil, fmt.Errorf("failed to open cache file: %w", err)
202190
}
191+
defer f.Close()
203192

204193
var cached CachedData
205-
if err := json.Unmarshal(data, &cached); err != nil {
206-
return nil, fmt.Errorf("failed to unmarshal cached data: %w", err)
194+
if err := json.NewDecoder(f).Decode(&cached); err != nil {
195+
return nil, fmt.Errorf("failed to decode cached data: %w", err)
207196
}
208197

209198
return &cached, nil

0 commit comments

Comments
 (0)