mirror of
https://github.com/anchore/syft.git
synced 2026-11-02 23:46:35 +01:00
replace panics with logging
This commit is contained in:
@@ -7,6 +7,7 @@ import (
|
||||
)
|
||||
|
||||
type Analyzer interface {
|
||||
Name() string
|
||||
// TODO: add ID / Name for analyze for uniquely identifying this analyzer type
|
||||
SelectFiles([]*tree.FileTree) []file.Reference
|
||||
// NOTE: one of the errors which is returned is "IterationNeeded", which indicates to the driver to
|
||||
|
||||
@@ -4,6 +4,7 @@ import (
|
||||
"github.com/anchore/imgbom/imgbom/analyzer/dpkg"
|
||||
"github.com/anchore/imgbom/imgbom/pkg"
|
||||
"github.com/anchore/imgbom/imgbom/scope"
|
||||
"github.com/anchore/imgbom/internal/log"
|
||||
"github.com/anchore/stereoscope/pkg/file"
|
||||
"github.com/hashicorp/go-multierror"
|
||||
)
|
||||
@@ -26,6 +27,7 @@ type controller struct {
|
||||
}
|
||||
|
||||
func (c *controller) add(a Analyzer) {
|
||||
log.Debugf("adding analyzer: %s", a.Name())
|
||||
c.analyzers = append(c.analyzers, a)
|
||||
}
|
||||
|
||||
@@ -36,6 +38,7 @@ func (c *controller) analyze(s scope.Scope) (pkg.Catalog, error) {
|
||||
// ask analyzers for files to extract from the image tar
|
||||
for _, a := range c.analyzers {
|
||||
fileSelection = append(fileSelection, a.SelectFiles(s.Trees)...)
|
||||
log.Debugf("analyzer '%s' selected '%d' files", a.Name(), len(fileSelection))
|
||||
}
|
||||
|
||||
// fetch contents for requested selection by analyzers
|
||||
@@ -47,11 +50,15 @@ func (c *controller) analyze(s scope.Scope) (pkg.Catalog, error) {
|
||||
// perform analysis, accumulating errors for each failed analysis
|
||||
var errs error
|
||||
for _, a := range c.analyzers {
|
||||
packages, err := a.Analyze(contents)
|
||||
// TODO: check for multiple rounds of analyses by Iterate error
|
||||
packages, err := a.Analyze(contents)
|
||||
if err != nil {
|
||||
errs = multierror.Append(errs, err)
|
||||
continue
|
||||
}
|
||||
|
||||
log.Debugf("analyzer '%s' discovered '%d' packages", a.Name(), len(packages))
|
||||
|
||||
for _, p := range packages {
|
||||
catalog.Add(p)
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import (
|
||||
"strings"
|
||||
|
||||
"github.com/anchore/imgbom/imgbom/pkg"
|
||||
"github.com/anchore/imgbom/internal/log"
|
||||
"github.com/anchore/stereoscope/pkg/file"
|
||||
"github.com/anchore/stereoscope/pkg/tree"
|
||||
)
|
||||
@@ -16,6 +17,10 @@ func NewAnalyzer() *Analyzer {
|
||||
return &Analyzer{}
|
||||
}
|
||||
|
||||
func (a *Analyzer) Name() string {
|
||||
return "dpkg-analyzer"
|
||||
}
|
||||
|
||||
func (a *Analyzer) SelectFiles(trees []*tree.FileTree) []file.Reference {
|
||||
files := make([]file.Reference, 0)
|
||||
for _, tree := range trees {
|
||||
@@ -36,14 +41,26 @@ func (a *Analyzer) Analyze(contents map[file.Reference]string) ([]pkg.Package, e
|
||||
for _, reference := range a.selectedFiles {
|
||||
content, ok := contents[reference]
|
||||
if !ok {
|
||||
// TODO: this needs handling
|
||||
panic(reference)
|
||||
// TODO: test case
|
||||
log.WithFields(map[string]interface{}{
|
||||
"path": reference.Path,
|
||||
"id": reference.ID(),
|
||||
"analyzer": a.Name(),
|
||||
}).Errorf("analyzer file content missing")
|
||||
|
||||
continue
|
||||
}
|
||||
|
||||
entries, err := ParseEntries(strings.NewReader(content))
|
||||
if err != nil {
|
||||
// TODO: punt for now, we need to handle this
|
||||
panic(err)
|
||||
// TODO: test case
|
||||
log.WithFields(map[string]interface{}{
|
||||
"path": reference.Path,
|
||||
"id": reference.ID(),
|
||||
"analyzer": a.Name(),
|
||||
}).Errorf("analyzer failed to parse entries: %w", err)
|
||||
|
||||
continue
|
||||
}
|
||||
for _, entry := range entries {
|
||||
packages = append(packages, pkg.Package{
|
||||
@@ -55,5 +72,6 @@ func (a *Analyzer) Analyze(contents map[file.Reference]string) ([]pkg.Package, e
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
return packages, nil
|
||||
}
|
||||
|
||||
@@ -54,7 +54,7 @@ func TestSinglePackage(t *testing.T) {
|
||||
defer func() {
|
||||
err := file.Close()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
t.Fatal("closing file failed:", err)
|
||||
}
|
||||
}()
|
||||
|
||||
@@ -123,7 +123,7 @@ func TestMultiplePackages(t *testing.T) {
|
||||
defer func() {
|
||||
err := file.Close()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
t.Fatal("closing file failed:", err)
|
||||
}
|
||||
}()
|
||||
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
package imgbom
|
||||
|
||||
// note: must be a single word, all lowercase
|
||||
const LibraryName = "imgbom"
|
||||
@@ -8,3 +8,9 @@ import (
|
||||
func SetLogger(logger logger.Logger) {
|
||||
log.Log = logger
|
||||
}
|
||||
|
||||
func SetLoggerWithTags(logger logger.Logger, tags map[string]interface{}) {
|
||||
log.Log = logger.WithFields(map[string]interface{}{
|
||||
"source": LibraryName,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ import (
|
||||
"io"
|
||||
|
||||
"github.com/anchore/imgbom/imgbom/pkg"
|
||||
"github.com/anchore/imgbom/internal/log"
|
||||
stereoscopeImg "github.com/anchore/stereoscope/pkg/image"
|
||||
)
|
||||
|
||||
@@ -88,8 +89,13 @@ func (pres *Presenter) Present(output io.Writer, img *stereoscopeImg.Image, cata
|
||||
for idx, src := range p.Source {
|
||||
fileMetadata, err := img.FileCatalog.Get(src)
|
||||
if err != nil {
|
||||
// TODO: replace
|
||||
panic(err)
|
||||
// TODO: test case
|
||||
log.WithFields(map[string]interface{}{
|
||||
"path": src.Path,
|
||||
"id": src.ID(),
|
||||
"presenter": "json",
|
||||
}).Errorf("could not get metadata from catalog")
|
||||
|
||||
}
|
||||
|
||||
srcObj := source{
|
||||
@@ -105,8 +111,9 @@ func (pres *Presenter) Present(output io.Writer, img *stereoscopeImg.Image, cata
|
||||
|
||||
bytes, err := json.Marshal(&doc)
|
||||
if err != nil {
|
||||
// TODO: replace
|
||||
panic(err)
|
||||
log.WithFields(map[string]interface{}{
|
||||
"presenter": "json",
|
||||
}).Errorf("failed to marshal json: %w", err)
|
||||
}
|
||||
|
||||
_, err = output.Write(bytes)
|
||||
|
||||
Reference in New Issue
Block a user