增加系统版本通知功能

This commit is contained in:
dengqichen 2025-12-09 14:48:31 +08:00
parent d7d34a314e
commit 4eb82800df
10 changed files with 97 additions and 36 deletions

View File

@ -301,6 +301,8 @@ public class ServerMonitorScheduler {
// 3. 计算网络流量速率用于告警检查 // 3. 计算网络流量速率用于告警检查
Long networkRxSpeed = 0L; Long networkRxSpeed = 0L;
Long networkTxSpeed = 0L; Long networkTxSpeed = 0L;
Long finalNetworkRx = monitorData.getNetworkRx(); // 最终存储的累计值
Long finalNetworkTx = monitorData.getNetworkTx();
if (monitorData.getNetworkRx() != null && monitorData.getNetworkTx() != null) { if (monitorData.getNetworkRx() != null && monitorData.getNetworkTx() != null) {
// 查询上次监控数据数据库中存储的是累计值 // 查询上次监控数据数据库中存储的是累计值
@ -318,7 +320,7 @@ public class ServerMonitorScheduler {
long rxDiff = monitorData.getNetworkRx() - lastMonitor.getNetworkRx(); long rxDiff = monitorData.getNetworkRx() - lastMonitor.getNetworkRx();
long txDiff = monitorData.getNetworkTx() - lastMonitor.getNetworkTx(); long txDiff = monitorData.getNetworkTx() - lastMonitor.getNetworkTx();
// 防止负数服务器重启导致计数器重置 // 防止负数服务器重启或网卡变化导致计数器异常
if (rxDiff >= 0 && txDiff >= 0) { if (rxDiff >= 0 && txDiff >= 0) {
networkRxSpeed = rxDiff / timeDiffSeconds; // KB/s networkRxSpeed = rxDiff / timeDiffSeconds; // KB/s
networkTxSpeed = txDiff / timeDiffSeconds; // KB/s networkTxSpeed = txDiff / timeDiffSeconds; // KB/s
@ -326,8 +328,11 @@ public class ServerMonitorScheduler {
log.debug("网络速率计算: serverId={}, timeDiff={}s, rxSpeed={}KB/s, txSpeed={}KB/s", log.debug("网络速率计算: serverId={}, timeDiff={}s, rxSpeed={}KB/s, txSpeed={}KB/s",
server.getId(), timeDiffSeconds, networkRxSpeed, networkTxSpeed); server.getId(), timeDiffSeconds, networkRxSpeed, networkTxSpeed);
} else { } else {
log.warn("检测到网络计数器重置(负差值): serverId={}, rxDiff={}, txDiff={}", // 检测到异常使用上次的累计值避免存入错误数据
server.getId(), rxDiff, txDiff); finalNetworkRx = lastMonitor.getNetworkRx();
finalNetworkTx = lastMonitor.getNetworkTx();
log.warn("检测到网络计数器异常(负差值),使用上次累计值: serverId={}, rxDiff={}, txDiff={}, 上次rx={}, 上次tx={}",
server.getId(), rxDiff, txDiff, lastMonitor.getNetworkRx(), lastMonitor.getNetworkTx());
} }
} else { } else {
log.warn("时间差异无效: serverId={}, timeDiff={}s", server.getId(), timeDiffSeconds); log.warn("时间差异无效: serverId={}, timeDiff={}s", server.getId(), timeDiffSeconds);
@ -344,8 +349,8 @@ public class ServerMonitorScheduler {
.memoryUsage(monitorData.getMemoryUsage()) .memoryUsage(monitorData.getMemoryUsage())
.memoryUsed(memoryUsed) .memoryUsed(memoryUsed)
.diskUsage(monitorData.getDiskUsage()) .diskUsage(monitorData.getDiskUsage())
.networkRx(monitorData.getNetworkRx()) // 累计值存数据库 .networkRx(finalNetworkRx) // 累计值存数据库已过滤异常数据
.networkTx(monitorData.getNetworkTx()) // 累计值存数据库 .networkTx(finalNetworkTx) // 累计值存数据库已过滤异常数据
.networkRxSpeed(networkRxSpeed) // 速率告警检查 .networkRxSpeed(networkRxSpeed) // 速率告警检查
.networkTxSpeed(networkTxSpeed) // 速率告警检查 .networkTxSpeed(networkTxSpeed) // 速率告警检查
.collectTime(LocalDateTime.now()) .collectTime(LocalDateTime.now())
@ -356,8 +361,8 @@ public class ServerMonitorScheduler {
monitorData.getCpuUsage(), monitorData.getCpuUsage(),
monitorData.getMemoryUsage(), monitorData.getMemoryUsage(),
monitorData.getDiskUsage() != null ? monitorData.getDiskUsage().size() : 0, monitorData.getDiskUsage() != null ? monitorData.getDiskUsage().size() : 0,
monitorData.getNetworkRx(), finalNetworkRx,
monitorData.getNetworkTx(), finalNetworkTx,
networkRxSpeed, networkRxSpeed,
networkTxSpeed); networkTxSpeed);

View File

@ -257,7 +257,7 @@ public class JenkinsBuildServiceImpl extends BaseServiceImpl<JenkinsBuild, Jenki
// 2. 判断是否有新构建基于Build表实际数据判断 // 2. 判断是否有新构建基于Build表实际数据判断
if (lastSyncedBuildNumber != null && latestBuildNumber <= lastSyncedBuildNumber) { if (lastSyncedBuildNumber != null && latestBuildNumber <= lastSyncedBuildNumber) {
log.info("No new builds to sync for job: {} (last synced: {}, latest: {})", job.getJobName(), lastSyncedBuildNumber, latestBuildNumber); // 没有新构建直接返回不打印日志减少日志输出
return 0; return 0;
} }

View File

@ -220,9 +220,6 @@ public class RepositoryProjectServiceImpl extends BaseServiceImpl<RepositoryProj
log.info("Creating new project: {} (ID: {})", log.info("Creating new project: {} (ID: {})",
projectResponse.getPathWithNamespace(), projectResponse.getId()); projectResponse.getPathWithNamespace(), projectResponse.getId());
totalCount.incrementAndGet(); totalCount.incrementAndGet();
} else {
log.debug("Updating existing project: {} (ID: {})",
projectResponse.getPathWithNamespace(), projectResponse.getId());
} }
project.setDeleted(false); project.setDeleted(false);

View File

@ -97,6 +97,7 @@ logging:
level: level:
springframework: DEBUG springframework: DEBUG
org.springframework.web: DEBUG org.springframework.web: DEBUG
org.springframework.web.client.RestTemplate: WARN # 关闭RestTemplate的DEBUG日志减少HTTP请求详细日志
org.springframework.context.i18n: DEBUG org.springframework.context.i18n: DEBUG
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping: TRACE org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping: TRACE
org.hibernate.SQL: INFO org.hibernate.SQL: INFO
@ -105,6 +106,25 @@ logging:
org.hibernate.orm.jdbc.bind: INFO org.hibernate.orm.jdbc.bind: INFO
com.qqchen.deploy.backend.framework.utils.EntityPathResolver: DEBUG com.qqchen.deploy.backend.framework.utils.EntityPathResolver: DEBUG
com.qqchen.deploy.backend: DEBUG com.qqchen.deploy.backend: DEBUG
# 日志文件配置
file:
name: logs/deploy-ease.log # 日志文件路径
logback:
rollingpolicy:
# 日志文件名称模式(按日期归档)
file-name-pattern: logs/deploy-ease-%d{yyyy-MM-dd}.%i.log.gz
# 单个日志文件最大大小
max-file-size: 100MB
# 日志文件保留天数
max-history: 30
# 日志文件总大小上限
total-size-cap: 10GB
# 是否在启动时清理历史日志
clean-history-on-start: false
pattern:
# 日志输出格式
console: '%d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${PID:- } --- [%15.15t] %-40.40logger{39} : %m%n'
file: '%d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${PID:- } --- [%15.15t] %-40.40logger{39} : %m%n'
# 监控配置 # 监控配置
management: management:
endpoints: endpoints:

View File

@ -105,6 +105,25 @@ logging:
org.hibernate.orm.jdbc.bind: INFO org.hibernate.orm.jdbc.bind: INFO
com.qqchen.deploy.backend.framework.utils.EntityPathResolver: DEBUG com.qqchen.deploy.backend.framework.utils.EntityPathResolver: DEBUG
com.qqchen.deploy.backend: DEBUG com.qqchen.deploy.backend: DEBUG
# 日志文件配置
file:
name: logs/deploy-ease.log # 日志文件路径
logback:
rollingpolicy:
# 日志文件名称模式(按日期归档)
file-name-pattern: logs/deploy-ease-%d{yyyy-MM-dd}.%i.log.gz
# 单个日志文件最大大小
max-file-size: 100MB
# 日志文件保留天数
max-history: 30
# 日志文件总大小上限
total-size-cap: 10GB
# 是否在启动时清理历史日志
clean-history-on-start: false
pattern:
# 日志输出格式
console: '%d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${PID:- } --- [%15.15t] %-40.40logger{39} : %m%n'
file: '%d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${PID:- } --- [%15.15t] %-40.40logger{39} : %m%n'
# 监控配置 # 监控配置
management: management:
endpoints: endpoints:

View File

@ -4,17 +4,8 @@
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.3.xsd"> http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.3.xsd">
<!-- 清理旧数据(如果表结构已变更) -->
<changeSet id="20251209112700-cleanup" author="qqchen">
<preConditions onFail="CONTINUE">
<tableExists tableName="system_release"/>
</preConditions>
<sql>TRUNCATE TABLE system_release;</sql>
<sql>DELETE FROM DATABASECHANGELOG WHERE ID='20251209112700';</sql>
</changeSet>
<!-- 插入新数据 --> <!-- 插入新数据 -->
<changeSet id="20251209112700-v2" author="qqchen"> <changeSet id="20251209112700" author="qqchen">
<sqlFile path="20251209112700-01.sql" relativeToChangelogFile="true"/> <sqlFile path="20251209112700-01.sql" relativeToChangelogFile="true"/>
</changeSet> </changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@ -0,0 +1,24 @@
-- --------------------------------------------------------------------------------------
-- 系统版本发布记录 - v1.1
-- 功能记录Jenkins日志优化版本
-- 作者qqchen
-- 日期2025-12-09 14:13
-- --------------------------------------------------------------------------------------
-- 插入 1.1 日志优化发布记录
INSERT INTO system_release (
create_by, create_time, update_by, update_time, version, deleted,
release_version, module, release_date, changes, notified, delay_minutes, estimated_duration, enable_auto_shutdown
)
VALUES (
'system', NOW(), 'system', NOW(), 1, 0,
1.1, 'BACKEND', NOW(),
'【后端】
Jenkins构建同步日志输出90%
Git项目同步日志输出DEBUG日志
RestTemplate HTTP请求日志DEBUG日志
100MB3010GB
',
0, NULL, NULL, 0
);

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.3.xsd">
<!-- Jenkins构建同步日志优化 - 无数据库变更 -->
<changeSet id="20251209141300" author="qqchen">
<comment>
优化Jenkins构建同步日志输出减少冗余日志
- 移除无新构建时的INFO日志
- 只在有构建更新时才记录日志
</comment>
<sqlFile path="20251209141300-01.sql" relativeToChangelogFile="true"/>
</changeSet>
</databaseChangeLog>

View File

@ -26,7 +26,8 @@ VALUES
(10, NOW(), 'maye', '$2a$10$YPhZjBKxHLNYXzMS6mnc7Of3pPT.6DhBArkJLbCPKgaTiLDWrr58y', '马也', 'maye@iscmtech.com', NULL, 5, 1), (10, NOW(), 'maye', '$2a$10$YPhZjBKxHLNYXzMS6mnc7Of3pPT.6DhBArkJLbCPKgaTiLDWrr58y', '马也', 'maye@iscmtech.com', NULL, 5, 1),
(11, NOW(), 'dengqichen', '$2a$10$fUdDZ33099YboexF/SNQT.55mXzK3Kejb82yc76iCdl25.uqAatkW', '邓骐辰', 'dengqichen@iscmtech.com', NULL, 5, 1), (11, NOW(), 'dengqichen', '$2a$10$fUdDZ33099YboexF/SNQT.55mXzK3Kejb82yc76iCdl25.uqAatkW', '邓骐辰', 'dengqichen@iscmtech.com', NULL, 5, 1),
(12, NOW(), 'wangdongzhu', '$2a$10$OErv/EvBXUocMutXZJe3C.k1gq9/8rrF63pz8mWRBLoORGb/8ELIO', '王栋柱', 'wangdongzhu@iscmtech.com', NULL, 5, 1), (12, NOW(), 'wangdongzhu', '$2a$10$OErv/EvBXUocMutXZJe3C.k1gq9/8rrF63pz8mWRBLoORGb/8ELIO', '王栋柱', 'wangdongzhu@iscmtech.com', NULL, 5, 1),
(13, NOW(), 'yangzhenfu', '$2a$10$.WBc0pXTQnrDn2IUm.eRneH9jfu7TIZg2na.K3WaluvjIEts2Iasm', '杨振夫', 'yangzhenfu@iscmtech.com', '15842461837', 5, 1); (13, NOW(), 'yangzhenfu', '$2a$10$.WBc0pXTQnrDn2IUm.eRneH9jfu7TIZg2na.K3WaluvjIEts2Iasm', '杨振夫', 'yangzhenfu@iscmtech.com', '15842461837', 5, 1),
(14, NOW(), 'songwei', '$2a$10$8ChswMOtgkvZCGsa/wvMM.wfhL5NL9uqCasyHZ6hiDG45vFu/EQRG', '宋伟', 'songwei@iscmtech.com', NULL, 5, 1);
-- 初始化系统参数 -- 初始化系统参数
INSERT INTO sys_param (id, create_time, code, name, value, type, description, enabled) INSERT INTO sys_param (id, create_time, code, name, value, type, description, enabled)
@ -39,17 +40,6 @@ VALUES
-- 初始化权限管理数据 -- 初始化权限管理数据
-- -------------------------------------------------------------------------------------- -- --------------------------------------------------------------------------------------
-- --------------------------------------------------------------------------------------
-- 初始化权限管理数据
-- --------------------------------------------------------------------------------------
-- --------------------------------------------------------------------------------------
-- 初始化权限管理数据
-- --------------------------------------------------------------------------------------
-- 先清理已有数据
DELETE FROM sys_menu;
INSERT INTO sys_menu (id, name, path, component, icon, permission, type, parent_id, sort, hidden, enabled, create_by, create_time, version, deleted) INSERT INTO sys_menu (id, name, path, component, icon, permission, type, parent_id, sort, hidden, enabled, create_by, create_time, version, deleted)
VALUES VALUES
-- 首页 -- 首页
@ -150,7 +140,8 @@ VALUES
(10, 3), -- maye - 开发 (10, 3), -- maye - 开发
(11, 1), -- dengqichen - 管理员 (11, 1), -- dengqichen - 管理员
(12, 3), -- wangdongzhu - 开发 (12, 3), -- wangdongzhu - 开发
(13, 3); -- yangzhenfu - 开发 (13, 3), -- yangzhenfu - 开发
(14, 1); -- songwei - 管理员
-- 初始化角色菜单关联 -- 初始化角色菜单关联
INSERT INTO sys_role_menu (role_id, menu_id) INSERT INTO sys_role_menu (role_id, menu_id)

View File

@ -1375,8 +1375,6 @@ CREATE TABLE system_release
delay_minutes INT NULL COMMENT '延迟执行分钟数(创建后多久开始维护,为空则不触发维护)', delay_minutes INT NULL COMMENT '延迟执行分钟数(创建后多久开始维护,为空则不触发维护)',
estimated_duration INT NULL COMMENT '预计维护时长(分钟)', estimated_duration INT NULL COMMENT '预计维护时长(分钟)',
enable_auto_shutdown BIT NOT NULL DEFAULT 0 COMMENT '是否自动停止服务', enable_auto_shutdown BIT NOT NULL DEFAULT 0 COMMENT '是否自动停止服务',
UNIQUE KEY uk_version_module (release_version, module),
KEY idx_release_date (release_date), KEY idx_release_date (release_date),
KEY idx_notified (notified), KEY idx_notified (notified),
KEY idx_deleted (deleted) KEY idx_deleted (deleted)