package org.ovirt.engine.benchmarks;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.annotations.BenchmarkMode;
import org.openjdk.jmh.annotations.Mode;
import org.openjdk.jmh.annotations.OutputTimeUnit;
import org.openjdk.jmh.annotations.Scope;
import org.openjdk.jmh.annotations.Setup;
import org.openjdk.jmh.annotations.State;
import org.openjdk.jmh.annotations.TearDown;
import org.openjdk.jmh.infra.Blackhole;
import org.ovirt.engine.sdk4.Connection;
import org.ovirt.engine.sdk4.ConnectionBuilder;
import org.ovirt.engine.sdk4.builders.EventBuilder;
import org.ovirt.engine.sdk4.services.SystemService;
import org.ovirt.engine.sdk4.types.LogSeverity;
@BenchmarkMode(Mode.All)
@OutputTimeUnit(TimeUnit.SECONDS)
public class RestInvocationBenchmark {
private static AtomicInteger id = new AtomicInteger();
@Benchmark
public void getVms(BenchmarkState state, Blackhole blackhole) {
blackhole.consume(state.systemService.vmsService().list().send());
}
@Benchmark
public void getHosts(BenchmarkState state, Blackhole blackhole) {
blackhole.consume(state.systemService.hostsService().list().send());
}
@Benchmark
public void addExternalEvent(BenchmarkState state, Blackhole blackhole) {
blackhole.consume(state.systemService.eventsService()
.add()
.event(new EventBuilder()
.origin("benchmark" + System.nanoTime())
.severity(LogSeverity.NORMAL)
.description("benchmark")
.customId(id.incrementAndGet()))
.send());
}
@State(Scope.Thread)
public static class BenchmarkState {
private SystemService systemService;
private Connection connection;
@Setup
public void setup() throws IOException, GeneralSecurityException {
String user = System.getProperty("benchmarks.api.user", "admin@internal");
String pass = System.getProperty("benchmarks.api.pass", "123");
String engineUrl = System.getProperty("benchmarks.api.engineUrl", "http://localhost:8080");
connection = ConnectionBuilder.connection()
.url(engineUrl + "/" + "ovirt-engine/api")
.user(user)
.password(pass)
.insecure(true)
.build();
systemService = connection.systemService();
}
@TearDown
public void teardown() throws Exception {
connection.close();
}
}
}