Files
steampipe/pkg/dashboard/dashboardexecute/control_hooks_dashboard_event.go
kaidaguerre d254301f9e When editing dashboard files, after adding/fixing errors in the HCL the dashboard server will sometimes stall. Closes #2952
Fixed tactically by increasing the channel buffer size and also adding a timeout/cancellation support to the dashboard event sending code
2023-01-06 17:49:43 +00:00

57 lines
1.9 KiB
Go

package dashboardexecute
import (
"context"
"github.com/turbot/steampipe/pkg/control/controlstatus"
"time"
"github.com/turbot/steampipe/pkg/dashboard/dashboardevents"
)
// DashboardEventControlHooks is a struct which implements ControlHooks,
// and raises ControlComplete and ControlError dashboard events
type DashboardEventControlHooks struct {
CheckRun *CheckRun
}
func NewDashboardEventControlHooks(r *CheckRun) *DashboardEventControlHooks {
return &DashboardEventControlHooks{
CheckRun: r,
}
}
func (c *DashboardEventControlHooks) OnStart(ctx context.Context, _ *controlstatus.ControlProgress) {
// nothing to do
}
func (c *DashboardEventControlHooks) OnControlStart(context.Context, controlstatus.ControlRunStatusProvider, *controlstatus.ControlProgress) {
}
func (c *DashboardEventControlHooks) OnControlComplete(ctx context.Context, controlRun controlstatus.ControlRunStatusProvider, progress *controlstatus.ControlProgress) {
event := &dashboardevents.ControlComplete{
Control: controlRun,
Progress: progress,
Name: c.CheckRun.Name,
ExecutionId: c.CheckRun.executionTree.id,
Session: c.CheckRun.SessionId,
Timestamp: time.Now(),
}
c.CheckRun.executionTree.workspace.PublishDashboardEvent(ctx, event)
}
func (c *DashboardEventControlHooks) OnControlError(ctx context.Context, controlRun controlstatus.ControlRunStatusProvider, progress *controlstatus.ControlProgress) {
var event = &dashboardevents.ControlError{
Control: controlRun,
Progress: progress,
Name: c.CheckRun.Name,
ExecutionId: c.CheckRun.executionTree.id,
Session: c.CheckRun.SessionId,
Timestamp: time.Now(),
}
c.CheckRun.executionTree.workspace.PublishDashboardEvent(ctx, event)
}
func (c *DashboardEventControlHooks) OnComplete(ctx context.Context, _ *controlstatus.ControlProgress) {
// nothing to do - LeafNodeDone will be sent anyway
}