玖叶教程网

前端编程开发入门

gitlab代码统计绘制报表方案

一:命令行方式

获取最近提交的一次时间

git show --pretty=format:"%ci %cr" | head -1

git show --pretty=format:"%ci" | head -1|awk '{print $1}'

#2个时间比对

#!/bin/bash 

date1="2008-4-09 12:00:00"

date2="2008-4-10 15:00:00"

date3="Aug 17 16:47:53 2011"

t1=`date -d "$date1" +%s` 

t2=`date -d "$date2" +%s` 

t3= date -d "$date3" +%s  
 
if [ $t1 > $t2 ]; then

    echo "$date1 > $date2"

elif [ $t1 = $t2 ]; then

    echo "$date1 == $date2"
else [$t1 < $t3]; then
    echo  $date1 < $date3"

fi
git log // 普通查日志
git log --oneline // 简化输出
git log --pretty=oneline -3 // 指定输出行数
git shortlog // 输出汇总信息,以作者进行分类
git shortlog -s  // 统计每个作者的commit数量
git shortlog -n // 用来对统计的量进行倒序排列
git log --author [authorname]// 用来过滤commit,限定输出给定的用户

开始结束时间

git shortlog -s --since="2020-01-08" --until="2020-01-13" "HEAD"

二:gitstats统计功能

#centos 操作系统

1.文件下载

https://github.com/hoxu/gitstats

2.安装依赖

#Gnuplot是一个命令行的交互式绘图工具

yum install gnuplot

3.解压文件

unzip gitstats-master.zip

cp gitstats /usr/local/bin

4.创建目录

cd code_stats

5.拉取源码

git clone http://192.168.102.84:10080/devops/jenkins.git

6.创建结果目录

mkdir jenkins_report

7.执行分析

#源码库,结果目录

gitstats jenkins jenkins_report

8.拷贝css文件,页面友好

cp /data/gitstats/gitstats-master/arrow-* .

cp /data/gitstats/gitstats-master/gitstats.css .

cp /data/gitstats/gitstats-master/sortable.js .

9.执行web展示

python -m SimpleHTTPServer

10.UI访问

http://192.168.10.14:8000/

11.指定时间段

gitstats -c start_date=2023-03-20 meta-codes/dev/umi-mo meta-reports/dev/umi-mo

12.复制前端展示页面

mkdir meta-codes/dev meta-reports/dev

mkdir /usr/share/gitstats

/bin/cp -f gitstats-master/{gitstats.css,sortable.js,arrow-up.gif,arrow-down.gif,arrow-none.gif} /usr/share/gitstats

目录结构

tree -L 3 gitstats

13.web访问

http://192.168.102.222:8000/dev/

#计划任务

crontab格式的说明

#add by mengsy 2023.03.24

2 3 * * 0 cd /data/gitstats; /bin/bash genReport.sh weekly >>/dev/null 2 >&1


#命令

./gitstats -c start_date=2023-03-10 -c end_date=2023-03-23 meta-codes/dev/umi-mo meta-reports/dev/umi-mo

[root@jenkins-master gitstats]# gitstats -c start_date=2023-03-10 meta-codes/dev/umi-mo meta-reports/dev/umi-mo
[0.01286] >> gnuplot --version
Output path: /home/data/gitstats/meta-reports/dev/umi-mo
Loading cache...
Git path: meta-codes/dev/umi-mo
Collecting data...
[0.00714] >> git shortlog -s --since="2023-03-10" "HEAD" | wc -l
[0.00566] >> git show-ref --tags
[0.00711] >> git rev-list --pretty=format:"%at %ai %aN <%aE>" --since="2023-03-10" "HEAD" | grep -v ^commit
[0.00737] >> git rev-list --pretty=format:"%at %T" --since="2023-03-10" "HEAD" | grep -v ^commit
[0.00902] >> git ls-tree -r -l -z HEAD
[0.01839] >> git log --shortstat --first-parent -m --pretty=format:"%at %aN" --since="2023-03-10" "HEAD"
[0.01758] >> git log --shortstat --date-order --pretty=format:"%at %aN" --since="2023-03-10" "HEAD"
Refining data...
Saving cache...
Generating report...
Warning: "gitstats.css" not found, so not copied (searched: ['/usr/local/bin', '/usr/local/bin/../share/gitstats', '/usr/share/gitstats'])
Warning: "sortable.js" not found, so not copied (searched: ['/usr/local/bin', '/usr/local/bin/../share/gitstats', '/usr/share/gitstats'])
Warning: "arrow-up.gif" not found, so not copied (searched: ['/usr/local/bin', '/usr/local/bin/../share/gitstats', '/usr/share/gitstats'])
Warning: "arrow-down.gif" not found, so not copied (searched: ['/usr/local/bin', '/usr/local/bin/../share/gitstats', '/usr/share/gitstats'])
Warning: "arrow-none.gif" not found, so not copied (searched: ['/usr/local/bin', '/usr/local/bin/../share/gitstats', '/usr/share/gitstats'])
>> git --git-dir=/usr/local/bin/.git --work-tree=/usr/local/bin rev-parse --short HEADfatal: Not a git repository: '/usr/local/bin/.git'
[0.00609] >> git --git-dir=/usr/local/bin/.git --work-tree=/usr/local/bin rev-parse --short HEAD
[0.00599] >> git --version
[0.01396] >> gnuplot --version
Generating graphs...
[0.02418] >> gnuplot "/home/data/gitstats/meta-reports/dev/umi-mo/hour_of_day.plot"
[0.02561] >> gnuplot "/home/data/gitstats/meta-reports/dev/umi-mo/day_of_week.plot"
[0.02435] >> gnuplot "/home/data/gitstats/meta-reports/dev/umi-mo/domains.plot"
[0.02639] >> gnuplot "/home/data/gitstats/meta-reports/dev/umi-mo/month_of_year.plot"
[0.02603] >> gnuplot "/home/data/gitstats/meta-reports/dev/umi-mo/commits_by_year_month.plot"
[0.02424] >> gnuplot "/home/data/gitstats/meta-reports/dev/umi-mo/commits_by_year.plot"
[0.02722] >> gnuplot "/home/data/gitstats/meta-reports/dev/umi-mo/files_by_date.plot"
[0.02744] >> gnuplot "/home/data/gitstats/meta-reports/dev/umi-mo/lines_of_code.plot"
[0.03248] >> gnuplot "/home/data/gitstats/meta-reports/dev/umi-mo/lines_of_code_by_author.plot"
[0.03264] >> gnuplot "/home/data/gitstats/meta-reports/dev/umi-mo/commits_by_author.plot"
Execution time 0.66406 secs, 0.38175 secs (57.49 %) in external commands)
You may now run:

   sensible-browser '/home/data/gitstats/meta-reports/dev/umi-mo/index.html'

三:命令工具

genreport.sh

#!/bin/bash
if [ $# -lt 2 ]
then
  echo "Useage: `basename $0` start_date end_date"
  echo "eg: `basename $0` 2023-02-01 2023-03-24"
  #exit 1
  sleep 1
  #default date
  echo "[Default] startDate: 2022-08-01 endDate: 2023-12-30"
  #weekly
  if [ x$1 == x"weekly" ]
  then
    startDate="`date -d "7 days ago" +%Y-%m-%d`"
    endDate="`date +%Y-%m-%d`"
    dirDate=${startDate}-${endDate}
  else
    startDate="2022-08-01"
    endDate="2023-12-30"
    dirDate="all"
  fi
else
  startDate=$1
  endDate=$2
  dirDate=${startDate}-${endDate}
fi

#exit 1
git_pro_report_list=""
function compDate()
{
  t1=`date -d "$1" +%s`
  t2=`date -d "$2" +%s`
  if [ $t1 -lt $t2 ]
  then
    echo "1"
  else
    echo "0"
  fi
}

#git_url
gitURL="http://mengsy:Meng%[email protected]:10080/meta"

#date
#startDate=$1
#endDate=$2

#code patch
codePath="/data/gitstats/meta-codes/dev"
reportPath="/data/gitstats/meta-reports/dev"

#project_list
front_project_list="umi-mo home-web"
back_project_list="umi-user umi-uaa umi-sentinel-dashboard umi-oss umi-gateway umi-company umi-admin"
#bigdata
bigdata_pro_list="umi-tags"
#game
game_pro_list="game-logic-reward-points game-logic-relation game-logic-hall game-external game-chat game-broker"
#u3d
u3d_pro_list="client"

#branch
branch_dev="dev"
branch_develop="develop"
branch_v5="v0.5.0"
branch_v5_pub="v0.5.0_publish"

#git
#gitstats-date -c start_date=2023-03-10 -c end_date=2023-03-23 meta-codes/dev/umi-mo meta-reports/dev/umi-mo

########################
#update code
cd ${codePath}

#font project
for i in `echo ${front_project_list}`
do
  echo $i
  if [ ! -d ${i} ]
  then
    git clone -b ${branch_dev} ${gitURL}/meta-front/${i}.git
  else
    cd ${i}
    git pull ${gitURL}/meta-front/${i}.git
    #last commit date
    last_commit_date=`git show --pretty=format:"%ci" | head -1|awk '{print $1}'`
    echo "last_commit_date: ${last_commit_date}"
    #compare date
    return_code=`compDate ${startDate} ${last_commit_date}`
    if [ "$return_code" == "1" ]
    then
      git_pro_report_list+=" $i"
      gitstats-date -c start_date=${startDate} -c end_date=${endDate} ${codePath}/${i} ${reportPath}/${i}/${dirDate}
    fi
  fi
  cd ${codePath}
done

#echo ${git_pro_report_list}

exit 1

#back project
for i in `echo ${back_project_list}`
do
  echo $i
  if [ ! -d ${i} ]
  then
    git clone -b ${branch_develop} ${gitURL}/meta-java/${i}.git
  else
    cd ${i}
    git pull ${gitURL}/meta-java/${i}.git
    #last commit date
    last_commit_date=`git show --pretty=format:"%ci" | head -1|awk '{print $1}'`
    echo "last_commit_date: ${last_commit_date}"
    #compare date
    return_code=`compDate ${startDate} ${last_commit_date}`
    if [ "$return_code" == "1" ]
    then
      git_pro_report_list+=" $i"
      gitstats-date -c start_date=${startDate} -c end_date=${endDate} ${codePath}/${i} ${reportPath}/${i}/${dirDate}
    fi
  fi
  cd ${codePath}
done


#bigdata project
for i in `echo ${bigdata_pro_list}`
do
  echo $i
  if [ ! -d ${i} ]
  then
    git clone -b ${branch_develop} ${gitURL}/meta-bigdata/tags-backend/${i}.git
  else
    cd ${i}
    git pull ${gitURL}/meta-bigdata/tags-backend/${i}.git
    #last commit date
    last_commit_date=`git show --pretty=format:"%ci" | head -1|awk '{print $1}'`
    echo "last_commit_date: ${last_commit_date}"
    #compare date
    return_code=`compDate ${startDate} ${last_commit_date}`
    if [ "$return_code" == "1" ]
    then
      git_pro_report_list+=" $i"
      gitstats-date -c start_date=${startDate} -c end_date=${endDate} ${codePath}/${i} ${reportPath}/${i}/${dirDate}
    fi
  fi
  cd ${codePath}
done

#game project
for i in `echo ${game_pro_list}`
do
  echo $i
  if [ ! -d ${i} ]
  then
    git clone -b ${branch_develop} ${gitURL}/meta-game-server/${i}.git
  else
    cd ${i}
    git pull ${gitURL}/meta-game-server/${i}.git
    #last commit date
    last_commit_date=`git show --pretty=format:"%ci" | head -1|awk '{print $1}'`
    echo "last_commit_date: ${last_commit_date}"
    #compare date
    return_code=`compDate ${startDate} ${last_commit_date}`
    if [ "$return_code" == "1" ]
    then
      git_pro_report_list+=" $i"
      gitstats-date -c start_date=${startDate} -c end_date=${endDate} ${codePath}/${i} ${reportPath}/${i}/${dirDate}
    fi
  fi
  cd ${codePath}
done

#u3d project
for i in `echo ${u3d_pro_list}`
do
  echo $i
  if [ ! -d ${i} ]
  then
    git clone -b ${branch_v5} ${gitURL}/meta-app/${i}.git
  else
    cd ${i}
#    git pull ${gitURL}/meta-app/${i}.git
    #last commit date
    last_commit_date=`git show --pretty=format:"%ci" | head -1|awk '{print $1}'`
    echo "last_commit_date: ${last_commit_date}"
    #compare date
    return_code=`compDate ${startDate} ${last_commit_date}`
    if [ "$return_code" == "1" ]
    then
      git_pro_report_list+=" $i"
      gitstats-date -c start_date=${startDate} -c end_date=${endDate} ${codePath}/${i} ${reportPath}/${i}/${dirDate}
    fi
  fi
  cd ${codePath}
done

#exit 1

##############update report
#update report
#for i in `echo ${git_pro_report_list}`
#for i in home-web
#do
#  echo $i
  #mkdir -p ${reportPath}/${dirDate}
#  gitstats-date -c start_date=${startDate} -c end_date=${endDate} ${codePath}/${i} ${reportPath}/${i}/${dirDate}
#done
echo ${startDate} ${endDate}
echo ${git_pro_report_list}
##############

四:gitstat java开源库

1.jdk部署

rpm -ivh jdk-8u71-linux-x64.rpm

2.配置/etc/profile

#set java environment

JAVA_HOME=/usr/java/jdk1.8.0_71

JAVA_BIN=/usr/java/jdk1.8.0_71/bin

CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

PATH=$JAVA_BIN:$PATH

export PATH JAVA_HOME CLASSPATH

3.下载源文件

statgit.war

4.下载apache tomcat

https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.73/bin/apache-tomcat-9.0.73.tar.gz

5.配置tomcat

tar zxvf apache-tomcat-9.0.73.tar.gz

cd /data/monitor/apache-tomcat-9.0.73/webapps/ROOT

把 statgit.war 文件放到 ROOT目录下

cd /data/monitor/apache-tomcat-9.0.73/conf

配置 server.xml

<Connector port="8080" address="192.168.10.13" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

b.配置war包路径

在<Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true"> </host>中增加

<Context path="/gitstat" docBase="/data/monitor/apache-tomcat-9.0.73/webapps/ROOT/statgit.war" reloadable="true"></Context>

其中:path="/gitstat" 为URL需要访问的入口

6.启停服务配置

cd /data/monitor/apache-tomcat-9.0.73/bin

#启动

sh startup.sh

#停止

sh shutdown.sh

7.web访问

http://192.168.10.13:8080/gitstat/stat/gitstat.html


8.使用

支持多种时间格式

代码库配置:

需要在服务器存在库,如需要则使用不同分支

#clone 文件,如有需要则要定期更新代码

cd /data/git_code

git clone -b dev http://mengsy:Meng%[email protected]:10080/meta/meta-java/umi-user.git

git clone -b develop http://mengsy:Meng%[email protected]:10080/meta/meta-java/umi-user.git

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言