mirror of
https://github.com/turbot/steampipe.git
synced 2025-12-23 21:09:15 -05:00
Make workspace loading async. Closes #3123
This commit is contained in:
@@ -21,11 +21,6 @@ import (
|
||||
)
|
||||
|
||||
type InitData struct {
|
||||
// the current state that init is in
|
||||
Status string
|
||||
// if non-nil, this is called everytime the status changes
|
||||
OnStatusChanged func(string)
|
||||
|
||||
Workspace *workspace.Workspace
|
||||
Client db_common.Client
|
||||
Result *db_common.InitResult
|
||||
@@ -37,22 +32,14 @@ type InitData struct {
|
||||
ExportManager *export.Manager
|
||||
}
|
||||
|
||||
func (i *InitData) SetStatus(newStatus string) {
|
||||
i.Status = newStatus
|
||||
if i.OnStatusChanged != nil {
|
||||
i.OnStatusChanged(newStatus)
|
||||
}
|
||||
}
|
||||
|
||||
func NewErrorInitData(err error) *InitData {
|
||||
return &InitData{
|
||||
Result: &db_common.InitResult{Error: err},
|
||||
}
|
||||
}
|
||||
|
||||
func NewInitData(w *workspace.Workspace) *InitData {
|
||||
func NewInitData() *InitData {
|
||||
i := &InitData{
|
||||
Workspace: w,
|
||||
Result: &db_common.InitResult{},
|
||||
ExportManager: export.NewManager(),
|
||||
}
|
||||
@@ -68,11 +55,7 @@ func (i *InitData) RegisterExporters(exporters ...export.Exporter) *InitData {
|
||||
return i
|
||||
}
|
||||
|
||||
func (i *InitData) Init(parentCtx context.Context, invoker constants.Invoker) (res *InitData) {
|
||||
// create a context with the init hook in - which can be sent down to lower level operations
|
||||
hook := NewInitStatusHook(i)
|
||||
ctx := statushooks.AddStatusHooksToContext(parentCtx, hook)
|
||||
|
||||
func (i *InitData) Init(ctx context.Context, invoker constants.Invoker) {
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
i.Result.Error = helpers.ToError(r)
|
||||
@@ -82,10 +65,8 @@ func (i *InitData) Init(parentCtx context.Context, invoker constants.Invoker) (r
|
||||
i.Result.Error = ctx.Err()
|
||||
}
|
||||
}()
|
||||
// return ourselves
|
||||
res = i
|
||||
|
||||
i.SetStatus("Initializing")
|
||||
statushooks.SetStatus(ctx, "Initializing")
|
||||
|
||||
// initialise telemetry
|
||||
shutdownTelemetry, err := telemetry.Init(constants.AppName)
|
||||
@@ -97,7 +78,7 @@ func (i *InitData) Init(parentCtx context.Context, invoker constants.Invoker) (r
|
||||
|
||||
// install mod dependencies if needed
|
||||
if viper.GetBool(constants.ArgModInstall) {
|
||||
i.SetStatus("Installing workspace dependencies")
|
||||
statushooks.SetStatus(ctx, "Installing workspace dependencies")
|
||||
opts := &modinstaller.InstallOpts{WorkspacePath: viper.GetString(constants.ArgModLocation)}
|
||||
_, err := modinstaller.InstallWorkspaceDependencies(opts)
|
||||
if err != nil {
|
||||
@@ -116,7 +97,7 @@ func (i *InitData) Init(parentCtx context.Context, invoker constants.Invoker) (r
|
||||
// set cloud metadata (may be nil)
|
||||
i.Workspace.CloudMetadata = cloudMetadata
|
||||
|
||||
i.SetStatus("Checking for required plugins")
|
||||
statushooks.SetStatus(ctx, "Checking for required plugins")
|
||||
// check if the required plugins are installed
|
||||
err = i.Workspace.CheckRequiredPluginsInstalled()
|
||||
if err != nil {
|
||||
@@ -175,10 +156,10 @@ func (i *InitData) Init(parentCtx context.Context, invoker constants.Invoker) (r
|
||||
// GetDbClient either creates a DB client using the configured connection string (if present) or creates a LocalDbClient
|
||||
func GetDbClient(ctx context.Context, invoker constants.Invoker, onConnectionCallback db_client.DbConnectionCallback) (client db_common.Client, err error) {
|
||||
if connectionString := viper.GetString(constants.ArgConnectionString); connectionString != "" {
|
||||
statushooks.SetStatus(ctx, "Connecting to Remote Steampipe")
|
||||
statushooks.SetStatus(ctx, "Connecting to remote Steampipe database")
|
||||
client, err = db_client.NewDbClient(ctx, connectionString, onConnectionCallback)
|
||||
} else {
|
||||
statushooks.SetStatus(ctx, "Starting local Steampipe")
|
||||
statushooks.SetStatus(ctx, "Starting local Steampipe database")
|
||||
client, err = db_local.GetLocalClient(ctx, invoker, onConnectionCallback)
|
||||
}
|
||||
return client, err
|
||||
|
||||
Reference in New Issue
Block a user