Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
M
motorCity
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
node_server
motorCity
Commits
f757148c
Commit
f757148c
authored
Aug 24, 2022
by
lixinming
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
no message
parent
caef2e79
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
160 additions
and
24 deletions
+160
-24
serverConfig.xml
serverConfig.xml
+5
-0
data.ts
src/biz/jgfwnl/data.ts
+6
-5
wsData.ts
src/biz/jgfwnl/wsData.ts
+75
-3
serverConfig.ts
src/config/serverConfig.ts
+13
-1
interfaceService.ts
src/data/interface/interfaceService.ts
+21
-10
wsData.ts
src/data/interface/wsData.ts
+21
-3
main.ts
src/main.ts
+19
-2
No files found.
serverConfig.xml
View file @
f757148c
...
...
@@ -5,6 +5,8 @@
<leftView>
<cloudResource>
http://10.51.50.140:8080/api/static/PrivateCloudUsageStatics
</cloudResource>
<physicalResource>
http://10.51.50.140:8080/api/v1/PrivateCloudCurrentUsages
</physicalResource>
<!-- <cloudResource>http://192.168.0.27:8080/api/static/PrivateCloudUsageStatics</cloudResource>
<physicalResource>http://192.168.0.27:8080/api/v1/PrivateCloudCurrentUsages</physicalResource> -->
</leftView>
<mapView>
<mapPort>
http://10.51.48.213/nlink/v2/getAllDevicesInfo?prjid=0255e1f7515348cc87c7bb2cc6341fer
</mapPort>
...
...
@@ -12,4 +14,7 @@
<broken>
3
</broken>
<token>
09a98bc555474e058ef90b6cc6e23638
</token>
</mapView>
<imagePath>
192.168.0.100
</imagePath>
</config>
src/biz/jgfwnl/data.ts
View file @
f757148c
import
{
getChartOutData
,
getKeyValueNumberOutData
,
getListOutData
}
from
"../../cal/out"
;
import
{
separateDataAndUint
}
from
"../../cal/privateTools"
;
import
{
getImageIp
,
port
}
from
"../../config/serverConfig"
;
import
{
getHardware
}
from
"../../data/interface/hardwareData"
;
import
{
getCsgkData
,
getDetachmentRatio
,
getTestAnalysis
,
getTestTotalTime
}
from
"../../data/interface/interfaceService"
;
import
{
getMap
}
from
"../../data/interface/mapInterfaceData"
;
...
...
@@ -10,15 +11,15 @@ import { getOnlieCarCount } from "../../data/interface/wsData";
export
async
function
getYZY
(
req
,
res
)
{
let
ret
:
any
=
{};
//
let {计算云资源, 使用率, 物理资源} = await getHardware();
let
{
计算云资源
,
使用率
,
物理资源
}
=
await
getHardware
();
let
计算云资源
=
{
"cpu"
:
"3568核"
,
"内存"
:
"4000G"
,
"本地磁盘"
:
"1999G"
,
"云磁盘总量"
:
"848484G"
};
//
let 计算云资源 = {"cpu":"3568核", "内存":"4000G", "本地磁盘":"1999G", "云磁盘总量":"848484G"};
ret
[
"api1"
]
=
getKeyValueNumberOutData
(
"计算云资源"
,
计算云资源
);
let
使用率
=
{
"CPU"
:
"63.9%"
,
"内存"
:
"30.4%"
,
"本地磁盘"
:
"29.6%"
,
"云磁盘cds ssd池"
:
"23%"
,
"云磁盘cds sata池"
:
"73%"
,
"对象存储"
:
"73.83%"
};
//
let 使用率 = {"CPU":"63.9%", "内存":"30.4%", "本地磁盘":"29.6%", "云磁盘cds ssd池":"23%", "云磁盘cds sata池":"73%", "对象存储":"73.83%"};
ret
[
"api2"
]
=
getKeyValueNumberOutData
(
"计算云资源使用率"
,
使用率
);
let
物理资源
=
{
"物理机"
:
"100台"
,
"网络设备"
:
"34台"
,
"安全设备"
:
"4台"
,
"机柜"
:
"16台"
};
//
let 物理资源 = {"物理机":"100台", "网络设备":"34台", "安全设备":"4台", "机柜":"16台"};
ret
[
"api3"
]
=
getKeyValueNumberOutData
(
"物理资源"
,
物理资源
);
res
.
send
(
ret
);
...
...
@@ -34,7 +35,7 @@ export async function getCSGK(req, res) {
result
.
forEach
((
info
,
index
)
=>
{
let
{
key
,
value
}
=
info
;
let
{
dataNum
,
dataUnit
}
=
separateDataAndUint
(
value
);
基础数据
Info
.
push
({
key
,
value
:
dataNum
,
unit
:
dataUnit
,
icon
:
`http://
192.168.0.105:30001
/csgk/
${
index
+
1
}
.png`
});
基础数据
Info
.
push
({
key
,
value
:
dataNum
,
unit
:
dataUnit
,
icon
:
`http://
${
getImageIp
()}
:
${
port
}
/csgk/
${
index
+
1
}
.png`
});
});
ret
[
"api1"
]
=
({
title
:
"基础数据"
,
dataList
:
基础数据
Info
});
...
...
src/biz/jgfwnl/wsData.ts
View file @
f757148c
import
{
initWSData
}
from
"../../data/interface/wsData"
;
import
{
Socket
}
from
"../../net/socket_server"
;
//连接池
let
connectionPool
=
{};
//数据池
let
dataQueue
=
[];
//广播消息
export
async
function
sendMsg
(
data
)
{
dataQueue
.
push
(
data
);
for
(
let
key
in
connectionPool
)
{
let
result
=
{
code
:
200
,
success
:
true
,
data
}
try
{
connectionPool
[
key
].
send
(
JSON
.
stringify
(
result
));
}
catch
(
err
)
{
console
.
log
(
"广播消息失败:"
,
err
);
}
}
}
...
...
@@ -25,10 +33,42 @@ export async function initSocketServer(port) {
console
.
log
(
"连接成功 => userId:"
,
ip
);
connectionPool
[
ip
]
=
ws
;
ws
.
on
(
'message'
,
function
(
data
)
{
//回应心跳包
if
(
data
==
'i am heart'
)
ws
.
send
(
JSON
.
stringify
({
success
:
true
,
code
:
199
}));
});
ws
.
on
(
'close'
,
function
(
data
){
if
(
ws
.
_socket
&&
ws
.
_socket
.
_peername
&&
ws
.
_socket
.
_peername
.
address
)
{
let
userId
=
ws
.
_socket
.
_peername
.
address
;
console
.
log
(
"close"
,
userId
,
data
);
delete
connectionPool
[
userId
];
}
});
console
.
log
(
'发送初始化车辆:'
,
dataQueue
.
length
,
'辆'
);
dataQueue
.
forEach
(
info
=>
{
ws
.
send
(
JSON
.
stringify
({
code
:
200
,
success
:
true
,
data
:
info
}));
});
});
console
.
log
(
'socket server listen on port:'
,
port
);
});
}
//测试服务
let
testQueue
;
export
async
function
initSocketServertest
(
port
)
{
Socket
.
createServer
(
port
,
function
(
wss
)
{
wss
.
on
(
'connection'
,
function
(
ws
,
req
)
{
let
ip
=
analysisUserUrl
(
req
);
console
.
log
(
"连接成功 => userId:"
,
ip
);
testQueue
=
ws
;
ws
.
on
(
'message'
,
function
(
data
)
{
//回应心跳包
console
.
log
(
data
);
console
.
log
(
ws
);
if
(
data
==
'i am heart'
)
ws
.
send
(
'{success:true, code:199}'
);
});
...
...
@@ -45,3 +85,34 @@ export async function initSocketServer(port) {
console
.
log
(
'socket server listen on port:'
,
port
);
});
}
export
function
callTestServer
(
num
)
{
let
latitude
=
31.177747
;
let
longitude
=
121.611986
;
let
testData
=
{
"accLat"
:
0.08
,
"accLong"
:
1.542
,
"acceleration"
:
0
,
//加速度
"altitude"
:
-
3276
,
//海拔高度
"canRecvTime"
:
1660285379691
,
//接收数据时间
"direction"
:
0
,
//方向
"drivemode"
:
0
,
//驾驶模式
"latitude"
:
31.177747
,
"longitude"
:
121.611986
,
"mileage"
:
12
,
"positiontime"
:
0
,
"vehicleid"
:
""
,
"velocity"
:
13
,
"vin"
:
"LSJE24090MS029920"
}
for
(
let
i
=
1
;
i
<=
100
;
i
++
)
{
let
addData
=
JSON
.
parse
(
JSON
.
stringify
(
testData
))
addData
.
vehicleid
=
''
+
i
;
addData
.
latitude
=
latitude
+
(
num
*
i
*
(
1
/
100000
));
addData
.
longitude
=
longitude
+
(
num
*
i
*
(
1
/
100000
));
console
.
log
(
num
+
"-"
+
i
+
' log:'
+
addData
.
longitude
+
' lat: '
+
addData
.
latitude
);
testQueue
.
send
(
JSON
.
stringify
(
addData
));
}
}
\ No newline at end of file
src/config/serverConfig.ts
View file @
f757148c
...
...
@@ -3,6 +3,7 @@ import * as fs from "fs";
import
{
BizError
,
SysError
}
from
"../util/bizError"
;
import
{
analysisXml
}
from
"../util/myXML"
;
import
{
SYSTEMERRORENUM
}
from
"./errorEnum"
;
const
os
=
require
(
'os'
);
export
let
port
;
export
let
socketPort
;
...
...
@@ -17,6 +18,8 @@ export let appConfig = {
export
let
mongoServerConstVal
;
export
let
mySqlConfig
;
let
imagePathConfig
=
""
;
const
ConfigName
=
"serverConfig.xml"
;
export
async
function
initConfig
()
{
try
{
...
...
@@ -25,7 +28,7 @@ export async function initConfig() {
let
configInfo
:
any
=
await
analysisXml
(
configStr
);
if
(
!
configInfo
||
!
configInfo
.
config
)
console
.
log
(
"xml中无配置加载"
);
else
{
let
{
portConfig
,
socketPortConfig
,
rightView
,
leftView
,
mapView
}
=
configInfo
.
config
;
let
{
portConfig
,
socketPortConfig
,
rightView
,
leftView
,
mapView
,
imagePath
}
=
configInfo
.
config
;
if
(
!
getConf
(
portConfig
))
throw
new
SysError
(
SYSTEMERRORENUM
.
初始化配置失败
,
'serverConfig.xml中 缺少 port'
);
if
(
!
getConf
(
socketPortConfig
))
throw
new
SysError
(
SYSTEMERRORENUM
.
初始化配置失败
,
'serverConfig.xml中 缺少 sockentPort'
);
if
(
!
getConf
(
rightView
))
throw
new
SysError
(
SYSTEMERRORENUM
.
初始化配置失败
,
'serverConfig.xml中 缺少 rightView'
);
...
...
@@ -36,6 +39,8 @@ export async function initConfig() {
throw
new
SysError
(
SYSTEMERRORENUM
.
初始化配置失败
,
'serverConfig.xml中 缺少 mapView 或 online || broken || token'
);
}
if
(
!
getConf
(
imagePath
)
)
throw
new
SysError
(
SYSTEMERRORENUM
.
初始化配置失败
,
'serverConfig.xml中 缺少 imagePath'
);
port
=
portConfig
[
0
];
socketPort
=
socketPortConfig
[
0
];
//左屏
...
...
@@ -48,6 +53,8 @@ export async function initConfig() {
appConfig
.
mapPort
=
mapView
[
0
].
mapPort
[
0
]
+
"&online="
+
online
+
"&broken="
+
broken
+
"&token="
+
token
||
appConfig
.
mapPort
;
//右屏接口
appConfig
.
rightView
=
rightView
[
0
];
//图片地址
imagePathConfig
=
imagePath
[
0
];
}
console
.
log
(
"config init success"
);
...
...
@@ -57,6 +64,11 @@ export async function initConfig() {
}
}
//获取内网地址
export
function
getImageIp
()
{
return
imagePathConfig
;
}
function
getConf
(
conf
,
index
=
0
)
{
if
(
!
conf
||
!
conf
[
index
])
return
false
;
...
...
src/data/interface/interfaceService.ts
View file @
f757148c
import
moment
=
require
(
"moment"
)
import
{
ERRORENUM
,
SYSTEMERRORENUM
}
from
"../../config/errorEnum"
;
import
{
appConfig
}
from
"../../config/serverConfig"
;
import
{
appConfig
,
getImageIp
,
port
}
from
"../../config/serverConfig"
;
import
{
BizError
,
SysError
}
from
"../../util/bizError"
;
import
{
get
}
from
"../../util/request"
;
// {key:"2021.01", count:"31km", autoCount:"45km"}, {key:"2021.02", count:"42km", autoCount:"75km"}, {key:"2020.02", count:"42km", autoCount:"75km"}, {key:"2022.08", count:"42km", autoCount:"75km"}
...
...
@@ -79,8 +79,8 @@ async function getTestLicense() {
测试牌照分布
.
forEach
(
item
=>
{
let
{
enterprise
,
cnt
}
=
item
;
let
imgItem
=
`http://
192.168.0.105:30001
/img/
${
enterprise
}
.png`
;
测试牌照分布
data
[
imgItem
]
=
cnt
;
let
imgItem
=
`http://
${
getImageIp
()}
:
${
port
}
/img/
${
enterprise
}
.png`
;
测试牌照分布
data
[
imgItem
]
=
cnt
+
"辆"
;
测试牌照数
+=
cnt
;
})
...
...
@@ -153,9 +153,11 @@ export async function getTestDurationDistribution() {
export
async
function
getCsgkData
()
{
let
{
总测试时长
}
=
await
getTestDurationDistribution
();
let
{
总测试时长
,
月时长数据
}
=
await
getTestDurationDistribution
();
let
{
测试牌照分布
data
,
测试牌照数
,
测试企业数
}
=
await
getTestLicense
();
月时长数据
.
sort
((
a
,
b
)
=>
{
return
parseInt
(
b
.
time
)
-
parseInt
(
a
.
time
)
});
let
测试总里程
=
0
;
let
功能测试总里程
=
0
;
for
(
let
key
in
企业日里程数据
)
{
...
...
@@ -168,15 +170,19 @@ export async function getCsgkData() {
let
nowDate
=
moment
().
format
(
'DD'
);
let
lastDate
=
moment
().
subtract
(
1
,
'days'
).
format
(
'DD'
);
let
thisMonthsTestTimeData
=
月时长数据
[
0
]
||
{
autoDurationTotal
:
0
,
durationTotal
:
0
};
let
avgAutoTime
=
Math
.
ceil
(
(
thisMonthsTestTimeData
.
autoDurationTotal
/
new
Date
().
getDate
()
)
*
10
)
/
10
;
let
testTime
=
Math
.
ceil
(
(
thisMonthsTestTimeData
.
durationTotal
/
new
Date
().
getDate
()
)
*
10
)
/
10
;
let
今日数据
=
{
"在线车辆数"
:
""
}
let
今日测试
=
{
"里程"
:
0
,
"时长"
:
""
};
let
今日测试
=
{
"里程"
:
"0Km"
,
"时长"
:
testTime
+
'h'
};
let
今日功能测试
=
{
"里程"
:
0
,
"时长"
:
""
}
let
今日功能测试
=
{
"里程"
:
"0Km"
,
"时长"
:
avgAutoTime
+
'h'
};
if
(
nowDate
==
'01'
)
{
//一号拿昨日数据跨月份
今日测试
.
里程
=
monthsLastData
.
count
;
今日功能测试
.
里程
=
monthsLastData
.
autoCount
;
今日测试
.
里程
=
monthsLastData
.
count
+
"Km"
;
今日功能测试
.
里程
=
monthsLastData
.
autoCount
+
"Km"
;
}
let
testList
=
await
getInterfaceData
(
startTime
,
endTime
,
1
);
...
...
@@ -186,7 +192,7 @@ export async function getCsgkData() {
let
intTotalMileage
=
parseInt
(
totalMileage
);
测试总里程
+=
intTotalMileage
;
if
(
nowDate
!=
'01'
&&
timeDay
==
lastDate
)
{
今日测试
.
里程
=
intTotalMileage
;
今日测试
.
里程
=
intTotalMileage
+
"Km"
;
}
});
...
...
@@ -198,10 +204,15 @@ export async function getCsgkData() {
功能测试总里程
+=
intAutoMileage
;
if
(
nowDate
!=
'01'
&&
timeDay
==
lastDate
)
{
今日功能测试
.
里程
=
intAutoMileage
;
今日功能测试
.
里程
=
intAutoMileage
+
"Km"
;
}
});
if
(
今日测试
.
里程
==
"0Km"
)
{
今日测试
.
时长
=
"0h"
;
今日功能测试
.
时长
=
"0h"
;
}
let
result
=
[
{
key
:
"测试企业数"
,
value
:
测试企业数
+
"家"
},
{
key
:
"企业牌照数"
,
value
:
测试牌照数
+
"个"
},
...
...
src/data/interface/wsData.ts
View file @
f757148c
import
*
as
WebSocket
from
"ws"
import
{
sendMsg
}
from
"../../biz/jgfwnl/wsData"
;
import
{
logConsole
,
logHandle
}
from
"../../util/log"
;
//连接锁
let
lockReconnect
=
false
;
...
...
@@ -63,6 +64,7 @@ let heart = {
//ws客户端
async
function
createSocket
()
{
let
path
=
"ws://10.51.50.136:8090/ws/v1"
;
// let path = "ws://192.168.0.105:9797"
let
ws
=
new
WebSocket
(
path
,
{
perMessageDeflate
:
false
});
...
...
@@ -79,7 +81,7 @@ async function createSocket() {
ws
.
onmessage
=
(
msg
)
=>
{
//接收数据
heart
.
start
(
ws
);
stats
(
msg
);
stats
(
msg
.
data
);
}
ws
.
onerror
=
(
error
)
=>
{
...
...
@@ -98,11 +100,27 @@ export async function initWSData() {
//在线车辆
let
distinctMap
=
{};
//{id:1}
let
carData
=
{};
//
export
function
stats
(
data
)
{
let
{
vehicleid
,
latitude
,
longitude
}
=
data
;
let
dataType
=
typeof
data
;
if
(
dataType
==
'object'
)
{
console
.
log
(
data
);
}
else
if
(
dataType
==
"string"
)
{
try
{
let
dataJson
=
JSON
.
parse
(
data
);
let
{
vehicleid
,
latitude
,
longitude
}
=
dataJson
;
distinctMap
[
vehicleid
]
=
1
;
sendMsg
({
lng
:
longitude
||
0.0
,
lat
:
latitude
||
0.0
,
vehicleid
});
}
catch
(
err
)
{
console
.
log
(
data
);
logHandle
(
"ws 返回数据不是json"
+
data
)
//todo 加日志
}
}
//其他格式数据抛弃
sendMsg
({
lng
:
longitude
,
lat
:
latitude
,
vehicleid
});
}
export
function
getOnlieCarCount
()
{
...
...
src/main.ts
View file @
f757148c
import
{
initSocketServer
}
from
"./biz/jgfwnl/wsData"
;
import
{
callTestServer
,
initSocketServer
,
initSocketServertest
}
from
"./biz/jgfwnl/wsData"
;
import
{
initConfig
,
port
,
socketPort
}
from
"./config/serverConfig"
;
import
{
initData
}
from
"./data/interface/interfaceService"
;
import
{
getCsgkData
,
initData
}
from
"./data/interface/interfaceService"
;
import
{
initWSData
}
from
"./data/interface/wsData"
;
import
{
httpServer
}
from
"./net/http_server"
;
async
function
lanuch
()
{
console
.
log
(
"测试服务启动成功 9797"
);
await
initConfig
();
//初始化配置解析
httpServer
.
createServer
(
port
);
await
initSocketServer
(
socketPort
);
await
initData
();
await
initWSData
();
console
.
log
(
'This indicates that the server is started successfully.'
);
}
//test 模拟数据
async
function
test
()
{
let
i
=
1
;
setInterval
(
function
()
{
callTestServer
(
i
);
i
++
;
if
(
i
==
30
)
i
=
1
;
},
200
)
}
lanuch
();
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment