github.com/esnet/gdg@v0.6.1-0.20240412190737-6b6eba9c14d8/cli/tools/dashboards.go (about)

     1  package tools
     2  
     3  import (
     4  	"context"
     5  	"github.com/bep/simplecobra"
     6  	"github.com/esnet/gdg/cli/support"
     7  	"github.com/esnet/gdg/internal/service/types"
     8  	"github.com/spf13/cobra"
     9  	"log/slog"
    10  )
    11  
    12  var lintStrictFlag bool
    13  var lintVerboseFlag bool
    14  var lintAutofixFlag bool
    15  
    16  func newDashboardCmd() simplecobra.Commander {
    17  	return &support.SimpleCommand{
    18  		NameP:        "dashboards",
    19  		Short:        "Utility for Grafana Dashboards",
    20  		Long:         "Utility for Grafana Dashboards",
    21  		CommandsList: []simplecobra.Commander{newDashboardLintCmd()},
    22  		WithCFunc: func(cmd *cobra.Command, r *support.RootCommand) {
    23  			cmd.Aliases = []string{"dash", "dashboard"}
    24  		},
    25  		RunFunc: func(ctx context.Context, cd *simplecobra.Commandeer, rootCmd *support.RootCommand, args []string) error {
    26  			return cd.CobraCommand.Help()
    27  		},
    28  	}
    29  }
    30  
    31  func newDashboardLintCmd() simplecobra.Commander {
    32  	return &support.SimpleCommand{
    33  		NameP: "lint",
    34  		Short: "lint all or single dashboard",
    35  		Long:  "lint all or a single dashboard",
    36  		WithCFunc: func(cmd *cobra.Command, r *support.RootCommand) {
    37  			dashboard := cmd
    38  			dashboard.PersistentFlags().BoolVarP(&lintStrictFlag, "strict", "", false, "Strict Linting")
    39  			dashboard.PersistentFlags().BoolVarP(&lintVerboseFlag, "verbose", "", false, "Verbose Linting")
    40  			dashboard.PersistentFlags().BoolVarP(&lintAutofixFlag, "autofix", "", false, "AutoFix Linting (Beta)")
    41  			dashboard.PersistentFlags().StringP("dashboard", "d", "", "filter by dashboard slug")
    42  			dashboard.PersistentFlags().StringP("folder", "f", "", "filter by folderName")
    43  		},
    44  		RunFunc: func(ctx context.Context, cd *simplecobra.Commandeer, rootCmd *support.RootCommand, args []string) error {
    45  			slog.Info("This is mainly provided as a convenience GDG, if you find yourself relying on this tool heavily, please have a look at: github.com/grafana/dashboard-linter/")
    46  			dashboard, _ := cd.CobraCommand.Flags().GetString("dashboard")
    47  			folder, _ := cd.CobraCommand.Flags().GetString("folder")
    48  			filterReq := types.LintRequest{
    49  				StrictFlag:    lintStrictFlag,
    50  				VerboseFlag:   lintVerboseFlag,
    51  				AutoFix:       lintAutofixFlag,
    52  				DashboardSlug: dashboard,
    53  				FolderName:    folder,
    54  			}
    55  			rootCmd.GrafanaSvc().LintDashboards(filterReq)
    56  			return nil
    57  		},
    58  	}
    59  }