runner

package
v1.3.0 Latest Latest
Warning

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

Go to latest
Published: Sep 4, 2026 License: MIT Imports: 52 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var CanonicalDescriptions = map[string]string{
	"A01":  "UNSAFE_SQL_CONCATENATION",
	"A02":  "MISSING_DEFER_CLOSE",
	"A03":  "UNBOUNDED_CONTEXT",
	"A04":  "UNSAFE_ORDER_BY",
	"A05":  "AUDIT_LOG_IMMUTABILITY",
	"A06":  "RUNTIME_DDL",
	"A07":  "ERROR_LEAK",
	"A08":  "TX_EXTERNAL_IO",
	"A09":  "ADVISORY_LOCK",
	"A10":  "ISOLATION_LEVEL",
	"A11":  "DESTRUCTIVE_MIGRATION",
	"A12":  "TIMEOUT_CONFIG",
	"A13":  "MISSING_DOWN_MIGRATION",
	"A14":  "FORBIDDEN_SELECT_STAR",
	"A15":  "FORBIDDEN_DDL_APP_ROLE_GRANT",
	"A16":  "MAX_CONNS_CONFIG",
	"A17":  "FORBIDDEN_QUERY_IN_LOOP",
	"A18":  "MISSING_ROWS_ERR_CHECK",
	"A19":  "UNBOUNDED_QUERY_LIMIT",
	"A20":  "PARAM_LIMIT_65535",
	"A21":  "UNBOUNDED_ROW_LOCK_BLOCKING",
	"A22":  "SERIALIZATION_FAILURE_RETRY",
	"A23":  "TRANSACTION_TIMEOUT_CONFIG",
	"A24":  "TENANT_ISOLATION_LEAK",
	"A25":  "EXPENSIVE_CPU_IN_TRANSACTION",
	"A26":  "LIKE_WILDCARD_INJECTION",
	"A27":  "NON_CONCURRENT_INDEX_CREATION",
	"A28":  "TABLE_LOCKING_CONSTRAINT_ADDITION",
	"A29":  "UNINDEXED_FOREIGN_KEY",
	"A30":  "TIMESTAMP_WITHOUT_TIMEZONE",
	"E001": "UNABLE_TO_ANALYZE_MIGRATION",
}

CanonicalDescriptions provides standardized descriptions for standard Argus rules.

View Source
var RuleAliases = map[string]string{
	"UNSAFE_SQL_CONCATENATION":          "ARGUS-A01",
	"MISSING_DEFER_CLOSE":               "ARGUS-A02",
	"UNBOUNDED_CONTEXT":                 "ARGUS-A03",
	"UNSAFE_ORDER_BY":                   "ARGUS-A04",
	"UNSAFE_DYNAMIC_ORDERBY":            "ARGUS-A04",
	"AUDIT_LOG_IMMUTABILITY":            "ARGUS-A05",
	"FORBIDDEN_AUDIT_MUTATION":          "ARGUS-A05",
	"RUNTIME_DDL":                       "ARGUS-A06",
	"RUNTIME_DDL_EXECUTION":             "ARGUS-A06",
	"ERROR_LEAK":                        "ARGUS-A07",
	"DATABASE_ERROR_LEAK":               "ARGUS-A07",
	"TX_EXTERNAL_IO":                    "ARGUS-A08",
	"TRANSACTION_BLOCKING_IO":           "ARGUS-A08",
	"ADVISORY_LOCK":                     "ARGUS-A09",
	"UNSAFE_ADVISORY_LOCK":              "ARGUS-A09",
	"ISOLATION_LEVEL":                   "ARGUS-A10",
	"WEAK_ISOLATION_LEVEL":              "ARGUS-A10",
	"DESTRUCTIVE_MIGRATION":             "ARGUS-A11",
	"TIMEOUT_CONFIG":                    "ARGUS-A12",
	"TIMEOUT_CONFIG_MISSING":            "ARGUS-A12",
	"MISSING_DOWN_MIGRATION":            "ARGUS-A13",
	"FORBIDDEN_SELECT_STAR":             "ARGUS-A14",
	"FORBIDDEN_DDL_APP_ROLE_GRANT":      "ARGUS-A15",
	"MAX_CONNS_CONFIG":                  "ARGUS-A16",
	"UNBOUNDED_MAX_CONNS":               "ARGUS-A16",
	"FORBIDDEN_QUERY_IN_LOOP":           "ARGUS-A17",
	"ROWS_ERR":                          "ARGUS-A18",
	"MISSING_ROWS_ERR_CHECK":            "ARGUS-A18",
	"UNCHECKED_ROWS_ERROR":              "ARGUS-A18",
	"UNBOUNDED_QUERY_LIMIT":             "ARGUS-A19",
	"UNBOUNDED_HIGH_CARDINALITY_QUERY":  "ARGUS-A19",
	"PARAM_LIMIT_65535":                 "ARGUS-A20",
	"UNBOUNDED_BATCH_PARAMS":            "ARGUS-A20",
	"WIRE_PARAM_LIMIT":                  "ARGUS-A20",
	"UNBOUNDED_ROW_LOCK_BLOCKING":       "ARGUS-A21",
	"BLOCKING_ROW_LOCK":                 "ARGUS-A21",
	"LOCK_CONVOY":                       "ARGUS-A21",
	"SERIALIZATION_FAILURE_RETRY":       "ARGUS-A22",
	"MISSING_SERIALIZABLE_RETRY":        "ARGUS-A22",
	"RETRY_TRANSACTION":                 "ARGUS-A22",
	"TRANSACTION_TIMEOUT_CONFIG":        "ARGUS-A23",
	"MISSING_TX_TIMEOUT":                "ARGUS-A23",
	"TX_TIMEOUT_GUC":                    "ARGUS-A23",
	"TENANT_ISOLATION_LEAK":             "ARGUS-A24",
	"EXPENSIVE_CPU_IN_TRANSACTION":      "ARGUS-A25",
	"EXPENSIVE_CPU_IN_TX":               "ARGUS-A25",
	"LIKE_WILDCARD_INJECTION":           "ARGUS-A26",
	"NON_CONCURRENT_INDEX_CREATION":     "ARGUS-A27",
	"TABLE_LOCKING_CONSTRAINT_ADDITION": "ARGUS-A28",
	"UNINDEXED_FOREIGN_KEY":             "ARGUS-A29",
	"TIMESTAMP_WITHOUT_TIMEZONE":        "ARGUS-A30",
	"UNABLE_TO_ANALYZE_MIGRATION":       "ARGUS-E001",
}

RuleAliases maps scanner rule identifiers and descriptive names to standardized ARGUS-Axx rule codes.

Functions

func CalculateCheckedComponents

func CalculateCheckedComponents(id string, querySites, migrationFiles, totalFiles int) int

CalculateCheckedComponents determines the relevant component count for a rule.

func CountParameters

func CountParameters(sql string) int

CountParameters returns the count of $1, $2, ... placeholders in SQL query.

func GenerateMarkdownReport

func GenerateMarkdownReport(result *AuditResult, rootDir string) string

GenerateMarkdownReport creates the standardized markdown report from AuditResult.

func GetRuleDescription added in v1.2.0

func GetRuleDescription(ruleCode string) string

GetRuleDescription retrieves the canonical uppercase identifier for a rule.

func NormalizeRuleCode added in v1.2.0

func NormalizeRuleCode(raw string) string

NormalizeRuleCode standardizes raw rule names, aliases, or identifiers to "ARGUS-Axx".

Types

type AuditConfig

type AuditConfig struct {
	RootDir       string
	ScanDirs      []string
	MigrationDirs []string
	Config        *config.Config
	Analyzers     []*analysis.Analyzer
	Context       context.Context
	FS            fs.FS
}

AuditConfig defines directory scan targets and options.

type AuditResult

type AuditResult struct {
	Timestamp                  time.Time
	ScannedFiles               int
	ScannedGoFiles             int
	ScannedMigrationFiles      int
	VerifiedQuerySites         int
	VerifiedParameterizedSites int
	AttachedRules              []RuleAuditInfo
	Issues                     []Issue
	Score                      float64
	Grade                      string
}

AuditResult aggregates metrics and issues for reporting.

func RunAudit

func RunAudit(rootDir string) (*AuditResult, error)

RunAudit scans default repository targets and produces an AuditResult.

func RunAuditWithConfig

func RunAuditWithConfig(cfg AuditConfig) (*AuditResult, error)

RunAuditWithConfig scans specified targets using provided configuration.

type Issue

type Issue struct {
	File     string
	Line     int
	Rule     string
	Message  string
	Snippet  string
	Category string
}

Issue represents a single database query violation found during standalone scan.

func (Issue) DisplayTag added in v1.2.0

func (i Issue) DisplayTag() string

DisplayTag formats the rule code and identifier together for clear reporting. For example: "ARGUS-A01: UNSAFE_SQL_CONCATENATION" or "ARGUS-E001: UNABLE_TO_ANALYZE_MIGRATION".

func (Issue) DisplayTitle added in v1.2.0

func (i Issue) DisplayTitle() string

DisplayTitle returns DisplayTag for presentation in finding titles.

func (Issue) RuleCode added in v1.2.0

func (i Issue) RuleCode() string

RuleCode returns the standardized ARGUS-Axx rule code (e.g. "ARGUS-A01").

func (Issue) RuleDescription added in v1.2.0

func (i Issue) RuleDescription() string

RuleDescription returns the canonical identifier/description for the issue (e.g. "UNSAFE_SQL_CONCATENATION").

type MetricsTracker

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

MetricsTracker aggregates scanning counters in a thread-safe manner.

func NewMetricsTracker

func NewMetricsTracker() *MetricsTracker

NewMetricsTracker creates an initialized MetricsTracker.

func (*MetricsTracker) AddIssue

func (m *MetricsTracker) AddIssue(issue Issue)

func (*MetricsTracker) IncrementMigrationFiles

func (m *MetricsTracker) IncrementMigrationFiles(n int)

func (*MetricsTracker) IncrementParameterizedSites

func (m *MetricsTracker) IncrementParameterizedSites(n int)

func (*MetricsTracker) IncrementQuerySites

func (m *MetricsTracker) IncrementQuerySites(n int)

func (*MetricsTracker) IncrementScannedFiles

func (m *MetricsTracker) IncrementScannedFiles(n int)

func (*MetricsTracker) SetAttachedRules

func (m *MetricsTracker) SetAttachedRules(rules []RuleAuditInfo)

func (*MetricsTracker) Snapshot

func (m *MetricsTracker) Snapshot() *AuditResult

type RuleAuditInfo

type RuleAuditInfo struct {
	ID                string
	Code              string
	Description       string
	CheckedComponents int
	IssuesFound       int
	Status            string // "PASS" or "FAILED"
}

RuleAuditInfo captures the dynamic execution state of a specific rule.

func BuildDynamicRuleAuditInfo

func BuildDynamicRuleAuditInfo(analyzers []*analysis.Analyzer, cfg *config.Config, querySites, migrationFiles, totalScannedFiles int, issues []Issue) []RuleAuditInfo

BuildDynamicRuleAuditInfo dynamically builds the audit info list from active analyzers and config.

type RuleMetadata added in v1.2.0

type RuleMetadata struct {
	ID          string
	Code        string
	Identifier  string
	Severity    string
	Category    string
	Description string
	WikiURL     string
}

RuleMetadata holds static informational attributes for an Argus rule.

func GetRuleMetadata added in v1.2.0

func GetRuleMetadata(ruleKey string) RuleMetadata

GetRuleMetadata returns the authoritative RuleMetadata for a given rule key, identifier, or code.

Jump to

Keyboard shortcuts

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