github.com/turbot/steampipe@v1.7.0-rc.0.0.20240517123944-7cef272d4458/pkg/dashboard/dashboardassets/ensure.go (about) 1 package dashboardassets 2 3 import ( 4 "context" 5 "encoding/json" 6 "log" 7 "os" 8 9 filehelpers "github.com/turbot/go-kit/files" 10 "github.com/turbot/steampipe-plugin-sdk/v5/logging" 11 "github.com/turbot/steampipe/pkg/filepaths" 12 "github.com/turbot/steampipe/pkg/ociinstaller" 13 "github.com/turbot/steampipe/pkg/statushooks" 14 "github.com/turbot/steampipe/pkg/version" 15 ) 16 17 func Ensure(ctx context.Context) error { 18 logging.LogTime("dashboardassets.Ensure start") 19 defer logging.LogTime("dashboardassets.Ensure end") 20 21 // load report assets versions.json 22 versionFile, err := loadReportAssetVersionFile() 23 if err != nil { 24 return err 25 } 26 27 if versionFile.Version == version.VersionString { 28 return nil 29 } 30 31 statushooks.SetStatus(ctx, "Installing dashboard server…") 32 33 reportAssetsPath := filepaths.EnsureDashboardAssetsDir() 34 35 // remove the legacy report folder, if it exists 36 if _, err := os.Stat(filepaths.LegacyDashboardAssetsDir()); !os.IsNotExist(err) { 37 os.RemoveAll(filepaths.LegacyDashboardAssetsDir()) 38 } 39 40 return ociinstaller.InstallAssets(ctx, reportAssetsPath) 41 } 42 43 type ReportAssetsVersionFile struct { 44 Version string `json:"version"` 45 } 46 47 func loadReportAssetVersionFile() (*ReportAssetsVersionFile, error) { 48 versionFilePath := filepaths.ReportAssetsVersionFilePath() 49 if !filehelpers.FileExists(versionFilePath) { 50 return &ReportAssetsVersionFile{}, nil 51 } 52 53 file, _ := os.ReadFile(versionFilePath) 54 var versionFile ReportAssetsVersionFile 55 if err := json.Unmarshal(file, &versionFile); err != nil { 56 log.Println("[ERROR]", "Error while reading dashboard assets version file", err) 57 return nil, err 58 } 59 60 return &versionFile, nil 61 62 }