Documentation
¶
Index ¶
- type Filter
- type Repository
- type ScanSession
- func (s *ScanSession) Cancel() error
- func (s *ScanSession) Complete(findingsTotal, findingsNew, findingsFixed int, ...) error
- func (s *ScanSession) Fail(errorMessage string) error
- func (s *ScanSession) IsFinished() bool
- func (s *ScanSession) IsRunning() bool
- func (s *ScanSession) QualityGatePassed() bool
- func (s *ScanSession) Queue() error
- func (s *ScanSession) SetAgent(agentID shared.ID)
- func (s *ScanSession) SetAsset(assetID shared.ID)
- func (s *ScanSession) SetGitContext(commitSha, branch, baseCommitSha string)
- func (s *ScanSession) SetMetadata(key string, value any)
- func (s *ScanSession) SetQualityGateResult(result *scanprofile.QualityGateResult)
- func (s *ScanSession) SetScanProfile(profileID shared.ID)
- func (s *ScanSession) SetScannerInfo(version, scannerType string)
- func (s *ScanSession) Start() error
- func (s *ScanSession) Timeout(errorMessage string) error
- type Stats
- type Status
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Filter ¶
type Filter struct {
TenantID *shared.ID
AgentID *shared.ID
AssetID *shared.ID
ScannerName string
AssetType string
AssetValue string
Branch string
Status *Status
Since *time.Time
Until *time.Time
}
Filter defines the filter options for listing scan sessions.
type Repository ¶
type Repository interface {
// Create creates a new scan session.
Create(ctx context.Context, session *ScanSession) error
// GetByID retrieves a scan session by ID.
GetByID(ctx context.Context, id shared.ID) (*ScanSession, error)
// GetByTenantAndID retrieves a scan session by tenant and ID.
GetByTenantAndID(ctx context.Context, tenantID, id shared.ID) (*ScanSession, error)
// Update updates a scan session.
Update(ctx context.Context, session *ScanSession) error
// List lists scan sessions with filtering and pagination.
List(ctx context.Context, filter Filter, page pagination.Pagination) (pagination.Result[*ScanSession], error)
// Delete deletes a scan session by ID.
Delete(ctx context.Context, id shared.ID) error
// FindBaseline finds the most recent completed scan for incremental scanning.
// Returns the baseline commit SHA from the last completed scan on the same branch/asset.
FindBaseline(ctx context.Context, tenantID shared.ID, assetType, assetValue, branch string) (string, error)
// GetStats returns scan session statistics for a tenant.
GetStats(ctx context.Context, tenantID shared.ID, since time.Time) (*Stats, error)
// ListRunning lists all running scans for a tenant.
ListRunning(ctx context.Context, tenantID shared.ID) ([]*ScanSession, error)
}
Repository defines the interface for scan session persistence.
type ScanSession ¶
type ScanSession struct {
ID shared.ID
TenantID shared.ID
AgentID *shared.ID
// Scanner info
ScannerName string
ScannerVersion string
ScannerType string // sast, sca, secret, container, etc.
// Asset info
AssetType string // repository, container, host, etc.
AssetValue string // repo URL, image name, hostname
AssetID *shared.ID
// Git context (for repository scans)
CommitSha string
Branch string
BaseCommitSha string // Baseline commit for incremental scan
// Status
Status Status
ErrorMessage string
// Results summary
FindingsTotal int
FindingsNew int
FindingsFixed int
FindingsBySeverity map[string]int
// Timing
StartedAt *time.Time
CompletedAt *time.Time
DurationMs int64
// Metadata
Metadata map[string]any
// Scan Profile and Quality Gate
ScanProfileID *shared.ID // Reference to the scan profile used
QualityGateResult *scanprofile.QualityGateResult // Quality gate evaluation result
// Audit
CreatedAt time.Time
UpdatedAt time.Time
}
ScanSession represents an individual scan execution from an agent. Unlike Scan (which is a configuration/definition), ScanSession tracks the actual execution lifecycle of a scan.
func NewScanSession ¶
func NewScanSession(tenantID shared.ID, scannerName, assetType, assetValue string) (*ScanSession, error)
NewScanSession creates a new scan session.
func (*ScanSession) Cancel ¶
func (s *ScanSession) Cancel() error
Cancel marks the scan as canceled.
func (*ScanSession) Complete ¶
func (s *ScanSession) Complete(findingsTotal, findingsNew, findingsFixed int, findingsBySeverity map[string]int) error
Complete marks the scan as completed.
func (*ScanSession) Fail ¶
func (s *ScanSession) Fail(errorMessage string) error
Fail marks the scan as failed.
func (*ScanSession) IsFinished ¶
func (s *ScanSession) IsFinished() bool
IsFinished returns true if the scan has finished (completed, failed, canceled, or timeout).
func (*ScanSession) IsRunning ¶
func (s *ScanSession) IsRunning() bool
IsRunning returns true if the scan is currently running.
func (*ScanSession) QualityGatePassed ¶
func (s *ScanSession) QualityGatePassed() bool
QualityGatePassed returns true if quality gate passed or was not evaluated.
func (*ScanSession) Queue ¶
func (s *ScanSession) Queue() error
Queue sets the scan to queued status (waiting for agent assignment).
func (*ScanSession) SetAgent ¶
func (s *ScanSession) SetAgent(agentID shared.ID)
SetAgent sets the agent executing this scan.
func (*ScanSession) SetAsset ¶
func (s *ScanSession) SetAsset(assetID shared.ID)
SetAsset links this session to an asset.
func (*ScanSession) SetGitContext ¶
func (s *ScanSession) SetGitContext(commitSha, branch, baseCommitSha string)
SetGitContext sets git-related context.
func (*ScanSession) SetMetadata ¶
func (s *ScanSession) SetMetadata(key string, value any)
SetMetadata sets custom metadata.
func (*ScanSession) SetQualityGateResult ¶
func (s *ScanSession) SetQualityGateResult(result *scanprofile.QualityGateResult)
SetQualityGateResult stores the quality gate evaluation result.
func (*ScanSession) SetScanProfile ¶
func (s *ScanSession) SetScanProfile(profileID shared.ID)
SetScanProfile links this session to a scan profile.
func (*ScanSession) SetScannerInfo ¶
func (s *ScanSession) SetScannerInfo(version, scannerType string)
SetScannerInfo sets scanner version and type.
func (*ScanSession) Timeout ¶
func (s *ScanSession) Timeout(errorMessage string) error
Timeout marks the scan as timed out.
type Stats ¶
type Stats struct {
Total int64 `json:"total"`
Pending int64 `json:"pending"`
Running int64 `json:"running"`
Completed int64 `json:"completed"`
Failed int64 `json:"failed"`
Canceled int64 `json:"canceled"`
ByScanner map[string]int64 `json:"by_scanner"`
ByAsset map[string]int64 `json:"by_asset_type"`
// Findings stats
TotalFindings int64 `json:"total_findings"`
TotalFindingsNew int64 `json:"total_findings_new"`
// Timing stats
AvgDurationMs int64 `json:"avg_duration_ms"`
}
Stats represents scan session statistics.
type Status ¶
type Status string
Status represents the scan session status.
const ( StatusQueued Status = "queued" // Scan is queued, waiting for agent assignment StatusPending Status = "pending" // Scan is assigned to agent, waiting to start StatusRunning Status = "running" // Scan is actively running StatusCompleted Status = "completed" // Scan completed successfully StatusFailed Status = "failed" // Scan failed with error StatusCanceled Status = "canceled" // Scan was manually canceled StatusTimeout Status = "timeout" // Scan exceeded time limit )
func (Status) IsTerminal ¶
IsTerminal returns true if the status is a terminal (final) state.