scripts/generate-docs/sample_event.go (45 lines of code) (raw):
// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
// or more contributor license agreements. Licensed under the Elastic License;
// you may not use this file except in compliance with the Elastic License.
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"path/filepath"
"strings"
"github.com/pkg/errors"
)
const sampleEventFile = "sample_event.json"
func renderSampleEvent(options generateOptions, packageName, dataStreamName string) (string, error) {
eventPath := filepath.Join(options.packagesSourceDir, packageName, "data_stream", dataStreamName, sampleEventFile)
body, err := ioutil.ReadFile(eventPath)
if err != nil {
return "", errors.Wrapf(err, "reading sample event file failed (path: %s)", eventPath)
}
formatted, err := formatSampleEvent(body)
if err != nil {
return "", errors.Wrapf(err, "formatting sample event file failed (path: %s)", eventPath)
}
var builder strings.Builder
builder.WriteString(fmt.Sprintf("An example event for `%s` looks as following:\n\n",
stripDataStreamFolderSuffix(dataStreamName)))
builder.WriteString("```$json\n")
builder.Write(formatted)
builder.WriteString("\n```")
return builder.String(), nil
}
func formatSampleEvent(body []byte) ([]byte, error) {
var d map[string]interface{}
err := json.Unmarshal(body, &d)
if err != nil {
return nil, errors.Wrap(err, "unmarshaling sample event file failed")
}
body, err = json.MarshalIndent(d, "", " ")
if err != nil {
return nil, errors.Wrap(err, "marshaling sample event file failed")
}
return body, nil
}
func stripDataStreamFolderSuffix(dataStreamName string) string {
dataStreamName = strings.ReplaceAll(dataStreamName, "_metrics", "")
dataStreamName = strings.ReplaceAll(dataStreamName, "_logs", "")
return dataStreamName
}