亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python實(shí)現(xiàn)獲取sonarqube數(shù)據(jù)

 更新時(shí)間:2023年05月18日 14:58:50   作者:Michaelwubo  
sonarqube是一款代碼分析的工具,可以對(duì)通過(guò)soanrScanner掃描后的數(shù)據(jù)傳遞給sonarqube進(jìn)行分析,本文為大家整理了Python獲取sonarqube數(shù)據(jù)的方法,需要的可以參考下

1.sonarqube是一款代碼分析的工具,通過(guò)soanrScanner掃描后的數(shù)據(jù)傳遞給sonarqube進(jìn)行分析

2.sonarqube社區(qū)版沒(méi)有對(duì)c++類代碼的分析,但是可以找到一個(gè)開源的包,安裝即可,掃描的話可以使用cppcheck來(lái)進(jìn)行掃描

  • 安裝python對(duì)于sonarqube的api包:python-sonarqube-api
  • 建立sonarqube連接

from sonarqube import SonarQubeClient
sonar = SonarQubeClient(
    sonarqube_url="http://192.168.xx.xx:9000",
    username='admin',
    password='admin'
)

使用:建議大家先參考sonarqube的python-api

Welcome to SonarQube Client with Python’s documentation! — SonarQube Client with Python 1.3.5 documentation

使用示例

# 通過(guò)項(xiàng)目名稱獲取id
# 傳遞參數(shù):創(chuàng)建分析配置文件時(shí)候的項(xiàng)目名稱
component = sonar.components.get_project_component_and_ancestors("python_test")
 
# 獲取任務(wù)
# 參數(shù)1:上一步獲取的component值
# 參數(shù)2:逗號(hào)分割的狀態(tài)值
tasks1 = sonar.ce.search_tasks(
    componentId="AX5v36mo0Npud3J2od3a",
    status="FAILED,CANCELED,PENDING,IN_PROGRESS,SUCCESS"
)
 
# 獲取所有項(xiàng)目
projects = list(sonar.projects.search_projects())
 
# 獲取這個(gè)項(xiàng)目下最近一次分析任務(wù)的詳情
"""
componentKeys:某一個(gè)項(xiàng)目名稱
types:參數(shù)類型
CODE_SMELL==異常
BUG==bug
VULNERABILITY==漏洞
SECURITY_HOTSPOT==
"""
issues2 = list(sonar.issues.search_issues(componentKeys="python_s", types="CODE_SMELL"))

通過(guò)metricKeys參數(shù)獲取這個(gè)項(xiàng)目中需要的值

# 參數(shù)1:component 項(xiàng)目名稱
# 參數(shù)2:metricKeys 想要獲取的某個(gè)值,逗號(hào)分割
component_data = sonar.measures.get_component_with_specified_measures(
    component="python_test",
    metricKeys="functions,classes"
)['component']['measures']
# 目前已收集的值和含義
'''
ncloc==總代碼長(zhǎng)度
ncloc_language_distribution==其中每種語(yǔ)言的行數(shù)
bugs==bug數(shù)
vulnerabilities==漏洞數(shù)
code_smells==異常數(shù)
duplicated_lines_density==重復(fù)度百分比
coverage==代碼覆蓋率百分比
files==文件數(shù)量
functions==方法數(shù)量
classes==類數(shù)量
'''
[root@localhost data]# cat wubo.py 
#!/bin/python3
# encoding: utf-8
from sonarqube import SonarQubeClient
from operator import itemgetter
import json
import csv
import os
import time
import shutil
class SonarQube:
    def __init__(self,url,username="admin",password="123456aA") -> None:
        username = username
        password = password
        sonarqube_url = url
        self.client = SonarQubeClient(username = username,password = password,sonarqube_url = sonarqube_url)
    def getProjects(self):
        """獲取項(xiàng)目列表"""
        projects = self.client.projects.search_projects().get("components")
        return projects
    def getIssues(self,jettech_project_name,issues_type):
        """獲取項(xiàng)目問(wèn)題列表"""
        #projects = self.client.issues.search_issues(componentKeys="jettoloader-pressurecommon",types="BUG",s="FILE_LINE",resolved="false",ps=1,organization="default-organization",facets="authors",additionalFields="_all")
        projects = self.client.issues.search_issues(componentKeys=jettech_project_name,types=issues_type,s="FILE_LINE",resolved="false",ps=1,organization="default-organization",facets="authors",additionalFields="_all")
        list_issues = projects["facets"][0]["values"]
        #list_issues_name_count = []
        #for list_issues_item in list_issues:
        #    list_issues_name_count.append(list_issues_item["val"])
        #    list_issues_name_count.append(list_issues_item["count"])
        #print(list_issues)
        #list_issues[0]["val"])
        #list_issues[0]["count"])
        return list_issues
    def getMessages(self,component):
        """ 獲取項(xiàng)目各個(gè)參數(shù)數(shù)據(jù)"""
        #metricKeys = "alert_status,bugs,,vulnerabilities,security_rating,code_smells,duplicated_lines_density,coverage,ncloc"
        metricKeys = "bugs,,vulnerabilities"
        messages = []
        messages.append(self.client.measures.get_component_with_specified_measures(component, metricKeys))
        return messages[0]
    def getMeasures(self,component,message):
        measures = []
        measures.insert(0,component)
        measures_all = message.get("component").get("measures")
        for measure_item in measures_all:
            measures_type = measure_item.get("metric")
            if "bugs" == measures_type:
                measures.insert(1,measure_item.get("value"))
            if "vulnerabilities" == measures_type:
                measures.insert(2,measure_item.get("value"))
        return measures
 
class CSV:
    def __init__(self,filepath,filename) -> None:
        self.filepath = filepath
        self.filename = filename
    def csv_write(self,project_measure_all):
        #header = ['1project_name','2bugs','3vulnerabilities']
        with open(self.filepath+"/"+self.filename, 'a') as file_obj:
            writer = csv.writer(file_obj)
            #writer.writerow(header)
            for p in project_measure_all:
                writer.writerow(p)
 
    def csv_sort(self):
        datas=[]
        with open(self.filepath+"/"+self.filename, 'r') as f:
            table = []
            for line in f:
                line = line.replace("\n","").replace("\r","")
                col = line.split(',')
                col[0] = str(col[0])
                col[1] = col[1].strip("\n")
                table.append(col)
            table_sorted = sorted(table, key=itemgetter(0), reverse=False)  # 精確的按照第1列排序
            for row in table_sorted:
                datas.append(row)
        f.close()
        with open(self.filepath+"/"+self.filename,"w", newline='') as csvfile:
            writer = csv.writer(csvfile)
            for data in datas:
                writer.writerow(data)
        csvfile.close()
 
    def csv_insert(self):
       header = 'project_name,bugs,vulnerabilities'
       with open(self.filepath+"/"+self.filename, 'r+', encoding='utf-8') as f:
           content = f.read()
           f.seek(0, 0)
           f.write(header + '\n' + content)
       f.close()
 
    def csv_delete(self):
        if (os.path.exists(self.filepath)):
            shutil.rmtree(self.filepath,ignore_errors=True)
   
    def csv_sum(self):
        with open(self.filepath+"/"+self.filename) as fin:
            readline_item=fin.readline()
            total_bug_api = 0
            total_bug_manager = 0
            total_bug_loader = 0
            total_bug_ui = 0
            total_vulnerabilities_api = 0
            total_vulnerabilities_manager = 0
            total_vulnerabilities_loader = 0
            total_vulnerabilities_ui = 0
            for row in csv.reader(fin):
                row_project_name=row[0].split("-")[0]
                if "jettoapi" == row_project_name:
                     total_bug_api += int(row[1])
                     total_vulnerabilities_api += int(row[2])
                if "jettoloader" == row_project_name:
                     total_bug_loader += int(row[1])
                     total_vulnerabilities_loader += int(row[2])
                if "jettomanager" == row_project_name:
                     total_bug_manager += int(row[1])
                     total_vulnerabilities_manager += int(row[2])
                if "jettoui" == row_project_name:
                     total_bug_ui += int(row[1])
                     total_vulnerabilities_ui += int(row[2])
        fin.close()
 
        header_kong = ['','','']
        header_api = ['jettoapi','bug總數(shù)',str(total_bug_api),'vulnerabilities總數(shù)',str(total_vulnerabilities_api)]
        header_loader = ['jettoloader','bug總數(shù)',str(total_bug_loader),'vulnerabilities總數(shù)',str(total_vulnerabilities_loader)]
        header_manager = ['jettomanager','bug總數(shù)',str(total_bug_manager),'vulnerabilities總數(shù)',str(total_vulnerabilities_manager)]
        header_ui = ['jettoui','bug總數(shù)',str(total_bug_ui),'vulnerabilities總數(shù)',str(total_vulnerabilities_ui)]
        with open(self.filepath+"/"+self.filename, 'a') as file_obj:
            writer = csv.writer(file_obj)
            writer.writerow(header_kong)
            writer.writerow(header_api)
            writer.writerow(header_loader)
            writer.writerow(header_manager)
            writer.writerow(header_ui)
        file_obj.close()
                
 
class SCP: 
    def __init__(self,localdir,remoteip,remotedir) -> None:
        self.localdir = localdir
        self.remoteip = remoteip
        self.remotedir = remotedir
    def scp_operate(self):
        os.system('scp -r "%s" "%s:%s"' % (self.localdir, self.remoteip, self.remotedir))
 
def main():
    sonarQube = SonarQube(url='http://172.16.10.1:9000/')
    all_project_info = sonarQube.getProjects()
    project_measure_all=[]
    project_issues_all=[]
    for project_info in all_project_info:
        component = project_info.get("key")
        message = sonarQube.getMessages(component)
        measure = sonarQube.getMeasures(component,message)
        project_issues=[]
        list_issues_s = sonarQube.getIssues(component,"BUG")
        project_issues.append(component)
        for list_issues_s_item in list_issues_s:
            project_issues.append(list_issues_s_item["val"])
            project_issues.append(list_issues_s_item["count"])
        project_measure_all.extend([tuple(measure)])
        project_issues_all.extend([tuple(project_issues)])
        print([tuple(measure)])
        #print(project_issues_all)
 
    filepath=time.strftime("%Y-%m-%d")
    filename="jettech_sornar_"+filepath+"_projects.csv"
    filename_isuess="jettech_sornar_"+filepath+"_projects_iseuss.csv"
    if not os.path.exists(filepath):
        os.makedirs(filepath)
    if  os.path.exists(filepath+"/"+filename):
        os.remove(filepath+"/"+filename)
    if  os.path.exists(filepath+"/"+filename_isuess):
        os.remove(filepath+"/"+filename_isuess)
    csv_obj = CSV(filepath=filepath,filename=filename)
    csv_obj_isuess = CSV(filepath=filepath,filename=filename_isuess)
    csv_obj.csv_write(project_measure_all)
    csv_obj_isuess.csv_write(project_issues_all)
    csv_obj.csv_sort()
    csv_obj.csv_insert()
    csv_obj.csv_sum()
 
    localdir=filepath
    remoteip="192.168.1.99"
    remotedir="/product/gohttpserver/data/sornar/" 
    scp_obj = SCP(localdir,remoteip,remotedir)
    scp_obj.scp_operate()
    csv_obj.csv_delete()
 
if __name__== "__main__" :
    main()

到此這篇關(guān)于Python實(shí)現(xiàn)獲取sonarqube數(shù)據(jù)的文章就介紹到這了,更多相關(guān)Python獲取sonarqube數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python 每天如何定時(shí)啟動(dòng)爬蟲任務(wù)(實(shí)現(xiàn)方法分享)

    python 每天如何定時(shí)啟動(dòng)爬蟲任務(wù)(實(shí)現(xiàn)方法分享)

    python 每天如何定時(shí)啟動(dòng)爬蟲任務(wù)?今天小編就為大家分享一篇python 實(shí)現(xiàn)每天定時(shí)啟動(dòng)爬蟲任務(wù)的方法。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • Python列表list排列組合操作示例

    Python列表list排列組合操作示例

    這篇文章主要介紹了Python列表list排列組合操作,涉及Python排列組合數(shù)值運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下
    2018-12-12
  • Python 注釋:解釋和優(yōu)化代碼可讀性

    Python 注釋:解釋和優(yōu)化代碼可讀性

    本文將探討Python中注釋的重要性,以及如何通過(guò)注釋解釋和優(yōu)化代碼的可讀性,了解如何正確使用注釋可以提高代碼的可維護(hù)性和可理解性
    2023-09-09
  • 如何使用python iter方法讀取文件

    如何使用python iter方法讀取文件

    iter()是Python的內(nèi)置函數(shù),用于生成迭代器,允許逐個(gè)訪問(wèn)元素,節(jié)省內(nèi)存使用,iter()可以應(yīng)用于文件對(duì)象,實(shí)現(xiàn)逐行讀取,此外,iter()還可以與自定義結(jié)束標(biāo)記結(jié)合使用,適用于處理固定塊數(shù)據(jù)讀取,相較于其他文件讀取方法,iter()方法簡(jiǎn)單高效,適合處理大文件,減少內(nèi)存占用
    2024-10-10
  • python面向?qū)ο蠓▽?shí)現(xiàn)圖書管理系統(tǒng)

    python面向?qū)ο蠓▽?shí)現(xiàn)圖書管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了python面向?qū)ο蠓▽?shí)現(xiàn)圖書管理系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • Python疫情數(shù)據(jù)可視化分析

    Python疫情數(shù)據(jù)可視化分析

    這篇文章主要介紹了Python疫情數(shù)據(jù)可視化分析,本數(shù)據(jù)集主要涉及到全球疫情統(tǒng)計(jì),包括確診、治愈、死亡、時(shí)間、國(guó)家、地區(qū)等信息,需要的朋友可以參考一下
    2022-07-07
  • python爬取新聞門戶網(wǎng)站的示例

    python爬取新聞門戶網(wǎng)站的示例

    短期目前旨在爬取所有新聞門戶網(wǎng)站的新聞,每個(gè)門戶網(wǎng)站爬蟲開箱即用,并自動(dòng)保存到同目錄下的 csv/excel 文件中,禁止將所得數(shù)據(jù)商用。
    2021-04-04
  • Python中的zip函數(shù)使用示例

    Python中的zip函數(shù)使用示例

    這篇文章主要介紹了Python中的zip函數(shù)使用示例,Python中的zip函數(shù)不是用來(lái)壓縮文件的,而是用來(lái)傳入?yún)?shù)返回一個(gè)tuple列表的,需要的朋友可以參考下
    2015-01-01
  • 安裝2019Pycharm最新版本的教程詳解

    安裝2019Pycharm最新版本的教程詳解

    這篇文章主要介紹了安裝2019Pycharm最新版本的教程詳解,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Python Numpy之linspace用法說(shuō)明

    Python Numpy之linspace用法說(shuō)明

    這篇文章主要介紹了Python Numpy之linspace用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04

最新評(píng)論