diff options
Diffstat (limited to 'appc-event-listener/appc-event-listener-bundle/src/main/java/org/openecomp/appc/listener/CL/model/OutgoingMessage.java')
-rw-r--r-- | appc-event-listener/appc-event-listener-bundle/src/main/java/org/openecomp/appc/listener/CL/model/OutgoingMessage.java | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/appc-event-listener/appc-event-listener-bundle/src/main/java/org/openecomp/appc/listener/CL/model/OutgoingMessage.java b/appc-event-listener/appc-event-listener-bundle/src/main/java/org/openecomp/appc/listener/CL/model/OutgoingMessage.java new file mode 100644 index 000000000..fa8560ed2 --- /dev/null +++ b/appc-event-listener/appc-event-listener-bundle/src/main/java/org/openecomp/appc/listener/CL/model/OutgoingMessage.java @@ -0,0 +1,150 @@ +/*- + * ============LICENSE_START======================================================= + * openECOMP : APP-C + * ================================================================================ + * 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.appc.listener.CL.model; + +import java.net.InetAddress; +import java.security.SecureRandom; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.TimeZone; + +import org.json.JSONObject; +import org.openecomp.appc.listener.util.Mapper; +import org.openecomp.appc.util.Time; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize.Inclusion; + +/** + * This class represents a message being sent out to DMaaP by APPC to update listeners on the status of a request + * + */ +@JsonSerialize(include = Inclusion.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +public class OutgoingMessage extends CommonMessage { + + private static final long serialVersionUID = -5447940920271469613L; + + @JsonProperty("response") + private Status response; + + @JsonProperty("responseTime") + private String responseTime; + + @JsonProperty("originalRequest") + private String originalRequest; + + public OutgoingMessage() { + + } + + public OutgoingMessage(IncomingMessage msg) { + setId(msg.getId()); + setOriginalRequest(msg.getRequest()); + setRequestClient(msg.getRequestClient()); + setRequestTime(msg.getRequestTime()); + setVmName(msg.getVmName()); + setFromSystem(generateFrom()); + setResponse(Status.PENDING); + setPolicyName(msg.getPolicyName()); + setPolicyVersion(msg.getPolicyVersion()); + setStartTime(msg.getStartTime()); + } + + @JsonProperty("duration") + public long getDuration() { + return System.currentTimeMillis() - getStartTime(); + } + + public Status getResponse() { + return response; + } + + public String getResponseTime() { + return responseTime; + } + + public String getOriginalRequest() { + return originalRequest; + } + + @JsonIgnore + public void setResponse(Status response) { + this.response = response; + } + + public void setResponse(String responseString) { + this.response = Status.valueOf(responseString); + } + + public void setResponseTime(String responseTime) { + this.responseTime = responseTime; + } + + public void setOriginalRequest(String originalRequest) { + this.originalRequest = originalRequest; + } + + public void updateResponseTime() { + SecureRandom rand = new SecureRandom(); + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss.SSS"); + df.setTimeZone(TimeZone.getTimeZone("UTC")); + String date = df.format(new Date(Time.utcTime())); + this.responseTime = String.format("%s%03d", date, rand.nextInt(1000)); + } + + public String generateFrom() { + String name; + try { + InetAddress iAddress = InetAddress.getLocalHost(); + name = iAddress.getCanonicalHostName(); + } catch (Exception e) { + // Could not get anything from the InetAddress + name = "UnknownHost"; + } + return "appc@" + name; + } + + public JSONObject toResponse() { + updateResponseTime(); + JSONObject json = Mapper.toJsonObject(this); + + if (!json.has("message")) { + // If there is no message, parrot the status (response field) + // TODO - Can this be removed for 1602 making message truely optional? + json.put("message", this.getResponse().toString()); + } + + // Removed duplication of status from message for 1602 + // json.put("message", String.format("%s: %s", request, json.get("message"))); + + return json; + } + + @Override + public String toString() { + return String.format("%s - %s", getId(), getResponse()); + } +} |