internal/benchrunner/runners/pipeline/testcase.go (79 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 pipeline
import (
"bufio"
"bytes"
"encoding/json"
"fmt"
"strings"
"github.com/elastic/elastic-package/internal/common"
"github.com/elastic/elastic-package/internal/formatter"
)
type benchmark struct {
events []json.RawMessage
config *config
}
type benchmarkDefinition struct {
Events []json.RawMessage `json:"events"`
}
func readBenchmarkEntriesForEvents(inputData []byte) ([]json.RawMessage, error) {
var tcd benchmarkDefinition
err := formatter.JSONUnmarshalUsingNumber(inputData, &tcd)
if err != nil {
return nil, fmt.Errorf("unmarshalling input data failed: %w", err)
}
return tcd.Events, nil
}
func readBenchmarkEntriesForRawInput(inputData []byte) ([]json.RawMessage, error) {
entries, err := readRawInputEntries(inputData)
if err != nil {
return nil, fmt.Errorf("reading raw input entries failed: %w", err)
}
var events []json.RawMessage
for _, entry := range entries {
event := map[string]interface{}{}
event["message"] = entry
m, err := json.Marshal(&event)
if err != nil {
return nil, fmt.Errorf("marshalling mocked event failed: %w", err)
}
events = append(events, m)
}
return events, nil
}
func createBenchmark(entries []json.RawMessage, config *config) (*benchmark, error) {
var events []json.RawMessage
for _, entry := range entries {
var m common.MapStr
err := formatter.JSONUnmarshalUsingNumber(entry, &m)
if err != nil {
return nil, fmt.Errorf("can't unmarshal benchmark entry: %w", err)
}
event, err := json.Marshal(&m)
if err != nil {
return nil, fmt.Errorf("marshalling event failed: %w", err)
}
events = append(events, event)
}
return &benchmark{
events: events,
config: config,
}, nil
}
func readRawInputEntries(inputData []byte) ([]string, error) {
var inputDataEntries []string
var builder strings.Builder
scanner := bufio.NewScanner(bytes.NewReader(inputData))
for scanner.Scan() {
line := scanner.Text()
inputDataEntries = append(inputDataEntries, line)
}
err := scanner.Err()
if err != nil {
return nil, fmt.Errorf("reading raw input benchmark file failed: %w", err)
}
lastEntry := builder.String()
if len(lastEntry) > 0 {
inputDataEntries = append(inputDataEntries, lastEntry)
}
return inputDataEntries, nil
}