flume-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From hshreedha...@apache.org
Subject svn commit: r1355259 - in /incubator/flume/trunk: bin/ flume-ng-core/ flume-ng-core/scripts/ flume-ng-core/src/main/java/org/apache/flume/ flume-ng-core/src/main/java/org/apache/flume/tools/ flume-ng-core/src/test/java/org/apache/flume/tools/
Date Fri, 29 Jun 2012 08:10:04 GMT
Author: hshreedharan
Date: Fri Jun 29 08:10:02 2012
New Revision: 1355259

URL: http://svn.apache.org/viewvc?rev=1355259&view=rev
Log:
FLUME-1240. Add version info to Flume NG.

(Leslin (Hong Xiang Lin) via Hari Shreedharan)


Added:
    incubator/flume/trunk/flume-ng-core/scripts/
    incubator/flume/trunk/flume-ng-core/scripts/saveVersion.sh   (with props)
    incubator/flume/trunk/flume-ng-core/src/main/java/org/apache/flume/VersionAnnotation.java
  (with props)
    incubator/flume/trunk/flume-ng-core/src/main/java/org/apache/flume/tools/VersionInfo.java
  (with props)
    incubator/flume/trunk/flume-ng-core/src/test/java/org/apache/flume/tools/TestVersionInfo.java
  (with props)
Modified:
    incubator/flume/trunk/bin/flume-ng
    incubator/flume/trunk/flume-ng-core/pom.xml

Modified: incubator/flume/trunk/bin/flume-ng
URL: http://svn.apache.org/viewvc/incubator/flume/trunk/bin/flume-ng?rev=1355259&r1=1355258&r2=1355259&view=diff
==============================================================================
--- incubator/flume/trunk/bin/flume-ng (original)
+++ incubator/flume/trunk/bin/flume-ng Fri Jun 29 08:10:02 2012
@@ -25,21 +25,25 @@
 
 FLUME_AGENT_CLASS="org.apache.flume.node.Application"
 FLUME_AVRO_CLIENT_CLASS="org.apache.flume.client.avro.AvroCLIClient"
+FLUME_VERSION_CLASS="org.apache.flume.tools.VersionInfo"
 
+CLEAN_FLAG=1
 ################################
 # functions
 ################################
 
 info() {
-  local msg=$1
-
-  echo "Info: $msg" >&2
+  if [ ${CLEAN_FLAG} -ne 0 ]; then
+    local msg=$1
+    echo "Info: $msg" >&2
+  fi
 }
 
 warn() {
-  local msg=$1
-
-  echo "Warning: $msg" >&2
+  if [ ${CLEAN_FLAG} -ne 0 ]; then
+    local msg=$1
+    echo "Warning: $msg" >&2
+  fi
 }
 
 error() {
@@ -164,6 +168,7 @@ commands:
   help                  display this help text
   agent                 run a Flume agent
   avro-client           run an avro Flume client
+  version               show Flume version info
 
 global options:
   --conf,-c <conf>      use configs in <conf> directory
@@ -199,7 +204,9 @@ run_flume() {
     error "Must specify flume application class" 1
   fi
 
-  set -x
+  if [ ${CLEAN_FLAG} -ne 0 ]; then
+    set -x
+  fi
   $EXEC $JAVA_HOME/bin/java $JAVA_OPTS -cp "$FLUME_CLASSPATH" \
       -Djava.library.path=$FLUME_JAVA_LIBRARY_PATH "$FLUME_APPLICATION_CLASS" $*
 }
@@ -236,6 +243,10 @@ case "$mode" in
   avro-client)
     opt_avro_client=1
     ;;
+  version)
+   opt_version=1
+   CLEAN_FLAG=0
+   ;;
   *)
     error "Unknown or unspecified command '$mode'"
     echo
@@ -348,6 +359,8 @@ if [ -n "$opt_agent" ] ; then
   run_flume $FLUME_AGENT_CLASS $args
 elif [ -n "$opt_avro_client" ] ; then
   run_flume $FLUME_AVRO_CLIENT_CLASS $args
+elif [ -n "${opt_version}" ] ; then
+  run_flume $FLUME_VERSION_CLASS $args
 else
   error "This message should never appear" 1
 fi

Modified: incubator/flume/trunk/flume-ng-core/pom.xml
URL: http://svn.apache.org/viewvc/incubator/flume/trunk/flume-ng-core/pom.xml?rev=1355259&r1=1355258&r2=1355259&view=diff
==============================================================================
--- incubator/flume/trunk/flume-ng-core/pom.xml (original)
+++ incubator/flume/trunk/flume-ng-core/pom.xml Fri Jun 29 08:10:02 2012
@@ -37,6 +37,48 @@ limitations under the License.
         <artifactId>apache-rat-plugin</artifactId>
       </plugin>
 
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>exec-maven-plugin</artifactId>
+        <version>1.2.1</version>
+        <executions>
+          <execution>
+            <id>generate-version</id>
+            <phase>generate-sources</phase>
+            <configuration>
+              <executable>scripts/saveVersion.sh</executable>
+              <arguments>
+                <argument>${project.version}</argument>
+                <argument>${project.build.directory}</argument>
+              </arguments>
+            </configuration>
+            <goals>
+              <goal>exec</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>build-helper-maven-plugin</artifactId>
+        <version>1.7</version>
+        <executions>
+          <execution>
+            <id>add-source</id>
+            <phase>generate-sources</phase>
+            <goals>
+              <goal>add-source</goal>
+            </goals>
+            <configuration>
+              <sources>
+                <source>target/generated-sources/java</source>
+              </sources>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+
     </plugins>
   </build>
 

Added: incubator/flume/trunk/flume-ng-core/scripts/saveVersion.sh
URL: http://svn.apache.org/viewvc/incubator/flume/trunk/flume-ng-core/scripts/saveVersion.sh?rev=1355259&view=auto
==============================================================================
--- incubator/flume/trunk/flume-ng-core/scripts/saveVersion.sh (added)
+++ incubator/flume/trunk/flume-ng-core/scripts/saveVersion.sh Fri Jun 29 08:10:02 2012
@@ -0,0 +1,69 @@
+#!/bin/sh
+
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you 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.
+
+# This script is used to generate the annotation of package info that
+# records the version, revision, branch, url, user and timestamp.
+
+unset LANG
+unset LC_CTYPE
+unset LC_TIME
+version=$1
+buildDirectory=$2
+user=`whoami`
+date=`date`
+dir=`pwd`
+cwd=`dirname $dir`
+if [ -d ../.svn ]; then
+  revision=`svn info ../ | sed -n -e 's/Last Changed Rev: \(.*\)/\1/p'`
+  url=`svn info  ../ | sed -n -e 's/URL: \(.*\)/\1/p'`
+  branch=`echo $url | sed -n -e 's,.*\(branches/.*\)$,\1,p' \
+                             -e 's,.*\(tags/.*\)$,\1,p' \
+                             -e 's,.*trunk$,trunk,p'`
+elif git rev-parse HEAD 2>/dev/null > /dev/null ; then
+  revision=`git log -1 --pretty=format:"%H"`
+  hostname=`hostname`
+  branch=`git branch | sed -n -e 's/^* //p'`
+  url="git://${hostname}${cwd}"
+else
+  revision="Unknown"
+  branch="Unknown"
+  url="file://$cwd"
+fi
+
+if [ -n "$(which md5sum)" ]; then
+  srcChecksum=`find ../ -name '*.java' | grep -v generated-sources | LC_ALL=C sort | \
+      xargs md5sum | md5sum | cut -d ' ' -f 1`
+else
+  srcChecksum=`find ../ -name '*.java' | grep -v generated-sources | LC_ALL=C sort | \
+      xargs md5 | md5 | cut -d ' ' -f 1`
+fi
+
+mkdir -p $buildDirectory/generated-sources/java/org/apache/flume/
+cat << EOF | \
+  sed -e "s/VERSION/$version/" -e "s/USER/$user/" -e "s/DATE/$date/" \
+      -e "s|URL|$url|" -e "s/REV/$revision/" \
+      -e "s|BRANCH|$branch|" -e "s/SRCCHECKSUM/$srcChecksum/" \
+      > $buildDirectory/generated-sources/java/org/apache/flume/package-info.java
+/*
+ * Generated by scripts/saveVersion.sh
+ */
+@VersionAnnotation(version="VERSION", revision="REV", branch="BRANCH",
+                         user="USER", date="DATE", url="URL",
+                         srcChecksum="SRCCHECKSUM")
+package org.apache.flume;
+EOF
\ No newline at end of file

Propchange: incubator/flume/trunk/flume-ng-core/scripts/saveVersion.sh
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/flume/trunk/flume-ng-core/scripts/saveVersion.sh
------------------------------------------------------------------------------
    svn:executable = *

Added: incubator/flume/trunk/flume-ng-core/src/main/java/org/apache/flume/VersionAnnotation.java
URL: http://svn.apache.org/viewvc/incubator/flume/trunk/flume-ng-core/src/main/java/org/apache/flume/VersionAnnotation.java?rev=1355259&view=auto
==============================================================================
--- incubator/flume/trunk/flume-ng-core/src/main/java/org/apache/flume/VersionAnnotation.java
(added)
+++ incubator/flume/trunk/flume-ng-core/src/main/java/org/apache/flume/VersionAnnotation.java
Fri Jun 29 08:10:02 2012
@@ -0,0 +1,76 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+package org.apache.flume;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+
+/**
+ * This class is about package attribute that captures
+ * version info of Flume that was compiled.
+ */
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.PACKAGE)
+public @interface VersionAnnotation {
+
+  /**
+   * Get the Flume version
+   * @return the version string "1.1"
+   */
+  String version();
+
+  /**
+   * Get the subversion revision.
+   * @return the revision number as a string (eg. "100755")
+   */
+  String revision();
+
+  /**
+   * Get the branch from which this was compiled.
+   * @return The branch name, e.g. "trunk"
+   */
+  String branch();
+
+  /**
+   * Get the username that compiled Flume.
+   */
+  String user();
+
+  /**
+   * Get the date when Flume was compiled.
+   * @return the date in unix 'date' format
+   */
+  String date();
+
+  /**
+   * Get the url for the subversion repository.
+   */
+  String url();
+
+  /**
+   * Get a checksum of the source files from which
+   * Flume was compiled.
+   * @return a string that uniquely identifies the source
+   **/
+  String srcChecksum();
+
+}

Propchange: incubator/flume/trunk/flume-ng-core/src/main/java/org/apache/flume/VersionAnnotation.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/flume/trunk/flume-ng-core/src/main/java/org/apache/flume/tools/VersionInfo.java
URL: http://svn.apache.org/viewvc/incubator/flume/trunk/flume-ng-core/src/main/java/org/apache/flume/tools/VersionInfo.java?rev=1355259&view=auto
==============================================================================
--- incubator/flume/trunk/flume-ng-core/src/main/java/org/apache/flume/tools/VersionInfo.java
(added)
+++ incubator/flume/trunk/flume-ng-core/src/main/java/org/apache/flume/tools/VersionInfo.java
Fri Jun 29 08:10:02 2012
@@ -0,0 +1,122 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+package org.apache.flume.tools;
+
+import org.apache.flume.VersionAnnotation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/*
+ * This class provides version info of Flume NG
+ */
+
+public class VersionInfo {
+  private static final Logger LOG = LoggerFactory.getLogger(VersionInfo.class);
+
+  private static Package myPackage;
+  private static VersionAnnotation version;
+
+  static {
+    myPackage = VersionAnnotation.class.getPackage();
+    version = myPackage.getAnnotation(VersionAnnotation.class);
+  }
+
+  /**
+   * Get the meta-data for the Flume package.
+   * @return
+   */
+  static Package getPackage() {
+    return myPackage;
+  }
+
+  /**
+   * Get the Flume version.
+   * @return the Flume version string, eg. "1.1"
+   */
+  public static String getVersion() {
+    return version != null ? version.version() : "Unknown";
+  }
+
+  /**
+   * Get the subversion revision number for the root directory
+   * @return the revision number, eg. "100755"
+   */
+  public static String getRevision() {
+    return version != null ? version.revision() : "Unknown";
+  }
+
+  /**
+   * Get the branch on which this originated.
+   * @return The branch name, e.g. "trunk" or "branches/branch-1.1"
+   */
+  public static String getBranch() {
+    return version != null ? version.branch() : "Unknown";
+  }
+
+  /**
+   * The date that Flume was compiled.
+   * @return the compilation date in unix date format
+   */
+  public static String getDate() {
+    return version != null ? version.date() : "Unknown";
+  }
+
+  /**
+   * The user that compiled Flume.
+   * @return the username of the user
+   */
+  public static String getUser() {
+    return version != null ? version.user() : "Unknown";
+  }
+
+  /**
+   * Get the subversion URL for the root Flume directory.
+   */
+  public static String getUrl() {
+    return version != null ? version.url() : "Unknown";
+  }
+
+  /**
+   * Get the checksum of the source files from which Flume was
+   * built.
+   **/
+  public static String getSrcChecksum() {
+    return version != null ? version.srcChecksum() : "Unknown";
+  }
+
+  /**
+   * Returns the build version info which includes version,
+   * revision, user, date and source checksum
+   */
+  public static String getBuildVersion(){
+    return VersionInfo.getVersion() +
+    " from " + VersionInfo.getRevision() +
+    " by " + VersionInfo.getUser() +
+    " on " + VersionInfo.getDate() +
+    " source checksum " + VersionInfo.getSrcChecksum();
+  }
+
+  public static void main(String[] args) {
+    LOG.debug("version: "+ version);
+    System.out.println("Flume " + getVersion());
+    System.out.println("Subversion " + getUrl() + " -r " + getRevision());
+    System.out.println("Compiled by " + getUser() + " on " + getDate());
+    System.out.println("From source with checksum " + getSrcChecksum());
+  }
+
+}

Propchange: incubator/flume/trunk/flume-ng-core/src/main/java/org/apache/flume/tools/VersionInfo.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/flume/trunk/flume-ng-core/src/test/java/org/apache/flume/tools/TestVersionInfo.java
URL: http://svn.apache.org/viewvc/incubator/flume/trunk/flume-ng-core/src/test/java/org/apache/flume/tools/TestVersionInfo.java?rev=1355259&view=auto
==============================================================================
--- incubator/flume/trunk/flume-ng-core/src/test/java/org/apache/flume/tools/TestVersionInfo.java
(added)
+++ incubator/flume/trunk/flume-ng-core/src/test/java/org/apache/flume/tools/TestVersionInfo.java
Fri Jun 29 08:10:02 2012
@@ -0,0 +1,63 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+
+package org.apache.flume.tools;
+
+import static org.junit.Assert.*;
+
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TestVersionInfo {
+
+  private static final Logger logger = LoggerFactory
+      .getLogger(TestVersionInfo.class);
+
+  /**
+   *  Make sure that Unknown is expected when no version info
+   */
+  @Test
+  public void testVersionInfoUnknown() {
+
+    logger.debug("Flume " + VersionInfo.getVersion());
+    logger.debug("Subversion " + VersionInfo.getUrl() + " -r " + VersionInfo.getRevision());
+    logger.debug("Compiled by " + VersionInfo.getUser() + " on " + VersionInfo.getDate());
+    logger.debug("From source with checksum " + VersionInfo.getSrcChecksum());
+    logger.debug("Flume " + VersionInfo.getBuildVersion());
+
+    assertTrue("getVersion returned Unknown",
+        !VersionInfo.getVersion().equals("Unknown"));
+    assertTrue("getUser returned Unknown",
+        !VersionInfo.getUser().equals("Unknown"));
+    assertTrue("getUrl returned Unknown",
+        !VersionInfo.getUrl().equals("Unknown"));
+    assertTrue("getSrcChecksum returned Unknown",
+        !VersionInfo.getSrcChecksum().equals("Unknown"));
+
+    // check getBuildVersion() return format
+    assertTrue("getBuildVersion returned unexpected format",VersionInfo.
+        getBuildVersion().matches(".+from.+by.+on.+source checksum.+"));
+
+    //"Unknown" when build without svn or git
+    assertNotNull("getRevision returned null", VersionInfo.getRevision());
+    assertNotNull("getBranch returned null", VersionInfo.getBranch());
+
+  }
+
+}

Propchange: incubator/flume/trunk/flume-ng-core/src/test/java/org/apache/flume/tools/TestVersionInfo.java
------------------------------------------------------------------------------
    svn:eol-style = native



Mime
View raw message