Commit 1 for TM API definition 24/79824/4
authorJerry Flood <jflood@att.com>
Wed, 6 Mar 2019 22:25:05 +0000 (17:25 -0500)
committerJerry Flood <jflood@att.com>
Wed, 13 Mar 2019 02:14:23 +0000 (22:14 -0400)
Initial commit of Ticket Management Simulator.

Multiple commits required due to commit size limitation.

Change-Id: Ia9e687d3e0ba92f29705805a438cdeacba578d70
Issue-ID: OPTFRA-432
Signed-off-by: Jerry Flood <jflood@att.com>
cmso-ticketmgt/src/main/docker/Dockerfile [new file with mode: 0644]
cmso-ticketmgt/src/main/docker/assembly/cmso-files.xml [new file with mode: 0644]
cmso-ticketmgt/src/main/docker/extra-files/startService.sh [new file with mode: 0644]
cmso-ticketmgt/src/main/java/org/onap/observations/Mdc.java [new file with mode: 0644]
cmso-ticketmgt/src/main/java/org/onap/observations/MessageHeaders.java [new file with mode: 0644]

diff --git a/cmso-ticketmgt/src/main/docker/Dockerfile b/cmso-ticketmgt/src/main/docker/Dockerfile
new file mode 100644 (file)
index 0000000..3555d62
--- /dev/null
@@ -0,0 +1,33 @@
+FROM ubuntu:16.04
+
+MAINTAINER "The Onap Team"
+LABEL Description="This image contains ubuntu 16.04 with the openjdk installed" Version="16.04-8"
+ENV APP_HOME=/opt/app/cmso
+ARG http_proxy
+ARG https_proxy
+ENV HTTP_PROXY=$http_proxy
+ENV HTTPS_PROXY=$https_proxy
+ENV http_proxy=$HTTP_PROXY
+ENV https_proxy=$HTTPS_PROXY
+
+RUN test -n "$http_proxy" && echo "Acquire::Proxy \"http://$http_proxy\";" > /etc/apt/apt.conf.d/02proxy || true &&  \
+    apt-get update &&  \
+    apt-get -y dist-upgrade &&  \
+    apt-get install -y openjdk-8-jre-headless
+
+COPY onap-cmso-tm/cmso-ticketmgt.jar ${APP_HOME}/app.jar
+
+VOLUME /share/etc
+VOLUME /share/logs
+VOLUME /share/debug-logs
+
+COPY onap-cmso-tm/startService.sh ${APP_HOME}/startService.sh
+COPY onap-cmso-tm/data ${APP_HOME}/data
+
+RUN chmod 700 ${APP_HOME}/startService.sh
+RUN ln -s /share/etc ${APP_HOME}/etc
+RUN ln -s /share/logs ${APP_HOME}/logs
+RUN ln -s /share/debug-logs ${APP_HOME}/debug-logs
+
+WORKDIR ${APP_HOME}
+ENTRYPOINT ./startService.sh 
diff --git a/cmso-ticketmgt/src/main/docker/assembly/cmso-files.xml b/cmso-ticketmgt/src/main/docker/assembly/cmso-files.xml
new file mode 100644 (file)
index 0000000..37804ec
--- /dev/null
@@ -0,0 +1,64 @@
+<!-- ============LICENSE_START======================================================= 
+       ECOMP CMSO ================================================================================ 
+       Copyright (C) 2019 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========================================================= -->
+
+<assembly
+       xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.1"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.1 http://maven.apache.org/xsd/assembly-1.1.1.xsd">
+       <id>cmso-files</id>
+
+       <formats>
+               <format>tar.gz</format>
+       </formats>
+       <includeBaseDirectory>false</includeBaseDirectory>
+
+
+       <fileSets>
+               <!-- include config files -->
+               <fileSet>
+                       <includes>
+                               <include>${project.build.finalName}.jar</include>
+                       </includes>
+                       <directory>${project.build.directory}</directory>
+                       <outputDirectory>/</outputDirectory>
+               </fileSet>
+               <fileSet>
+                       <includes>
+                               <include>**</include>
+                       </includes>
+                       <directory>src/main/docker/extra-files</directory>
+                       <outputDirectory>/</outputDirectory>
+               </fileSet>
+               <fileSet>
+                       <includes>
+                               <include>**</include>
+                       </includes>
+                       <directory>data</directory>
+                       <outputDirectory>/data</outputDirectory>
+               </fileSet>
+               <fileSet>
+                       <directory>${project.basedir}/src/main/resources</directory>
+                       <outputDirectory>./resources</outputDirectory>
+                       <includes>
+                               <include>**/*</include>
+                       </includes>
+               </fileSet>
+               <fileSet>
+                       <directory>${project.basedir}/etc/config</directory>
+                       <outputDirectory>./</outputDirectory>
+                       <includes>
+                               <include>**/*</include>
+                       </includes>
+               </fileSet>
+
+       </fileSets>
+
+</assembly>
diff --git a/cmso-ticketmgt/src/main/docker/extra-files/startService.sh b/cmso-ticketmgt/src/main/docker/extra-files/startService.sh
new file mode 100644 (file)
index 0000000..199c637
--- /dev/null
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+VM_ARGS="${VM_ARGS} -Dserver.local.startpath=${RESOURCES_HOME}"
+
+echo "VM_ARGS="${VM_ARGS}
+
+java -Djava.security.egd=file:/dev/./urandom  ${VM_ARGS} -Xms256m -Xmx1024m  -jar  ./app.jar
diff --git a/cmso-ticketmgt/src/main/java/org/onap/observations/Mdc.java b/cmso-ticketmgt/src/main/java/org/onap/observations/Mdc.java
new file mode 100644 (file)
index 0000000..cf49ccd
--- /dev/null
@@ -0,0 +1,223 @@
+/*
+ * Copyright © 2019 AT&T Intellectual Property.
+ * 
+ * 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.
+ * 
+ * 
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *         https://creativecommons.org/licenses/by/4.0/
+ * 
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+*/
+package org.onap.observations;
+
+import static com.att.eelf.configuration.Configuration.MDC_BEGIN_TIMESTAMP;
+import static com.att.eelf.configuration.Configuration.MDC_END_TIMESTAMP;
+import static com.att.eelf.configuration.Configuration.MDC_KEY_REQUEST_ID;
+import static com.att.eelf.configuration.Configuration.MDC_PARTNER_NAME;
+import static com.att.eelf.configuration.Configuration.MDC_REMOTE_HOST;
+import static com.att.eelf.configuration.Configuration.MDC_RESPONSE_CODE;
+import static com.att.eelf.configuration.Configuration.MDC_RESPONSE_DESC;
+import static com.att.eelf.configuration.Configuration.MDC_STATUS_CODE;
+import static com.att.eelf.configuration.Configuration.MDC_TARGET_ENTITY;
+import static com.att.eelf.configuration.Configuration.MDC_TARGET_SERVICE_NAME;
+
+import java.net.URI;
+import java.util.Date;
+import java.util.Map;
+import java.util.UUID;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.client.ClientRequestContext;
+import javax.ws.rs.client.ClientResponseContext;
+import javax.ws.rs.container.ContainerRequestContext;
+import javax.ws.rs.container.ContainerResponseContext;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.core.Response.StatusType;
+
+import org.onap.observations.MessageHeaders.HeadersEnum;
+import org.slf4j.MDC;
+
+import com.att.eelf.utils.Stopwatch;
+
+/**
+ * ECOMP EELF logging MDC fields not defined in the MDC Configuration (i.e.
+ * MDC_ALERT_SEVERITY)
+ **/
+public class Mdc {
+       public static final String SERVICE_NAME = "CSS-Scheduler";
+       public enum Enum {
+               // BeginTimestamp,
+               // EndTimeStamp,
+               // RequestId,
+               // ServiceInstanceId,
+               VirtualServerName,
+               // ServiceName,
+               // PartnerName,
+               // StatusCOde,
+               // ResponseCode,
+               // ResponseDescription,
+               // InstanceUUID,
+               // AlertSeverity,
+               // ServerIPAddress,
+               // ElapsedTime,
+               // ServerFQDN,
+               // RemoteHost,
+               ClassName, Unused,
+               // ProcessKey,
+               CustomField1, CustomField2, CustomField3, CustomField4,
+               // TargetVirtualEntity,
+               // TargetEntity,
+               // TargetServiceName,
+               ErrorCode, ErrorDescription, Timer,
+       }
+
+       public static String getCaller(int back)
+       {
+               StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace();
+               return stackTraceElements[back].getClassName() + "." + stackTraceElements[back].getMethodName();
+       }
+
+       public static void setCaller(int back)
+       {
+               String caller = MDC.get(Enum.ClassName.name());
+               if (caller == null)
+                       MDC.put(Enum.ClassName.name(), getCaller(back));
+       }
+
+       public static void setObservation(ObservationInterface o)
+       {
+               MDC.put(Enum.CustomField4.name(), o.name());
+       }
+
+       public static void clearCaller()
+       {
+               MDC.remove(Enum.ClassName.name());
+       }
+
+       public static Map<String, String> save() 
+       {
+               Map<String, String> save = MDC.getCopyOfContextMap();
+               return save;
+       }
+
+       public static void restore(Map<String, String> mdcSave) 
+       {
+               MDC.clear();
+               for (String name : mdcSave.keySet())
+                       MDC.put(name, mdcSave.get(name));
+       }
+
+
+
+       public static void setRequestIdIfNotSet(String requestId) {
+               if (MDC.get(MDC_KEY_REQUEST_ID) == null || MDC.get(MDC_KEY_REQUEST_ID).equals(""))
+       {
+                       setRequestId(requestId);
+               }
+       }
+       
+       public static void setRequestId(String requestId) {
+               MDC.put(MDC_KEY_REQUEST_ID, requestId);
+       }
+               
+       public static void metricStart(ClientRequestContext requestContext) {
+               MDC.put(MDC_BEGIN_TIMESTAMP, Stopwatch.isoFormatter.format(new Date()));
+               MDC.put(MDC_END_TIMESTAMP, MDC.get(MDC_BEGIN_TIMESTAMP));
+               setPartnerTargetFromUri(requestContext.getUri());
+       }
+
+       public static void metricEnd(ClientResponseContext response) 
+       {
+               
+               Date now = new Date();
+               //MDC.put(MDC_BEGIN_TIMESTAMP, Stopwatch.isoFormatter.format(now));
+               MDC.put(MDC_END_TIMESTAMP, Stopwatch.isoFormatter.format(now));
+               setResponseInfo(response.getStatusInfo());
+               
+       }
+       public static void auditStart(ContainerRequestContext requestContext, HttpServletRequest servletRequest) 
+       {
+               MDC.put(MDC_BEGIN_TIMESTAMP, Stopwatch.isoFormatter.format(new Date()));
+               MDC.put(MDC_END_TIMESTAMP, MDC.get(MDC_BEGIN_TIMESTAMP));
+               MDC.put(MDC_REMOTE_HOST, servletRequest.getRemoteHost());
+               MDC.put(Enum.ClassName.name(), getCaller(4));
+               MultivaluedMap<String, String> headers = requestContext.getHeaders();
+               String transactionId = (String) headers.getFirst(HeadersEnum.TransactionID.toString());
+               if (transactionId != null)
+               {
+                       setRequestId(transactionId);
+               }
+               else
+               {
+                       setRequestId(UUID.randomUUID().toString());
+               }
+               
+       }
+
+       public static void auditEnd(ContainerRequestContext requestContext, ContainerResponseContext response)
+       {
+               Date now = new Date();
+               //MDC.put(MDC_BEGIN_TIMESTAMP, Stopwatch.isoFormatter.format(now));
+               MDC.put(MDC_END_TIMESTAMP, Stopwatch.isoFormatter.format(now));
+               MDC.put(Enum.ClassName.name(), getCaller(4));
+               
+               setResponseInfo(response.getStatusInfo());
+               
+       }
+                
+       private static void setResponseInfo(StatusType statusInfo)
+       {
+               Integer status = statusInfo.getStatusCode();
+               String completed = "ERROR";
+               if (status >=200 && status < 300)
+               {
+                       completed = "COMPLETE";
+               }
+               MDC.put(MDC_RESPONSE_CODE, status.toString());
+               MDC.put(MDC_RESPONSE_DESC, statusInfo.getReasonPhrase());
+               MDC.put(MDC_STATUS_CODE, completed);
+       }
+               
+       public static void setEvent(String requestID) {
+               MDC.put(MDC_BEGIN_TIMESTAMP, Stopwatch.isoFormatter.format(new Date()));
+               MDC.put(MDC_END_TIMESTAMP, MDC.get(MDC_BEGIN_TIMESTAMP));
+               setRequestId(requestID);
+       }
+
+       private static void setPartnerTargetFromUri(URI uri)
+       {
+               try
+               {
+                       MDC.put(MDC_PARTNER_NAME, uri.getHost());
+                       MDC.put(MDC_TARGET_ENTITY, uri.getScheme() + "://" + uri.getHost() + ":" + uri.getPort());
+                       MDC.put(MDC_TARGET_SERVICE_NAME, uri.getPath());
+               }
+               catch (Exception e)
+               {
+                       MDC.put(MDC_PARTNER_NAME, "UNKNOWN");
+                       MDC.put(MDC_TARGET_ENTITY, "UNKNOWN");
+                       MDC.put(MDC_TARGET_SERVICE_NAME, "UNKNOWN");
+               }
+       }
+
+
+}
\ No newline at end of file
diff --git a/cmso-ticketmgt/src/main/java/org/onap/observations/MessageHeaders.java b/cmso-ticketmgt/src/main/java/org/onap/observations/MessageHeaders.java
new file mode 100644 (file)
index 0000000..d8f80a2
--- /dev/null
@@ -0,0 +1,104 @@
+/*
+ * Copyright © 2019 AT&T Intellectual Property.
+ * 
+ * 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.
+ * 
+ * 
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *         https://creativecommons.org/licenses/by/4.0/
+ * 
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+*/
+
+package org.onap.observations;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+public class MessageHeaders {
+    public enum HeadersEnum {
+        UNDEFINED("UNDEFINED"), TransactionID("X-TransactionId"), FromAppID("X-FromAppId"), MinorVersion(
+                "X-MinorVersion"), PatchVersion("X-PatchVersion"), LatestVersion("X-LatestVersion"),;
+
+        private final String text;
+        private final ArrayList<String> list;
+
+        private HeadersEnum(String text) {
+            this.text = text;
+            this.list = new ArrayList<>();
+        }
+
+        @Override
+        public String toString() {
+            return text;
+        }
+    }
+
+    public static final Map<String, String> supportedMajorVersions = new HashMap<String, String>();
+    static {
+        supportedMajorVersions.put("v1", "0");
+        supportedMajorVersions.put("v2", "0");
+    }
+    public static final Set<String> supportedMajorMinorVersions = new HashSet<String>();
+    static {
+        supportedMajorMinorVersions.add("v1.0");
+        supportedMajorMinorVersions.add("v2.0");
+    }
+    public static final String latestVersion = "2.0.0";
+    public static final String patchVersion = "0";
+
+    public static HeadersEnum fromString(String text) {
+        for (HeadersEnum e : HeadersEnum.values())
+            if (e.text.equals(text))
+                return e;
+        return HeadersEnum.UNDEFINED;
+    }
+
+    public static String getPatchVersion() {
+        return patchVersion;
+    }
+
+    public static String getLatestVersion() {
+        return latestVersion;
+    }
+
+    public static boolean validateMajorVersion(String major) {
+        String majorKey = major.toLowerCase();
+        if (!supportedMajorVersions.containsKey(majorKey))
+            return false;
+        return true;
+    }
+
+    public static boolean validateMajorMinorVersion(String major, String minor) {
+        String majorKey = major.toLowerCase();
+        if (!supportedMajorVersions.containsKey(majorKey))
+            return false;
+
+        if (minor != null) {
+            String majorMinorKey = majorKey + "." + minor;
+            return supportedMajorMinorVersions.contains(majorMinorKey);
+        }
+        return true;
+    }
+}