|
|
@ -108,6 +108,7 @@ async function groupStatistic (ctx) { |
|
|
|
const { models } = ctx.fs.dc; |
|
|
|
const { userId } = ctx.fs.api |
|
|
|
const { clickHouse } = ctx.app.fs |
|
|
|
const { utils: { judgeSuper, anxinStrucIdRange } } = ctx.app.fs |
|
|
|
const sequelize = ctx.fs.dc.orm |
|
|
|
|
|
|
|
const progectGroupList = await models.ProjectGroup.findAll({ |
|
|
@ -140,18 +141,46 @@ async function groupStatistic (ctx) { |
|
|
|
} |
|
|
|
let anxinProjectIdArr = Array.from(anxinProjectIds) |
|
|
|
|
|
|
|
// 统计安心云项目下的结构物id
|
|
|
|
const strucIdRes = await clickHouse.anxinyun.query( |
|
|
|
// 统计安心云项目下的结构物
|
|
|
|
const strucRes = anxinProjectIdArr.length ? await clickHouse.anxinyun.query( |
|
|
|
` |
|
|
|
SELECT * |
|
|
|
FROM t_project_structure |
|
|
|
WHERE project IN (${[...anxinProjectIdArr].join(',')}, -1) |
|
|
|
` |
|
|
|
).toPromise() |
|
|
|
SELECT |
|
|
|
t_project.id AS projectId, |
|
|
|
t_structure.id AS strucId, |
|
|
|
t_structure.name AS strucName, |
|
|
|
project_state |
|
|
|
FROM |
|
|
|
t_project |
|
|
|
LEFT JOIN |
|
|
|
t_project_structure |
|
|
|
ON t_project_structure.project = t_project.id |
|
|
|
LEFT JOIN |
|
|
|
t_project_structuregroup |
|
|
|
ON t_project_structuregroup.project = t_project.id |
|
|
|
LEFT JOIN |
|
|
|
t_structuregroup_structure |
|
|
|
ON t_structuregroup_structure.structuregroup = t_project_structuregroup.structuregroup |
|
|
|
LEFT JOIN |
|
|
|
t_project_construction |
|
|
|
ON t_project_construction.project = t_project.id |
|
|
|
LEFT JOIN |
|
|
|
t_structure_site |
|
|
|
ON t_structure_site.siteid = t_project_construction.construction |
|
|
|
RIGHT JOIN |
|
|
|
t_structure |
|
|
|
ON t_structure.id = t_project_structure.structure |
|
|
|
OR t_structure.id = t_structuregroup_structure.structure |
|
|
|
OR t_structure.id = t_structure_site.structid |
|
|
|
WHERE |
|
|
|
project_state != -1 |
|
|
|
AND |
|
|
|
t_project.id IN (${anxinProjectIdArr.join(',')},-1) |
|
|
|
` |
|
|
|
).toPromise() : [] |
|
|
|
|
|
|
|
let strucIds = new Set() |
|
|
|
for (let struc of strucIdRes) { |
|
|
|
strucIds.add(struc.structure) |
|
|
|
for (let struc of strucRes) { |
|
|
|
strucIds.add(struc.strucId) |
|
|
|
} |
|
|
|
|
|
|
|
let strucIdArr = Array.from(strucIds) |
|
|
@ -175,7 +204,7 @@ async function groupStatistic (ctx) { |
|
|
|
for (let pg of progectGroupList) { |
|
|
|
let strucCount = 0 |
|
|
|
let maxOffLineTime = 0 |
|
|
|
let todayAlarms=0 |
|
|
|
let todayAlarms = 0 |
|
|
|
let anxinProjectCount = groupProjectRes.reduce((count, gp) => { |
|
|
|
if (pg.pomsProjectIds.some(id => gp.id == id)) { |
|
|
|
// 如果 pg 分组信息 存储的 pomsProjectIds 运维项目id 和 真正的 groupProjectRes 运维项目id 相等
|
|
|
@ -183,16 +212,16 @@ async function groupStatistic (ctx) { |
|
|
|
count += gp.anxinProjectId.length |
|
|
|
//
|
|
|
|
let strucIdArr_ = |
|
|
|
strucIdRes.filter(s => gp.anxinProjectId.includes(s.project)) |
|
|
|
strucRes.filter(s => gp.anxinProjectId.includes(s.projectId)) |
|
|
|
strucCount += strucIdArr_.length |
|
|
|
//所有结构物的告警
|
|
|
|
const ss=alarmRes.filter(p=>strucIdArr_.some(q=>q.structure==p.StructureId)) |
|
|
|
todayAlarms= ss.reduce((p,c)=>{ |
|
|
|
return p+c.alarmCount |
|
|
|
},0) |
|
|
|
const ss = alarmRes.filter(p => strucIdArr_.some(q => q.structure == p.StructureId)) |
|
|
|
todayAlarms = ss.reduce((p, c) => { |
|
|
|
return p + c.alarmCount |
|
|
|
}, 0) |
|
|
|
//
|
|
|
|
for (let { dataValues: off } of deviceOffTimeRes) { |
|
|
|
if (strucIdArr_.some((s) => s.structure == off.structure)) { |
|
|
|
if (strucIdArr_.some((s) => s.strucId == off.structure)) { |
|
|
|
if (off.offline > maxOffLineTime) { |
|
|
|
maxOffLineTime = off.offline |
|
|
|
} |
|
|
@ -243,25 +272,49 @@ async function groupStatisticOnline (ctx) { |
|
|
|
anxinProjectIds.add(pid) |
|
|
|
} |
|
|
|
|
|
|
|
const strucIdRes = await clickHouse.anxinyun.query( |
|
|
|
` |
|
|
|
SELECT * |
|
|
|
FROM t_project_structure |
|
|
|
WHERE project IN (${[...anxinProjectIds].join(',')}, -1) |
|
|
|
// 统计安心云项目下的结构物
|
|
|
|
const strucRes = anxinProjectIds.length ? await clickHouse.anxinyun.query( |
|
|
|
` |
|
|
|
).toPromise() |
|
|
|
SELECT |
|
|
|
t_project.id AS projectId, |
|
|
|
t_structure.id AS id, |
|
|
|
t_structure.name AS name, |
|
|
|
project_state |
|
|
|
FROM |
|
|
|
t_project |
|
|
|
LEFT JOIN |
|
|
|
t_project_structure |
|
|
|
ON t_project_structure.project = t_project.id |
|
|
|
LEFT JOIN |
|
|
|
t_project_structuregroup |
|
|
|
ON t_project_structuregroup.project = t_project.id |
|
|
|
LEFT JOIN |
|
|
|
t_structuregroup_structure |
|
|
|
ON t_structuregroup_structure.structuregroup = t_project_structuregroup.structuregroup |
|
|
|
LEFT JOIN |
|
|
|
t_project_construction |
|
|
|
ON t_project_construction.project = t_project.id |
|
|
|
LEFT JOIN |
|
|
|
t_structure_site |
|
|
|
ON t_structure_site.siteid = t_project_construction.construction |
|
|
|
RIGHT JOIN |
|
|
|
t_structure |
|
|
|
ON t_structure.id = t_project_structure.structure |
|
|
|
OR t_structure.id = t_structuregroup_structure.structure |
|
|
|
OR t_structure.id = t_structure_site.structid |
|
|
|
WHERE |
|
|
|
project_state != -1 |
|
|
|
AND |
|
|
|
t_project.id IN (${anxinProjectIds.join(',')},-1) |
|
|
|
` |
|
|
|
).toPromise() : [] |
|
|
|
|
|
|
|
let strucIds = new Set() |
|
|
|
for (let struc of strucIdRes) { |
|
|
|
strucIds.add(struc.structure) |
|
|
|
for (let struc of strucRes) { |
|
|
|
strucIds.add(struc.id) |
|
|
|
} |
|
|
|
let strucIdArr = Array.from(strucIds) |
|
|
|
|
|
|
|
const strucRes = strucIdArr.length ? await clickHouse.anxinyun.query( |
|
|
|
` |
|
|
|
SELECT name, id FROM t_structure WHERE id IN (${[...strucIdArr].join(',')}); |
|
|
|
` |
|
|
|
).toPromise() : [] |
|
|
|
|
|
|
|
// 查中断时间
|
|
|
|
const maxOfflineTimeRes = strucIdArr.length ? await models.StructureOff.findAll({ |
|
|
|
where: { |
|
|
@ -272,8 +325,6 @@ async function groupStatisticOnline (ctx) { |
|
|
|
|
|
|
|
// 查在线率
|
|
|
|
const strucOnlineClient = ctx.app.fs.esclient.strucOnline |
|
|
|
console.log('es参数,', strucOnlineClient.config) |
|
|
|
console.log('strucIdArr', strucIdArr) |
|
|
|
|
|
|
|
const onlineRes = await strucOnlineClient.search({ |
|
|
|
index: strucOnlineClient.config.index, |
|
|
@ -309,7 +360,6 @@ async function groupStatisticOnline (ctx) { |
|
|
|
"size": 10000 |
|
|
|
} |
|
|
|
}) |
|
|
|
console.log('es数据,', onlineRes.hits.hits.length, onlineRes.hits.hits) |
|
|
|
|
|
|
|
for (let struc of strucRes) { |
|
|
|
let curOnline = |
|
|
@ -362,27 +412,50 @@ async function groupStatisticAlarm (ctx) { |
|
|
|
anxinProjectIds.add(pid) |
|
|
|
} |
|
|
|
|
|
|
|
const strucIdRes = anxinProjectIds.size ? await clickHouse.anxinyun.query( |
|
|
|
` |
|
|
|
SELECT * |
|
|
|
FROM t_project_structure |
|
|
|
WHERE project IN (${[...anxinProjectIds].join(',')}, -1) |
|
|
|
// 统计安心云项目下的结构物
|
|
|
|
const strucRes = anxinProjectIds.length ? await clickHouse.anxinyun.query( |
|
|
|
` |
|
|
|
SELECT |
|
|
|
t_project.id AS projectId, |
|
|
|
t_structure.id AS id, |
|
|
|
t_structure.name AS name, |
|
|
|
project_state |
|
|
|
FROM |
|
|
|
t_project |
|
|
|
LEFT JOIN |
|
|
|
t_project_structure |
|
|
|
ON t_project_structure.project = t_project.id |
|
|
|
LEFT JOIN |
|
|
|
t_project_structuregroup |
|
|
|
ON t_project_structuregroup.project = t_project.id |
|
|
|
LEFT JOIN |
|
|
|
t_structuregroup_structure |
|
|
|
ON t_structuregroup_structure.structuregroup = t_project_structuregroup.structuregroup |
|
|
|
LEFT JOIN |
|
|
|
t_project_construction |
|
|
|
ON t_project_construction.project = t_project.id |
|
|
|
LEFT JOIN |
|
|
|
t_structure_site |
|
|
|
ON t_structure_site.siteid = t_project_construction.construction |
|
|
|
RIGHT JOIN |
|
|
|
t_structure |
|
|
|
ON t_structure.id = t_project_structure.structure |
|
|
|
OR t_structure.id = t_structuregroup_structure.structure |
|
|
|
OR t_structure.id = t_structure_site.structid |
|
|
|
WHERE |
|
|
|
project_state != -1 |
|
|
|
AND |
|
|
|
t_project.id IN (${anxinProjectIds.join(',')},-1) |
|
|
|
` |
|
|
|
).toPromise() : [] |
|
|
|
|
|
|
|
let strucIds = new Set() |
|
|
|
for (let struc of strucIdRes) { |
|
|
|
strucIds.add(struc.structure) |
|
|
|
for (let struc of strucRes) { |
|
|
|
strucIds.add(struc.id) |
|
|
|
} |
|
|
|
let strucIdArr = Array.from(strucIds) |
|
|
|
|
|
|
|
const strucRes = strucIdArr.length ? await clickHouse.anxinyun.query( |
|
|
|
` |
|
|
|
SELECT name, id FROM t_structure WHERE id IN (${[...strucIdArr].join(',')}); |
|
|
|
` |
|
|
|
).toPromise() : [] |
|
|
|
|
|
|
|
// 查一周内超阈值告警的个数
|
|
|
|
// strucIdArr = [1]
|
|
|
|
const alarmRes = strucIdArr.length ? await clickHouse.dataAlarm.query( |
|
|
|
` |
|
|
|
SELECT StructureId,count(StructureId) AS alarmCount |
|
|
|