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  }