2 * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.netconf.test.tool.client.http.perf;
10 import static org.opendaylight.netconf.test.tool.client.http.perf.RequestMessageUtils.formRequest;
12 import java.net.http.HttpClient;
13 import java.net.http.HttpRequest;
14 import java.net.http.HttpResponse.BodyHandlers;
15 import java.util.concurrent.Semaphore;
16 import org.opendaylight.netconf.test.tool.client.stress.ExecutionStrategy;
17 import org.slf4j.Logger;
18 import org.slf4j.LoggerFactory;
20 public class AsyncExecutionStrategy implements ExecutionStrategy {
22 private static final Logger LOG = LoggerFactory.getLogger(AsyncExecutionStrategy.class);
24 private final HttpClient httpClient;
25 private final Parameters params;
26 private final Semaphore semaphore;
27 RestPerfClient.RequestData payloads;
29 AsyncExecutionStrategy(final Parameters params, final HttpClient httpClient,
30 final RestPerfClient.RequestData payloads) {
32 this.httpClient = httpClient;
33 this.payloads = payloads;
34 this.semaphore = new Semaphore(RestPerfClient.throttle);
38 public void invoke() {
39 LOG.info("Begin sending async requests");
41 for (int i = 0; i < payloads.getRequests(); i++) {
42 final String message = RequestMessageUtils.prepareMessage(payloads.getThreadId(), i,
43 payloads.getContentString(), payloads.getPort());
44 final String url = payloads.getDestination();
45 final HttpRequest request = formRequest(url, message);
48 } catch (InterruptedException e) {
49 LOG.warn("Semaphore acquire interrupted");
51 httpClient.sendAsync(request, BodyHandlers.ofString()).whenComplete((response, error) -> {
52 switch (response.statusCode()) {
57 LOG.warn("Request failed, status code: {}", response.statusCode());
58 LOG.warn("request: {}", request);
63 LOG.info("Requests sent, waiting for responses");
66 semaphore.acquire(RestPerfClient.throttle);
67 } catch (InterruptedException e) {
68 LOG.warn("Semaphore acquire interrupted");
71 LOG.info("Responses received, ending...");