2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
6 * Copyright © 2017 Amdocs
7 * ================================================================================
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
19 * ============LICENSE_END=========================================================
21 * ECOMP is a trademark and service mark of AT&T Intellectual Property.
23 package org.onap.aai.sparky.viewandinspect;
25 import java.security.SecureRandom;
26 import java.util.concurrent.ExecutorService;
28 import org.apache.camel.Exchange;
29 import org.apache.camel.component.restlet.RestletConstants;
30 import org.onap.aai.cl.api.Logger;
31 import org.onap.aai.cl.eelf.LoggerFactory;
32 import org.onap.aai.cl.mdc.MdcContext;
33 import org.onap.aai.restclient.client.OperationResult;
34 import org.onap.aai.sparky.config.oxm.OxmModelLoader;
35 import org.onap.aai.sparky.dal.ActiveInventoryAdapter;
36 import org.onap.aai.sparky.dal.ElasticSearchAdapter;
37 import org.onap.aai.sparky.dal.aai.config.ActiveInventoryConfig;
38 import org.onap.aai.sparky.logging.AaiUiMsgs;
39 import org.onap.aai.sparky.sync.config.ElasticSearchEndpointConfig;
40 import org.onap.aai.sparky.sync.config.ElasticSearchSchemaConfig;
41 import org.onap.aai.sparky.util.NodeUtils;
42 import org.onap.aai.sparky.viewandinspect.config.VisualizationConfigs;
43 import org.onap.aai.sparky.viewandinspect.entity.ActiveInventoryNode;
44 import org.onap.aai.sparky.viewandinspect.entity.JsonNode;
45 import org.onap.aai.sparky.viewandinspect.entity.NodeMeta;
46 import org.onap.aai.sparky.viewandinspect.entity.QueryRequest;
47 import org.onap.aai.sparky.viewandinspect.services.VisualizationContext;
48 import org.onap.aai.sparky.viewandinspect.services.VisualizationService;
49 import org.onap.aai.sparky.viewandinspect.services.VisualizationTransformer;
50 import org.onap.aai.sparky.viewinspect.sync.ViewInspectSyncController;
51 import org.restlet.Request;
52 import org.restlet.Response;
53 import org.restlet.data.ClientInfo;
54 import org.restlet.data.MediaType;
55 import org.restlet.data.Status;
57 public class SchemaVisualizationProcessor {
60 private static final Logger LOG =
61 LoggerFactory.getInstance().getLogger(SchemaVisualizationProcessor.class);
63 private final VisualizationService visualizationService;
64 private VisualizationTransformer visualizationTransformer;
65 private VisualizationContext visualizationContext;
66 private NodeMeta nodeMeta;
67 private JsonNode jsonNode;
68 private ActiveInventoryNode activeInventoryNode;
69 private final ExecutorService tabularExecutorService;
70 private final ExecutorService aaiExecutorService;
71 private final SecureRandom secureRandom;
72 private ActiveInventoryAdapter aaiAdapter;
73 private ElasticSearchAdapter esAdapter;
74 private ElasticSearchEndpointConfig endpointConfig;
75 private ElasticSearchSchemaConfig schemaConfig;
76 private ActiveInventoryConfig aaiConfig;
78 public SchemaVisualizationProcessor(VisualizationConfigs visualizationConfigs,
79 OxmModelLoader oxmModelLoader, ViewInspectSyncController viewInspectSynController)
82 this.aaiAdapter = viewInspectSynController.getAaiAdapter();
83 this.esAdapter = viewInspectSynController.getElasticSearchAdapter();
84 this.endpointConfig = viewInspectSynController.getendpointConfig();
85 this.schemaConfig = viewInspectSynController.getschemaConfig();
87 this.visualizationService = new VisualizationService(oxmModelLoader, visualizationConfigs,
88 aaiAdapter, esAdapter, endpointConfig, schemaConfig);
89 this.activeInventoryNode = new ActiveInventoryNode(visualizationConfigs);
90 this.nodeMeta = new NodeMeta(visualizationConfigs);
91 secureRandom = new SecureRandom();
92 this.tabularExecutorService = NodeUtils.createNamedExecutor("TABULAR-WORKER",
93 visualizationConfigs.getNumOfThreadsToFetchNodeIntegrity(), LOG);
95 * Fix ActiveInvenotryConfig with properly wired in properties
97 this.aaiConfig = ActiveInventoryConfig.getConfig();
98 this.aaiExecutorService = NodeUtils.createNamedExecutor("SLNC-WORKER",
99 aaiConfig.getAaiRestConfig().getNumResolverWorkers(), LOG);
101 this.visualizationContext = new VisualizationContext(secureRandom.nextLong(), aaiAdapter,
102 tabularExecutorService, aaiExecutorService, visualizationConfigs);
103 this.visualizationTransformer = new VisualizationTransformer(visualizationConfigs);
104 this.jsonNode = new JsonNode(activeInventoryNode, visualizationConfigs);
108 protected String generateJsonErrorResponse(String message) {
109 return String.format("{ \"errorMessage\" : %s }", message);
112 public void processVisualizationRequest(Exchange exchange) {
114 String visualizationPayload = "";
115 QueryRequest hashId = null;
116 OperationResult operationResult = null;
117 Request request = null;
118 Response response = null;
119 Object xTransactionId = null;
120 Object partnerName = null;
122 xTransactionId = exchange.getIn().getHeader("X-TransactionId");
123 if (xTransactionId == null) {
124 xTransactionId = NodeUtils.getRandomTxnId();
126 partnerName = exchange.getIn().getHeader("X-FromAppId");
127 if (partnerName == null) {
128 partnerName = "Browser";
131 request = exchange.getIn().getHeader(RestletConstants.RESTLET_REQUEST, Request.class);
132 response = exchange.getIn().getHeader(RestletConstants.RESTLET_RESPONSE, Response.class);
135 * Disables automatic Apache Camel Restlet component logging which prints out an undesirable log
136 * entry which includes client (e.g. browser) information
138 request.setLoggable(false);
140 ClientInfo clientInfo = request.getClientInfo();
141 MdcContext.initialize((String) xTransactionId, "AAI-UI", "", (String) partnerName,
142 clientInfo.getAddress() + ":" + clientInfo.getPort());
144 visualizationPayload = exchange.getIn().getBody(String.class);
145 hashId = visualizationService.analyzeQueryRequestBody(visualizationPayload);
147 if (hashId != null) {
149 operationResult = visualizationService.buildVisualizationUsingGenericQuery(hashId);
151 if (operationResult.getResultCode() == Status.SUCCESS_OK.getCode()) {
153 response.setStatus(Status.SUCCESS_OK);
155 response.setStatus(Status.SERVER_ERROR_INTERNAL);
156 LOG.error(AaiUiMsgs.FAILURE_TO_PROCESS_REQUEST, String
157 .format("Failed to process Visualization Schema Payload = '%s'", visualizationPayload));
161 operationResult = new OperationResult();
162 operationResult.setResult(String
163 .format("Failed to analyze Visualization Schema Payload = '%s'", visualizationPayload));
164 response.setStatus(Status.SERVER_ERROR_INTERNAL);
165 LOG.error(AaiUiMsgs.FAILED_TO_ANALYZE, String
166 .format("Failed to analyze Visualization Schema Payload = '%s'", visualizationPayload));
171 response.setEntity(operationResult.getResult(), MediaType.APPLICATION_JSON);
172 exchange.getOut().setBody(response);