Log and skip adapter ping error when retrieve adapter capability (#20314)

Signed-off-by: stonezdj <stone.zhang@broadcom.com>
This commit is contained in:
stonezdj(Daojun Zhang) 2024-04-22 17:43:04 +08:00 committed by GitHub
parent ea3cd06171
commit b7d4bf0d07
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 38 additions and 12 deletions

View File

@ -37,6 +37,8 @@ const (
proScannerMetaKey = "projectScanner"
statusUnhealthy = "unhealthy"
statusHealthy = "healthy"
// RetrieveCapFailMsg the message indicate failed to retrieve the scanner capabilities
RetrieveCapFailMsg = "failed to retrieve scanner capabilities, error %v"
)
// DefaultController is a singleton api controller for plug scanners
@ -80,8 +82,9 @@ func (bc *basicController) ListRegistrations(ctx context.Context, query *q.Query
return nil, errors.Wrap(err, "api controller: list registrations")
}
for _, r := range l {
if err := bc.appendCap(ctx, r); err != nil {
return nil, err
if err := bc.RetrieveCap(ctx, r); err != nil {
log.Warningf(RetrieveCapFailMsg, err)
return l, nil
}
}
return l, nil
@ -129,13 +132,14 @@ func (bc *basicController) GetRegistration(ctx context.Context, registrationUUID
if r == nil {
return nil, nil
}
if err := bc.appendCap(ctx, r); err != nil {
return nil, err
if err := bc.RetrieveCap(ctx, r); err != nil {
log.Warningf(RetrieveCapFailMsg, err)
return r, nil
}
return r, nil
}
func (bc *basicController) appendCap(ctx context.Context, r *scanner.Registration) error {
func (bc *basicController) RetrieveCap(ctx context.Context, r *scanner.Registration) error {
mt, err := bc.Ping(ctx, r)
if err != nil {
logger.Errorf("Get registration error: %s", err)

View File

@ -154,4 +154,7 @@ type Controller interface {
// *v1.ScannerAdapterMetadata : metadata returned by the scanner if successfully ping
// error : non nil error if any errors occurred
GetMetadata(ctx context.Context, registrationUUID string) (*v1.ScannerAdapterMetadata, error)
// RetrieveCap retrieve scanner capabilities
RetrieveCap(ctx context.Context, r *scanner.Registration) error
}

View File

@ -590,18 +590,16 @@ func (a *projectAPI) GetScannerOfProject(ctx context.Context, params operation.G
return a.SendError(ctx, err)
}
scanner, err := a.scannerCtl.GetRegistrationByProject(ctx, p.ProjectID)
s, err := a.scannerCtl.GetRegistrationByProject(ctx, p.ProjectID)
if err != nil {
return a.SendError(ctx, err)
}
if scanner != nil {
metadata, err := a.scannerCtl.GetMetadata(ctx, scanner.UUID)
if err != nil {
return a.SendError(ctx, err)
if s != nil {
if err := a.scannerCtl.RetrieveCap(ctx, s); err != nil {
log.Warningf(scanner.RetrieveCapFailMsg, err)
}
scanner.Capabilities = metadata.ConvertCapability()
}
return operation.NewGetScannerOfProjectOK().WithPayload(model.NewScannerRegistration(scanner).ToSwagger(ctx))
return operation.NewGetScannerOfProjectOK().WithPayload(model.NewScannerRegistration(s).ToSwagger(ctx))
}
func (a *projectAPI) ListScannerCandidatesOfProject(ctx context.Context, params operation.ListScannerCandidatesOfProjectParams) middleware.Responder {

View File

@ -89,6 +89,7 @@ func (suite *ProjectTestSuite) TestGetScannerOfProject() {
mock.OnAnything(suite.projectCtl, "Get").Return(suite.project, nil).Once()
mock.OnAnything(suite.scannerCtl, "GetRegistrationByProject").Return(nil, nil).Once()
mock.OnAnything(suite.scannerCtl, "GetMetadata").Return(suite.metadata, nil).Once()
mock.OnAnything(suite.scannerCtl, "RetrieveCap").Return(nil).Once()
res, err := suite.Get("/projects/1/scanner")
suite.NoError(err)
suite.Equal(200, res.StatusCode)
@ -98,6 +99,7 @@ func (suite *ProjectTestSuite) TestGetScannerOfProject() {
mock.OnAnything(suite.projectCtl, "Get").Return(suite.project, nil).Once()
mock.OnAnything(suite.scannerCtl, "GetRegistrationByProject").Return(suite.reg, nil).Once()
mock.OnAnything(suite.scannerCtl, "GetMetadata").Return(suite.metadata, nil).Once()
mock.OnAnything(suite.scannerCtl, "RetrieveCap").Return(nil).Once()
var scanner scanner.Registration
res, err := suite.GetJSON("/projects/1/scanner", &scanner)
suite.NoError(err)
@ -110,6 +112,7 @@ func (suite *ProjectTestSuite) TestGetScannerOfProject() {
mock.OnAnything(suite.projectCtl, "Get").Return(suite.project, nil).Once()
mock.OnAnything(suite.scannerCtl, "GetMetadata").Return(suite.metadata, nil).Once()
mock.OnAnything(suite.scannerCtl, "GetRegistrationByProject").Return(suite.reg, nil).Once()
mock.OnAnything(suite.scannerCtl, "RetrieveCap").Return(nil).Once()
var scanner scanner.Registration
res, err := suite.GetJSON("/projects/library/scanner", &scanner)

View File

@ -281,6 +281,24 @@ func (_m *Controller) RegistrationExists(ctx context.Context, registrationUUID s
return r0
}
// RetrieveCap provides a mock function with given fields: ctx, r
func (_m *Controller) RetrieveCap(ctx context.Context, r *scanner.Registration) error {
ret := _m.Called(ctx, r)
if len(ret) == 0 {
panic("no return value specified for RetrieveCap")
}
var r0 error
if rf, ok := ret.Get(0).(func(context.Context, *scanner.Registration) error); ok {
r0 = rf(ctx, r)
} else {
r0 = ret.Error(0)
}
return r0
}
// SetDefaultRegistration provides a mock function with given fields: ctx, registrationUUID
func (_m *Controller) SetDefaultRegistration(ctx context.Context, registrationUUID string) error {
ret := _m.Called(ctx, registrationUUID)