43211bc73927871851e3964274a7c05658e4c2c9
[policy/apex-pdp.git] /
1 /*-
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
8  * 
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  * 
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.
16  * 
17  * SPDX-License-Identifier: Apache-2.0
18  * ============LICENSE_END=========================================================
19  */
20 package org.onap.policy.apex.service.engine.benchmark;
21
22 import java.util.List;
23 import java.util.Map;
24 import java.util.concurrent.TimeUnit;
25
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;
49
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;
60
61
62     public ApexBaseBenchMarkTest(final String model, final int threads, final ApexEventListener listener) {
63         this.model = model;
64         this.threads = threads;
65         this.listener = listener;
66     }
67
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);
74
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());
82
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);
88
89         service = EngineServiceImpl.create(parameters);
90         service.registerActionListener("listener", listener);
91         service.updateModel(parameters.getEngineKey(), model, true);
92
93         LOGGER.info("Starting EngineService ... ");
94         service.startAll();
95
96         final long starttime = System.currentTimeMillis();
97         while (!service.isStarted() && System.currentTimeMillis() - starttime < MAX_START_WAIT) {
98             ThreadUtilities.sleep(50);
99         }
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 ");
103         }
104
105         engineServiceEventInterface = service.getEngineServiceEventInterface();
106     }
107
108     public void sendEvents(final List<ApexEvent> events) {
109         for (final ApexEvent event : events) {
110             engineServiceEventInterface.sendEvent(event);
111         }
112     }
113
114     public void sendEvent(final ApexEvent event) {
115         engineServiceEventInterface.sendEvent(event);
116     }
117
118
119     public EngineService getService() {
120         return service;
121     }
122
123     public void destroy() throws Exception {
124         if (service != null) {
125             LOGGER.info("Stopping EngineService ... ");
126             service.stop();
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());
131                     break;
132                 }
133                 ThreadUtilities.sleep(500);
134             }
135             service = null;
136         }
137     }
138
139 }