diff options
author | waqas.ikram <waqas.ikram@ericsson.com> | 2018-07-12 12:47:09 +0100 |
---|---|---|
committer | waqas.ikram <waqas.ikram@ericsson.com> | 2018-07-13 11:47:15 +0100 |
commit | cb768ce12516415276ee370112a837014cb8c37c (patch) | |
tree | 3d7418e312f3a29126e19d9683a34ad420f6166d /testsuites/performance/performance-context-metrics/src/main/java/org/onap/policy/apex/plugins/context/metrics/ConcurrentContextMetricsJVMThread.java | |
parent | 2e32896a4e98fe2047b2e6356d4e9d7dbd3a0252 (diff) |
Adding Benchmark module
Change-Id: I4817580bf53bbf46b6890b70d49c8a2edabca749
Issue-ID: POLICY-865
Signed-off-by: waqas.ikram <waqas.ikram@ericsson.com>
Diffstat (limited to 'testsuites/performance/performance-context-metrics/src/main/java/org/onap/policy/apex/plugins/context/metrics/ConcurrentContextMetricsJVMThread.java')
-rw-r--r-- | testsuites/performance/performance-context-metrics/src/main/java/org/onap/policy/apex/plugins/context/metrics/ConcurrentContextMetricsJVMThread.java | 187 |
1 files changed, 187 insertions, 0 deletions
diff --git a/testsuites/performance/performance-context-metrics/src/main/java/org/onap/policy/apex/plugins/context/metrics/ConcurrentContextMetricsJVMThread.java b/testsuites/performance/performance-context-metrics/src/main/java/org/onap/policy/apex/plugins/context/metrics/ConcurrentContextMetricsJVMThread.java new file mode 100644 index 000000000..64bc0cab6 --- /dev/null +++ b/testsuites/performance/performance-context-metrics/src/main/java/org/onap/policy/apex/plugins/context/metrics/ConcurrentContextMetricsJVMThread.java @@ -0,0 +1,187 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2016-2018 Ericsson. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.apex.plugins.context.metrics; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.PrintWriter; +import java.util.ArrayList; +import java.util.List; +import java.util.Map.Entry; + +import org.onap.policy.apex.model.basicmodel.concepts.ApexException; +import org.onap.policy.apex.model.basicmodel.service.AbstractParameters; +import org.onap.policy.apex.model.basicmodel.service.ParameterService; +import org.slf4j.ext.XLogger; +import org.slf4j.ext.XLoggerFactory; + +import com.google.gson.Gson; + +/** + * The Class ConcurrentContextMetricsJVMThread gets metrics for concurrent use of context. + * + * @author Liam Fallon (liam.fallon@ericsson.com) + */ +public class ConcurrentContextMetricsJVMThread implements Runnable { + // Logger for this class + private static final XLogger LOGGER = XLoggerFactory.getXLogger(ConcurrentContextMetricsJVMThread.class); + + private final String testType; + private final int jvm; + private final int threadCount; + private final int threadLoops; + private final int longArraySize; + private final int lockType; + + private boolean readyToGo = false; + private boolean allFinished = false; + + private PrintWriter processWriter; + + /** + * The Constructor. + * + * @param testType the test type + * @param jvm the jvm + * @param threadCount the thread count + * @param threadLoops the thread loops + * @param longArraySize the long array size + * @param lockType the lock type + * @throws ApexException the apex exception + */ + public ConcurrentContextMetricsJVMThread(final String testType, final int jvm, final int threadCount, + final int threadLoops, final int longArraySize, final int lockType) throws ApexException { + this.testType = testType; + this.jvm = jvm; + this.threadCount = threadCount; + this.threadLoops = threadLoops; + this.longArraySize = longArraySize; + this.lockType = lockType; + } + + /* + * (non-Javadoc) + * + * @see java.lang.Runnable#run() + */ + @Override + public void run() { + final List<String> commandList = new ArrayList<>(); + commandList.add(System.getProperty("java.home") + System.getProperty("file.separator") + "bin" + + System.getProperty("file.separator") + "java"); + commandList.add("-cp"); + commandList.add(System.getProperty("java.class.path")); + for (final Entry<Object, Object> property : System.getProperties().entrySet()) { + if (property.getKey().toString().startsWith("APEX") + || property.getKey().toString().equals("java.net.preferIPv4Stack") + || property.getKey().toString().equals("jgroups.bind_addr")) { + commandList.add("-D" + property.getKey().toString() + "=" + property.getValue().toString()); + } + } + commandList.add("org.onap.policy.apex.plugins.context.metrics.ConcurrentContextMetricsJVM"); + commandList.add(testType); + commandList.add(new Integer(jvm).toString()); + commandList.add(new Integer(threadCount).toString()); + commandList.add(new Integer(threadLoops).toString()); + commandList.add(new Integer(longArraySize).toString()); + commandList.add(new Integer(lockType).toString()); + + for (final Entry<Class<?>, AbstractParameters> parameterServiceEntry : ParameterService.getAll()) { + commandList.add(parameterServiceEntry.getKey().getCanonicalName()); + commandList.add(new Gson().toJson(parameterServiceEntry.getValue())); + } + + LOGGER.info("starting JVM " + jvm); + + // Run the JVM + final ProcessBuilder processBuilder = new ProcessBuilder(commandList); + processBuilder.redirectErrorStream(true); + Process process; + + try { + process = processBuilder.start(); + + final InputStream is = process.getInputStream(); + processWriter = new PrintWriter(process.getOutputStream()); + final InputStreamReader isr = new InputStreamReader(is); + final BufferedReader br = new BufferedReader(isr); + + String line; + + LOGGER.info("JVM Output for command " + commandList + "\n"); + while ((line = br.readLine()) != null) { + LOGGER.info(line); + + if (line.trim().equals("ReadyToGo")) { + readyToGo = true; + } else if (line.trim().equals("AllFinished")) { + allFinished = true; + } + } + + // Wait to get exit value + try { + final int exitValue = process.waitFor(); + LOGGER.info("\n\nJVM " + jvm + " finished, exit value is " + exitValue); + } catch (final InterruptedException e) { + e.printStackTrace(); + } + } catch (final IOException e1) { + e1.printStackTrace(); + } + } + + /** + * Checks if is ready to go. + * + * @return true, if checks if is ready to go + */ + public boolean isReadyToGo() { + return readyToGo; + } + + /** + * Checks if is all finished. + * + * @return true, if checks if is all finished + */ + public boolean isAllFinished() { + return allFinished; + } + + /** + * Off you go. + */ + public void offYouGo() { + processWriter.println("OffYouGo"); + processWriter.flush(); + } + + /** + * Finish it out. + */ + public void finishItOut() { + processWriter.println("FinishItOut"); + processWriter.flush(); + } +} |