package com.ldbc.driver.runtime.metrics;
import com.ldbc.driver.Operation;
import com.ldbc.driver.WorkloadException;
import com.ldbc.driver.control.Log4jLoggingServiceFactory;
import com.ldbc.driver.control.LoggingServiceFactory;
import com.ldbc.driver.temporal.SystemTimeSource;
import com.ldbc.driver.temporal.TimeSource;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcSnbInteractiveWorkloadConfiguration;
import com.ldbc.driver.workloads.ldbc.snb.interactive.db.DummyLdbcSnbInteractiveOperationInstances;
import org.junit.Test;
import java.util.concurrent.TimeUnit;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.junit.Assert.assertThat;
public class MetricsManagerTest
{
private final TimeSource timeSource = new SystemTimeSource();
private final LoggingServiceFactory loggingServiceFactory = new Log4jLoggingServiceFactory( false );
@Test
public void shouldReturnCorrectMeasurements() throws WorkloadException, MetricsCollectionException
{
MetricsManager metricsManager = new MetricsManager(
timeSource,
TimeUnit.MILLISECONDS,
ThreadedQueuedMetricsService.DEFAULT_HIGHEST_EXPECTED_RUNTIME_DURATION_AS_NANO,
LdbcSnbInteractiveWorkloadConfiguration.operationTypeToClassMapping(),
loggingServiceFactory
);
Operation operation1 = DummyLdbcSnbInteractiveOperationInstances.read1();
long operation1ActualStartTimeAsMilli = 2;
long operation1RunDurationAsNano = TimeUnit.MILLISECONDS.toNanos( 1 );
Operation operation2 = DummyLdbcSnbInteractiveOperationInstances.read1();
long operation2ActualStartTimeAsMilli = 8;
long operation2RunDurationAsNano = TimeUnit.MILLISECONDS.toNanos( 3 );
Operation operation3 = DummyLdbcSnbInteractiveOperationInstances.read2();
long operation3ActualStartTimeAsMilli = 11;
long operation3RunDurationAsNano = TimeUnit.MILLISECONDS.toNanos( 5 );
metricsManager.measure( operation1ActualStartTimeAsMilli, operation1RunDurationAsNano, operation1.type() );
metricsManager.measure( operation2ActualStartTimeAsMilli, operation2RunDurationAsNano, operation2.type() );
metricsManager.measure( operation3ActualStartTimeAsMilli, operation3RunDurationAsNano, operation3.type() );
WorkloadResultsSnapshot snapshot = metricsManager.snapshot();
assertThat( snapshot.startTimeAsMilli(), equalTo( 2l ) );
assertThat( snapshot.latestFinishTimeAsMilli(), equalTo( 16l ) );
}
}