开源度量-初版

This commit is contained in:
caishi 2024-10-31 18:25:03 +08:00
parent 36c7783109
commit 939dd0b59c
10 changed files with 90 additions and 46 deletions

View File

@ -80,7 +80,20 @@ module.exports = function(proxy, allowedHost) {
disableDotRule: true,
},
public: allowedHost,
proxy,
proxy:{
"/api/OSS_Health_Measuring":{
target: 'http://60.205.224.11:8060',
changeOrigin: true,
},
"/api/OHM_can_get":{
target: 'http://60.205.224.11:8060',
changeOrigin: true,
},
"/api":{
target: "https://testforgeplus.trustie.net",
changeOrigin: true,
}
},
before(app) {
// This lets us open files from the runtime error overlay.
app.use(errorOverlayMiddleware());

View File

@ -200,7 +200,7 @@
"eslintConfig": {
"extends": "react-app"
},
"proxy": "http://60.205.224.11:8060",
"proxy": "https://testforgeplus.trustie.net",
"port": "3007",
"devDependencies": {
"@babel/core": "^7.23.6",

View File

@ -46,11 +46,11 @@ function ServerIndex(props){
return(
<div className="panels">
<Switch {...props}>
<Route path="/:owner/:projectsId/service/measurement/:type"
{/* <Route path="/:owner/:projectsId/service/measurement/:type"
render={
(p) => (<MeasurementDetail {...props} {...p}/>)
}
></Route>
></Route> */}
<Route path="/:owner/:projectsId/service/reposyncer"
render={
() => (<Reposyncer {...props}/>)

View File

@ -8,10 +8,9 @@ export function getMainScore(owner,repo) {
});
}
export function getCommit(params) {
export function getChange(owner,repo) {
return fetch({
url: `/api/commits`,
method: 'post',
data:params
url: `/api/OHM_can_get/${owner}/${repo}`,
method: 'get'
});
}

View File

@ -20,7 +20,8 @@ function Radar({data , subCardIndex}){
title: "指标名称",
dataIndex: "name",
render:(value)=>{
return(<a className='color-blue'>{fieldData[value]}</a>)
// return(<a className='color-blue'>{fieldData[value]}</a>)
return fieldData[value]
}
},
{

View File

@ -17,6 +17,7 @@ function Stack(){
tooltip: {
trigger: 'axis'
},
color:['#5871FF',"#FFBE38"],
// legend: {
// data: ['Email', 'Union Ads']
// },

View File

@ -46,7 +46,7 @@ export const fieldData = {
}
export const scoreComp = (score)=>{
let value = parseInt(score);
let value = Math.round(score);
return <span className="faYou" style={{color:value >= 80 ? "#466aff" : (value<80 && value>=60) ? "#E18419" :"#F70202"}}>{value}</span>
}

View File

@ -3,6 +3,6 @@ import javaFetch from "./javaFetch";
// let actionUrl = settings && settings.common.softbot;
let actionUrl = 'http://60.205.224.11:8060';
const service = javaFetch(actionUrl);
const service = javaFetch("");
export const httpUrl = actionUrl;
export default service;

View File

@ -1,4 +1,4 @@
import React, {useState, useEffect} from "react";
import React, {useState, useEffect , useRef} from "react";
import './index.scss';
import Logo from '../img/logo4.png';
import { Button , Spin } from 'antd';
@ -10,14 +10,16 @@ import person from '../img/person.png';
import Rader from './componet/radar';
import Indicator from './componet/indicator';
import { scoreComp , field , firstData , colorsField, secondData , subField , thirdData } from './config';
import { getMainScore , getCommit } from './api';
import res from './xiuos.json';
import { getMainScore , getChange } from './api';
// import res from './xiuos.json';
function Index(props){
const [cardIndex, setCardIndex] = useState(firstData[0]);
const [ subCardIndex, setSubCardIndex] = useState(1);
const { type , owner , projectsId } = props.match.params;
const [ loading , setLoading ] = useState(false);
const { owner , projectsId } = props.match.params;
const [ datas , setDatas ] = useState();
const [ scoreNormal , setScoreNormal ] = useState();
@ -27,15 +29,56 @@ function Index(props){
const [ subMenus , setSubMenus ] = useState([]);
const [ subDatas , setSubDatas ] = useState([]);
const [ fieldDatas , setFieldDatas ] = useState([])
const [ fieldDatas , setFieldDatas ] = useState([]);
let interval = undefined;
const count = useRef();
useEffect(()=>{
if(owner && projectsId){
Init();
checkData();
}
},[owner,projectsId])
//
async function checkData(){
getChange(owner,projectsId).then(res=>{
if(res && res.statue === "YES"){
Init();
clearInterval(interval);
}
})
}
//
function Init(){
getMainScore(owner,projectsId).then(res=>{
if(res){
setDatas(res);
setScoreNormal(res && res.score);
getlist(res && res.score);
}
})
}
//
function getReportStart(){
setLoading(true);
count.current = 20;
checkData();
interval = setInterval(() => {
if (count.current > 1) {
let old = count.current;
count.current = old - 1;
console.log(count);
checkData();
} else {
//
clearInterval(interval);
setLoading(true);
props.showNotification("当前服务繁忙,请稍后再试");
}
}, 30000)
}
// tab
useEffect(()=>{
if(score && cardIndex){
@ -67,20 +110,6 @@ function Index(props){
}
},[cardIndex,score])
//
function Init(){
getMainScore(owner,projectsId).then(res=>{
if(res){
}
})
// getCommit({owner,repo:projectsId}).then(res=>{
// })
setDatas(res);
console.log(res);
setScoreNormal(res && res.score);
getlist(res && res.score);
}
//
function getlist(values){
@ -88,23 +117,24 @@ function Index(props){
return {name:i,...values[field[i]],color:colorsField[i]};
})
setScore(d);
let sn = d.reduce((sum, item) => parseInt(sum + parseInt(item.WeightedScore)), 0);
let sn = d.reduce((sum, item) => Math.round(sum + Math.round(item.WeightedScore)), 0);
setScoreNum(sn);
}
return(
<div>
<div class="headBox font-16 pl15">开源软件健康度量服务</div>
{
false &&
!datas &&
<div class="nullStoreBox mt25">
<img src={Logo} class="loBox mt50" />
<p class="font-22 mt10">欢迎使用开源软件健康度量服务</p>
<div class="introBox font-15">开源软件健康度量服务是一种代码库分析工具旨在通过深入分析代码库的关键活动数据来评估开源项目的健康状况该服务通过收集和分析代码库中的贡献者提交commit合并请求pulrequest疑修issue等数据指标为项目开发者维护者提供了一个全面的项目健康报告</div>
<div class="introBox font-15">开源软件健康度量服务是一种代码库分析工具旨在通过深入分析代码库的关键活动数据来评估开源项目的健康状况该服务通过收集和分析代码库中的贡献者提交commit合并请求pullRequest疑修issue等数据指标为项目开发者维护者提供了一个全面的项目健康报告</div>
<div class="borBox"></div>
<Button type="primary" >开始体验</Button>
<div><Spin /><span className="ml5 color-blue">服务报告生成中...</span></div>
{!loading && <Button type="primary" onClick={()=>{getReportStart()}}>开始体验</Button> }
{ loading && <div><Spin /><span className="ml5 color-blue">服务报告生成中...</span></div> }
</div>
}
{
@ -129,7 +159,7 @@ function Index(props){
<ul className="scoreProgress">
{
<li>
<span className="index">{parseInt(scoreNum)}</span>
<span className="index">{Math.round(scoreNum)}</span>
<span className="name">开源生态健康度</span>
<div className="progress">
{
@ -138,17 +168,17 @@ function Index(props){
})
}
</div>
<span><span className="color-blue">{parseInt(scoreNum)}</span><span className="ml3 mr3">/</span>100</span>
<span><span className="color-blue">{Math.round(scoreNum)}</span><span className="ml3 mr3">/</span>100</span>
</li>
}
{
score.map((i,k)=>{
return(
<li>
<span className="index">{parseInt(i.WeightedScore)}</span>
<span className="index">{Math.round(i.WeightedScore)}</span>
<span className="name">{i.name}</span>
<div className="progress"><span style={{width:`${i.WeightedScore}%`,backgroundColor:`${i.color}`}}></span></div>
<span><span className="color-blue">{parseInt(i.WeightedScore)}</span><span className="ml3 mr3">/</span>{i.Weight*100}</span>
<span><span className="color-blue">{Math.round(i.WeightedScore)}</span><span className="ml3 mr3">/</span>{i.Weight*100}</span>
</li>
)
})

View File

@ -3,11 +3,11 @@ import { url, zoneUrl } from '../ssrUrl';
let baseUrl = `${url}/api`
let baseZoneUrl = `${zoneUrl}/api`
// if (__CLIENT__ ) {
// let settings = localStorage.chromesetting && localStorage.chromesetting !== 'undefined' &&JSON.parse(localStorage.chromesetting);
// baseUrl = settings && settings.common && settings.common.main_site_url ? `${settings.common.main_site_url}/api` : baseUrl;
// baseZoneUrl = settings ? `${settings && settings.common.zone}/api` : `${zoneUrl}/api`;
// }
if (__CLIENT__ ) {
let settings = localStorage.chromesetting && localStorage.chromesetting !== 'undefined' &&JSON.parse(localStorage.chromesetting);
baseUrl = settings && settings.common && settings.common.main_site_url ? `${settings.common.main_site_url}/api` : baseUrl;
baseZoneUrl = settings ? `${settings && settings.common.zone}/api` : `${zoneUrl}/api`;
}
console.log("__CLIENT__",__CLIENT__,baseUrl);
const axiosInstance = axios.create({