Enhance error message
[logging-analytics/pomba/pomba-context-aggregator.git] / src / main / java / org / onap / pomba / contextaggregator / rest / RestRequest.java
1 /*
2  * ============LICENSE_START===================================================
3  * Copyright (c) 2018 Amdocs
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  * ============LICENSE_END=====================================================
17  */
18 package org.onap.pomba.contextaggregator.rest;
19
20 import java.util.Base64;
21 import java.util.List;
22 import java.util.Map;
23 import javax.ws.rs.core.MediaType;
24 import javax.ws.rs.core.MultivaluedHashMap;
25 import javax.ws.rs.core.MultivaluedMap;
26 import org.onap.aai.restclient.client.Headers;
27 import org.onap.aai.restclient.client.OperationResult;
28 import org.onap.aai.restclient.client.RestClient;
29 import org.onap.pomba.contextaggregator.builder.ContextBuilder;
30 import org.onap.pomba.contextaggregator.datatypes.POAEvent;
31 import org.onap.pomba.contextaggregator.exception.ContextAggregatorError;
32 import org.slf4j.Logger;
33 import org.slf4j.LoggerFactory;
34 import org.springframework.web.util.UriComponents;
35 import org.springframework.web.util.UriComponentsBuilder;
36
37 public class RestRequest {
38
39     private static final String SERVICE_INSTANCE_ID = "serviceInstanceId";
40     private static final String MODEL_VERSION_ID = "modelVersionId";
41     private static final String MODEL_INVARIANT_ID = "modelInvariantId";
42
43     private static final String APP_NAME = "context-aggregator";
44
45     private static Logger log = LoggerFactory.getLogger(RestRequest.class);
46
47
48     private RestRequest() {
49         // intentionally empty
50     }
51
52     /**
53      * Retrieves the model data from the given context builder
54      *
55      * @param builder
56      * @param event
57      * @return Returns the JSON response from the context builder
58      */
59     public static String getModelData(ContextBuilder builder, POAEvent event) {
60         RestClient restClient = createRestClient(builder);
61
62         OperationResult result = null;
63
64         try {
65             result = restClient.get(generateUri(builder, event),
66                     generateHeaders(event.getxTransactionId(), builder), MediaType.APPLICATION_JSON_TYPE);
67         } catch(Exception e) {
68             log.error("Error getting result from " + builder.getContextName() + " context builder.  Reason - " + e.getMessage());
69             return null;
70         }
71
72         if(result != null) {
73             if(result.wasSuccessful()) {
74                 log.debug("Retrieved model data for '" + builder.getContextName() + "': " + result.getResult());
75                 return result.getResult();
76             } else {
77                 // failed! return null
78                 log.error(ContextAggregatorError.FAILED_TO_GET_MODEL_DATA.getMessage(builder.getContextName(),
79                         result.getFailureCause()));
80                 log.debug("Failed to retrieve model data for '" + builder.getContextName());
81                 return null;
82             }
83         } else {
84             log.debug("Failed to retrieve model data for '" + builder.getContextName());
85             return null;
86         }
87     }
88
89     private static RestClient createRestClient(ContextBuilder builder) {
90         return new RestClient()
91                 // .validateServerHostname(false)
92                 // .validateServerCertChain(true)
93                 // .clientCertFile(builder.getKeyStorePath())
94                 // .clientCertPassword(builder.getKeyStorePassword())
95                 // .trustStore(builder.getTrustStorePath())
96                 .connectTimeoutMs(builder.getConnectionTimeout()).readTimeoutMs(builder.getReadTimeout());
97     }
98
99     private static String generateUri(ContextBuilder builder, POAEvent event) {
100         UriComponents uriComponents = UriComponentsBuilder.newInstance().scheme(builder.getProtocol())
101                 .host(builder.getHost()).port(builder.getPort()).path(builder.getBaseUri())
102                 .queryParam(SERVICE_INSTANCE_ID, event.getServiceInstanceId())
103                 .queryParam(MODEL_VERSION_ID, event.getModelVersionId())
104                 .queryParam(MODEL_INVARIANT_ID, event.getModelInvariantId()).build().encode();
105         return uriComponents.toUriString();
106     }
107
108     private static Map<String, List<String>> generateHeaders(String transactionId, ContextBuilder builder) {
109         MultivaluedMap<String, String> headers = new MultivaluedHashMap<>();
110         headers.add(Headers.FROM_APP_ID, APP_NAME);
111         headers.add(Headers.TRANSACTION_ID, transactionId);
112         headers.add(Headers.AUTHORIZATION, getBasicAuthString(builder));
113         return headers;
114     }
115
116     private static String getBasicAuthString(ContextBuilder builder) {
117         String usernamePasswordString = builder.getUsername() + ":" + builder.getPassword();
118         String encodedString = Base64.getEncoder().encodeToString((usernamePasswordString).getBytes());
119         return "Basic " + encodedString;
120
121     }
122 }