]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-3664 Log sonar/plugins versions and sha1 at startup
authorDavid Gageot <david@gageot.net>
Mon, 16 Jul 2012 16:36:41 +0000 (18:36 +0200)
committerDavid Gageot <david@gageot.net>
Mon, 16 Jul 2012 16:36:41 +0000 (18:36 +0200)
sonar-core/src/main/java/org/sonar/core/plugins/DefaultPluginMetadata.java
sonar-core/src/main/java/org/sonar/core/plugins/PluginInstaller.java
sonar-core/src/test/java/org/sonar/core/plugins/DefaultPluginMetadataTest.java
sonar-core/src/test/java/org/sonar/core/plugins/PluginInstallerTest.java
sonar-core/src/test/resources/org/sonar/core/plugins/sonar-cobertura-plugin-3.1.1.jar [new file with mode: 0644]
sonar-server/src/main/java/org/sonar/server/platform/ServerImpl.java
sonar-server/src/main/java/org/sonar/server/plugins/PluginDeployer.java
sonar-server/src/main/resources/build.properties [new file with mode: 0644]
sonar-server/src/test/java/org/sonar/server/platform/ServerImplTest.java
sonar-server/src/test/resources/org/sonar/server/platform/ServerImplTest/build.properties [new file with mode: 0644]

index fb9498bc0f8e0721077b3ac049910ea7a405d865..6b96809a76bbd8efab1c869d34f12e4f884c4057 100644 (file)
@@ -47,6 +47,7 @@ public class DefaultPluginMetadata implements PluginMetadata, Comparable<PluginM
   private boolean useChildFirstClassLoader;
   private String basePlugin;
   private boolean core;
+  private String implementationBuild;
 
   private DefaultPluginMetadata() {
   }
@@ -239,6 +240,15 @@ public class DefaultPluginMetadata implements PluginMetadata, Comparable<PluginM
     return this;
   }
 
+  public String getImplementationBuild() {
+    return implementationBuild;
+  }
+
+  public DefaultPluginMetadata setImplementationBuild(String implementationBuild) {
+    this.implementationBuild = implementationBuild;
+    return this;
+  }
+
   public boolean isOldManifest() {
     return !hasKey() && hasMainClass();
   }
index d0289f4a82ffb8a6d0415e8a5311aa72fe6d01d0..085765a92d2e28e44d3fcad8f6a5f68e2e63fc58 100644 (file)
@@ -121,6 +121,7 @@ public class PluginInstaller {
       metadata.setPathsToInternalDeps(manifest.getDependencies());
       metadata.setUseChildFirstClassLoader(manifest.isUseChildFirstClassLoader());
       metadata.setBasePlugin(manifest.getBasePlugin());
+      metadata.setImplementationBuild(manifest.getImplementationBuild());
       metadata.setCore(isCore);
       if (metadata.isOldManifest()) {
         completeDeprecatedMetadata(metadata);
index 5ac3f1dcc0ad64a5d8d3c4bb9f708c611505267f..7d8a770e85e5ee0195002c01eadd918f7999b427 100644 (file)
@@ -44,7 +44,8 @@ public class DefaultPluginMetadataTest {
         .setVersion("1.1")
         .setSonarVersion("3.0")
         .setUseChildFirstClassLoader(true)
-        .setCore(false);
+        .setCore(false)
+        .setImplementationBuild("abcdef");
 
     assertThat(metadata.getKey()).isEqualTo("checkstyle");
     assertThat(metadata.getLicense()).isEqualTo("LGPL");
@@ -60,6 +61,7 @@ public class DefaultPluginMetadataTest {
     assertThat(metadata.getBasePlugin()).isNull();
     assertThat(metadata.getFile()).isNotNull();
     assertThat(metadata.getDeployedFiles()).isEmpty();
+    assertThat(metadata.getImplementationBuild()).isEqualTo("abcdef");
   }
 
   @Test
index e9a893c48bebe783943310980c90fe951632bd24..36d32419e3e6b1780572e3c247c39c7cf0adc854 100644 (file)
@@ -38,14 +38,15 @@ public class PluginInstallerTest {
 
   @Test
   public void shouldExtractMetadata() {
-    DefaultPluginMetadata metadata = extractor.extractMetadata(getFile("sonar-checkstyle-plugin-2.8.jar"), true);
+    DefaultPluginMetadata metadata = extractor.extractMetadata(getFile("sonar-cobertura-plugin-3.1.1.jar"), true);
 
-    assertThat(metadata.getKey()).isEqualTo("checkstyle");
+    assertThat(metadata.getKey()).isEqualTo("cobertura");
     assertThat(metadata.getBasePlugin()).isNull();
-    assertThat(metadata.getName()).isEqualTo("Checkstyle");
+    assertThat(metadata.getName()).isEqualTo("Cobertura");
     assertThat(metadata.isCore()).isEqualTo(true);
-    assertThat(metadata.getFile().getName()).isEqualTo("sonar-checkstyle-plugin-2.8.jar");
-    assertThat(metadata.getVersion()).isEqualTo("2.8");
+    assertThat(metadata.getFile().getName()).isEqualTo("sonar-cobertura-plugin-3.1.1.jar");
+    assertThat(metadata.getVersion()).isEqualTo("3.1.1");
+    assertThat(metadata.getImplementationBuild()).isEqualTo("b9283404030db9ce1529b1fadfb98331686b116d");
   }
 
   @Test
diff --git a/sonar-core/src/test/resources/org/sonar/core/plugins/sonar-cobertura-plugin-3.1.1.jar b/sonar-core/src/test/resources/org/sonar/core/plugins/sonar-cobertura-plugin-3.1.1.jar
new file mode 100644 (file)
index 0000000..6a74b55
Binary files /dev/null and b/sonar-core/src/test/resources/org/sonar/core/plugins/sonar-cobertura-plugin-3.1.1.jar differ
index dfec05e9002ab6acd56868a844aaa57c2b4defcf..fc01c7a72791af03bad32c83ad6e3a856290deef 100644 (file)
 package org.sonar.server.platform;
 
 import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Joiner;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.sonar.api.CoreProperties;
 import org.sonar.api.config.Settings;
 import org.sonar.api.platform.Server;
@@ -33,32 +36,41 @@ import java.util.Date;
 import java.util.Properties;
 
 public final class ServerImpl extends Server {
+  private static final Logger LOG = LoggerFactory.getLogger(ServerImpl.class);
 
+  private final Settings settings;
+  private final Date startedAt;
+  private final String buildProperties;
+  private final String pomProperties;
   private String id;
   private String version;
-  private final Date startedAt;
-  private Settings settings;
-  private final String manifest;
+  private String implementationBuild;
 
   public ServerImpl(Settings settings) {
-    this(settings, "/META-INF/maven/org.codehaus.sonar/sonar-plugin-api/pom.properties");
+    this(settings, "/build.properties", "/META-INF/maven/org.codehaus.sonar/sonar-plugin-api/pom.properties");
   }
 
   @VisibleForTesting
-  ServerImpl(Settings settings, String manifest) {
+  ServerImpl(Settings settings, String buildProperties, String pomProperties) {
     this.settings = settings;
     this.startedAt = new Date();
-    this.manifest = manifest;
+    this.buildProperties = buildProperties;
+    this.pomProperties = pomProperties;
   }
 
   public void start() {
     try {
       id = new SimpleDateFormat("yyyyMMddHHmmss").format(startedAt);
-      version = loadVersionFromManifest(manifest);
+
+      version = read(pomProperties).getProperty("version", "");
+      implementationBuild = read(buildProperties).getProperty("Implementation-Build");
+
       if (StringUtils.isBlank(version)) {
         throw new ServerStartException("Unknown Sonar version");
       }
 
+      LOG.info("Sonar {}", Joiner.on(" / ").skipNulls().join("Server", version, implementationBuild));
+
     } catch (IOException e) {
       throw new ServerStartException("Can not load metadata", e);
     }
@@ -79,31 +91,30 @@ public final class ServerImpl extends Server {
     return version;
   }
 
+  public String getImplementationBuild() {
+    return implementationBuild;
+  }
+
   @Override
   public Date getStartedAt() {
     return startedAt;
   }
 
-  private String loadVersionFromManifest(String pomFilename) throws IOException {
-    InputStream pomFileStream = getClass().getResourceAsStream(pomFilename);
-    try {
-      return readVersion(pomFileStream);
+  private static Properties read(String filename) throws IOException {
+    Properties properties = new Properties();
 
+    InputStream stream = null;
+    try {
+      stream = ServerImpl.class.getResourceAsStream(filename);
+      if (stream != null) {
+        properties.load(stream);
+      }
     } finally {
-      IOUtils.closeQuietly(pomFileStream);
+      IOUtils.closeQuietly(stream);
     }
-  }
 
-  protected static String readVersion(InputStream pomFileStream) throws IOException {
-    String result = null;
-    if (pomFileStream != null) {
-      Properties pomProp = new Properties();
-      pomProp.load(pomFileStream);
-      result = pomProp.getProperty("version");
-    }
-    return StringUtils.defaultIfEmpty(result, "");
+    return properties;
   }
-
   @Override
   public String getURL() {
     return null;
index 775408ca64c2bcd202bf5b221fcda94b5afc0398..6a00e387275ae5c15f636af93109479cf6d3f22c 100644 (file)
@@ -19,6 +19,8 @@
  */
 package org.sonar.server.plugins;
 
+import com.google.common.base.Joiner;
+
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
@@ -190,7 +192,7 @@ public class PluginDeployer implements ServerComponent {
   }
 
   private void deploy(DefaultPluginMetadata plugin) {
-    LOG.debug("Deploy plugin " + plugin);
+    LOG.info("Deploy plugin {}", Joiner.on(" / ").skipNulls().join(plugin.getName(), plugin.getVersion(), plugin.getImplementationBuild()));
 
     Preconditions.checkState(plugin.isCompatibleWith(server.getVersion()),
         "Plugin %s needs a more recent version of Sonar than %s. At least %s is expected",
diff --git a/sonar-server/src/main/resources/build.properties b/sonar-server/src/main/resources/build.properties
new file mode 100644 (file)
index 0000000..8c9958a
--- /dev/null
@@ -0,0 +1,2 @@
+Implementation-Build=${buildNumber}
+Build-Time=${timestamp}
\ No newline at end of file
index 51a6df8c7fbf11de3f22d246403c14d1401a1ed2..ced9e9d6925fa3f3598943570fec034f1c2672d7 100644 (file)
@@ -35,7 +35,7 @@ public class ServerImplTest {
 
   @Test
   public void alwaysReturnTheSameValues() {
-    ServerImpl server = new ServerImpl(new Settings(), "/org/sonar/server/platform/ServerImplTest/pom-with-version.properties");
+    ServerImpl server = new ServerImpl(new Settings(), "", "/org/sonar/server/platform/ServerImplTest/pom-with-version.properties");
     server.start();
 
     assertThat(server.getId()).isNotNull();
@@ -50,18 +50,28 @@ public class ServerImplTest {
 
   @Test
   public void getVersionFromFile() {
-    ServerImpl server = new ServerImpl(new Settings(), "/org/sonar/server/platform/ServerImplTest/pom-with-version.properties");
+    ServerImpl server = new ServerImpl(new Settings(), "", "/org/sonar/server/platform/ServerImplTest/pom-with-version.properties");
     server.start();
 
     assertThat(server.getVersion()).isEqualTo("1.0");
   }
 
+  @Test
+  public void getImplementationBuildFromManifest() {
+    ServerImpl server = new ServerImpl(new Settings(),
+        "/org/sonar/server/platform/ServerImplTest/build.properties",
+        "/org/sonar/server/platform/ServerImplTest/pom-with-version.properties");
+    server.start();
+
+    assertThat(server.getImplementationBuild()).isEqualTo("0b9545a8b74aca473cb776275be4dc93a327c363");
+  }
+
   @Test
   public void testFileWithNoVersion() {
     exception.expect(ServerStartException.class);
     exception.expectMessage("Unknown Sonar version");
 
-    ServerImpl server = new ServerImpl(new Settings(), "/org/sonar/server/platform/ServerImplTest/pom-without-version.properties");
+    ServerImpl server = new ServerImpl(new Settings(), "", "/org/sonar/server/platform/ServerImplTest/pom-without-version.properties");
     server.start();
   }
 
@@ -70,7 +80,7 @@ public class ServerImplTest {
     exception.expect(ServerStartException.class);
     exception.expectMessage("Unknown Sonar version");
 
-    ServerImpl server = new ServerImpl(new Settings(), "/org/sonar/server/platform/ServerImplTest/pom-with-empty-version.properties");
+    ServerImpl server = new ServerImpl(new Settings(), "", "/org/sonar/server/platform/ServerImplTest/pom-with-empty-version.properties");
     server.start();
   }
 
@@ -79,7 +89,7 @@ public class ServerImplTest {
     exception.expect(ServerStartException.class);
     exception.expectMessage("Unknown Sonar version");
 
-    ServerImpl server = new ServerImpl(new Settings(), "/org/sonar/server/platform/ServerImplTest/unknown-file.properties");
+    ServerImpl server = new ServerImpl(new Settings(), "", "/org/sonar/server/platform/ServerImplTest/unknown-file.properties");
     server.start();
   }
 
diff --git a/sonar-server/src/test/resources/org/sonar/server/platform/ServerImplTest/build.properties b/sonar-server/src/test/resources/org/sonar/server/platform/ServerImplTest/build.properties
new file mode 100644 (file)
index 0000000..230f3ae
--- /dev/null
@@ -0,0 +1,2 @@
+Implementation-Build=0b9545a8b74aca473cb776275be4dc93a327c363
+Build-Time=1342455258749
\ No newline at end of file