|
|
Êý¾Ý¿âMYQÒµÎñÁ÷³ÌÐÄÌø³ÌÐòÆô¶¯
- // MYQÒµÎñÁ÷³ÌÐÄÌø³ÌÐò
- // Ä£ÄâÍêÕûµÄÒµÎñ²Ù×÷Á÷³Ì£¬°üÀ¨¶¨Ê±ÈÎÎñ¡¢Êý¾Ý¿â²Ù×÷ºÍ״̬¼à¿Ø
- print.log("===== MYQÒµÎñÁ÷³ÌÐÄÌø³ÌÐòÆô¶¯ =====");
- // È«¾Ö±äÁ¿
- var conn = null;
- var pstmt = null;
- var heartbeatInterval = null;
- var isRunning = false;
- /**
- * Á¬½ÓÊý¾Ý¿â
- */
- function connectDatabase() {
- try {
- var url = "jdbc:mysql://mysql2.sqlpub.com:3307/chaook";
- var user = "chaook";
- var password = "JAVsRUMHkoJ123xJ";
- var params = "?useSSL=false&characterEncoding=utf8";
-
- print.log("ÕýÔÚÁ¬½ÓÊý¾Ý¿â...");
- conn = mysql.getConnection(url, user, password);
- print.log("✅ Êý¾Ý¿âÁ¬½Ó³É¹¦");
- return true;
- } catch (e) {
- print.log("❌ Êý¾Ý¿âÁ¬½Óʧ°Ü: " + e.message);
- return false;
- }
- }
- /**
- * ³õʼ»¯Êý¾Ý¿â±í½á¹¹
- */
- function initializeDatabase() {
- try {
- // ´´½¨É豸״̬±í
- var deviceTableSql = "CREATE TABLE IF NOT EXISTS É豸״̬±í (" +
- "É豸ID VARCHAR(50) PRIMARY KEY," +
- "É豸Ãû³Æ VARCHAR(100)," +
- "ÔÚÏß״̬ TINYINT DEFAULT 0," + // 0-ÀëÏß, 1-ÔÚÏß
- "×îºóÐÄÌøÊ±¼ä DATETIME," +
- "CPUʹÓÃÂÊ DECIMAL(5,2)," +
- "ÄÚ´æÊ¹ÓÃÂÊ DECIMAL(5,2)," +
- "´ÅÅÌʹÓÃÂÊ DECIMAL(5,2)" +
- ") ENGINE=InnoDB DEFAULT CHARSET=utf8";
-
- var stmt = conn.createStatement();
- stmt.executeUpdate(deviceTableSql);
- stmt.close();
-
- // ´´½¨²Ù×÷ÈÕÖ¾±í
- var logTableSql = "CREATE TABLE IF NOT EXISTS ²Ù×÷ÈÕÖ¾±í (" +
- "ÈÕÖ¾ID INT AUTO_INCREMENT PRIMARY KEY," +
- "É豸ID VARCHAR(50)," +
- "²Ù×÷ÀàÐÍ VARCHAR(50)," +
- "²Ù×÷ÏêÇé TEXT," +
- "²Ù×÷ʱ¼ä DATETIME DEFAULT CURRENT_TIMESTAMP," +
- "FOREIGN KEY (É豸ID) REFERENCES É豸״̬±í(É豸ID) ON DELETE CASCADE" +
- ") ENGINE=InnoDB DEFAULT CHARSET=utf8";
-
- stmt = conn.createStatement();
- stmt.executeUpdate(logTableSql);
- stmt.close();
-
- print.log("✅ Êý¾Ý¿â±í½á¹¹³õʼ»¯Íê³É");
- return true;
- } catch (e) {
- print.log("❌ Êý¾Ý¿â±í½á¹¹³õʼ»¯Ê§°Ü: " + e.message);
- return false;
- }
- }
- /**
- * ×¢²áÉ豸
- */
- function registerDevice(deviceId, deviceName) {
- try {
- var sql = "INSERT INTO É豸״̬±í (É豸ID, É豸Ãû³Æ, ÔÚÏß״̬, ×îºóÐÄÌøÊ±¼ä) VALUES (?, ?, 1, NOW()) " +
- "ON DUPLICATE KEY UPDATE É豸Ãû³Æ = VALUES(É豸Ãû³Æ), ÔÚÏß״̬ = 1, ×îºóÐÄÌøÊ±¼ä = NOW()";
-
- var pstmt = conn.prepareStatement(sql);
- pstmt.setString(1, deviceId);
- pstmt.setString(2, deviceName);
- pstmt.executeUpdate();
- pstmt.close();
-
- logOperation(deviceId, "É豸ע²á", "É豸 " + deviceName + " ÒÑ×¢²á²¢ÉÏÏß");
- print.log("✅ É豸 " + deviceName + " ×¢²á³É¹¦");
- return true;
- } catch (e) {
- print.log("❌ É豸ע²áʧ°Ü: " + e.message);
- return false;
- }
- }
- /**
- * ·¢ËÍÐÄÌø°ü
- */
- function sendHeartbeat(deviceId, cpuUsage, memoryUsage, diskUsage) {
- try {
- var sql = "UPDATE É豸״̬±í SET ÔÚÏß״̬ = 1, ×îºóÐÄÌøÊ±¼ä = NOW(), " +
- "CPUʹÓÃÂÊ = ?, ÄÚ´æÊ¹ÓÃÂÊ = ?, ´ÅÅÌʹÓÃÂÊ = ? WHERE É豸ID = ?";
-
- var pstmt = conn.prepareStatement(sql);
- pstmt.setBigDecimal(1, new java.math.BigDecimal(cpuUsage.toFixed(2)));
- pstmt.setBigDecimal(2, new java.math.BigDecimal(memoryUsage.toFixed(2)));
- pstmt.setBigDecimal(3, new java.math.BigDecimal(diskUsage.toFixed(2)));
- pstmt.setString(4, deviceId);
- pstmt.executeUpdate();
- pstmt.close();
-
- logOperation(deviceId, "ÐÄÌø°ü", "·¢ËÍÐÄÌø°ü - CPU:" + cpuUsage.toFixed(2) + "% ÄÚ´æ:" + memoryUsage.toFixed(2) + "% ´ÅÅÌ:" + diskUsage.toFixed(2) + "%");
- print.log("✅ É豸 " + deviceId + " ÐÄÌø°ü·¢Ëͳɹ¦");
- return true;
- } catch (e) {
- print.log("❌ ÐÄÌø°ü·¢ËÍʧ°Ü: " + e.message);
- return false;
- }
- }
- /**
- * ¼Ç¼²Ù×÷ÈÕÖ¾
- */
- function logOperation(deviceId, operationType, details) {
- try {
- var sql = "INSERT INTO ²Ù×÷ÈÕÖ¾±í (É豸ID, ²Ù×÷ÀàÐÍ, ²Ù×÷ÏêÇé) VALUES (?, ?, ?)";
- var pstmt = conn.prepareStatement(sql);
- pstmt.setString(1, deviceId);
- pstmt.setString(2, operationType);
- pstmt.setString(3, details);
- pstmt.executeUpdate();
- pstmt.close();
- return true;
- } catch (e) {
- // ÈÕÖ¾¼Ç¼ʧ°Ü²»Ó°ÏìÖ÷Á÷³Ì
- print.log("⚠️ ²Ù×÷ÈÕÖ¾¼Ç¼ʧ°Ü: " + e.message);
- return false;
- }
- }
- /**
- * ¼ì²éÉ豸״̬
- */
- function checkDeviceStatus() {
- try {
- var sql = "SELECT É豸ID, É豸Ãû³Æ, ÔÚÏß״̬, ×îºóÐÄÌøÊ±¼ä, CPUʹÓÃÂÊ, ÄÚ´æÊ¹ÓÃÂÊ, ´ÅÅÌʹÓÃÂÊ FROM É豸״̬±í";
- var stmt = conn.createStatement();
- var rs = stmt.executeQuery(sql);
-
- print.log("\n=== É豸״̬¼à¿Ø ===");
- print.log("É豸ID\t\tÉ豸Ãû³Æ\t\tÔÚÏß״̬\t×îºóÐÄÌøÊ±¼ä\t\t\tCPU%\tÄÚ´æ%\t´ÅÅÌ%");
- print.log("------------------------------------------------------------------------------------------------------------");
-
- var offlineDevices = [];
- var highLoadDevices = [];
-
- while (rs.next()) {
- var deviceId = rs.getString("É豸ID");
- var deviceName = rs.getString("É豸Ãû³Æ");
- var onlineStatus = rs.getInt("ÔÚÏß״̬");
- var lastHeartbeat = rs.getTimestamp("×îºóÐÄÌøÊ±¼ä");
- var cpuUsage = rs.getBigDecimal("CPUʹÓÃÂÊ") || new java.math.BigDecimal("0");
- var memoryUsage = rs.getBigDecimal("ÄÚ´æÊ¹ÓÃÂÊ") || new java.math.BigDecimal("0");
- var diskUsage = rs.getBigDecimal("´ÅÅÌʹÓÃÂÊ") || new java.math.BigDecimal("0");
-
- // ¸ñʽ»¯Êä³ö
- var nameStr = deviceName + "\t\t";
- if (deviceName.length >= 4) nameStr = deviceName + "\t";
-
- var statusStr = onlineStatus === 1 ? "ÔÚÏß" : "ÀëÏß";
-
- print.log(deviceId + "\t" + nameStr + statusStr + "\t\t" + lastHeartbeat + "\t" +
- cpuUsage + "\t" + memoryUsage + "\t" + diskUsage);
-
- // ¼ì²éÀëÏßÉ豸
- if (onlineStatus !== 1) {
- offlineDevices.push({id: deviceId, name: deviceName});
- }
-
- // ¼ì²é¸ß¸ºÔØÉ豸 (CPU»òÄÚ´æÊ¹ÓÃÂʳ¬¹ý80%)
- if (cpuUsage.compareTo(new java.math.BigDecimal("80")) > 0 ||
- memoryUsage.compareTo(new java.math.BigDecimal("80")) > 0) {
- highLoadDevices.push({id: deviceId, name: deviceName, cpu: cpuUsage, memory: memoryUsage});
- }
- }
-
- rs.close();
- stmt.close();
-
- // ±¨¸æÒì³£É豸
- if (offlineDevices.length > 0) {
- print.log("\n⚠️ ·¢ÏÖ " + offlineDevices.length + " ̨ÀëÏßÉ豸:");
- for (var i = 0; i < offlineDevices.length; i++) {
- print.log(" - " + offlineDevices[i].name + " (" + offlineDevices[i].id + ")");
- }
- }
-
- if (highLoadDevices.length > 0) {
- print.log("\n⚠️ ·¢ÏÖ " + highLoadDevices.length + " ̨¸ß¸ºÔØÉ豸:");
- for (var i = 0; i < highLoadDevices.length; i++) {
- var dev = highLoadDevices[i];
- print.log(" - " + dev.name + " (" + dev.id + ") CPU:" + dev.cpu + "% ÄÚ´æ:" + dev.memory + "%");
- }
- }
-
- if (offlineDevices.length === 0 && highLoadDevices.length === 0) {
- print.log("\n✅ ËùÓÐÉ豸״̬Õý³£");
- }
-
- print.log("");
- return true;
- } catch (e) {
- print.log("❌ É豸״̬¼ì²éʧ°Ü: " + e.message);
- return false;
- }
- }
- /**
- * Ä£ÄâÉ豸Êý¾ÝÉú³É
- */
- function generateDeviceData() {
- var devices = [
- {id: "DEVICE_001", name: "Web·þÎñÆ÷1"},
- {id: "DEVICE_002", name: "Êý¾Ý¿â·þÎñÆ÷"},
- {id: "DEVICE_003", name: "Ó¦Ó÷þÎñÆ÷1"},
- {id: "DEVICE_004", name: "»º´æ·þÎñÆ÷"},
- {id: "DEVICE_005", name: "¸ºÔؾùºâÆ÷"}
- ];
-
- return devices;
- }
- /**
- * Ä£Äâϵͳ×ÊԴʹÓÃÂÊ
- */
- function simulateSystemMetrics() {
- // Ä£ÄâCPUʹÓÃÂÊ (0-100%)
- var cpu = Math.random() * 100;
-
- // Ä£ÄâÄÚ´æÊ¹ÓÃÂÊ (0-100%)
- var memory = Math.random() * 100;
-
- // Ä£Äâ´ÅÅÌʹÓÃÂÊ (0-100%£¬Í¨³£½Ï¸ß)
- var disk = 30 + Math.random() * 60;
-
- return {
- cpu: cpu,
- memory: memory,
- disk: disk
- };
- }
- /**
- * ÐÄÌøÈÎÎñÖ´Ðк¯Êý
- */
- function executeHeartbeatTask() {
- print.log("\n⏰ Ö´ÐÐÐÄÌøÈÎÎñ - " + new Date());
-
- try {
- // ¼ì²éÊý¾Ý¿âÁ¬½Ó
- if (!conn || conn.isClosed()) {
- print.log("⚠️ Êý¾Ý¿âÁ¬½ÓÒѶϿª£¬³¢ÊÔÖØÐÂÁ¬½Ó...");
- if (!connectDatabase()) {
- print.log("❌ ÎÞ·¨ÖØÐÂÁ¬½ÓÊý¾Ý¿â£¬Ìø¹ý±¾´ÎÐÄÌøÈÎÎñ");
- return;
- }
- }
-
- // »ñÈ¡É豸Áбí
- var devices = generateDeviceData();
-
- // Ϊÿ¸öÉ豸·¢ËÍÐÄÌø°ü
- for (var i = 0; i < devices.length; i++) {
- var device = devices[i];
- var metrics = simulateSystemMetrics();
-
- // ×¢²áÉ豸£¨Èç¹ûÉÐδע²á£©
- registerDevice(device.id, device.name);
-
- // ·¢ËÍÐÄÌø°ü
- sendHeartbeat(device.id, metrics.cpu, metrics.memory, metrics.disk);
- }
-
- // ¼ì²éÉ豸״̬
- checkDeviceStatus();
-
- print.log("✅ ÐÄÌøÈÎÎñÖ´ÐÐÍê³É\n");
- } catch (e) {
- print.log("❌ ÐÄÌøÈÎÎñÖ´ÐÐʧ°Ü: " + e.message);
- }
- }
- /**
- * Æô¶¯ÐÄÌø·þÎñ
- */
- function startHeartbeatService(intervalSeconds) {
- if (isRunning) {
- print.log("⚠️ ÐÄÌø·þÎñÒѾÔÚÔËÐÐÖÐ");
- return false;
- }
-
- // Á¬½ÓÊý¾Ý¿â
- if (!connectDatabase()) {
- print.log("❌ ÎÞ·¨Æô¶¯ÐÄÌø·þÎñ£ºÊý¾Ý¿âÁ¬½Óʧ°Ü");
- return false;
- }
-
- // ³õʼ»¯Êý¾Ý¿â
- if (!initializeDatabase()) {
- print.log("❌ ÎÞ·¨Æô¶¯ÐÄÌø·þÎñ£ºÊý¾Ý¿â³õʼ»¯Ê§°Ü");
- return false;
- }
-
- isRunning = true;
- print.log("✅ ÐÄÌø·þÎñÆô¶¯³É¹¦£¬¼ä¸ô: " + intervalSeconds + "Ãë");
-
- // Á¢¼´Ö´ÐÐÒ»´Î
- executeHeartbeatTask();
-
- // ÉèÖö¨Ê±ÈÎÎñ
- heartbeatInterval = setInterval(function() {
- executeHeartbeatTask();
- }, intervalSeconds * 1000);
-
- return true;
- }
- /**
- * Í£Ö¹ÐÄÌø·þÎñ
- */
- function stopHeartbeatService() {
- if (!isRunning) {
- print.log("⚠️ ÐÄÌø·þÎñδÔÚÔËÐÐ");
- return false;
- }
-
- if (heartbeatInterval) {
- clearInterval(heartbeatInterval);
- heartbeatInterval = null;
- }
-
- isRunning = false;
- print.log("✅ ÐÄÌø·þÎñÒÑÍ£Ö¹");
- return true;
- }
- /**
- * ¹Ø±ÕÊý¾Ý¿âÁ¬½Ó
- */
- function closeConnection() {
- try {
- if (pstmt != null) {
- pstmt.close();
- }
- if (conn != null) {
- conn.close();
- }
- print.log("✅ Êý¾Ý¿âÁ¬½ÓÒѹرÕ");
- } catch (e) {
- print.log("❌ ¹Ø±ÕÁ¬½Óʱ³ö´í: " + e.message);
- }
- }
- /**
- * ³ÌÐòÍ˳ö´¦Àí
- */
- function exitHandler() {
- print.log("ÕýÔڹرÕÐÄÌø·þÎñ...");
- stopHeartbeatService();
- closeConnection();
- print.log("👋 MYQÒµÎñÁ÷³ÌÐÄÌø³ÌÐòÒÑÍ˳ö");
- }
- // Ö÷³ÌÐò
- try {
- print.log("🚀 Æô¶¯MYQÒµÎñÁ÷³ÌÐÄÌø³ÌÐò");
-
- // ×¢²áÍ˳ö´¦Àíº¯Êý
- java.lang.Runtime.getRuntime().addShutdownHook(new java.lang.Thread({
- run: function() {
- exitHandler();
- }
- }));
-
- // Æô¶¯ÐÄÌø·þÎñ (ÿ30ÃëÖ´ÐÐÒ»´Î)
- if (startHeartbeatService(30)) {
- print.log("✅ MYQÒµÎñÁ÷³ÌÐÄÌø³ÌÐòÒÑÆô¶¯");
- print.log("💡 °´ Ctrl+C Í£Ö¹³ÌÐò");
-
- // ±£³Ö³ÌÐòÔËÐÐ
- while (isRunning) {
- java.lang.Thread.sleep(1000);
- }
- } else {
- print.log("❌ MYQÒµÎñÁ÷³ÌÐÄÌø³ÌÐòÆô¶¯Ê§°Ü");
- }
-
- } catch (e) {
- print.log("❌ ³ÌÐòÖ´Ðйý³ÌÖз¢Éú´íÎó: " + e.message);
- exitHandler();
- }
- print.log("===== MYQÒµÎñÁ÷³ÌÐÄÌø³ÌÐò½áÊø =====");
¸´ÖÆ´úÂë
|
|