自动发帖软件
标题:
数据库MYQ业务流程心跳程序启动
[打印本页]
作者:
发帖软件
时间:
昨天 09:58
标题:
数据库MYQ业务流程心跳程序启动
数据库MYQ业务流程心跳程序启动
2.png
(725.17 KB, 下载次数: 0)
昨天 09:58
上传
3.png
(777.22 KB, 下载次数: 0)
昨天 09:58
上传
// 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业务流程心跳程序结束 =====");
复制代码
欢迎光临 自动发帖软件 (http://www.fatiegongju.com/)
Powered by Discuz! X3.2