in cmd/create_data_stream.go [33:136]
func createDataStreamCommandAction(cmd *cobra.Command, args []string) error {
cmd.Println("Create a new data stream")
packageRoot, found, err := packages.FindPackageRoot()
if err != nil {
return fmt.Errorf("locating package root failed: %w", err)
}
if !found {
return errors.New("package root not found, you can only create new data stream in the package context")
}
manifest, err := packages.ReadPackageManifestFromPackageRoot(packageRoot)
if err != nil {
return fmt.Errorf("reading package manifest failed (path: %s): %w", packageRoot, err)
}
if manifest.Type == "input" {
return fmt.Errorf("data-streams are not supported in input packages")
}
qs := []*survey.Question{
{
Name: "name",
Prompt: &survey.Input{
Message: "Data stream name:",
Default: "new_data_stream",
},
Validate: survey.ComposeValidators(survey.Required, surveyext.DataStreamDoesNotExistValidator, surveyext.DataStreamNameValidator),
},
{
Name: "title",
Prompt: &survey.Input{
Message: "Data stream title:",
Default: "New Data Stream",
},
Validate: survey.Required,
},
{
Name: "type",
Prompt: &survey.Select{
Message: "Type:",
Options: []string{"logs", "metrics"},
Default: "logs",
},
Validate: survey.Required,
},
{
Name: "subobjects",
Prompt: &survey.Confirm{
Message: "Enable creation of subobjects for fields with dots in their names?",
Default: false,
},
Validate: survey.Required,
},
}
var answers newDataStreamAnswers
err = survey.Ask(qs, &answers)
if err != nil {
return fmt.Errorf("prompt failed: %w", err)
}
if answers.Type == "metrics" {
qs := []*survey.Question{
{
Name: "syntheticAndTimeSeries",
Prompt: &survey.Confirm{
Message: "Enable time series and synthetic source?",
Default: true,
},
Validate: survey.Required,
},
}
err = survey.Ask(qs, &answers)
if err != nil {
return fmt.Errorf("prompt failed: %w", err)
}
if !answers.SyntheticAndTimeSeries {
qs := []*survey.Question{
{
Name: "synthetic",
Prompt: &survey.Confirm{
Message: "Enable synthetic source?",
Default: true,
},
Validate: survey.Required,
},
}
err = survey.Ask(qs, &answers)
if err != nil {
return fmt.Errorf("prompt failed: %w", err)
}
}
}
descriptor := createDataStreamDescriptorFromAnswers(answers, packageRoot)
err = archetype.CreateDataStream(descriptor)
if err != nil {
return fmt.Errorf("can't create new data stream: %w", err)
}
cmd.Println("Done")
return nil
}