Align PM Mapper to new build guidelines 22/91922/2
authordfarrelly <david.farrelly@est.tech>
Wed, 24 Jul 2019 16:17:13 +0000 (16:17 +0000)
committerdfarrelly <david.farrelly@est.tech>
Wed, 24 Jul 2019 16:17:13 +0000 (16:17 +0000)
*Switch to Fabric8 docker maven plugin
*Add git commit plugin
*Remove shaded jar
*Remove some unused imports
*Add a human readable log file

Issue-ID: DCAEGEN2-1683
Change-Id: I1028f3195d3f03a9d919c91073398b01ccd6d7d1
Signed-off-by: dfarrelly <david.farrelly@est.tech>
pom.xml
src/main/java/org/onap/dcaegen2/services/pmmapper/App.java
src/main/java/org/onap/dcaegen2/services/pmmapper/config/ConfigHandler.java
src/main/java/org/onap/dcaegen2/services/pmmapper/healthcheck/HealthCheckHandler.java
src/main/java/org/onap/dcaegen2/services/pmmapper/utils/DMaaPAdapter.java
src/main/java/org/onap/dcaegen2/services/pmmapper/utils/RequestSender.java
src/main/resources/Dockerfile
src/main/resources/logback.xml
version.properties

diff --git a/pom.xml b/pom.xml
index 2b2b1e1..41a8d73 100644 (file)
--- a/pom.xml
+++ b/pom.xml
@@ -26,7 +26,7 @@
 
     <groupId>org.onap.dcaegen2.services</groupId>
     <artifactId>pm-mapper</artifactId>
-    <version>1.1.2-SNAPSHOT</version>
+    <version>1.1.3-SNAPSHOT</version>
 
     <parent>
         <groupId>org.onap.oparent</groupId>
         <xerces.version>2.11.0</xerces.version>
         <reactor.test>3.1.0.RELEASE</reactor.test>
         <!-- Plugin Versions -->
-        <shade.plugin.version>3.2.0</shade.plugin.version>
         <jacoco.version>0.8.2</jacoco.version>
-        <dockerfile.version>1.4.10</dockerfile.version>
         <surefire.version>2.22.0</surefire.version>
+        <git-commit.version>3.0.0</git-commit.version>
+        <build-helper.version>3.0.0</build-helper.version>
+        <docker-maven.version>0.30.0</docker-maven.version>
+        <maven-jar.version>3.1.2</maven-jar.version>
+        <dependencies.version>3.1.1</dependencies.version>
         <!-- Plugin Settings -->
         <image-name>${docker.push.registry}/onap/${project.groupId}.${project.artifactId}</image-name>
         <maven.build.timestamp.format>yyyyMMdd'T'HHmmss'Z'</maven.build.timestamp.format>
         <sonar.projectVersion>${project.version}</sonar.projectVersion>
         <compiler.target.version>1.8</compiler.target.version>
         <compiler.source.version>1.8</compiler.source.version>
-        <shade.main>org.onap.dcaegen2.services.pmmapper.App</shade.main>
-        <shade.transformer>org.apache.maven.plugins.shade.resource.ManifestResourceTransformer</shade.transformer>
         <onap.logging.version>1.2.2</onap.logging.version>
+        <classpath.separator>@@</classpath.separator>
+        <pmmapper.main.class>org.onap.dcaegen2.services.pmmapper.App</pmmapper.main.class>
+        <dep.dir.name>libs</dep.dir.name>
+        <ext.dep.dir.path>${dep.dir.name}/external</ext.dep.dir.path>
     </properties>
 
     <dependencies>
     <build>
         <plugins>
             <plugin>
-                <groupId>com.spotify</groupId>
-                <artifactId>dockerfile-maven-plugin</artifactId>
-                <version>${dockerfile.version}</version>
+                <groupId>pl.project13.maven</groupId>
+                <artifactId>git-commit-id-plugin</artifactId>
+                <version>${git-commit.version}</version>
                 <configuration>
-                    <repository>${image-name}</repository>
-                    <dockerfile>${project.build.outputDirectory}/Dockerfile</dockerfile>
-                    <buildArgs>
-                        <JAR>${project.build.finalName}-jar-with-dependencies.jar</JAR>
-                    </buildArgs>
+                    <dateFormat>${maven.build.timestamp.format}</dateFormat>
                 </configuration>
                 <executions>
                     <execution>
-                        <id>tag-version</id>
-                        <phase>none</phase>
+                        <id>get-git-info</id>
                         <goals>
-                            <goal>tag</goal>
+                            <goal>revision</goal>
                         </goals>
-                        <configuration>
-                            <tag>${project.version}-${timestamp}</tag>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>latest-snapshot</id>
-                        <phase>none</phase>
-                        <goals>
-                            <goal>tag</goal>
-                        </goals>
-                        <configuration>
-                            <tag>latest-snapshot</tag>
-                        </configuration>
                     </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <version>${dependencies.version}</version>
+                <configuration>
+                    <silent>true</silent>
+                    <includeScope>runtime</includeScope>
+                    <pathSeparator>${classpath.separator}</pathSeparator>
+                </configuration>
+                <executions>
                     <execution>
-                        <id>push-latest</id>
-                        <phase>none</phase>
+                        <id>copy-external-dependencies</id>
+                        <phase>prepare-package</phase>
                         <goals>
-                            <goal>push</goal>
+                            <goal>copy-dependencies</goal>
+                            <goal>build-classpath</goal>
                         </goals>
                         <configuration>
-                            <tag>latest-snapshot</tag>
+                            <excludeGroupIds>${project.parent.groupId}</excludeGroupIds>
+                            <outputDirectory>${project.build.directory}/${ext.dep.dir.path}</outputDirectory>
+                            <prefix>./${ext.dep.dir.path}</prefix>
+                            <outputProperty>classpath.external</outputProperty>
                         </configuration>
                     </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>build-helper-maven-plugin</artifactId>
+                <version>${build-helper.version}</version>
+                <executions>
                     <execution>
-                        <id>push-version</id>
-                        <phase>none</phase>
+                        <id>fix-classpath-separator</id>
+                        <phase>prepare-package</phase>
                         <goals>
-                            <goal>push</goal>
+                            <goal>regex-properties</goal>
                         </goals>
                         <configuration>
-                            <tag>${project.version}-${timestamp}</tag>
+                            <regexPropertySettings>
+                                <regexPropertySetting>
+                                    <name>classpath.external</name>
+                                    <value>${classpath.external}</value>
+                                    <regex>${classpath.separator}</regex>
+                                    <replacement xml:space="preserve"> </replacement>
+                                </regexPropertySetting>
+                            </regexPropertySettings>
                         </configuration>
                     </execution>
                 </executions>
             </plugin>
+            <plugin>
+                <groupId>io.fabric8</groupId>
+                <artifactId>docker-maven-plugin</artifactId>
+                <version>${docker-maven.version}</version>
+                <configuration>
+                    <images>
+                        <image>
+                            <name>${project.groupId}.${project.artifactId}</name>
+                            <registry>${onap.nexus.dockerregistry.daily}</registry>
+                            <build>
+                                <contextDir>${project.basedir}</contextDir>
+                                <dockerFile>${project.build.outputDirectory}/Dockerfile</dockerFile>
+                                <args>
+                                    <JAR>${project.build.finalName}.jar</JAR>
+                                </args>
+                                <cleanup>none</cleanup>
+                                <tags>
+                                    <tag>${project.version}</tag>
+                                    <tag>${project.version}-${maven.build.timestamp}Z</tag>
+                                </tags>
+                            </build>
+                        </image>
+                    </images>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-jar-plugin</artifactId>
+                <version>${maven-jar.version}</version>
+                <configuration>
+                    <archive>
+                        <manifest>
+                            <mainClass>${pmmapper.main.class}</mainClass>
+                            <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
+                            <addBuildEnvironmentEntries>true</addBuildEnvironmentEntries>
+                            <useUniqueVersions>false</useUniqueVersions> <!-- workaround for MJAR-156 -->
+                        </manifest>
+                        <manifestEntries>
+                            <Class-Path>${classpath.external}</Class-Path>
+                            <Git-Branch>${git.branch}</Git-Branch>
+                            <Git-Build-Host>${git.build.host}</Git-Build-Host>
+                            <Git-Build-Time>${git.build.time}</Git-Build-Time>
+                            <Git-Build-User-Email>${git.build.user.email}</Git-Build-User-Email>
+                            <Git-Build-User-Name>${git.build.user.name}</Git-Build-User-Name>
+                            <Git-Build-Version>${git.build.version}</Git-Build-Version>
+                            <Git-Closest-Tag-Name>${git.closest.tag.name}</Git-Closest-Tag-Name>
+                            <Git-Commit-Id>${git.commit.id}</Git-Commit-Id>
+                            <Git-Commit-Message-Short>${git.commit.message.short}</Git-Commit-Message-Short>
+                            <Git-Commit-Time>${git.commit.time}</Git-Commit-Time>
+                            <Git-Commit-User-Email>${git.commit.user.email}</Git-Commit-User-Email>
+                            <Git-Commit-User-Name>${git.commit.user.name}</Git-Commit-User-Name>
+                        </manifestEntries>
+                    </archive>
+                </configuration>
+            </plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-surefire-plugin</artifactId>
                 <artifactId>maven-failsafe-plugin</artifactId>
                 <version>${surefire.version}</version>
             </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-shade-plugin</artifactId>
-                <version>${shade.plugin.version}</version>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>shade</goal>
-                        </goals>
-                        <configuration>
-                            <shadedArtifactAttached>true</shadedArtifactAttached>
-                            <shadedClassifierName>jar-with-dependencies</shadedClassifierName>
-                            <transformers>
-                                <transformer
-                                        implementation="${shade.transformer}">
-                                    <mainClass>${shade.main}</mainClass>
-                                </transformer>
-                            </transformers>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-compiler-plugin</artifactId>
index a5eb68d..11a91f8 100644 (file)
@@ -20,6 +20,7 @@
 
 package org.onap.dcaegen2.services.pmmapper;
 
+import ch.qos.logback.classic.util.ContextInitializer;
 import io.undertow.Handlers;
 import io.undertow.Undertow;
 import io.undertow.util.StatusCodes;
@@ -60,6 +61,11 @@ import java.util.ArrayList;
 import java.util.List;
 
 public class App {
+
+    static {
+        System.setProperty(ContextInitializer.CONFIG_FILE_PROPERTY, "/opt/app/pm-mapper/etc/logback.xml");
+    }
+
     private static final ONAPLogAdapter logger = new ONAPLogAdapter(LoggerFactory.getLogger(App.class));
     private static Path mappingTemplate = Paths.get("/opt/app/pm-mapper/etc/mapping.ftl");
     private static Path xmlSchema = Paths.get("/opt/app/pm-mapper/etc/measCollec_plusString.xsd");
index e98849e..fef1d19 100644 (file)
@@ -77,7 +77,8 @@ public class ConfigHandler {
         } catch (Exception exception) {
             throw new CBSServerError("Error connecting to Configbinding Service: ", exception);
         } finally {
-            logger.unwrap().info("Received pm-mapper configuration from ConfigBinding Service:\n{}", mapperConfigJson);
+            logger.unwrap().info("Received pm-mapper configuration from ConfigBinding Service: \n");
+            logger.unwrap().debug(mapperConfigJson);
         }
 
         return convertMapperConfigToObject(mapperConfigJson);
index 756ee7b..70a9596 100644 (file)
@@ -39,7 +39,7 @@ public class HealthCheckHandler implements HttpHandler {
             exchange.setStatusCode(StatusCodes.OK)
                     .getResponseSender()
                     .send(StatusCodes.OK_STRING);
-
+            logger.unwrap().info("Healthcheck request successful");
         } finally {
             logger.exiting();
         }
index fa01740..cc4413a 100644 (file)
@@ -26,7 +26,6 @@ import com.google.gson.TypeAdapter;
 import com.google.gson.stream.JsonReader;
 import com.google.gson.stream.JsonWriter;
 import java.io.IOException;
-import java.util.Optional;
 import org.onap.dcaegen2.services.pmmapper.model.PublisherConfig;
 import org.onap.dcaegen2.services.pmmapper.model.SubscriberConfig;
 
index ba57387..411196c 100644 (file)
@@ -27,7 +27,6 @@ import java.io.OutputStream;
 import java.net.HttpURLConnection;\r
 import java.net.URL;\r
 import java.nio.charset.StandardCharsets;\r
-import java.util.Base64;\r
 import java.util.Optional;\r
 import java.util.UUID;\r
 import java.util.stream.Collectors;\r
index 95fdfad..bf59524 100644 (file)
 #
 FROM openjdk:8u171-jre-alpine
 
-ENTRYPOINT ["/bin/sh", "-c", "nohup sh etc/reconfigure.sh & /usr/bin/java -jar /opt/app/pm-mapper/pm-mapper.jar"]
-ARG JAR
 WORKDIR /opt/app/pm-mapper
 
 RUN apk --no-cache add curl
 
 RUN mkdir -p /var/log/ONAP
-RUN addgroup -S onap \
-    && adduser -S pm-mapper -G onap \
-    && chown -R pm-mapper:onap /opt/app/pm-mapper \
-    && chmod a+rwx /var/log/ONAP
 
-ADD target/${JAR} /opt/app/pm-mapper/pm-mapper.jar
-ADD target/classes/mapping.ftl /opt/app/pm-mapper/etc/mapping.ftl
-ADD target/classes/measCollec_plusString.xsd /opt/app/pm-mapper/etc/measCollec_plusString.xsd
-ADD target/classes/reconfigure.sh /opt/app/pm-mapper/etc/reconfigure.sh
+RUN adduser pm-mapper; \
+    chmod a+rwx /var/log/ONAP; \
+    chown -R pm-mapper /opt/app/pm-mapper
 
 USER pm-mapper
+
+COPY ${project.build.directory}/${ext.dep.dir.path}/ ${ext.dep.dir.path}/
+COPY ${project.build.directory}/${JAR} .
+
+COPY ${project.build.directory}/classes/mapping.ftl ./etc/mapping.ftl
+COPY ${project.build.directory}/classes/measCollec_plusString.xsd ./etc/measCollec_plusString.xsd
+COPY ${project.build.directory}/classes/reconfigure.sh ./etc/reconfigure.sh
+COPY --chown=pm-mapper ${project.build.directory}/classes/logback.xml ./etc/logback.xml
+
+
+LABEL git.branch="${git.branch}" \
+      git.build.host="${git.build.host}" \
+      git.build.time="${git.build.time}" \
+      git.build.user.email="${git.build.user.email}" \
+      git.build.user.name="${git.build.user.name}" \
+      git.build.version="${git.build.version}" \
+      git.closest.tag.name="${git.closest.tag.name}" \
+      git.commit.id="${git.commit.id}" \
+      git.commit.message.short="${git.commit.message.short}" \
+      git.commit.time="${git.commit.time}" \
+      git.commit.user.email="${git.commit.user.email}" \
+      git.commit.user.name="${git.commit.user.name}"
+
+
+ENTRYPOINT ["/bin/sh", "-c", "nohup sh etc/reconfigure.sh & /usr/bin/java -jar ${project.artifactId}-${project.version}.jar"]
+ARG JAR
index 0701442..94d2151 100644 (file)
@@ -1,46 +1,65 @@
-<configuration>\r
-    <property name="outputFilename" value="pm-mapper_output"/>\r
-    <property name="logPath" value="/var/log/ONAP/dcaegen2/services/pm-mapper"/>\r
-    <property name="archivePath" value="${logPath}/archive"/>\r
-    <property name="maxFileSize" value="50MB"/>\r
-    <property name="maxHistory" value="30"/>\r
-    <property name="totalSizeCap" value="10GB"/>\r
-    <property name="p_tim" value="%d{&quot;yyyy-MM-dd'T'HH:mm:ss.SSSXXX&quot;, UTC}"/>\r
-    <property name="p_lvl" value="%level"/>\r
-    <property name="p_log" value="%logger"/>\r
-    <property name="p_mdc" value="%replace(%replace(%mdc){'\t','\\\\t'}){'\n', '\\\\n'}"/>\r
-    <property name="p_msg" value="%replace(%replace(%msg){'\t', '\\\\t'}){'\n','\\\\n'}"/>\r
-    <property name="p_exc" value="%replace(%replace(%rootException){'\t', '\\\\t'}){'\n','\\\\n'}"/>\r
-    <property name="p_mak" value="%replace(%replace(%marker){'\t', '\\\\t'}){'\n','\\\\n'}"/>\r
-    <property name="p_thr" value="%thread"/>\r
-    <property name="pattern" value="%nopexception${p_tim}\t${p_thr}\t${p_lvl}\t${p_log}\t${p_mdc}\t${p_msg}\t${p_exc}\t${p_mak}\t%n"/>\r
-\r
-    <variable name="logLevel" value="${LOG_LEVEL:-DEBUG}"/>\r
-\r
-    <logger name="org.mockserver" level="${mockserver.logLevel:-OFF}"/>\r
-\r
-    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">\r
-        <encoder>\r
-            <pattern>${pattern}</pattern>\r
-        </encoder>\r
-    </appender>\r
-\r
-    <appender name="ROLLING-FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">\r
-        <file>${logPath}/${outputFilename}.log</file>\r
-        <encoder>\r
-            <pattern>${pattern}</pattern>\r
-        </encoder>\r
-        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">\r
-        <FileNamePattern>${archivePath}/${outputFilename}.%d{yyyy-MM-dd}.%i.log.zip</FileNamePattern>\r
-        <MaxFileSize>${maxFileSize}</MaxFileSize>\r
-        <MaxHistory>${maxHistory}</MaxHistory>\r
-        <TotalSizeCap>${totalSizeCap}</TotalSizeCap>\r
-      </rollingPolicy>\r
-    </appender>\r
-\r
-    <root level="${logLevel}" additivity="false">\r
-        <appender-ref ref="CONSOLE" />\r
-        <appender-ref ref="ROLLING-FILE" />\r
-    </root>\r
-\r
-</configuration>
\ No newline at end of file
+<configuration scan="true" scanPeriod="30 seconds" debug="true">
+    <property name="outputFilename" value="pm-mapper_output"/>
+    <property name="outputFilenameReadable" value="pm-mapper_output_readable"/>
+    <property name="logPath" value="/var/log/ONAP/dcaegen2/services/pm-mapper"/>
+    <property name="archivePath" value="${logPath}/archive"/>
+    <property name="maxFileSize" value="50MB"/>
+    <property name="maxHistory" value="30"/>
+    <property name="totalSizeCap" value="10GB"/>
+    <property name="p_tim" value="%d{&quot;yyyy-MM-dd'T'HH:mm:ss.SSSXXX&quot;, UTC}"/>
+    <property name="p_lvl" value="%level"/>
+    <property name="p_log" value="%logger"/>
+    <property name="p_mdc" value="%replace(%replace(%mdc){'\t','\\\\t'}){'\n', '\\\\n'}"/>
+    <property name="p_msg" value="%replace(%replace(%msg){'\t', '\\\\t'}){'\n','\\\\n'}"/>
+    <property name="p_exc" value="%replace(%replace(%rootException){'\t', '\\\\t'}){'\n','\\\\n'}"/>
+    <property name="p_mak" value="%replace(%replace(%marker){'\t', '\\\\t'}){'\n','\\\\n'}"/>
+    <property name="p_thr" value="%thread"/>
+    <property name="pattern" value="%nopexception${p_tim}\t${p_thr}\t${p_lvl}\t${p_log}\t${p_mdc}\t${p_msg}\t${p_exc}\t${p_mak}\t%n"/>
+    <property name="patternReadable" value="%nopexception${p_tim} | ${p_lvl} | ${p_msg}%n"/>
+
+
+    <variable name="logLevel" value="${LOG_LEVEL:-INFO}"/>
+
+    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder>
+            <pattern>${pattern}</pattern>
+        </encoder>
+    </appender>
+
+    <appender name="ROLLING-FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <file>${logPath}/${outputFilename}.log</file>
+        <encoder>
+            <pattern>${pattern}</pattern>
+        </encoder>
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+        <FileNamePattern>${logPath}/${outputFilename}.%d{yyyy-MM-dd}.%i.log.zip</FileNamePattern>
+        <MaxFileSize>${maxFileSize}</MaxFileSize>
+        <MaxHistory>${maxHistory}</MaxHistory>
+        <TotalSizeCap>${totalSizeCap}</TotalSizeCap>
+      </rollingPolicy>
+    </appender>
+
+    <appender name="READABLE-FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <file>${logPath}/${outputFilenameReadable}.log</file>
+        <encoder>
+            <pattern>${patternReadable}</pattern>
+        </encoder>
+
+        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
+            <fileNamePattern>${logPath}/${outputFilenameReadable}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
+            <minIndex>1</minIndex>
+            <maxIndex>1</maxIndex>
+        </rollingPolicy>
+
+        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
+            <maxFileSize>${maxFileSize}</maxFileSize>
+        </triggeringPolicy>
+    </appender>
+
+    <root level="${logLevel}" additivity="false">
+        <appender-ref ref="CONSOLE" />
+        <appender-ref ref="ROLLING-FILE" />
+        <appender-ref ref="READABLE-FILE" />
+    </root>
+
+</configuration>
index b2fcf61..914ccdc 100644 (file)
@@ -1,6 +1,6 @@
 major=1
 minor=1
-patch=2
+patch=3
 base_version=${major}.${minor}.${patch}
 release_version=${base_version}
 snapshot_version=${base_version}-SNAPSHOT
\ No newline at end of file