forgeplus/app/services/huawei_cloud/code_check.rb

156 lines
6.1 KiB
Ruby

require 'rest-client'
require 'json'
require 'redis'
module HuaweiCloud
class CodeCheck
CONFIG = Rails.application.config_for(:configuration)['huawei_code_check']
PROJECT_ID = CONFIG['product_id']
REGION = CONFIG['region']
def initialize
@region = REGION
@project_id = PROJECT_ID
@token = HuaweiCloud::ImaAccount.new.token
@headers = {
"Content-Type" => "application/json;charset=utf8",
"X-Auth-Token" => @token
}
end
# 创建检查任务
# params: git_url, git_branch, languages (array), optional rule_sets etc
def create_task(git_url:, git_branch:, languages: nil, rule_sets: nil, task_type: "full", endpoint_id: nil, username: nil, access_token: nil, resource_pool_id: nil)
url = "https://codecheck-ext.#{@region}.myhuaweicloud.com/v2/#{@project_id}/task"
Rails.logger.info "################### create_task url #{url}"
body = {
git_url: git_url,
git_branch: git_branch,
task_type:task_type
}
body[:language] = languages if languages
body[:rule_sets] = rule_sets if rule_sets
body[:endpoint_id] = endpoint_id if endpoint_id
body[:username] = username if username
body[:access_token] = access_token if access_token
body[:resource_pool_id] = resource_pool_id if resource_pool_id
Rails.logger.info body.to_json
resp = RestClient.post(url, body.to_json, @headers)
JSON.parse(resp.body)
rescue RestClient::ExceptionWithResponse => e
# 你可以根据 e.response.code 处理 401 (Token失效) 或其它错误
raise "CodeCheck create_task failed: #{e.response}"
end
def run_task(task_id)
url = "https://codecheck-ext.#{@region}.myhuaweicloud.com/v2/tasks/#{task_id}/run"
body = {
}
resp = RestClient.post(url, body.to_json, @headers)
JSON.parse(resp.body)
rescue RestClient::ExceptionWithResponse => e
# 你可以根据 e.response.code 处理 401 (Token失效) 或其它错误
raise "CodeCheck create_task failed: #{e.response}"
end
def query_task(task_id)
url = "https://codecheck-ext.#{@region}.myhuaweicloud.com/v2/tasks/#{task_id}/progress"
resp = RestClient.get(url, @headers)
JSON.parse(resp.body)
rescue RestClient::ExceptionWithResponse => e
# 你可以根据 e.response.code 处理 401 (Token失效) 或其它错误
raise "CodeCheck create_task failed: #{e.response}"
end
def defects_summary(task_id,query)
url = "https://codecheck-ext.#{@region}.myhuaweicloud.com/v2/tasks/#{task_id}/defects-summary?#{query}"
resp = RestClient.get(url, @headers)
JSON.parse(resp.body)
rescue RestClient::ExceptionWithResponse => e
# 你可以根据 e.response.code 处理 401 (Token失效) 或其它错误
raise "CodeCheck create_task failed: #{e.response}"
end
def defects_detail(task_id,query)
url = "https://codecheck-ext.#{@region}.myhuaweicloud.com/v2/tasks/#{task_id}/defects-detail?#{query}"
Rails.logger.info "################### defects_detail params: #{query} ,url:#{url} "
resp = RestClient.get(url, @headers)
JSON.parse(resp.body)
rescue RestClient::ExceptionWithResponse => e
# 你可以根据 e.response.code 处理 401 (Token失效) 或其它错误
raise "CodeCheck create_task failed: #{e.response}"
end
def defects_statistic(task_id)
url = "https://codecheck-ext.#{@region}.myhuaweicloud.com/v2/tasks/#{task_id}/defects-statistic"
resp = RestClient.get(url, @headers)
JSON.parse(resp.body)
rescue RestClient::ExceptionWithResponse => e
# 你可以根据 e.response.code 处理 401 (Token失效) 或其它错误
raise "CodeCheck create_task failed: #{e.response}"
end
def metrics_summary(task_id)
url = "https://codecheck-ext.#{@region}.myhuaweicloud.com/v2/#{@project_id}/tasks/#{task_id}/metrics-summary"
resp = RestClient.get(url, @headers)
JSON.parse(resp.body)
rescue RestClient::ExceptionWithResponse => e
# 你可以根据 e.response.code 处理 401 (Token失效) 或其它错误
raise "CodeCheck create_task failed: #{e.response}"
end
def defect_status(task_id,body)
url = "https://codecheck-ext.#{@region}.myhuaweicloud.com/v2/tasks/#{task_id}/defect-status"
resp = RestClient.put(url, body.to_json, @headers)
JSON.parse(resp.body)
end
def issue_status(task_id,body)
url = "ttps://codecheck-ext.#{@region}.myhuaweicloud.com/v1/defect/issue-status"
body["taskId"] = task_id
resp = RestClient.post(url, body.to_json, @headers)
JSON.parse(resp.body)
rescue RestClient::ExceptionWithResponse => e
# 你可以根据 e.response.code 处理 401 (Token失效) 或其它错误
raise "CodeCheck create_task failed: #{e.response}"
end
def issue_list_by_filter(task_id,body)
url = "ttps://codecheck-ext.#{@region}.myhuaweicloud.com/v1/defect/issue-list-by-filter"
body["taskId"] = task_id
resp = RestClient.post(url, body.to_json, @headers)
JSON.parse(resp.body)
rescue RestClient::ExceptionWithResponse => e
# 你可以根据 e.response.code 处理 401 (Token失效) 或其它错误
raise "CodeCheck create_task failed: #{e.response}"
end
def issue_filter(task_id,body)
url = "ttps://codecheck-ext.#{@region}.myhuaweicloud.com/v1/defect/issue-filter"
body["taskId"] = task_id
resp = RestClient.post(url, body.to_json, @headers)
JSON.parse(resp.body)
rescue RestClient::ExceptionWithResponse => e
# 你可以根据 e.response.code 处理 401 (Token失效) 或其它错误
raise "CodeCheck create_task failed: #{e.response}"
end
def defect_metric_trend(task_id,query)
query += "&taskId=#{task_id}"
url = "https://codecheck-ext.#{@region}.myhuaweicloud.com/v1/history/defect-metric-trend?#{query}"
resp = RestClient.get(url, @headers)
JSON.parse(resp.body)
rescue RestClient::ExceptionWithResponse => e
# 你可以根据 e.response.code 处理 401 (Token失效) 或其它错误
raise "CodeCheck create_task failed: #{e.response}"
end
end
end