mirror of
https://github.com/nosqlbench/nosqlbench.git
synced 2025-02-25 18:55:28 -06:00
add pre-computed error rates for error_rate_1m, error_rate_5m, error_rate_15m, error_rate_total and errors_total
This commit is contained in:
parent
e28fd68635
commit
e09e0f5e99
@ -21,6 +21,7 @@ import com.codahale.metrics.Histogram;
|
||||
import com.codahale.metrics.Timer;
|
||||
import io.nosqlbench.engine.api.activityapi.planning.OpSequence;
|
||||
import io.nosqlbench.adapters.api.activityimpl.OpDispenser;
|
||||
import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetricGauge;
|
||||
|
||||
import java.util.concurrent.Future;
|
||||
|
||||
@ -33,6 +34,16 @@ import java.util.concurrent.Future;
|
||||
*/
|
||||
public interface ActivityInstrumentation {
|
||||
|
||||
NBMetricGauge getOrCreateErrorsTotal();
|
||||
|
||||
NBMetricGauge getOrCreateErrorRate1m();
|
||||
|
||||
NBMetricGauge getOrCreateErrorRate5m();
|
||||
|
||||
NBMetricGauge getOrCreateErrorRate15m();
|
||||
|
||||
NBMetricGauge getOrCreateErrorRateTotal();
|
||||
|
||||
/**
|
||||
* The input timer measures how long it takes to get the cycle value to be used for
|
||||
* an operation.
|
||||
|
@ -21,10 +21,7 @@ import com.codahale.metrics.Histogram;
|
||||
import com.codahale.metrics.Timer;
|
||||
import io.nosqlbench.nb.api.engine.activityimpl.ActivityDef;
|
||||
import io.nosqlbench.nb.api.engine.activityimpl.ParameterMap;
|
||||
import io.nosqlbench.nb.api.engine.metrics.instruments.MetricCategory;
|
||||
import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetricCounter;
|
||||
import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetricHistogram;
|
||||
import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetricTimer;
|
||||
import io.nosqlbench.nb.api.engine.metrics.instruments.*;
|
||||
|
||||
public class ComponentActivityInstrumentation implements ActivityInstrumentation {
|
||||
|
||||
@ -49,6 +46,12 @@ public class ComponentActivityInstrumentation implements ActivityInstrumentation
|
||||
private NBMetricHistogram triesHistogram;
|
||||
private NBMetricTimer verifierTimer;
|
||||
|
||||
private NBMetricGauge errorRate1m;
|
||||
private NBMetricGauge errorRate5m;
|
||||
private NBMetricGauge errorRate15m;
|
||||
private NBMetricGauge errorRateTotal;
|
||||
private NBMetricGauge errorsTotal;
|
||||
|
||||
public ComponentActivityInstrumentation(final Activity activity) {
|
||||
this.activity = activity;
|
||||
def = activity.getActivityDef();
|
||||
@ -58,13 +61,13 @@ public class ComponentActivityInstrumentation implements ActivityInstrumentation
|
||||
}
|
||||
|
||||
private void initMetrics() {
|
||||
readInputTimer=activity.create().timer(
|
||||
readInputTimer = activity.create().timer(
|
||||
"read_input",
|
||||
this.hdrdigits,
|
||||
MetricCategory.Internals,
|
||||
"measures overhead of acquiring a cycle range for an activity thread"
|
||||
);
|
||||
stridesServiceTimer=activity.create().timer(
|
||||
stridesServiceTimer = activity.create().timer(
|
||||
"strides",
|
||||
this.hdrdigits,
|
||||
MetricCategory.Core,
|
||||
@ -80,7 +83,7 @@ public class ComponentActivityInstrumentation implements ActivityInstrumentation
|
||||
);
|
||||
}
|
||||
this.cyclesServiceTimer = activity.create().timer(
|
||||
"cycles"+ComponentActivityInstrumentation.SERVICE_TIME,
|
||||
"cycles" + ComponentActivityInstrumentation.SERVICE_TIME,
|
||||
hdrdigits,
|
||||
MetricCategory.Core,
|
||||
"service timer for a cycle, including all of bind, execute, result and result_success;" +
|
||||
@ -95,7 +98,7 @@ public class ComponentActivityInstrumentation implements ActivityInstrumentation
|
||||
" response timers include scheduling delays which occur when an activity falls behind its target rate"
|
||||
);
|
||||
}
|
||||
this.pendingOpsCounter=activity.create().counter(
|
||||
this.pendingOpsCounter = activity.create().counter(
|
||||
"pending_ops",
|
||||
MetricCategory.Core,
|
||||
"Indicate the number of operations which have been started, but which have not been completed." +
|
||||
@ -121,7 +124,7 @@ public class ComponentActivityInstrumentation implements ActivityInstrumentation
|
||||
MetricCategory.Core,
|
||||
"Time how long it takes to submit a request, receive a result, including binding, reading results, " +
|
||||
"and optionally verifying them, including all operations whether successful or not, for each attempted request."
|
||||
);
|
||||
);
|
||||
this.resultSuccessTimer = activity.create().timer(
|
||||
"result_success",
|
||||
hdrdigits,
|
||||
@ -142,63 +145,141 @@ public class ComponentActivityInstrumentation implements ActivityInstrumentation
|
||||
MetricCategory.Verification,
|
||||
"Time the execution of verifier code, if any"
|
||||
);
|
||||
this.errorRate1m = activity.create().gauge("error_rate_1m",
|
||||
() -> {
|
||||
double result_1m_rate = this.resultTimer.getOneMinuteRate();
|
||||
double result_success_1m_rate = this.resultSuccessTimer.getOneMinuteRate();
|
||||
if (result_1m_rate==0.0d || Double.isNaN(result_1m_rate)) {
|
||||
return Double.NaN;
|
||||
}
|
||||
return (result_1m_rate-result_success_1m_rate)/result_1m_rate;
|
||||
},
|
||||
MetricCategory.Core,
|
||||
"The relative one minute error rate estimated from the one minute successful and non-successful op rates"
|
||||
);
|
||||
this.errorRate5m = activity.create().gauge("error_rate_5m",
|
||||
() -> {
|
||||
double result_5m_rate = this.resultTimer.getFiveMinuteRate();
|
||||
double result_success_5m_rate = this.resultSuccessTimer.getFiveMinuteRate();
|
||||
if (result_5m_rate == 0.0d || Double.isNaN(result_5m_rate)) {
|
||||
return Double.NaN;
|
||||
}
|
||||
return (result_5m_rate - result_success_5m_rate) / result_5m_rate;
|
||||
},
|
||||
MetricCategory.Core,
|
||||
"The relative five minute error rate estimated from the five minute successful and non-successful op rates"
|
||||
);
|
||||
this.errorRate15m = activity.create().gauge("error_rate_15m",
|
||||
() -> {
|
||||
double result_15m_rate = this.resultTimer.getFifteenMinuteRate();
|
||||
double result_success_15m_rate = this.resultSuccessTimer.getFifteenMinuteRate();
|
||||
if (result_15m_rate == 0.0d || Double.isNaN(result_15m_rate)) {
|
||||
return Double.NaN;
|
||||
}
|
||||
return (result_15m_rate - result_success_15m_rate) / result_15m_rate;
|
||||
},
|
||||
MetricCategory.Core,
|
||||
"The relative fifteen minute error rate estimated from the fifteen minute successful and non-successful op rates"
|
||||
);
|
||||
this.errorRateTotal = activity.create().gauge("error_rate_total",
|
||||
() -> {
|
||||
double result_total = this.resultTimer.getCount();
|
||||
double result_success_total = this.resultSuccessTimer.getCount();
|
||||
if (result_total == 0.0d) {
|
||||
return Double.NaN;
|
||||
}
|
||||
return (result_total - result_success_total) / result_total;
|
||||
},
|
||||
MetricCategory.Core,
|
||||
"The cumulative error ratio calculated from the cumulative successful and non-successful op totals"
|
||||
);
|
||||
this.errorsTotal = activity.create().gauge("errors_total",
|
||||
() -> {
|
||||
double result_total = this.resultTimer.getCount();
|
||||
double result_success_total = this.resultSuccessTimer.getCount();
|
||||
return (result_total - result_success_total);
|
||||
},
|
||||
MetricCategory.Core,
|
||||
"The total number of errors calculated from the cumulative successful and non-successful op totals"
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public NBMetricGauge getOrCreateErrorsTotal() {
|
||||
return this.errorsTotal;
|
||||
}
|
||||
@Override
|
||||
public NBMetricGauge getOrCreateErrorRate1m() {
|
||||
return this.errorRate1m;
|
||||
}
|
||||
@Override
|
||||
public NBMetricGauge getOrCreateErrorRate5m() {
|
||||
return this.errorRate5m;
|
||||
}
|
||||
@Override
|
||||
public NBMetricGauge getOrCreateErrorRate15m() {
|
||||
return this.errorRate15m;
|
||||
}
|
||||
@Override
|
||||
public NBMetricGauge getOrCreateErrorRateTotal() {
|
||||
return this.errorRateTotal;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Timer getOrCreateInputTimer() {
|
||||
public Timer getOrCreateInputTimer() {
|
||||
return readInputTimer;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Timer getOrCreateStridesServiceTimer() {
|
||||
public Timer getOrCreateStridesServiceTimer() {
|
||||
return stridesServiceTimer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Timer getStridesResponseTimerOrNull() {
|
||||
public Timer getStridesResponseTimerOrNull() {
|
||||
return stridesResponseTimer;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Timer getOrCreateCyclesServiceTimer() {
|
||||
public Timer getOrCreateCyclesServiceTimer() {
|
||||
return cyclesServiceTimer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Timer getCyclesResponseTimerOrNull() {
|
||||
public Timer getCyclesResponseTimerOrNull() {
|
||||
return cyclesResponseTimer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Counter getOrCreatePendingOpCounter() {
|
||||
public Counter getOrCreatePendingOpCounter() {
|
||||
return pendingOpsCounter;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Timer getOrCreateBindTimer() {
|
||||
public Timer getOrCreateBindTimer() {
|
||||
return bindTimer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Timer getOrCreateExecuteTimer() {
|
||||
public Timer getOrCreateExecuteTimer() {
|
||||
return executeTimer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Timer getOrCreateResultTimer() {
|
||||
public Timer getOrCreateResultTimer() {
|
||||
return resultTimer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Timer getOrCreateResultSuccessTimer() {
|
||||
public Timer getOrCreateResultSuccessTimer() {
|
||||
return resultSuccessTimer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Histogram getOrCreateTriesHistogram() {
|
||||
public Histogram getOrCreateTriesHistogram() {
|
||||
return triesHistogram;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user