优化告警规则开发代码
package com.hong.garen.outdevice;
import com.hong.garen.pojo.JedisUtil;
import redis.clients.jedis.Jedis;
import java.sql.*;
import java.util.HashMap;
import java.util.Map;
/**
* 告警规则开发
* 1.实现json数据接收、解析、判断
* 2.实现数据超标发送信息,设备掉线预警
* 3.实现数据过滤和清洗,多线程异步
* Created by GarenHong on 2023/3/13.
*/
public class RuleValueConfig {
// MySQL 数据库配置
private static final String JDBC_DRIVER = 'com.mysql.jdbc.Driver';
private static final String DB_URL = 'jdbc:mysql://47.114.102.84:3306/test?useSSL=false&useUnicode=true&characterEncoding=utf-8';
private static final String USER = 'root';
private static final String PASS = 'YWRtaW42NjY=mysql';
public static void compareValue(String model, String deviceName, String property, double value) throws Exception {
try (Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
Statement stmt = conn.createStatement()) {
String sql = 'SELECT * FROM rule_kv WHERE model = '' + model + '' AND device_name = '' + deviceName + ''';
try (ResultSet rs = stmt.executeQuery(sql)) {
while (rs.next()) {
String operation = rs.getString('operation');
double defaultValue = rs.getDouble('defaultvalue');
int operationNum = rs.getInt('operation_num');
// 判断是否超标产生告警
checkRule(operation, property, defaultValue, value, operationNum, model);
}
}
} catch (SQLException se) {
// 处理 JDBC 错误
se.printStackTrace();
} catch (Exception e) {
// 处理 Class.forName 错误
e.printStackTrace();
}
}
private static void checkRule(String operation, String property, double defaultValue, double value, int operationNum, String model) {
boolean isGreaterThan = defaultValue > value;
boolean isLessThan = defaultValue < value;
boolean isGreaterThanOrEqual = defaultValue >= value;
boolean isNotEqual = defaultValue != value;
boolean isLessThanOrEqual = defaultValue <= value;
if (operation.equals('GREATER')) { // 大于
if (isGreaterThan) {
// 超标
sendAlert(property, '大于');
}
} else if (operation.equals('LESS')) { // 小于
if (isLessThan) {
// 超标
sendAlert(property, '小于');
}
} else if (operation.equals('GREATER_OR_EQUAL')) { // 不小于
if (isGreaterThanOrEqual) {
// 超标
sendAlert(property, '不小于');
}
} else if (operation.equals('NOT_EQUAL')) { // 不等于
if (isNotEqual) {
// 超标
sendAlert(property, '不等于');
}
} else if (operation.equals('LESS_OR_EQUAL')) { // 不大于
if (isLessThanOrEqual) {
// 超标
sendAlert(property, '不大于');
}
}
if (model.equals('MAJOR') && operationNum == 1) {
sendAlert(property, '超标');
} else if (model.equals('MAJOR') && operationNum > 1) {
// ...
}
// ...其他模型的逻辑
}
private static void sendAlert(String property, String operation) {
System.out.println('告警,该值' + value + '超标(' + operation + ')');
// TODO: 发送告警信息
}
}
', 'content': '```java package com.hong.garen.outdevice;
import com.hong.garen.pojo.JedisUtil; import redis.clients.jedis.Jedis;
import java.sql.*; import java.util.HashMap; import java.util.Map;
/**
-
告警规则开发
-
1.实现json数据接收、解析、判断
-
2.实现数据超标发送信息,设备掉线预警
-
3.实现数据过滤和清洗,多线程异步
-
Created by GarenHong on 2023/3/13. */ public class RuleValueConfig {
// MySQL 数据库配置 private static final String JDBC_DRIVER = 'com.mysql.jdbc.Driver'; private static final String DB_URL = 'jdbc:mysql://47.114.102.84:3306/test?useSSL=false&useUnicode=true&characterEncoding=utf-8'; private static final String USER = 'root'; private static final String PASS = 'YWRtaW42NjY=mysql';
public static void compareValue(String model, String deviceName, String property, double value) throws Exception { try (Connection conn = DriverManager.getConnection(DB_URL, USER, PASS); Statement stmt = conn.createStatement()) { String sql = 'SELECT * FROM rule_kv WHERE model = ' + model + ' AND device_name = ' + deviceName + ''; try (ResultSet rs = stmt.executeQuery(sql)) { while (rs.next()) { String operation = rs.getString('operation'); double defaultValue = rs.getDouble('defaultvalue'); int operationNum = rs.getInt('operation_num'); // 判断是否超标产生告警 checkRule(operation, property, defaultValue, value, operationNum, model); } } } catch (SQLException se) { // 处理 JDBC 错误 se.printStackTrace(); } catch (Exception e) { // 处理 Class.forName 错误 e.printStackTrace(); } }
private static void checkRule(String operation, String property, double defaultValue, double value, int operationNum, String model) { boolean isGreaterThan = defaultValue > value; boolean isLessThan = defaultValue < value; boolean isGreaterThanOrEqual = defaultValue >= value; boolean isNotEqual = defaultValue != value; boolean isLessThanOrEqual = defaultValue <= value;
if (operation.equals('GREATER')) { // 大于 if (isGreaterThan) { // 超标 sendAlert(property, '大于'); } } else if (operation.equals('LESS')) { // 小于 if (isLessThan) { // 超标 sendAlert(property, '小于'); } } else if (operation.equals('GREATER_OR_EQUAL')) { // 不小于 if (isGreaterThanOrEqual) { // 超标 sendAlert(property, '不小于'); } } else if (operation.equals('NOT_EQUAL')) { // 不等于 if (isNotEqual) { // 超标 sendAlert(property, '不等于'); } } else if (operation.equals('LESS_OR_EQUAL')) { // 不大于 if (isLessThanOrEqual) { // 超标 sendAlert(property, '不大于'); } } if (model.equals('MAJOR') && operationNum == 1) { sendAlert(property, '超标'); } else if (model.equals('MAJOR') && operationNum > 1) { // ... } // ...其他模型的逻辑}
private static void sendAlert(String property, String operation) { System.out.println('告警,该值' + value + '超标(' + operation + ')'); // TODO: 发送告警信息 } }
原文地址: https://www.cveoy.top/t/topic/nbgD 著作权归作者所有。请勿转载和采集!