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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录