diff options
Diffstat (limited to 'common/src/main/java/org/openecomp/mso/client/sdno')
12 files changed, 1380 insertions, 0 deletions
diff --git a/common/src/main/java/org/openecomp/mso/client/sdno/SDNOHealthCheckClient.java b/common/src/main/java/org/openecomp/mso/client/sdno/SDNOHealthCheckClient.java new file mode 100644 index 0000000000..3ba75bb2b4 --- /dev/null +++ b/common/src/main/java/org/openecomp/mso/client/sdno/SDNOHealthCheckClient.java @@ -0,0 +1,158 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.mso.client.sdno; + +import java.io.FileNotFoundException; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Optional; + +import org.openecomp.mso.client.dmaap.DmaapConsumer; +import org.openecomp.mso.client.dmaap.DmaapPublisher; +import org.openecomp.mso.client.sdno.beans.AAIParamList; +import org.openecomp.mso.client.sdno.beans.Body; +import org.openecomp.mso.client.sdno.beans.Input; +import org.openecomp.mso.client.sdno.beans.RequestHdCustom; +import org.openecomp.mso.client.sdno.beans.SDNO; +import org.openecomp.mso.client.sdno.dmaap.SDNOHealthCheckDmaapConsumer; +import org.openecomp.mso.client.sdno.dmaap.SDNOHealthCheckDmaapPublisher; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; + +public class SDNOHealthCheckClient { + + private static final String NODE_TYPE = "VROUTER"; + private static final String API_OPERATION_TYPE = "health-diagnostic-custom"; + private static final String MIRRORING_CHECK = "mirroring_check"; + private static final String CLIENT_NAME = "MSO"; + private static final String PRE_CHECK_CODE = "VROUTER000003"; + private static final String POST_CHECK_CODE = "VROUTER000004"; + private static final String LPORT_MIRRORING_CHECK = "lport_mirroring_check"; + private static final String CONFIGURATION_ID = "configuration-id"; + + + public boolean lPortMirrorHealthPreCheck(String userId, String requestId, Optional<String>clliCode, String configurationId, String interfaceId) throws Exception{ + String request = buildLPortMirrorCheckPreRequest(userId, requestId, clliCode, configurationId, interfaceId); + return this.execute(requestId, request); + } + + public boolean lPortMirrorHealthPostCheck(String userId, String requestId, Optional<String>clliCode, String configurationId, String interfaceId) throws Exception{ + String request = buildLPortMirrorCheckPostRequest(userId, requestId, clliCode, configurationId, interfaceId); + return this.execute(requestId, request); + } + + public boolean portMirrorHealthPreCheck(String userId, String requestId, Optional<String> clliCode, String configurationId) throws Exception { + final String request = this.buildPortMirrorPreCheckRequest(userId, requestId, clliCode, configurationId); + return this.execute(requestId, request); + } + + public boolean portMirrorHealthPostCheck(String userId, String requestId, Optional<String> clliCode, String configurationId) throws Exception { + final String request = this.buildPortMirrorPostCheckRequest(userId, requestId, clliCode, configurationId); + return this.execute(requestId, request); + } + + protected String buildLPortMirrorCheckPreRequest(String userId, String requestId, Optional<String> clliCode, String configurationId, String interfaceId) throws JsonProcessingException{ + return this.buildLPortMirrorCheckRequest(userId, requestId, clliCode, configurationId, interfaceId, PRE_CHECK_CODE); + } + + protected String buildLPortMirrorCheckPostRequest(String userId, String requestId, Optional<String> clliCode, String configurationId, String interfaceId) throws JsonProcessingException{ + return this.buildLPortMirrorCheckRequest(userId, requestId, clliCode, configurationId, interfaceId, POST_CHECK_CODE); + } + + protected String buildPortMirrorPreCheckRequest(String userId, String requestId, Optional<String> clliCode, String configurationId) throws JsonProcessingException { + return this.buildPortMirrorCheckRequest(userId, requestId, clliCode, configurationId, PRE_CHECK_CODE); + } + + protected String buildPortMirrorPostCheckRequest(String userId, String requestId, Optional<String> clliCode, String configurationId) throws JsonProcessingException { + return this.buildPortMirrorCheckRequest(userId, requestId, clliCode, configurationId, POST_CHECK_CODE); + } + + protected String buildPortMirrorCheckRequest(String userId, String requestId, Optional<String> clliCode, String configurationId, String diagnosticCode) throws JsonProcessingException { + final AAIParamList list = new AAIParamList(); + list.setKey(CONFIGURATION_ID); + list.setValue(configurationId); + + return this.buildRequest(userId, requestId, clliCode, diagnosticCode, MIRRORING_CHECK, Collections.singletonList(list)); + } + + protected String buildLPortMirrorCheckRequest(String userId, String requestId, Optional<String> clliCode, String configurationId, String interfaceId, String diagnosticCode) throws JsonProcessingException { + + final AAIParamList configurationIdParam = new AAIParamList(); + configurationIdParam.setKey(CONFIGURATION_ID); + configurationIdParam.setValue(configurationId); + final AAIParamList interfaceIdParam = new AAIParamList(); + interfaceIdParam.setKey("interface-id"); + interfaceIdParam.setValue(interfaceId); + final List<AAIParamList> list = new ArrayList<>(); + list.add(configurationIdParam); + list.add(interfaceIdParam); + return this.buildRequest(userId, requestId, clliCode, diagnosticCode, LPORT_MIRRORING_CHECK, list); + } + + + protected String buildRequest(String userId, String requestId, Optional<String> clliCode, String diagnosticCode, String operationType, List<AAIParamList> paramList) throws JsonProcessingException { + + final RequestHdCustom hdCustom = new RequestHdCustom(); + hdCustom.withRequestUserId(userId) + .withRequestId(requestId) + .withRequestClientName(CLIENT_NAME) + .withHealthDiagnosticCode(diagnosticCode) + .withOperationType(operationType) + .withAaiParamList(paramList); + + final Input input = new Input(); + input.setRequestHdCustom(hdCustom); + final Body body = new Body(); + body.setInput(input); + final SDNO request = new SDNO(); + request.withBody(body).withOperation(API_OPERATION_TYPE).withNodeType(NODE_TYPE); + if (clliCode.isPresent()) { + request.setNodeLoc(clliCode.get()); + } + return this.getJson(request); + + } + protected String getJson(SDNO obj) throws JsonProcessingException { + final ObjectMapper mapper = new ObjectMapper(); + return mapper.writeValueAsString(obj); + } + + protected DmaapPublisher getPublisher() throws FileNotFoundException, IOException { + return new SDNOHealthCheckDmaapPublisher(); + } + + protected DmaapConsumer getConsumer(String requestId) throws FileNotFoundException, IOException { + return new SDNOHealthCheckDmaapConsumer(requestId); + } + + protected boolean execute(String requestId, String request) throws Exception { + final DmaapPublisher publisher = this.getPublisher(); + publisher.send(request); + + final DmaapConsumer consumer = this.getConsumer(requestId); + + return consumer.consume(); + } + +} diff --git a/common/src/main/java/org/openecomp/mso/client/sdno/SDNOValidator.java b/common/src/main/java/org/openecomp/mso/client/sdno/SDNOValidator.java new file mode 100644 index 0000000000..534186b7ef --- /dev/null +++ b/common/src/main/java/org/openecomp/mso/client/sdno/SDNOValidator.java @@ -0,0 +1,38 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.mso.client.sdno; + +import java.io.IOException; +import java.util.UUID; + +public interface SDNOValidator { + + /** + * Issues a health diagnostic request for a given vnf to SDN-O + * + * @param vnfId + * @param requestingUserId + * @throws IOException + * @throws Exception + */ + public void healthDiagnostic(String vnfId, UUID uuid, String requestingUserId) throws IOException, Exception; + +} diff --git a/common/src/main/java/org/openecomp/mso/client/sdno/SDNOValidatorImpl.java b/common/src/main/java/org/openecomp/mso/client/sdno/SDNOValidatorImpl.java new file mode 100644 index 0000000000..e6955f57fc --- /dev/null +++ b/common/src/main/java/org/openecomp/mso/client/sdno/SDNOValidatorImpl.java @@ -0,0 +1,111 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.mso.client.sdno; + +import java.io.FileNotFoundException; +import java.io.IOException; +import java.util.Optional; +import java.util.UUID; + +import org.onap.aai.domain.yang.GenericVnf; +import org.openecomp.mso.client.aai.AAIObjectType; +import org.openecomp.mso.client.aai.AAIResourcesClient; +import org.openecomp.mso.client.aai.AAIVersion; +import org.openecomp.mso.client.aai.entities.uri.AAIResourceUri; +import org.openecomp.mso.client.aai.entities.uri.AAIUriFactory; +import org.openecomp.mso.client.dmaap.DmaapConsumer; +import org.openecomp.mso.client.dmaap.DmaapPublisher; +import org.openecomp.mso.client.sdno.beans.Body; +import org.openecomp.mso.client.sdno.beans.Input; +import org.openecomp.mso.client.sdno.beans.RequestHealthDiagnostic; +import org.openecomp.mso.client.sdno.beans.SDNO; +import org.openecomp.mso.client.sdno.dmaap.SDNOHealthCheckDmaapConsumer; +import org.openecomp.mso.client.sdno.dmaap.SDNOHealthCheckDmaapPublisher; + +import com.fasterxml.jackson.databind.ObjectMapper; + + +public class SDNOValidatorImpl implements SDNOValidator { + + private final static String clientName = "MSO"; + + @Override + public void healthDiagnostic(String vnfId, UUID uuid, String requestingUserId) throws IOException, Exception { + + AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.GENERIC_VNF, vnfId); + AAIResourcesClient client = new AAIResourcesClient(AAIVersion.V10, uuid); + GenericVnf vnf = client.get(GenericVnf.class, uri); + + SDNO requestDiagnostic = buildRequestDiagnostic(vnf, uuid, requestingUserId); + ObjectMapper mapper = new ObjectMapper(); + String json = mapper.writeValueAsString(requestDiagnostic); + this.submitRequest(json); + this.pollForResponse(uuid.toString()); + + } + + protected SDNO buildRequestDiagnostic(GenericVnf vnf, UUID uuid, String requestingUserId) { + + Optional<String> vnfType; + if (vnf.getVnfType() == null) { + vnfType = Optional.empty(); + } else { + vnfType = Optional.of(vnf.getVnfType()); + } + Input input = new Input(); + SDNO parentRequest = new SDNO(); + Body body = new Body(); + parentRequest.setBody(body); + parentRequest.setNodeType(vnfType.orElse("NONE").toUpperCase()); + parentRequest.setOperation("health-diagnostic"); + + body.setInput(input); + + RequestHealthDiagnostic request = new RequestHealthDiagnostic(); + request.setRequestClientName(clientName); + request.setRequestNodeName(vnf.getVnfName()); + request.setRequestNodeIp(vnf.getIpv4OamAddress()); //generic-vnf oam ip + request.setRequestUserId(requestingUserId); //mech id? + request.setRequestId(uuid.toString()); //something to identify this request by for polling + + input.setRequestHealthDiagnostic(request); + + return parentRequest; + } + protected void submitRequest(String json) throws FileNotFoundException, IOException, InterruptedException { + + DmaapPublisher publisher = new SDNOHealthCheckDmaapPublisher(); + publisher.send(json); + } + protected boolean pollForResponse(String uuid) throws Exception { + DmaapConsumer consumer = this.getConsumer(uuid); + return consumer.consume(); + } + + + + protected DmaapConsumer getConsumer(String uuid) throws FileNotFoundException, IOException { + return new SDNOHealthCheckDmaapConsumer(uuid); + } + + + +} diff --git a/common/src/main/java/org/openecomp/mso/client/sdno/beans/AAIParamList.java b/common/src/main/java/org/openecomp/mso/client/sdno/beans/AAIParamList.java new file mode 100644 index 0000000000..bab37c0685 --- /dev/null +++ b/common/src/main/java/org/openecomp/mso/client/sdno/beans/AAIParamList.java @@ -0,0 +1,87 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.mso.client.sdno.beans; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ +"key", +"value" +}) +public class AAIParamList { + +@JsonProperty("key") +private String key; +@JsonProperty("value") +private String value; + +/** +* No args constructor for use in serialization +* +*/ +public AAIParamList() { + } + +/** +* +* @param value +* @param key +*/ +public AAIParamList(String key, String value) { +super(); +this.key = key; +this.value = value; + } + +@JsonProperty("key") +public String getKey() { +return key; + } + +@JsonProperty("key") +public void setKey(String key) { +this.key = key; + } + +public AAIParamList withKey(String key) { +this.key = key; +return this; + } + +@JsonProperty("value") +public String getValue() { +return value; + } + +@JsonProperty("value") +public void setValue(String value) { +this.value = value; + } + +public AAIParamList withValue(String value) { +this.value = value; +return this; + } + +}
\ No newline at end of file diff --git a/common/src/main/java/org/openecomp/mso/client/sdno/beans/Body.java b/common/src/main/java/org/openecomp/mso/client/sdno/beans/Body.java new file mode 100644 index 0000000000..26c74b0615 --- /dev/null +++ b/common/src/main/java/org/openecomp/mso/client/sdno/beans/Body.java @@ -0,0 +1,77 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.mso.client.sdno.beans; + +import java.io.Serializable; +import java.util.HashMap; +import java.util.Map; + +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + "input" +}) +public class Body implements Serializable +{ + + @JsonProperty("input") + private Input input; + @JsonIgnore + private Map<String, Object> additionalProperties = new HashMap<>(); + private final static long serialVersionUID = 9101706044452851559L; + + @JsonProperty("input") + public Input getInput() { + return input; + } + + @JsonProperty("input") + public void setInput(Input input) { + this.input = input; + } + + public Body withInput(Input input) { + this.input = input; + return this; + } + + @JsonAnyGetter + public Map<String, Object> getAdditionalProperties() { + return this.additionalProperties; + } + + @JsonAnySetter + public void setAdditionalProperty(String name, Object value) { + this.additionalProperties.put(name, value); + } + + public Body withAdditionalProperty(String name, Object value) { + this.additionalProperties.put(name, value); + return this; + } + +} diff --git a/common/src/main/java/org/openecomp/mso/client/sdno/beans/Input.java b/common/src/main/java/org/openecomp/mso/client/sdno/beans/Input.java new file mode 100644 index 0000000000..157330a280 --- /dev/null +++ b/common/src/main/java/org/openecomp/mso/client/sdno/beans/Input.java @@ -0,0 +1,91 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.mso.client.sdno.beans; + +import java.io.Serializable; +import java.util.HashMap; +import java.util.Map; + +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + "request-healthdiagnostic", + "request-hd-custom" +}) +public class Input implements Serializable +{ + + @JsonProperty("request-healthdiagnostic") + private RequestHealthDiagnostic RequestHealthDiagnostic; + @JsonProperty("request-hd-custom") + private RequestHdCustom requestHdCustom; + + @JsonIgnore + private Map<String, Object> additionalProperties = new HashMap<>(); + private final static long serialVersionUID = 7155546785389227528L; + + @JsonProperty("request-healthdiagnostic") + public RequestHealthDiagnostic getRequestHealthDiagnostic() { + return RequestHealthDiagnostic; + } + + @JsonProperty("request-healthdiagnostic") + public void setRequestHealthDiagnostic(RequestHealthDiagnostic RequestHealthDiagnostic) { + this.RequestHealthDiagnostic = RequestHealthDiagnostic; + } + + @JsonProperty("request-hd-custom") + public RequestHdCustom getRequestHdCustom() { + return requestHdCustom; + } + + @JsonProperty("request-hd-custom") + public void setRequestHdCustom(RequestHdCustom requestHdCustom) { + this.requestHdCustom = requestHdCustom; + } + + public Input withRequestHealthDiagnostic(RequestHealthDiagnostic RequestHealthDiagnostic) { + this.RequestHealthDiagnostic = RequestHealthDiagnostic; + return this; + } + + @JsonAnyGetter + public Map<String, Object> getAdditionalProperties() { + return this.additionalProperties; + } + + @JsonAnySetter + public void setAdditionalProperty(String name, Object value) { + this.additionalProperties.put(name, value); + } + + public Input withAdditionalProperty(String name, Object value) { + this.additionalProperties.put(name, value); + return this; + } + +} diff --git a/common/src/main/java/org/openecomp/mso/client/sdno/beans/RequestHdCustom.java b/common/src/main/java/org/openecomp/mso/client/sdno/beans/RequestHdCustom.java new file mode 100644 index 0000000000..a0d00a7e6e --- /dev/null +++ b/common/src/main/java/org/openecomp/mso/client/sdno/beans/RequestHdCustom.java @@ -0,0 +1,170 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. 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. + * ============LICENSE_END========================================================= + */ + + +package org.openecomp.mso.client.sdno.beans; + +import java.util.ArrayList; +import java.util.List; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ +"request-client-name", +"request-user-id", +"request-id", +"health-diagnostic-code", +"operation-type", +"aai-param-list" +}) +public class RequestHdCustom { + +@JsonProperty("request-client-name") +private String requestClientName; +@JsonProperty("request-user-id") +private String requestUserId; +@JsonProperty("request-id") +private String requestId; +@JsonProperty("health-diagnostic-code") +private String healthDiagnosticCode; +@JsonProperty("operation-type") +private String operationType; +@JsonProperty("aai-param-list") +private List<AAIParamList> aaiParamList = new ArrayList<AAIParamList>(); + +/** +* No args constructor for use in serialization +* +*/ +public RequestHdCustom() { + } + +/** +* +* @param requestClientName +* @param operationType +* @param requestId +* @param healthDiagnosticCode +* @param aaiParamList +* @param requestUserId +*/ +public RequestHdCustom(String requestClientName, String requestUserId, String requestId, String healthDiagnosticCode, String operationType, List<AAIParamList> aaiParamList) { +super(); +this.requestClientName = requestClientName; +this.requestUserId = requestUserId; +this.requestId = requestId; +this.healthDiagnosticCode = healthDiagnosticCode; +this.operationType = operationType; +this.aaiParamList = aaiParamList; + } + +@JsonProperty("request-client-name") +public String getRequestClientName() { +return requestClientName; + } + +@JsonProperty("request-client-name") +public void setRequestClientName(String requestClientName) { +this.requestClientName = requestClientName; + } + +public RequestHdCustom withRequestClientName(String requestClientName) { +this.requestClientName = requestClientName; +return this; + } + +@JsonProperty("request-user-id") +public String getRequestUserId() { +return requestUserId; + } + +@JsonProperty("request-user-id") +public void setRequestUserId(String requestUserId) { +this.requestUserId = requestUserId; + } + +public RequestHdCustom withRequestUserId(String requestUserId) { +this.requestUserId = requestUserId; +return this; + } + +@JsonProperty("request-id") +public String getRequestId() { +return requestId; + } + +@JsonProperty("request-id") +public void setRequestId(String requestId) { +this.requestId = requestId; + } + +public RequestHdCustom withRequestId(String requestId) { +this.requestId = requestId; +return this; + } + +@JsonProperty("health-diagnostic-code") +public String getHealthDiagnosticCode() { +return healthDiagnosticCode; + } + +@JsonProperty("health-diagnostic-code") +public void setHealthDiagnosticCode(String healthDiagnosticCode) { +this.healthDiagnosticCode = healthDiagnosticCode; + } + +public RequestHdCustom withHealthDiagnosticCode(String healthDiagnosticCode) { +this.healthDiagnosticCode = healthDiagnosticCode; +return this; + } + +@JsonProperty("operation-type") +public String getOperationType() { +return operationType; + } + +@JsonProperty("operation-type") +public void setOperationType(String operationType) { +this.operationType = operationType; + } + +public RequestHdCustom withOperationType(String operationType) { +this.operationType = operationType; +return this; + } + +@JsonProperty("aai-param-list") +public List<AAIParamList> getAaiParamList() { +return aaiParamList; + } + +@JsonProperty("aai-param-list") +public void setAaiParamList(List<AAIParamList> aaiParamList) { +this.aaiParamList = aaiParamList; + } + +public RequestHdCustom withAaiParamList(List<AAIParamList> aaiParamList) { +this.aaiParamList = aaiParamList; +return this; + } + +} diff --git a/common/src/main/java/org/openecomp/mso/client/sdno/beans/RequestHealthDiagnostic.java b/common/src/main/java/org/openecomp/mso/client/sdno/beans/RequestHealthDiagnostic.java new file mode 100644 index 0000000000..2cddd0331e --- /dev/null +++ b/common/src/main/java/org/openecomp/mso/client/sdno/beans/RequestHealthDiagnostic.java @@ -0,0 +1,185 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.mso.client.sdno.beans; + +import java.io.Serializable; +import java.util.HashMap; +import java.util.Map; + +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + "request-client-name", + "request-node-name", + "request-node-ip", + "request-id", + "request-user-id", + "request-node-type", + "health-diagnostic-code" +}) +public class RequestHealthDiagnostic implements Serializable +{ + + @JsonProperty("request-client-name") + private String requestClientName; + @JsonProperty("request-node-name") + private String requestNodeName; + @JsonProperty("request-node-ip") + private String requestNodeIp; + @JsonProperty("request-id") + private String requestId; + @JsonProperty("request-user-id") + private String requestUserId; + @JsonProperty("request-node-type") + private String requestNodeType; + @JsonProperty("health-diagnostic-code") + private String healthDiagnosticCode; + @JsonIgnore + private Map<String, Object> additionalProperties = new HashMap<>(); + private final static long serialVersionUID = 1166788526178388021L; + + @JsonProperty("request-client-name") + public String getRequestClientName() { + return requestClientName; + } + + @JsonProperty("request-client-name") + public void setRequestClientName(String requestClientName) { + this.requestClientName = requestClientName; + } + + public RequestHealthDiagnostic withRequestClientName(String requestClientName) { + this.requestClientName = requestClientName; + return this; + } + + @JsonProperty("request-node-name") + public String getRequestNodeName() { + return requestNodeName; + } + + @JsonProperty("request-node-name") + public void setRequestNodeName(String requestNodeName) { + this.requestNodeName = requestNodeName; + } + + public RequestHealthDiagnostic withRequestNodeName(String requestNodeName) { + this.requestNodeName = requestNodeName; + return this; + } + + @JsonProperty("request-node-ip") + public String getRequestNodeIp() { + return requestNodeIp; + } + + @JsonProperty("request-node-ip") + public void setRequestNodeIp(String requestNodeIp) { + this.requestNodeIp = requestNodeIp; + } + + public RequestHealthDiagnostic withRequestNodeIp(String requestNodeIp) { + this.requestNodeIp = requestNodeIp; + return this; + } + + @JsonProperty("request-id") + public String getRequestId() { + return requestId; + } + + @JsonProperty("request-id") + public void setRequestId(String requestId) { + this.requestId = requestId; + } + + public RequestHealthDiagnostic withRequestId(String requestId) { + this.requestId = requestId; + return this; + } + + @JsonProperty("request-user-id") + public String getRequestUserId() { + return requestUserId; + } + + @JsonProperty("request-user-id") + public void setRequestUserId(String requestUserId) { + this.requestUserId = requestUserId; + } + + public RequestHealthDiagnostic withRequestUserId(String requestUserId) { + this.requestUserId = requestUserId; + return this; + } + + @JsonProperty("request-node-type") + public String getRequestNodeType() { + return requestNodeType; + } + + @JsonProperty("request-node-type") + public void setRequestNodeType(String requestNodeType) { + this.requestNodeType = requestNodeType; + } + + public RequestHealthDiagnostic withRequestNodeType(String requestNodeType) { + this.requestNodeType = requestNodeType; + return this; + } + + @JsonProperty("health-diagnostic-code") + public String getHealthDiagnosticCode() { + return healthDiagnosticCode; + } + + @JsonProperty("health-diagnostic-code") + public void setHealthDiagnosticCode(String healthDiagnosticCode) { + this.healthDiagnosticCode = healthDiagnosticCode; + } + + public RequestHealthDiagnostic withHealthDiagnosticCode(String healthDiagnosticCode) { + this.healthDiagnosticCode = healthDiagnosticCode; + return this; + } + + @JsonAnyGetter + public Map<String, Object> getAdditionalProperties() { + return this.additionalProperties; + } + + @JsonAnySetter + public void setAdditionalProperty(String name, Object value) { + this.additionalProperties.put(name, value); + } + + public RequestHealthDiagnostic withAdditionalProperty(String name, Object value) { + this.additionalProperties.put(name, value); + return this; + } + +} diff --git a/common/src/main/java/org/openecomp/mso/client/sdno/beans/ResultInfo.java b/common/src/main/java/org/openecomp/mso/client/sdno/beans/ResultInfo.java new file mode 100644 index 0000000000..976f5b9a33 --- /dev/null +++ b/common/src/main/java/org/openecomp/mso/client/sdno/beans/ResultInfo.java @@ -0,0 +1,116 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.mso.client.sdno.beans; + +import java.util.HashMap; +import java.util.Map; + +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ +"client-name", +"code", +"processing-host", +"request-id", +"status" +}) +public class ResultInfo { + +@JsonProperty("client-name") +private String clientName; +@JsonProperty("code") +private String code; +@JsonProperty("processing-host") +private String processingHost; +@JsonProperty("request-id") +private String requestId; +@JsonProperty("status") +private String status; +@JsonIgnore +private Map<String, Object> additionalProperties = new HashMap<>(); + +@JsonProperty("client-name") +public String getClientName() { +return clientName; +} + +@JsonProperty("client-name") +public void setClientName(String clientName) { +this.clientName = clientName; +} + +@JsonProperty("code") +public String getCode() { +return code; +} + +@JsonProperty("code") +public void setCode(String code) { +this.code = code; +} + +@JsonProperty("processing-host") +public String getProcessingHost() { +return processingHost; +} + +@JsonProperty("processing-host") +public void setProcessingHost(String processingHost) { +this.processingHost = processingHost; +} + +@JsonProperty("request-id") +public String getRequestId() { +return requestId; +} + +@JsonProperty("request-id") +public void setRequestId(String requestId) { +this.requestId = requestId; +} + +@JsonProperty("status") +public String getStatus() { +return status; +} + +@JsonProperty("status") +public void setStatus(String status) { +this.status = status; +} + +@JsonAnyGetter +public Map<String, Object> getAdditionalProperties() { +return this.additionalProperties; +} + +@JsonAnySetter +public void setAdditionalProperty(String name, Object value) { +this.additionalProperties.put(name, value); +} + +} diff --git a/common/src/main/java/org/openecomp/mso/client/sdno/beans/SDNO.java b/common/src/main/java/org/openecomp/mso/client/sdno/beans/SDNO.java new file mode 100644 index 0000000000..8505ec9a74 --- /dev/null +++ b/common/src/main/java/org/openecomp/mso/client/sdno/beans/SDNO.java @@ -0,0 +1,131 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.mso.client.sdno.beans; + +import java.io.Serializable; +import java.util.HashMap; +import java.util.Map; + +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + "operation", + "nodeLoc", + "nodeType", + "body" +}) +public class SDNO implements Serializable +{ + + @JsonProperty("operation") + private String operation; + @JsonProperty("nodeLoc") + private String nodeLoc; + @JsonProperty("nodeType") + private String nodeType; + @JsonProperty("body") + private Body body; + @JsonIgnore + private Map<String, Object> additionalProperties = new HashMap<>(); + private final static long serialVersionUID = -5303297382564282650L; + + @JsonProperty("operation") + public String getOperation() { + return operation; + } + + @JsonProperty("operation") + public void setOperation(String operation) { + this.operation = operation; + } + + @JsonProperty("nodeLoc") + public String getNodeLoc() { + return nodeLoc; + } + + @JsonProperty("nodeLoc") + public void setNodeLoc(String nodeLoc) { + this.nodeLoc = nodeLoc; + } + + public SDNO withNodeLoc(String nodeLoc) { + this.nodeLoc = nodeLoc; + return this; + } + + public SDNO withOperation(String operation) { + this.operation = operation; + return this; + } + + @JsonProperty("nodeType") + public String getNodeType() { + return nodeType; + } + + @JsonProperty("nodeType") + public void setNodeType(String nodeType) { + this.nodeType = nodeType; + } + + public SDNO withNodeType(String nodeType) { + this.nodeType = nodeType; + return this; + } + + @JsonProperty("body") + public Body getBody() { + return body; + } + + @JsonProperty("body") + public void setBody(Body body) { + this.body = body; + } + + public SDNO withBody(Body body) { + this.body = body; + return this; + } + + @JsonAnyGetter + public Map<String, Object> getAdditionalProperties() { + return this.additionalProperties; + } + + @JsonAnySetter + public void setAdditionalProperty(String name, Object value) { + this.additionalProperties.put(name, value); + } + + public SDNO SDNO (String name, Object value) { + this.additionalProperties.put(name, value); + return this; + } + +} diff --git a/common/src/main/java/org/openecomp/mso/client/sdno/dmaap/SDNOHealthCheckDmaapConsumer.java b/common/src/main/java/org/openecomp/mso/client/sdno/dmaap/SDNOHealthCheckDmaapConsumer.java new file mode 100644 index 0000000000..59adeb2026 --- /dev/null +++ b/common/src/main/java/org/openecomp/mso/client/sdno/dmaap/SDNOHealthCheckDmaapConsumer.java @@ -0,0 +1,161 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.mso.client.sdno.dmaap; + +import java.io.FileNotFoundException; +import java.io.IOException; +import java.util.Optional; + +import org.openecomp.mso.client.dmaap.DmaapConsumer; +import org.openecomp.mso.client.exceptions.SDNOException; +import org.openecomp.mso.jsonpath.JsonPathUtil; + +public class SDNOHealthCheckDmaapConsumer extends DmaapConsumer { + + private final String uuid; + private boolean continuePolling = true; + private final static String healthDiagnosticPath = "body.output.*"; + + public SDNOHealthCheckDmaapConsumer() throws FileNotFoundException, IOException { + this("none"); + } + + public SDNOHealthCheckDmaapConsumer(String uuid) throws FileNotFoundException, IOException { + super(); + this.uuid = uuid; + } + + @Override + public String getUserName() { + return msoProperties.get("sdno.health-check.dmaap.username"); + } + + @Override + public String getPassword() { + return msoProperties.get("sdno.health-check.dmaap.password"); + } + + @Override + public String getTopic() { + return msoProperties.get("sdno.health-check.dmaap.subscriber.topic"); + } + + @Override + public Optional<String> getHost() { + return Optional.ofNullable(msoProperties.get("sdno.health-check.dmaap.subscriber.host")); + } + + @Override + public boolean continuePolling() { + return continuePolling; + } + + @Override + public void stopProcessingMessages() { + continuePolling = false; + } + @Override + public void processMessage(String message) throws Exception { + if (isHealthDiagnostic(message, this.getRequestId())) { + if (!healthDiagnosticSuccessful(message)) { + Optional<String> statusMessage = this.getStatusMessage(message); + if (statusMessage.isPresent()) { + throw new SDNOException("failed with message " + statusMessage.get()); + } else { + throw new SDNOException("failed with no status message"); + } + } else { + auditLogger.info("successful health diagnostic found for request: " + this.getRequestId()); + stopProcessingMessages(); + } + } + } + + @Override + public boolean isAccepted(String message) { + if (isResultInfo(message)) { + Optional<String> code = isAccepted(message, this.getRequestId()); + if (code.isPresent()) { + if ("202".equals(code.get())) { + return true; + } else { + //TODO check other statuses 400 and 500 + } + } else { + //TODO throw error + } + } + + return false; + } + + @Override + public boolean isFailure(String message) { + if (isResultInfo(message)) { + Optional<String> code = isFailure(message, this.getRequestId()); + if (code.isPresent()) { + if ("500".equals(code.get())) { + return true; + } else { + //TODO check other statuses 400 and 500 + } + } else { + //TODO throw error + } + } + + return false; + } + + @Override + public String getRequestId() { + return uuid; + } + + protected Optional<String> isAccepted(String json, String uuid) { + return JsonPathUtil.getInstance().locateResult(json, String.format("$.result-info[?(@.status=='ACCEPTED' && @.request-id=='%s')].code", uuid)); + } + + protected Optional<String> isFailure(String json, String uuid) { + return JsonPathUtil.getInstance().locateResult(json, String.format("$.result-info[?(@.status=='FAILURE' && @.request-id=='%s')].code", uuid)); + } + + protected boolean isResultInfo(String json) { + return JsonPathUtil.getInstance().pathExists(json, "$[?(@.result-info)]"); + } + + protected boolean isHealthDiagnostic(String json, String uuid) { + return JsonPathUtil.getInstance().pathExists(json, String.format("$[?(@.result-info.request-id=='%s')].%s", uuid, healthDiagnosticPath)); + } + + protected boolean healthDiagnosticSuccessful(String json) { + return JsonPathUtil.getInstance().pathExists(json, "$." + healthDiagnosticPath + "[?(@.response-status=='Success')]"); + } + + protected Optional<String> getStatusMessage(String json) { + return JsonPathUtil.getInstance().locateResult(json, "$." + healthDiagnosticPath + ".error-message"); + } + + @Override + public int getMaximumElapsedTime() { + return 300000; + } +} diff --git a/common/src/main/java/org/openecomp/mso/client/sdno/dmaap/SDNOHealthCheckDmaapPublisher.java b/common/src/main/java/org/openecomp/mso/client/sdno/dmaap/SDNOHealthCheckDmaapPublisher.java new file mode 100644 index 0000000000..ef19bb7921 --- /dev/null +++ b/common/src/main/java/org/openecomp/mso/client/sdno/dmaap/SDNOHealthCheckDmaapPublisher.java @@ -0,0 +1,55 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.mso.client.sdno.dmaap; + +import java.io.FileNotFoundException; +import java.io.IOException; +import java.util.Optional; + +import org.openecomp.mso.client.dmaap.DmaapPublisher; + +public class SDNOHealthCheckDmaapPublisher extends DmaapPublisher { + + public SDNOHealthCheckDmaapPublisher() throws FileNotFoundException, IOException { + super(); + } + + @Override + public String getUserName() { + return msoProperties.get("sdno.health-check.dmaap.username"); + } + + @Override + public String getPassword() { + return msoProperties.get("sdno.health-check.dmaap.password"); + } + + @Override + public String getTopic() { + return msoProperties.get("sdno.health-check.dmaap.publisher.topic"); + } + + @Override + public Optional<String> getHost() { + return Optional.ofNullable(msoProperties.get("sdno.health-check.dmaap.publisher.host")); + } + +} |