github.com/esnet/gdg@v0.6.1-0.20240412190737-6b6eba9c14d8/cli/tools/org_preferences.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/jedib0t/go-pretty/v6/table"
     8  	"github.com/spf13/cobra"
     9  	"log"
    10  	"log/slog"
    11  )
    12  
    13  func newOrgPreferenceCommand() simplecobra.Commander {
    14  	return &support.SimpleCommand{
    15  		NameP: "preferences",
    16  		Short: "Update organization preferences",
    17  		Long:  "Update organization preferences",
    18  		RunFunc: func(ctx context.Context, cd *simplecobra.Commandeer, rootCmd *support.RootCommand, args []string) error {
    19  			return cd.CobraCommand.Help()
    20  
    21  		},
    22  		WithCFunc: func(cmd *cobra.Command, r *support.RootCommand) {
    23  			cmd.Aliases = []string{"preference", "pref", "p", "prefs"}
    24  		},
    25  		CommandsList: []simplecobra.Commander{
    26  			//Preferences
    27  			newGetOrgPreferenceCmd(),
    28  			newUpdateOrgPreferenceCmd(),
    29  		},
    30  	}
    31  
    32  }
    33  
    34  func newUpdateOrgPreferenceCmd() simplecobra.Commander {
    35  	return &support.SimpleCommand{
    36  		NameP: "set",
    37  		Short: "Set --orgName [--homeDashUid, --theme, --weekstart] to set Org preferences",
    38  		Long:  "Set --orgName [--homeDashUid, --theme, --weekstart] to set Org preferences",
    39  		WithCFunc: func(cmd *cobra.Command, r *support.RootCommand) {
    40  			cmd.PersistentFlags().StringP("orgName", "", "", "Organization Name")
    41  			cmd.PersistentFlags().StringP("homeDashUid", "", "", "UID for the home dashboard")
    42  			cmd.PersistentFlags().StringP("theme", "", "", "light, dark")
    43  			cmd.PersistentFlags().StringP("weekstart", "", "", "day of the week (sunday, monday, etc)")
    44  
    45  		},
    46  		RunFunc: func(ctx context.Context, cd *simplecobra.Commandeer, rootCmd *support.RootCommand, args []string) error {
    47  			slog.Info("update the org preferences")
    48  			org, _ := cd.CobraCommand.Flags().GetString("orgName")
    49  			home, _ := cd.CobraCommand.Flags().GetString("homeDashUid")
    50  			theme, _ := cd.CobraCommand.Flags().GetString("theme")
    51  			weekstart, _ := cd.CobraCommand.Flags().GetString("weekstart")
    52  			if org == "" {
    53  				log.Fatal("--orgName is a required parameter")
    54  			}
    55  			if home != "" && theme != "" && weekstart == "" {
    56  				log.Fatal("At least one of [--homeDashUid, --theme, --weekstart] needs to be set")
    57  			}
    58  
    59  			rootCmd.GrafanaSvc().InitOrganizations()
    60  			prefere, err := rootCmd.GrafanaSvc().GetOrgPreferences(org)
    61  			if err != nil {
    62  				log.Fatal(err.Error())
    63  			}
    64  			if home != "" {
    65  				prefere.HomeDashboardUID = home
    66  			}
    67  			if theme != "" {
    68  				prefere.Theme = theme
    69  			}
    70  			if weekstart != "" {
    71  				prefere.WeekStart = weekstart
    72  			}
    73  
    74  			err = rootCmd.GrafanaSvc().UploadOrgPreferences(org, prefere)
    75  			if err != nil {
    76  				log.Fatalf("Failed to update org preferences, %v", err)
    77  			}
    78  			slog.Info("Preferences update for organization", slog.Any("organization", org))
    79  
    80  			return nil
    81  
    82  		},
    83  	}
    84  
    85  }
    86  
    87  func newGetOrgPreferenceCmd() simplecobra.Commander {
    88  	return &support.SimpleCommand{
    89  		NameP: "get",
    90  		Short: "get <orgName> returns org preferences",
    91  		Long:  "get <orgId> returns org preferences",
    92  		WithCFunc: func(cmd *cobra.Command, r *support.RootCommand) {
    93  			cmd.PersistentFlags().StringP("orgName", "", "", "Organization Name")
    94  		},
    95  		RunFunc: func(ctx context.Context, cd *simplecobra.Commandeer, rootCmd *support.RootCommand, args []string) error {
    96  			orgName, _ := cd.CobraCommand.Flags().GetString("orgName")
    97  
    98  			rootCmd.GrafanaSvc().InitOrganizations()
    99  			pref, err := rootCmd.GrafanaSvc().GetOrgPreferences(orgName)
   100  			if err != nil {
   101  				log.Fatal(err.Error())
   102  			}
   103  
   104  			rootCmd.TableObj.AppendHeader(table.Row{"field", "value"})
   105  			rootCmd.TableObj.AppendRow(table.Row{"HomeDashboardUID", pref.HomeDashboardUID})
   106  			rootCmd.TableObj.AppendRow(table.Row{"Theme", pref.Theme})
   107  			rootCmd.TableObj.AppendRow(table.Row{"WeekStart", pref.WeekStart})
   108  
   109  			rootCmd.Render(cd.CobraCommand, pref)
   110  
   111  			return nil
   112  
   113  		},
   114  	}
   115  
   116  }