aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Klozik <martinx.klozik@intel.com>2015-10-15 07:44:08 +0100
committerMaryam Tahhan <maryam.tahhan@intel.com>2016-01-04 10:02:03 +0000
commitf41dd29a18007b80fcdaab6c2367a0b38c3d9e67 (patch)
tree548a34a0fee0b226061cf2487e1c62341e1834ea
parenta2f5c695f66fce2054cc3eea511f3e8d7c8040ee (diff)
Code checker
Initial implementation of code checker script. It uses pylint with vsperf specific pylintrc file to check code syntax, design, etc. Check can be performed for all files, specified directories or for modified files only. It will skip files defined by EXCLUDE_MODULES in conf/00_common.conf file. Details about script usage can be obtained by ./check -h. Change-Id: I7d894a2c4db92b7b9d4d4312e6f56bc48c8d5dbf JIRA: VSPERF-114 Signed-off-by: Martin Klozik <martinx.klozik@intel.com> Reviewed-by: Billy O Mahony <billy.o.mahony@intel.com> Reviewed-by: Maryam Tahhan <maryam.tahhan@intel.com>
-rwxr-xr-xcheck143
1 files changed, 143 insertions, 0 deletions
diff --git a/check b/check
new file mode 100755
index 00000000..f7fca3da
--- /dev/null
+++ b/check
@@ -0,0 +1,143 @@
+#!/bin/bash
+
+# Copyright 2015 Intel Corporation.
+#
+# 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.
+
+# VSPERF code checker
+
+PYLINT="pylint"
+PYLINT_RC='pylintrc'
+PYLINT_RATING_GATE="10"
+FILE_REGEX="(vsperf|.*\.py)"
+FIND_OPTIONS="-regextype posix-egrep -iregex (./)?$FILE_REGEX"
+FILE_LIST="/tmp/vsperf_check_list.txt"
+
+# print usage if requested
+function usage() {
+ cat <<EOM
+Usage: $0 [TARGET]...
+
+Performs code check for defined TARGETs. Target can be file or directory.
+In case that directory is specified, then it will be searched recursively
+for all python files.
+If TARGET is not specified, then all python files from current VSPERF
+repository will be checked.
+Files listed in EXCLUDE_MODULES defined in conf/00_common.conf will be skipped.
+File will pass check if its pylint rating is greater or equal to $PYLINT_RATING_GATE.
+Otherwise gained pylint rating will be displayed.
+
+
+ -h, --help Script usage
+ -m, --modified Script will check python files, which have
+ been modified within current repository.
+Examples:
+ ./check
+
+ Check all python files in current VSPERF repository except EXCLUDE_MODULES
+
+ ./check vsperf
+
+ Check just one file.
+
+ ./check -m
+
+ Check all modified files in current VSPERF repository
+
+ ./check vnfs/qemu core tools/pkt_gen
+
+ Check all python files in given directories
+
+EOM
+}
+
+# compare pylint result with predefined gate
+function rating_is_ok() {
+ # bc is not part of basic Centos installation
+ # so let us do integer comparison only
+ int_rating=`echo $1 | sed -e 's/\..*$//'`
+ [ $int_rating -ge $PYLINT_RATING_GATE ]
+}
+
+##### MAIN #####
+# check if help is requested
+if [ "x$1" == "x-h" -o "x$1" == "x--help" ] ; then
+ usage
+ exit 0
+fi
+
+# check if pylint is available
+if ! which $PYLINT &>/dev/null ; then
+ echo "$PYLINT is not available, thus check can't be executed"
+ exit 1
+fi
+
+# check if we were run within vsperf directory
+if [ ! -x ./vsperf 2> /dev/null ] ; then
+ echo "`basename $0` must be run from vsperf root directory"
+ exit 2
+fi
+
+# get list of excluded modules
+EXCLUDED_MODULES=`grep "^ *EXCLUDE_MODULES" conf/00_common.conf | tr '"' "'"`
+
+# get list of files to be checked
+rm $FILE_LIST &> /dev/null
+if [ "x$1" == "x-m" -o "x$1" == "x--modified" ] ; then
+ # check of modified files requested
+ git status --porcelain | cut -b4- | egrep -i "^${FILE_REGEX}$" > $FILE_LIST
+elif [ "x$*" == "x" ] ; then
+ # list is empty, check all python files
+ find . -type f $FIND_OPTIONS > $FILE_LIST
+else
+ for item in $* ; do
+ if [ -d $item ] ; then
+ find $item -type f $FIND_OPTIONS >> $FILE_LIST
+ elif [ -f $item ] ; then
+ echo $item >> $FILE_LIST
+ else
+ echo "$item doesn't exist, thus check was aborted"
+ exit 3
+ fi
+ done
+fi
+
+# check if there is anything to check
+if [ -s $FILE_LIST ] ; then
+ for pyfile in `cat $FILE_LIST | sort` ; do
+ # get base name
+ pyfile_basename="'"`basename $pyfile .py`"'"
+ # and check if it should be excluded or not
+ if ( echo $EXCLUDED_MODULES | grep -w $pyfile_basename > /dev/null ) ; then
+ printf "%-70s \e[32m%-6s\e[0m\n" $pyfile "EXCLUDED"
+ continue
+ fi
+ # run pylint and extract final rating
+ rating=`$PYLINT --rcfile $PYLINT_RC $pyfile 2>/dev/null | tail -n3 | grep rated | sed -e 's/^.*rated at \([0-9.]*\).*$/\1/'`
+ # evaluate and display aquired rating
+ if rating_is_ok $rating ; then
+ printf "%-70s \e[32m%-6s\e[0m\n" $pyfile "OK"
+ else
+ printf "%-70s \e[31m%-6s\e[0m\n" $pyfile $rating
+ fi
+ done
+else
+ echo "Nothing to check."
+ exit 4
+fi
+
+# clean up
+rm $FILE_LIST &> /dev/null
+
+exit 0
+##### MAIN end #####