query

package
v3.0.0-...-a8f5813 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 4, 2026 License: BSD-3-Clause Imports: 40 Imported by: 0

Documentation

Index

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 GetScanResultInput struct {
	EnvironmentID string `path:"id" doc:"Environment ID"`
	ImageID       string `path:"imageId" doc:"Image ID"`
}

type GetScanSummariesInput

type GetScanSummariesInput struct {
	EnvironmentID string                                  `path:"id" doc:"Environment ID"`
	Body          types.VulnerabilityScanSummariesRequest `doc:"Batch scan summary request"`
}

type GetScanSummaryInput

type GetScanSummaryInput struct {
	EnvironmentID string `path:"id" doc:"Environment ID"`
	ImageID       string `path:"imageId" doc:"Image ID"`
}

type Handler

type Handler struct {
	// contains filtered or unexported fields
}

Handler serves the vulnerability results and risk endpoints.

func NewHandler

func NewHandler(service *Service) *Handler

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

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

GetScanResult retrieves the vulnerability scan result for an image.

func (*Handler) GetScanSummaries

GetScanSummaries retrieves scan summaries for a list of image IDs.

func (*Handler) GetScanSummary

GetScanSummary retrieves just the vulnerability summary for an image.

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 ListAllVulnerabilityImageOptionsInput

type ListAllVulnerabilityImageOptionsInput struct {
	EnvironmentID string `path:"id" doc:"Environment ID"`
	Severity      string `query:"severity" doc:"Comma-separated severity filter"`
}

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

func (s *Service) ActionableCountExcludingIgnored(ctx context.Context) (int, error)

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 (s *Service) AggregateImageOptions(ctx context.Context) (types.ApiResponse[[]string], error)

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

func (s *Service) GetRiskOverview(ctx context.Context, envID string) (*types.RiskOverview, error)

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.

func (*Service) RecordRiskSnapshot

func (s *Service) RecordRiskSnapshot(ctx context.Context) error

RecordRiskSnapshot upserts today's environment risk snapshot and prunes snapshots past retention.

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

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL