Documentation
¶
Index ¶
- func RegisterRoutes(api huma.API, h *Handler, featureMiddleware huma.Middlewares)
- func WriteVulnerabilitiesCSV(w io.Writer, items iter.Seq2[types.VulnerabilityWithImage, error]) error
- type ExportVulnerabilitiesInput
- type GetScanResultInput
- type GetScanSummariesInput
- type GetScanSummaryInput
- type Handler
- func (h *Handler) ExportVulnerabilities(ctx context.Context, input *ExportVulnerabilitiesInput) (*huma.StreamResponse, error)
- func (h *Handler) GetEnvironmentSummary(ctx context.Context, input *types.EnvironmentInput) (*handlerutil.Out[types.EnvironmentVulnerabilitySummary], error)
- func (h *Handler) GetRiskOverview(ctx context.Context, input *types.EnvironmentInput) (*handlerutil.Out[types.RiskOverview], error)
- func (h *Handler) GetScanResult(ctx context.Context, input *GetScanResultInput) (*handlerutil.Out[types.VulnerabilityScanResult], error)
- func (h *Handler) GetScanSummaries(ctx context.Context, input *GetScanSummariesInput) (*handlerutil.Out[types.VulnerabilityScanSummariesResponse], error)
- func (h *Handler) GetScanSummary(ctx context.Context, input *GetScanSummaryInput) (*handlerutil.Out[types.VulnerabilityScanSummary], error)
- func (h *Handler) ListAllVulnerabilities(ctx context.Context, input *ListAllVulnerabilitiesInput) (*handlerutil.Page[types.VulnerabilityWithImage], error)
- func (h *Handler) ListAllVulnerabilityImageOptions(ctx context.Context, input *ListAllVulnerabilityImageOptionsInput) (*handlerutil.Out[[]string], error)
- func (h *Handler) ListImageVulnerabilities(ctx context.Context, input *ListImageVulnerabilitiesInput) (*handlerutil.Page[types.Vulnerability], error)
- type ListAllVulnerabilitiesInput
- type ListAllVulnerabilityImageOptionsInput
- type ListImageVulnerabilitiesInput
- type Service
- func (s *Service) ActionableCountExcludingIgnored(ctx context.Context) (int, error)
- func (s *Service) ActiveItemsQuery(ctx context.Context, db *gorm.DB, envID string, params *pagination.QueryParams) *gorm.DB
- func (s *Service) AggregateEnvironmentSummary(ctx context.Context) (types.ApiResponse[types.EnvironmentVulnerabilitySummary], error)
- func (s *Service) AggregateImageOptions(ctx context.Context) (types.ApiResponse[[]string], error)
- func (s *Service) AggregateRiskOverview(ctx context.Context) (types.ApiResponse[types.RiskOverview], error)
- func (s *Service) AggregateVulnerabilities(ctx context.Context, params pagination.QueryParams) (types.Paginated[types.VulnerabilityWithImage], error)
- func (s *Service) ExportVulnerabilities(ctx context.Context, envID string, params pagination.QueryParams) (iter.Seq2[types.VulnerabilityWithImage, error], error)
- func (s *Service) GetEnvironmentSummary(ctx context.Context) (*types.EnvironmentVulnerabilitySummary, error)
- func (s *Service) GetRiskOverview(ctx context.Context, envID string) (*types.RiskOverview, error)
- func (s *Service) GetScanResult(ctx context.Context, envID, imageID string) (*types.VulnerabilityScanResult, error)
- func (s *Service) GetScanSummariesByImageIDs(ctx context.Context, imageIDs []string) (map[string]*types.VulnerabilityScanSummary, error)
- func (s *Service) GetScanSummary(ctx context.Context, imageID string) (*types.VulnerabilityScanSummary, error)
- func (s *Service) InvalidateRiskOverview()
- func (s *Service) ListAllVulnerabilities(ctx context.Context, envID string, params pagination.QueryParams) ([]types.VulnerabilityWithImage, pagination.Response, error)
- func (s *Service) ListAllVulnerabilityImageOptions(ctx context.Context, severityFilter string) ([]string, error)
- func (s *Service) ListVulnerabilities(ctx context.Context, imageID string, params pagination.QueryParams) ([]types.Vulnerability, pagination.Response, error)
- func (s *Service) RecordRiskSnapshot(ctx context.Context) error
- type ServiceParams
- type VulnerabilityRiskSnapshot
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func RegisterRoutes ¶
func RegisterRoutes(api huma.API, h *Handler, featureMiddleware huma.Middlewares)
RegisterRoutes registers the vulnerability results and risk endpoints behind featureMiddleware.
func WriteVulnerabilitiesCSV ¶
func WriteVulnerabilitiesCSV(w io.Writer, items iter.Seq2[types.VulnerabilityWithImage, error]) error
WriteVulnerabilitiesCSV streams items to w as a BOM-prefixed, CRLF-terminated CSV with formula-safe cells.
Types ¶
type ExportVulnerabilitiesInput ¶
type ExportVulnerabilitiesInput struct {
EnvironmentID string `path:"id" doc:"Environment ID"`
Search string `query:"search" doc:"Search query"`
Sort string `query:"sort" doc:"Sort field"`
Order string `query:"order" doc:"Sort order"`
Severity string `query:"severity" doc:"Comma-separated severity filter"`
ImageName string `query:"imageName" doc:"Filter by image/repo name (substring)"`
Ignored bool `query:"ignored" doc:"Export only ignored vulnerabilities instead of active ones"`
FixAvailable bool `query:"fixAvailable" doc:"Export only vulnerabilities with a fixed version"`
}
ExportVulnerabilitiesInput carries the list filters accepted by the CSV export.
type GetScanResultInput ¶
type GetScanSummariesInput ¶
type GetScanSummariesInput struct {
EnvironmentID string `path:"id" doc:"Environment ID"`
Body types.VulnerabilityScanSummariesRequest `doc:"Batch scan summary request"`
}
type GetScanSummaryInput ¶
type Handler ¶
type Handler struct {
// contains filtered or unexported fields
}
Handler serves the vulnerability results and risk endpoints.
func NewHandler ¶
func (*Handler) ExportVulnerabilities ¶
func (h *Handler) ExportVulnerabilities(ctx context.Context, input *ExportVulnerabilitiesInput) (*huma.StreamResponse, error)
ExportVulnerabilities streams every vulnerability matching the filters as a CSV download.
func (*Handler) GetEnvironmentSummary ¶
func (h *Handler) GetEnvironmentSummary(ctx context.Context, input *types.EnvironmentInput) (*handlerutil.Out[types.EnvironmentVulnerabilitySummary], error)
GetEnvironmentSummary returns aggregated vulnerability info for the current environment.
func (*Handler) GetRiskOverview ¶
func (h *Handler) GetRiskOverview(ctx context.Context, input *types.EnvironmentInput) (*handlerutil.Out[types.RiskOverview], error)
GetRiskOverview returns the vulnerability risk overview for the environment.
func (*Handler) GetScanResult ¶
func (h *Handler) GetScanResult(ctx context.Context, input *GetScanResultInput) (*handlerutil.Out[types.VulnerabilityScanResult], error)
GetScanResult retrieves the vulnerability scan result for an image.
func (*Handler) GetScanSummaries ¶
func (h *Handler) GetScanSummaries(ctx context.Context, input *GetScanSummariesInput) (*handlerutil.Out[types.VulnerabilityScanSummariesResponse], error)
GetScanSummaries retrieves scan summaries for a list of image IDs.
func (*Handler) GetScanSummary ¶
func (h *Handler) GetScanSummary(ctx context.Context, input *GetScanSummaryInput) (*handlerutil.Out[types.VulnerabilityScanSummary], error)
GetScanSummary retrieves just the vulnerability summary for an image.
func (*Handler) ListAllVulnerabilities ¶
func (h *Handler) ListAllVulnerabilities(ctx context.Context, input *ListAllVulnerabilitiesInput) (*handlerutil.Page[types.VulnerabilityWithImage], error)
func (*Handler) ListAllVulnerabilityImageOptions ¶
func (h *Handler) ListAllVulnerabilityImageOptions(ctx context.Context, input *ListAllVulnerabilityImageOptionsInput) (*handlerutil.Out[[]string], error)
ListAllVulnerabilityImageOptions returns available image options for vulnerability filtering.
func (*Handler) ListImageVulnerabilities ¶
func (h *Handler) ListImageVulnerabilities(ctx context.Context, input *ListImageVulnerabilitiesInput) (*handlerutil.Page[types.Vulnerability], error)
ListImageVulnerabilities returns a paginated list of vulnerabilities for an image.
type ListAllVulnerabilitiesInput ¶
type ListAllVulnerabilitiesInput struct {
EnvironmentID string `path:"id" doc:"Environment ID"`
Search string `query:"search" doc:"Search query"`
Sort string `query:"sort" doc:"Sort field"`
Order string `query:"order" doc:"Sort order"`
Severity string `query:"severity" doc:"Comma-separated severity filter"`
ImageName string `query:"imageName" doc:"Filter by image/repo name (substring)"`
Start int `query:"start" doc:"Start offset"`
Limit int `query:"limit" doc:"Limit"`
Ignored bool `query:"ignored" doc:"Show only ignored vulnerabilities instead of active ones"`
FixAvailable bool `query:"fixAvailable" doc:"Show only vulnerabilities with a fixed version"`
}
type ListImageVulnerabilitiesInput ¶
type ListImageVulnerabilitiesInput struct {
EnvironmentID string `path:"id" doc:"Environment ID"`
ImageID string `path:"imageId" doc:"Image ID"`
Search string `query:"search" doc:"Search query"`
Sort string `query:"sort" doc:"Sort field"`
Order string `query:"order" doc:"Sort order"`
Severity string `query:"severity" doc:"Comma-separated severity filter"`
Start int `query:"start" doc:"Start offset"`
Limit int `query:"limit" doc:"Limit"`
}
type Service ¶
type Service struct {
// contains filtered or unexported fields
}
Service answers vulnerability result, listing, export, and risk queries.
func NewService ¶
func NewService(p ServiceParams) *Service
func (*Service) ActionableCountExcludingIgnored ¶
ActionableCountExcludingIgnored counts critical and high severity vulnerabilities across all completed scans, excluding any that have been ignored. This is used by the dashboard to show an accurate action item count that reflects ignore decisions.
Without ignore records the count comes from the indexed critical_count/ high_count columns; with ignore records it is a single COUNT over the per-CVE item rows.
func (*Service) ActiveItemsQuery ¶
func (s *Service) ActiveItemsQuery(ctx context.Context, db *gorm.DB, envID string, params *pagination.QueryParams) *gorm.DB
ActiveItemsQuery returns the filtered, ordered finding query the list and export use, so bulk ignore operations act on exactly the listed findings.
func (*Service) AggregateEnvironmentSummary ¶
func (s *Service) AggregateEnvironmentSummary(ctx context.Context) (types.ApiResponse[types.EnvironmentVulnerabilitySummary], error)
func (*Service) AggregateImageOptions ¶
func (*Service) AggregateRiskOverview ¶
func (s *Service) AggregateRiskOverview(ctx context.Context) (types.ApiResponse[types.RiskOverview], error)
func (*Service) AggregateVulnerabilities ¶
func (s *Service) AggregateVulnerabilities(ctx context.Context, params pagination.QueryParams) (types.Paginated[types.VulnerabilityWithImage], error)
func (*Service) ExportVulnerabilities ¶
func (s *Service) ExportVulnerabilities(ctx context.Context, envID string, params pagination.QueryParams) (iter.Seq2[types.VulnerabilityWithImage, error], error)
ExportVulnerabilities opens a cursor over every vulnerability matching params and yields rows one at a time in the requested order.
func (*Service) GetEnvironmentSummary ¶
func (s *Service) GetEnvironmentSummary(ctx context.Context) (*types.EnvironmentVulnerabilitySummary, error)
GetEnvironmentSummary returns aggregated vulnerability counts across all images.
func (*Service) GetRiskOverview ¶
GetRiskOverview returns the environment patch priority with its trend, drivers, prioritized images and top findings. Concurrent callers share one build, and the result is reused briefly. Callers must not mutate it.
func (*Service) GetScanResult ¶
func (s *Service) GetScanResult(ctx context.Context, envID, imageID string) (*types.VulnerabilityScanResult, error)
GetScanResult retrieves the most recent scan result for an image, with risk insights for completed scans.
func (*Service) GetScanSummariesByImageIDs ¶
func (s *Service) GetScanSummariesByImageIDs(ctx context.Context, imageIDs []string) (map[string]*types.VulnerabilityScanSummary, error)
GetScanSummariesByImageIDs retrieves scan summaries for multiple images
func (*Service) GetScanSummary ¶
func (s *Service) GetScanSummary(ctx context.Context, imageID string) (*types.VulnerabilityScanSummary, error)
GetScanSummary retrieves just the summary for an image (for list views)
func (*Service) InvalidateRiskOverview ¶
func (s *Service) InvalidateRiskOverview()
InvalidateRiskOverview drops cached risk overviews. Call it after a scan or ignore change commits.
func (*Service) ListAllVulnerabilities ¶
func (s *Service) ListAllVulnerabilities(ctx context.Context, envID string, params pagination.QueryParams) ([]types.VulnerabilityWithImage, pagination.Response, error)
ListAllVulnerabilities returns a paginated list of vulnerabilities across all scanned images.
func (*Service) ListAllVulnerabilityImageOptions ¶
func (s *Service) ListAllVulnerabilityImageOptions(ctx context.Context, severityFilter string) ([]string, error)
ListAllVulnerabilityImageOptions returns unique image names (or image IDs when name is empty) for vulnerability filtering, optionally constrained by severity.
func (*Service) ListVulnerabilities ¶
func (s *Service) ListVulnerabilities(ctx context.Context, imageID string, params pagination.QueryParams) ([]types.Vulnerability, pagination.Response, error)
ListVulnerabilities returns a paginated, filtered list of vulnerabilities for an image.
type ServiceParams ¶
type ServiceParams struct {
DB *database.DB
Config *config.Config
DockerService *docker.DockerClientService
SettingsService *settings.SettingsService
LoadResult func(ctx context.Context, imageID string) (*types.VulnerabilityScanResult, error)
EnsureItems func(ctx context.Context, imageID string) error
RefreshSummary func(ctx context.Context, summary *types.VulnerabilityScanSummary)
ThreatIntelStatus func(ctx context.Context) types.ThreatIntelStatus
FilterIgnored func(ctx context.Context, envID, imageID string, vulns []types.Vulnerability) ([]types.Vulnerability, error)
}
type VulnerabilityRiskSnapshot ¶
type VulnerabilityRiskSnapshot struct {
CreatedAt time.Time `gorm:"column:created_at;autoCreateTime"`
ScoreAverage *float64 `gorm:"column:score_average"`
ScoreWeight *float64 `gorm:"column:score_weight"`
ScorePeak *float64 `gorm:"column:score_peak"`
ExploitedRunningImages *int `gorm:"column:exploited_running_images"`
OverdueExploitedRunningImages *int `gorm:"column:overdue_exploited_running_images"`
UpdatedAt *time.Time `gorm:"column:updated_at"`
SnapshotDate string `gorm:"column:snapshot_date;primaryKey"`
RiskBand string `gorm:"column:risk_band"`
ScoringVersion int `gorm:"column:scoring_version"`
RiskScore int `gorm:"column:risk_score"`
CriticalCount int `gorm:"column:critical_count"`
HighCount int `gorm:"column:high_count"`
MediumCount int `gorm:"column:medium_count"`
LowCount int `gorm:"column:low_count"`
UnknownCount int `gorm:"column:unknown_count"`
FindingsCount int `gorm:"column:findings_count"`
KnownExploitedCount int `gorm:"column:known_exploited_count"`
OverdueKnownExploitedCount int `gorm:"column:overdue_known_exploited_count"`
HighEPSSCount int `gorm:"column:high_epss_count"`
ExposedCriticalHighCount int `gorm:"column:exposed_critical_high_count"`
FixableCount int `gorm:"column:fixable_count"`
ImagesScanned int `gorm:"column:images_scanned"`
ImagesTotal int `gorm:"column:images_total"`
ScoredImages int `gorm:"column:scored_images"`
}
VulnerabilityRiskSnapshot stores one day of environment patch priority for the trend.
func (VulnerabilityRiskSnapshot) TableName ¶
func (VulnerabilityRiskSnapshot) TableName() string