mirror of
https://github.com/nosqlbench/nosqlbench.git
synced 2025-02-25 18:55:28 -06:00
fixup of csv reporter, removed script context parameter
This commit is contained in:
committed by
Jonathan Shook
parent
71103041f9
commit
2986412036
@@ -16,10 +16,9 @@
|
||||
|
||||
package io.nosqlbench.engine.extensions.vectormath;
|
||||
|
||||
import com.codahale.metrics.MetricRegistry;
|
||||
import io.nosqlbench.api.config.LabeledScenarioContext;
|
||||
import io.nosqlbench.api.extensions.ScriptingExtensionPluginInfo;
|
||||
import io.nosqlbench.components.NBBaseComponent;
|
||||
import io.nosqlbench.components.NBComponent;
|
||||
import io.nosqlbench.nb.annotations.Service;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
@@ -31,7 +30,7 @@ public class CqlUtilsPluginInfo implements ScriptingExtensionPluginInfo<CqlUtils
|
||||
}
|
||||
|
||||
@Override
|
||||
public CqlUtils getExtensionObject(Logger logger, NBBaseComponent baseComponent, LabeledScenarioContext scriptContext) {
|
||||
public CqlUtils getExtensionObject(Logger logger, NBComponent baseComponent) {
|
||||
return new CqlUtils();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,10 +16,9 @@
|
||||
|
||||
package io.nosqlbench.engine.extensions.vectormath;
|
||||
|
||||
import com.codahale.metrics.MetricRegistry;
|
||||
import io.nosqlbench.api.config.LabeledScenarioContext;
|
||||
import io.nosqlbench.api.extensions.ScriptingExtensionPluginInfo;
|
||||
import io.nosqlbench.components.NBBaseComponent;
|
||||
import io.nosqlbench.components.NBComponent;
|
||||
import io.nosqlbench.nb.annotations.Service;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
@@ -31,7 +30,7 @@ public class PineconeScriptingUtilsPluginInfo implements ScriptingExtensionPlugi
|
||||
}
|
||||
|
||||
@Override
|
||||
public PineconeScriptingUtils getExtensionObject(Logger logger, NBBaseComponent baseComponent, LabeledScenarioContext scriptContext) {
|
||||
public PineconeScriptingUtils getExtensionObject(Logger logger, NBComponent baseComponent) {
|
||||
return new PineconeScriptingUtils();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -89,7 +89,6 @@ public class GroovyCycleFunction<T> implements CycleFunction<T> {
|
||||
LogManager.getLogger("extensions." + extensionDescriptor.getBaseVariableName());
|
||||
final Object extensionObject = extensionDescriptor.getExtensionObject(
|
||||
extensionLogger,
|
||||
null,
|
||||
null
|
||||
);
|
||||
logger.trace(() -> "Adding extension object: name=" + extensionDescriptor.getBaseVariableName() +
|
||||
|
||||
@@ -221,8 +221,7 @@ public class NBScenario extends NBBaseComponent implements Callable<ExecutionMet
|
||||
LogManager.getLogger("extensions." + extensionDescriptor.getBaseVariableName());
|
||||
final Object extensionObject = extensionDescriptor.getExtensionObject(
|
||||
extensionLogger,
|
||||
this,
|
||||
this.scriptEnv
|
||||
this
|
||||
);
|
||||
ScenarioMetadataAware.apply(extensionObject, this.getScenarioMetadata());
|
||||
this.logger.trace(() -> "Adding extension object: name=" + extensionDescriptor.getBaseVariableName() +
|
||||
|
||||
@@ -16,10 +16,9 @@
|
||||
|
||||
package io.nosqlbench.engine.extensions.computefunctions;
|
||||
|
||||
import com.codahale.metrics.MetricRegistry;
|
||||
import io.nosqlbench.api.config.LabeledScenarioContext;
|
||||
import io.nosqlbench.api.extensions.ScriptingExtensionPluginInfo;
|
||||
import io.nosqlbench.components.NBBaseComponent;
|
||||
import io.nosqlbench.components.NBComponent;
|
||||
import io.nosqlbench.nb.annotations.Service;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
@@ -33,7 +32,7 @@ public class ComputeFunctionPluginInfo implements ScriptingExtensionPluginInfo<C
|
||||
}
|
||||
|
||||
@Override
|
||||
public ComputeFunctions getExtensionObject(Logger logger, NBBaseComponent baseComponent, LabeledScenarioContext scriptContext) {
|
||||
public ComputeFunctions getExtensionObject(Logger logger, NBComponent baseComponent) {
|
||||
return new ComputeFunctions();
|
||||
}
|
||||
|
||||
|
||||
@@ -16,10 +16,9 @@
|
||||
|
||||
package io.nosqlbench.engine.extensions.conversions;
|
||||
|
||||
import com.codahale.metrics.MetricRegistry;
|
||||
import io.nosqlbench.api.config.LabeledScenarioContext;
|
||||
import io.nosqlbench.api.extensions.ScriptingExtensionPluginInfo;
|
||||
import io.nosqlbench.components.NBBaseComponent;
|
||||
import io.nosqlbench.components.NBComponent;
|
||||
import io.nosqlbench.nb.annotations.Service;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
@@ -33,7 +32,7 @@ public class ConversionUtilsPluginInfo implements ScriptingExtensionPluginInfo<C
|
||||
}
|
||||
|
||||
@Override
|
||||
public ConverterUtils getExtensionObject(Logger logger, NBBaseComponent baseComponent, LabeledScenarioContext scriptContext) {
|
||||
public ConverterUtils getExtensionObject(Logger logger, NBComponent baseComponent) {
|
||||
return new ConverterUtils();
|
||||
}
|
||||
|
||||
|
||||
@@ -1,111 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2022-2023 nosqlbench
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package io.nosqlbench.engine.extensions.csvmetrics;
|
||||
|
||||
import com.codahale.metrics.Metric;
|
||||
import io.nosqlbench.api.engine.metrics.reporters.CsvReporter;
|
||||
import io.nosqlbench.components.NBBaseComponent;
|
||||
import io.nosqlbench.components.NBBuilders;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Objects;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
public class CSVMetrics extends NBBaseComponent {
|
||||
|
||||
private NBBaseComponent baseComponent;
|
||||
private final NBBuilders builders;
|
||||
private final File reportTo;
|
||||
private CsvReporter reporter;
|
||||
private int interval = 1;
|
||||
private final Logger extensionLogger;
|
||||
|
||||
/**
|
||||
* Create a CSV reporter that is not automatically logging.
|
||||
* @param baseComponent a NBBaseComponent instance to report
|
||||
* @param directory a CSV logging filename
|
||||
* @param logger an extension logger, to be used for logging extension-specific events
|
||||
*/
|
||||
public CSVMetrics(NBBaseComponent baseComponent, String directory, Logger logger) {
|
||||
super(baseComponent);
|
||||
this.baseComponent = baseComponent;
|
||||
extensionLogger = logger;
|
||||
builders = new NBBuilders(baseComponent);
|
||||
File reportTo = new File(directory);
|
||||
if (!reportTo.exists()) {
|
||||
if (!reportTo.mkdirs()) {
|
||||
throw new RuntimeException("Unable to make directory: " + reportTo);
|
||||
}
|
||||
}
|
||||
this.reportTo = reportTo;
|
||||
}
|
||||
|
||||
public void setInterval(int interval) {
|
||||
this.interval = interval;
|
||||
}
|
||||
|
||||
private void initReporter() {
|
||||
if (reporter!=null) {
|
||||
return;
|
||||
}
|
||||
reporter = builders.csvReporter(reportTo, interval);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create an autologging CSV Reporter with the specified period
|
||||
* @param csvFile a CSV logging filename
|
||||
* @param logger an extension logger, to be used for logging extension-specific events
|
||||
* @param baseComponent a NBBaseComponent instance to report
|
||||
* @param period a period between reporting intervals
|
||||
*/
|
||||
public CSVMetrics(String csvFile, Logger logger, NBBaseComponent baseComponent, int period) {
|
||||
this(baseComponent, csvFile, logger);
|
||||
this.start(period);
|
||||
}
|
||||
|
||||
public CSVMetrics start(int period) {
|
||||
setInterval(period);
|
||||
initReporter();
|
||||
reporter.task();
|
||||
return this;
|
||||
}
|
||||
|
||||
public CSVMetrics add(Metric metric) {
|
||||
Objects.requireNonNull(metric);
|
||||
filter.add(metric);
|
||||
return this;
|
||||
}
|
||||
|
||||
public CSVMetrics addPattern(String regex) {
|
||||
filter.addPattern(regex);
|
||||
return this;
|
||||
}
|
||||
|
||||
private final MetricInstanceFilter filter = new MetricInstanceFilter();
|
||||
|
||||
public CSVMetrics stop() {
|
||||
reporter.teardown();
|
||||
return this;
|
||||
}
|
||||
|
||||
public CSVMetrics report() {
|
||||
initReporter();
|
||||
reporter.report();
|
||||
return this;
|
||||
}
|
||||
}
|
||||
@@ -1,76 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2022-2023 nosqlbench
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package io.nosqlbench.engine.extensions.csvmetrics;
|
||||
|
||||
import com.codahale.metrics.MetricRegistry;
|
||||
import io.nosqlbench.components.NBBaseComponent;
|
||||
import io.nosqlbench.components.NBComponent;
|
||||
import io.nosqlbench.components.NBComponentMetrics;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
import javax.script.ScriptContext;
|
||||
import java.io.IOException;
|
||||
|
||||
public class CSVMetricsPlugin extends NBBaseComponent {
|
||||
private final ScriptContext context;
|
||||
private final Logger logger;
|
||||
private final NBBaseComponent parent;
|
||||
|
||||
public CSVMetricsPlugin(Logger logger, NBBaseComponent parent, ScriptContext scriptContext) {
|
||||
super(parent);
|
||||
this.logger = logger;
|
||||
this.parent = parent;
|
||||
this.context = scriptContext;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new CSV metrics logger, without starting it.
|
||||
* @param filename The file to write CSV metrics data to
|
||||
* @return the CSVMetrics instance, for method chaining
|
||||
*/
|
||||
public CSVMetrics log(String filename) {
|
||||
CSVMetrics csvMetrics = new CSVMetrics(parent, filename, logger);
|
||||
writeStdout("started new csvmetrics: " + filename + "\n");
|
||||
return csvMetrics;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new CSV metrics logger, configure it with a regex filter pattern, and start it.
|
||||
* @param filename the file to write CSV metrics data to
|
||||
* @param period The time period to write at
|
||||
* @param timeUnit A time unit for the time period, from NANOSECONDS, MICROSECONDS, MILLISECONDS, SECONDS, MINUTES
|
||||
* @param pattern Zero or more patterns to use for filtering metric names
|
||||
* @return the CSVMetrics instance, for method chaining
|
||||
*/
|
||||
public CSVMetrics start(String filename, long period, String timeUnit, String... pattern) {
|
||||
CSVMetrics log = log(filename);
|
||||
for(String p:pattern) {
|
||||
log.addPattern(p);
|
||||
}
|
||||
return log.start((int)period);
|
||||
}
|
||||
|
||||
private void writeStdout(String msg) {
|
||||
try {
|
||||
context.getWriter().write(msg);
|
||||
} catch (IOException e) {
|
||||
logger.error(e.getMessage());
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,41 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2022-2023 nosqlbench
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package io.nosqlbench.engine.extensions.csvmetrics;
|
||||
|
||||
import io.nosqlbench.api.config.LabeledScenarioContext;
|
||||
import io.nosqlbench.api.extensions.ScriptingExtensionPluginInfo;
|
||||
import io.nosqlbench.components.NBBaseComponent;
|
||||
import io.nosqlbench.nb.annotations.Service;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
@Service(value = ScriptingExtensionPluginInfo.class, selector = "csvmetrics")
|
||||
public class CSVMetricsPluginData implements ScriptingExtensionPluginInfo<CSVMetricsPlugin> {
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return "Allows a script to log some or all metrics to CSV files";
|
||||
}
|
||||
|
||||
/*
|
||||
* metricComponent should be the Scenario as this is loaded out of NBScenario
|
||||
*/
|
||||
@Override
|
||||
public CSVMetricsPlugin getExtensionObject(final Logger logger, final NBBaseComponent scenario, final LabeledScenarioContext scriptContext) {
|
||||
return new CSVMetricsPlugin(logger, scenario, scriptContext);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
csvmetrics extension
|
||||
====================
|
||||
|
||||
This extension makes it easy to configure csv metrics to be logged to a path with a metrics reporter.
|
||||
|
||||
### Examples
|
||||
Explicitly control the timing of logging:
|
||||
~~~
|
||||
var csvlogger=csvmetrics.log("metrics.csv");
|
||||
csvlogger.report();
|
||||
~~~
|
||||
This example creates a csv logger but does not start it with automatic reporting. Also, since no metrics were explicitly added, all metrics are included by default.
|
||||
|
||||
Automate the reporting at some interval:
|
||||
~~~
|
||||
var csvlogger=csvmetrics.log("metrics.csv",30,"SECONDS");
|
||||
csvlogger.add(metrics.myactivity.cycles)
|
||||
~~~
|
||||
In this form, a logging thread is started at the interval specified
|
||||
by the second and third option. It also has exactly one metric, as adding a metric to it directly overrides the *match all metrics* default behavior.
|
||||
|
||||
It is also possible to start a csv logger without scheduled reporting, then to start it at some interval determined later:
|
||||
~~~
|
||||
var csvlogger=csvmetrics.log("metrics.csv");
|
||||
csvlogger.add(metrics.myactivity.cycles)
|
||||
csvlogger.start(30,"SECONDS");
|
||||
~~~
|
||||
|
||||
The third column must be the name of a TimeUnit from java.util.concurrent.TimeUnit, namely one of "NANOSECONDS", "MICROSECONDS", "MILLISECONDS", "SECONDS", "MINUTES", "HOURS", "DAYS", although effective values lower than 5 seconds should be avoided in most cases.
|
||||
@@ -16,10 +16,9 @@
|
||||
|
||||
package io.nosqlbench.engine.extensions.csvoutput;
|
||||
|
||||
import com.codahale.metrics.MetricRegistry;
|
||||
import io.nosqlbench.api.config.LabeledScenarioContext;
|
||||
import io.nosqlbench.api.extensions.ScriptingExtensionPluginInfo;
|
||||
import io.nosqlbench.components.NBBaseComponent;
|
||||
import io.nosqlbench.components.NBComponent;
|
||||
import io.nosqlbench.nb.annotations.Service;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
@@ -32,7 +31,7 @@ public class CsvOutputPluginData implements ScriptingExtensionPluginInfo<CsvOutp
|
||||
}
|
||||
|
||||
@Override
|
||||
public CsvOutputPluginInstance getExtensionObject(final Logger logger, final NBBaseComponent baseComponent, final LabeledScenarioContext scriptContext) {
|
||||
public CsvOutputPluginInstance getExtensionObject(final Logger logger, final NBComponent baseComponent) {
|
||||
return new CsvOutputPluginInstance();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,10 +16,9 @@
|
||||
|
||||
package io.nosqlbench.engine.extensions.example;
|
||||
|
||||
import com.codahale.metrics.MetricRegistry;
|
||||
import io.nosqlbench.api.config.LabeledScenarioContext;
|
||||
import io.nosqlbench.api.extensions.ScriptingExtensionPluginInfo;
|
||||
import io.nosqlbench.components.NBBaseComponent;
|
||||
import io.nosqlbench.components.NBComponent;
|
||||
import io.nosqlbench.nb.annotations.Service;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
@@ -33,7 +32,7 @@ public class ExamplePluginData implements ScriptingExtensionPluginInfo<ExamplePl
|
||||
}
|
||||
|
||||
@Override
|
||||
public ExamplePlugin getExtensionObject(final Logger logger, final NBBaseComponent baseComponent, final LabeledScenarioContext scriptContext) {
|
||||
public ExamplePlugin getExtensionObject(final Logger logger, final NBComponent baseComponent) {
|
||||
return new ExamplePlugin();
|
||||
}
|
||||
|
||||
|
||||
@@ -16,10 +16,9 @@
|
||||
|
||||
package io.nosqlbench.engine.extensions.files;
|
||||
|
||||
import com.codahale.metrics.MetricRegistry;
|
||||
import io.nosqlbench.api.config.LabeledScenarioContext;
|
||||
import io.nosqlbench.api.extensions.ScriptingExtensionPluginInfo;
|
||||
import io.nosqlbench.components.NBBaseComponent;
|
||||
import io.nosqlbench.components.NBComponent;
|
||||
import io.nosqlbench.nb.annotations.Service;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
@@ -32,7 +31,7 @@ public class FileAccessPluginData implements ScriptingExtensionPluginInfo<FileAc
|
||||
}
|
||||
|
||||
@Override
|
||||
public FileAccess getExtensionObject(final Logger logger, final NBBaseComponent baseComponent, final LabeledScenarioContext scriptContext) {
|
||||
public FileAccess getExtensionObject(final Logger logger, final NBComponent baseComponent) {
|
||||
return new FileAccess();
|
||||
}
|
||||
|
||||
|
||||
@@ -16,10 +16,9 @@
|
||||
|
||||
package io.nosqlbench.engine.extensions.globalvars;
|
||||
|
||||
import com.codahale.metrics.MetricRegistry;
|
||||
import io.nosqlbench.api.config.LabeledScenarioContext;
|
||||
import io.nosqlbench.api.extensions.ScriptingExtensionPluginInfo;
|
||||
import io.nosqlbench.components.NBBaseComponent;
|
||||
import io.nosqlbench.components.NBComponent;
|
||||
import io.nosqlbench.nb.annotations.Service;
|
||||
import io.nosqlbench.virtdata.library.basics.core.threadstate.SharedState;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
@@ -35,7 +34,7 @@ public class GlobalVarsScriptingExtensionPluginData implements ScriptingExtensio
|
||||
}
|
||||
|
||||
@Override
|
||||
public ConcurrentHashMap<String, Object> getExtensionObject(final Logger logger, final NBBaseComponent baseComponent, final LabeledScenarioContext scriptContext) {
|
||||
public ConcurrentHashMap<String, Object> getExtensionObject(final Logger logger, final NBComponent baseComponent) {
|
||||
final ConcurrentHashMap<String, Object> map = SharedState.gl_ObjectMap;
|
||||
return map;
|
||||
}
|
||||
|
||||
@@ -19,19 +19,18 @@ package io.nosqlbench.engine.extensions.histologger;
|
||||
import io.nosqlbench.api.engine.metrics.ActivityMetrics;
|
||||
import io.nosqlbench.components.NBBaseComponent;
|
||||
import com.codahale.metrics.MetricRegistry;
|
||||
import io.nosqlbench.components.NBComponent;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
import javax.script.ScriptContext;
|
||||
|
||||
public class HdrHistoLogPlugin {
|
||||
private final Logger logger;
|
||||
private final NBBaseComponent baseComponent;
|
||||
private final ScriptContext scriptContext;
|
||||
private final NBComponent baseComponent;
|
||||
|
||||
public HdrHistoLogPlugin(Logger logger, NBBaseComponent baseComponent, ScriptContext scriptContext) {
|
||||
public HdrHistoLogPlugin(Logger logger, NBComponent baseComponent) {
|
||||
this.logger = logger;
|
||||
this.baseComponent = baseComponent;
|
||||
this.scriptContext = scriptContext;
|
||||
}
|
||||
|
||||
public void logHistoIntervals(String session, String pattern, String filename, String interval) {
|
||||
|
||||
@@ -16,10 +16,9 @@
|
||||
|
||||
package io.nosqlbench.engine.extensions.histologger;
|
||||
|
||||
import com.codahale.metrics.MetricRegistry;
|
||||
import io.nosqlbench.api.config.LabeledScenarioContext;
|
||||
import io.nosqlbench.api.extensions.ScriptingExtensionPluginInfo;
|
||||
import io.nosqlbench.components.NBBaseComponent;
|
||||
import io.nosqlbench.components.NBComponent;
|
||||
import io.nosqlbench.nb.annotations.Service;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
@@ -33,7 +32,7 @@ public class HdrHistoLogPluginData implements ScriptingExtensionPluginInfo<HdrHi
|
||||
}
|
||||
|
||||
@Override
|
||||
public HdrHistoLogPlugin getExtensionObject(final Logger logger, final NBBaseComponent baseComponent, final LabeledScenarioContext scriptContext) {
|
||||
return new HdrHistoLogPlugin(logger,baseComponent,scriptContext);
|
||||
public HdrHistoLogPlugin getExtensionObject(final Logger logger, final NBComponent baseComponent) {
|
||||
return new HdrHistoLogPlugin(logger,baseComponent);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,9 +16,9 @@
|
||||
|
||||
package io.nosqlbench.engine.extensions.histostatslogger;
|
||||
|
||||
import com.codahale.metrics.MetricRegistry;
|
||||
import io.nosqlbench.api.engine.metrics.ActivityMetrics;
|
||||
import io.nosqlbench.components.NBBaseComponent;
|
||||
import io.nosqlbench.components.NBComponent;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
import javax.script.ScriptContext;
|
||||
@@ -26,13 +26,11 @@ import javax.script.ScriptContext;
|
||||
public class HistoStatsPlugin {
|
||||
|
||||
private final Logger logger;
|
||||
private final NBBaseComponent baseComponent;
|
||||
private final ScriptContext scriptContext;
|
||||
private final NBComponent baseComponent;
|
||||
|
||||
public HistoStatsPlugin(Logger logger, NBBaseComponent baseComponent, ScriptContext scriptContext) {
|
||||
public HistoStatsPlugin(Logger logger, NBComponent baseComponent) {
|
||||
this.logger = logger;
|
||||
this.baseComponent = baseComponent;
|
||||
this.scriptContext = scriptContext;
|
||||
}
|
||||
|
||||
public void logHistoStats(String sessionComment, String pattern, String filename , String interval) {
|
||||
|
||||
@@ -16,10 +16,10 @@
|
||||
|
||||
package io.nosqlbench.engine.extensions.histostatslogger;
|
||||
|
||||
import com.codahale.metrics.MetricRegistry;
|
||||
import io.nosqlbench.api.config.LabeledScenarioContext;
|
||||
import io.nosqlbench.api.extensions.ScriptingExtensionPluginInfo;
|
||||
import io.nosqlbench.components.NBBaseComponent;
|
||||
import io.nosqlbench.components.NBComponent;
|
||||
import io.nosqlbench.nb.annotations.Service;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
@@ -32,7 +32,7 @@ public class HistoStatsPluginData implements ScriptingExtensionPluginInfo<HistoS
|
||||
}
|
||||
|
||||
@Override
|
||||
public HistoStatsPlugin getExtensionObject(final Logger logger, final NBBaseComponent baseComponent, final LabeledScenarioContext scriptContext) {
|
||||
return new HistoStatsPlugin(logger,baseComponent,scriptContext);
|
||||
public HistoStatsPlugin getExtensionObject(final Logger logger, final NBComponent baseComponent) {
|
||||
return new HistoStatsPlugin(logger,baseComponent);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,10 +16,9 @@
|
||||
|
||||
package io.nosqlbench.engine.extensions.http;
|
||||
|
||||
import com.codahale.metrics.MetricRegistry;
|
||||
import io.nosqlbench.api.config.LabeledScenarioContext;
|
||||
import io.nosqlbench.api.extensions.ScriptingExtensionPluginInfo;
|
||||
import io.nosqlbench.components.NBBaseComponent;
|
||||
import io.nosqlbench.components.NBComponent;
|
||||
import io.nosqlbench.nb.annotations.Service;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
@@ -32,7 +31,7 @@ public class HttpPluginData implements ScriptingExtensionPluginInfo<HttpPlugin>
|
||||
}
|
||||
|
||||
@Override
|
||||
public HttpPlugin getExtensionObject(final Logger logger, final NBBaseComponent baseComponent, final LabeledScenarioContext scriptContext) {
|
||||
public HttpPlugin getExtensionObject(final Logger logger, final NBComponent baseComponent) {
|
||||
return new HttpPlugin();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,8 +16,8 @@
|
||||
|
||||
package io.nosqlbench.engine.extensions.optimizers;
|
||||
|
||||
import com.codahale.metrics.MetricRegistry;
|
||||
import io.nosqlbench.components.NBBaseComponent;
|
||||
import io.nosqlbench.components.NBComponent;
|
||||
import org.apache.commons.math3.analysis.MultivariateFunction;
|
||||
import org.apache.commons.math3.optim.*;
|
||||
import org.apache.commons.math3.optim.nonlinear.scalar.GoalType;
|
||||
@@ -33,8 +33,7 @@ import java.util.function.Function;
|
||||
public class BobyqaOptimizerInstance {
|
||||
|
||||
private final Logger logger;
|
||||
private final NBBaseComponent baseComponent;
|
||||
private final ScriptContext scriptContext;
|
||||
private final NBComponent baseComponent;
|
||||
|
||||
private int interpolations = 0;
|
||||
private double initialTrustRegionRadius = Double.MAX_VALUE;
|
||||
@@ -50,10 +49,9 @@ public class BobyqaOptimizerInstance {
|
||||
private MVLogger mvLogger;
|
||||
private double guessSlew = 0.25d;
|
||||
|
||||
public BobyqaOptimizerInstance(Logger logger, NBBaseComponent baseComponent, ScriptContext scriptContext) {
|
||||
public BobyqaOptimizerInstance(Logger logger, NBComponent baseComponent) {
|
||||
this.logger = logger;
|
||||
this.baseComponent = baseComponent;
|
||||
this.scriptContext = scriptContext;
|
||||
}
|
||||
|
||||
public BobyqaOptimizerInstance setPoints(int numberOfInterpolationPoints) {
|
||||
|
||||
@@ -16,9 +16,8 @@
|
||||
|
||||
package io.nosqlbench.engine.extensions.optimizers;
|
||||
|
||||
import com.codahale.metrics.MetricRegistry;
|
||||
import io.nosqlbench.components.NBBaseComponent;
|
||||
import io.nosqlbench.components.NBBuilders;
|
||||
import io.nosqlbench.components.NBComponent;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
import javax.script.ScriptContext;
|
||||
@@ -26,17 +25,15 @@ import javax.script.ScriptContext;
|
||||
public class BobyqaOptimizerPlugin {
|
||||
|
||||
private final Logger logger;
|
||||
private final NBBaseComponent baseComponent;
|
||||
private final ScriptContext scriptContext;
|
||||
private final NBComponent baseComponent;
|
||||
|
||||
public BobyqaOptimizerPlugin(Logger logger, NBBaseComponent baseComponent, ScriptContext scriptContext) {
|
||||
public BobyqaOptimizerPlugin(Logger logger, NBComponent baseComponent) {
|
||||
this.logger = logger;
|
||||
this.baseComponent = baseComponent;
|
||||
this.scriptContext = scriptContext;
|
||||
}
|
||||
|
||||
public BobyqaOptimizerInstance init() {
|
||||
return new BobyqaOptimizerInstance(logger,baseComponent,scriptContext);
|
||||
return new BobyqaOptimizerInstance(logger,baseComponent);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -16,10 +16,10 @@
|
||||
|
||||
package io.nosqlbench.engine.extensions.optimizers;
|
||||
|
||||
import com.codahale.metrics.MetricRegistry;
|
||||
import io.nosqlbench.api.config.LabeledScenarioContext;
|
||||
import io.nosqlbench.api.extensions.ScriptingExtensionPluginInfo;
|
||||
import io.nosqlbench.components.NBBaseComponent;
|
||||
import io.nosqlbench.components.NBComponent;
|
||||
import io.nosqlbench.nb.annotations.Service;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
@@ -32,8 +32,8 @@ public class BobyqaOptimizerPluginData implements ScriptingExtensionPluginInfo<B
|
||||
}
|
||||
|
||||
@Override
|
||||
public BobyqaOptimizerPlugin getExtensionObject(final Logger logger, final NBBaseComponent baseComponent, final LabeledScenarioContext scriptContext) {
|
||||
return new BobyqaOptimizerPlugin(logger, baseComponent, scriptContext);
|
||||
public BobyqaOptimizerPlugin getExtensionObject(final Logger logger, final NBComponent baseComponent) {
|
||||
return new BobyqaOptimizerPlugin(logger, baseComponent);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -20,13 +20,13 @@ import com.amazonaws.services.s3.AmazonS3;
|
||||
import com.amazonaws.services.s3.transfer.MultipleFileUpload;
|
||||
import com.amazonaws.services.s3.transfer.TransferManager;
|
||||
import com.amazonaws.services.s3.transfer.TransferManagerBuilder;
|
||||
import com.codahale.metrics.MetricRegistry;
|
||||
import io.nosqlbench.addins.s3.s3urlhandler.S3ClientCache;
|
||||
import io.nosqlbench.addins.s3.s3urlhandler.S3UrlFields;
|
||||
import io.nosqlbench.api.system.NBEnvironment;
|
||||
import io.nosqlbench.api.metadata.ScenarioMetadata;
|
||||
import io.nosqlbench.api.metadata.ScenarioMetadataAware;
|
||||
import io.nosqlbench.api.system.NBEnvironment;
|
||||
import io.nosqlbench.components.NBBaseComponent;
|
||||
import io.nosqlbench.components.NBComponent;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
import javax.script.ScriptContext;
|
||||
@@ -40,14 +40,12 @@ import java.util.Map;
|
||||
|
||||
public class S3Uploader implements ScenarioMetadataAware {
|
||||
private final Logger logger;
|
||||
private final NBBaseComponent baseComponent;
|
||||
private final ScriptContext scriptContext;
|
||||
private final NBComponent baseComponent;
|
||||
private ScenarioMetadata scenarioMetadata;
|
||||
|
||||
public S3Uploader(Logger logger, NBBaseComponent baseComponent, ScriptContext scriptContext) {
|
||||
public S3Uploader(Logger logger, NBComponent baseComponent) {
|
||||
this.logger = logger;
|
||||
this.baseComponent = baseComponent;
|
||||
this.scriptContext = scriptContext;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -16,13 +16,13 @@
|
||||
|
||||
package io.nosqlbench.engine.extensions.s3uploader;
|
||||
|
||||
import com.codahale.metrics.MetricRegistry;
|
||||
import io.nosqlbench.api.config.LabeledScenarioContext;
|
||||
import io.nosqlbench.api.extensions.ScriptingExtensionPluginInfo;
|
||||
import io.nosqlbench.components.NBBaseComponent;
|
||||
import io.nosqlbench.nb.annotations.Service;
|
||||
import io.nosqlbench.api.metadata.ScenarioMetadata;
|
||||
import io.nosqlbench.api.metadata.ScenarioMetadataAware;
|
||||
import io.nosqlbench.components.NBBaseComponent;
|
||||
import io.nosqlbench.components.NBComponent;
|
||||
import io.nosqlbench.nb.annotations.Service;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
@Service(value = ScriptingExtensionPluginInfo.class, selector = "s3")
|
||||
@@ -35,8 +35,8 @@ public class S3UploaderPluginData implements ScriptingExtensionPluginInfo<S3Uplo
|
||||
}
|
||||
|
||||
@Override
|
||||
public S3Uploader getExtensionObject(final Logger logger, final NBBaseComponent baseComponent, final LabeledScenarioContext scriptContext) {
|
||||
final S3Uploader uploader = new S3Uploader(logger, baseComponent, scriptContext);
|
||||
public S3Uploader getExtensionObject(final Logger logger, final NBComponent baseComponent) {
|
||||
final S3Uploader uploader = new S3Uploader(logger, baseComponent);
|
||||
ScenarioMetadataAware.apply(uploader, this.scenarioMetadata);
|
||||
return uploader;
|
||||
}
|
||||
|
||||
@@ -1,70 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2022-2023 nosqlbench
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package io.nosqlbench.engine.extensions.scriptingmetrics;
|
||||
|
||||
import com.codahale.metrics.MetricRegistry;
|
||||
import io.nosqlbench.api.config.LabeledScenarioContext;
|
||||
import io.nosqlbench.api.labels.NBLabeledElement;
|
||||
import io.nosqlbench.api.engine.metrics.DoubleSummaryGauge;
|
||||
import io.nosqlbench.api.engine.metrics.wrappers.RelevancyMeasures;
|
||||
import io.nosqlbench.components.NBBaseComponent;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public class ScriptingMetrics {
|
||||
private final Logger logger;
|
||||
private final NBBaseComponent baseComponent;
|
||||
private final LabeledScenarioContext scriptContext;
|
||||
|
||||
public ScriptingMetrics(final Logger logger, final NBBaseComponent baseComponent, final LabeledScenarioContext scriptContext) {
|
||||
this.logger = logger;
|
||||
this.baseComponent = baseComponent;
|
||||
this.scriptContext = scriptContext;
|
||||
}
|
||||
|
||||
public ScriptingGauge newStaticGauge(final String name, final double initialValue) {
|
||||
final ScriptingGauge scriptingGauge = new ScriptingGauge(name, initialValue);
|
||||
throw new RuntimeException("replace me when merging");
|
||||
}
|
||||
|
||||
public DoubleSummaryGauge newSummaryGauge(final String name) {
|
||||
throw new RuntimeException("replace me after merge");
|
||||
// this.logger.info(() -> "registered summmary gauge:" + name);
|
||||
// return summaryGauge;
|
||||
}
|
||||
|
||||
public DoubleSummaryGauge newSummaryGauge(NBLabeledElement context, final String name) {
|
||||
throw new RuntimeException("replace me after merge");
|
||||
// final DoubleSummaryGauge summaryGauge = ActivityMetrics.summaryGauge(context,name);
|
||||
// this.logger.info(() -> "registered summmary gauge:" + name);
|
||||
// return summaryGauge;
|
||||
}
|
||||
|
||||
// public RelevancyMeasures newRelevancyMeasures(NBLabeledElement parent, Map<String,String> labels) {
|
||||
// return new RelevancyMeasures(parent,labels);
|
||||
// }
|
||||
public RelevancyMeasures newRelevancyMeasures(NBLabeledElement parent) {
|
||||
return new RelevancyMeasures(parent);
|
||||
}
|
||||
// public RelevancyMeasures newRelevancyMeasures(NBLabeledElement parent, Object... labels) {
|
||||
// return new RelevancyMeasures(parent,labels);
|
||||
// }
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2022-2023 nosqlbench
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package io.nosqlbench.engine.extensions.scriptingmetrics;
|
||||
|
||||
import com.codahale.metrics.MetricRegistry;
|
||||
import io.nosqlbench.api.config.LabeledScenarioContext;
|
||||
import io.nosqlbench.api.extensions.ScriptingExtensionPluginInfo;
|
||||
import io.nosqlbench.components.NBBaseComponent;
|
||||
import io.nosqlbench.nb.annotations.Service;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
@Service(value= ScriptingExtensionPluginInfo.class, selector="scriptingmetrics")
|
||||
public class ScriptingMetricsPluginData implements ScriptingExtensionPluginInfo<ScriptingMetrics> {
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return "Allows you to create and append metrics within your scenario scripts";
|
||||
}
|
||||
|
||||
@Override
|
||||
public ScriptingMetrics getExtensionObject(final Logger logger, final NBBaseComponent baseComponent, final LabeledScenarioContext scriptContext) {
|
||||
return new ScriptingMetrics(logger,baseComponent,scriptContext);
|
||||
}
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
scriptingmetrics extension
|
||||
==========================
|
||||
|
||||
This extensions allows you to create and update metrics
|
||||
that are visible to nosqlbench from your scripting environment.
|
||||
|
||||
### Example
|
||||
~~~
|
||||
var mygauge= scriptingmetrics.newGauge("mygaugename", 1.0);
|
||||
...
|
||||
mygauge.update(5.3);
|
||||
...
|
||||
~~~
|
||||
|
||||
Any such metric will be available in the runtime as a standard metric. For now, only gauges are supported, but others may be added as needed.
|
||||
@@ -16,8 +16,7 @@
|
||||
|
||||
package io.nosqlbench.engine.shutdown;
|
||||
|
||||
import com.codahale.metrics.MetricRegistry;
|
||||
import io.nosqlbench.components.NBBaseComponent;
|
||||
import io.nosqlbench.components.NBComponent;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
import javax.script.ScriptContext;
|
||||
@@ -25,14 +24,12 @@ import java.util.function.Function;
|
||||
|
||||
public class ShutdownHookPlugin {
|
||||
private final Logger logger;
|
||||
private final NBBaseComponent baseComponent;
|
||||
private final ScriptContext scriptContext;
|
||||
private final NBComponent baseComponent;
|
||||
|
||||
public ShutdownHookPlugin(Logger logger, NBBaseComponent baseComponent, ScriptContext scriptContext) {
|
||||
public ShutdownHookPlugin(Logger logger, NBComponent baseComponent) {
|
||||
|
||||
this.logger = logger;
|
||||
this.baseComponent = baseComponent;
|
||||
this.scriptContext = scriptContext;
|
||||
}
|
||||
|
||||
public void addShutdownHook(String name, Object f) {
|
||||
|
||||
@@ -16,10 +16,9 @@
|
||||
|
||||
package io.nosqlbench.engine.shutdown;
|
||||
|
||||
import com.codahale.metrics.MetricRegistry;
|
||||
import io.nosqlbench.api.config.LabeledScenarioContext;
|
||||
import io.nosqlbench.api.extensions.ScriptingExtensionPluginInfo;
|
||||
import io.nosqlbench.components.NBBaseComponent;
|
||||
import io.nosqlbench.components.NBComponent;
|
||||
import io.nosqlbench.nb.annotations.Service;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
@@ -32,7 +31,7 @@ public class ShutdownHookPluginMetadata implements ScriptingExtensionPluginInfo<
|
||||
}
|
||||
|
||||
@Override
|
||||
public ShutdownHookPlugin getExtensionObject(final Logger logger, final NBBaseComponent baseComponent, final LabeledScenarioContext scriptContext) {
|
||||
return new ShutdownHookPlugin(logger,baseComponent,scriptContext);
|
||||
public ShutdownHookPlugin getExtensionObject(final Logger logger, final NBComponent baseComponent) {
|
||||
return new ShutdownHookPlugin(logger,baseComponent);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,21 +17,186 @@
|
||||
|
||||
package io.nosqlbench.api.engine.metrics.reporters;
|
||||
|
||||
import io.nosqlbench.components.NBBaseComponent;
|
||||
import com.codahale.metrics.*;
|
||||
import io.nosqlbench.api.engine.metrics.instruments.NBMetric;
|
||||
import io.nosqlbench.api.labels.NBLabels;
|
||||
import io.nosqlbench.components.NBComponent;
|
||||
import io.nosqlbench.components.PeriodicTaskComponent;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.*;
|
||||
import java.nio.file.Path;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import static java.nio.charset.StandardCharsets.UTF_8;
|
||||
|
||||
public class CsvReporter extends PeriodicTaskComponent {
|
||||
public CsvReporter(NBBaseComponent node, File reportTo, int interval) {
|
||||
super(node, null, interval, false);
|
||||
private static final Logger logger = LogManager.getLogger(CsvReporter.class);
|
||||
private final Path reportTo;
|
||||
private final String separator = ",";
|
||||
private final MetricInstanceFilter filter;
|
||||
private final Locale locale = Locale.US;
|
||||
private final Clock clock = Clock.defaultClock();
|
||||
private final String histogramFormat;
|
||||
private final String meterFormat;
|
||||
private final String timerFormat;
|
||||
|
||||
private final String timerHeader;
|
||||
private final String meterHeader;
|
||||
private final String histogramHeader;
|
||||
private final TimeUnit rateUnit = TimeUnit.SECONDS;
|
||||
private final TimeUnit durationUnit = TimeUnit.NANOSECONDS;
|
||||
private final long durationFactor;
|
||||
private final long rateFactor;
|
||||
private final NBComponent component;
|
||||
|
||||
public CsvReporter(NBComponent node, Path reportTo, int interval, MetricInstanceFilter filter,
|
||||
NBLabels extraLabels) {
|
||||
super(node, extraLabels, interval, false);
|
||||
this.component = node;
|
||||
this.reportTo = reportTo;
|
||||
this.filter = filter;
|
||||
this.durationFactor = durationUnit.toNanos(1);
|
||||
this.rateFactor = rateUnit.toSeconds(1);
|
||||
this.histogramFormat = String.join(separator, "%d", "%d", "%f", "%d", "%f", "%f", "%f", "%f", "%f", "%f", "%f");
|
||||
this.meterFormat = String.join(separator, "%d", "%f", "%f", "%f", "%f", "events/%s");
|
||||
this.timerFormat = String.join(separator, "%d", "%f", "%f", "%f", "%f", "%f", "%f", "%f", "%f", "%f", "%f", "%f", "%f", "%f", "%f", "calls/%s", "%s");
|
||||
|
||||
this.timerHeader = String.join(separator, "count", "max", "mean", "min", "stddev", "p50", "p75", "p95", "p98", "p99", "p999", "mean_rate", "m1_rate", "m5_rate", "m15_rate", "rate_unit", "duration_unit");
|
||||
this.meterHeader = String.join(separator, "count", "mean_rate", "m1_rate", "m5_rate", "m15_rate", "rate_unit");
|
||||
this.histogramHeader = String.join(separator, "count", "max", "mean", "min", "stddev", "p50", "p75", "p95", "p98", "p99", "p999");
|
||||
}
|
||||
|
||||
public CsvReporter(NBComponent node, Path reportTo, int interval, MetricInstanceFilter filter) {
|
||||
this(node, reportTo, interval, filter, null);
|
||||
}
|
||||
|
||||
public void start() {
|
||||
List<NBMetric> metrics = component.findMetricsInTree("");
|
||||
final long timestamp = TimeUnit.MILLISECONDS.toSeconds(clock.getTime());
|
||||
for (NBMetric metric : metrics) {
|
||||
if (metric instanceof Gauge<?>) {
|
||||
reportGauge(timestamp, metric.getLabels().linearizeAsMetrics(), (Gauge<?>) metric);
|
||||
} else if (metric instanceof Counter) {
|
||||
reportCounter(timestamp, metric.getLabels().linearizeAsMetrics(), (Counter) metric);
|
||||
} else if (metric instanceof Histogram) {
|
||||
reportHistogram(timestamp, metric.getLabels().linearizeAsMetrics(), (Histogram) metric);
|
||||
} else if (metric instanceof Meter) {
|
||||
reportMeter(timestamp, metric.getLabels().linearizeAsMetrics(), (Meter) metric);
|
||||
} else if (metric instanceof Timer) {
|
||||
reportTimer(timestamp, metric.getLabels().linearizeAsMetrics(), (Timer) metric);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected double convertDuration(double duration) {
|
||||
return duration / durationFactor;
|
||||
}
|
||||
|
||||
protected double convertRate(double rate) {
|
||||
return rate * rateFactor;
|
||||
}
|
||||
|
||||
private void reportTimer(long timestamp, String name, Timer timer) {
|
||||
final Snapshot snapshot = timer.getSnapshot();
|
||||
|
||||
report(timestamp,
|
||||
name,
|
||||
timerHeader,
|
||||
timerFormat,
|
||||
timer.getCount(),
|
||||
convertDuration(snapshot.getMax()),
|
||||
convertDuration(snapshot.getMean()),
|
||||
convertDuration(snapshot.getMin()),
|
||||
convertDuration(snapshot.getStdDev()),
|
||||
convertDuration(snapshot.getMedian()),
|
||||
convertDuration(snapshot.get75thPercentile()),
|
||||
convertDuration(snapshot.get95thPercentile()),
|
||||
convertDuration(snapshot.get98thPercentile()),
|
||||
convertDuration(snapshot.get99thPercentile()),
|
||||
convertDuration(snapshot.get999thPercentile()),
|
||||
convertRate(timer.getMeanRate()),
|
||||
convertRate(timer.getOneMinuteRate()),
|
||||
convertRate(timer.getFiveMinuteRate()),
|
||||
convertRate(timer.getFifteenMinuteRate()),
|
||||
this.rateUnit,
|
||||
this.durationUnit);
|
||||
}
|
||||
|
||||
private void reportMeter(long timestamp, String name, Meter meter) {
|
||||
report(timestamp,
|
||||
name,
|
||||
meterHeader,
|
||||
meterFormat,
|
||||
meter.getCount(),
|
||||
convertRate(meter.getMeanRate()),
|
||||
convertRate(meter.getOneMinuteRate()),
|
||||
convertRate(meter.getFiveMinuteRate()),
|
||||
convertRate(meter.getFifteenMinuteRate()),
|
||||
this.rateUnit);
|
||||
}
|
||||
|
||||
private void reportHistogram(long timestamp, String name, Histogram histogram) {
|
||||
final Snapshot snapshot = histogram.getSnapshot();
|
||||
|
||||
report(timestamp,
|
||||
name,
|
||||
histogramHeader,
|
||||
histogramFormat,
|
||||
histogram.getCount(),
|
||||
snapshot.getMax(),
|
||||
snapshot.getMean(),
|
||||
snapshot.getMin(),
|
||||
snapshot.getStdDev(),
|
||||
snapshot.getMedian(),
|
||||
snapshot.get75thPercentile(),
|
||||
snapshot.get95thPercentile(),
|
||||
snapshot.get98thPercentile(),
|
||||
snapshot.get99thPercentile(),
|
||||
snapshot.get999thPercentile());
|
||||
}
|
||||
|
||||
private void reportCounter(long timestamp, String name, Counter counter) {
|
||||
report(timestamp, name, "count", "%d", counter.getCount());
|
||||
}
|
||||
|
||||
private void reportGauge(long timestamp, String name, Gauge<?> gauge) {
|
||||
report(timestamp, name, "value", "%s", gauge.getValue());
|
||||
}
|
||||
|
||||
private void report(long timestamp, String name, String header, String line, Object... values) {
|
||||
try {
|
||||
final File file = new File(reportTo + ".csv");
|
||||
final boolean fileAlreadyExists = file.exists();
|
||||
if (fileAlreadyExists || file.createNewFile()) {
|
||||
try (PrintWriter out = new PrintWriter(new OutputStreamWriter(
|
||||
new FileOutputStream(file, true), UTF_8))) {
|
||||
if (!fileAlreadyExists) {
|
||||
out.println("t" + separator + header);
|
||||
}
|
||||
out.printf(locale, String.format(locale, "%d" + separator + "%s%n", timestamp, line), values);
|
||||
}
|
||||
}
|
||||
} catch (IOException e) {
|
||||
logger.warn("Error writing to {}", name, e);
|
||||
}
|
||||
}
|
||||
|
||||
protected String sanitize(String fileName) {
|
||||
//TODO: sanitize file name
|
||||
return fileName;
|
||||
}
|
||||
|
||||
public void teardown() {
|
||||
super.teardown();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void task() {
|
||||
|
||||
this.start();
|
||||
}
|
||||
|
||||
public void report() {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2022 nosqlbench
|
||||
* Copyright (c) 2022-2023 nosqlbench
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -12,8 +12,9 @@
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
*/
|
||||
package io.nosqlbench.engine.extensions.csvmetrics;
|
||||
package io.nosqlbench.api.engine.metrics.reporters;
|
||||
|
||||
import com.codahale.metrics.Metric;
|
||||
import com.codahale.metrics.MetricFilter;
|
||||
@@ -43,10 +43,9 @@ public interface ScriptingExtensionPluginInfo<T> {
|
||||
/**
|
||||
* @param logger A logger named for the extension, in case the extension wants to log internally
|
||||
* @param component The main metrics component, in case the extension wants to track metrics internally
|
||||
* @param scriptContext The scripting context object, useful for interacting with the sandbox directly
|
||||
* @return a new instance of an extension. The extension is given a logger if it desires.
|
||||
*/
|
||||
T getExtensionObject(Logger logger, NBBaseComponent component, LabeledScenarioContext scriptContext);
|
||||
T getExtensionObject(Logger logger, NBComponent component);
|
||||
|
||||
/**
|
||||
* @return a simple name at the root of the variable namespace to anchor this extension.
|
||||
|
||||
@@ -25,12 +25,14 @@ import io.nosqlbench.api.engine.metrics.instruments.NBMetricHistogram;
|
||||
import io.nosqlbench.api.engine.metrics.instruments.NBMetricTimer;
|
||||
import io.nosqlbench.api.engine.metrics.reporters.CsvReporter;
|
||||
import io.nosqlbench.api.engine.metrics.instruments.*;
|
||||
import io.nosqlbench.api.engine.metrics.reporters.MetricInstanceFilter;
|
||||
import io.nosqlbench.api.engine.metrics.reporters.PromPushReporterComponent;
|
||||
import io.nosqlbench.api.labels.NBLabels;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
import java.io.File;
|
||||
import java.nio.file.Path;
|
||||
import java.util.Arrays;
|
||||
import java.util.DoubleSummaryStatistics;
|
||||
import java.util.List;
|
||||
@@ -118,9 +120,39 @@ public class NBBuilders {
|
||||
return reporter;
|
||||
}
|
||||
|
||||
public CsvReporter csvReporter(File reportTo, int interval) {
|
||||
CsvReporter reporter = new CsvReporter(base, reportTo, interval);
|
||||
return reporter;
|
||||
public static class csvReporterBuilder {
|
||||
private final NBComponent component;
|
||||
private Path reportTo = Path.of("metrics.csv");
|
||||
private int interval = 1;
|
||||
private MetricInstanceFilter filter = new MetricInstanceFilter();
|
||||
private NBLabels labels = null;
|
||||
|
||||
public csvReporterBuilder(NBComponent component) {
|
||||
this.component = component;
|
||||
}
|
||||
public csvReporterBuilder labels(NBLabels labels) {
|
||||
this.labels = labels;
|
||||
return this;
|
||||
}
|
||||
public csvReporterBuilder path(Path reportTo) {
|
||||
this.reportTo = reportTo;
|
||||
return this;
|
||||
}
|
||||
public csvReporterBuilder path(String reportTo) {
|
||||
this.reportTo = Path.of(reportTo);
|
||||
return this;
|
||||
}
|
||||
public csvReporterBuilder interval(int interval) {
|
||||
this.interval = interval;
|
||||
return this;
|
||||
}
|
||||
public csvReporterBuilder filter(MetricInstanceFilter filter) {
|
||||
this.filter = filter;
|
||||
return this;
|
||||
}
|
||||
public CsvReporter build() {
|
||||
return new CsvReporter(component, reportTo, interval, filter);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user