func TemplateCmd()

in cmd/local-template.go [24:107]


func TemplateCmd() *cobra.Command {
	command := &cobra.Command{
		Use:     "local-template package dataset",
		Example: "local-template aws billing",
		Short:   "Generate a corpus from a local template",
		Long:    "Generate a bulk request corpus for the specified package dataset in the assets/templates folder",
		Args: func(cmd *cobra.Command, args []string) error {
			if len(args) != 2 {
				return errors.New("package and dataset arguments are required")
			}

			datasetFolder := filepath.Join("assets", "templates", fmt.Sprintf("%s.%s", args[0], args[1]))
			if _, err := os.Stat(datasetFolder); errors.Is(err, os.ErrNotExist) {
				return errors.New(fmt.Sprintf("dataset folder %s does not exists", datasetFolder))
			}

			return nil
		},
		RunE: func(cmd *cobra.Command, args []string) error {
			fs := afero.NewOsFs()
			location := viper.GetString("corpora_location")

			cfg, err := config.LoadConfig(fs, configFile)
			if err != nil {
				return err
			}

			var errs []error
			datasetFolder := fmt.Sprintf("%s.%s", args[0], args[1])
			schema := fmt.Sprintf("schema-%s", flagSchema)
			datasetFolderPath := filepath.Join("assets", "templates", datasetFolder, schema)

			templateFile := fmt.Sprintf("%s.tpl", templateType)
			templatePath := filepath.Join(datasetFolderPath, templateFile)
			if _, err := os.Stat(templatePath); errors.Is(err, os.ErrNotExist) {
				errs = append(errs, errors.New(fmt.Sprintf("template file %s does not exist", templatePath)))
			}

			fieldsDefinitionFile := "fields.yml"
			fieldsDefinitionPath := filepath.Join(datasetFolderPath, fieldsDefinitionFile)
			if _, err := os.Stat(templatePath); errors.Is(err, os.ErrNotExist) {
				errs = append(errs, errors.New(fmt.Sprintf("fields definition file %s does not exist", fieldsDefinitionPath)))
			}

			fieldsConfigFile := "configs.yml"
			fieldsConfigFilePath := filepath.Join(datasetFolderPath, fieldsConfigFile)
			if _, err := os.Stat(fieldsConfigFilePath); errors.Is(err, os.ErrNotExist) {
				log.Printf("fields config file %s does not exist", fieldsConfigFilePath)
			}

			if len(errs) > 0 {
				return multierr.Combine(errs...)
			}

			fc, err := corpus.NewGeneratorWithTemplate(cfg, afero.NewOsFs(), location, templateType)
			if err != nil {
				return err
			}

			timeNow, err := getTimeNowFromFlag(timeNowAsString)
			if err != nil {
				return err
			}

			payloadFilename, err := fc.GenerateWithTemplate(templatePath, fieldsDefinitionPath, totEvents, timeNow, randSeed)
			if err != nil {
				return err
			}

			fmt.Println("File generated:", payloadFilename)

			return nil
		},
	}

	command.Flags().StringVarP(&configFile, "config-file", "c", "", "path to config file for generator settings")
	command.Flags().StringVarP(&templateType, "engine", "e", "gotext", "either 'placeholder' or 'gotext'")
	command.Flags().Uint64VarP(&totEvents, "tot-events", "t", 1, "total events of the corpus to generate")
	command.Flags().StringVarP(&flagSchema, "schema", "", "b", "schema to generate data for; valid values: a, b")
	command.Flags().StringVarP(&timeNowAsString, "now", "n", "", "time to use for generation based on now (`date` type)")

	command.Flags().Int64VarP(&randSeed, "seed", "s", 1, "seed to set as source of rand")
	return command
}