github.com/esnet/gdg@v0.6.1-0.20240412190737-6b6eba9c14d8/cmd/gdg-generate/cli/templates.go (about)

     1  package cli
     2  
     3  import (
     4  	"fmt"
     5  	"github.com/jedib0t/go-pretty/v6/table"
     6  	"github.com/spf13/cobra"
     7  	"log"
     8  	"log/slog"
     9  	"os"
    10  )
    11  
    12  var tplCmd = &cobra.Command{
    13  	Use:     "template",
    14  	Aliases: []string{"tpl", "templates"},
    15  	Short:   "Templating Utilities",
    16  	Long:    `Templating Utilities`,
    17  }
    18  
    19  var listTemplatesCmd = &cobra.Command{
    20  	Use:   "list",
    21  	Short: "List current templates",
    22  	Long:  `List current templates`,
    23  	Run: func(cmd *cobra.Command, args []string) {
    24  		templates := template.ListTemplates()
    25  		slog.Info("Available templates for current configuration",
    26  			slog.String("template-config", tplCfgFile),
    27  			slog.String("gdg-config", cfgFile))
    28  		for ndx, t := range templates {
    29  			slog.Info(fmt.Sprintf("%d: %s", ndx+1, t))
    30  		}
    31  	},
    32  }
    33  
    34  var generateTemplatesCmd = &cobra.Command{
    35  	Use:     "generate",
    36  	Aliases: []string{},
    37  	Short:   "Generate current templates",
    38  	Long:    `Generate current templates`,
    39  	Run: func(cmd *cobra.Command, args []string) {
    40  		templateFilter, _ := cmd.Flags().GetString("template")
    41  		payload, err := template.Generate(templateFilter)
    42  		if err != nil {
    43  			log.Fatal("Failed to generate templates", slog.Any("err", err))
    44  		}
    45  
    46  		tableObj := table.NewWriter()
    47  		tableObj.SetOutputMirror(os.Stdout)
    48  		tableObj.SetStyle(table.StyleLight)
    49  
    50  		tableObj.AppendHeader(table.Row{"Template Name", "Output"})
    51  		count := 0
    52  		for key, val := range payload {
    53  			count += len(val)
    54  			for _, file := range val {
    55  				tableObj.AppendRow(table.Row{key, file})
    56  			}
    57  		}
    58  		slog.Info("Generate dashboards for the given templates",
    59  			slog.Any("template-count", len(payload)),
    60  			slog.Any("dashboard-count", count))
    61  		tableObj.Render()
    62  	},
    63  }
    64  
    65  func init() {
    66  	rootCmd.AddCommand(tplCmd)
    67  	tplCmd.AddCommand(listTemplatesCmd)
    68  	tplCmd.AddCommand(generateTemplatesCmd)
    69  	generateTemplatesCmd.PersistentFlags().StringP("template", "t", "", "Specify template name, optional.  Default is to operate on all configured templates that are found.")
    70  }