controlexecute

package
v0.18.0-alpha.19 Latest Latest
Warning

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

Go to latest
Published: Dec 13, 2022 License: AGPL-3.0 Imports: 22 Imported by: 0

Documentation

Index

Constants

View Source
const RootResultGroupName = "root_result_group"

Variables

This section is empty.

Functions

func IsValidControlStatus

func IsValidControlStatus(status string) bool

Types

type ControlRun

type ControlRun struct {
	// properties from control
	ControlId     string            `json:"-"`
	FullName      string            `json:"name"`
	Title         string            `json:"title,omitempty"`
	Description   string            `json:"description,omitempty"`
	Documentation string            `json:"documentation,omitempty"`
	Tags          map[string]string `json:"tags,omitempty"`
	Display       string            `json:"display,omitempty"`
	Type          string            `json:"display_type,omitempty"`

	// this will be serialised under 'properties'
	Severity string `json:"-"`

	// "control"
	NodeType string `json:"panel_type"`

	// the control being run
	Control *modconfig.Control `json:"properties,omitempty"`
	// control summary
	Summary   *controlstatus.StatusSummary   `json:"summary"`
	RunStatus controlstatus.ControlRunStatus `json:"status"`
	// result rows
	Rows ResultRows `json:"-"`

	// the results in snapshot format
	Data *dashboardtypes.LeafData `json:"data"`

	// a list of distinct dimension keys from the results of this control
	DimensionKeys []string `json:"-"`

	// execution duration
	Duration time.Duration `json:"-"`
	// parent result group
	Group *ResultGroup `json:"-"`
	// execution tree
	Tree *ExecutionTree `json:"-"`
	// save run error as string for JSON export
	RunErrorString string `json:"error,omitempty"`
	// contains filtered or unexported fields
}

ControlRun is a struct representing the execution of a control run. It will contain one or more result items (i.e. for one or more resources).

func NewControlRun

func NewControlRun(control *modconfig.Control, group *ResultGroup, executionTree *ExecutionTree) *ControlRun

func (*ControlRun) AsTreeNode

func (r *ControlRun) AsTreeNode() *dashboardtypes.SnapshotTreeNode

AsTreeNode implements ExecutionTreeNode

func (*ControlRun) Finished

func (r *ControlRun) Finished() bool

func (*ControlRun) GetChildren

func (*ControlRun) GetChildren() []ExecutionTreeNode

GetChildren implements ExecutionTreeNode

func (*ControlRun) GetControlId

func (r *ControlRun) GetControlId() string

GetControlId implements ControlRunStatusProvider

func (*ControlRun) GetError

func (r *ControlRun) GetError() error

func (*ControlRun) GetName

func (r *ControlRun) GetName() string

GetName implements ExecutionTreeNode

func (*ControlRun) GetRunStatus

func (r *ControlRun) GetRunStatus() controlstatus.ControlRunStatus

GetRunStatus implements ControlRunStatusProvider

func (*ControlRun) GetStatusSummary

func (r *ControlRun) GetStatusSummary() *controlstatus.StatusSummary

GetStatusSummary implements ControlRunStatusProvider

func (*ControlRun) IsExecutionTreeNode

func (*ControlRun) IsExecutionTreeNode()

IsExecutionTreeNode implements ExecutionTreeNode

func (*ControlRun) IsSnapshotPanel

func (*ControlRun) IsSnapshotPanel()

IsSnapshotPanel implements SnapshotPanel

func (*ControlRun) MatchTag

func (r *ControlRun) MatchTag(key string, value string) bool

MatchTag returns the value corresponding to the input key. Returns 'false' if not found

type Dimension

type Dimension struct {
	Key     string `json:"key"`
	Value   string `json:"value"`
	SqlType string `json:"-"`
}

Dimension is a struct representing an attribute returned by a control run. An attribute is stored as a dimension if it's not a standard attribute (reason, resource, status).

type DimensionColorGenerator

type DimensionColorGenerator struct {
	Map map[string]map[string]uint8
	// contains filtered or unexported fields
}

func NewDimensionColorGenerator

func NewDimensionColorGenerator(startingRow, startingColumn uint8) (*DimensionColorGenerator, error)

NewDimensionColorGenerator creates a new NewDimensionColorGenerator

func (*DimensionColorGenerator) GetDimensionProperties

func (g *DimensionColorGenerator) GetDimensionProperties() []string

type DirectChildrenModDecorator

type DirectChildrenModDecorator struct {
	*modconfig.Mod
}

DirectChildrenModDecorator is a struct used to wrap a Mod but modify the results of GetChildren to only return immediate mod children (as opposed to all resources in dependency mods as well) This is needed when running 'check all' for a mod which has dependency mopds'

func (DirectChildrenModDecorator) GetChildren

override GetChildren

type ExecutionTree

type ExecutionTree struct {
	Root *ResultGroup `json:"root"`
	// flat list of all control runs
	ControlRuns []*ControlRun                  `json:"-"`
	StartTime   time.Time                      `json:"start_time"`
	EndTime     time.Time                      `json:"end_time"`
	Progress    *controlstatus.ControlProgress `json:"progress"`
	// map of dimension property name to property value to color map
	DimensionColorGenerator *DimensionColorGenerator `json:"-"`
	// the current session search path (this may be overidden for specific controls)
	SearchPath []string             `json:"-"`
	Workspace  *workspace.Workspace `json:"-"`
	// contains filtered or unexported fields
}

ExecutionTree is a structure representing the control execution hierarchy

func NewExecutionTree

func NewExecutionTree(ctx context.Context, workspace *workspace.Workspace, client db_common.Client, arg, controlFilterWhereClause string) (*ExecutionTree, error)

func (*ExecutionTree) AddControl

func (e *ExecutionTree) AddControl(ctx context.Context, control *modconfig.Control, group *ResultGroup)

AddControl checks whether control should be included in the tree if so, creates a ControlRun, which is added to the parent group

func (*ExecutionTree) Execute

func (e *ExecutionTree) Execute(ctx context.Context) int

func (*ExecutionTree) GetAllTags

func (e *ExecutionTree) GetAllTags() []string

func (*ExecutionTree) IsExportSourceData added in v0.17.0

func (*ExecutionTree) IsExportSourceData()

IsExportSourceData implements ExportSourceData

func (*ExecutionTree) ShouldIncludeControl

func (e *ExecutionTree) ShouldIncludeControl(controlName string) bool

type ExecutionTreeNode

type ExecutionTreeNode interface {
	IsExecutionTreeNode()
	GetChildren() []ExecutionTreeNode
	GetName() string
	AsTreeNode() *dashboardtypes.SnapshotTreeNode
}

ExecutionTreeNode is implemented by all control execution tree nodes

type GroupSummary

type GroupSummary struct {
	Status   controlstatus.StatusSummary            `json:"status"`
	Severity map[string]controlstatus.StatusSummary `json:"-"`
}

func NewGroupSummary

func NewGroupSummary() *GroupSummary

type ResultGroup

type ResultGroup struct {
	GroupId       string            `json:"name" csv:"group_id"`
	Title         string            `json:"title,omitempty" csv:"title"`
	Description   string            `json:"description,omitempty" csv:"description"`
	Tags          map[string]string `json:"tags,omitempty"`
	Documentation string            `json:"documentation,omitempty"`
	Display       string            `json:"display,omitempty"`
	Type          string            `json:"type,omitempty"`

	// the overall summary of the group
	Summary *GroupSummary `json:"summary"`
	// child result groups
	Groups []*ResultGroup `json:"-"`
	// child control runs
	ControlRuns []*ControlRun `json:"-"`
	// list of children stored as controlexecute.ExecutionTreeNode
	Children []ExecutionTreeNode                    `json:"-"`
	Severity map[string]controlstatus.StatusSummary `json:"-"`
	// "benchmark"
	NodeType string `json:"panel_type"`
	// the control tree item associated with this group(i.e. a mod/benchmark)
	GroupItem modconfig.ModTreeItem `json:"-"`
	Parent    *ResultGroup          `json:"-"`
	Duration  time.Duration         `json:"-"`
	// a list of distinct dimension keys from descendant controls
	DimensionKeys []string `json:"-"`
	// contains filtered or unexported fields
}

ResultGroup is a struct representing a grouping of control results It may correspond to a Benchmark, or some other arbitrary grouping

func NewResultGroup

func NewResultGroup(ctx context.Context, executionTree *ExecutionTree, treeItem modconfig.ModTreeItem, parent *ResultGroup) *ResultGroup

NewResultGroup creates a result group from a ModTreeItem

func NewRootResultGroup

func NewRootResultGroup(ctx context.Context, executionTree *ExecutionTree, rootItem modconfig.ModTreeItem) *ResultGroup

NewRootResultGroup creates a ResultGroup to act as the root node of a control execution tree

func (*ResultGroup) AllTagKeys

func (r *ResultGroup) AllTagKeys() []string

func (*ResultGroup) AsTreeNode

func (r *ResultGroup) AsTreeNode() *dashboardtypes.SnapshotTreeNode

AsTreeNode implements ExecutionTreeNode

func (*ResultGroup) ControlRunCount

func (r *ResultGroup) ControlRunCount() int

func (*ResultGroup) GetChildGroupByName

func (r *ResultGroup) GetChildGroupByName(name string) *ResultGroup

GetChildGroupByName finds a nested child ResultGroup with a specific name

func (*ResultGroup) GetChildren

func (r *ResultGroup) GetChildren() []ExecutionTreeNode

GetChildren implements ExecutionTreeNode

func (*ResultGroup) GetControlRunByName

func (r *ResultGroup) GetControlRunByName(name string) *ControlRun

GetControlRunByName finds a child ControlRun with a specific control name

func (*ResultGroup) GetGroupByName

func (r *ResultGroup) GetGroupByName(name string) *ResultGroup

GetGroupByName finds an immediate child ResultGroup with a specific name

func (*ResultGroup) GetName

func (r *ResultGroup) GetName() string

GetName implements ExecutionTreeNode

func (*ResultGroup) IsExecutionTreeNode

func (*ResultGroup) IsExecutionTreeNode()

IsExecutionTreeNode implements ExecutionTreeNode

func (*ResultGroup) IsSnapshotPanel

func (*ResultGroup) IsSnapshotPanel()

IsSnapshotPanel implements SnapshotPanel

type ResultRow

type ResultRow struct {
	// reason for the status
	Reason string `json:"reason" csv:"reason"`
	// resource name
	Resource string `json:"resource" csv:"resource"`
	// status of the row (ok, info, alarm, error, skip)
	Status string `json:"status" csv:"status"`
	// dimensions for this row
	Dimensions []Dimension `json:"dimensions"`
	// parent control run
	Run *ControlRun `json:"-"`
	// source control
	Control *modconfig.Control `json:"-" csv:"control_id:UnqualifiedName,control_title:Title,control_description:Description"`
}

ResultRow is the result of a control execution for a single resource

func NewResultRow

func NewResultRow(run *ControlRun, row *queryresult.RowResult, cols []*queryresult.ColumnDef) (*ResultRow, error)

func (*ResultRow) AddDimension

func (r *ResultRow) AddDimension(c *queryresult.ColumnDef, val interface{})

AddDimension checks whether a column value is a scalar type, and if so adds it to the Dimensions map

func (*ResultRow) GetDimensionValue

func (r *ResultRow) GetDimensionValue(key string) string

GetDimensionValue returns the value for a dimension key. Returns an empty string with 'false' if not found

type ResultRows

type ResultRows []*ResultRow

func (ResultRows) ToLeafData

func (r ResultRows) ToLeafData(dimensionSchema map[string]*queryresult.ColumnDef) *dashboardtypes.LeafData

ToLeafData converts the result rows to snapshot data format

Jump to

Keyboard shortcuts

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