package com.ldbc.driver.runtime.metrics;
abstract class ThreadedQueuedMetricsEvent {
public static enum MetricsEventType {
// Submit operation result for its metrics to be collected
SUBMIT_RESULT,
// Request metrics summary
WORKLOAD_STATUS,
// Request complete workload results
WORKLOAD_RESULT,
// Terminate when all results metrics have been collected
SHUTDOWN_SERVICE
}
public abstract MetricsEventType type();
static public class SubmitOperationResult extends ThreadedQueuedMetricsEvent {
private final int operationType;
private final long scheduledStartTimeAsMilli;
private final long actualStartTimeAsMilli;
private final long runDurationAsNano;
private final int resultCode;
private final long originalStartTime;
public SubmitOperationResult(
int operationType,
long scheduledStartTimeAsMilli,
long actualStartTimeAsMilli,
long runDurationAsNano,
int resultCode,
long originalStartTime) {
this.operationType = operationType;
this.scheduledStartTimeAsMilli = scheduledStartTimeAsMilli;
this.actualStartTimeAsMilli = actualStartTimeAsMilli;
this.runDurationAsNano = runDurationAsNano;
this.resultCode = resultCode;
this.originalStartTime = originalStartTime;
}
public int operationType() {
return operationType;
}
public long scheduledStartTimeAsMilli() {
return scheduledStartTimeAsMilli;
}
public long actualStartTimeAsMilli() {
return actualStartTimeAsMilli;
}
public long runDurationAsNano() {
return runDurationAsNano;
}
public int resultCode() {
return resultCode;
}
public long originalStartTime() {
return originalStartTime;
}
@Override
public MetricsEventType type() {
return MetricsEventType.SUBMIT_RESULT;
}
}
static public class Status extends ThreadedQueuedMetricsEvent {
private final ThreadedQueuedMetricsService.MetricsStatusFuture statusFuture;
public Status(ThreadedQueuedMetricsService.MetricsStatusFuture statusFuture) {
this.statusFuture = statusFuture;
}
public ThreadedQueuedMetricsService.MetricsStatusFuture statusFuture() {
return statusFuture;
}
@Override
public MetricsEventType type() {
return MetricsEventType.WORKLOAD_STATUS;
}
}
static public class GetWorkloadResults extends ThreadedQueuedMetricsEvent {
private final ThreadedQueuedMetricsService.MetricsWorkloadResultFuture workloadResultFuture;
public GetWorkloadResults(ThreadedQueuedMetricsService.MetricsWorkloadResultFuture workloadResultFuture) {
this.workloadResultFuture = workloadResultFuture;
}
public ThreadedQueuedMetricsService.MetricsWorkloadResultFuture workloadResultFuture() {
return workloadResultFuture;
}
@Override
public MetricsEventType type() {
return MetricsEventType.WORKLOAD_RESULT;
}
}
static public class Shutdown extends ThreadedQueuedMetricsEvent {
private final long initiatedEvents;
public Shutdown(long initiatedEvents) {
this.initiatedEvents = initiatedEvents;
}
public long initiatedEvents() {
return initiatedEvents;
}
@Override
public MetricsEventType type() {
return MetricsEventType.SHUTDOWN_SERVICE;
}
}
}