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  }