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 }