gitlab 에서 모든 사람의 코드 제출 량 을 통계 합 니 다.
35345 단어 Python
# coding:utf-8
import requests
import os
import json
private_token = '1KpjiCRyt2ywJq3tdfdfjD'
private_host = 'http://10.200.3.3'
def get100Projects(page):
r = requests.get(private_host + '/api/v3/projects?private_token=' + private_token + '&per_page=100'+'&page='+str(page))
data = r.json()
projects = []
for i in data:
project = {}
project['id'] = i['id']
project['name']=i['name']
project['url']=i['http_url_to_repo']
project['group']=str(i['path_with_namespace']).split('/')[0]
project['activitytime']=str(i['last_activity_at']).split('T')[0]
projects.append(project)
return projects
def getAllProjects():
page = 1
projects = []
donext = True
while donext:
pros = get100Projects(page)
for pro in pros:
projects.append(pro)
page=page+1
if len(pros) < 100:
donext = False
return projects
def coutProject(project):
commands = 'git log --format=\'%cN\' | sort -u | while read name; do echo -en \"$name*\"; git log --author=\"$name\" --pretty=tformat: --numstat | awk \'{ add += $1; subs += $2; loc += $1 - $2 } END { printf \"%s*%s*%s@\", add, subs, loc }\' -; done'
out = os.popen('git clone '+project.get('url')+'&& cd '+project.get('name')
+'&&'+commands+'&& cd .. && rm -rf '+project.get('name'))
return out.read()
def coutProjectBydate(project,date):
commands = 'git log --format=\'%cN\' | sort -u | while read name; do echo -en \"$name*\"; git log --author=\"$name\" --since='+date+'-01 --until='+date+'-31 --pretty=tformat: --numstat | awk \'{ add += $1; subs += $2; loc += $1 - $2 } END { printf \"%s*%s*%s@\", add, subs, loc }\' -; done'
out = os.popen('git clone ' + project.get('url') + '&& cd ' + project.get('name')
+ '&&' + commands + '&& cd .. && rm -rf ' + project.get('name'))
return out.read()
def converStr(out):
out = out.replace('
', '')
l = out.split('@')
l = [item for item in filter(lambda x: x != '', l)]
rl = []
for s in l:
try:
ul=s.split('*')
rs={}
rs['name'] = ul[0]
v1=ul[1] if ul[1] != '' else 0
v2=ul[2] if ul[2] != '' else 0
v3=ul[3] if ul[3] != '' else 0
rs['added'] = int(v1)
rs['removed'] = int(v2)
rs['total'] = int(v3)
rl.append(rs)
except Exception,e:
print('convertStr err:::'+str(e))
return rl
def mcount(total,rl):
for per in rl:
if total.get(per.get('name')):
p = total.get(per.get('name'))
p['added'] += int(per.get('added'))
p['removed'] += int(per.get('removed'))
p['total'] += int(per.get('total'))
else:
total[per.get('name')]=per
def report(total):
for name in total:
#if int(total.get(name).get('added'))==0 and int(total.get(name).get('removed'))==0 and int(total.get(name).get('total'))==0:
# continue
if int(name[1].get('added'))==0 and int(name[1].get('removed'))==0 and int(name[1].get('total'))==0:
continue
print(json.dumps(name[0],encoding='utf-8',ensure_ascii=False).replace('-en ','').replace('\"','')
+'\t'+json.dumps(name[1],encoding='utf-8',ensure_ascii=False).replace('-en ','').replace(' ','').replace('{','').replace('}','').replace(',','\t').replace('\'','').replace('\"',''))
# coding:utf-8
import requests
import json
import time
import gitlabUtil as git
private_token = '1KpjiCRyt2ywJq3tdfdfjD'
private_host = 'http://10.200.3.3'
private_date = '2019-01'
def skipProject(pro):
projects=['app1','app2','app3','app4','app5']
if pro.get('name') in projects:
return False
else:
return True
def skipXYProject(pro):
if str(pro.get('name')).lower().startswith('xy'):
return True
if __name__ == '__main__':
sT = time.time()
projects = git.getAllProjects()
i = 1
total = {}
for pro in projects:
if pro.get('group') != 'java':
continue
if skipProject(pro): # , gitlab ,
continue
if skipXYProject(pro): # xy
continue
print('start project:::' + pro.get('name')+',index:::'+str(i))
if private_date != '': #
activitytime = pro.get('activitytime')
if activitytime < str(private_date+'-01'): #
print('skip unactiviry project:::' + pro.get('name'))
continue
r = git.coutProjectBydate(pro,private_date)
else:
r = git.coutProject(pro)
rl = git.converStr(r) #
print('finish project:::' + json.dumps(rl,encoding='utf-8',ensure_ascii=False))
git.mcount(total,rl) #
#print('now total is:::' + str(total))
i += 1
print('-------total------
')
dict = sorted(total.items(), key=lambda d: d[1], reverse=True) #
git.report(dict) #
eT = time.time()
exT = eT-sT
print('Time used:::'+str(int(exT))+'S')
github 의 API 가 있 는 지 없 는 지 모 르 겠 지만,있 으 면 재 미 있 는 것 을 구 할 수 있 을까요?
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.