Commit a01304ba by lixinming

no message

parent 5051f51e
import { getKeyValueNumberOutData } from "../../cal/out";
//云资源
export async function getYZY(req, res) {
let ret:any = {};
let data1 = [{"cpu":"3568核"}, {"内存":"4000G"}, {"本地磁盘":"1999G"}, {"云磁盘总量":"848484G"}];
ret["api1"] = getKeyValueNumberOutData("计算云资源", data1 );
}
\ No newline at end of file
import { getKeyValueNumberOutData, getChartOutData, getKeyValueNotNumberOutData, getListOutData, getScatterFigureOutData, getStringOutData } from "../cal/out";
import { get监管服务能力_RSU发送量 } from "../data/analysisExcelData";
export function getData(req, res) {
let ret:any = {};
import { get监管服务能力_RSU发送量 } from "../data/analysisExcelData";
let excelData:any = get监管服务能力_RSU发送量();
ret["api1"] = getListOutData("RSU", excelData.RSU );
//弃用
export function getData(req, res) {
let ret:any = {};
res.send(ret);
}
let excelData:any = get监管服务能力_RSU发送量();
ret["api1"] = getListOutData("RSU", excelData.RSU );
res.send(ret);
}
import { getKeyValueNumberOutData, getChartOutData, getKeyValueNotNumberOutData, getListOutData, getScatterFigureOutData, getStringOutData } from "../cal/out";
import { get监管服务能力_车辆测试总览 } from "../data/analysisExcelData";
export function getData(req, res) {
let ret:any = {};
import { getKeyValueNumberOutData, getChartOutData, getKeyValueNotNumberOutData, getListOutData, getScatterFigureOutData, getStringOutData } from "../cal/out";
import { get监管服务能力_车辆测试总览 } from "../data/analysisExcelData";
let excelData:any = get监管服务能力_车辆测试总览();
ret["api1"] = getChartOutData("每月测试里程和时长分布", excelData.每月测试里程和时长分布 );
ret["api2"] = getKeyValueNumberOutData("各企业违规次数", excelData.各企业违规次数 );
ret["api3"] = getKeyValueNumberOutData("企业脱离自动驾驶比率", excelData.企业脱离自动驾驶比率 );
ret["api4"] = getListOutData("测试车辆列表", excelData.测试车辆列表 );
res.send(ret);
}
\ No newline at end of file
//
export function getData(req, res) {
let ret:any = {};
let excelData:any = get监管服务能力_车辆测试总览();
ret["api1"] = getChartOutData("每月测试里程和时长分布", excelData.每月测试里程和时长分布 );
ret["api2"] = getKeyValueNumberOutData("各企业违规次数", excelData.各企业违规次数 );
ret["api3"] = getKeyValueNumberOutData("企业脱离自动驾驶比率", excelData.企业脱离自动驾驶比率 );
ret["api4"] = getListOutData("测试车辆列表", excelData.测试车辆列表 );
res.send(ret);
}
......@@ -3,6 +3,7 @@ import moment = require("moment");
import { getKeyValueNumberOutData, getChartOutData, getKeyValueNotNumberOutData, getListOutData, getScatterFigureOutData, getStringOutData } from "../cal/out";
import { get监管服务能力_企业测试分析 } from "../data/analysisExcelData";
//企业测试
export function getData(req, res) {
let ret:any = {};
......
import { getKeyValueNumberOutData, getChartOutData, getKeyValueNotNumberOutData, getListOutData, getScatterFigureOutData, getStringOutData } from "../cal/out";
import { get监管服务能力_视频 } from "../data/analysisExcelData";
export function getData(req, res) {
let ret:any = {};
import { getKeyValueNumberOutData, getChartOutData, getKeyValueNotNumberOutData, getListOutData, getScatterFigureOutData, getStringOutData } from "../cal/out";
import { get监管服务能力_视频 } from "../data/analysisExcelData";
//路侧监控视频
export function getData(req, res) {
let ret:any = {};
let excelData:any = get监管服务能力_视频();
ret["api1"] = getKeyValueNumberOutData("设备", excelData.设备 );
ret["api2"] = getKeyValueNotNumberOutData("视频", excelData.视频 );
res.send(ret);
}
let excelData:any = get监管服务能力_视频();
ret["api1"] = getKeyValueNumberOutData("设备", excelData.设备 );
ret["api2"] = getKeyValueNotNumberOutData("视频", excelData.视频 );
res.send(ret);
}
\ No newline at end of file
import { getKeyValueNumberOutData, getChartOutData, getKeyValueNotNumberOutData, getListOutData, getScatterFigureOutData, getStringOutData } from "../cal/out";
import { get监管服务能力_物理资源 } from "../data/analysisExcelData";
export function getData(req, res) {
let ret:any = {};
import { getKeyValueNumberOutData, getChartOutData, getKeyValueNotNumberOutData, getListOutData, getScatterFigureOutData, getStringOutData } from "../cal/out";
import { get监管服务能力_物理资源 } from "../data/analysisExcelData";
//物理资源 老版本,弃用
export function getData(req, res) {
let ret:any = {};
let excelData:any = get监管服务能力_物理资源();
ret["api1"] = getKeyValueNumberOutData("物理资源", excelData.物理资源 );
ret["api2"] = getKeyValueNumberOutData("设备型号", excelData.设备型号 );
ret["api3"] = getKeyValueNumberOutData("设备故障", excelData.设备故障 );
ret["api4"] = getChartOutData("每月故障趋势", excelData.每月故障趋势 );
res.send(ret);
}
let excelData:any = get监管服务能力_物理资源();
ret["api1"] = getKeyValueNumberOutData("物理资源", excelData.物理资源 );
ret["api2"] = getKeyValueNumberOutData("设备型号", excelData.设备型号 );
ret["api3"] = getKeyValueNumberOutData("设备故障", excelData.设备故障 );
ret["api4"] = getChartOutData("每月故障趋势", excelData.每月故障趋势 );
//物理资源
export function getInterfaceData(req, res) {
res.send(ret);
}
\ No newline at end of file
}
\ No newline at end of file
import { getKeyValueNumberOutData, getChartOutData, getKeyValueNotNumberOutData, getListOutData, getScatterFigureOutData, getStringOutData } from "../cal/out";
import { get监管服务能力_云资源 } from "../data/analysisExcelData";
export function getData(req, res) {
let ret:any = {};
import { getKeyValueNumberOutData, getChartOutData, getKeyValueNotNumberOutData, getListOutData, getScatterFigureOutData, getStringOutData } from "../cal/out";
import { get监管服务能力_云资源 } from "../data/analysisExcelData";
let excelData:any = get监管服务能力_云资源();
ret["api1"] = getKeyValueNumberOutData("云资源", excelData.云资源 );
ret["api2"] = getKeyValueNumberOutData("Pass", excelData.Pass );
ret["api3"] = getKeyValueNumberOutData("Default_Group", excelData.Default_Group );
ret["api4"] = getKeyValueNumberOutData("Gpu", excelData.Gpu );
ret["api5"] = getKeyValueNumberOutData("存储", excelData.存储 );
// ret["api6"] = getKeyValueNumberOutData("ECS实例1", excelData.ECS实例1 );
// ret["api7"] = getKeyValueNumberOutData("ECS实例2", excelData.ECS实例2 );
// ret["api8"] = getKeyValueNumberOutData("ECS实例3", excelData.ECS实例3 );
let ECS图例data = excelData.ECS图例;
let list = [];
for (let key in ECS图例data) {
list.push(ECS图例data[key]);
}
ret["api9"] = {title:"ECS图例", dataList: list };
//云资源
export function getData(req, res) {
let ret:any = {};
//getKeyValueNumberOutData("ECS图例", excelData.ECS图例 )
let 实例data = [
getKeyValueNumberOutData("ECS实例1", excelData.ECS实例1),
getKeyValueNumberOutData("ECS实例2", excelData.ECS实例2),
getKeyValueNumberOutData("ECS实例3", excelData.ECS实例3)
];
ret["api10"] = {name: "资源利用率", dataList: 实例data};
res.send(ret);
let excelData:any = get监管服务能力_云资源();
ret["api1"] = getKeyValueNumberOutData("云资源", excelData.云资源 );
ret["api2"] = getKeyValueNumberOutData("Pass", excelData.Pass );
ret["api3"] = getKeyValueNumberOutData("Default_Group", excelData.Default_Group );
ret["api4"] = getKeyValueNumberOutData("Gpu", excelData.Gpu );
ret["api5"] = getKeyValueNumberOutData("存储", excelData.存储 );
// ret["api6"] = getKeyValueNumberOutData("ECS实例1", excelData.ECS实例1 );
// ret["api7"] = getKeyValueNumberOutData("ECS实例2", excelData.ECS实例2 );
// ret["api8"] = getKeyValueNumberOutData("ECS实例3", excelData.ECS实例3 );
let ECS图例data = excelData.ECS图例;
let list = [];
for (let key in ECS图例data) {
list.push(ECS图例data[key]);
}
ret["api9"] = {title:"ECS图例", dataList: list };
//getKeyValueNumberOutData("ECS图例", excelData.ECS图例 )
let 实例data = [
getKeyValueNumberOutData("ECS实例1", excelData.ECS实例1),
getKeyValueNumberOutData("ECS实例2", excelData.ECS实例2),
getKeyValueNumberOutData("ECS实例3", excelData.ECS实例3)
];
ret["api10"] = {name: "资源利用率", dataList: 实例data};
res.send(ret);
}
//接口任务 定期更新
import * as request from 'request';
import { INTERFACEREQUESTTYPEENUM } from "../../config/enum";
import { BizError } from "../../util/bizError";
import { Config } from './interfaceConfig';
//初始化接口数据
export async function initInterfaceData() {
const InitTaskSuccess = await taskUpdate();
if (!InitTaskSuccess) throw new BizError("服务器启动失败: 初始化定时接口数据时出现问题 请检查目标服务器或本地请求配置");
const InitRealTimeSuccess = await initRealTime();
if (!InitRealTimeSuccess) throw new BizError("服务器启动失败: 初始化实时接口数据时出现问题 请检查目标服务器或本地请求配置");
console.log("初始化接口数据成功");
setInterval(() => {
taskUpdate();
}, 10000);
}
//异常接口 不更新数据
let errorInterfaceInfo = {};
//定时接口 数据更新情况
let updateInfo = {
"接口名称":{lastTime:0, updateUseTime:0},//使用时间是毫秒
};
//定时接口 缓存数据
let dataQueue = {};
async function taskUpdate() {
let thisTaskInfo = [];//此次任务
let defaultUseTime = 60000;
let thisTime = new Date().valueOf();
let initSuccess = true;
for (let interfaceName in Config) {
const LastReqError = errorInterfaceInfo[interfaceName];
if (LastReqError) {
console.log(`${interfaceName} 请求时出现过 ${LastReqError} 异常 保险起见此次更新不再请求`);
continue;
}
const ThisConfig = Config[interfaceName];
if (ThisConfig.type == INTERFACEREQUESTTYPEENUM.即时更新) continue;
let lastTaskInfo = updateInfo[interfaceName];
if ( !lastTaskInfo ) thisTaskInfo.push({name:defaultUseTime, useTime:defaultUseTime});
else if ( lastTaskInfo && (thisTime - lastTaskInfo) > ThisConfig.time ) {
thisTaskInfo.push({name:defaultUseTime, useTime:lastTaskInfo.updateUseTime});
}
defaultUseTime += 1;
}
thisTaskInfo.sort((a, b) => {return a.useTime - b.useTime});//耗时短的优先
for (let i = 0; i < thisTaskInfo.length; i++) { //更新数据
let {name} = thisTaskInfo[i];
const ThisConfig = Config[name];
const StartTime = new Date().valueOf();
let reqRes;
switch(ThisConfig.reqType) {
case "get": reqRes = await get(ThisConfig.url, ThisConfig.body, ThisConfig.header); break;
case "post": reqRes = await post(ThisConfig.url, ThisConfig.body, ThisConfig.header); break;
case "postForm": reqRes = await postForm(ThisConfig.url, ThisConfig.body); break;
}
const UseTime = new Date().valueOf() - StartTime;
if (reqRes.success) {
if (!updateInfo[name]) updateInfo[name] = {lastTime:thisTime, updateUseTime:UseTime};
else {
updateInfo[name].lastTime = thisTime;
updateInfo[name].updateUseTime = UseTime;
}
if (dataQueue[name]) delete dataQueue[name];
dataQueue[name] = JSON.stringify(reqRes.body);//放入缓存
} else {
let errorMsg = reqRes.message;
if (reqRes.message && reqRes.message.code == "ESOCKETTIMEDOUT") errorMsg = "超时";
console.log(`接口 ${name} 请求失败 失败原因${errorMsg}`);
if (["404", "503"].indexOf(errorMsg) > -1) { //下次不再请求
errorInterfaceInfo[name] = errorMsg;
}
initSuccess = false;
}
}
return initSuccess;
}
//即时数据缓存 当请求失败时会用到这里的数据
let realTimeDataQueue = {};
//即时数据初始化
async function initRealTime() {
let initSuccess = true;
for (let interfaceName in Config) {
const ThisConfig = Config[interfaceName];
if (ThisConfig.type == INTERFACEREQUESTTYPEENUM.定时更新) continue;
let reqRes;
switch(ThisConfig.reqType) {
case "get": reqRes = await get(ThisConfig.url, ThisConfig.body, ThisConfig.header); break;
case "post": reqRes = await post(ThisConfig.url, ThisConfig.body, ThisConfig.header); break;
case "postForm": reqRes = await postForm(ThisConfig.url, ThisConfig.body); break;
}
if (!reqRes.success) {
console.log(`${interfaceName} 接口请求失败 请求地址为 ${ThisConfig.url} 失败原因 ${reqRes.message}`);
initSuccess = false;
}
realTimeDataQueue[interfaceName] = reqRes.data;
}
return initSuccess;
}
export async function getInterfaceByInterfaceName(name, body?, header?) {
const ThisConfig = Config[name];
let data:any;
if (ThisConfig.type == INTERFACEREQUESTTYPEENUM.即时更新) {
let reqRes;
let reqBody = Object.assign( ThisConfig.body|| {}, body || {});
let reqHeader = Object.assign( ThisConfig.header|| {}, header || {});
switch(ThisConfig.reqType) {
case "get": reqRes = await get(ThisConfig.url, reqBody, reqHeader); break;
case "post": reqRes = await post(ThisConfig.url, reqBody, reqHeader); break;
case "postForm": reqRes = await postForm(ThisConfig.url, reqBody ); break;
}
if (reqRes.success) {
data = reqRes.data;
} else {
data = realTimeDataQueue[name];
}
} else data = dataQueue[name];
return data;
}
function get(url:string, query?, headers?, timeOut?) {
timeOut = timeOut || 5000;
if (!url || (url.search(/http:/) && url.search(/https:/)) ) throw new BizError(!url ? "请求地址为空" : "请求地址错误");
return new Promise((resolve, reject)=>{
let paramater:any = { url, json:true, timeout:timeOut };
if (query) paramater.qs = query;
if (headers) paramater.headers = headers;
request.get(paramater, function (err, res, data) {
const success = !err && res && res.statusCode == 200;
let message = err || res.statusCode || "";
resolve({success, message, data});
})
})
}
function post(url, body, headers) {
if (!url || (url.search(/http:/) && url.search(/https:/)) ) throw new BizError(!url ? "请求地址为空" : "请求地址错误");
let header = {"content-type": "application/json"};
return new Promise((resolve, reject)=>{
request({
url: url,
method: "POST",
json: true,
headers: Object.assign(header, headers),
body: body
}, function(err, res, data) {
const success = !err && res && res.statusCode == 200;
let message = err || res.statusCode || "";
resolve({success, message, data});
});
})
}
function postForm(url, body) {
if (!url || (url.search(/http:/) && url.search(/https:/)) ) throw new BizError(!url ? "请求地址为空" : "请求地址错误");
return new Promise((resolve, reject)=>{
request({
url: url,
method: "POST",
json: true,
form:body
}, function(err, res, data) {
const success = !err && res && res.statusCode == 200;
let message = err || res.statusCode || "";
resolve({success, message, data});
});
})
}
import { separateDataAndUint } from "../../cal/privateTools";
import { getInterfaceByInterfaceName } from "./cronJob";
export async function getCsfx() {
let interfaceName = "测试分析";
// let {monthlyTestMileageDistribution, monthlyTestDurationDistribution, enterpriseTestMileageDistribution, enterpriseTestDurationDistribution, enterpriseDisengagementAutopilotRatio} = await getInterfaceByInterfaceName(interfaceName, {});
let a = {
test:[
{
time:"2020.11",
milage:"320km"
},
{
time:"2020.12",
milage:"80km"
}
],
functionalTest:[
{
time:"2020.11",
milage:"320km"
},
{
time:"2020.11",
milage:"320km"
}
]
}
let atest = a.test;
let afunctionalTest = a.functionalTest;
console.log(afunctionalTest)
for (let i = 0; i < atest.length; i++) {
let {time, milage} = atest[i];
}
return {a};
}
function getKeyValueUnit(data) {
let result = [];
for (let i = 0; i < data.length; i++) {
let dataTodayData = data[i];
let key = dataTodayData.name;
let value = dataTodayData.value;
let {dataNum, dataUnit} = separateDataAndUint(value);
result.push({key, value, unit: dataUnit});
}
return result;
}
\ No newline at end of file
import { separateDataAndUint } from "../../cal/privateTools";
import { getInterfaceByInterfaceName } from "./cronJob";
export async function getCsgk() {
let interfaceName = "测试概况";
let {basicData, dataToday, testToday, functionalTestToday, testLicense, roadsideSurveillanceVideo} = await getInterfaceByInterfaceName(interfaceName, {});
let basicInfo = [];//测试概况基础数据
for (let i = 0; i < basicData.length; i++) {
let dataTodayData = basicData[i];
let key = dataTodayData.name;
let value = dataTodayData.value;
let testName = ["测试企业数", "企业牌照数", "测试总里程", "测试总时长", "功能测试总里程", "功能测试总时长"]
let {dataNum, dataUnit} = separateDataAndUint(value);
for (let j = 0; j < testName.length; j++) {
if (key == testName[j]) {
let img = j+1 + ".png";
basicInfo.push({key, value, img, unit: dataUnit});
}
}
}
let dataTodayInfo = getKeyValueUnit(dataToday); //今日数据
let testTodayInfo = getKeyValueUnit(testToday); //今日测试
let functionalTestTodayInfo = getKeyValueUnit(functionalTestToday); //今日功能测试
let testLicenseInfo = getKeyValueUnit(testLicense); //测试牌照发布
//路侧监控视频
return {basicInfo, dataTodayInfo, testTodayInfo, functionalTestTodayInfo, testLicenseInfo};
}
function getKeyValueUnit(data) {
let result = [];
for (let i = 0; i < data.length; i++) {
let dataTodayData = data[i];
let key = dataTodayData.name;
let value = dataTodayData.value;
let {dataNum, dataUnit} = separateDataAndUint(value);
result.push({key, value, unit: dataUnit});
}
return result;
}
\ No newline at end of file
import { INTERFACEREQUESTTYPEENUM } from "../../config/enum";
//配置
// "接口名称":{
// type:"1是即时更新 2是即时更新 使用 INTERFACErEQUESTTYPEENUM",
// time:"更新频率毫秒 例如1小时这里就是 3600000",
// url:"url地址",
// reqType:"get还是post get = get post = post",
// header:{},
// body:{}
// }
export const Config = {
"测试概况": {type: INTERFACEREQUESTTYPEENUM.即时更新, time: 3600000*24, url: "", reqType: "post", header: {}, body: {}},
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment