wuqun
2 years ago
3 changed files with 146 additions and 2 deletions
@ -0,0 +1,143 @@ |
|||||
|
const moment = require('moment') |
||||
|
|
||||
|
module.exports = function (app, opts) { |
||||
|
const alarmsPush = app.fs.scheduleInit( |
||||
|
{ |
||||
|
interval: '12 */1 * * * *', |
||||
|
immediate: true, // dev
|
||||
|
// proRun: true,
|
||||
|
}, |
||||
|
async () => { |
||||
|
try { |
||||
|
const { models, ORM: sequelize } = app.fs.dc |
||||
|
const { clickHouse } = app.fs |
||||
|
const { pushBySms, pushByEmail } = app.fs.utils |
||||
|
const curMinOfYear = moment().diff(moment().startOf('year'), 'minutes') |
||||
|
const configListRes = await models.AlarmPushConfig.findAll({ |
||||
|
where: { |
||||
|
del: false |
||||
|
}, |
||||
|
include: [{ |
||||
|
model: models.ProjectCorrelation, |
||||
|
where: { |
||||
|
del: false |
||||
|
}, |
||||
|
required: true |
||||
|
}] |
||||
|
}) |
||||
|
let pepProjectIds = new Set() |
||||
|
for (let { dataValues: c } of configListRes) { |
||||
|
if (c.projectCorrelation.pepProjectId) { |
||||
|
pepProjectIds.add(c.projectCorrelation.pepProjectId) |
||||
|
} |
||||
|
} |
||||
|
const pepProjectRes = pepProjectIds.size ? |
||||
|
await clickHouse.projectManage.query( |
||||
|
` |
||||
|
SELECT |
||||
|
t_pim_project.id AS id, |
||||
|
t_pim_project.project_name AS project_name, |
||||
|
t_pim_project.isdelete AS isdelete, |
||||
|
t_pim_project_construction.construction_status_id AS construction_status_id, |
||||
|
t_pim_project_state.construction_status AS construction_status |
||||
|
FROM t_pim_project |
||||
|
LEFT JOIN t_pim_project_construction |
||||
|
ON t_pim_project.id = t_pim_project_construction.project_id |
||||
|
LEFT JOIN t_pim_project_state |
||||
|
ON t_pim_project_construction.construction_status_id = t_pim_project_state.id |
||||
|
WHERE id IN (${[...pepProjectIds].join(',')}) |
||||
|
` |
||||
|
).toPromise() : |
||||
|
[] |
||||
|
|
||||
|
for (let { dataValues: c } of configListRes) { |
||||
|
if (c.tacticsParams && c.tactics) { |
||||
|
const { projectCorrelation } = c |
||||
|
const { interval, deviceProportion } = c.tacticsParams |
||||
|
|
||||
|
if ( |
||||
|
curMinOfYear % interval == 0 |
||||
|
) { |
||||
|
const corPepProject = projectCorrelation.pepProjectId ? |
||||
|
pepProjectRes.find(p => p.id == projectCorrelation.pepProjectId) |
||||
|
: null |
||||
|
if ( |
||||
|
!projectCorrelation.pepProjectId |
||||
|
|| ( |
||||
|
corPepProject |
||||
|
&& c.timeType.some(ct => ct == corPepProject.construction_status_id) |
||||
|
) |
||||
|
) { |
||||
|
let dataAlarmOption = [] |
||||
|
let dataAlarmGroupOption = [] |
||||
|
let dataAlarms = [] |
||||
|
|
||||
|
// 判断推送策略
|
||||
|
let pointTime = moment().subtract(interval, 'minute').format('YYYY-MM-DD HH:mm:ss') |
||||
|
if (c.tactics.includes('immediately')) { |
||||
|
dataAlarmOption.push(`StartTime >= '${pointTime}'`); |
||||
|
} else if (c.tactics.includes('continue')) { |
||||
|
dataAlarmOption.push(`StartTime <= '${pointTime}'`); |
||||
|
} else if (c.tactics.includes('abnormal_rate')) { |
||||
|
dataAlarmOption.push(`StartTime <= '${pointTime}'`); |
||||
|
if (c.alarmType.includes('data_outages') || c.alarmType.includes('data_exception')) { |
||||
|
// 查了设备异常率 去安心云查当前项目下的设备数量
|
||||
|
// TODO 等郑兴同步以太数据再查
|
||||
|
const deviceCount = 9999 |
||||
|
// await clickHouse.anxinyun.query(`
|
||||
|
// SELECT count(*) FROM
|
||||
|
// `).toPromise()
|
||||
|
} |
||||
|
if (c.alarmType.includes('video_exception')) { |
||||
|
// 查了视频异常 去安心云查 接入的 萤石 设备数量
|
||||
|
const cameraCount = await clickHouse.anxinyun.query(` |
||||
|
SELECT count(*) FROM |
||||
|
`).toPromise()
|
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// 判断告警数据范围
|
||||
|
if (c.alarmType.includes('data_outages')) { |
||||
|
dataAlarmGroupOption.push(1) |
||||
|
} |
||||
|
if (c.alarmType.includes('data_exception')) { |
||||
|
dataAlarmGroupOption.push(2) |
||||
|
} |
||||
|
if (c.alarmType.includes('strategy_hit')) { |
||||
|
dataAlarmGroupOption.push(3) |
||||
|
} |
||||
|
if (c.alarmType.includes('video_exception')) { |
||||
|
|
||||
|
} |
||||
|
if (c.alarmType.includes('app_exception')) { |
||||
|
|
||||
|
} |
||||
|
if (c.alarmType.includes('device_exception')) { |
||||
|
dataAlarmGroupOption.push(4) |
||||
|
dataAlarmGroupOption.push(5) |
||||
|
} |
||||
|
//
|
||||
|
dataAlarmGroupOption.length ? |
||||
|
dataAlarmOption.push(`AlarmGroup IN ${dataAlarmGroupOption.join(',')}`) : '' |
||||
|
dataAlarms = await clickHouse.dataAlarm.query(` |
||||
|
SELECT * FROM alarms |
||||
|
WHERE |
||||
|
State NOT IN (3, 4) |
||||
|
${dataAlarmOption.length ? ' AND ' + dataAlarmOption.join(' AND ') : ''} |
||||
|
`).toPromise()
|
||||
|
console.log(dataAlarms); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
} catch (error) { |
||||
|
console.error(error); |
||||
|
} |
||||
|
} |
||||
|
) |
||||
|
|
||||
|
return { |
||||
|
alarmsPush, |
||||
|
} |
||||
|
} |
Loading…
Reference in new issue