99package csaf
1010
1111import (
12+ "context"
1213 "encoding/csv"
1314 "fmt"
1415 "io"
15- "log"
1616 "log/slog"
1717 "net/http"
1818 "net/url"
@@ -91,7 +91,7 @@ func (daf DirectoryAdvisoryFile) LogValue() slog.Value {
9191// advisory file names from a given provider metadata.
9292type AdvisoryFileProcessor struct {
9393 AgeAccept func (time.Time ) bool
94- Log func (format string , args ... any )
94+ Log func (loglevel slog. Level , format string , args ... any )
9595 client util.Client
9696 expr * util.PathEval
9797 doc any
@@ -131,16 +131,16 @@ func (afp *AdvisoryFileProcessor) Process(
131131) error {
132132 lg := afp .Log
133133 if lg == nil {
134- lg = func (format string , args ... any ) {
135- log . Printf ( "AdvisoryFileProcessor.Process: " + format , args ... )
134+ lg = func (loglevel slog. Level , format string , args ... any ) {
135+ slog . Log ( context . Background (), loglevel , "AdvisoryFileProcessor.Process: " + format , args ... )
136136 }
137137 }
138138
139139 // Check if we have ROLIE feeds.
140140 rolie , err := afp .expr .Eval (
141141 "$.distributions[*].rolie.feeds" , afp .doc )
142142 if err != nil {
143- lg ("rolie check failed: %v \n " , err )
143+ lg (slog . LevelError , "rolie check failed" , "err " , err )
144144 return err
145145 }
146146
@@ -152,7 +152,7 @@ func (afp *AdvisoryFileProcessor) Process(
152152 if err := util .ReMarshalJSON (& feeds , rolie ); err != nil {
153153 return err
154154 }
155- lg ("Found %d ROLIE feed(s). \n " , len (feeds ))
155+ lg (slog . LevelInfo , "Found ROLIE feed(s)" , "length " , len (feeds ))
156156
157157 for _ , feed := range feeds {
158158 if err := afp .processROLIE (feed , fn ); err != nil {
@@ -168,12 +168,12 @@ func (afp *AdvisoryFileProcessor) Process(
168168 var dirURLs []string
169169
170170 if err != nil {
171- lg ("extracting directory URLs failed: %v \n " , err )
171+ lg (slog . LevelError , "extracting directory URLs failed" , "err " , err )
172172 } else {
173173 var ok bool
174174 dirURLs , ok = util .AsStrings (directoryURLs )
175175 if ! ok {
176- lg ("directory_urls are not strings. \n " )
176+ lg (slog . LevelError , "directory_urls are not strings" )
177177 }
178178 }
179179
@@ -209,9 +209,8 @@ func (afp *AdvisoryFileProcessor) Process(
209209// prefixed by baseURL/.
210210func (afp * AdvisoryFileProcessor ) loadChanges (
211211 baseURL string ,
212- lg func (string , ... any ),
212+ lg func (slog. Level , string , ... any ),
213213) ([]AdvisoryFile , error ) {
214-
215214 base , err := url .Parse (baseURL )
216215 if err != nil {
217216 return nil , err
@@ -244,12 +243,12 @@ func (afp *AdvisoryFileProcessor) loadChanges(
244243 return nil , err
245244 }
246245 if len (r ) < 2 {
247- lg ("%q has not enough columns in line %d " , line )
246+ lg (slog . LevelError , "Not enough columns" , " line" , line )
248247 continue
249248 }
250249 t , err := time .Parse (time .RFC3339 , r [timeColumn ])
251250 if err != nil {
252- lg ("%q has an invalid time stamp in line %d: %v" , changesURL , line , err )
251+ lg (slog . LevelError , "Invalid time stamp in line" , "url" , changesURL , " line" , line , "err" , err )
253252 continue
254253 }
255254 // Apply date range filtering.
@@ -258,7 +257,7 @@ func (afp *AdvisoryFileProcessor) loadChanges(
258257 }
259258 path := r [pathColumn ]
260259 if _ , err := url .Parse (path ); err != nil {
261- lg ("%q contains an invalid URL %q in line %d" , changesURL , path , line )
260+ lg (slog . LevelError , "Contains an invalid URL" , "url" , changesURL , " path" , path , "line" , line )
262261 continue
263262 }
264263
@@ -279,39 +278,39 @@ func (afp *AdvisoryFileProcessor) processROLIE(
279278 }
280279 up , err := url .Parse (string (* feed .URL ))
281280 if err != nil {
282- log . Printf ("Invalid URL %s in feed: %v." , * feed .URL , err )
281+ slog . Error ("Invalid URL in feed" , "feed" , * feed .URL , "err" , err )
283282 continue
284283 }
285284 feedURL := afp .base .ResolveReference (up )
286- log . Printf ( "Feed URL: %s \n " , feedURL )
285+ slog . Info ( "Got feed URL" , "feed " , feedURL )
287286
288287 fb , err := util .BaseURL (feedURL )
289288 if err != nil {
290- log . Printf ( "error: Invalid feed base URL '%s': %v \n " , fb , err )
289+ slog . Error ( " Invalid feed base URL" , "url" , fb , "err" , err )
291290 continue
292291 }
293292 feedBaseURL , err := url .Parse (fb )
294293 if err != nil {
295- log . Printf ( "error: Cannot parse feed base URL '%s': %v \n " , fb , err )
294+ slog . Error ( " Cannot parse feed base URL" , "url" , fb , "err" , err )
296295 continue
297296 }
298297
299298 res , err := afp .client .Get (feedURL .String ())
300299 if err != nil {
301- log . Printf ( "error: Cannot get feed '%s' \n " , err )
300+ slog . Error ( " Cannot get feed" , "err " , err )
302301 continue
303302 }
304303 if res .StatusCode != http .StatusOK {
305- log . Printf ( "error: Fetching %s failed. Status code %d (%s) " ,
306- feedURL , res .StatusCode , res .Status )
304+ slog . Error ( " Fetching failed" ,
305+ "url" , feedURL , "status_code" , res .StatusCode , "status" , res .Status )
307306 continue
308307 }
309308 rfeed , err := func () (* ROLIEFeed , error ) {
310309 defer res .Body .Close ()
311310 return LoadROLIEFeed (res .Body )
312311 }()
313312 if err != nil {
314- log . Printf ("Loading ROLIE feed failed: %v. " , err )
313+ slog . Error ("Loading ROLIE feed failed" , "err " , err )
315314 continue
316315 }
317316
@@ -323,7 +322,7 @@ func (afp *AdvisoryFileProcessor) processROLIE(
323322 }
324323 p , err := url .Parse (u )
325324 if err != nil {
326- log . Printf ( "error: Invalid URL '%s': %v" , u , err )
325+ slog . Error ( " Invalid URL" , "url" , u , "err" , err )
327326 return ""
328327 }
329328 return feedBaseURL .ResolveReference (p ).String ()
0 commit comments