controlexecute

package
v0.15.0 Latest Latest
Warning

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

Go to latest
Published: Jun 23, 2022 License: AGPL-3.0 Imports: 24 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:"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:"-"`
	// used to trace the events within the duration of a control execution
	Lifecycle *utils.LifecycleTimer `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 added in v0.15.0

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

AsTreeNode implements ExecutionTreeNode

func (*ControlRun) Finished

func (r *ControlRun) Finished() bool

func (*ControlRun) GetChildren added in v0.15.0

func (*ControlRun) GetChildren() []ExecutionTreeNode

GetChildren implements ExecutionTreeNode

func (*ControlRun) GetControlId added in v0.14.0

func (r *ControlRun) GetControlId() string

GetControlId implements ControlRunStatusProvider

func (*ControlRun) GetError

func (r *ControlRun) GetError() error

func (*ControlRun) GetName added in v0.15.0

func (r *ControlRun) GetName() string

GetName implements ExecutionTreeNode

func (*ControlRun) GetRunStatus

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

GetRunStatus implements ControlRunStatusProvider

func (*ControlRun) GetStatusSummary added in v0.14.0

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

GetStatusSummary implements ControlRunStatusProvider

func (*ControlRun) IsExecutionTreeNode added in v0.15.0

func (*ControlRun) IsExecutionTreeNode()

IsExecutionTreeNode implements ExecutionTreeNode

func (*ControlRun) IsSnapshotPanel added in v0.15.0

func (*ControlRun) IsSnapshotPanel()

IsSnapshotPanel implements SnapshotPanel

func (*ControlRun) MatchTag added in v0.12.0

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 added in v0.15.0

type DirectChildrenModDecorator struct {
	Mod *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) AddParent added in v0.15.0

func (DirectChildrenModDecorator) GetChildren added in v0.15.0

func (DirectChildrenModDecorator) GetDescription added in v0.15.0

func (r DirectChildrenModDecorator) GetDescription() string

func (DirectChildrenModDecorator) GetMod added in v0.15.0

func (DirectChildrenModDecorator) GetPaths added in v0.15.0

func (DirectChildrenModDecorator) GetTags added in v0.15.0

func (r DirectChildrenModDecorator) GetTags() map[string]string

func (DirectChildrenModDecorator) GetTitle added in v0.15.0

func (r DirectChildrenModDecorator) GetTitle() string

func (DirectChildrenModDecorator) GetUnqualifiedName added in v0.15.0

func (r DirectChildrenModDecorator) GetUnqualifiedName() string

func (DirectChildrenModDecorator) Name added in v0.15.0

func (DirectChildrenModDecorator) SetPaths added in v0.15.0

func (r DirectChildrenModDecorator) SetPaths()

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:"-"`
	// 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 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) ShouldIncludeControl

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

type ExecutionTreeNode added in v0.15.0

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 added in v0.9.0

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, rootItems ...modconfig.ModTreeItem) *ResultGroup

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

func (*ResultGroup) AllTagKeys added in v0.12.0

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

func (*ResultGroup) AsTreeNode added in v0.15.0

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 added in v0.15.0

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 added in v0.15.0

func (r *ResultGroup) GetName() string

GetName implements ExecutionTreeNode

func (*ResultGroup) IsExecutionTreeNode added in v0.15.0

func (*ResultGroup) IsExecutionTreeNode()

IsExecutionTreeNode implements ExecutionTreeNode

func (*ResultGroup) IsSnapshotPanel added in v0.15.0

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, colTypes []*sql.ColumnType) (*ResultRow, error)

func (*ResultRow) AddDimension

func (r *ResultRow) AddDimension(c *sql.ColumnType, val interface{})

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

func (*ResultRow) GetDimensionValue added in v0.12.0

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 added in v0.15.0

type ResultRows []*ResultRow

func (ResultRows) ToLeafData added in v0.15.0

func (r ResultRows) ToLeafData(dimensionSchema map[string]*dashboardtypes.ColumnSchema) *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