2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2018 Ericsson. All rights reserved.
4 * ================================================================================
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
17 * SPDX-License-Identifier: Apache-2.0
18 * ============LICENSE_END=========================================================
20 package org.onap.policy.apex.service.engine.benchmark;
22 import java.util.List;
24 import java.util.concurrent.TimeUnit;
26 import org.onap.policy.apex.context.impl.schema.java.JavaSchemaHelperParameters;
27 import org.onap.policy.apex.context.parameters.ContextParameters;
28 import org.onap.policy.apex.context.parameters.SchemaParameters;
29 import org.onap.policy.apex.core.engine.EngineParameters;
30 import org.onap.policy.apex.core.engine.ExecutorParameters;
31 import org.onap.policy.apex.core.infrastructure.threading.ThreadUtilities;
32 import org.onap.policy.apex.model.basicmodel.concepts.ApexException;
33 import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
34 import org.onap.policy.apex.plugins.context.schema.avro.AvroSchemaHelperParameters;
35 import org.onap.policy.apex.plugins.executor.java.JavaExecutorParameters;
36 import org.onap.policy.apex.plugins.executor.javascript.JavascriptExecutorParameters;
37 import org.onap.policy.apex.plugins.executor.jruby.JrubyExecutorParameters;
38 import org.onap.policy.apex.plugins.executor.jython.JythonExecutorParameters;
39 import org.onap.policy.apex.plugins.executor.mvel.MvelExecutorParameters;
40 import org.onap.policy.apex.service.engine.event.ApexEvent;
41 import org.onap.policy.apex.service.engine.runtime.ApexEventListener;
42 import org.onap.policy.apex.service.engine.runtime.ApexServiceModelUpdateTest;
43 import org.onap.policy.apex.service.engine.runtime.EngineService;
44 import org.onap.policy.apex.service.engine.runtime.EngineServiceEventInterface;
45 import org.onap.policy.apex.service.engine.runtime.impl.EngineServiceImpl;
46 import org.onap.policy.apex.service.parameters.engineservice.EngineServiceParameters;
47 import org.slf4j.ext.XLogger;
48 import org.slf4j.ext.XLoggerFactory;
50 public class ApexBaseBenchMarkTest {
51 private static final long STOP_TIME_OUT = TimeUnit.SECONDS.toMillis(30);
52 private static final XLogger LOGGER = XLoggerFactory.getXLogger(ApexServiceModelUpdateTest.class);
53 private static final long MAX_START_WAIT = TimeUnit.SECONDS.toMillis(10);
54 private final AxArtifactKey engineServiceKey = new AxArtifactKey("Machine-1_process-1_engine-1", "0.0.0");
55 private final String model;
56 private final int threads;
57 private final ApexEventListener listener;
58 private EngineService service;
59 private EngineServiceEventInterface engineServiceEventInterface;
62 public ApexBaseBenchMarkTest(final String model, final int threads, final ApexEventListener listener) {
64 this.threads = threads;
65 this.listener = listener;
68 public void setUp() throws Exception {
69 final EngineServiceParameters parameters = new EngineServiceParameters();
70 parameters.setInstanceCount(threads);
71 parameters.setName(engineServiceKey.getName());
72 parameters.setVersion(engineServiceKey.getVersion());
73 parameters.setId(100);
75 final EngineParameters engineParameters = parameters.getEngineParameters();
76 final Map<String, ExecutorParameters> executorParameterMap = engineParameters.getExecutorParameterMap();
77 executorParameterMap.put("MVEL", new MvelExecutorParameters());
78 executorParameterMap.put("JAVASCRIPT", new JavascriptExecutorParameters());
79 executorParameterMap.put("JYTHON", new JythonExecutorParameters());
80 executorParameterMap.put("JAVA", new JavaExecutorParameters());
81 executorParameterMap.put("JRUBY", new JrubyExecutorParameters());
83 final ContextParameters contextParameters = engineParameters.getContextParameters();
84 final SchemaParameters schemaParameters = contextParameters.getSchemaParameters();
85 schemaParameters.getSchemaHelperParameterMap().put("Avro", new AvroSchemaHelperParameters());
86 schemaParameters.getSchemaHelperParameterMap().put("Java", new JavaSchemaHelperParameters());
87 service = EngineServiceImpl.create(parameters);
89 service = EngineServiceImpl.create(parameters);
90 service.registerActionListener("listener", listener);
91 service.updateModel(parameters.getEngineKey(), model, true);
93 LOGGER.info("Starting EngineService ... ");
96 final long starttime = System.currentTimeMillis();
97 while (!service.isStarted() && System.currentTimeMillis() - starttime < MAX_START_WAIT) {
98 ThreadUtilities.sleep(50);
100 if (!service.isStarted()) {
101 LOGGER.error("Apex Service {} failed to start after {} ms", service.getKey(), MAX_START_WAIT);
102 new ApexException("Unable to start engine service ");
105 engineServiceEventInterface = service.getEngineServiceEventInterface();
108 public void sendEvents(final List<ApexEvent> events) {
109 for (final ApexEvent event : events) {
110 engineServiceEventInterface.sendEvent(event);
114 public void sendEvent(final ApexEvent event) {
115 engineServiceEventInterface.sendEvent(event);
119 public EngineService getService() {
123 public void destroy() throws Exception {
124 if (service != null) {
125 LOGGER.info("Stopping EngineService ... ");
127 final long currentTimeInMillSec = System.currentTimeMillis();
128 while (!service.isStopped()) {
129 if (System.currentTimeMillis() - currentTimeInMillSec > STOP_TIME_OUT) {
130 LOGGER.warn("Timed Out EngineService status: ", service.isStopped());
133 ThreadUtilities.sleep(500);