github.com/esnet/gdg@v0.6.1-0.20240412190737-6b6eba9c14d8/cli/backup/folders.go (about) 1 package backup 2 3 import ( 4 "context" 5 "github.com/bep/simplecobra" 6 "github.com/esnet/gdg/cli/support" 7 "github.com/esnet/gdg/internal/config" 8 "github.com/esnet/gdg/internal/service" 9 "github.com/esnet/gdg/internal/service/filters" 10 "github.com/jedib0t/go-pretty/v6/table" 11 "log/slog" 12 13 "github.com/spf13/cobra" 14 ) 15 16 var useFolderFilters bool 17 18 func getFolderFilter() filters.Filter { 19 if !useFolderFilters { 20 return nil 21 } 22 return service.NewFolderFilter() 23 24 } 25 26 func newFolderCommand() simplecobra.Commander { 27 description := "Manage folder entities" 28 return &support.SimpleCommand{ 29 NameP: "folders", 30 Short: description, 31 Long: description, 32 WithCFunc: func(cmd *cobra.Command, r *support.RootCommand) { 33 cmd.Aliases = []string{"fld", "folder"} 34 cmd.PersistentFlags().BoolVar(&useFolderFilters, "use-filters", false, "Default to false, but if passed then will only operate on the list of folders listed in the configuration file") 35 }, 36 RunFunc: func(ctx context.Context, cd *simplecobra.Commandeer, rootCmd *support.RootCommand, args []string) error { 37 return cd.CobraCommand.Help() 38 }, 39 CommandsList: []simplecobra.Commander{ 40 newFolderPermissionCommand(), 41 newFolderListCmd(), 42 newFolderClearCmd(), 43 newFolderDownloadCmd(), 44 newFolderUploadCmd(), 45 }, 46 } 47 48 } 49 50 func newFolderClearCmd() simplecobra.Commander { 51 description := "delete Folders from grafana" 52 return &support.SimpleCommand{ 53 NameP: "clear", 54 Short: description, 55 Long: description, 56 WithCFunc: func(cmd *cobra.Command, r *support.RootCommand) { 57 cmd.Aliases = []string{"c", "delete"} 58 }, 59 RunFunc: func(ctx context.Context, cd *simplecobra.Commandeer, rootCmd *support.RootCommand, args []string) error { 60 slog.Info("Deleting all Folders for context", "context", config.Config().GetGDGConfig().GetContext()) 61 rootCmd.TableObj.AppendHeader(table.Row{"title"}) 62 63 folders := rootCmd.GrafanaSvc().DeleteAllFolders(getFolderFilter()) 64 if len(folders) == 0 { 65 slog.Info("No Folders found") 66 } else { 67 for _, folder := range folders { 68 rootCmd.TableObj.AppendRow(table.Row{folder}) 69 } 70 rootCmd.Render(cd.CobraCommand, folders) 71 } 72 return nil 73 }, 74 } 75 } 76 77 func newFolderListCmd() simplecobra.Commander { 78 description := "List Folders" 79 return &support.SimpleCommand{ 80 NameP: "list", 81 Short: description, 82 Long: description, 83 WithCFunc: func(cmd *cobra.Command, r *support.RootCommand) { 84 cmd.Aliases = []string{"u"} 85 }, 86 RunFunc: func(ctx context.Context, cd *simplecobra.Commandeer, rootCmd *support.RootCommand, args []string) error { 87 slog.Info("Listing Folders for context", "context", config.Config().GetGDGConfig().GetContext()) 88 rootCmd.TableObj.AppendHeader(table.Row{"id", "uid", "title"}) 89 folders := rootCmd.GrafanaSvc().ListFolder(getFolderFilter()) 90 91 if len(folders) == 0 { 92 slog.Info("No folders found") 93 } else { 94 for _, folder := range folders { 95 rootCmd.TableObj.AppendRow(table.Row{folder.ID, folder.UID, folder.Title}) 96 } 97 rootCmd.Render(cd.CobraCommand, folders) 98 } 99 return nil 100 }, 101 } 102 } 103 func newFolderDownloadCmd() simplecobra.Commander { 104 description := "Download Folders from grafana" 105 return &support.SimpleCommand{ 106 NameP: "download", 107 Short: description, 108 Long: description, 109 WithCFunc: func(cmd *cobra.Command, r *support.RootCommand) { 110 cmd.Aliases = []string{"d"} 111 }, 112 RunFunc: func(ctx context.Context, cd *simplecobra.Commandeer, rootCmd *support.RootCommand, args []string) error { 113 slog.Info("Listing Folders for context", "context", config.Config().GetGDGConfig().GetContext()) 114 rootCmd.TableObj.AppendHeader(table.Row{"file"}) 115 folders := rootCmd.GrafanaSvc().DownloadFolders(getFolderFilter()) 116 if len(folders) == 0 { 117 slog.Info("No folders found") 118 } else { 119 for _, folder := range folders { 120 rootCmd.TableObj.AppendRow(table.Row{folder}) 121 } 122 rootCmd.Render(cd.CobraCommand, folders) 123 } 124 return nil 125 }, 126 } 127 } 128 func newFolderUploadCmd() simplecobra.Commander { 129 description := "upload Folders to grafana" 130 return &support.SimpleCommand{ 131 NameP: "upload", 132 Short: description, 133 Long: description, 134 WithCFunc: func(cmd *cobra.Command, r *support.RootCommand) { 135 cmd.Aliases = []string{"u"} 136 }, 137 RunFunc: func(ctx context.Context, cd *simplecobra.Commandeer, rootCmd *support.RootCommand, args []string) error { 138 slog.Info("Uploading Folders for context", "context", config.Config().GetGDGConfig().GetContext()) 139 rootCmd.TableObj.AppendHeader(table.Row{"file"}) 140 folders := rootCmd.GrafanaSvc().UploadFolders(getFolderFilter()) 141 if len(folders) == 0 { 142 slog.Info("No folders found") 143 } else { 144 for _, folder := range folders { 145 rootCmd.TableObj.AppendRow(table.Row{folder}) 146 } 147 rootCmd.Render(cd.CobraCommand, folders) 148 } 149 return nil 150 }, 151 } 152 }