Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
371a8ab
Initialize Metricstore
marc-gr Jun 26, 2023
b5189b5
Fix package policy Var placement
marc-gr Jun 26, 2023
19268a3
Add reindex functionality
marc-gr Jun 26, 2023
2e88cf5
Refactor waitfordatatimeout usage
marc-gr Jun 26, 2023
8780b35
Fix filter agent policy id
marc-gr Jun 27, 2023
40cbb92
Improve report
marc-gr Jun 29, 2023
7118946
Collect metrics to metricstore if configured
marc-gr Jun 29, 2023
29fb96a
Add support for other service deployers
marc-gr Jun 29, 2023
a72a1ed
Gracefully handle errors
marc-gr Jul 3, 2023
b002a0d
Allow setting custom policy_template value
marc-gr Jul 3, 2023
d7a0a75
Improve metrics collection lifecycle
marc-gr Jul 3, 2023
70d5931
Add docs
marc-gr Jul 4, 2023
de517ad
Use DevDeployDir where required
marc-gr Jul 4, 2023
604e3f7
Exit appropiately when timeout is exceeded
marc-gr Jul 5, 2023
60bc74f
Set corpus file permissions
marc-gr Jul 6, 2023
5fa9987
Add metricstore docs
marc-gr Jul 7, 2023
23282b5
Merge remote-tracking branch 'upstream/main' into system-benchmarks-i…
marc-gr Jul 12, 2023
cfb50c2
Merge remote-tracking branch 'upstream/main' into system-benchmarks-i…
marc-gr Aug 14, 2023
4e6e963
Fix error message
marc-gr Aug 21, 2023
4a974eb
Improve documentation
marc-gr Aug 21, 2023
c3e5ef9
Rename field and extract index template
marc-gr Aug 21, 2023
208d848
Add types and comment to reindex function
marc-gr Aug 21, 2023
1ec12e8
Remove unused fields from node stats
marc-gr Aug 21, 2023
b22bf9d
Merge remote-tracking branch 'upstream/main' into system-benchmarks-i…
marc-gr Aug 21, 2023
c0fd1bf
Merge remote-tracking branch 'upstream/main' into system-benchmarks-i…
marc-gr Aug 22, 2023
478d1e6
Merge remote-tracking branch 'upstream/main' into system-benchmarks-i…
marc-gr Aug 22, 2023
63c5702
Use stack method for ES client creation
marc-gr Aug 22, 2023
2a3f889
Increase test data timeout
marc-gr Aug 22, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 57 additions & 5 deletions cmd/benchmark.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,19 @@
package cmd

import (
"context"
"errors"
"fmt"
"os"
"strings"
"time"

"github.com/dustin/go-humanize"

"github.com/elastic/elastic-package/internal/corpusgenerator"
"github.com/elastic/elastic-package/internal/elasticsearch"
"github.com/elastic/elastic-package/internal/install"
"github.com/elastic/elastic-package/internal/logger"
"github.com/elastic/elastic-package/internal/stack"

"github.com/spf13/cobra"
Expand Down Expand Up @@ -215,13 +219,19 @@ func getSystemCommand() *cobra.Command {
cmd.Flags().BoolP(cobraext.BenchReindexToMetricstoreFlagName, "", false, cobraext.BenchReindexToMetricstoreFlagDescription)
cmd.Flags().DurationP(cobraext.BenchMetricsIntervalFlagName, "", time.Second, cobraext.BenchMetricsIntervalFlagDescription)
cmd.Flags().DurationP(cobraext.DeferCleanupFlagName, "", 0, cobraext.DeferCleanupFlagDescription)
cmd.Flags().String(cobraext.VariantFlagName, "", cobraext.VariantFlagDescription)

return cmd
}

func systemCommandAction(cmd *cobra.Command, args []string) error {
cmd.Println("Run system benchmarks for the package")

variant, err := cmd.Flags().GetString(cobraext.VariantFlagName)
if err != nil {
return cobraext.FlagParsingError(err, cobraext.VariantFlagName)
}

benchName, err := cmd.Flags().GetString(cobraext.BenchNameFlagName)
if err != nil {
return cobraext.FlagParsingError(err, cobraext.BenchNameFlagName)
Expand Down Expand Up @@ -271,7 +281,8 @@ func systemCommandAction(cmd *cobra.Command, args []string) error {
return fmt.Errorf("can't create Kibana client: %w", err)
}

opts := system.NewOptions(
withOpts := []system.OptionFunc{
system.WithVariant(variant),
system.WithBenchmarkName(benchName),
system.WithDeferCleanup(deferCleanup),
system.WithMetricsInterval(metricsInterval),
Expand All @@ -280,8 +291,17 @@ func systemCommandAction(cmd *cobra.Command, args []string) error {
system.WithESAPI(esClient.API),
system.WithKibanaClient(kc),
system.WithProfile(profile),
)
runner := system.NewSystemBenchmark(opts)
}

esMetricsClient, err := initializeESMetricsClient(cmd.Context())
if err != nil {
return fmt.Errorf("can't create Elasticsearch metrics client: %w", err)
}
if esMetricsClient != nil {
withOpts = append(withOpts, system.WithESMetricsAPI(esMetricsClient.API))
}

runner := system.NewSystemBenchmark(system.NewOptions(withOpts...))

r, err := benchrunner.Run(runner)
if err != nil {
Expand All @@ -293,14 +313,19 @@ func systemCommandAction(cmd *cobra.Command, args []string) error {
return fmt.Errorf("system benchmark is expected to return multiple reports")
}

reports := multiReport.Split()
if len(reports) != 2 {
return fmt.Errorf("system benchmark is expected to return a human an a file report")
}

// human report will always be the first
human := multiReport.Split()[0]
human := reports[0]
if err := reporters.WriteReportable(reporters.Output(outputs.ReportOutputSTDOUT), human); err != nil {
return fmt.Errorf("error writing benchmark report: %w", err)
}

// file report will always be the second
file := multiReport.Split()[1]
file := reports[1]
if err := reporters.WriteReportable(reporters.Output(outputs.ReportOutputFile), file); err != nil {
return fmt.Errorf("error writing benchmark report: %w", err)
}
Expand Down Expand Up @@ -375,3 +400,30 @@ func generateDataStreamCorpusCommandAction(cmd *cobra.Command, _ []string) error

return nil
}

func initializeESMetricsClient(ctx context.Context) (*elasticsearch.Client, error) {
address := os.Getenv(system.ESMetricstoreHostEnv)
user := os.Getenv(system.ESMetricstoreUsernameEnv)
pass := os.Getenv(system.ESMetricstorePasswordEnv)
cacert := os.Getenv(system.ESMetricstoreCACertificateEnv)
if address == "" || user == "" || pass == "" {
logger.Debugf("can't initialize metricstore, missing environment configuration")
return nil, nil
}

esClient, err := stack.NewElasticsearchClient(
elasticsearch.OptionWithAddress(address),
elasticsearch.OptionWithUsername(user),
elasticsearch.OptionWithPassword(pass),
elasticsearch.OptionWithCertificateAuthority(cacert),
)
if err != nil {
return nil, err
}

if err := esClient.CheckHealth(ctx); err != nil {
return nil, err
}

return esClient, nil
}
2 changes: 2 additions & 0 deletions cmd/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import (
"github.com/elastic/elastic-package/internal/install"
"github.com/elastic/elastic-package/internal/packages"
"github.com/elastic/elastic-package/internal/service"
"github.com/elastic/elastic-package/internal/testrunner/runners/system"
)

const serviceLongDescription = `Use this command to boot up the service stack that can be observed with the package.
Expand Down Expand Up @@ -70,6 +71,7 @@ func upCommandAction(cmd *cobra.Command, args []string) error {
Profile: profile,
ServiceName: serviceName,
PackageRootPath: packageRoot,
DevDeployDir: system.DevDeployDir,
DataStreamRootPath: dataStreamPath,
Variant: variantFlag,
})
Expand Down
Loading