KYLIN-1614 Diagnosis CLI
Project: http://git-wip-us.apache.org/repos/asf/kylin/repo Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/eac98036 Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/eac98036 Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/eac98036 Branch: refs/heads/1.5.x-HBase1.x Commit: eac98036ddf228daaa71bd41f00179fa493f2759 Parents: f17ba5c Author: lidongsjtu <lid...@apache.org> Authored: Fri May 6 12:23:59 2016 +0800 Committer: lidongsjtu <lid...@apache.org> Committed: Fri May 6 17:09:31 2016 +0800 ---------------------------------------------------------------------- build/deploy/diag.sh | 68 ++++++++++++++ build/script/package_diag.sh | 97 ++++++++++++++++++++ tool/pom.xml | 2 +- .../apache/kylin/tool/KylinLogExtractor.java | 13 ++- 4 files changed, 175 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/kylin/blob/eac98036/build/deploy/diag.sh ---------------------------------------------------------------------- diff --git a/build/deploy/diag.sh b/build/deploy/diag.sh new file mode 100644 index 0000000..1deeded --- /dev/null +++ b/build/deploy/diag.sh @@ -0,0 +1,68 @@ +#!/bin/bash + +# +# 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. +# + +dir=$(dirname ${0}) + +# We should set KYLIN_HOME here for multiple tomcat instances that are on the same node. +# In addition, we should set a KYLIN_HOME for the global use as normal. +export KYLIN_HOME=${dir}/../ +source ${dir}/check-env.sh + +if [ $# -gt 1 ] +then + patient="$1" + if [ -z "$patient" ] + then + echo "You need to specify a Project or Job Id for diagnosis." + exit 1 + fi + destDir="$2" + if [ -z "$destDir" ] + then + destDir="$KYLIN_HOME/diagnosis_dump/" + mkdir -p $destDir + fi + + #retrive $hive_dependency and $hbase_dependency + source ${dir}/find-hive-dependency.sh + source ${dir}/find-hbase-dependency.sh + + #retrive $KYLIN_EXTRA_START_OPTS + if [ -f "${dir}/setenv-tool.sh" ] + then source ${dir}/setenv-tool.sh + fi + export HBASE_CLASSPATH=$hive_dependency:${HBASE_CLASSPATH} + + if [ -f "${KYLIN_HOME}/lib/kylin-diagnosis-*.jar" ]; then + export HBASE_CLASSPATH=$HBASE_CLASSPATH:${KYLIN_HOME}/lib/kylin-diagnosis-*.jar + else + export HBASE_CLASSPATH=$HBASE_CLASSPATH:${KYLIN_HOME}/lib/* + fi + + if [ ${#patient} -gt 31 ]; then + exec hbase ${KYLIN_EXTRA_START_OPTS} -Dlog4j.configuration=kylin-log4j.properties org.apache.kylin.tool.JobDiagnosisInfoCLI -jobId $patient -destDir $destDir + else + exec hbase ${KYLIN_EXTRA_START_OPTS} -Dlog4j.configuration=kylin-log4j.properties org.apache.kylin.tool.DiagnosisInfoCLI -project $patient -destDir $destDir + fi + + exit 0 +else + echo "usage: diag.sh Project|JobId [target_path]" + exit 1 +fi http://git-wip-us.apache.org/repos/asf/kylin/blob/eac98036/build/script/package_diag.sh ---------------------------------------------------------------------- diff --git a/build/script/package_diag.sh b/build/script/package_diag.sh new file mode 100755 index 0000000..413bca8 --- /dev/null +++ b/build/script/package_diag.sh @@ -0,0 +1,97 @@ +#!/bin/bash + +# +# 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. +# + +echo "Checking maven..." + +if [ -z "$(command -v mvn)" ] +then + echo "Please install maven first so that Kylin packaging can proceed" + exit 1 +else + echo "maven check passed" +fi + +echo "Checking git..." + +if [ -z "$(command -v git)" ] +then + echo "Please install git first so that Kylin packaging can proceed" + exit 1 +else + echo "git check passed" +fi + +dir=$(dirname ${0}) +cd ${dir}/../.. +version=`mvn org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate -Dexpression=project.version | grep -v '\['` + +if [ "$version" == "" ];then + echo "Failed to identify kylin version (current: `pwd`)" + exit 1 +fi + +echo "kylin version: ${version}" +export version + +#commit id +cat << EOF > build/commit_SHA1 +# 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. +# +EOF +git rev-parse HEAD >> build/commit_SHA1 + +echo "package libraries" +mvn clean install -DskipTests || { exit 1; } + +echo "copy libraries" +rm -rf build/lib +mkdir build/lib +cp tool/target/kylin-tool-${version}-assembly.jar build/lib/kylin-diagnosis-${version}.jar +# Copied file becomes 000 for some env (e.g. my Cygwin) +chmod 644 build/lib/kylin-diagnosis-${version}.jar + +echo 'package tar.gz' +package_name=apache-kylin-${version}-diag +cd build/ +rm -rf ${package_name} +mkdir ${package_name} +cp -r lib ${package_name} +cp deploy/diag.sh ${package_name} +rm -rf lib +find ${package_name} -type d -exec chmod 755 {} \; +find ${package_name} -type f -exec chmod 644 {} \; +find ${package_name} -type f -name "*.sh" -exec chmod 755 {} \; +mkdir -p ../dist +tar -cvzf ../dist/${package_name}.tar.gz ${package_name} +rm -rf ${package_name} + +echo "Library package ready: dist/${package_name}.tar.gz" \ No newline at end of file http://git-wip-us.apache.org/repos/asf/kylin/blob/eac98036/tool/pom.xml ---------------------------------------------------------------------- diff --git a/tool/pom.xml b/tool/pom.xml index 7fc08f4..3f077de 100644 --- a/tool/pom.xml +++ b/tool/pom.xml @@ -74,7 +74,7 @@ <configuration> <minimizeJar>false</minimizeJar> <shadedArtifactAttached>true</shadedArtifactAttached> - <shadedClassifierName>tool</shadedClassifierName> + <shadedClassifierName>assembly</shadedClassifierName> <artifactSet> <excludes> <exclude>io.netty:*</exclude> http://git-wip-us.apache.org/repos/asf/kylin/blob/eac98036/tool/src/main/java/org/apache/kylin/tool/KylinLogExtractor.java ---------------------------------------------------------------------- diff --git a/tool/src/main/java/org/apache/kylin/tool/KylinLogExtractor.java b/tool/src/main/java/org/apache/kylin/tool/KylinLogExtractor.java index 5351c92..d71e6c6 100644 --- a/tool/src/main/java/org/apache/kylin/tool/KylinLogExtractor.java +++ b/tool/src/main/java/org/apache/kylin/tool/KylinLogExtractor.java @@ -59,16 +59,21 @@ public class KylinLogExtractor extends AbstractInfoExtractor { logger.info("Start to extract kylin logs in {} days", logPeriod); final File kylinLogDir = new File(KylinConfig.getKylinHome(), "logs"); - final ArrayList<File> logFiles = Lists.newArrayList(); + final ArrayList<File> requiredLogFiles = Lists.newArrayList(); final long logThresholdTime = System.currentTimeMillis() - logPeriod * 24 * 3600 * 1000; - for (File logFile : kylinLogDir.listFiles()) { + final File[] allLogFiles = kylinLogDir.listFiles(); + if (allLogFiles == null || allLogFiles.length == 0) { + return; + } + + for (File logFile : allLogFiles) { if (logFile.lastModified() > logThresholdTime) { - logFiles.add(logFile); + requiredLogFiles.add(logFile); } } - for (File logFile : logFiles) { + for (File logFile : requiredLogFiles) { logger.info("Log file:" + logFile.getAbsolutePath()); if (logFile.exists()) { FileUtils.copyFileToDirectory(logFile, exportDir);