69 Commits

Author SHA1 Message Date
simon
682cb6ecd8 release: 2.2508.2 2025-08-21 09:43:54 +08:00
simon
7b6ad5ccab fix: addrtype issue and SlotsOccupied value type issue 2025-08-20 15:22:22 +08:00
simon
5dfa6fa04d release: 2.2508.1 support alarm/nbi_pm/nbi_kpi redis queue and generate nbi pm whole kpi random data 2025-08-11 17:14:01 +08:00
simon
46ccc0ab83 feat: support add redis queue with alarm/nbi_pm/nbi_kpi, support generate all nbi pm data 2025-08-11 17:10:13 +08:00
simon
d4923d008c fix: ... 2025-07-26 14:58:57 +08:00
simon
1a5b2cd15a fix: cm data follow spec of CM doc 2025-07-26 14:35:55 +08:00
simon
3e7c60ecd0 fix: cm_version filled by ne version 2025-07-24 09:53:36 +08:00
simon
f7f9572aef release 2.2507.1 2025-07-24 09:33:24 +08:00
simon
d4b0b12c7b fix: get netinfo dn write to nbi_pm 2025-07-23 15:35:40 +08:00
simon
13c07004b4 feat: nbi release 2.2506.1 2025-06-23 18:29:05 +08:00
simon
9fa77a139a release 2.2504.1 2025-05-23 18:48:07 +08:00
simon
01975afe9c feat: nbi 2025-05-23 18:24:18 +08:00
simon
a5e5b3cf6e fix: omc ui self-upgrade issue 2025-05-14 18:41:57 +08:00
simon
3a7dd5279c fix: ne info add/edit need to update capability of ne_license 2025-04-30 12:24:38 +08:00
simon
8338dd3a60 fix> ... 2025-04-30 11:16:46 +08:00
simon
3e4b9819dc fix: add index to nbi_cm 2025-04-29 19:41:29 +08:00
simon
f4a7c4cf82 feat: sync capability for NBI NRM 2025-04-29 15:46:41 +08:00
simon
cec34122da feat: add capability in ne_license 2025-04-29 15:30:12 +08:00
simon
ff4e221e27 fix: update Fqdn 2025-04-29 14:59:42 +08:00
simon
4c782f45ab fix: sync nbi cm 2025-04-29 11:52:49 +08:00
simon
f1c7e4fc1f fix: ... 2025-04-29 11:42:08 +08:00
simon
88054f9c93 fix: job for sync NBI NRM 2025-04-29 11:41:06 +08:00
simon
3e2ba34fd1 feat: add delete nbi_cm expired record task 2025-04-28 18:54:54 +08:00
simon
b31ee42265 feat: sync ne NRM 2025-04-28 17:24:15 +08:00
simon
9507879854 feat: sync NBI NRM task 2025-04-27 20:19:25 +08:00
simon
ccd2f0218c feat: sync NE NRM data 2025-04-27 20:02:36 +08:00
zhangsz
f7cb6f84b0 release nbi 2.2504.1 2025-04-25 15:19:17 +08:00
zhangsz
d1f9f77f7e feat: nbi cm task 2025-04-25 15:17:24 +08:00
zhangsz
167f02b065 feat: nbi cm table update 2025-04-25 14:59:34 +08:00
zhangsz
d973c8af49 feat: support nbi cm task 2025-04-25 10:44:24 +08:00
TsMask
8705ac68c1 fix: 网元主机title唯一导致冲突5002修改失败 2025-04-22 14:44:16 +08:00
TsMask
55b6aa348b feat: 数据库引用变更 2025-04-22 14:30:05 +08:00
TsMask
af4d2b70cc feat: 添加常量定义-来自分支lichang 2025-04-22 14:26:59 +08:00
TsMask
85afb33c59 feat: ws模块消息码变更及修复断链情况 2025-04-22 14:26:44 +08:00
TsMask
e880eae549 feat: 网元信令跟踪功能 2025-04-22 14:25:55 +08:00
TsMask
9d63210d25 fix: 网元主机title唯一导致冲突5002修改失败 2025-04-22 14:24:54 +08:00
TsMask
2662dd26e8 chore: 更新版本号 2.2503.5 2025-04-12 10:10:37 +08:00
TsMask
ac6df17e16 sql: 更新系统参数配置权限分配 2025-04-12 10:07:47 +08:00
TsMask
b46157bff7 chore: 更新版本号 2.2503.4 2025-03-31 19:54:03 +08:00
TsMask
9c50e6ef70 sql: 更新部分kpi_title_en名称 2025-03-25 10:54:30 +08:00
TsMask
6c8383925d chore: 更新版本号 2.2503.3 2025-03-21 17:58:48 +08:00
TsMask
4f118b895b sql: 更新角色菜单分配 2025-03-21 17:34:42 +08:00
TsMask
39bfe64828 fix: 默认获取Redis实例时支持不指定数据源 2025-03-21 15:55:06 +08:00
TsMask
72fc915481 fix: UPF流量总计7,30天累计数据查询 2025-03-21 15:52:03 +08:00
TsMask
7e42dd91e4 sql: 更新SMF/UPF参数配置 2025-03-21 15:40:18 +08:00
TsMask
a982a41e05 chore: 更新版本号 2.2503.2 2025-03-14 11:02:26 +08:00
TsMask
38f5eea82e sql: 更新AMF参数配置systemFeatOpt 2025-03-13 15:12:36 +08:00
TsMask
5237710c8e sql: 调度任务进行告警检查网元状态 2025-03-11 18:01:32 +08:00
TsMask
f95847c915 fix: 系统菜单按钮权限状态可修改 2025-03-08 14:20:35 +08:00
TsMask
2fe05c9850 fix: 网元状态请求超时时间至2000毫秒 2025-03-08 14:19:50 +08:00
TsMask
705d02aa78 chore: 更新版本号 2.2503.1 2025-03-08 11:07:46 +08:00
TsMask
3e9a8fc067 fix: 修复IMSI数据验证逻辑,确保正确处理前缀和长度 2025-03-08 11:07:34 +08:00
TsMask
74e6c75a05 sql: 看板菜单权限控制部分显示 2025-03-04 15:14:46 +08:00
TsMask
8595a1c0cb refactor: 移除冗余错误日志,优化查询逻辑 2025-03-04 14:52:15 +08:00
TsMask
986624c48f feat: 优化UPF流量统计逻辑 2025-03-04 14:51:52 +08:00
TsMask
32630fbb4a fix: 告警转发邮件优化 2025-03-04 14:51:15 +08:00
TsMask
e0336bb0f3 chore: 更新版本号 2.2502.4 2025-02-28 19:53:34 +08:00
TsMask
041125fb7a sql: SGW-C导出管理多语言显示 2025-02-27 15:14:03 +08:00
TsMask
dcf513bcfd feat: 优化网元状态告警处理逻辑,增加状态更新时间戳 2025-02-25 14:52:53 +08:00
TsMask
88d6f36a18 fix: CDR/Event 查询时间格式统一时间戳int64 2025-02-25 14:41:56 +08:00
TsMask
4fd359add4 chore: 更新版本号 2.2502.3 2025-02-21 21:06:54 +08:00
lai
12f5330f85 补充SGW-C定时导出 2025-02-21 16:44:18 +08:00
TsMask
1c1c564691 fix: 兼容3G的SGWC字段 2025-02-21 15:42:43 +08:00
TsMask
f61f546d55 fix: SGWC导出表格数据字段修改 2025-02-20 10:19:58 +08:00
TsMask
4451705e67 fix: 网元授权序号查询 2025-02-20 10:19:23 +08:00
TsMask
f08c1e02ed chore: 更新版本号 2.2502.2 2025-02-14 19:31:58 +08:00
TsMask
760f840791 style: 调整/路由提示信息 2025-02-14 19:28:21 +08:00
TsMask
344e9802d8 sql: 修改调度任务导出SMSC-CDR时间格式错误 2025-02-11 18:32:43 +08:00
TsMask
55dd32b124 fix: 导出备份配置调整 2025-02-11 18:31:54 +08:00
191 changed files with 21790 additions and 4426 deletions

3
.gitignore vendored
View File

@@ -17,6 +17,7 @@ restagent/upload/
restagent/software/
restagent/database/
restagent/license/
restagent/restagent
sshsvc/sshsvc
sshsvc/mmllog/
@@ -33,6 +34,8 @@ vendor
*.vsix
*.log
*.log-*
*.log.*
*.bak
*.bak*
*.exe
__debug_bin*

View File

@@ -1,5 +1,49 @@
# 版本发布日志
## 2.2503.5-20250412
- 更新 角色系统参数配置权限分配
## 2.2503.4-20250331
- 更新 更新部分kpi_title_en名称
## 2.2503.3-20250321
- 更新 SMF/UPF参数配置
- 重构 UPF流量总计7,30天累计数据查询
- 优化 默认获取Redis实例时支持不指定数据源
## 2.2503.2-20250314
- 更新 AMF参数配置systemFeatOpt
- 优化 调度任务进行告警检查网元状态
- 优化 系统菜单按钮权限状态可修改
- 优化 网元状态请求超时时间至2000毫秒
## 2.2503.1-20250308
- 优化 告警转发邮件优化
- 优化 优化UPF流量统计逻辑
- 优化 看板菜单权限控制部分显示
## 2.2502.4-20250228
- 修复 SGW-C导出管理多语言显示
- 优化 网元状态告警处理逻辑,增加状态更新时间戳
- 修复 CDR/Event 查询时间格式统一时间戳int64
## 2.2502.3-20250221
- 修复 网元授权序号查询
- 更新 SGWC导出表格数据字段修改/兼容3G的SGWC字段
## 2.2502.2-20250214
- 修复 修改调度任务导出SMSC-CDR时间格式错误
- 修复 导出备份配置文件同步FTP功能配置调整
- 更新 调整/路由提示信息
## 2.2502.1-20250208
- 新增 基站状态记录上报和导出功能

View File

@@ -0,0 +1,10 @@
# alarm relation rules
derived:
- parentCode: 10001
childCode: 10002
- parentCode: 20001
childCode: 20002
related:
- codes: [30005, 30006, 30007]
neType: "AMF"
timeWindow: 60 # 秒

View File

@@ -0,0 +1,4 @@
schemaPath: /usr/local/omc/etc/schema
randomMin: 1
randomMax: 100
mergeMode: merge # none: Merge Mode None/merge: Merge Mode Merge/schema: Merge Mode Schema

View File

@@ -186,4 +186,14 @@ params:
testConfig:
enabled: false
file: /usr/local/omc/etc/testconfig.yaml
file: /usr/local/omc/etc/testconfig.yaml
nbiConfig:
enabled: true
pmConfig:
enabled: true
file: /usr/local/omc/etc/nbi_pm.yaml
# alarm_relation_rules.yaml
relationRules:
enabled: true
file: /usr/local/omc/etc/alarm_relation_rules.yaml

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,269 @@
[
{
"ObjectType": "PcfFunction",
"KPIs": [
{
"KPIID": "PCF.AmAssocNbrMean",
"KPIValues": [
{
"Name": "Total",
"Value": 6
}
]
},
{
"KPIID": "PCF.AmAssocNbrMax",
"KPIValues": [
{
"Name": "Total",
"Value": 10
}
]
},
{
"KPIID": "PCF.SmAssocNbrMean",
"KPIValues": [
{
"Name": "Total",
"Value": 7
}
]
},
{
"KPIID": "PCF.SmAssocNbrMax",
"KPIValues": [
{
"Name": "Total",
"Value": 11
}
]
},
{
"KPIID": "PCF.PolicyAmAssocCreateReq",
"KPIValues": [
{
"Name": "Total",
"Value": 8
}
]
},
{
"KPIID": "PCF.PolicyAmAssocCreateSucc",
"KPIValues": [
{
"Name": "Total",
"Value": 10
}
]
},
{
"KPIID": "PCF.PolicyAmAssocUpdateReq",
"KPIValues": [
{
"Name": "Total",
"Value": 7
}
]
},
{
"KPIID": "PCF.PolicyAmAssocUpdateSucc",
"KPIValues": [
{
"Name": "Total",
"Value": 0
}
]
},
{
"KPIID": "PCF.PolicyAmAssocNotifReq",
"KPIValues": [
{
"Name": "Total",
"Value": 2
}
]
},
{
"KPIID": "PCF.PolicyAmAssocNotifSucc",
"KPIValues": [
{
"Name": "Total",
"Value": 12
}
]
},
{
"KPIID": "PCF.PolicyAmAssocDeleteReq",
"KPIValues": [
{
"Name": "Total",
"Value": 11
}
]
},
{
"KPIID": "PCF.PolicyAmAssocDeleteSucc",
"KPIValues": [
{
"Name": "Total",
"Value": 2
}
]
},
{
"KPIID": "PCF.PolicySmAssocCreateReq",
"KPIValues": [
{
"Name": "Total",
"Value": 11
}
]
},
{
"KPIID": "PCF.PolicySmAssocCreateSucc",
"KPIValues": [
{
"Name": "Total",
"Value": 0
}
]
},
{
"KPIID": "PCF.PolicySmAssocCreateFail",
"KPIValues": [
{
"Name": "Total",
"Value": 11
}
]
},
{
"KPIID": "PCF.PolicySmAssocCreateFail._Cause",
"KPIValues": [
{
"Name": "Total",
"Value": 10
}
]
},
{
"KPIID": "PCF.PolicySmAssocUpdateReq",
"KPIValues": [
{
"Name": "Total",
"Value": 8
}
]
},
{
"KPIID": "PCF.PolicySmAssocUpdateSucc",
"KPIValues": [
{
"Name": "Total",
"Value": 4
}
]
},
{
"KPIID": "PCF.PolicySmAssocUpdateFail",
"KPIValues": [
{
"Name": "Total",
"Value": 9
}
]
},
{
"KPIID": "PCF.PolicySmAssocUpdateFail._Cause",
"KPIValues": [
{
"Name": "Total",
"Value": 3
}
]
},
{
"KPIID": "PCF.PolicySmAssocNotifReq",
"KPIValues": [
{
"Name": "Total",
"Value": 8
}
]
},
{
"KPIID": "PCF.PolicySmAssocNotifSucc",
"KPIValues": [
{
"Name": "Total",
"Value": 10
}
]
},
{
"KPIID": "PCF.PolicySmAssocNotifFail",
"KPIValues": [
{
"Name": "Total",
"Value": 0
}
]
},
{
"KPIID": "PCF.PolicySmAssocNotifFail._Cause",
"KPIValues": [
{
"Name": "Total",
"Value": 6
}
]
},
{
"KPIID": "PCF.PolicySmAssocDeleteReq",
"KPIValues": [
{
"Name": "Total",
"Value": 2
}
]
},
{
"KPIID": "PCF.PolicySmAssocDeleteSucc",
"KPIValues": [
{
"Name": "Total",
"Value": 2
}
]
}
]
},
{
"ObjectType": "UdrFunction",
"KPIs": [
{
"KPIID": "UDR.PcfSubNbr",
"KPIValues": [
{
"Name": "Total",
"Value": 6
}
]
}
]
},
{
"ObjectType": "ManagedElement",
"KPIs": [
{
"KPIID": "ME.MeanMeLoad",
"KPIValues": [
{
"Name": "Total",
"Value": 13
}
]
}
]
}
]

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,373 @@
[
{
"ObjectType": "UdmFunction",
"KPIs": [
{
"KPIID": "UDM.AmfUecmRegReq",
"KPIValues": [
{
"Name": "Total",
"Value": 15
}
]
},
{
"KPIID": "UDM.AmfUecmRegSucc",
"KPIValues": [
{
"Name": "Total",
"Value": 4
}
]
},
{
"KPIID": "UDM.AmfUecmRegUpdateReq",
"KPIValues": [
{
"Name": "Total",
"Value": 9
}
]
},
{
"KPIID": "UDM.AmfUecmRegUpdateSucc",
"KPIValues": [
{
"Name": "Total",
"Value": 9
}
]
},
{
"KPIID": "UDM.AmfUecmDeregReq",
"KPIValues": [
{
"Name": "Total",
"Value": 4
}
]
},
{
"KPIID": "UDM.AmfUecmDeregSucc",
"KPIValues": [
{
"Name": "Total",
"Value": 15
}
]
},
{
"KPIID": "UDM.SmfUecmRegReq",
"KPIValues": [
{
"Name": "Total",
"Value": 1
}
]
},
{
"KPIID": "UDM.SmfUecmRegSucc",
"KPIValues": [
{
"Name": "Total",
"Value": 3
}
]
},
{
"KPIID": "UDM.SmfUecmDeregReq",
"KPIValues": [
{
"Name": "Total",
"Value": 5
}
]
},
{
"KPIID": "UDM.SmfUecmDeregSucc",
"KPIValues": [
{
"Name": "Total",
"Value": 2
}
]
},
{
"KPIID": "UDM.SdmGetReq",
"KPIValues": [
{
"Name": "Total",
"Value": 16
}
]
},
{
"KPIID": "UDM.SdmGetSucc",
"KPIValues": [
{
"Name": "Total",
"Value": 14
}
]
},
{
"KPIID": "UDM.SdmNotif",
"KPIValues": [
{
"Name": "Total",
"Value": 6
}
]
},
{
"KPIID": "UDM.SdmSubscrReq",
"KPIValues": [
{
"Name": "Total",
"Value": 4
}
]
},
{
"KPIID": "UDM.SdmSubscrSucc",
"KPIValues": [
{
"Name": "Total",
"Value": 11
}
]
},
{
"KPIID": "UDM.SdmUnSubscrReq",
"KPIValues": [
{
"Name": "Total",
"Value": 10
}
]
},
{
"KPIID": "UDM.SdmUnSubscrSucc",
"KPIValues": [
{
"Name": "Total",
"Value": 14
}
]
},
{
"KPIID": "UDM.UecmDeregNotif",
"KPIValues": [
{
"Name": "Total",
"Value": 8
}
]
},
{
"KPIID": "UDM.SdmGetUserNotFound",
"KPIValues": [
{
"Name": "Total",
"Value": 7
}
]
},
{
"KPIID": "UDM.SdmGetDataNotFound",
"KPIValues": [
{
"Name": "Total",
"Value": 5
}
]
},
{
"KPIID": "UDM.AmfUecmRegUserNotFound",
"KPIValues": [
{
"Name": "Total",
"Value": 14
}
]
},
{
"KPIID": "UDM.AmfUecmRegUnknownSub",
"KPIValues": [
{
"Name": "Total",
"Value": 2
}
]
},
{
"KPIID": "UDM.AmfUecmRegNoPsSub",
"KPIValues": [
{
"Name": "Total",
"Value": 3
}
]
},
{
"KPIID": "UDM.AmfUecmRegRoamNotAllowed",
"KPIValues": [
{
"Name": "Total",
"Value": 10
}
]
},
{
"KPIID": "UDM.AmfUecmRegRatNotAllowed",
"KPIValues": [
{
"Name": "Total",
"Value": 3
}
]
},
{
"KPIID": "UDM.AmfUecmRegContextNotFound",
"KPIValues": [
{
"Name": "Total",
"Value": 3
}
]
},
{
"KPIID": "UDM.AmfUecmRegReAuth",
"KPIValues": [
{
"Name": "Total",
"Value": 4
}
]
},
{
"KPIID": "UDM.SmfUecmRegUserNotFound",
"KPIValues": [
{
"Name": "Total",
"Value": 15
}
]
},
{
"KPIID": "UDM.SmfUecmRegUnknownSub",
"KPIValues": [
{
"Name": "Total",
"Value": 13
}
]
},
{
"KPIID": "UDM.SmfUecmRegRoamNotAllowed",
"KPIValues": [
{
"Name": "Total",
"Value": 6
}
]
},
{
"KPIID": "UDM.SmfUecmRegDnnNotAllowed",
"KPIValues": [
{
"Name": "Total",
"Value": 6
}
]
}
]
},
{
"ObjectType": "UdrFunction",
"KPIs": [
{
"KPIID": "UDR.5gSupi",
"KPIValues": [
{
"Name": "Total",
"Value": 10
}
]
},
{
"KPIID": "UDR.5gSub",
"KPIValues": [
{
"Name": "Total",
"Value": 14
}
]
},
{
"KPIID": "UDR.5gActSub",
"KPIValues": [
{
"Name": "Total",
"Value": 16
}
]
}
]
},
{
"ObjectType": "AusfFunction",
"KPIs": [
{
"KPIID": "Ausf.UeAuthReq",
"KPIValues": [
{
"Name": "Total",
"Value": 0
}
]
},
{
"KPIID": "Ausf.UeAuthAnsSucc",
"KPIValues": [
{
"Name": "Total",
"Value": 0
}
]
},
{
"KPIID": "Ausf.UeAuthAnsUserNotFound",
"KPIValues": [
{
"Name": "Total",
"Value": 4
}
]
},
{
"KPIID": "Ausf.UeAuthAnsContextNotFound",
"KPIValues": [
{
"Name": "Total",
"Value": 0
}
]
}
]
},
{
"ObjectType": "ManagedElement",
"KPIs": [
{
"KPIID": "ME.MeanMeLoad",
"KPIValues": [
{
"Name": "Total",
"Value": 11
}
]
}
]
}
]

File diff suppressed because it is too large Load Diff

View File

@@ -504,6 +504,41 @@ amf:
filter: '{"0":"false","1":"true"}'
display: "statusReportEnabled"
comment: ""
- name: "getTraceDataFromUdm"
type: "bool"
value: "0"
access: "read-write"
filter: '{"0":"false","1":"true"}'
display: "getTraceDataFromUdm"
comment: ""
- name: "disableLocationReportControl"
type: "bool"
value: "0"
access: "read-write"
filter: '{"0":"false","1":"true"}'
display: "disableLocationReportControl"
comment: ""
- name: "sendDnnOiToSmf"
type: "bool"
value: "0"
access: "read-write"
filter: '{"0":"false","1":"true"}'
display: "sendDnnOiToSmf"
comment: ""
- name: "udsfEnabled"
type: "bool"
value: "0"
access: "read-write"
filter: '{"0":"false","1":"true"}'
display: "udsfEnabled"
comment: ""
- name: "enableHttpPprof"
type: "bool"
value: "0"
access: "read-write"
filter: '{"0":"false","1":"true"}'
display: "enableHttpPprof"
comment: ""
gnbList:
display: "Gnb List Config"
sort: 13

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,269 @@
[
{
"ObjectType": "PcfFunction",
"KPIs": [
{
"KPIID": "PCF.AmAssocNbrMean",
"KPIValues": [
{
"Name": "Total",
"Value": 6
}
]
},
{
"KPIID": "PCF.AmAssocNbrMax",
"KPIValues": [
{
"Name": "Total",
"Value": 10
}
]
},
{
"KPIID": "PCF.SmAssocNbrMean",
"KPIValues": [
{
"Name": "Total",
"Value": 7
}
]
},
{
"KPIID": "PCF.SmAssocNbrMax",
"KPIValues": [
{
"Name": "Total",
"Value": 11
}
]
},
{
"KPIID": "PCF.PolicyAmAssocCreateReq",
"KPIValues": [
{
"Name": "Total",
"Value": 8
}
]
},
{
"KPIID": "PCF.PolicyAmAssocCreateSucc",
"KPIValues": [
{
"Name": "Total",
"Value": 10
}
]
},
{
"KPIID": "PCF.PolicyAmAssocUpdateReq",
"KPIValues": [
{
"Name": "Total",
"Value": 7
}
]
},
{
"KPIID": "PCF.PolicyAmAssocUpdateSucc",
"KPIValues": [
{
"Name": "Total",
"Value": 0
}
]
},
{
"KPIID": "PCF.PolicyAmAssocNotifReq",
"KPIValues": [
{
"Name": "Total",
"Value": 2
}
]
},
{
"KPIID": "PCF.PolicyAmAssocNotifSucc",
"KPIValues": [
{
"Name": "Total",
"Value": 12
}
]
},
{
"KPIID": "PCF.PolicyAmAssocDeleteReq",
"KPIValues": [
{
"Name": "Total",
"Value": 11
}
]
},
{
"KPIID": "PCF.PolicyAmAssocDeleteSucc",
"KPIValues": [
{
"Name": "Total",
"Value": 2
}
]
},
{
"KPIID": "PCF.PolicySmAssocCreateReq",
"KPIValues": [
{
"Name": "Total",
"Value": 11
}
]
},
{
"KPIID": "PCF.PolicySmAssocCreateSucc",
"KPIValues": [
{
"Name": "Total",
"Value": 0
}
]
},
{
"KPIID": "PCF.PolicySmAssocCreateFail",
"KPIValues": [
{
"Name": "Total",
"Value": 11
}
]
},
{
"KPIID": "PCF.PolicySmAssocCreateFail._Cause",
"KPIValues": [
{
"Name": "Total",
"Value": 10
}
]
},
{
"KPIID": "PCF.PolicySmAssocUpdateReq",
"KPIValues": [
{
"Name": "Total",
"Value": 8
}
]
},
{
"KPIID": "PCF.PolicySmAssocUpdateSucc",
"KPIValues": [
{
"Name": "Total",
"Value": 4
}
]
},
{
"KPIID": "PCF.PolicySmAssocUpdateFail",
"KPIValues": [
{
"Name": "Total",
"Value": 9
}
]
},
{
"KPIID": "PCF.PolicySmAssocUpdateFail._Cause",
"KPIValues": [
{
"Name": "Total",
"Value": 3
}
]
},
{
"KPIID": "PCF.PolicySmAssocNotifReq",
"KPIValues": [
{
"Name": "Total",
"Value": 8
}
]
},
{
"KPIID": "PCF.PolicySmAssocNotifSucc",
"KPIValues": [
{
"Name": "Total",
"Value": 10
}
]
},
{
"KPIID": "PCF.PolicySmAssocNotifFail",
"KPIValues": [
{
"Name": "Total",
"Value": 0
}
]
},
{
"KPIID": "PCF.PolicySmAssocNotifFail._Cause",
"KPIValues": [
{
"Name": "Total",
"Value": 6
}
]
},
{
"KPIID": "PCF.PolicySmAssocDeleteReq",
"KPIValues": [
{
"Name": "Total",
"Value": 2
}
]
},
{
"KPIID": "PCF.PolicySmAssocDeleteSucc",
"KPIValues": [
{
"Name": "Total",
"Value": 2
}
]
}
]
},
{
"ObjectType": "UdrFunction",
"KPIs": [
{
"KPIID": "UDR.PcfSubNbr",
"KPIValues": [
{
"Name": "Total",
"Value": 6
}
]
}
]
},
{
"ObjectType": "ManagedElement",
"KPIs": [
{
"KPIID": "ME.MeanMeLoad",
"KPIValues": [
{
"Name": "Total",
"Value": 13
}
]
}
]
}
]

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,373 @@
[
{
"ObjectType": "UdmFunction",
"KPIs": [
{
"KPIID": "UDM.AmfUecmRegReq",
"KPIValues": [
{
"Name": "Total",
"Value": 15
}
]
},
{
"KPIID": "UDM.AmfUecmRegSucc",
"KPIValues": [
{
"Name": "Total",
"Value": 4
}
]
},
{
"KPIID": "UDM.AmfUecmRegUpdateReq",
"KPIValues": [
{
"Name": "Total",
"Value": 9
}
]
},
{
"KPIID": "UDM.AmfUecmRegUpdateSucc",
"KPIValues": [
{
"Name": "Total",
"Value": 9
}
]
},
{
"KPIID": "UDM.AmfUecmDeregReq",
"KPIValues": [
{
"Name": "Total",
"Value": 4
}
]
},
{
"KPIID": "UDM.AmfUecmDeregSucc",
"KPIValues": [
{
"Name": "Total",
"Value": 15
}
]
},
{
"KPIID": "UDM.SmfUecmRegReq",
"KPIValues": [
{
"Name": "Total",
"Value": 1
}
]
},
{
"KPIID": "UDM.SmfUecmRegSucc",
"KPIValues": [
{
"Name": "Total",
"Value": 3
}
]
},
{
"KPIID": "UDM.SmfUecmDeregReq",
"KPIValues": [
{
"Name": "Total",
"Value": 5
}
]
},
{
"KPIID": "UDM.SmfUecmDeregSucc",
"KPIValues": [
{
"Name": "Total",
"Value": 2
}
]
},
{
"KPIID": "UDM.SdmGetReq",
"KPIValues": [
{
"Name": "Total",
"Value": 16
}
]
},
{
"KPIID": "UDM.SdmGetSucc",
"KPIValues": [
{
"Name": "Total",
"Value": 14
}
]
},
{
"KPIID": "UDM.SdmNotif",
"KPIValues": [
{
"Name": "Total",
"Value": 6
}
]
},
{
"KPIID": "UDM.SdmSubscrReq",
"KPIValues": [
{
"Name": "Total",
"Value": 4
}
]
},
{
"KPIID": "UDM.SdmSubscrSucc",
"KPIValues": [
{
"Name": "Total",
"Value": 11
}
]
},
{
"KPIID": "UDM.SdmUnSubscrReq",
"KPIValues": [
{
"Name": "Total",
"Value": 10
}
]
},
{
"KPIID": "UDM.SdmUnSubscrSucc",
"KPIValues": [
{
"Name": "Total",
"Value": 14
}
]
},
{
"KPIID": "UDM.UecmDeregNotif",
"KPIValues": [
{
"Name": "Total",
"Value": 8
}
]
},
{
"KPIID": "UDM.SdmGetUserNotFound",
"KPIValues": [
{
"Name": "Total",
"Value": 7
}
]
},
{
"KPIID": "UDM.SdmGetDataNotFound",
"KPIValues": [
{
"Name": "Total",
"Value": 5
}
]
},
{
"KPIID": "UDM.AmfUecmRegUserNotFound",
"KPIValues": [
{
"Name": "Total",
"Value": 14
}
]
},
{
"KPIID": "UDM.AmfUecmRegUnknownSub",
"KPIValues": [
{
"Name": "Total",
"Value": 2
}
]
},
{
"KPIID": "UDM.AmfUecmRegNoPsSub",
"KPIValues": [
{
"Name": "Total",
"Value": 3
}
]
},
{
"KPIID": "UDM.AmfUecmRegRoamNotAllowed",
"KPIValues": [
{
"Name": "Total",
"Value": 10
}
]
},
{
"KPIID": "UDM.AmfUecmRegRatNotAllowed",
"KPIValues": [
{
"Name": "Total",
"Value": 3
}
]
},
{
"KPIID": "UDM.AmfUecmRegContextNotFound",
"KPIValues": [
{
"Name": "Total",
"Value": 3
}
]
},
{
"KPIID": "UDM.AmfUecmRegReAuth",
"KPIValues": [
{
"Name": "Total",
"Value": 4
}
]
},
{
"KPIID": "UDM.SmfUecmRegUserNotFound",
"KPIValues": [
{
"Name": "Total",
"Value": 15
}
]
},
{
"KPIID": "UDM.SmfUecmRegUnknownSub",
"KPIValues": [
{
"Name": "Total",
"Value": 13
}
]
},
{
"KPIID": "UDM.SmfUecmRegRoamNotAllowed",
"KPIValues": [
{
"Name": "Total",
"Value": 6
}
]
},
{
"KPIID": "UDM.SmfUecmRegDnnNotAllowed",
"KPIValues": [
{
"Name": "Total",
"Value": 6
}
]
}
]
},
{
"ObjectType": "UdrFunction",
"KPIs": [
{
"KPIID": "UDR.5gSupi",
"KPIValues": [
{
"Name": "Total",
"Value": 10
}
]
},
{
"KPIID": "UDR.5gSub",
"KPIValues": [
{
"Name": "Total",
"Value": 14
}
]
},
{
"KPIID": "UDR.5gActSub",
"KPIValues": [
{
"Name": "Total",
"Value": 16
}
]
}
]
},
{
"ObjectType": "AusfFunction",
"KPIs": [
{
"KPIID": "Ausf.UeAuthReq",
"KPIValues": [
{
"Name": "Total",
"Value": 0
}
]
},
{
"KPIID": "Ausf.UeAuthAnsSucc",
"KPIValues": [
{
"Name": "Total",
"Value": 0
}
]
},
{
"KPIID": "Ausf.UeAuthAnsUserNotFound",
"KPIValues": [
{
"Name": "Total",
"Value": 4
}
]
},
{
"KPIID": "Ausf.UeAuthAnsContextNotFound",
"KPIValues": [
{
"Name": "Total",
"Value": 0
}
]
}
]
},
{
"ObjectType": "ManagedElement",
"KPIs": [
{
"KPIID": "ME.MeanMeLoad",
"KPIValues": [
{
"Name": "Total",
"Value": 11
}
]
}
]
}
]

File diff suppressed because it is too large Load Diff

View File

@@ -36,8 +36,8 @@ CREATE TABLE `kpi_title` (
-- Records of kpi_title
-- ----------------------------
INSERT INTO `kpi_title` VALUES (1, 'AMF', 'AMF.01', '{\"cn\": \"AMF注册态用户数\", \"en\": \"AMF.RegSub\"}', 'AMF注册态用户数', 'AMF.RegSub');
INSERT INTO `kpi_title` VALUES (2, 'AMF', 'AMF.02', '{\"cn\": \"AMF初始注册请求次数\", \"en\": \"AMF.AttInitReg\"}', 'AMF初始注册请求次数', 'AMF.AttInitReg');
INSERT INTO `kpi_title` VALUES (3, 'AMF', 'AMF.03', '{\"cn\": \"AMF初始注册成功次数\", \"en\": \"AMF.SuccInitReg\"}', 'AMF初始注册成功次数', 'AMF.SuccInitReg');
INSERT INTO `kpi_title` VALUES (2, 'AMF', 'AMF.02', '{\"cn\": \"AMF初始注册请求次数\", \"en\": \"AMF.AttInitReg\"}', 'AMF初始注册请求次数', '5G Registration Request');
INSERT INTO `kpi_title` VALUES (3, 'AMF', 'AMF.03', '{\"cn\": \"AMF初始注册成功次数\", \"en\": \"AMF.SuccInitReg\"}', 'AMF初始注册成功次数', '5G Registration Success');
INSERT INTO `kpi_title` VALUES (4, 'AMF', 'AMF.04', '{\"cn\": \"AMF初始注册失败次数_非法用户\", \"en\": \"AMF.FailedInitReg.3\"}', 'AMF初始注册失败次数_非法用户', 'AMF.FailedInitReg.3');
INSERT INTO `kpi_title` VALUES (5, 'AMF', 'AMF.05', '{\"cn\": \"AMF初始注册失败次数_PEI不允许\", \"en\": \"AMF.FailedInitReg.5\"}', 'AMF初始注册失败次数_PEI不允许', 'AMF.FailedInitReg.5');
INSERT INTO `kpi_title` VALUES (6, 'AMF', 'AMF.06', '{\"cn\": \"AMF初始注册失败次数_非法设备\", \"en\": \"AMF.FailedInitReg.6\"}', 'AMF初始注册失败次数_非法设备', 'AMF.FailedInitReg.6');
@@ -80,8 +80,8 @@ INSERT INTO `kpi_title` VALUES (42, 'AUSF', 'AUSF.02', '{\"cn\": \"鉴权请求
INSERT INTO `kpi_title` VALUES (43, 'UPF', 'UPF.01', '{\"cn\": \"PFCP会话建立成功次数\", \"en\": \"UPF.PfcpSessionEstabSucc\"}', 'PFCP会话建立成功次数', 'UPF.PfcpSessionEstabSucc');
INSERT INTO `kpi_title` VALUES (44, 'UPF', 'UPF.02', '{\"cn\": \"PFCP会话建立请求次数\", \"en\": \"UPF.PfcpSessionEstabReq\"}', 'PFCP会话建立请求次数', 'UPF.PfcpSessionEstabReq');
INSERT INTO `kpi_title` VALUES (45, 'UPF', 'UPF.03', '{\"cn\": \"N6接口上行字节数\", \"en\": \"UPF.N6OgOct\"}', 'N6接口上行字节数', 'UPF.N6OgOct');
INSERT INTO `kpi_title` VALUES (46, 'UPF', 'UPF.04', '{\"cn\": \"N6接口下行字节数\", \"en\": \"UPF.N6IncOct\"}', 'N6接口下行字节数', 'UPF.N6IncOct');
INSERT INTO `kpi_title` VALUES (47, 'UPF', 'UPF.05', '{\"cn\": \"N3接口上行字节数\", \"en\": \"UPF.N3OgOct\"}', 'N3接口上行字节数', 'UPF.N3OgOct');
INSERT INTO `kpi_title` VALUES (46, 'UPF', 'UPF.04', '{\"cn\": \"N6接口下行字节数\", \"en\": \"UPF.N6IncOct\"}', 'N6接口下行字节数', 'UPF Downlink Throughput');
INSERT INTO `kpi_title` VALUES (47, 'UPF', 'UPF.05', '{\"cn\": \"N3接口上行字节数\", \"en\": \"UPF.N3OgOct\"}', 'N3接口上行字节数', 'UPF Uplink Throughput');
INSERT INTO `kpi_title` VALUES (48, 'UPF', 'UPF.06', '{\"cn\": \"N3接口下行字节数\", \"en\": \"UPF.N3IncOct\"}', 'N3接口下行字节数', 'UPF.N3IncOct');
INSERT INTO `kpi_title` VALUES (49, 'UPF', 'UPF.07', '{\"cn\": \"SGi接口上行字节数\", \"en\": \"IP.PeakThroughputUlSgi\"}', 'SGi接口上行字节数', 'IP.PeakThroughputUlSgi');
INSERT INTO `kpi_title` VALUES (50, 'UPF', 'UPF.08', '{\"cn\": \"SGi接口下行字节数\", \"en\": \"IP.PeakThroughputDlSgi\"}', 'SGi接口下行字节数', 'IP.PeakThroughputDlSgi');
@@ -209,12 +209,12 @@ INSERT INTO `kpi_title` VALUES (171, 'MOCNGW', 'MOCNGW.32', '{\"cn\":\"DownlinkG
INSERT INTO `kpi_title` VALUES (172, 'MOCNGW', 'MOCNGW.33', '{\"cn\":\"UplinkGenericNasTransport\",\"en\":\"UplinkGenericNasTransport\"}', 'UplinkGenericNasTransport', 'UplinkGenericNasTransport');
INSERT INTO `kpi_title` VALUES (173, 'IMS', 'SCSCF.01', '{\"cn\": \"LTE接入注册用户数\",\"en\": \"UR.SubsLTE.fromVoLTE\"}', 'LTE接入注册用户数', 'UR.SubsLTE.fromVoLTE');
INSERT INTO `kpi_title` VALUES (174, 'IMS', 'SCSCF.02', '{\"cn\": \"5G接入注册用户数\",\"en\": \"UR.Subs5G.fromVo5G\"}', '5G接入注册用户数', 'UR.Subs5G.fromVo5G');
INSERT INTO `kpi_title` VALUES (175, 'IMS', 'SCSCF.03', '{\"cn\": \"初始注册成功次数\",\"en\": \"UR.SuccInitReg\"}', '初始注册成功次数', 'UR.SuccInitReg');
INSERT INTO `kpi_title` VALUES (176, 'IMS', 'SCSCF.04', '{\"cn\": \"初始注册请求次数\",\"en\": \"UR.AttInitReg\"}', '初始注册请求次数', 'UR.AttInitReg');
INSERT INTO `kpi_title` VALUES (175, 'IMS', 'SCSCF.03', '{\"cn\": \"初始注册成功次数\",\"en\": \"UR.SuccInitReg\"}', '初始注册成功次数', 'VoNR Registration Success');
INSERT INTO `kpi_title` VALUES (176, 'IMS', 'SCSCF.04', '{\"cn\": \"初始注册请求次数\",\"en\": \"UR.AttInitReg\"}', '初始注册请求次数', 'VoNR Registration Request');
INSERT INTO `kpi_title` VALUES (177, 'IMS', 'SCSCF.05', '{\"cn\": \"主叫接通次数\",\"en\": \"SC.SuccSessionOrig\"}', '主叫接通次数', 'SC.SuccSessionOrig');
INSERT INTO `kpi_title` VALUES (178, 'IMS', 'SCSCF.06', '{\"cn\": \"主叫试呼次数\",\"en\": \"SC.AttSessionOrig\"}', '主叫试呼次数', 'SC.AttSessionOrig');
INSERT INTO `kpi_title` VALUES (178, 'IMS', 'SCSCF.06', '{\"cn\": \"主叫试呼次数\",\"en\": \"SC.AttSessionOrig\"}', '主叫试呼次数', 'MO Call Attempt');
INSERT INTO `kpi_title` VALUES (179, 'IMS', 'SCSCF.07', '{\"cn\": \"被叫接通次数\",\"en\": \"SC.SuccSessionTerm\"}', '被叫接通次数', 'SC.SuccSessionTerm');
INSERT INTO `kpi_title` VALUES (180, 'IMS', 'SCSCF.08', '{\"cn\": \"被叫试呼次数\",\"en\": \"SC.AttSessionTerm\"}', '被叫试呼次数', 'SC.AttSessionTerm');
INSERT INTO `kpi_title` VALUES (180, 'IMS', 'SCSCF.08', '{\"cn\": \"被叫试呼次数\",\"en\": \"SC.AttSessionTerm\"}', '被叫试呼次数', 'MT Call Attempt');
INSERT INTO `kpi_title` VALUES (181, 'IMS', 'SCSCF.09', '{\"cn\": \"主叫应答次数\",\"en\": \"SC.AnsSessionOrig\"}', '主叫应答次数', 'SC.AnsSessionOrig');
INSERT INTO `kpi_title` VALUES (182, 'IMS', 'SCSCF.10', '{\"cn\": \"主叫早释次数\",\"en\": \"SC.OrigRelBeforeRing\"}', '主叫早释次数', 'SC.OrigRelBeforeRing');
INSERT INTO `kpi_title` VALUES (183, 'IMS', 'SCSCF.11', '{\"cn\": \"主叫振铃早释次数\",\"en\": \"SC.OrigRelAfterRing\"}', '主叫振铃早释次数', 'SC.OrigRelAfterRing');

File diff suppressed because one or more lines are too long

View File

@@ -1,48 +1,34 @@
-- MariaDB dump 10.19 Distrib 10.6.16-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: 192.168.2.219 Database: omc_db
-- ------------------------------------------------------
-- Server version 10.3.38-MariaDB
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `alarm_relation`
--
DROP TABLE IF EXISTS `alarm_relation`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `alarm_relation` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`created_at` datetime(3) DEFAULT NULL,
`updated_at` datetime(3) DEFAULT NULL,
`deleted_at` datetime(3) DEFAULT NULL,
`root_alarm_id` varchar(64) DEFAULT NULL,
`alarm_id` varchar(64) DEFAULT NULL,
`relation_type` varchar(64) DEFAULT NULL,
`add_info` varchar(64) DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE,
KEY `idx_alarm_relation_deleted_at` (`deleted_at`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2024-03-06 17:26:55
/*
Navicat Premium Data Transfer
Source Server : root@192.168.2.165
Source Server Type : MariaDB
Source Server Version : 100335 (10.3.35-MariaDB)
Source Host : 192.168.2.165:33066
Source Schema : omc_db
Target Server Type : MariaDB
Target Server Version : 100335 (10.3.35-MariaDB)
File Encoding : 65001
Date: 16/05/2025 10:48:43
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for alarm_relation
-- ----------------------------
DROP TABLE IF EXISTS `alarm_relation`;
CREATE TABLE `alarm_relation` (
`id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`root_alarm_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`alarm_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`relation_type` enum('derived','related') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '衍生关系derived/related: 父子/兄弟',
`add_info` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`created_at` datetime NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;

View File

@@ -27,7 +27,7 @@ INSERT INTO `kpi_c_title` VALUES (4, 'AMF', 'AMF.C.04', '5G Register Subscriber'
INSERT INTO `kpi_c_title` VALUES (5, 'SMF', 'SMF.C.01', 'SA_MeanPduSession', '\'SMF.01\'', ' ', 'Active', '', 'admin', '2024-12-12 19:32:45');
INSERT INTO `kpi_c_title` VALUES (6, 'SMF', 'SMF.C.02', 'PDU Session Establishment Success Rate', '(\'SMF.02\'/\'SMF.03\')*100', '%', 'Active', '', 'admin', '2024-12-12 19:33:27');
INSERT INTO `kpi_c_title` VALUES (7, 'SMF', 'SMF.C.03', 'IMS Session Establishment Success Rate', '(\'SMF.04\'/\'SMF.05\')*100', '%', 'Active', '', 'admin', '2024-12-12 19:34:07');
INSERT INTO `kpi_c_title` VALUES (8, 'MME', 'MME.C.01', 'Attach Success Rate ', '(\'MME.A.02\'/\'MME.A.01\')*100', '%', 'Active', '', 'admin', '2024-12-12 20:26:09');
INSERT INTO `kpi_c_title` VALUES (8, 'MME', 'MME.C.01', 'Attach Success Rate ', '(\'MME.A.05\'/\'MME.A.04\')*100', '%', 'Active', '', 'admin', '2024-12-12 20:26:09');
INSERT INTO `kpi_c_title` VALUES (9, 'UPF', 'UPF.C.01', 'PFCP Establish Success Rate ', '(\'UPF.01\'/\'UPF.02\')*100', '%', 'Active', '', 'admin', '2024-12-12 20:26:40');
INSERT INTO `kpi_c_title` VALUES (10, 'UPF', 'UPF.C.02', 'N6_Uplink_Throughout', '(\'UPF.03\')*8/5/1000/1000', 'Mbps', 'Active', '', 'admin', '2025-01-20 09:26:06');
INSERT INTO `kpi_c_title` VALUES (11, 'UPF', 'UPF.C.03', 'N3_Uplink_Throughout', '(\'UPF.06\')*8/5/1000/1000', 'Mbps', 'Active', '', 'admin', '2025-01-20 09:26:57');
@@ -38,7 +38,7 @@ INSERT INTO `kpi_c_title` VALUES (15, 'IMS', 'IMS.C.02', 'MO_Success_Rate', '(\'
INSERT INTO `kpi_c_title` VALUES (16, 'IMS', 'IMS.C.03', 'MT_Success_Rate', '(\'SCSCF.07\'/\'SCSCF.08\')*100', '%', 'Active', '', 'admin', '2024-12-12 20:30:49');
INSERT INTO `kpi_c_title` VALUES (17, 'IMS', 'IMS.C.04', 'Service_Success_Rate ', '((\'SCSCF.05\'+\'SCSCF.07\')/(\'SCSCF.06\'+\'SCSCF.08\'))*100', '%', 'Active', '', 'admin', '2024-12-12 20:31:41');
INSERT INTO `kpi_c_title` VALUES (18, 'SMF', 'SMF.C.06', 'IMS_DefaultBear_Success_Rate ', '(\'SMF.13\'/\'SMF.14\')*100', '%', 'Active', '', 'admin', '2024-12-13 10:49:00');
INSERT INTO `kpi_c_title` VALUES (19, 'SMF', 'SMF.C.07', 'Bear_Success_Rate_new', '((\'SMF.09\'+\'SMF.11\')/(\'SMF.10\'+\'SMF.12\') )*100', '%', 'Active', '', 'admin', '2024-12-13 11:16:04');
INSERT INTO `kpi_c_title` VALUES (19, 'SMF', 'SMF.C.07', 'Bear_Success_Rate_new', '((\'SMF.09\'+\'SMF.11\')/(\'SMF.10\'+\'SMF.12\') )*100', '%', 'Deleted', '', 'admin', '2024-12-13 11:16:04');
INSERT INTO `kpi_c_title` VALUES (22, 'UPF', 'UPF.C.06', 'N3_Downlink_Throughout', '(\'UPF.05\')*8/5/1000/1000', 'Mbps', 'Active', '', 'admin', '2025-01-15 02:53:32');
INSERT INTO `kpi_c_title` VALUES (23, 'UPF', 'UPF.C.07', 'N6_Downlink_Throughout', '(\'UPF.04\')*8/5/1000/1000', 'Mbps', 'Active', '', 'admin', '2025-01-15 02:53:32');

View File

@@ -1,54 +1,39 @@
-- MariaDB dump 10.19 Distrib 10.6.16-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: 192.168.2.219 Database: omc_db
-- ------------------------------------------------------
-- Server version 10.3.38-MariaDB
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `nbi_cm`
--
DROP TABLE IF EXISTS `nbi_cm`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `nbi_cm` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`timestamp` datetime DEFAULT current_timestamp() ON UPDATE current_timestamp(),
`time_zone` varchar(10) DEFAULT NULL,
`vendor_name` varchar(65) DEFAULT NULL,
`ne_type` varchar(16) DEFAULT NULL,
`cm_version` varchar(32) DEFAULT NULL,
`rm_uid` varchar(32) DEFAULT NULL,
`ne_id` varchar(32) DEFAULT NULL,
`user_label` varchar(64) DEFAULT NULL,
`object_type` varchar(32) DEFAULT NULL,
`pv_flag` enum('PNF','VNF') DEFAULT 'PNF',
`vm_id` varchar(128) DEFAULT '0',
`vnf_instance_id` varchar(64) DEFAULT NULL,
`value_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`status` enum('Original','Created','Updated','Deleted') NOT NULL DEFAULT 'Original',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=311439 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2024-03-06 17:26:56
/*
Navicat Premium Data Transfer
Source Server : root@192.168.2.165
Source Server Type : MariaDB
Source Server Version : 100335 (10.3.35-MariaDB)
Source Host : 192.168.2.165:33066
Source Schema : omc_db
Target Server Type : MariaDB
Target Server Version : 100335 (10.3.35-MariaDB)
File Encoding : 65001
Date: 26/05/2025 17:26:21
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for nbi_cm
-- ----------------------------
DROP TABLE IF EXISTS `nbi_cm`;
CREATE TABLE `nbi_cm` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ne_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`cm_version` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`rm_uid` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`event_type` enum('ObjectOriginalEvent','ObjectCreationEvent','ObjectDeletionEvent','ObjectAttributeValueChangeEvent') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'ObjectCreationEvent',
`object_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`value_json` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
`timestamp` datetime NULL DEFAULT current_timestamp() ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx-ne-id-rmuid`(`ne_type`, `ne_id`, `rm_uid`) USING BTREE,
INDEX `idx-timestamp`(`timestamp`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 93 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;

View File

@@ -1,44 +1,59 @@
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
--
-- Table structure for table `ne_license`
--
DROP TABLE IF EXISTS `ne_license`;
CREATE TABLE `ne_license` (
`id` int NOT NULL AUTO_INCREMENT,
`ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元类型',
`ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元ID',
`activation_request_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '激活申请代码',
`license_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '激活授权文件',
`serial_num` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '-' COMMENT '序列号',
`expiry_date` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '-' COMMENT '许可证到期日期',
`status` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '状态 0无效 1有效',
`remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '备注',
`create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '创建者',
`create_time` bigint DEFAULT '0' COMMENT '创建时间',
`update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '更新者',
`update_time` bigint DEFAULT '0' COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `uk_type_id` (`ne_type`,`ne_id`) USING BTREE COMMENT '唯一网元类型和网元ID'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='网元授权激活信息';
-- 初始数据对应网元
INSERT INTO `ne_license` VALUES (1, 'OMC', '001', '', '', '', '', '0', '', 'supervisor', 1713928436971, '', 0);
INSERT INTO `ne_license` VALUES (2, 'IMS', '001', '', '', '', '', '0', '', 'supervisor', 1713928436971, '', 0);
INSERT INTO `ne_license` VALUES (3, 'AMF', '001', '', '', '', '', '0', '', 'supervisor', 1713928436971, '', 0);
INSERT INTO `ne_license` VALUES (4, 'AUSF', '001', '', '', '', '', '0', '', 'supervisor', 1713928436971, '', 0);
INSERT INTO `ne_license` VALUES (5, 'UDM', '001', '', '', '', '', '0', '', 'supervisor', 1713928436971, '', 0);
INSERT INTO `ne_license` VALUES (6, 'SMF', '001', '', '', '', '', '0', '', 'supervisor', 1713928436971, '', 0);
INSERT INTO `ne_license` VALUES (7, 'PCF', '001', '', '', '', '', '0', '', 'supervisor', 1713928436971, '', 0);
INSERT INTO `ne_license` VALUES (8, 'NSSF', '001', '', '', '', '', '0', '', 'supervisor', 1713928436971, '', 0);
INSERT INTO `ne_license` VALUES (9, 'NRF', '001', '', '', '', '', '0', '', 'supervisor', 1713928436971, '', 0);
INSERT INTO `ne_license` VALUES (10, 'UPF', '001', '', '', '', '', '0', '', 'supervisor', 1713928436971, '', 0);
INSERT INTO `ne_license` VALUES (11, 'LMF', '001', '', '', '', '', '0', '', 'supervisor', 1713928436971, '', 0);
INSERT INTO `ne_license` VALUES (12, 'NEF', '001', '', '', '', '', '0', '', 'supervisor', 1713928436971, '', 0);
INSERT INTO `ne_license` VALUES (13, 'MME', '001', '', '', '', '', '0', '', 'supervisor', 1713928436971, '', 0);
INSERT INTO `ne_license` VALUES (14, 'N3IWF', '001', '', '', '', '', '0', '', 'supervisor', 1713928436971, '', 0);
SET FOREIGN_KEY_CHECKS=1;
/*
Navicat Premium Data Transfer
Source Server : omc@192.168.2.164
Source Server Type : MariaDB
Source Server Version : 100528 (10.5.28-MariaDB)
Source Host : 192.168.2.164:33066
Source Schema : omc_db
Target Server Type : MariaDB
Target Server Version : 100528 (10.5.28-MariaDB)
File Encoding : 65001
Date: 29/04/2025 14:45:48
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for ne_license
-- ----------------------------
DROP TABLE IF EXISTS `ne_license`;
CREATE TABLE `ne_license` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元类型',
`ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元ID',
`activation_request_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '激活申请代码',
`license_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '激活授权文件',
`serial_num` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '-' COMMENT '序列号',
`expiry_date` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '-' COMMENT '许可证到期日期',
`capability` int(11) NULL DEFAULT 0,
`status` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '状态 0无效 1有效',
`remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注',
`create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者',
`create_time` bigint(20) NULL DEFAULT 0 COMMENT '创建时间',
`update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者',
`update_time` bigint(20) NULL DEFAULT 0 COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `uk_type_id`(`ne_type`, `ne_id`) USING BTREE COMMENT '唯一网元类型和网元ID'
) ENGINE = InnoDB AUTO_INCREMENT = 19 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '网元授权激活信息' ROW_FORMAT = Dynamic;
-- 初始数据对应网元
INSERT INTO `ne_license` VALUES (1, 'OMC', '001', '', '', '', '', 0, '0', '', 'supervisor', 1713928436971, '', 0);
INSERT INTO `ne_license` VALUES (2, 'IMS', '001', '', '', '', '', 0, '0', '', 'supervisor', 1713928436971, '', 0);
INSERT INTO `ne_license` VALUES (3, 'AMF', '001', '', '', '', '', 0, '0', '', 'supervisor', 1713928436971, '', 0);
INSERT INTO `ne_license` VALUES (4, 'AUSF', '001', '', '', '', '', 0, '0', '', 'supervisor', 1713928436971, '', 0);
INSERT INTO `ne_license` VALUES (5, 'UDM', '001', '', '', '', '', 0, '0', '', 'supervisor', 1713928436971, '', 0);
INSERT INTO `ne_license` VALUES (6, 'SMF', '001', '', '', '', '', 0, '0', '', 'supervisor', 1713928436971, '', 0);
INSERT INTO `ne_license` VALUES (7, 'PCF', '001', '', '', '', '', 0, '0', '', 'supervisor', 1713928436971, '', 0);
INSERT INTO `ne_license` VALUES (8, 'NSSF', '001', '', '', '', '', 0, '0', '', 'supervisor', 1713928436971, '', 0);
INSERT INTO `ne_license` VALUES (9, 'NRF', '001', '', '', '', '', 0, '0', '', 'supervisor', 1713928436971, '', 0);
INSERT INTO `ne_license` VALUES (10, 'UPF', '001', '', '', '', '', 0, '0', '', 'supervisor', 1713928436971, '', 0);
INSERT INTO `ne_license` VALUES (11, 'LMF', '001', '', '', '', '', 0, '0', '', 'supervisor', 1713928436971, '', 0);
INSERT INTO `ne_license` VALUES (12, 'NEF', '001', '', '', '', '', 0, '0', '', 'supervisor', 1713928436971, '', 0);
INSERT INTO `ne_license` VALUES (13, 'MME', '001', '', '', '', '', 0, '0', '', 'supervisor', 1713928436971, '', 0);
INSERT INTO `ne_license` VALUES (14, 'N3IWF', '001', '', '', '', '', 0, '0', '', 'supervisor', 1713928436971, '', 0);
SET FOREIGN_KEY_CHECKS=1;

View File

@@ -42,7 +42,7 @@ INSERT INTO `sys_config` VALUES (108, 'config.sys.i18nOpen', 'sys.i18n.open', 't
INSERT INTO `sys_config` VALUES (109, 'config.sys.i18nDefault', 'sys.i18n.default', 'en_US', 'Y', 'supervisor', 1700000000000, NULL, 0, 'config.sys.i18nDefaultRemark');
INSERT INTO `sys_config` VALUES (110, 'config.sys.lockTime', 'sys.lockTime', '0', 'Y', 'supervisor', 1704960008300, 'admin', 1706838764703, 'config.sys.lockTimeRemark');
INSERT INTO `sys_config` VALUES (111, 'config.sys.homePage', 'sys.homePage', 'configManage/neOverview/index', 'Y', 'supervisor', 1704960008300, 'admin', 1706838764703, 'config.sys.homePageRemark');
INSERT INTO `sys_config` VALUES (112, 'config.sys.exportTable', 'sys.exportTable', '43t6VAMQmdnt9ynWGJIR1ufeQOvr1doHDsjWUFT8JVzxTVEYgZ1Xvrk47JaPeCHMPKk9zLhJCU9MmA7JAWslQyWBLHzVOMUmA1ppIL1sVIkWGrdDiw0XuMdvXpUu/adrXHhqo42NP3hxcvwXvkWvgedezzCnUsvqfMt+Yw1Wick=', 'Y', 'supervisor', 1737355823940, 'supervisor', 1737363302083, 'config.sys.exportTableRemark');
INSERT INTO `sys_config` VALUES (112, 'config.sys.exportTable', 'sys.exportTable', 'B1n9hW6Z2S2wZw4MVPAX6Q4wCuyWKdMk+qH1ZKqpLJxwvq2FBRgAT6WWw+j6O+ExHIJhpJ3XCpMBoiNN/RkW6EPurmqM82gnXWUIf/s6gk7OWrhdvQDD2jjNVBkLCmPLEH3ZLdgnQOZOePA7WyUdXA==', 'Y', 'supervisor', 1737355823940, 'supervisor', 1737363302083, 'config.sys.exportTableRemark');
UNLOCK TABLES;

View File

@@ -168,5 +168,24 @@ INSERT INTO `sys_dict_data` VALUES (140, 21, 'dictData.cdr_cause_code.41', '41',
INSERT INTO `sys_dict_data` VALUES (141, 22, 'dictData.cdr_cause_code.42', '42', 'cdr_cause_code', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (142, 23, 'dictData.cdr_cause_code.47', '47', 'cdr_cause_code', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (143, 30, 'dictData.cdr_cause_code.50', '50', 'cdr_cause_code', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (144, 1, 'dictData.trace_msg_type.0', '0', 'trace_msg_type', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (145, 2, 'dictData.trace_msg_type.1', '1', 'trace_msg_type', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (146, 1, 'dictData.trace_msg_direct.0', '0', 'trace_msg_direct', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (147, 2, 'dictData.trace_msg_direct.1', '1', 'trace_msg_direct', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (148, 1, 'dictData.trace_interfaces.1', 'N1', 'trace_interfaces', '', '', '0', 'supervisor', 1712720201349, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (149, 2, 'dictData.trace_interfaces.2', 'N2', 'trace_interfaces', '', '', '0', 'supervisor', 1712720201349, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (150, 3, 'dictData.trace_interfaces.3', 'N1/N2', 'trace_interfaces', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (151, 4, 'dictData.trace_interfaces.4', 'N4', 'trace_interfaces', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (152, 8, 'dictData.trace_interfaces.8', 'N8', 'trace_interfaces', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (153, 10, 'dictData.trace_interfaces.10', 'N10', 'trace_interfaces', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (154, 11, 'dictData.trace_interfaces.11', 'N11', 'trace_interfaces', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (155, 12, 'dictData.trace_interfaces.12', 'N12', 'trace_interfaces', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (156, 13, 'dictData.trace_interfaces.13', 'N13', 'trace_interfaces', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (157, 7, 'dictData.trace_interfaces.7', 'N7', 'trace_interfaces', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (158, 15, 'dictData.trace_interfaces.15', 'N15', 'trace_interfaces', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (159, 17, 'dictData.trace_interfaces.17', 'N17', 'trace_interfaces', '', '', '0', 'supervisor', 1712720201349, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (160, 20, 'dictData.trace_interfaces.20', 'N20', 'trace_interfaces', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (161, 22, 'dictData.trace_interfaces.22', 'N22', 'trace_interfaces', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (162, 40, 'dictData.trace_interfaces.40', 'N40', 'trace_interfaces', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
SET FOREIGN_KEY_CHECKS = 1;

View File

@@ -79,7 +79,7 @@ INSERT INTO `sys_dict_data` VALUES (1071, 1071, 'menu.ueUser.onlineUE', 'UE在
INSERT INTO `sys_dict_data` VALUES (1072, 1072, 'menu.ueUser.base5G', '基站信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
INSERT INTO `sys_dict_data` VALUES (1073, 1073, 'menu.trace', '跟踪', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
INSERT INTO `sys_dict_data` VALUES (1074, 1074, 'menu.trace.task', '网元跟踪任务', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
INSERT INTO `sys_dict_data` VALUES (1075, 1075, 'menu.trace.analysis', '网元跟踪数据', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
INSERT INTO `sys_dict_data` VALUES (1075, 1075, 'menu.trace.taskData', '网元跟踪任务数据', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
INSERT INTO `sys_dict_data` VALUES (1076, 1076, 'menu.trace.pcap', '信令抓包', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
INSERT INTO `sys_dict_data` VALUES (1077, 1077, 'menu.fault', '监控', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
INSERT INTO `sys_dict_data` VALUES (1078, 1078, 'config.sys.exportTable', '备份文件FTP服务', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
@@ -89,7 +89,7 @@ INSERT INTO `sys_dict_data` VALUES (1081, 1081, 'menu.ueUser.onlineUERemark', 'U
INSERT INTO `sys_dict_data` VALUES (1082, 1082, 'menu.ueUser.base5GRemark', '5G基站信息菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
INSERT INTO `sys_dict_data` VALUES (1083, 1083, 'menu.traceRemark', '跟踪管理目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
INSERT INTO `sys_dict_data` VALUES (1084, 1084, 'menu.trace.taskRemark', '跟踪任务菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
INSERT INTO `sys_dict_data` VALUES (1085, 1085, 'menu.trace.analysisRemark', '信令分析菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
-- INSERT INTO `sys_dict_data` VALUES (1085, 1085, 'menu.trace.analysisRemark', '信令分析菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
INSERT INTO `sys_dict_data` VALUES (1086, 1086, 'menu.trace.pcapRemark', '信令抓包菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
INSERT INTO `sys_dict_data` VALUES (1087, 1087, 'menu.faultRemark', '故障管理目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
INSERT INTO `sys_dict_data` VALUES (1088, 1088, 'menu.fault.active', '活动告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
@@ -656,7 +656,7 @@ INSERT INTO `sys_dict_data` VALUES (2145, 2145, 'menu.system.user.editPost', '
INSERT INTO `sys_dict_data` VALUES (2146, 2146, 'menu.dashboard.smscCDR', '短信话单', 'i18n_zh', '', '', '1', 'supervisor', 1717051745866, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (2147, 2147, 'log.operate.title.smscCDR', '短信话单', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (2148, 2148, 'menu.trace.pcapFile', '信令抓包文件', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (2149, 2149, 'menu.trace.taskAnalyze', '跟踪数据分析', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (2149, 2149, 'menu.trace.taskAnalyze', '网元跟踪任务分析', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (2150, 2150, 'job.ne_data_udm', '网元数据-UDM数据刷新同步', 'i18n_zh', '', '', '1', 'supervisor', 1730173767412, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (2151, 2151, 'menu.system.setting.doc', '系统使用文档', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (2152, 2152, 'menu.system.setting.official', '官网链接', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, '');
@@ -695,5 +695,47 @@ INSERT INTO `sys_dict_data` VALUES (2184, 2184, 'config.sys.homePage', '自定
INSERT INTO `sys_dict_data` VALUES (2185, 2185, 'config.sys.homePageRemark', '选择列表中的任一页面作为主页路径', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (2186, 2186, 'menu.config.neOverview', '网元概览', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (2187, 2187, 'menu.config.neOverviewRemark', '显示所有网元状态配置和license等概览信息', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (2188, 2188, 'job.exportSGWCCDR', '定期从漫游数据话单表导出文件至指定目录', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (2189, 2189, 'table.cdr_event_sgwc', '漫游数据话单', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (2190, 2190, 'menu.dashboard.overview.smfUeNum', '展示数据会话数', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (2191, 2191, 'menu.dashboard.overview.imsUeNum', '展示语音会话数', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (2192, 2192, 'menu.dashboard.overview.gnbBase', '展示5G基站在线信息', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (2193, 2193, 'menu.dashboard.overview.enbBase', '展示4G基站在线信息', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (2194, 2194, 'menu.ueUser.imsUDM', 'IMS签约用户', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (2195, 2195, 'menu.ueUser.imsUDMRemark', 'IMS签约用户菜单', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (2196, 2196, 'menu.ueUser.voipUDM', 'VoIP鉴权数据', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (2197, 2197, 'menu.ueUser.voipUDMRemark', 'VoIP鉴权数据菜单', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (2198, 2198, 'menu.ueUser.exportFile', '文件管理', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (2199, 2199, 'menu.ueUser.exportFileRemark', '文件管理菜单', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (2200, 2200, 'job.backup.ue.data', '定期备份UE用户和数据表', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (2201, 2201, 'table.u_auth_user', 'UDM鉴权用户', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (2202, 2202, 'table.u_sub_user', 'UDM签约用户', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (2203, 2203, 'table.u_voip_auth', 'VoIP鉴权数据', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (2204, 2204, 'table.u_ims_user', 'IMS签约用户', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (2205, 2205, 'dictType.trace_msg_type', '跟踪消息类型', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (2206, 2206, 'dictData.trace_msg_type.0', '请求', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (2207, 2207, 'dictData.trace_msg_type.1', '响应', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (2208, 2208, 'dictType.trace_msg_direct', '跟踪消息方向', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (2209, 2209, 'dictData.trace_msg_direct.0', '接收', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (2210, 2210, 'dictData.trace_msg_direct.1', '发送', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (2211, 2211, 'dictData.trace_interfaces.1', 'N1', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (2212, 2212, 'dictData.trace_interfaces.2', 'N2', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (2213, 2213, 'dictData.trace_interfaces.3', 'N1/N2', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (2214, 2214, 'dictData.trace_interfaces.4', 'N4', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (2215, 2215, 'dictData.trace_interfaces.8', 'N8', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (2216, 2216, 'dictData.trace_interfaces.10', 'N10', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (2217, 2217, 'dictData.trace_interfaces.11', 'N11', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (2218, 2218, 'dictData.trace_interfaces.12', 'N12', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (2219, 2219, 'dictData.trace_interfaces.13', 'N13', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (2220, 2220, 'dictData.trace_interfaces.7', 'N7', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (2221, 2221, 'dictData.trace_interfaces.15', 'N15', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (2222, 2222, 'dictData.trace_interfaces.17', 'N17', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (2223, 2223, 'dictData.trace_interfaces.20', 'N20', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (2224, 2224, 'dictData.trace_interfaces.22', 'N22', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (2225, 2225, 'dictData.trace_interfaces.40', 'N40', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2226, 2226, 'job.nbi.syncNRM', '定期同步网元资源数据', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2227, 2227, 'job.nbi.syncNRM.remark', '定期同步网元资源数据任务', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2228, 2228, 'job.deleteExpiredNbiCm', '定期删除北向资源数据', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2229, 2229, 'job.deleteExpiredNbiCm.remark', '定期删除北向资源数据任务', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
SET FOREIGN_KEY_CHECKS = 1;

View File

@@ -79,7 +79,7 @@ INSERT INTO `sys_dict_data` VALUES (3071, 3071, 'menu.ueUser.onlineUE', 'UE Onli
INSERT INTO `sys_dict_data` VALUES (3072, 3072, 'menu.ueUser.base5G', 'Radio Information', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
INSERT INTO `sys_dict_data` VALUES (3073, 3073, 'menu.trace', 'Trace', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
INSERT INTO `sys_dict_data` VALUES (3074, 3074, 'menu.trace.task', 'NE Trace Task', 'i18n_en', '', '', '1', 'supervisor', 1700000000000, NULL, 0, '');
INSERT INTO `sys_dict_data` VALUES (3075, 3075, 'menu.trace.analysis', 'NE Trace Task Data', 'i18n_en', '', '', '1', 'supervisor', 1700000000000, NULL, 0, '');
INSERT INTO `sys_dict_data` VALUES (3075, 3075, 'menu.trace.taskData', 'NE Trace Task Data', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
INSERT INTO `sys_dict_data` VALUES (3076, 3076, 'menu.trace.pcap', 'Signaling Capture', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
INSERT INTO `sys_dict_data` VALUES (3077, 3077, 'menu.fault', 'Monitor', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
INSERT INTO `sys_dict_data` VALUES (3078, 3078, 'config.sys.exportTable', 'Backup file FTP service', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
@@ -89,7 +89,7 @@ INSERT INTO `sys_dict_data` VALUES (3081, 3081, 'menu.ueUser.onlineUERemark', 'U
INSERT INTO `sys_dict_data` VALUES (3082, 3082, 'menu.ueUser.base5GRemark', '5G Base Station Information Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
INSERT INTO `sys_dict_data` VALUES (3083, 3083, 'menu.traceRemark', 'Tracking Management Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
INSERT INTO `sys_dict_data` VALUES (3084, 3084, 'menu.trace.taskRemark', 'Tracking Task Menu', 'i18n_en', '', '', '1', 'supervisor', 1700000000000, NULL, 0, '');
INSERT INTO `sys_dict_data` VALUES (3085, 3085, 'menu.trace.analysisRemark', 'Signaling Analysis Menu', 'i18n_en', '', '', '1', 'supervisor', 1700000000000, NULL, 0, '');
-- INSERT INTO `sys_dict_data` VALUES (3085, 3085, 'menu.trace.analysisRemark', 'Signaling Analysis Menu', 'i18n_en', '', '', '1', 'supervisor', 1700000000000, NULL, 0, '');
INSERT INTO `sys_dict_data` VALUES (3086, 3086, 'menu.trace.pcapRemark', 'Signaling Capture Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
INSERT INTO `sys_dict_data` VALUES (3087, 3087, 'menu.faultRemark', 'Fault Management Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
INSERT INTO `sys_dict_data` VALUES (3088, 3088, 'menu.fault.active', 'Active Alarms', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
@@ -656,7 +656,7 @@ INSERT INTO `sys_dict_data` VALUES (4145, 4145, 'menu.system.user.editPost', 'Mo
INSERT INTO `sys_dict_data` VALUES (4146, 4146, 'menu.dashboard.smscCDR', 'SMS CDR', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (4147, 4147, 'log.operate.title.smscCDR', 'SMS CDR', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (4148, 4148, 'menu.trace.pcapFile', 'Signaling Capture File', 'i18n_en', '', '', '1', 'supervisor', 1718441035866, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (4149, 4149, 'menu.trace.taskAnalyze', 'Tracking Data Analysis', 'i18n_en', '', '', '1', 'supervisor', 1718441035866, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (4149, 4149, 'menu.trace.taskAnalyze', 'NE Trace Task Analysis', 'i18n_en', '', '', '1', 'supervisor', 1718441035866, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (4150, 4150, 'job.ne_data_udm', 'NE Data Sync UDM', 'i18n_en', '', '', '1', 'supervisor', 1730173767412, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (4151, 4151, 'menu.system.setting.doc', 'System User Documentation', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (4152, 4152, 'menu.system.setting.official', 'Official Website', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, '');
@@ -695,5 +695,47 @@ INSERT INTO `sys_dict_data` VALUES (4184, 4184, 'config.sys.homePage', 'Custom H
INSERT INTO `sys_dict_data` VALUES (4185, 4185, 'config.sys.homePageRemark', 'Select any page in the list as the homepage', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (4186, 4186, 'menu.config.neOverview', 'NE Overview', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (4187, 4187, 'menu.config.neOverviewRemark', 'Displays overview information such as status, configuration and license of all network elements', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (4188, 4188, 'job.exportSGWCCDR', 'Export regularly from Roaming Data CDR table', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (4189, 4189, 'table.cdr_event_sgwc', 'Roaming Data CDR', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (4190, 4190, 'menu.dashboard.overview.smfUeNum', 'Display data session number', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (4191, 4191, 'menu.dashboard.overview.imsUeNum', 'Display the number of voice sessions', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (4192, 4192, 'menu.dashboard.overview.gnbBase', 'Display 5G base station online information', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (4193, 4193, 'menu.dashboard.overview.enbBase', 'Display 4G base station online information', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (4194, 4194, 'menu.ueUser.imsUDM', 'IMS Subscribers', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (4195, 4195, 'menu.ueUser.imsUDMRemark', 'IMS Subscribers Menu', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (4196, 4196, 'menu.ueUser.voipUDM', 'VoIP Authentication', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (4197, 4197, 'menu.ueUser.voipUDMRemark', 'VoIP Authentication Menu', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (4198, 4198, 'menu.ueUser.exportFile', 'File Management', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (4199, 4199, 'menu.ueUser.exportFileRemark', 'File Management Menu', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (4200, 4200, 'job.backup.ue.data', 'Backup regularly UE users and data tables', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (4201, 4201, 'table.u_auth_user', 'UDM Authentication', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (4202, 4202, 'table.u_sub_user', 'UDM Subscribers', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (4203, 4203, 'table.u_voip_auth', 'VoIP Authentication', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (4204, 4204, 'table.u_ims_user', 'IMS Subscribers', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (4205, 4205, 'dictType.trace_msg_type', 'Trace Message Type', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (4206, 4206, 'dictData.trace_msg_type.0', 'Request', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (4207, 4207, 'dictData.trace_msg_type.1', 'Response', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (4208, 4208, 'dictType.trace_msg_direct', 'Track Message Directio', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (4209, 4209, 'dictData.trace_msg_direct.0', 'Receive', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (4210, 4210, 'dictData.trace_msg_direct.1', 'Send', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (4211, 4211, 'dictData.trace_interfaces.1', 'N1', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (4212, 4212, 'dictData.trace_interfaces.2', 'N2', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (4213, 4213, 'dictData.trace_interfaces.3', 'N1/N2', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (4214, 4214, 'dictData.trace_interfaces.4', 'N4', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (4215, 4215, 'dictData.trace_interfaces.8', 'N8', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (4216, 4216, 'dictData.trace_interfaces.10', 'N10', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (4217, 4217, 'dictData.trace_interfaces.11', 'N11', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (4218, 4218, 'dictData.trace_interfaces.12', 'N12', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (4219, 4219, 'dictData.trace_interfaces.13', 'N13', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (4220, 4220, 'dictData.trace_interfaces.7', 'N7', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (4221, 4221, 'dictData.trace_interfaces.15', 'N15', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (4222, 4222, 'dictData.trace_interfaces.17', 'N17', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (4223, 4223, 'dictData.trace_interfaces.20', 'N20', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (4224, 4224, 'dictData.trace_interfaces.22', 'N22', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_dict_data` VALUES (4225, 4225, 'dictData.trace_interfaces.40', 'N40', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4226, 4226, 'job.nbi.syncNRM', 'Scheduled Synchronization of NEs Resource Data', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4227, 4227, 'job.nbi.syncNRM.remark', 'Scheduled Task for Synchronization of NEs Resource Data', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4228, 4228, 'job.deleteExpiredNbiCm', 'Scheduled Deletion of Northbound Resource Data', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4229, 4229, 'job.deleteExpiredNbiCm.remark', 'Scheduled Task for Deleting Northbound Resource Data', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
SET FOREIGN_KEY_CHECKS = 1;

View File

@@ -56,6 +56,9 @@ INSERT INTO `sys_dict_type` VALUES (121, 'dictType.ne_host_cmd_groupId', 'ne_hos
INSERT INTO `sys_dict_type` VALUES (122, 'dictType.ne_info_status', 'ne_info_status', '1', 'supervisor', 1702020000000, '', 0, '');
INSERT INTO `sys_dict_type` VALUES (123, 'dictType.ne_license_status', 'ne_license_status', '1', 'supervisor', 1702020000000, '', 0, '');
INSERT INTO `sys_dict_type` VALUES (124, 'dictType.cdr_cause_code', 'cdr_cause_code', '1', 'supervisor', 1725877564156, '', 0, '');
INSERT INTO `sys_dict_type` VALUES (125, 'dictType.trace_msg_type', 'trace_msg_type', '1', 'system', 1699348237468, 'system', 1699348237468, '');
INSERT INTO `sys_dict_type` VALUES (126, 'dictType.trace_msg_direct', 'trace_msg_direct', '1', 'system', 1699348237468, 'system', 1699348237468, '');
INSERT INTO `sys_dict_type` VALUES (127, 'dictType.trace_interfaces', 'trace_interfaces', '1', 'system', 1699348237468, 'system', 1699348237468, '');
UNLOCK TABLES;

View File

@@ -37,11 +37,14 @@ INSERT INTO `sys_job` VALUES (6, 'job.deleteExpiredKpiRecord', 'SYSTEM', 'delete
INSERT INTO `sys_job` VALUES (7, 'job.backupEtcFromNE', 'SYSTEM', 'backupEtcFromNE', NULL, '0 30 0 * * ?', '3', '0', '0', '1', 'supervisor', 1698478134843, NULL, 0, 'job.backupEtcFromNERemark');
INSERT INTO `sys_job` VALUES (8, 'job.deleteExpiredNeStateRecord', 'SYSTEM', 'deleteExpiredRecord', '{\"duration\":1,\"tableName\":\"ne_state\",\"colName\":\"timestamp\"}', '0 25 0 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134842, 'admin', 1703668901929, 'job.deleteExpiredNeStateRecordRemark');
INSERT INTO `sys_job` VALUES (9, 'job.getStateFromNE', 'SYSTEM', 'getStateFromNE', '', '0/10 * * * * ?', '3', '0', '0', '0', 'supervisor', 1698478134842, 'admin', 1713231120503, 'job.getStateFromNERemark');
INSERT INTO `sys_job` VALUES (10, 'job.genNeStateAlarm', 'SYSTEM', 'genNeStateAlarm', '{\"alarmID\":\"HXEMSSM10000\",\"alarmCode\":10000,\"alarmTitle\":\"The system state is abnormal\",\"neType\":\"OMC\",\"alarmType\":\"EquipmentAlarm\",\"origSeverity\": \"Major\",\"objectName\":\"EMS;SystemManagement;Heartbeat\",\"objectType\":\"SystemState\",\"specificProblem\":\"Alarm cause: the system state of target NE has not been received for {threshold} seconds\", \"specificProblemID\":\"AC10000\",\"threshold\":30}', '0/5 * * * * ?', '3', '0', '0', '0', 'supervisor', 1698478134842, 'admin', 1713781643031, 'job.genNeStateAlarmRemark');
INSERT INTO `sys_job` VALUES (10, 'job.genNeStateAlarm', 'SYSTEM', 'genNeStateAlarm', '{\"alarmID\":\"HXEMSSM10000\",\"alarmCode\":10000,\"alarmTitle\":\"The system state is abnormal\",\"neType\":\"OMC\",\"alarmType\":\"EquipmentAlarm\",\"origSeverity\": \"Major\",\"objectName\":\"EMS;SystemManagement;Heartbeat\",\"objectType\":\"SystemState\",\"specificProblem\":\"Alarm cause: the system state of target NE has not been received for {threshold} seconds\", \"specificProblemID\":\"AC10000\",\"threshold\":30}', '0/5 * * * * ?', '3', '0', '1', '0', 'supervisor', 1698478134842, 'admin', 1713781643031, 'job.genNeStateAlarmRemark');
INSERT INTO `sys_job` VALUES (11, 'job.exportOperateLog', 'SYSTEM', 'exportTable', '{\"duration\":1,\"tableName\":\"sys_log_operate\",\"timeCol\":\"oper_time\",\"timeUnit\":\"milli\",\"columns\":\"oper_id,omc_get_dict_value(title, \\\"i18n_en\\\") as title,business_type,method,request_method,operator_type,oper_name,dept_name,oper_url,oper_ip,oper_location,oper_param,oper_msg,status,oper_time,cost_time\",\"extras\":\"\",\"filePath\":\"/usr/local/omc/backup/operate_log\"}', '0 0 0/1 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134842, 'admin', 1724833786290, 'job.exportOperateLog');
INSERT INTO `sys_job` VALUES (12, 'job.exportIMSCDR', 'SYSTEM', 'exportTable', '{\"duration\":1,\"tableName\":\"cdr_event_ims\",\"columns\":\"id,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.recordType\')) as record_type,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.callType\')) as call_type,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.callerParty\')) as caller_party,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.calledParty\')) as called_party,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.callDuration\')) as call_duration,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.serviceResult\')) as service_result,DATE_FORMAT(FROM_UNIXTIME(timestamp), \'%Y-%m-%d %H:%i:%s\') AS timestamp\",\"timeCol\":\"timestamp\",\"timeUnit\":\"second\",\"extras\":\"\",\"filePath\":\"/usr/local/omc/backup/ims_cdr\"}', '0 0 0/1 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134842, 'admin', 1722224659251, '');
INSERT INTO `sys_job` VALUES (13, 'job.exportSMFCDR', 'SYSTEM', 'exportTable', '{\"duration\":1,\"tableName\":\"cdr_event_smf\",\"columns\":\"id,ne_type,ne_name,rm_uid,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.recordType\')) AS record_type,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.chargingID\')) AS charging_id,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.subscriberIdentifier.subscriptionIDType\')) AS subscriber_id_type,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.subscriberIdentifier.subscriptionIDData\')) AS subscriber_id_data,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.duration\')) AS duration,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.invocationTimestamp\')) as invocationTimestamp,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.listOfMultipleUnitUsage[*].usedUnitContainer[*].dataVolumeUplink\')) AS data_volume_uplink,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.listOfMultipleUnitUsage[*].usedUnitContainer[*].dataVolumeDownlink\')) AS data_volume_downlink,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.listOfMultipleUnitUsage[*].usedUnitContainer[*].dataTotalVolume\')) AS data_total_volume,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.pDUSessionChargingInformation.pDUAddress.pDUIPv4Address\')) AS pdu_ipv4_address,timestamp\",\"timeCol\":\"timestamp\",\"timeUnit\":\"second\",\"extras\":\"\",\"filePath\":\"/usr/local/omc/backup/smf_cdr\"}', '0 0 0/1 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134842, 'admin', 1724309047797, '');
INSERT INTO `sys_job` VALUES (14, 'job.exportSMSCCDR', 'SYSTEM', 'exportTable', '{\"duration\":1,\"tableName\":\"cdr_event_smsc\",\"columns\":\"id,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.recordType\')) as record_type,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.serviceType\')) as service_type,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.callerParty\')) as caller_party,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.calledParty\')) as called_party,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.result\')) as result,DATE_FORMAT(FROM_UNIXTIME(JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.updateTime\'))), \'%Y-%m-%d %H:%i:%s\') as update_time\",\"timeCol\":\"timestamp\",\"timeUnit\":\"second\",\"extras\":\"\",\"filePath\":\"/usr/local/omc/backup/smsc_cdr\"}', '0 0 0/1 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134842, 'admin', 1724309047797, '');
INSERT INTO `sys_job` VALUES (14, 'job.exportSMSCCDR', 'SYSTEM', 'exportTable', '{\"duration\":1,\"tableName\":\"cdr_event_smsc\",\"columns\":\"id,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.recordType\')) as record_type,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.serviceType\')) as service_type,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.callerParty\')) as caller_party,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.calledParty\')) as called_party,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.result\')) as result,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.updateTime\')) as update_time\",\"timeCol\":\"timestamp\",\"timeUnit\":\"second\",\"extras\":\"\",\"filePath\":\"/usr/local/omc/backup/smsc_cdr\"}', '0 0 0/1 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134842, 'admin', 1724309047797, '');
INSERT INTO `sys_job` VALUES (15, 'job.removeExportedFiles', 'SYSTEM', 'removeFile', '[{\"filePath\":\"/usr/local/omc/backup/operate_log\",\"maxDays\":30},{\"filePath\":\"/usr/local/omc/backup/ims_cdr\",\"maxDays\":30},{\"filePath\":\"/usr/local/omc/backup/smf_cdr\",\"maxDays\":30},{\"filePath\":\"/usr/local/omc/backup/smsc_cdr\",\"maxDays\":30}]', '0 10 0 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134842, 'admin', 1728634085631, '');
INSERT INTO `sys_job` VALUES (16, 'job.exportSGWCCDR', 'SYSTEM', 'exportTable', '{\"duration\":1,\"tableName\":\"cdr_event_sgwc\",\"columns\":\"id,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.recordType\')) as recordType,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.accessPointNameNI\')) as accessPointNameNI,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.servedIMSI\')) as IMSI,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.servedMSISDN\')) as MSISDN,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.servedPDPPDNAddress\')) as PdpAddress,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.duration\')) as duration,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.recordOpeningTime\')) as recordOpeningTime,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.chargingID\')) as chargingID,JSON_UNQUOTE(JSON_EXTRACT(cdr_json, \'$.listOfTrafficVolumes[0].dataVolumeGPRSDownlink\')) AS dataVolumeGPRSDownlink,JSON_UNQUOTE(JSON_EXTRACT(cdr_json, \'$.listOfTrafficVolumes[0].dataVolumeGPRsUplink\')) as dataVolumeGPRsUplink,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.userLocationInformation.tai.tac\')) as tac,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.userLocationInformation.ecgi.eutraCellId\')) as cellID\",\"timeCol\":\"timestamp\",\"timeUnit\":\"second\",\"extras\":\"\",\"filePath\":\"/usr/local/omc/backup/sgwc_cdr\"}', '0 0 0/1 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134842, 'admin', 1724309047797, '');
INSERT INTO `sys_job` VALUES (17, 'job.nbi.syncNRM', 'SYSTEM', 'syncNbiNRM', '', '0 0/5 * * * ?', '3', '0', '1', '1', 'system', 1698478134839, 'system', 1698478134839, 'job.nbi.syncNRM.remark');
INSERT INTO `sys_job` VALUES (18, 'job.deleteExpiredNbiCm', 'SYSTEM', 'deleteExpiredRecord', '{\"duration\":30,\"tableName\":\"nbi_cm\",\"colName\":\"timestamp\",\"extras\":\"\"}', '0 40 0 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134841, NULL, 0, 'job.deleteExpiredNbiCm.remark');
SET FOREIGN_KEY_CHECKS = 1;

View File

@@ -136,8 +136,8 @@ INSERT INTO `sys_menu` VALUES (2080, 'menu.ueUser.onlineIMS', 5, 4, 'ims', 'neUs
INSERT INTO `sys_menu` VALUES (2081, 'menu.ueUser.onlineUE', 5, 6, 'ue', 'neUser/ue/index', '1', '0', 'M', '1', '1', 'neUser:ue:index', 'icon-xiangmuchengyuan', 'supervisor', 1700000000000, NULL, 0, 'menu.ueUser.onlineUERemark');
INSERT INTO `sys_menu` VALUES (2082, 'menu.ueUser.base5G', 5, 7, 'base5G', 'neUser/base5G/index', '1', '0', 'M', '0', '1', 'neUser:base5G:index', 'icon-paixu', 'supervisor', 1700000000000, NULL, 0, 'menu.ueUser.base5GRemark');
INSERT INTO `sys_menu` VALUES (2083, 'menu.trace', 2087, 30, 'traceManage', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-paixu', 'supervisor', 1700000000000, NULL, 0, 'menu.traceRemark');
INSERT INTO `sys_menu` VALUES (2084, 'menu.trace.task', 2083, 1, 'task', 'traceManage/task/index', '1', '0', 'M', '0', '1', 'traceManage:task:index', 'icon-chexiao', 'supervisor', 1700000000000, 'admin', 1713176976458, 'menu.trace.taskRemark');
INSERT INTO `sys_menu` VALUES (2085, 'menu.trace.analysis', 2083, 4, 'analysis', 'traceManage/analysis/index', '1', '0', 'M', '0', '1', 'traceManage:analysis:index', 'icon-gongnengjieshao', 'supervisor', 1700000000000, 'admin', 1713176987835, 'menu.trace.analysisRemark');
INSERT INTO `sys_menu` VALUES (2084, 'menu.trace.task', 2083, 1, 'task', 'traceManage/task/index', '1', '0', 'M', '1', '1', 'traceManage:task:index', 'icon-chexiao', 'supervisor', 1700000000000, 'admin', 1744453890548, 'menu.trace.taskRemark');
INSERT INTO `sys_menu` VALUES (2085, 'menu.trace.taskData', 2083, 4, 'task/inline/data', 'traceManage/task/data', '1', '0', 'M', '0', '1', 'traceManage:task:data', '#', 'supervisor', 1700000000000, 'admin', 1744453921381, '');
INSERT INTO `sys_menu` VALUES (2086, 'menu.trace.pcap', 2083, 11, 'pcap', 'traceManage/pcap/index', '1', '1', 'M', '1', '1', 'traceManage:pcap:index', 'icon-soutubiao', 'supervisor', 1700000000000, NULL, 0, 'menu.trace.pcapRemark');
INSERT INTO `sys_menu` VALUES (2087, 'menu.fault', 0, 2, 'faultManage', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-jinggao', 'supervisor', 1700000000000, NULL, 0, 'menu.faultRemark');
INSERT INTO `sys_menu` VALUES (2088, 'menu.fault.active', 2129, 1, 'active-alarm', 'faultManage/active-alarm/index', '1', '1', 'M', '1', '1', 'faultManage:active-alarm:index', 'icon-wenjian', 'supervisor', 1700000000000, NULL, 0, 'menu.fault.activemRemark');
@@ -210,9 +210,13 @@ INSERT INTO `sys_menu` VALUES (2158, 'menu.trace.pcapFile', 2083, 12, 'pcap/inli
INSERT INTO `sys_menu` VALUES (2159, 'menu.log.exportFile', 2089, 100, 'exportFile', 'logManage/exportFile/index', '1', '1', 'M', '1', '1', 'logManage:exportFile:index', 'icon-wenjian', 'supervisor', 1724144595914, '', 0, '');
INSERT INTO `sys_menu` VALUES (2160, 'menu.perf.kpiCReport', 2099, 100, 'kpiCReport', 'perfManage/kpiCReport/index', '1', '0', 'M', '1', '1', 'perfManage:kpiCReport:index', 'icon-tubiaoku', 'supervisor', 1724144595914, '', 0, '');
INSERT INTO `sys_menu` VALUES (2161, 'menu.trace.taskHLR', 2083, 6, 'taskHLR', 'traceManage/task-hlr/index', '1', '0', 'M', '0', '1', 'traceManage:taskHLR:index', 'icon-chexiao', 'supervisor', 1724144595914, '', 0, '');
INSERT INTO `sys_menu` VALUES (2162, 'menu.trace.taskAnalyze', 2083, 2, 'task/inline/analyze', 'traceManage/task/analyze', '1', '0', 'M', '0', '1', 'traceManage:taskAnalyze:index', '#', 'supervisor', 1724144595914, '', 0, '');
INSERT INTO `sys_menu` VALUES (2162, 'menu.trace.taskAnalyze', 2083, 2, 'task/inline/analyze', 'traceManage/task/analyze', '1', '0', 'M', '0', '1', 'traceManage:task:analyze', '#', 'supervisor', 1724144595914, '', 0, '');
INSERT INTO `sys_menu` VALUES (2163, 'menu.trace.tshark', 2083, 14, 'tshark', 'traceManage/tshark/index', '1', '0', 'M', '1', '1', 'traceManage:tshark:index', 'icon-gengduo', 'supervisor', 1724144595914, '', 0, '');
INSERT INTO `sys_menu` VALUES (2164, 'menu.trace.wireshark', 2083, 16, 'wireshark', 'traceManage/wireshark/index', '1', '0', 'M', '1', '1', 'traceManage:wireshark:index', 'icon-gengduo', 'supervisor', 1724144595914, '', 0, '');
INSERT INTO `sys_menu` VALUES (2165, 'menu.config.neOverview', 4, 1, 'neOverview', 'configManage/neOverview/index', '1', '0', 'M', '1', '1', 'configManage:neOverview:index', 'icon-tubiaoku', 'supervisor', 1700000000000, NULL, 0, 'menu.config.neOverviewRemark');
INSERT INTO `sys_menu` VALUES (2166, 'menu.dashboard.overview.smfUeNum', 2132, 2, '#', '', '1', '1', 'B', '1', '1', 'dashboard:overview:smfUeNum', '#', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_menu` VALUES (2167, 'menu.dashboard.overview.imsUeNum', 2132, 4, '#', '', '1', '1', 'B', '1', '1', 'dashboard:overview:imsUeNum', '#', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_menu` VALUES (2168, 'menu.dashboard.overview.gnbBase', 2132, 6, '#', '', '1', '1', 'B', '1', '1', 'dashboard:overview:gnbBase', '#', 'supervisor', 1721902269805, '', 0, '');
INSERT INTO `sys_menu` VALUES (2169, 'menu.dashboard.overview.enbBase', 2132, 8, '#', '', '1', '1', 'B', '1', '1', 'dashboard:overview:enbBase', '#', 'supervisor', 1721902269805, '', 0, '');
SET FOREIGN_KEY_CHECKS = 1;

View File

@@ -22,8 +22,6 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 4);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 5);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 60);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 61);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 63);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 64);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 65);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 66);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 100);
@@ -34,7 +32,6 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 104);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 105);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 108);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 111);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 112);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 115);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 116);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 117);
@@ -66,20 +63,13 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1022);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1023);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1024);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1030);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1031);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1032);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1033);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1034);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1039);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1040);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1041);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1042);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1043);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1044);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1045);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1048);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1049);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1050);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1051);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1052);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1053);
@@ -90,10 +80,8 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2009);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2010);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2080);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2081);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2082);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2083);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2084);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2085);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2086);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2087);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2088);
@@ -103,14 +91,10 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2092);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2094);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2096);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2097);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2098);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2099);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2100);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2101);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2102);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2103);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2104);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2105);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2106);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2107);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2108);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2109);
@@ -118,17 +102,13 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2111);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2112);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2113);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2114);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2115);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2116);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2117);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2118);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2119);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2120);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2121);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2122);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2123);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2124);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2125);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2126);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2128);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2129);
@@ -158,25 +138,22 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2157);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2158);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2159);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2160);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2162);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2163);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2164);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2165);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2166);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2167);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2168);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2169);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 4);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 5);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 60);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 65);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 66);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 108);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 112);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 115);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 500);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 501);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1030);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1031);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1032);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1034);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1039);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1042);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1048);
@@ -184,7 +161,6 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2009);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2010);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2080);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2081);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2082);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2083);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2086);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2087);
@@ -193,15 +169,14 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2089);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2091);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2092);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2094);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2096);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2097);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2107);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2108);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2109);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2111);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2113);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2114);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2115);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2119);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2116);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2120);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2123);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2126);
@@ -220,22 +195,21 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2146);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2147);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2148);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2149);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2151);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2152);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2153);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2154);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2155);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2156);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2157);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2158);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2165);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2166);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2167);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2168);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2169);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 1);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 4);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 60);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 65);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 66);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 112);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 115);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 500);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 501);
@@ -254,7 +228,7 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2092);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2094);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2097);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2113);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2114);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2116);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2126);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2128);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2129);
@@ -268,21 +242,18 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2141);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2147);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2148);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2149);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2151);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2152);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2153);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2157);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2158);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2163);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2165);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2166);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2167);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2168);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2169);
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 1);
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 4);
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 112);
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2087);
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2115);
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2131);
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2132);
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2165);
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2126);
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2130);
UNLOCK TABLES;

View File

@@ -5,19 +5,21 @@
DROP TABLE IF EXISTS `trace_data`;
CREATE TABLE `trace_data` (
`id` int NOT NULL AUTO_INCREMENT,
`task_id` int NOT NULL COMMENT '跟踪任务ID',
`imsi` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '',
`msisdn` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '',
`src_addr` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '源地址带端口',
`dst_addr` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '目标地址带端口',
`if_type` int DEFAULT NULL COMMENT '接口类型,未分类',
`msg_type` int DEFAULT NULL,
`msg_direct` int DEFAULT NULL,
`length` int DEFAULT NULL COMMENT '去除头后的原始数据byte长度',
`timestamp` bigint DEFAULT '0' COMMENT '毫秒',
`raw_msg` text COLLATE utf8mb4_general_ci COMMENT '去除头后的原始数据byteBase64',
`dec_msg` text COLLATE utf8mb4_general_ci COMMENT 'TCP内容消息',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='跟踪_任务数据';
`trace_id` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '跟踪任务ID',
`imsi` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'UE类型 IMSI',
`msisdn` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'UE类型 可能存在',
`src_addr` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '源地址',
`dst_addr` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '目标地址',
`if_type` varchar(16) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '接口类型,未分类',
`msg_type` int DEFAULT NULL COMMENT '消息类型0-req, 1-rsp',
`msg_direct` int DEFAULT NULL COMMENT '消息方向0-recv,1-send',
`msg_ne` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '消息网元',
`msg_event` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '消息事件e.g: CreateContextReq',
`length` int DEFAULT NULL COMMENT '原始数据byte长度',
`timestamp` bigint DEFAULT '0' COMMENT '纳秒时间戳',
`raw_msg` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '原始数据byteBase64',
PRIMARY KEY (`id`) USING BTREE,
KEY `idx_task_id_time` (`trace_id`,`timestamp`) COMMENT '任务DI时间'
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='跟踪_任务数据';
-- Dump completed on 2024-09-19 14:26:59
-- Dump completed on 2025-04-14 14:26:59

View File

@@ -6,26 +6,20 @@ DROP TABLE IF EXISTS `trace_task`;
CREATE TABLE `trace_task` (
`id` int NOT NULL AUTO_INCREMENT COMMENT 'ID',
`trace_id` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '任务编号',
`trace_type` varchar(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '1-Interface,2-Device,3-User',
`trace_type` varchar(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '1-Interface,2-Device,3-UE',
`start_time` bigint DEFAULT '0' COMMENT '开始时间 毫秒',
`end_time` bigint DEFAULT '0' COMMENT '结束时间 毫秒',
`interfaces` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '接口跟踪必须 例如 N8,N10',
`imsi` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '用户跟踪必须',
`msisdn` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '用户跟踪可选',
`ue_ip` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '设备跟踪必须 IP',
`src_ip` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '源地址IP',
`dst_ip` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '目标地址IP',
`signal_port` int DEFAULT '0' COMMENT '地址IP端口',
`create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '创建者',
`create_time` bigint DEFAULT '0' COMMENT '创建时间',
`update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '更新者',
`update_time` bigint DEFAULT '0' COMMENT '更新时间',
`remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '备注',
`ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元类型',
`ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元ID',
`notify_url` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '信息数据通知回调地址UDP 例如udp:192.168.5.58:29500',
`fetch_msg` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '任务下发请求响应消息',
`ne_list` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元列表 neType_neId 例如 UDM_001,AMF_001',
`notify_url` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '信息数据通知回调地址UDP 例如udp:192.168.5.58:33033',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='跟踪_任务';
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='跟踪_任务';
-- Dump completed on 2024-09-19 14:26:59
-- Dump completed on 2025-04-14 14:26:59

39
database/upgrade/nbi_cm1.sql Executable file
View File

@@ -0,0 +1,39 @@
/*
Navicat Premium Data Transfer
Source Server : root@192.168.2.165
Source Server Type : MariaDB
Source Server Version : 100335 (10.3.35-MariaDB)
Source Host : 192.168.2.165:33066
Source Schema : omc_db
Target Server Type : MariaDB
Target Server Version : 100335 (10.3.35-MariaDB)
File Encoding : 65001
Date: 26/05/2025 17:22:45
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for nbi_cm
-- ----------------------------
DROP TABLE IF EXISTS `nbi_cm`;
CREATE TABLE `nbi_cm` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ne_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`cm_version` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`rm_uid` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`event_type` enum('ObjectOriginalEvent','ObjectCreationEvent','ObjectDeletionEvent','ObjectAttributeValueChangeEvent') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'ObjectCreationEvent',
`object_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`value_json` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
`timestamp` datetime NULL DEFAULT current_timestamp() ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx-ne-id-rmuid`(`ne_type`, `ne_id`, `rm_uid`) USING BTREE,
INDEX `idx-timestamp`(`timestamp`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 93 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;

View File

@@ -0,0 +1,20 @@
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
CREATE TABLE IF NOT EXISTS `alarm_relation` (
`id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`root_alarm_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`alarm_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`relation_type` enum('derived','related') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '衍生关系derived/related: 父子/兄弟',
`add_info` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`created_at` datetime NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
ALTER TABLE `alarm_relation`
DROP COLUMN IF EXISTS `updated_at`,
DROP COLUMN IF EXISTS `deleted_at`,
MODIFY COLUMN IF EXISTS `relation_type` enum('derived','related') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '衍生关系derived/related: 父子/兄弟' AFTER `alarm_id`,
MODIFY COLUMN IF EXISTS `created_at` datetime NULL DEFAULT NULL AFTER `add_info`;
SET FOREIGN_KEY_CHECKS = 1;

View File

@@ -26,7 +26,7 @@ REPLACE INTO `kpi_c_title` VALUES (4, 'AMF', 'AMF.C.04', '5G Register Subscriber
REPLACE INTO `kpi_c_title` VALUES (5, 'SMF', 'SMF.C.01', 'SA_MeanPduSession', '\'SMF.01\'', ' ', 'Active', '', 'admin', '2024-12-12 19:32:45');
REPLACE INTO `kpi_c_title` VALUES (6, 'SMF', 'SMF.C.02', 'PDU Session Establishment Success Rate', '(\'SMF.02\'/\'SMF.03\')*100', '%', 'Active', '', 'admin', '2024-12-12 19:33:27');
REPLACE INTO `kpi_c_title` VALUES (7, 'SMF', 'SMF.C.03', 'IMS Session Establishment Success Rate', '(\'SMF.04\'/\'SMF.05\')*100', '%', 'Active', '', 'admin', '2024-12-12 19:34:07');
REPLACE INTO `kpi_c_title` VALUES (8, 'MME', 'MME.C.01', 'Attach Success Rate ', '(\'MME.A.02\'/\'MME.A.01\')*100', '%', 'Active', '', 'admin', '2024-12-12 20:26:09');
REPLACE INTO `kpi_c_title` VALUES (8, 'MME', 'MME.C.01', 'Attach Success Rate ', '(\'MME.A.05\'/\'MME.A.04\')*100', '%', 'Active', '', 'admin', '2024-12-12 20:26:09');
REPLACE INTO `kpi_c_title` VALUES (9, 'UPF', 'UPF.C.01', 'PFCP Establish Success Rate ', '(\'UPF.01\'/\'UPF.02\')*100', '%', 'Active', '', 'admin', '2024-12-12 20:26:40');
REPLACE INTO `kpi_c_title` VALUES (10, 'UPF', 'UPF.C.02', 'N6_Uplink_Throughout', '(\'UPF.03\')*8/5/1000/1000', 'Mbps', 'Active', '', 'admin', '2025-01-20 09:26:06');
REPLACE INTO `kpi_c_title` VALUES (11, 'UPF', 'UPF.C.03', 'N3_Uplink_Throughout', '(\'UPF.06\')*8/5/1000/1000', 'Mbps', 'Active', '', 'admin', '2025-01-20 09:26:57');
@@ -37,7 +37,7 @@ REPLACE INTO `kpi_c_title` VALUES (15, 'IMS', 'IMS.C.02', 'MO_Success_Rate', '(\
REPLACE INTO `kpi_c_title` VALUES (16, 'IMS', 'IMS.C.03', 'MT_Success_Rate', '(\'SCSCF.07\'/\'SCSCF.08\')*100', '%', 'Active', '', 'admin', '2024-12-12 20:30:49');
REPLACE INTO `kpi_c_title` VALUES (17, 'IMS', 'IMS.C.04', 'Service_Success_Rate ', '((\'SCSCF.05\'+\'SCSCF.07\')/(\'SCSCF.06\'+\'SCSCF.08\'))*100', '%', 'Active', '', 'admin', '2024-12-12 20:31:41');
REPLACE INTO `kpi_c_title` VALUES (18, 'SMF', 'SMF.C.06', 'IMS_DefaultBear_Success_Rate ', '(\'SMF.13\'/\'SMF.14\')*100', '%', 'Active', '', 'admin', '2024-12-13 10:49:00');
REPLACE INTO `kpi_c_title` VALUES (19, 'SMF', 'SMF.C.07', 'Bear_Success_Rate_new', '((\'SMF.09\'+\'SMF.11\')/(\'SMF.10\'+\'SMF.12\') )*100', '%', 'Active', '', 'admin', '2024-12-13 11:16:04');
REPLACE INTO `kpi_c_title` VALUES (19, 'SMF', 'SMF.C.07', 'Bear_Success_Rate_new', '((\'SMF.09\'+\'SMF.11\')/(\'SMF.10\'+\'SMF.12\') )*100', '%', 'Deleted', '', 'admin', '2024-12-13 11:16:04');
REPLACE INTO `kpi_c_title` VALUES (22, 'UPF', 'UPF.C.06', 'N3_Downlink_Throughout', '(\'UPF.05\')*8/5/1000/1000', 'Mbps', 'Active', '', 'admin', '2025-01-15 02:53:32');
REPLACE INTO `kpi_c_title` VALUES (23, 'UPF', 'UPF.C.07', 'N6_Downlink_Throughout', '(\'UPF.04\')*8/5/1000/1000', 'Mbps', 'Active', '', 'admin', '2025-01-15 02:53:32');

View File

@@ -0,0 +1,46 @@
SET FOREIGN_KEY_CHECKS=0;
CREATE TABLE IF NOT EXISTS `nbi_cm` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ne_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`cm_version` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`rm_uid` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`event_type` enum('ObjectOriginalEvent','ObjectCreationEvent','ObjectDeletionEvent','ObjectAttributeValueChangeEvent') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'ObjectCreationEvent',
`object_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`value_json` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
`timestamp` datetime NULL DEFAULT current_timestamp() ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx-ne-id-rmuid`(`ne_type`, `ne_id`, `rm_uid`) USING BTREE,
INDEX `idx-timestamp`(`timestamp`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 93 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
ALTER TABLE `nbi_cm` ADD COLUMN IF NOT EXISTS `event_type` enum('ObjectOriginalEvent','ObjectCreationEvent','ObjectDeletionEvent','ObjectAttributeValueChangeEvent') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'ObjectCreationEvent' AFTER `rm_uid`;
ALTER TABLE `nbi_cm` MODIFY COLUMN `ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL AFTER `ne_type`;
ALTER TABLE `nbi_cm` MODIFY COLUMN `value_json` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL AFTER `object_type`;
ALTER TABLE `nbi_cm` MODIFY COLUMN `timestamp` datetime NULL DEFAULT current_timestamp() ON UPDATE CURRENT_TIMESTAMP AFTER `value_json`;
ALTER TABLE `nbi_cm` DROP COLUMN IF EXISTS `time_zone`;
ALTER TABLE `nbi_cm` DROP COLUMN IF EXISTS `vendor_name`;
ALTER TABLE `nbi_cm` DROP COLUMN IF EXISTS `user_label`;
ALTER TABLE `nbi_cm` DROP COLUMN IF EXISTS `pv_flag`;
ALTER TABLE `nbi_cm` DROP COLUMN IF EXISTS `vm_id`;
ALTER TABLE `nbi_cm` DROP COLUMN IF EXISTS `vnf_instance_id`;
ALTER TABLE `nbi_cm` DROP COLUMN IF EXISTS `status`;
ALTER TABLE `nbi_cm`
ADD INDEX IF NOT EXISTS `idx-ne-id-rmuid`(`ne_type`, `ne_id`, `rm_uid`) USING BTREE;
ALTER TABLE `nbi_cm`
ADD INDEX `idx-timestamp`(`timestamp`) USING BTREE;
SET FOREIGN_KEY_CHECKS=1;

View File

@@ -47,6 +47,6 @@ ALTER TABLE `ne_license` DROP COLUMN IF EXISTS `created_at`;
ALTER TABLE `ne_license` DROP COLUMN IF EXISTS `updated_at`;
ALTER TABLE `ne_license` DROP COLUMN IF EXISTS `deleted_at`;
ALTER TABLE `ne_license` ADD UNIQUE INDEX IF NOT EXISTS `uk_type_id`(`ne_type` ASC, `ne_id` ASC) USING BTREE COMMENT '唯一网元类型和网元ID';
ALTER TABLE `ne_license` ADD COLUMN IF NOT EXISTS `capability` int NULL DEFAULT 0 AFTER `expiry_date`;
SET FOREIGN_KEY_CHECKS=1;

View File

@@ -37,6 +37,6 @@ INSERT IGNORE INTO `sys_config` VALUES (108, 'config.sys.i18nOpen', 'sys.i18n.op
INSERT IGNORE INTO `sys_config` VALUES (109, 'config.sys.i18nDefault', 'sys.i18n.default', 'en_US', 'Y', 'supervisor', 1700000000000, NULL, 0, 'config.sys.i18nDefaultRemark');
INSERT IGNORE INTO `sys_config` VALUES (110, 'config.sys.lockTime', 'sys.lockTime', '0', 'Y', 'supervisor', 1704960008300, 'admin', 1706838764703, 'config.sys.lockTimeRemark');
INSERT IGNORE INTO `sys_config` VALUES (111, 'config.sys.homePage', 'sys.homePage', 'configManage/neOverview/index', 'Y', 'supervisor', 1704960008300, 'admin', 1706838764703, 'config.sys.homePageRemark');
INSERT IGNORE INTO `sys_config` VALUES (112, 'config.sys.exportTable', 'sys.exportTable', '43t6VAMQmdnt9ynWGJIR1ufeQOvr1doHDsjWUFT8JVzxTVEYgZ1Xvrk47JaPeCHMPKk9zLhJCU9MmA7JAWslQyWBLHzVOMUmA1ppIL1sVIkWGrdDiw0XuMdvXpUu/adrXHhqo42NP3hxcvwXvkWvgedezzCnUsvqfMt+Yw1Wick=', 'Y', 'supervisor', 1737355823940, 'supervisor', 1737363302083, 'config.sys.exportTableRemark');
INSERT IGNORE INTO `sys_config` VALUES (112, 'config.sys.exportTable', 'sys.exportTable', 'B1n9hW6Z2S2wZw4MVPAX6Q4wCuyWKdMk+qH1ZKqpLJxwvq2FBRgAT6WWw+j6O+ExHIJhpJ3XCpMBoiNN/RkW6EPurmqM82gnXWUIf/s6gk7OWrhdvQDD2jjNVBkLCmPLEH3ZLdgnQOZOePA7WyUdXA==', 'Y', 'supervisor', 1737355823940, 'supervisor', 1737363302083, 'config.sys.exportTableRemark');
SET FOREIGN_KEY_CHECKS=1;

View File

@@ -168,6 +168,25 @@ REPLACE INTO `sys_dict_data` VALUES (140, 21, 'dictData.cdr_cause_code.41', '41'
REPLACE INTO `sys_dict_data` VALUES (141, 22, 'dictData.cdr_cause_code.42', '42', 'cdr_cause_code', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (142, 23, 'dictData.cdr_cause_code.47', '47', 'cdr_cause_code', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (143, 30, 'dictData.cdr_cause_code.50', '50', 'cdr_cause_code', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (144, 1, 'dictData.trace_msg_type.0', '0', 'trace_msg_type', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (145, 2, 'dictData.trace_msg_type.1', '1', 'trace_msg_type', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (146, 1, 'dictData.trace_msg_direct.0', '0', 'trace_msg_direct', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (147, 2, 'dictData.trace_msg_direct.1', '1', 'trace_msg_direct', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (148, 1, 'dictData.trace_interfaces.1', 'N1', 'trace_interfaces', '', '', '0', 'supervisor', 1712720201349, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (149, 2, 'dictData.trace_interfaces.2', 'N2', 'trace_interfaces', '', '', '0', 'supervisor', 1712720201349, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (150, 3, 'dictData.trace_interfaces.3', 'N1/N2', 'trace_interfaces', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (151, 4, 'dictData.trace_interfaces.4', 'N4', 'trace_interfaces', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (152, 8, 'dictData.trace_interfaces.8', 'N8', 'trace_interfaces', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (153, 10, 'dictData.trace_interfaces.10', 'N10', 'trace_interfaces', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (154, 11, 'dictData.trace_interfaces.11', 'N11', 'trace_interfaces', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (155, 12, 'dictData.trace_interfaces.12', 'N12', 'trace_interfaces', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (156, 13, 'dictData.trace_interfaces.13', 'N13', 'trace_interfaces', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (157, 7, 'dictData.trace_interfaces.7', 'N7', 'trace_interfaces', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (158, 15, 'dictData.trace_interfaces.15', 'N15', 'trace_interfaces', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (159, 17, 'dictData.trace_interfaces.17', 'N17', 'trace_interfaces', '', '', '0', 'supervisor', 1712720201349, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (160, 20, 'dictData.trace_interfaces.20', 'N20', 'trace_interfaces', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (161, 22, 'dictData.trace_interfaces.22', 'N22', 'trace_interfaces', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (162, 40, 'dictData.trace_interfaces.40', 'N40', 'trace_interfaces', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
-- 指定记录条件更新

View File

@@ -92,7 +92,7 @@ REPLACE INTO `sys_dict_data` VALUES (1071, 1071, 'menu.ueUser.onlineUE', 'UE在
REPLACE INTO `sys_dict_data` VALUES (1072, 1072, 'menu.ueUser.base5G', '基站信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
REPLACE INTO `sys_dict_data` VALUES (1073, 1073, 'menu.trace', '跟踪', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
REPLACE INTO `sys_dict_data` VALUES (1074, 1074, 'menu.trace.task', '网元跟踪任务', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
REPLACE INTO `sys_dict_data` VALUES (1075, 1075, 'menu.trace.analysis', '网元跟踪数据', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
REPLACE INTO `sys_dict_data` VALUES (1075, 1075, 'menu.trace.taskData', '网元跟踪任务数据', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
REPLACE INTO `sys_dict_data` VALUES (1076, 1076, 'menu.trace.pcap', '信令抓包', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
REPLACE INTO `sys_dict_data` VALUES (1077, 1077, 'menu.fault', '监控', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
REPLACE INTO `sys_dict_data` VALUES (1078, 1078, 'config.sys.exportTable', '备份文件FTP服务', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
@@ -102,7 +102,7 @@ REPLACE INTO `sys_dict_data` VALUES (1081, 1081, 'menu.ueUser.onlineUERemark', '
REPLACE INTO `sys_dict_data` VALUES (1082, 1082, 'menu.ueUser.base5GRemark', '5G基站信息菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
REPLACE INTO `sys_dict_data` VALUES (1083, 1083, 'menu.traceRemark', '跟踪管理目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
REPLACE INTO `sys_dict_data` VALUES (1084, 1084, 'menu.trace.taskRemark', '跟踪任务菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
REPLACE INTO `sys_dict_data` VALUES (1085, 1085, 'menu.trace.analysisRemark', '信令分析菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
-- REPLACE INTO `sys_dict_data` VALUES (1085, 1085, 'menu.trace.analysisRemark', '信令分析菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
REPLACE INTO `sys_dict_data` VALUES (1086, 1086, 'menu.trace.pcapRemark', '信令抓包菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
REPLACE INTO `sys_dict_data` VALUES (1087, 1087, 'menu.faultRemark', '故障管理目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
REPLACE INTO `sys_dict_data` VALUES (1088, 1088, 'menu.fault.active', '活动告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
@@ -663,7 +663,7 @@ REPLACE INTO `sys_dict_data` VALUES (2145, 2145, 'menu.system.user.editPost', '
REPLACE INTO `sys_dict_data` VALUES (2146, 2146, 'menu.dashboard.smscCDR', '短信话单', 'i18n_zh', '', '', '1', 'supervisor', 1717051745866, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2147, 2147, 'log.operate.title.smscCDR', '短信话单', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2148, 2148, 'menu.trace.pcapFile', '信令抓包文件', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2149, 2149, 'menu.trace.taskAnalyze', '跟踪数据分析', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2149, 2149, 'menu.trace.taskAnalyze', '网元跟踪任务分析', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2150, 2150, 'job.ne_data_udm', '网元数据-UDM数据刷新同步', 'i18n_zh', '', '', '1', 'supervisor', 1730173767412, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2151, 2151, 'menu.system.setting.doc', '系统使用文档', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2152, 2152, 'menu.system.setting.official', '官网链接', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, '');
@@ -702,5 +702,47 @@ REPLACE INTO `sys_dict_data` VALUES (2184, 2184, 'config.sys.homePage', '自定
REPLACE INTO `sys_dict_data` VALUES (2185, 2185, 'config.sys.homePageRemark', '选择列表中的任一页面作为主页路径', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2186, 2186, 'menu.config.neOverview', '网元概览', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2187, 2187, 'menu.config.neOverviewRemark', '显示所有网元状态配置和license等概览信息', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2188, 2188, 'job.exportSGWCCDR', '定期从漫游数据话单表导出文件至指定目录', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2189, 2189, 'table.cdr_event_sgwc', '漫游数据话单', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2190, 2190, 'menu.dashboard.overview.smfUeNum', '展示数据会话数', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2191, 2191, 'menu.dashboard.overview.imsUeNum', '展示语音会话数', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2192, 2192, 'menu.dashboard.overview.gnbBase', '展示5G基站在线信息', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2193, 2193, 'menu.dashboard.overview.enbBase', '展示4G基站在线信息', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2194, 2194, 'menu.ueUser.imsUDM', 'IMS签约用户', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2195, 2195, 'menu.ueUser.imsUDMRemark', 'IMS签约用户菜单', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2196, 2196, 'menu.ueUser.voipUDM', 'VoIP鉴权数据', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2197, 2197, 'menu.ueUser.voipUDMRemark', 'VoIP鉴权数据菜单', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2198, 2198, 'menu.ueUser.exportFile', '文件管理', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2199, 2199, 'menu.ueUser.exportFileRemark', '文件管理菜单', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2200, 2200, 'job.backup.ue.data', '定期备份UE用户和数据表', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2201, 2201, 'table.u_auth_user', 'UDM鉴权用户', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2202, 2202, 'table.u_sub_user', 'UDM签约用户', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2203, 2203, 'table.u_voip_auth', 'VoIP鉴权数据', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2204, 2204, 'table.u_ims_user', 'IMS签约用户', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2205, 2205, 'dictType.trace_msg_type', '跟踪消息类型', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2206, 2206, 'dictData.trace_msg_type.0', '请求', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2207, 2207, 'dictData.trace_msg_type.1', '响应', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2208, 2208, 'dictType.trace_msg_direct', '跟踪消息方向', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2209, 2209, 'dictData.trace_msg_direct.0', '接收', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2210, 2210, 'dictData.trace_msg_direct.1', '发送', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2211, 2211, 'dictData.trace_interfaces.1', 'N1', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2212, 2212, 'dictData.trace_interfaces.2', 'N2', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2213, 2213, 'dictData.trace_interfaces.3', 'N1/N2', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2214, 2214, 'dictData.trace_interfaces.4', 'N4', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2215, 2215, 'dictData.trace_interfaces.8', 'N8', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2216, 2216, 'dictData.trace_interfaces.10', 'N10', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2217, 2217, 'dictData.trace_interfaces.11', 'N11', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2218, 2218, 'dictData.trace_interfaces.12', 'N12', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2219, 2219, 'dictData.trace_interfaces.13', 'N13', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2220, 2220, 'dictData.trace_interfaces.7', 'N7', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2221, 2221, 'dictData.trace_interfaces.15', 'N15', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2222, 2222, 'dictData.trace_interfaces.17', 'N17', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2223, 2223, 'dictData.trace_interfaces.20', 'N20', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2224, 2224, 'dictData.trace_interfaces.22', 'N22', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2225, 2225, 'dictData.trace_interfaces.40', 'N40', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2226, 2226, 'job.nbi.syncNRM', '定期同步网元资源数据', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2227, 2227, 'job.nbi.syncNRM.remark', '定期同步网元资源数据任务', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2228, 2228, 'job.deleteExpiredNbiCm', '定期删除北向资源数据', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (2229, 2229, 'job.deleteExpiredNbiCm.remark', '定期删除北向资源数据任务', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
SET FOREIGN_KEY_CHECKS = 1;

View File

@@ -90,7 +90,7 @@ REPLACE INTO `sys_dict_data` VALUES (3071, 3071, 'menu.ueUser.onlineUE', 'UE Onl
REPLACE INTO `sys_dict_data` VALUES (3072, 3072, 'menu.ueUser.base5G', 'Radio Information', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
REPLACE INTO `sys_dict_data` VALUES (3073, 3073, 'menu.trace', 'Trace', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
REPLACE INTO `sys_dict_data` VALUES (3074, 3074, 'menu.trace.task', 'NE Trace Task', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
REPLACE INTO `sys_dict_data` VALUES (3075, 3075, 'menu.trace.analysis', 'NE Trace Task Data', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
REPLACE INTO `sys_dict_data` VALUES (3075, 3075, 'menu.trace.taskData', 'NE Trace Task Data', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
REPLACE INTO `sys_dict_data` VALUES (3076, 3076, 'menu.trace.pcap', 'Signaling Capture', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
REPLACE INTO `sys_dict_data` VALUES (3077, 3077, 'menu.fault', 'Monitor', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
REPLACE INTO `sys_dict_data` VALUES (3078, 3078, 'config.sys.exportTable', 'Backup file FTP service', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
@@ -100,7 +100,7 @@ REPLACE INTO `sys_dict_data` VALUES (3081, 3081, 'menu.ueUser.onlineUERemark', '
REPLACE INTO `sys_dict_data` VALUES (3082, 3082, 'menu.ueUser.base5GRemark', '5G Base Station Information Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
REPLACE INTO `sys_dict_data` VALUES (3083, 3083, 'menu.traceRemark', 'Tracking Management Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
REPLACE INTO `sys_dict_data` VALUES (3084, 3084, 'menu.trace.taskRemark', 'Tracking Task Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
REPLACE INTO `sys_dict_data` VALUES (3085, 3085, 'menu.trace.analysisRemark', 'Signaling Analysis Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
-- REPLACE INTO `sys_dict_data` VALUES (3085, 3085, 'menu.trace.analysisRemark', 'Signaling Analysis Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
REPLACE INTO `sys_dict_data` VALUES (3086, 3086, 'menu.trace.pcapRemark', 'Signaling Capture Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
REPLACE INTO `sys_dict_data` VALUES (3087, 3087, 'menu.faultRemark', 'Fault Management Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
REPLACE INTO `sys_dict_data` VALUES (3088, 3088, 'menu.fault.active', 'Active Alarms', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
@@ -662,7 +662,7 @@ REPLACE INTO `sys_dict_data` VALUES (4145, 4145, 'menu.system.user.editPost', 'M
REPLACE INTO `sys_dict_data` VALUES (4146, 4146, 'menu.dashboard.smscCDR', 'SMS CDR', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4147, 4147, 'log.operate.title.smscCDR', 'SMS CDR', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4148, 4148, 'menu.trace.pcapFile', 'Signaling Capture File', 'i18n_en', '', '', '1', 'supervisor', 1718441035866, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4149, 4149, 'menu.trace.taskAnalyze', 'Tracking Data Analysis', 'i18n_en', '', '', '1', 'supervisor', 1718441035866, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4149, 4149, 'menu.trace.taskAnalyze', 'NE Trace Task Analysis', 'i18n_en', '', '', '1', 'supervisor', 1718441035866, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4150, 4150, 'job.ne_data_udm', 'NE Data Sync UDM', 'i18n_en', '', '', '1', 'supervisor', 1730173767412, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4151, 4151, 'menu.system.setting.doc', 'System User Documentation', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4152, 4152, 'menu.system.setting.official', 'Official Website', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, '');
@@ -701,5 +701,47 @@ REPLACE INTO `sys_dict_data` VALUES (4184, 4184, 'config.sys.homePage', 'Custom
REPLACE INTO `sys_dict_data` VALUES (4185, 4185, 'config.sys.homePageRemark', 'Select any page in the list as the homepage', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4186, 4186, 'menu.config.neOverview', 'NE Overview', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4187, 4187, 'menu.config.neOverviewRemark', 'Displays overview information such as status, configuration and license of all network elements', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4188, 4188, 'job.exportSGWCCDR', 'Export regularly from Roaming Data CDR table', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4189, 4189, 'table.cdr_event_sgwc', 'Roaming Data CDR', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4190, 4190, 'menu.dashboard.overview.smfUeNum', 'Display data session number', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4191, 4191, 'menu.dashboard.overview.imsUeNum', 'Display the number of voice sessions', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4192, 4192, 'menu.dashboard.overview.gnbBase', 'Display 5G base station online information', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4193, 4193, 'menu.dashboard.overview.enbBase', 'Display 4G base station online information', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4194, 4194, 'menu.ueUser.imsUDM', 'IMS Subscribers', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4195, 4195, 'menu.ueUser.imsUDMRemark', 'IMS Subscribers Menu', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4196, 4196, 'menu.ueUser.voipUDM', 'VoIP Authentication', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4197, 4197, 'menu.ueUser.voipUDMRemark', 'VoIP Authentication Menu', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4198, 4198, 'menu.ueUser.exportFile', 'File Management', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4199, 4199, 'menu.ueUser.exportFileRemark', 'File Management Menu', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4200, 4200, 'job.backup.ue.data', 'Backup regularly UE users and data', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4201, 4201, 'table.u_auth_user', 'UDM Authentication', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4202, 4202, 'table.u_sub_user', 'UDM Subscribers', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4203, 4203, 'table.u_voip_auth', 'VoIP Authentication', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4204, 4204, 'table.u_ims_user', 'IMS Subscribers', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4205, 4205, 'dictType.trace_msg_type', 'Trace Message Type', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4206, 4206, 'dictData.trace_msg_type.0', 'Request', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4207, 4207, 'dictData.trace_msg_type.1', 'Response', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4208, 4208, 'dictType.trace_msg_direct', 'Track Message Directio', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4209, 4209, 'dictData.trace_msg_direct.0', 'Receive', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4210, 4210, 'dictData.trace_msg_direct.1', 'Send', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4211, 4211, 'dictData.trace_interfaces.1', 'N1', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4212, 4212, 'dictData.trace_interfaces.2', 'N2', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4213, 4213, 'dictData.trace_interfaces.3', 'N1/N2', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4214, 4214, 'dictData.trace_interfaces.4', 'N4', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4215, 4215, 'dictData.trace_interfaces.8', 'N8', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4216, 4216, 'dictData.trace_interfaces.10', 'N10', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4217, 4217, 'dictData.trace_interfaces.11', 'N11', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4218, 4218, 'dictData.trace_interfaces.12', 'N12', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4219, 4219, 'dictData.trace_interfaces.13', 'N13', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4220, 4220, 'dictData.trace_interfaces.7', 'N7', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4221, 4221, 'dictData.trace_interfaces.15', 'N15', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4222, 4222, 'dictData.trace_interfaces.17', 'N17', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4223, 4223, 'dictData.trace_interfaces.20', 'N20', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4224, 4224, 'dictData.trace_interfaces.22', 'N22', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4225, 4225, 'dictData.trace_interfaces.40', 'N40', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4226, 4226, 'job.nbi.syncNRM', 'Scheduled Synchronization of NEs Resource Data', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4227, 4227, 'job.nbi.syncNRM.remark', 'Scheduled Task for Synchronization of NEs Resource Data', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4228, 4228, 'job.deleteExpiredNbiCm', 'Scheduled Deletion of Northbound Resource Data', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_dict_data` VALUES (4229, 4229, 'job.deleteExpiredNbiCm.remark', 'Scheduled Task for Deleting Northbound Resource Data', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
SET FOREIGN_KEY_CHECKS = 1;

View File

@@ -54,5 +54,8 @@ INSERT IGNORE INTO `sys_dict_type` VALUES (121, 'dictType.ne_host_cmd_groupId',
INSERT IGNORE INTO `sys_dict_type` VALUES (122, 'dictType.ne_info_status', 'ne_info_status', '1', 'supervisor', 1702020000000, '', 0, '');
INSERT IGNORE INTO `sys_dict_type` VALUES (123, 'dictType.ne_license_status', 'ne_license_status', '1', 'supervisor', 1702020000000, '', 0, '');
INSERT IGNORE INTO `sys_dict_type` VALUES (124, 'dictType.cdr_cause_code', 'cdr_cause_code', '1', 'supervisor', 1725877564156, '', 0, '');
INSERT IGNORE INTO `sys_dict_type` VALUES (125, 'dictType.trace_msg_type', 'trace_msg_type', '1', 'system', 1699348237468, 'system', 1699348237468, '');
INSERT IGNORE INTO `sys_dict_type` VALUES (126, 'dictType.trace_msg_direct', 'trace_msg_direct', '1', 'system', 1699348237468, 'system', 1699348237468, '');
INSERT IGNORE INTO `sys_dict_type` VALUES (127, 'dictType.trace_interfaces', 'trace_interfaces', '1', 'system', 1699348237468, 'system', 1699348237468, '');
SET FOREIGN_KEY_CHECKS = 1;

View File

@@ -45,7 +45,10 @@ REPLACE INTO `sys_job` VALUES (10, 'job.genNeStateAlarm', 'SYSTEM', 'genNeStateA
REPLACE INTO `sys_job` VALUES (11, 'job.exportOperateLog', 'SYSTEM', 'exportTable', '{\"duration\":1,\"tableName\":\"sys_log_operate\",\"timeCol\":\"oper_time\",\"timeUnit\":\"milli\",\"columns\":\"oper_id,omc_get_dict_value(title, \\\"i18n_en\\\") as title,business_type,method,request_method,operator_type,oper_name,dept_name,oper_url,oper_ip,oper_location,oper_param,oper_msg,status,oper_time,cost_time\",\"extras\":\"\",\"filePath\":\"/usr/local/omc/backup/operate_log\"}', '0 0 0/1 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134842, 'admin', 1724833786290, 'job.exportOperateLog');
REPLACE INTO `sys_job` VALUES (12, 'job.exportIMSCDR', 'SYSTEM', 'exportTable', '{\"duration\":1,\"tableName\":\"cdr_event_ims\",\"columns\":\"id,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.recordType\')) as record_type,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.callType\')) as call_type,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.callerParty\')) as caller_party,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.calledParty\')) as called_party,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.callDuration\')) as call_duration,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.serviceResult\')) as service_result,DATE_FORMAT(FROM_UNIXTIME(timestamp), \'%Y-%m-%d %H:%i:%s\') AS timestamp\",\"timeCol\":\"timestamp\",\"timeUnit\":\"second\",\"extras\":\"\",\"filePath\":\"/usr/local/omc/backup/ims_cdr\"}', '0 0 0/1 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134842, 'admin', 1722224659251, '');
REPLACE INTO `sys_job` VALUES (13, 'job.exportSMFCDR', 'SYSTEM', 'exportTable', '{\"duration\":1,\"tableName\":\"cdr_event_smf\",\"columns\":\"id,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.recordType\')) AS record_type,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.chargingID\')) AS charging_id,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.subscriberIdentifier.subscriptionIDType\')) AS subscriber_id_type,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.subscriberIdentifier.subscriptionIDData\')) AS subscriber_id_data,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.duration\')) AS duration,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.invocationTimestamp\')) as invocationTimestamp,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.listOfMultipleUnitUsage[*].usedUnitContainer[*].dataVolumeUplink\')) AS data_volume_uplink,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.listOfMultipleUnitUsage[*].usedUnitContainer[*].dataVolumeDownlink\')) AS data_volume_downlink,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.listOfMultipleUnitUsage[*].usedUnitContainer[*].dataTotalVolume\')) AS data_total_volume,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.pDUSessionChargingInformation.pDUAddress.pDUIPv4Address\')) AS pdu_ipv4_address,timestamp\",\"timeCol\":\"timestamp\",\"timeUnit\":\"second\",\"extras\":\"\",\"filePath\":\"/usr/local/omc/backup/smf_cdr\"}', '0 0 0/1 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134842, 'admin', 1724309047797, '');
REPLACE INTO `sys_job` VALUES (14, 'job.exportSMSCCDR', 'SYSTEM', 'exportTable', '{\"duration\":1,\"tableName\":\"cdr_event_smsc\",\"columns\":\"id,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.recordType\')) as record_type,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.serviceType\')) as service_type,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.callerParty\')) as caller_party,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.calledParty\')) as called_party,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.result\')) as result,DATE_FORMAT(FROM_UNIXTIME(JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.updateTime\'))), \'%Y-%m-%d %H:%i:%s\') as update_time\",\"timeCol\":\"timestamp\",\"timeUnit\":\"second\",\"extras\":\"\",\"filePath\":\"/usr/local/omc/backup/smsc_cdr\"}', '0 0 0/1 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134842, 'admin', 1724309047797, '');
REPLACE INTO `sys_job` VALUES (14, 'job.exportSMSCCDR', 'SYSTEM', 'exportTable', '{\"duration\":1,\"tableName\":\"cdr_event_smsc\",\"columns\":\"id,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.recordType\')) as record_type,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.serviceType\')) as service_type,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.callerParty\')) as caller_party,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.calledParty\')) as called_party,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.result\')) as result,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.updateTime\')) as update_time\",\"timeCol\":\"timestamp\",\"timeUnit\":\"second\",\"extras\":\"\",\"filePath\":\"/usr/local/omc/backup/smsc_cdr\"}', '0 0 0/1 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134842, 'admin', 1724309047797, '');
REPLACE INTO `sys_job` VALUES (15, 'job.removeExportedFiles', 'SYSTEM', 'removeFile', '[{\"filePath\":\"/usr/local/omc/backup/operate_log\",\"maxDays\":30},{\"filePath\":\"/usr/local/omc/backup/ims_cdr\",\"maxDays\":30},{\"filePath\":\"/usr/local/omc/backup/smf_cdr\",\"maxDays\":30},{\"filePath\":\"/usr/local/omc/backup/smsc_cdr\",\"maxDays\":30}]', '0 10 0 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134842, 'admin', 1728634085631, '');
REPLACE INTO `sys_job` VALUES (16, 'job.exportSGWCCDR', 'SYSTEM', 'exportTable', '{\"duration\":1,\"tableName\":\"cdr_event_sgwc\",\"columns\":\"id,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.recordType\')) as recordType,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.accessPointNameNI\')) as accessPointNameNI,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.servedIMSI\')) as IMSI,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.servedMSISDN\')) as MSISDN,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.servedPDPPDNAddress\')) as PdpAddress,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.duration\')) as duration,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.recordOpeningTime\')) as recordOpeningTime,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.chargingID\')) as chargingID,JSON_UNQUOTE(JSON_EXTRACT(cdr_json, \'$.listOfTrafficVolumes[0].dataVolumeGPRSDownlink\')) AS dataVolumeGPRSDownlink,JSON_UNQUOTE(JSON_EXTRACT(cdr_json, \'$.listOfTrafficVolumes[0].dataVolumeGPRsUplink\')) as dataVolumeGPRsUplink,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.userLocationInformation.tai.tac\')) as tac,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.userLocationInformation.ecgi.eutraCellId\')) as cellID\",\"timeCol\":\"timestamp\",\"timeUnit\":\"second\",\"extras\":\"\",\"filePath\":\"/usr/local/omc/backup/sgwc_cdr\"}', '0 0 0/1 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134842, 'admin', 1724309047797, '');
REPLACE INTO `sys_job` VALUES (17, 'job.nbi.syncNRM', 'SYSTEM', 'syncNbiNRM', '', '0 0/5 * * * ?', '3', '0', '1', '1', 'system', 1698478134839, 'system', 1698478134839, 'job.nbi.syncNRM.remark');
REPLACE INTO `sys_job` VALUES (18, 'job.deleteExpiredNbiCm', 'SYSTEM', 'deleteExpiredRecord', '{\"duration\":30,\"tableName\":\"nbi_cm\",\"colName\":\"timestamp\",\"extras\":\"\"}', '0 40 0 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134841, NULL, 0, 'job.deleteExpiredNbiCm.remark');
SET FOREIGN_KEY_CHECKS = 1;

View File

@@ -119,8 +119,8 @@ REPLACE INTO `sys_menu` VALUES (2080, 'menu.ueUser.onlineIMS', 5, 4, 'ims', 'neU
REPLACE INTO `sys_menu` VALUES (2081, 'menu.ueUser.onlineUE', 5, 6, 'ue', 'neUser/ue/index', '1', '0', 'M', '1', '1', 'neUser:ue:index', 'icon-xiangmuchengyuan', 'supervisor', 1700000000000, NULL, 0, 'menu.ueUser.onlineUERemark');
REPLACE INTO `sys_menu` VALUES (2082, 'menu.ueUser.base5G', 5, 7, 'base5G', 'neUser/base5G/index', '1', '0', 'M', '0', '1', 'neUser:base5G:index', 'icon-paixu', 'supervisor', 1700000000000, NULL, 0, 'menu.ueUser.base5GRemark');
REPLACE INTO `sys_menu` VALUES (2083, 'menu.trace', 2087, 30, 'traceManage', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-paixu', 'supervisor', 1700000000000, NULL, 0, 'menu.traceRemark');
REPLACE INTO `sys_menu` VALUES (2084, 'menu.trace.task', 2083, 1, 'task', 'traceManage/task/index', '1', '0', 'M', '0', '1', 'traceManage:task:index', 'icon-chexiao', 'supervisor', 1700000000000, 'admin', 1713176976458, 'menu.trace.taskRemark');
REPLACE INTO `sys_menu` VALUES (2085, 'menu.trace.analysis', 2083, 4, 'analysis', 'traceManage/analysis/index', '1', '0', 'M', '0', '1', 'traceManage:analysis:index', 'icon-gongnengjieshao', 'supervisor', 1700000000000, 'admin', 1713176987835, 'menu.trace.analysisRemark');
REPLACE INTO `sys_menu` VALUES (2084, 'menu.trace.task', 2083, 1, 'task', 'traceManage/task/index', '1', '0', 'M', '1', '1', 'traceManage:task:index', 'icon-chexiao', 'supervisor', 1700000000000, 'admin', 1744453890548, 'menu.trace.taskRemark');
REPLACE INTO `sys_menu` VALUES (2085, 'menu.trace.taskData', 2083, 4, 'task/inline/data', 'traceManage/task/data', '1', '0', 'M', '0', '1', 'traceManage:task:data', '#', 'supervisor', 1700000000000, 'admin', 1744453921381, '');
REPLACE INTO `sys_menu` VALUES (2086, 'menu.trace.pcap', 2083, 11, 'pcap', 'traceManage/pcap/index', '1', '1', 'M', '1', '1', 'traceManage:pcap:index', 'icon-soutubiao', 'supervisor', 1700000000000, NULL, 0, 'menu.trace.pcapRemark');
REPLACE INTO `sys_menu` VALUES (2087, 'menu.fault', 0, 2, 'faultManage', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-jinggao', 'supervisor', 1700000000000, NULL, 0, 'menu.faultRemark');
REPLACE INTO `sys_menu` VALUES (2088, 'menu.fault.active', 2129, 1, 'active-alarm', 'faultManage/active-alarm/index', '1', '1', 'M', '1', '1', 'faultManage:active-alarm:index', 'icon-wenjian', 'supervisor', 1700000000000, NULL, 0, 'menu.fault.activemRemark');
@@ -191,12 +191,16 @@ REPLACE INTO `sys_menu` VALUES (2156, 'menu.common.edit', 2154, 2, '#', '', '1',
REPLACE INTO `sys_menu` VALUES (2157, 'menu.dashboard.smscCDR', 2140, 9, 'smscCDR', 'dashboard/smscCDR/index', '1', '0', 'M', '1', '1', 'dashboard:cdr:index', 'icon-paixu', 'supervisor', 1723107637982, 'supervisor', 1723107637982, '');
REPLACE INTO `sys_menu` VALUES (2158, 'menu.trace.pcapFile', 2083, 12, 'pcap/inline/file', 'traceManage/pcap/file', '1', '1', 'M', '0', '1', 'traceManage:pcap:index', '#', 'supervisor', 1724144595914, '', 0, '');
REPLACE INTO `sys_menu` VALUES (2159, 'menu.log.exportFile', 2089, 100, 'exportFile', 'logManage/exportFile/index', '1', '1', 'M', '1', '1', 'logManage:exportFile:index', 'icon-wenjian', 'supervisor', 1724144595914, '', 0, '');
REPLACE INTO `sys_menu` VALUES (2160, 'menu.perf.kpiCReport', 2099, 100, 'kpiCReport', 'perfManage/kpiCReport/index', '1', '0', 'M', '1', '1', 'perfManage:kpiCReport:index', 'icon-tubiaoku', 'supervisor', 1724144595914, '', 0, '');
REPLACE INTO `sys_menu` VALUES (2160, 'menu.perf.kpiCReport', 2099, 100, 'kpiCReport', 'perfManage/kpiCReport/index', '1', '1', 'M', '1', '1', 'perfManage:kpiCReport:index', 'icon-tubiaoku', 'supervisor', 1724144595914, '', 0, '');
REPLACE INTO `sys_menu` VALUES (2161, 'menu.trace.taskHLR', 2083, 6, 'taskHLR', 'traceManage/task-hlr/index', '1', '0', 'M', '0', '1', 'traceManage:taskHLR:index', 'icon-chexiao', 'supervisor', 1724144595914, '', 0, '');
REPLACE INTO `sys_menu` VALUES (2162, 'menu.trace.taskAnalyze', 2083, 2, 'task/inline/analyze', 'traceManage/task/analyze', '1', '0', 'M', '0', '1', 'traceManage:taskAnalyze:index', '#', 'supervisor', 1724144595914, '', 0, '');
REPLACE INTO `sys_menu` VALUES (2162, 'menu.trace.taskAnalyze', 2083, 2, 'task/inline/analyze', 'traceManage/task/analyze', '1', '0', 'M', '0', '1', 'traceManage:task:analyze', '#', 'supervisor', 1724144595914, '', 0, '');
REPLACE INTO `sys_menu` VALUES (2163, 'menu.trace.tshark', 2083, 14, 'tshark', 'traceManage/tshark/index', '1', '0', 'M', '1', '1', 'traceManage:tshark:index', 'icon-gengduo', 'supervisor', 1724144595914, '', 0, '');
REPLACE INTO `sys_menu` VALUES (2164, 'menu.trace.wireshark', 2083, 16, 'wireshark', 'traceManage/wireshark/index', '1', '0', 'M', '1', '1', 'traceManage:wireshark:index', 'icon-gengduo', 'supervisor', 1724144595914, '', 0, '');
REPLACE INTO `sys_menu` VALUES (2165, 'menu.config.neOverview', 4, 1, 'neOverview', 'configManage/neOverview/index', '1', '0', 'M', '1', '1', 'configManage:neOverview:index', 'icon-tubiaoku', 'supervisor', 1700000000000, NULL, 0, 'menu.config.neOverviewRemark');
REPLACE INTO `sys_menu` VALUES (2166, 'menu.dashboard.overview.smfUeNum', 2132, 2, '#', '', '1', '1', 'B', '1', '1', 'dashboard:overview:smfUeNum', '#', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_menu` VALUES (2167, 'menu.dashboard.overview.imsUeNum', 2132, 4, '#', '', '1', '1', 'B', '1', '1', 'dashboard:overview:imsUeNum', '#', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_menu` VALUES (2168, 'menu.dashboard.overview.gnbBase', 2132, 6, '#', '', '1', '1', 'B', '1', '1', 'dashboard:overview:gnbBase', '#', 'supervisor', 1721902269805, '', 0, '');
REPLACE INTO `sys_menu` VALUES (2169, 'menu.dashboard.overview.enbBase', 2132, 8, '#', '', '1', '1', 'B', '1', '1', 'dashboard:overview:enbBase', '#', 'supervisor', 1721902269805, '', 0, '');
-- 指定记录条件更新

View File

@@ -1,6 +1,3 @@
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for sys_role_menu
-- ----------------------------
@@ -10,17 +7,17 @@ CREATE TABLE IF NOT EXISTS `sys_role_menu` (
PRIMARY KEY (`role_id`, `menu_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '角色和菜单关联表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of sys_role_menu
-- ----------------------------
--
-- Dumping data for table `sys_role_menu`
--
LOCK TABLES `sys_role_menu` WRITE;
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 4);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 5);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 60);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 61);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 63);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 64);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 65);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 66);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 100);
@@ -31,7 +28,6 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 104);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 105);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 108);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 111);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 112);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 115);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 116);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 117);
@@ -63,20 +59,13 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1022);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1023);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1024);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1030);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1031);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1032);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1033);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1034);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1039);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1040);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1041);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1042);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1043);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1044);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1045);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1048);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1049);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1050);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1051);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1052);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1053);
@@ -87,10 +76,8 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2009);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2010);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2080);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2081);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2082);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2083);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2084);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2085);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2086);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2087);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2088);
@@ -98,16 +85,12 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2089);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2091);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2092);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2094);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2097);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2096);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2098);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2097);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2099);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2100);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2101);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2102);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2103);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2104);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2105);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2106);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2107);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2108);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2109);
@@ -115,17 +98,13 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2111);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2112);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2113);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2114);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2115);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2116);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2117);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2118);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2119);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2120);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2121);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2122);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2123);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2124);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2125);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2126);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2128);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2129);
@@ -155,25 +134,22 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2157);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2158);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2159);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2160);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2162);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2163);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2164);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2165);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2166);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2167);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2168);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2169);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 4);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 5);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 60);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 65);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 66);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 108);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 112);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 115);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 500);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 501);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1030);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1031);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1032);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1034);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1039);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1042);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1048);
@@ -181,7 +157,6 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2009);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2010);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2080);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2081);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2082);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2083);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2086);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2087);
@@ -190,15 +165,14 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2089);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2091);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2092);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2094);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2096);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2097);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2107);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2108);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2109);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2111);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2113);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2114);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2115);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2119);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2116);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2120);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2123);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2126);
@@ -217,22 +191,21 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2146);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2147);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2148);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2149);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2151);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2152);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2153);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2154);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2155);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2156);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2157);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2158);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2165);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2166);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2167);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2168);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2169);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 1);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 4);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 60);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 65);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 66);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 112);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 115);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 500);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 501);
@@ -251,7 +224,7 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2092);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2094);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2097);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2113);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2114);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2116);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2126);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2128);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2129);
@@ -265,20 +238,19 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2141);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2147);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2148);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2149);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2151);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2152);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2153);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2157);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2158);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2163);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2165);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2166);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2167);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2168);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2169);
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 1);
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 4);
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 112);
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2087);
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2115);
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2131);
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2132);
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2165);
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2126);
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2130);
SET FOREIGN_KEY_CHECKS = 1;
UNLOCK TABLES;
-- Dump completed on 2024-04-12 21:19:19

View File

@@ -0,0 +1,44 @@
--
-- Table structure for table `trace_data`
--
CREATE TABLE IF NOT EXISTS `trace_data` (
`id` int NOT NULL AUTO_INCREMENT,
`trace_id` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '跟踪任务ID',
`imsi` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'UE类型 IMSI',
`msisdn` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'UE类型 可能存在',
`src_addr` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '源地址',
`dst_addr` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '目标地址',
`if_type` varchar(16) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '接口类型,未分类',
`msg_type` int DEFAULT NULL COMMENT '消息类型0-req, 1-rsp',
`msg_direct` int DEFAULT NULL COMMENT '消息方向0-recv,1-send',
`msg_ne` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '消息网元',
`msg_event` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '消息事件e.g: CreateContextReq',
`length` int DEFAULT NULL COMMENT '原始数据byte长度',
`timestamp` bigint DEFAULT '0' COMMENT '纳秒时间戳',
`raw_msg` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '原始数据byteBase64',
PRIMARY KEY (`id`) USING BTREE,
KEY `idx_task_id_time` (`trace_id`,`timestamp`) COMMENT '任务DI时间'
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='跟踪_任务数据';
-- Dump completed on 2025-04-14 14:26:59
ALTER TABLE `trace_data` COMMENT = '跟踪_任务数据';
ALTER TABLE `trace_data` ADD COLUMN IF NOT EXISTS `trace_id` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '跟踪任务ID' AFTER `id`;
ALTER TABLE `trace_data` ADD COLUMN IF NOT EXISTS `msg_ne` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '消息网元' AFTER `msg_direct`;
ALTER TABLE `trace_data` ADD COLUMN IF NOT EXISTS `msg_event` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '消息事件e.g: CreateContextReq' AFTER `msg_ne`;
ALTER TABLE `trace_data` MODIFY COLUMN `id` int NOT NULL FIRST;
ALTER TABLE `trace_data` MODIFY COLUMN `imsi` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT 'UE类型 IMSI' AFTER `trace_id`;
ALTER TABLE `trace_data` MODIFY COLUMN `msisdn` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT 'UE类型 可能存在' AFTER `imsi`;
ALTER TABLE `trace_data` MODIFY COLUMN `src_addr` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '源地址' AFTER `msisdn`;
ALTER TABLE `trace_data` MODIFY COLUMN `dst_addr` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '目标地址' AFTER `src_addr`;
ALTER TABLE `trace_data` MODIFY COLUMN `if_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '接口类型,未分类' AFTER `dst_addr`;
ALTER TABLE `trace_data` MODIFY COLUMN `msg_type` int NULL DEFAULT NULL COMMENT '消息类型0-req, 1-rsp' AFTER `if_type`;
ALTER TABLE `trace_data` MODIFY COLUMN `msg_direct` int NULL DEFAULT NULL COMMENT '消息方向0-recv,1-send' AFTER `msg_type`;
ALTER TABLE `trace_data` MODIFY COLUMN `length` int NULL DEFAULT NULL COMMENT '原始数据byte长度' AFTER `msg_event`;
ALTER TABLE `trace_data` MODIFY COLUMN `timestamp` bigint NULL DEFAULT 0 COMMENT '纳秒时间戳' AFTER `length`;
ALTER TABLE `trace_data` MODIFY COLUMN `raw_msg` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '原始数据byteBase64' AFTER `timestamp`;
ALTER TABLE `trace_data` MODIFY COLUMN `id` int NOT NULL AUTO_INCREMENT;
ALTER TABLE `trace_data` DROP COLUMN IF EXISTS `task_id`;
ALTER TABLE `trace_data` DROP COLUMN IF EXISTS `dec_msg`;
ALTER TABLE `trace_data` ADD INDEX IF NOT EXISTS `idx_task_id_time`(`trace_id`, `timestamp`) USING BTREE COMMENT '任务DI时间';

View File

@@ -0,0 +1,49 @@
--
-- Table structure for table `trace_task`
--
CREATE TABLE IF NOT EXISTS `trace_task` (
`id` int NOT NULL AUTO_INCREMENT COMMENT 'ID',
`trace_id` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '任务编号',
`trace_type` varchar(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '1-Interface,2-Device,3-UE',
`start_time` bigint DEFAULT '0' COMMENT '开始时间 毫秒',
`end_time` bigint DEFAULT '0' COMMENT '结束时间 毫秒',
`interfaces` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '接口跟踪必须 例如 N8,N10',
`imsi` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '用户跟踪必须',
`msisdn` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '用户跟踪可选',
`src_ip` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '源地址IP',
`dst_ip` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '目标地址IP',
`create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '创建者',
`create_time` bigint DEFAULT '0' COMMENT '创建时间',
`remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '备注',
`ne_list` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元列表 neType_neId 例如 UDM_001,AMF_001',
`notify_url` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '信息数据通知回调地址UDP 例如udp:192.168.5.58:33033',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='跟踪_任务';
-- Dump completed on 2025-04-14 14:26:59
ALTER TABLE `trace_task` COMMENT = '跟踪_任务';
ALTER TABLE `trace_task` ADD COLUMN IF NOT EXISTS `ne_list` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元列表 neType_neId 例如 UDM_001,AMF_001' AFTER `remark`;
ALTER TABLE `trace_task` MODIFY COLUMN `id` int NOT NULL COMMENT 'ID' FIRST;
ALTER TABLE `trace_task` MODIFY COLUMN `trace_id` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '任务编号' AFTER `id`;
ALTER TABLE `trace_task` MODIFY COLUMN `trace_type` varchar(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '1-Interface,2-Device,3-UE' AFTER `trace_id`;
ALTER TABLE `trace_task` MODIFY COLUMN `start_time` bigint NULL DEFAULT 0 COMMENT '开始时间 毫秒' AFTER `trace_type`;
ALTER TABLE `trace_task` MODIFY COLUMN `end_time` bigint NULL DEFAULT 0 COMMENT '结束时间 毫秒' AFTER `start_time`;
ALTER TABLE `trace_task` MODIFY COLUMN `interfaces` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '' COMMENT '接口跟踪必须 例如 N8,N10' AFTER `end_time`;
ALTER TABLE `trace_task` MODIFY COLUMN `imsi` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '用户跟踪必须' AFTER `interfaces`;
ALTER TABLE `trace_task` MODIFY COLUMN `msisdn` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '用户跟踪可选' AFTER `imsi`;
ALTER TABLE `trace_task` MODIFY COLUMN `src_ip` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '源地址IP' AFTER `msisdn`;
ALTER TABLE `trace_task` MODIFY COLUMN `dst_ip` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '目标地址IP' AFTER `src_ip`;
ALTER TABLE `trace_task` MODIFY COLUMN `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者' AFTER `dst_ip`;
ALTER TABLE `trace_task` MODIFY COLUMN `create_time` bigint NULL DEFAULT 0 COMMENT '创建时间' AFTER `create_by`;
ALTER TABLE `trace_task` MODIFY COLUMN `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '' COMMENT '备注' AFTER `create_time`;
ALTER TABLE `trace_task` MODIFY COLUMN `notify_url` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '信息数据通知回调地址UDP 例如udp:192.168.5.58:33033' AFTER `ne_list`;
ALTER TABLE `trace_task` MODIFY COLUMN `id` int NOT NULL AUTO_INCREMENT COMMENT 'ID';
ALTER TABLE `trace_task` DROP COLUMN IF EXISTS `ue_ip`;
ALTER TABLE `trace_task` DROP COLUMN IF EXISTS `signal_port`;
ALTER TABLE `trace_task` DROP COLUMN IF EXISTS `update_by`;
ALTER TABLE `trace_task` DROP COLUMN IF EXISTS `update_time`;
ALTER TABLE `trace_task` DROP COLUMN IF EXISTS `ne_type`;
ALTER TABLE `trace_task` DROP COLUMN IF EXISTS `ne_id`;
ALTER TABLE `trace_task` DROP COLUMN IF EXISTS `fetch_msg`;

View File

@@ -4,7 +4,6 @@ SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for ue_event_amf
-- ----------------------------
DROP TABLE IF EXISTS `ue_event_amf`;
CREATE TABLE IF NOT EXISTS `ue_event_amf` (
`id` int NOT NULL AUTO_INCREMENT,
`ne_type` varchar(32) COLLATE utf8mb4_general_ci DEFAULT NULL,

View File

@@ -4,7 +4,6 @@ SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for ue_event_mme
-- ----------------------------
DROP TABLE IF EXISTS `ue_event_mme`;
CREATE TABLE IF NOT EXISTS `ue_event_mme` (
`id` int NOT NULL AUTO_INCREMENT,
`ne_type` varchar(32) COLLATE utf8mb4_general_ci DEFAULT NULL,

View File

@@ -62,14 +62,14 @@ func PostCDREventFrom(w http.ResponseWriter, r *http.Request) {
switch neInfo.NeType {
case "IMS":
if v, ok := cdrEvent.CDR["recordType"]; ok && (v == "MOC" || v == "MTSM") {
wsService.NewWSSend.ByGroupID(wsService.GROUP_IMS_CDR+neInfo.NeId, cdrEvent)
wsService.NewWSSend.ByGroupID(wsService.GROUP_IMS_CDR+"_"+neInfo.NeId, cdrEvent)
}
case "SMF":
wsService.NewWSSend.ByGroupID(wsService.GROUP_SMF_CDR+neInfo.NeId, cdrEvent)
wsService.NewWSSend.ByGroupID(wsService.GROUP_SMF_CDR+"_"+neInfo.NeId, cdrEvent)
case "SMSC":
wsService.NewWSSend.ByGroupID(wsService.GROUP_SMSC_CDR+neInfo.NeId, cdrEvent)
wsService.NewWSSend.ByGroupID(wsService.GROUP_SMSC_CDR+"_"+neInfo.NeId, cdrEvent)
case "SGWC":
wsService.NewWSSend.ByGroupID(wsService.GROUP_SGWC_CDR+neInfo.NeId, cdrEvent)
wsService.NewWSSend.ByGroupID(wsService.GROUP_SGWC_CDR+"_"+neInfo.NeId, cdrEvent)
}
}

View File

@@ -10,6 +10,7 @@ import (
"strings"
"time"
"be.ems/features/nbi/redisqueue"
"be.ems/lib/config"
"be.ems/lib/dborm"
"be.ems/lib/global"
@@ -449,6 +450,12 @@ func PostAlarmFromNF(w http.ResponseWriter, r *http.Request) {
services.ResponseInternalServerError500DatabaseOperationFailed(w)
continue
}
// 推送到 redis 队列, for NBI ARALM notification
err = redisqueue.AddAlarmQueue(alarmData.AlarmId)
if err != nil {
log.Warn("Failed to AddAlarmQueue:", err)
}
}
alarmLog := new(AlarmLog)
alarmLog.NeType = alarmData.NeType
@@ -476,6 +483,24 @@ func PostAlarmFromNF(w http.ResponseWriter, r *http.Request) {
log.Error("Failed to AlarmSMSForward:", err)
}
}
if config.GetYamlConfig().Alarm.RelatedRules.Enabled {
relatedId, found := JudgeRelated(&alarmData, session, config.RelationRules.Related)
if found {
id, err := InsertAlarmRelation(session, alarmData.AlarmId, relatedId, "related")
if err != nil {
log.Error("Failed to insert alarm relation:", err)
}
redisqueue.AddAlarmRelationQueue([]string{strconv.FormatInt(id, 10)})
}
derivedId, found := JudgeDerived(&alarmData, session)
if found {
id, err := InsertAlarmRelation(session, alarmData.AlarmId, derivedId, "derived")
if err != nil {
log.Error("Failed to insert alarm relation:", err)
}
redisqueue.AddAlarmRelationQueue([]string{strconv.FormatInt(id, 10)})
}
}
}
services.ResponseStatusOK200Null(w)
@@ -760,6 +785,11 @@ func GetAlarmFromNF(w http.ResponseWriter, r *http.Request) {
log.Error("Failed to insert alarm:", err)
continue
}
// 推送到 redis 队列, for NBI ARALM notification
err = redisqueue.AddAlarmQueue(alarmData.AlarmId)
if err != nil {
log.Warn("Failed to AddAlarmQueue:", err)
}
}
if err == nil && affected > 0 {
alarmLog := new(AlarmLog)

View File

@@ -15,6 +15,13 @@ import (
func AlarmEmailForward(alarmData *Alarm) error {
log.Info("AlarmEmailForward processing... ")
alarmStatus := "Clear"
if alarmData.AlarmStatus == 1 {
alarmStatus = "Active"
}
severity := alarmData.OrigSeverity
subjectTime := fmt.Sprintf("%s-%s-%s", severity, alarmData.NeName, alarmData.AlarmTitle)
message := fmt.Sprintf(`
<p>Alarm information</p>
<p style="text-indent:2.5em">Sequence: %d</p>
@@ -22,9 +29,9 @@ func AlarmEmailForward(alarmData *Alarm) error {
<p style="text-indent:4em">Title: %s</p>
<p style="text-indent:2.5em">Severity: %s</p>
<p style="text-indent:1.5em">Event Time: %s</p>
<p style="text-indent:0.5em">Alarm Status: %d</p>
<p style="text-indent:0.5em">Alarm Status: %s</p>
<p>Automatic sent by OMC, please do not reply!</p>
`, alarmData.AlarmSeq, alarmData.NeName, alarmData.AlarmTitle, alarmData.OrigSeverity, alarmData.EventTime, alarmData.AlarmStatus)
`, alarmData.AlarmSeq, alarmData.NeName, alarmData.AlarmTitle, alarmData.OrigSeverity, alarmData.EventTime, alarmStatus)
// message := fmt.Sprintf(`
// Alarm information
@@ -81,7 +88,7 @@ func AlarmEmailForward(alarmData *Alarm) error {
//m.SetHeader("To", "zhangshuzhong@agrandtech.com", "simonzhangsz@outlook.com") // 收件人,可以多个收件人,但必须使用相同的 SMTP 连接
//m.SetHeader("Cc", "******@qq.com") // 抄送,可以多个
//m.SetHeader("Bcc", "******@qq.com") // 暗送,可以多个
m.SetHeader("Subject", "Alarm from OMC!") // 邮件主题
m.SetHeader("Subject", subjectTime) // 邮件主题
// text/html 的意思是将文件的 content-type 设置为 text/html 的形式浏览器在获取到这种文件时会自动调用html的解析器对文件进行相应的处理。
// 可以通过 text/html 处理文本格式进行特殊处理,如换行、缩进、加粗等等

78
features/fm/relation.go Normal file
View File

@@ -0,0 +1,78 @@
package fm
import (
"time"
"be.ems/lib/config"
"xorm.io/xorm"
)
func JudgeDerived(alarm *Alarm, session *xorm.Session) (parentId string, found bool) {
for _, rule := range config.RelationRules.Derived {
if alarm.AlarmCode == rule.ChildCode {
// 查询是否有 parent_code 的告警
var parent Alarm
has, _ := session.Table("alarm").
Where("alarm_code=? AND ne_id=? AND alarm_status=1", rule.ParentCode, alarm.NeId).
Get(&parent)
if has {
return parent.AlarmId, true
}
}
}
return "", false
}
func JudgeRelated(alarm *Alarm, session *xorm.Session, rules []config.RelatedRule) (relatedId string, found bool) {
for _, rule := range rules {
// 1. 检查 ne_type 是否匹配
if rule.NeType != "" && alarm.NeType != rule.NeType {
continue
}
// 2. 检查 code 是否在 codes 列表
codeMatch := false
for _, c := range rule.Codes {
if alarm.AlarmCode == c {
codeMatch = true
break
}
}
if !codeMatch {
continue
}
// 3. 查询同一ne_id、codes列表内、时间窗口内的其他告警
var brother Alarm
parsedTime, err := time.Parse(time.RFC3339, alarm.EventTime)
if err != nil {
continue
}
timeStart := parsedTime.Add(-time.Duration(rule.TimeWindow) * time.Second)
has, _ := session.Table("alarm").
Where("ne_id=? AND alarm_code IN (?) AND event_time BETWEEN ? AND ? AND alarm_id!=?",
alarm.NeId, rule.Codes, timeStart, alarm.EventTime, alarm.AlarmId).
Get(&brother)
if has {
return brother.AlarmId, true
}
}
return "", false
}
type AlarmRelation struct {
Id int64 `xorm:"pk autoincr 'id'"`
AlarmId string `xorm:"alarm_id"`
RelatedAlarmId string `xorm:"related_alarm_id"`
RelationType string `xorm:"relation_type"`
CreateAt time.Time `xorm:"create_at"`
}
func InsertAlarmRelation(session *xorm.Session, alarmId, relatedId, relationType string) (int64, error) {
relation := &AlarmRelation{
AlarmId: alarmId,
RelatedAlarmId: relatedId,
RelationType: relationType,
CreateAt: time.Now(),
}
_, err := session.Insert(relation)
return relation.Id, err // 返回插入的ID
}

View File

@@ -2,14 +2,10 @@ package file_export
import (
"encoding/json"
"fmt"
"net/http"
"os"
"path"
"path/filepath"
"time"
"github.com/jlaffaye/ftp"
"be.ems/lib/file"
"be.ems/lib/log"
@@ -160,7 +156,7 @@ func (m *SysJob) SetFTPConfig(c *gin.Context) {
Username string `json:"username" binding:"required"`
ToIp string `json:"toIp" binding:"required"`
ToPort int64 `json:"toPort" binding:"required"`
Protocol string `json:"protocol" binding:"required,oneof=ssh ftp"`
Enable bool `json:"enable"`
Dir string `json:"dir" binding:"required"`
}
if err := c.ShouldBindBodyWithJSON(&body); err != nil {
@@ -191,7 +187,7 @@ func (m *SysJob) SetFTPConfig(c *gin.Context) {
c.JSON(200, result.Ok(nil))
}
// 设置FTP配置
// 获取FTP配置
// GET /table/ftp
func (m *SysJob) GetFTPConfig(c *gin.Context) {
// 获取配置
@@ -209,7 +205,7 @@ func (m *SysJob) GetFTPConfig(c *gin.Context) {
Username string `json:"username" binding:"required"`
ToIp string `json:"toIp" binding:"required"`
ToPort int64 `json:"toPort" binding:"required"`
Protocol string `json:"protocol" binding:"required,oneof=ssh ftp"`
Enable bool `json:"enable"`
Dir string `json:"dir" binding:"required"`
}
err = json.Unmarshal([]byte(bodyDe), &body)
@@ -251,7 +247,7 @@ func (m *SysJob) PutFTP(c *gin.Context) {
Username string `json:"username" binding:"required"`
ToIp string `json:"toIp" binding:"required"`
ToPort int64 `json:"toPort" binding:"required"`
Protocol string `json:"protocol" binding:"required,oneof=ssh ftp"`
Enable bool `json:"enable"`
Dir string `json:"dir" binding:"required"`
}
cfg := systemService.NewSysConfigImpl.SelectConfigByKey("sys.exportTable")
@@ -269,70 +265,37 @@ func (m *SysJob) PutFTP(c *gin.Context) {
return
}
}
if cfgData.Protocol == "ssh" {
connSSH := ssh.ConnSSH{
User: cfgData.Username,
Password: cfgData.Password,
Addr: cfgData.ToIp,
Port: cfgData.ToPort,
AuthMode: "0",
}
sshClient, err := connSSH.NewClient()
if err != nil {
c.JSON(200, result.ErrMsg(err.Error()))
return
}
defer sshClient.Close()
// 网元主机的SSH客户端进行文件传输
sftpClient, err := sshClient.NewClientSFTP()
if err != nil {
c.JSON(200, result.ErrMsg(err.Error()))
return
}
defer sftpClient.Close()
// 远程文件
remotePath := filepath.Join(cfgData.Dir, path.Base(body.FilePath), body.FileName)
// 复制到远程
if err = sftpClient.CopyFileLocalToRemote(localFilePath, remotePath); err != nil {
c.JSON(200, result.ErrMsg("error uploading file"))
return
}
c.JSON(200, result.Ok(nil))
if !cfgData.Enable {
c.JSON(200, result.ErrMsg("Setting Remote Backup is disabled"))
return
}
if cfgData.Protocol == "ftp" {
// 连接到 FTP 服务器
addr := fmt.Sprintf("%s:%d", cfgData.ToIp, cfgData.ToPort)
ftpComm, err := ftp.Dial(addr, ftp.DialWithTimeout(15*time.Second))
if err != nil {
c.JSON(200, result.ErrMsg(err.Error()))
return
}
// 登录到 FTP 服务器
err = ftpComm.Login(cfgData.Username, cfgData.Password)
if err != nil {
c.JSON(200, result.ErrMsg(err.Error()))
return
}
defer ftpComm.Quit()
// 打开本地文件
file, err := os.Open(localFilePath)
if err != nil {
c.JSON(200, result.ErrMsg(err.Error()))
return
}
defer file.Close()
// 远程文件
remotePath := filepath.Join(cfgData.Dir, path.Base(body.FilePath), body.FileName)
// 上传文件到 FTP 服务器
err = ftpComm.Stor(remotePath, file)
if err != nil {
c.JSON(200, result.ErrMsg(err.Error()))
return
}
connSSH := ssh.ConnSSH{
User: cfgData.Username,
Password: cfgData.Password,
Addr: cfgData.ToIp,
Port: cfgData.ToPort,
AuthMode: "0",
}
c.JSON(200, result.Err(nil))
sshClient, err := connSSH.NewClient()
if err != nil {
c.JSON(200, result.ErrMsg(err.Error()))
return
}
defer sshClient.Close()
// 网元主机的SSH客户端进行文件传输
sftpClient, err := sshClient.NewClientSFTP()
if err != nil {
c.JSON(200, result.ErrMsg(err.Error()))
return
}
defer sftpClient.Close()
// 远程文件
remotePath := filepath.Join(cfgData.Dir, path.Base(body.FilePath), body.FileName)
// 复制到远程
if err = sftpClient.CopyFileLocalToRemote(localFilePath, remotePath); err != nil {
c.JSON(200, result.ErrMsg("error uploading file"))
return
}
c.JSON(200, result.Ok(nil))
}

View File

@@ -17,10 +17,12 @@ func Register(r *gin.RouterGroup) {
)
lmTable.POST("/ftp",
middleware.PreAuthorize(nil),
middleware.CryptoApi(true, false),
m.SetFTPConfig,
)
lmTable.GET("/ftp",
middleware.PreAuthorize(nil),
middleware.CryptoApi(false, true),
m.GetFTPConfig,
)
lmTable.PUT("/ftp",

View File

@@ -0,0 +1,181 @@
package redisqueue
import (
"context"
"encoding/json"
"be.ems/lib/log"
redisdb "be.ems/src/framework/database/redis"
"github.com/redis/go-redis/v9"
)
const (
// MaxMessages is the maximum number of messages to retain in each stream
// This is set to 2000 as per the original code
// It ensures that only the latest 2000 messages are kept in the stream
// This helps in managing memory and performance by not allowing the stream to grow indefinitely
// If you need to change this, make sure to update it in all relevant places
// across the codebase to maintain consistency
// and avoid unexpected behavior.
// Note: This value should be consistent with the XTRIM command used in the code
// to trim the stream.
// If you change this value, also update the XTRIM command accordingly.
maxMessages = 2000 // Maximum number of messages to retain in each stream
)
// 写入 alarm_relation 消息
func AddAlarmRelationQueue(ids []string) error {
payload := map[string][]string{"ids": ids}
payloadBytes, err := json.Marshal(payload)
if err != nil {
return err
}
values := map[string]interface{}{
"payload": string(payloadBytes),
}
_, err = client.XAdd(ctx, &redis.XAddArgs{
Stream: "alarm_relation",
Values: values,
}).Result()
// 只保留最新2000条消息
client.XTrimMaxLen(context.Background(), "alarm_relation", maxMessages).Result()
return err
}
// 写入 alarm 消息
func AddAlarmQueue(id string) error {
payload := map[string]string{"id": id}
payloadBytes, err := json.Marshal(payload)
if err != nil {
return err
}
values := map[string]interface{}{
"payload": string(payloadBytes),
}
_, err = client.XAdd(ctx, &redis.XAddArgs{
Stream: "alarm",
Values: values,
}).Result()
// 只保留最新2000条消息
client.XTrimMaxLen(context.Background(), "alarm", maxMessages).Result()
return err
}
// 写入 nbi_cm 消息
func AddNbiCMQueue(ids []string) error {
payload := map[string][]string{"ids": ids}
payloadBytes, err := json.Marshal(payload)
if err != nil {
return err
}
values := map[string]interface{}{
"payload": string(payloadBytes),
}
_, err = client.XAdd(ctx, &redis.XAddArgs{
Stream: "nbi_cm",
Values: values,
}).Result()
// 只保留最新2000条消息
client.XTrimMaxLen(context.Background(), "nbi_cm", maxMessages).Result()
return err
}
// 写入 kpi_report_xxx 消息
func AddNbiKpiQueue(neType, id string) error {
payload := map[string]string{"neType": neType, "id": id}
payloadBytes, err := json.Marshal(payload)
if err != nil {
return err
}
values := map[string]interface{}{
"payload": string(payloadBytes),
}
_, err = client.XAdd(ctx, &redis.XAddArgs{
Stream: "nbi_kpi",
Values: values,
}).Result()
// 只保留最新2000条消息
client.XTrimMaxLen(context.Background(), "nbi_kpi", maxMessages).Result()
return err
}
// 写入 nbi_pm 消息
func AddNbiPMQueueOrg(neType, id string) error {
payload := map[string]string{"neType": neType, "id": id}
payloadBytes, err := json.Marshal(payload)
if err != nil {
return err
}
values := map[string]interface{}{
"payload": string(payloadBytes),
}
_, err = client.XAdd(ctx, &redis.XAddArgs{
Stream: "nbi_pm",
Values: values,
}).Result()
// 只保留最新2000条消息
client.XTrimMaxLen(context.Background(), "nbi_pm", maxMessages).Result()
return err
}
// 写入 nbi_pm 消息
func AddNbiPMQueue(id string) error {
payload := map[string]string{"id": id}
payloadBytes, err := json.Marshal(payload)
if err != nil {
return err
}
values := map[string]interface{}{
"payload": string(payloadBytes),
}
_, err = client.XAdd(ctx, &redis.XAddArgs{
Stream: "nbi_pm",
Values: values,
}).Result()
// 只保留最新2000条消息
client.XTrimMaxLen(context.Background(), "nbi_pm", maxMessages).Result()
return err
}
// 读取并打印指定 stream 的最新消息
func ReadLatest(stream string) error {
res, err := client.XRevRangeN(ctx, stream, "+", "-", 1).Result()
if err != nil {
return err
}
for _, msg := range res {
log.Tracef("Stream: %s, ID: %s, Values: %v\n", stream, msg.ID, msg.Values)
}
return nil
}
var ctx = context.Background()
var client *redis.Client
func InitRedisQueue() {
// var cancel context.CancelFunc
// ctx, cancel = context.WithTimeout(context.Background(), 5*time.Second)
// defer cancel()
client = redisdb.RDB("")
}
func CloseRedisQueue() {
if err := client.Close(); err != nil {
log.Errorf("redis db close: %s", err)
}
}

View File

@@ -34,7 +34,7 @@ func (k *KpiCReport) Get(c *gin.Context) {
dbg := dborm.DefaultDB().Table(tableName)
if querys.NeID != "" {
conditions = append(conditions, "rm_uid = (select n.rm_uid from ne_info n where n.ne_type=? and n.ne_id=? and n.status=1)")
conditions = append(conditions, "rm_uid = (select n.rm_uid from ne_info n where n.ne_type=? and n.ne_id=?)")
params = append(params, strings.ToUpper(querys.NeType), querys.NeID)
} else {
c.JSON(http.StatusBadRequest, services.ErrResp("Not found required parameter NE ID"))
@@ -101,7 +101,7 @@ func (k *KpiCReport) GetReport2FE(c *gin.Context) {
dbg := dborm.DefaultDB().Table(tableName)
if querys.NeID != "" {
conditions = append(conditions, "rm_uid = (select n.rm_uid from ne_info n where n.ne_type=? and n.ne_id=? and n.status=1)")
conditions = append(conditions, "rm_uid = (select n.rm_uid from ne_info n where n.ne_type=? and n.ne_id=?)")
params = append(params, querys.NeType, querys.NeID)
} else {
c.JSON(http.StatusBadRequest, services.ErrResp("Not found required parameter NE ID"))

View File

@@ -5,11 +5,15 @@ import (
"fmt"
"io"
"math"
"math/rand"
"net/http"
"os"
"path/filepath"
"strconv"
"strings"
"time"
"be.ems/features/nbi/redisqueue"
"be.ems/features/pm/kpi_c_report"
"be.ems/features/pm/kpi_c_title"
"be.ems/lib/config"
@@ -19,6 +23,8 @@ import (
"be.ems/lib/log"
"be.ems/lib/services"
"be.ems/src/framework/utils/parse"
neDataService "be.ems/src/modules/network_data/service"
neService "be.ems/src/modules/network_element/service"
wsService "be.ems/src/modules/ws/service"
"github.com/go-resty/resty/v2"
@@ -324,14 +330,24 @@ func PostKPIReportFromNF(w http.ResponseWriter, r *http.Request) {
if neInfo.RmUID == kpiData.RmUid {
// 推送到ws订阅组
wsService.NewWSSend.ByGroupID(fmt.Sprintf("%s%s_%s", wsService.GROUP_KPI, neInfo.NeType, neInfo.NeId), kpiEvent)
wsService.NewWSSend.ByGroupID(fmt.Sprintf("%s_%s_%s", wsService.GROUP_KPI, neInfo.NeType, neInfo.NeId), kpiEvent)
// 推送自定义KPI到ws订阅组
wsService.NewWSSend.ByGroupID(fmt.Sprintf("%s%s_%s", wsService.GROUP_KPI_C, neInfo.NeType, neInfo.NeId), kpiCEvent)
wsService.NewWSSend.ByGroupID(fmt.Sprintf("%s_%s_%s", wsService.GROUP_KPI_C, neInfo.NeType, neInfo.NeId), kpiCEvent)
if neInfo.NeType == "UPF" {
wsService.NewWSSend.ByGroupID(wsService.GROUP_KPI_UPF+neInfo.NeId, kpiEvent)
wsService.NewWSSend.ByGroupID(wsService.GROUP_KPI_UPF+"_"+neInfo.NeId, kpiEvent)
// 更新UPF总流量
upValue := parse.Number(kpiEvent["UPF.03"])
downValue := parse.Number(kpiEvent["UPF.06"])
neDataService.NewPerfKPI.UPFTodayFlowUpdate(neInfo.RmUID, upValue, downValue)
}
}
// 推送到redis队列
err = redisqueue.AddNbiKpiQueue(kpiData.NEType, strconv.Itoa(kpiData.ID))
if err != nil {
log.Warn("Failed to AddNbiKpiQueue:", err)
}
services.ResponseStatusOK204NoContent(w)
}
@@ -920,37 +936,449 @@ func PatchMeasureTaskToNF(w http.ResponseWriter, r *http.Request) {
}
type Measurement struct {
Id int `json:"-" xorm:"pk 'id' autoincr"`
Date string `json:"-" xorm:"date"`
Index int `json:"Index"` // 1天中测量时间粒度(如15分钟)的切片索引: 0~95
Timestamp string `json:"TimeStamp" xorm:"-"`
NeName string `json:"NeName"` // UserLabel
RmUID string `json:"RmUID" xorm:"rm_uid"`
NeType string `json:"NeType"` // 网元类型
PmVersion string `json:"PmVersion"` // 性能数据版本号
Dn string `json:"Dn"` // (???)网元标识, 如:RJN-CMZJ-TZ,SubNetwork=5GC88,ManagedElement=SMF53456,SmfFunction=53456
Period string `json:"Period"` // 测量时间粒度选项5/15/30/60
// Date is the measurement date in YYYY-MM-DD format (internal use only, omitted from JSON).
Date string `json:"-" xorm:"date"`
Index int `json:"Index"` // Index of 15-minute intervals (time granularity) in a day, range: 0~95
// Timestamp represents the measurement time in Unix milliseconds, populated from measurement time.
NeName string `json:"NeName"` // 网元用户标签(UserLabel),用于显示和唯一标识网元名称
// RmUID is the unique identifier for the network element (unique per NE, used for database joins).
RmUID string `json:"RmUID" xorm:"rm_uid"`
// Dn is the Network Element Distinguished Name (DN), uniquely identifies the network element.
// Format example: "RJN-CMZJ-TZ,SubNetwork=5GC88,ManagedElement=SMF53456,SmfFunction=53456"
// Dn为网元唯一标识(DN),格式示例:"RJN-CMZJ-TZ,SubNetwork=5GC88,ManagedElement=SMF53456,SmfFunction=53456"
Dn string `json:"Dn" xorm:"dn"`
// TimeZone specifies the time zone for the measurement, e.g., "Asia/Shanghai" or "+08:00".
TimeZone string `json:"TimeZone"`
NeType string `json:"NeType"` // 网元类型
StartTime string `json:"StartTime"`
// List of KPIs grouped by ObjectType.
Datas []Data `json:"Datas"`
}
type KPIValue struct {
Name string `json:"Name"` // 单个的写"Total", 或者指标项有多个测量项如Dnn的名称写对应的Dnn"cmnet"/"ims"
Name string `json:"Name"` // "Total" is used for aggregate values; other names (e.g., "cmnet", "ims") are used for specific measurement items such as DNN names.
Value int64 `json:"Value"`
}
type KPI struct {
KPIID string `json:"KPIID"` // 指标项, 如: SMF.AttCreatePduSession._Dnn
KPIID string `json:"KPIID"`
KPIValues []KPIValue `json:"KPIValues"`
}
type Data struct {
ObjectType string `json:"ObjectType"` // 网络资源类别名称, Pm指标项列表中为空间粒度 如SmfFunction
KPIs []KPI `json:"KPIs"` // 指标项, 如: SMF.AttCreatePduSession._Dnn
}
// 添加配置结构体
// type PMConfig struct {
// SchemaPath string `json:"schemaPath"` // schema文件路径
// RandomMin int `json:"randomMin"` // 随机数最小值
// RandomMax int `json:"randomMax"` // 随机数最大值
// MergeMode string `json:"mergeMode"` // 合并模式: "merge"(合并), "none"(不合并), "schema"(仅schema随机值)
// }
// 定义合并模式常量
const (
MergeModeNone = "none" // 不合并,仅使用网元发送的数据
MergeModeMerge = "merge" // 合并模式,优先使用网元数据,缺失部分用随机值补充
MergeModeSchema = "schema" // 仅使用schema数据全部用随机值
)
// 全局配置
// SchemaPath should be configured per environment; by default, it uses "/home/simon/omc.git/be.ems/config/schema".
// You can override this by setting the environment variable EMS_PM_SCHEMA_PATH.
// var pmConfig = PMConfig{
// SchemaPath: func() string {
// if envPath := os.Getenv("EMS_PM_SCHEMA_PATH"); envPath != "" {
// return envPath
// }
// return "/home/simon/omc.git/be.ems/config/schema"
// }(),
// RandomMin: 1,
// RandomMax: 16,
// MergeMode: MergeModeSchema,
// }
// var pmConfig = PMConfig{
// SchemaPath: config.GetNbiPmConfig().SchemaPath,
// RandomMin: config.GetNbiPmConfig().RandomMin,
// RandomMax: config.GetNbiPmConfig().RandomMax,
// MergeMode: config.GetNbiPmConfig().MergeMode,
// }
// schema数据结构
type SchemaKPIValue struct {
Name string `json:"Name"`
Value int `json:"Value"`
}
type SchemaKPI struct {
KPIID string `json:"KPIID"`
KPIValues []SchemaKPIValue `json:"KPIValues"`
}
type SchemaObject struct {
ObjectType string `json:"ObjectType"`
KPIs []SchemaKPI `json:"KPIs"`
}
type SchemaData []SchemaObject
// 读取schema文件
func loadSchemaData(neType string) (*SchemaData, error) {
schemaFile := filepath.Join(config.GetNbiPmConfig().SchemaPath, strings.ToLower(neType)+"-nbi-pm-schema.json")
if _, err := os.Stat(schemaFile); os.IsNotExist(err) {
log.Warnf("Schema file not found: %s", schemaFile)
return nil, nil // 文件不存在时返回 nil不是错误
}
data, err := os.ReadFile(schemaFile)
if err != nil {
return nil, fmt.Errorf("failed to read schema file: %v", err)
}
var schema SchemaData
if err := json.Unmarshal(data, &schema); err != nil {
return nil, fmt.Errorf("failed to parse schema file: %v", err)
}
return &schema, nil
}
// 生成随机值
func generateRandomKPIValue() int64 {
return int64(rand.Intn(config.GetNbiPmConfig().RandomMax-config.GetNbiPmConfig().RandomMin+1) +
config.GetNbiPmConfig().RandomMin)
}
// 合并网元数据和schema数据
func mergeWithSchema(measurement *dborm.NorthboundPm, schema *SchemaData) {
if schema == nil {
return
}
switch config.GetNbiPmConfig().MergeMode {
case MergeModeNone:
// 不合并,直接返回
log.Debug("Merge mode is 'none', skipping schema merge")
return
case MergeModeSchema:
// 仅使用schema数据清空原有数据全部用随机值
log.Debug("Merge mode is 'schema', replacing all data with schema random values")
measurement.Datas = nil
generateSchemaOnlyData(measurement, schema)
return
case MergeModeMerge:
// 合并模式,优先使用网元数据,缺失部分用随机值补充
log.Debug("Merge mode is 'merge', merging NE data with schema")
mergeNeDataWithSchema(measurement, schema)
return
default:
log.Warnf("Unknown merge mode: %s, using default merge mode", config.GetNbiPmConfig().MergeMode)
mergeNeDataWithSchema(measurement, schema)
}
}
// 仅使用schema数据生成随机值
func generateSchemaOnlyData(measurement *dborm.NorthboundPm, schema *SchemaData) {
for _, schemaObj := range *schema {
newData := struct {
ObjectType string `json:"ObjectType" xorm:"object_type"`
PmDatas []struct {
PmName string `json:"KPIID" xorm:"pm_name"`
SubDatas []struct {
SN string `json:"Name" xorm:"sn"`
SV int64 `json:"Value" xorm:"sv"`
} `json:"KPIValues" xorm:"sub_datas"`
} `json:"KPIs" xorm:"pm_datas"`
}{
ObjectType: schemaObj.ObjectType,
PmDatas: []struct {
PmName string `json:"KPIID" xorm:"pm_name"`
SubDatas []struct {
SN string `json:"Name" xorm:"sn"`
SV int64 `json:"Value" xorm:"sv"`
} `json:"KPIValues" xorm:"sub_datas"`
}{},
}
// 遍历schema中的KPI
for _, schemaKPI := range schemaObj.KPIs {
newKPI := struct {
PmName string `json:"KPIID" xorm:"pm_name"`
SubDatas []struct {
SN string `json:"Name" xorm:"sn"`
SV int64 `json:"Value" xorm:"sv"`
} `json:"KPIValues" xorm:"sub_datas"`
}{
PmName: schemaKPI.KPIID,
SubDatas: []struct {
SN string `json:"Name" xorm:"sn"`
SV int64 `json:"Value" xorm:"sv"`
}{},
}
// 为每个KPI值生成随机数
for _, schemaValue := range schemaKPI.KPIValues {
randomValue := generateRandomKPIValue()
newSubData := struct {
SN string `json:"Name" xorm:"sn"`
SV int64 `json:"Value" xorm:"sv"`
}{
SN: schemaValue.Name,
SV: randomValue,
}
newKPI.SubDatas = append(newKPI.SubDatas, newSubData)
log.Debugf("Generated schema random value for %s.%s: %d",
schemaKPI.KPIID, schemaValue.Name, randomValue)
}
if len(newKPI.SubDatas) > 0 {
newData.PmDatas = append(newData.PmDatas, newKPI)
}
}
if len(newData.PmDatas) > 0 {
measurement.Datas = append(measurement.Datas, newData)
log.Debugf("Created ObjectType with schema data: %s (%d KPIs)",
schemaObj.ObjectType, len(newData.PmDatas))
}
}
log.Debugf("Schema-only mode: generated %d object types", len(measurement.Datas))
}
// 合并网元数据和schema数据原有逻辑
func mergeNeDataWithSchema(measurement *dborm.NorthboundPm, schema *SchemaData) {
// 创建网元已有数据的映射,用于快速查找
neDataMap := make(map[string]map[string]map[string]int64) // ObjectType -> KPIID -> Name -> Value
for _, data := range measurement.Datas {
if neDataMap[data.ObjectType] == nil {
neDataMap[data.ObjectType] = make(map[string]map[string]int64)
}
for _, pmData := range data.PmDatas {
if neDataMap[data.ObjectType][pmData.PmName] == nil {
neDataMap[data.ObjectType][pmData.PmName] = make(map[string]int64)
}
for _, subData := range pmData.SubDatas {
neDataMap[data.ObjectType][pmData.PmName][subData.SN] = subData.SV
}
}
}
log.Debugf("Original measurement data contains %d object types", len(measurement.Datas))
// 遍历schema补充缺失的数据
for _, schemaObj := range *schema {
// 查找或创建对应的ObjectType
var targetData *struct {
ObjectType string `json:"ObjectType" xorm:"object_type"`
PmDatas []struct {
PmName string `json:"KPIID" xorm:"pm_name"`
SubDatas []struct {
SN string `json:"Name" xorm:"sn"`
SV int64 `json:"Value" xorm:"sv"`
} `json:"KPIValues" xorm:"sub_datas"`
} `json:"KPIs" xorm:"pm_datas"`
}
for i := range measurement.Datas {
if measurement.Datas[i].ObjectType == schemaObj.ObjectType {
targetData = &measurement.Datas[i]
break
}
}
// 如果没找到对应的ObjectType创建新的
if targetData == nil {
newData := struct {
ObjectType string `json:"ObjectType" xorm:"object_type"`
PmDatas []struct {
PmName string `json:"KPIID" xorm:"pm_name"`
SubDatas []struct {
SN string `json:"Name" xorm:"sn"`
SV int64 `json:"Value" xorm:"sv"`
} `json:"KPIValues" xorm:"sub_datas"`
} `json:"KPIs" xorm:"pm_datas"`
}{
ObjectType: schemaObj.ObjectType,
PmDatas: []struct {
PmName string `json:"KPIID" xorm:"pm_name"`
SubDatas []struct {
SN string `json:"Name" xorm:"sn"`
SV int64 `json:"Value" xorm:"sv"`
} `json:"KPIValues" xorm:"sub_datas"`
}{},
}
measurement.Datas = append(measurement.Datas, newData)
targetData = &measurement.Datas[len(measurement.Datas)-1]
log.Debugf("Created new ObjectType: %s", schemaObj.ObjectType)
}
// 遍历schema中的KPI
for _, schemaKPI := range schemaObj.KPIs {
// 查找是否已存在该KPI
var targetKPI *struct {
PmName string `json:"KPIID" xorm:"pm_name"`
SubDatas []struct {
SN string `json:"Name" xorm:"sn"`
SV int64 `json:"Value" xorm:"sv"`
} `json:"KPIValues" xorm:"sub_datas"`
}
for i := range targetData.PmDatas {
if targetData.PmDatas[i].PmName == schemaKPI.KPIID {
targetKPI = &targetData.PmDatas[i]
break
}
}
// 如果没找到对应的KPI创建新的
if targetKPI == nil {
newKPI := struct {
PmName string `json:"KPIID" xorm:"pm_name"`
SubDatas []struct {
SN string `json:"Name" xorm:"sn"`
SV int64 `json:"Value" xorm:"sv"`
} `json:"KPIValues" xorm:"sub_datas"`
}{
PmName: schemaKPI.KPIID,
SubDatas: []struct {
SN string `json:"Name" xorm:"sn"`
SV int64 `json:"Value" xorm:"sv"`
}{},
}
targetData.PmDatas = append(targetData.PmDatas, newKPI)
targetKPI = &targetData.PmDatas[len(targetData.PmDatas)-1]
log.Debugf("Created new KPI: %s", schemaKPI.KPIID)
}
// 遍历schema中的KPI值
for _, schemaValue := range schemaKPI.KPIValues {
// 检查是否已存在该值
exists := false
for i := range targetKPI.SubDatas {
if targetKPI.SubDatas[i].SN == schemaValue.Name {
exists = true
// 如果网元没有提供该值,使用随机值
if neDataMap[schemaObj.ObjectType] == nil ||
neDataMap[schemaObj.ObjectType][schemaKPI.KPIID] == nil ||
neDataMap[schemaObj.ObjectType][schemaKPI.KPIID][schemaValue.Name] == 0 {
targetKPI.SubDatas[i].SV = generateRandomKPIValue()
log.Debugf("Updated KPI %s.%s with random value: %d",
schemaKPI.KPIID, schemaValue.Name, targetKPI.SubDatas[i].SV)
}
break
}
}
// 如果不存在,添加新的值
if !exists {
var value int64
// 优先使用网元发送的值
if neDataMap[schemaObj.ObjectType] != nil &&
neDataMap[schemaObj.ObjectType][schemaKPI.KPIID] != nil &&
neDataMap[schemaObj.ObjectType][schemaKPI.KPIID][schemaValue.Name] != 0 {
value = neDataMap[schemaObj.ObjectType][schemaKPI.KPIID][schemaValue.Name]
log.Debugf("Using NE provided value for %s.%s: %d",
schemaKPI.KPIID, schemaValue.Name, value)
} else {
value = generateRandomKPIValue()
log.Debugf("Generated random value for %s.%s: %d",
schemaKPI.KPIID, schemaValue.Name, value)
}
newSubData := struct {
SN string `json:"Name" xorm:"sn"`
SV int64 `json:"Value" xorm:"sv"`
}{
SN: schemaValue.Name,
SV: value,
}
targetKPI.SubDatas = append(targetKPI.SubDatas, newSubData)
}
}
}
}
}
// Add this function before mergeNeDataWithSchema
func mergeDuplicateObjectTypes(measurement *dborm.NorthboundPm) {
if len(measurement.Datas) <= 1 {
return
}
// Create a map to group data by ObjectType
objectTypeMap := make(map[string]*struct {
ObjectType string `json:"ObjectType" xorm:"object_type"`
PmDatas []struct {
PmName string `json:"KPIID" xorm:"pm_name"`
SubDatas []struct {
SN string `json:"Name" xorm:"sn"`
SV int64 `json:"Value" xorm:"sv"`
} `json:"KPIValues" xorm:"sub_datas"`
} `json:"KPIs" xorm:"pm_datas"`
})
// Group data by ObjectType
for _, data := range measurement.Datas {
if existingData, exists := objectTypeMap[data.ObjectType]; exists {
// Merge PmDatas - check for duplicate KPIs
kpiMap := make(map[string]*struct {
PmName string `json:"KPIID" xorm:"pm_name"`
SubDatas []struct {
SN string `json:"Name" xorm:"sn"`
SV int64 `json:"Value" xorm:"sv"`
} `json:"KPIValues" xorm:"sub_datas"`
})
// Index existing KPIs
for i := range existingData.PmDatas {
kpiMap[existingData.PmDatas[i].PmName] = &existingData.PmDatas[i]
}
// Merge new KPIs
for _, newPmData := range data.PmDatas {
if existingKpi, exists := kpiMap[newPmData.PmName]; exists {
// Merge SubDatas for existing KPI
subDataMap := make(map[string]bool)
for _, subData := range existingKpi.SubDatas {
subDataMap[subData.SN] = true
}
// Add new SubDatas that don't exist
for _, newSubData := range newPmData.SubDatas {
if !subDataMap[newSubData.SN] {
existingKpi.SubDatas = append(existingKpi.SubDatas, newSubData)
}
}
} else {
// Add new KPI
existingData.PmDatas = append(existingData.PmDatas, newPmData)
}
}
} else {
// Create new entry for this ObjectType
objectTypeMap[data.ObjectType] = &data
}
}
// Replace measurement.Datas with merged data
measurement.Datas = nil
for _, mergedData := range objectTypeMap {
measurement.Datas = append(measurement.Datas, *mergedData)
}
log.Debugf("Merged duplicate ObjectTypes: original count %d, merged count %d",
len(measurement.Datas), len(objectTypeMap))
}
// process measurement post message from NFs
func PostMeasurementFromNF(w http.ResponseWriter, r *http.Request) {
log.Debug("PostMeasurementFromNF processing... ")
@@ -969,19 +1397,49 @@ func PostMeasurementFromNF(w http.ResponseWriter, r *http.Request) {
services.ResponseNotFound404UriNotExist(w, r)
return
}
log.Debug("Request body:", string(body))
// measurement := new(dborm.NorthboundPm)
//log.Debug("Request body:", string(body))
measurement := new(dborm.NorthboundPm)
_ = json.Unmarshal(body, &measurement)
log.Debug("measurement:", measurement)
session := dborm.DbClient.XEngine.NewSession()
// Merge duplicate ObjectTypes before processing
mergeDuplicateObjectTypes(measurement)
neInfo, err := dborm.XormGetNeInfoByRmUID(measurement.NeType, measurement.RmUID)
if err != nil {
log.Error("dborm.XormGetNeInfo is failed:", err)
services.ResponseInternalServerError500DatabaseOperationFailed(w)
return
}
if neInfo == nil {
log.Error("Not found target NE neType:", measurement.NeType, "RmUID:", measurement.RmUID)
services.ResponseNotFound404UriNotExist(w, r)
return
}
measurement.NeName = neInfo.NeName
measurement.Dn = neInfo.Dn
// 加载schema数据并进行合并
if config.GetNbiPmConfig().MergeMode != MergeModeNone {
log.Debugf("Loading schema for neType: %s (mode: %s)", measurement.NeType, config.GetNbiPmConfig().MergeMode)
schema, err := loadSchemaData(measurement.NeType)
if err != nil {
log.Warnf("Failed to load schema for %s: %v", measurement.NeType, err)
} else if schema != nil {
log.Debugf("Successfully loaded schema for %s, processing with mode: %s", measurement.NeType, config.GetNbiPmConfig().MergeMode)
mergeWithSchema(measurement, schema)
log.Debug("Data processing completed")
} else {
log.Debugf("No schema file found for %s, using original data", measurement.NeType)
}
}
session := xEngine.NewSession()
defer session.Close()
// layout := global.DateTime
layout := time.RFC3339
measurement.Date = GetDateFromTimeString(layout, measurement.StartTime)
measurement.StartTime = GetDateTimeFromTimeString(layout, measurement.StartTime)
affected, err := session.Table("nbi_pm").Insert(measurement)
if err != nil && affected <= 0 {
log.Error("Failed to insert nbi_pm:", err)
@@ -989,6 +1447,12 @@ func PostMeasurementFromNF(w http.ResponseWriter, r *http.Request) {
return
}
// 推送到redis队列
err = redisqueue.AddNbiPMQueue(strconv.Itoa(measurement.Id))
if err != nil {
log.Warn("Failed to AddNbiPMQueue:", err)
}
services.ResponseStatusOK204NoContent(w)
}
@@ -996,12 +1460,6 @@ func PostMeasurementFromNF(w http.ResponseWriter, r *http.Request) {
func GetMeasurementFromNF(w http.ResponseWriter, r *http.Request) {
log.Debug("GetMeasurementFromNF processing... ")
// _, err := services.CheckFrontValidRequest(w, r)
// if err != nil {
// log.Error("Request error:", err)
// return
// }
vars := mux.Vars(r)
apiVer := vars["apiVersion"]
if apiVer != global.ApiVersionV1 {
@@ -1025,9 +1483,7 @@ func GetMeasurementFromNF(w http.ResponseWriter, r *http.Request) {
}
log.Debugf("neType: %s neId:%s", neType, neIds)
//var neInfo *dborm.NeInfo
neInfo := new(dborm.NeInfo)
neInfo, err := dborm.XormGetNeInfo(neType, neIds[0])
if err != nil {
log.Error("dborm.XormGetNeInfo is failed:", err)
@@ -1054,10 +1510,26 @@ func GetMeasurementFromNF(w http.ResponseWriter, r *http.Request) {
switch response.StatusCode() {
case http.StatusOK, http.StatusCreated, http.StatusNoContent, http.StatusAccepted:
log.Debug("response:", response)
// measurement := new(dborm.NorthboundPm)
measurement := new(dborm.NorthboundPm)
_ = json.Unmarshal(response.Body(), &measurement)
log.Debug("measurement:", measurement)
// Merge duplicate ObjectTypes before processing
mergeDuplicateObjectTypes(measurement)
// Load schema and merge if needed
if config.GetNbiPmConfig().MergeMode != MergeModeNone {
log.Debugf("Loading schema for neType: %s (mode: %s)", measurement.NeType, config.GetNbiPmConfig().MergeMode)
schema, err := loadSchemaData(measurement.NeType)
if err != nil {
log.Warnf("Failed to load schema for %s: %v", measurement.NeType, err)
} else if schema != nil {
log.Debugf("Successfully loaded schema for %s, processing with mode: %s", measurement.NeType, config.GetNbiPmConfig().MergeMode)
mergeWithSchema(measurement, schema)
log.Debug("Data processing completed")
} else {
log.Debugf("No schema file found for %s, using original data", measurement.NeType)
}
}
session := dborm.DbClient.XEngine.NewSession()
defer session.Close()

View File

@@ -0,0 +1,209 @@
package ims_user
import (
"fmt"
"strconv"
"strings"
"be.ems/src/framework/database/redis"
neService "be.ems/src/modules/network_element/service"
)
// 实例化服务层 Service 结构体
var NewVoLTEService = &Service{
volteRepository: NewVoLTERepository,
}
// VoLTE用户信息 服务层处理
type Service struct {
volteRepository *Repository // VoLTE用户信息数据信息
}
// dataByRedis UDM签约用户 db:0 中 volte:*
func (r *Service) dataByRedis(imsi, neId string) []VoLTEUser {
arr := []VoLTEUser{}
key := fmt.Sprintf("volte:%s", imsi)
source := fmt.Sprintf("UDM_%s", neId)
// 网元主机的Redis客户端
redisClient, err := neService.NewNeInfo.NeRunRedisClient("UDM", neId)
if err != nil {
return arr
}
defer func() {
redisClient.Close()
redis.ConnectPush(source, nil)
}()
redis.ConnectPush(source, redisClient.Client)
udmsdArr, err := redis.GetKeys(source, key)
if err != nil {
return arr
}
mkv, err := redis.GetHashBatch(source, udmsdArr)
if err != nil {
return arr
}
for k, m := range mkv {
var imsi, msisdn string
KeyParts := strings.Split(k, ":")
switch len(KeyParts) {
case 0, 1:
// 处理单个部分的情况
continue
case 2:
// 处理两个部分的情况
imsi = KeyParts[1]
msisdn = "-"
case 3:
// 处理三个部分的情况
imsi = KeyParts[1]
msisdn = KeyParts[2]
default:
// 处理更多部分的情况
imsi = KeyParts[1]
msisdn = KeyParts[2]
}
var vni string = "-"
impiParts := strings.Split(m["impi"], "@")
if len(impiParts) > 1 {
vni = impiParts[1] // 输出: ims.mnc001.mcc110.3gppnetwork.org
}
a := VoLTEUser{
NeId: neId,
IMSI: imsi, // volte:360000100000130:8612300000130
MSISDN: msisdn, // 8612300000130
Tag: m["tag"], // volte = tag
VNI: vni, // ims.mnc001.mcc110.3gppnetwork.org
}
arr = append(arr, a)
}
return arr
}
// ResetData 重置鉴权用户数据清空数据库重新同步Redis数据
func (r *Service) ResetData(neId string) int64 {
subArr := r.dataByRedis("*", neId)
// 数据清空后添加
go r.volteRepository.ClearAndInsert(neId, subArr)
return int64(len(subArr))
}
// ParseInfo 解析单个用户imsi签约信息 data从命令MML得到的结果
func (r *Service) ParseInfo(imsi, neId string, data map[string]string) VoLTEUser {
u := r.volteRepository.SelectByIMSIAndNeID(imsi, neId)
msisdn := data["msisdn"]
if imsMsisdnLen := strings.Index(msisdn, ","); imsMsisdnLen != -1 {
msisdn = msisdn[:imsMsisdnLen]
}
// 用于更新
u.NeId = neId
u.IMSI = imsi
u.MSISDN = msisdn
u.Tag = data["volte_tag"]
u.VNI = data["VNI"]
return u
}
// SelectPage 分页查询数据库
func (r *Service) SelectPage(query map[string]any) map[string]any {
return r.volteRepository.SelectPage(query)
}
// SelectList 查询数据库
func (r *Service) SelectList(u VoLTEUser) []VoLTEUser {
return r.volteRepository.SelectList(u)
}
// Insert 从数据中读取后删除imsi再存入数据库
// imsi长度15ki长度32opc长度0或者32
func (r *Service) Insert(neId string, u VoLTEUser) int64 {
uArr := r.dataByRedis(u.IMSI, neId)
if len(uArr) > 0 {
r.volteRepository.Delete(u.IMSI, neId)
return r.volteRepository.Inserts(uArr)
}
return 0
}
// InsertData 导入文件数据 dataType目前两种txt/csv
func (r *Service) InsertData(neId, dataType string, data any) int64 {
// imsi截取前缀,重新获取部分数据
prefixes := make(map[string]struct{})
if dataType == "csv" {
for _, v := range data.([]map[string]string) {
imsi := v["imsi"]
if len(imsi) < 6 {
continue
}
prefix := imsi[:len(imsi)-4]
prefixes[prefix] = struct{}{}
}
}
if dataType == "txt" {
for _, v := range data.([][]string) {
imsi := v[0]
if len(imsi) < 6 {
continue
}
prefix := imsi[:len(imsi)-4]
prefixes[prefix] = struct{}{}
}
}
// 根据前缀重新加载插入
var num int64 = 0
for prefix := range prefixes {
// keys volte:4600001000004*
arr := r.dataByRedis(prefix+"*", neId)
if len(arr) > 0 {
r.volteRepository.DeletePrefixByIMSI(prefix, neId)
num += r.volteRepository.Inserts(arr)
}
}
return num
}
// Delete 删除单个不重新加载
func (r *Service) Delete(neId, imsi string) int64 {
return r.volteRepository.Delete(imsi, neId)
}
// LoadData 重新加载从imsi开始num的数据
func (r *Service) LoadData(neId, imsi, num string) {
startIMSI, _ := strconv.ParseInt(imsi, 10, 64)
subNum, _ := strconv.ParseInt(num, 10, 64)
var i int64
for i = 0; i < subNum; i++ {
keyIMSI := fmt.Sprintf("%015d", startIMSI+i)
// 删除原数据
r.volteRepository.Delete(keyIMSI, neId)
arr := r.dataByRedis(keyIMSI, neId)
if len(arr) < 1 {
continue
}
r.volteRepository.Inserts(arr)
}
}
// ParseCommandParams 解析数据组成命令参数 msisdn=xx,xx=xx,...
func (r *Service) ParseCommandParams(item VoLTEUser) string {
var conditions []string
if item.MSISDN != "" {
conditions = append(conditions, fmt.Sprintf("msisdn=%s", item.MSISDN))
}
if item.Tag != "" {
conditions = append(conditions, fmt.Sprintf("volte=%s", item.Tag))
}
if item.VNI != "" {
conditions = append(conditions, fmt.Sprintf("vni=%s", item.VNI))
}
return strings.Join(conditions, ",")
}

View File

@@ -0,0 +1,234 @@
package service
import (
"fmt"
"strconv"
"strings"
"be.ems/features/ue/model"
"be.ems/features/ue/repository"
"be.ems/src/framework/database/redis"
neService "be.ems/src/modules/network_element/service"
)
// 实例化服务层 IMSUserService 结构体
var NewIMSUserService = &IMSUserService{
imsUserRepository: repository.NewIMSUserRepository,
}
// VoLTE用户信息 服务层处理
type IMSUserService struct {
imsUserRepository *repository.IMSUserRepository // VoLTE用户信息数据信息
}
// dataByRedis UDM签约用户 db:0 中 volte:*
func (r *IMSUserService) dataByRedis(imsi, neId string) []model.IMSUser {
arr := []model.IMSUser{}
key := fmt.Sprintf("volte:%s", imsi)
source := fmt.Sprintf("UDM_%s", neId)
// 网元主机的Redis客户端
redisClient, err := neService.NewNeInfo.NeRunRedisClient("UDM", neId)
if err != nil {
return arr
}
defer func() {
redisClient.Close()
redis.ConnectPush(source, nil)
}()
redis.ConnectPush(source, redisClient.Client)
udmsdArr, err := redis.GetKeys(source, key)
if err != nil {
return arr
}
mkv, err := redis.GetHashBatch(source, udmsdArr)
if err != nil {
return arr
}
for k, m := range mkv {
var imsi, msisdn string
KeyParts := strings.Split(k, ":")
switch len(KeyParts) {
case 0, 1:
// 处理单个部分的情况
continue
case 2:
// 处理两个部分的情况
imsi = KeyParts[1]
msisdn = "-"
case 3:
// 处理三个部分的情况
imsi = KeyParts[1]
msisdn = KeyParts[2]
default:
// 处理更多部分的情况
imsi = KeyParts[1]
msisdn = KeyParts[2]
}
var vni string = "-"
impiParts := strings.Split(m["impi"], "@")
if len(impiParts) > 1 {
vni = impiParts[1] // 输出: ims.mnc001.mcc110.3gppnetwork.org
}
a := model.IMSUser{
NeId: neId,
IMSI: imsi, // volte:360000100000130:8612300000130
MSISDN: msisdn, // 8612300000130
Tag: model.ParseCallTag(m["tag"]), // volte = tag
VNI: vni, // ims.mnc001.mcc110.3gppnetwork.org
}
arr = append(arr, a)
}
return arr
}
// ResetData 重置鉴权用户数据清空数据库重新同步Redis数据
func (r *IMSUserService) ResetData(neId string) int64 {
subArr := r.dataByRedis("*", neId)
// 数据清空后添加
go r.imsUserRepository.ClearAndInsert(neId, subArr)
return int64(len(subArr))
}
// ParseInfo 解析单个用户imsi签约信息 data从命令MML得到的结果
func (r *IMSUserService) ParseInfo(imsi, neId string, data map[string]string) model.IMSUser {
u := r.imsUserRepository.SelectByIMSIAndNeID(imsi, neId)
msisdn := data["msisdn"]
if imsMsisdnLen := strings.Index(msisdn, ","); imsMsisdnLen != -1 {
msisdn = msisdn[:imsMsisdnLen]
}
var vni string = "-"
impiParts := strings.Split(data["impi"], "@")
if len(impiParts) > 1 {
vni = impiParts[1] // 输出: ims.mnc001.mcc110.3gppnetwork.org
}
// 用于更新
u.NeId = neId
u.IMSI = imsi
u.MSISDN = msisdn
u.Tag = model.ParseCallTag(data["volte_tag"])
u.VNI = vni
return u
}
// SelectPage 分页查询数据库
func (r *IMSUserService) SelectPage(query map[string]any) map[string]any {
return r.imsUserRepository.SelectPage(query)
}
// SelectList 查询数据库
func (r *IMSUserService) SelectList(u model.IMSUser) []model.IMSUser {
return r.imsUserRepository.SelectList(u)
}
// Insert 从数据中读取后删除imsi再存入数据库
// imsi长度15ki长度32opc长度0或者32
func (r *IMSUserService) Insert(neId string, u model.IMSUser) int64 {
uArr := r.dataByRedis(u.IMSI+":*", neId)
if len(uArr) > 0 {
r.imsUserRepository.Delete(u.IMSI, neId)
return r.imsUserRepository.Inserts(uArr)
}
return 0
}
// InsertData 导入文件数据 dataType目前两种txt/csv
func (r *IMSUserService) InsertData(neId, dataType string, data any) int64 {
// imsi截取前缀,重新获取部分数据
prefixes := make(map[string]struct{})
if dataType == "csv" {
for _, v := range data.([]map[string]string) {
imsi := v["imsi"]
if len(imsi) < 6 {
continue
}
prefix := imsi[:len(imsi)-4]
prefixes[prefix] = struct{}{}
}
}
if dataType == "txt" {
for _, v := range data.([][]string) {
imsi := v[0]
if len(imsi) < 6 {
continue
}
prefix := imsi[:len(imsi)-4]
prefixes[prefix] = struct{}{}
}
}
// 根据前缀重新加载插入
var num int64 = 0
for prefix := range prefixes {
// keys volte:4600001000004*
arr := r.dataByRedis(prefix+"*", neId)
if len(arr) > 0 {
r.imsUserRepository.DeletePrefixByIMSI(prefix, neId)
num += r.imsUserRepository.Inserts(arr)
}
}
return num
}
// Delete 删除单个不重新加载
func (r *IMSUserService) Delete(neId, imsi string) int64 {
return r.imsUserRepository.Delete(imsi, neId)
}
// LoadData 重新加载从imsi开始num的数据
func (r *IMSUserService) LoadData(neId, imsi, num string) {
startIMSI, _ := strconv.ParseInt(imsi, 10, 64)
subNum, _ := strconv.ParseInt(num, 10, 64)
var i int64
for i = 0; i < subNum; i++ {
var keyIMSI string
if len(imsi) == model.IMSI_MAX_LENGTH {
keyIMSI = fmt.Sprintf("%015d", startIMSI+i)
} else {
// 处理不满15位的IMSI, tag=TAG_VoIP
keyIMSI = fmt.Sprintf("%d", startIMSI+i)
}
// 删除原数据
r.imsUserRepository.Delete(keyIMSI, neId)
arr := r.dataByRedis(keyIMSI+":*", neId)
if len(arr) < 1 {
continue
}
r.imsUserRepository.Inserts(arr)
}
}
// ParseCommandParams 解析数据组成命令参数 msisdn=xx,xx=xx,...
func (r *IMSUserService) ParseCommandParams(item model.IMSUser) string {
var conditions []string
if item.MSISDN != "" {
conditions = append(conditions, fmt.Sprintf("msisdn=%s", item.MSISDN))
}
if item.Tag != model.ParseCallTag("") {
conditions = append(conditions, fmt.Sprintf("volte=%d", item.Tag))
}
if item.VNI != "" {
conditions = append(conditions, fmt.Sprintf("vni=%s", item.VNI))
}
return strings.Join(conditions, ",")
}
// ResetDataWithResult 重置鉴权用户数据清空数据库重新同步Redis数据
// 通过 channel 返回 ClearAndInsert 的执行结果
func (r *IMSUserService) ResetDataWithResult(neId string) chan int64 {
arr := r.dataByRedis("*", neId)
resultCh := make(chan int64, 1)
go func() {
resultCh <- r.imsUserRepository.ClearAndInsert(neId, arr)
}()
return resultCh
}

View File

@@ -0,0 +1,186 @@
package service
import (
"fmt"
"strconv"
"strings"
"be.ems/features/ue/model"
"be.ems/features/ue/repository"
"be.ems/src/framework/database/redis"
neService "be.ems/src/modules/network_element/service"
)
// 实例化服务层 VoIPAuthService 结构体
var NewVoIPAuthService = &VoIPAuthService{
voipAuthRepository: repository.NewVoIPAuthRepository,
}
// VoLTE用户信息 服务层处理
type VoIPAuthService struct {
voipAuthRepository *repository.VoIPAuthRepository // VoLTE用户信息数据信息
}
// dataByRedis VoIP鉴权数据 db:0 中 voip:*
func (r *VoIPAuthService) dataByRedis(userName, neId string) []model.VoIPAuth {
arr := []model.VoIPAuth{}
key := fmt.Sprintf("voip:%s", userName)
source := fmt.Sprintf("UDM_%s", neId)
// 网元主机的Redis客户端
redisClient, err := neService.NewNeInfo.NeRunRedisClient("UDM", neId)
if err != nil {
return arr
}
defer func() {
redisClient.Close()
redis.ConnectPush(source, nil)
}()
redis.ConnectPush(source, redisClient.Client)
udmsdArr, err := redis.GetKeys(source, key)
if err != nil {
return arr
}
mkv, err := redis.GetHashBatch(source, udmsdArr)
if err != nil {
return arr
}
for k, m := range mkv {
var userName string
KeyParts := strings.Split(k, ":")
if len(KeyParts) > 1 {
userName = KeyParts[1]
}
a := model.VoIPAuth{
NeId: neId,
UserName: userName, // userName
Password: m["password"], //
}
arr = append(arr, a)
}
return arr
}
// ResetData 重置鉴权用户数据清空数据库重新同步Redis数据
func (r *VoIPAuthService) ResetData(neId string) int64 {
subArr := r.dataByRedis("*", neId)
// 数据清空后添加
go r.voipAuthRepository.ClearAndInsert(neId, subArr)
return int64(len(subArr))
}
// ParseInfo 解析单个用户userName信息 data从命令MML得到的结果
func (r *VoIPAuthService) ParseInfo(userName, neId string, data map[string]string) model.VoIPAuth {
u := r.voipAuthRepository.SelectByUserNameAndNeID(userName, neId)
password := data["password"]
// 用于更新
u.NeId = neId
u.UserName = userName
u.Password = password
return u
}
// SelectPage 分页查询数据库
func (r *VoIPAuthService) SelectPage(query map[string]any) map[string]any {
return r.voipAuthRepository.SelectPage(query)
}
// SelectList 查询数据库
func (r *VoIPAuthService) SelectList(u model.VoIPAuth) []model.VoIPAuth {
return r.voipAuthRepository.SelectList(u)
}
// Insert 从数据中读取后删除userName再存入数据库
func (r *VoIPAuthService) Insert(neId string, u model.VoIPAuth) int64 {
uArr := r.dataByRedis(u.UserName, neId)
if len(uArr) > 0 {
r.voipAuthRepository.Delete(u.UserName, neId)
return r.voipAuthRepository.Inserts(uArr)
}
return 0
}
// InsertData 导入文件数据 dataType目前两种txt/csv
func (r *VoIPAuthService) InsertData(neId, dataType string, data any) int64 {
userNames := make(map[string]struct{})
if dataType == "csv" {
for _, v := range data.([]map[string]string) {
userName := v["userName"]
// if len(userName) < 6 {
// continue
// }
// prefix := userName[:len(userName)-4]
userNames[userName] = struct{}{}
}
}
if dataType == "txt" {
for _, v := range data.([][]string) {
userName := v[0]
// if len(userName) < 6 {
// continue
// }
// prefix := userName[:len(userName)-4]
userNames[userName] = struct{}{}
}
}
// 根据前缀重新加载插入
var num int64 = 0
for userName := range userNames {
// keys voip:11111
arr := r.dataByRedis(userName, neId)
if len(arr) > 0 {
r.voipAuthRepository.DeleteByUserName(userName, neId)
num += r.voipAuthRepository.Inserts(arr)
}
}
return num
}
// Delete 删除单个不重新加载
func (r *VoIPAuthService) Delete(neId, userName string) int64 {
return r.voipAuthRepository.Delete(userName, neId)
}
// LoadData 重新加载从userName开始num的数据
func (r *VoIPAuthService) LoadData(neId, userName, num string) {
startUserName, _ := strconv.ParseInt(userName, 10, 64)
subNum, _ := strconv.ParseInt(num, 10, 64)
var i int64
for i = 0; i < subNum; i++ {
keyUserName := fmt.Sprintf("%d", startUserName+i)
// 删除原数据
r.voipAuthRepository.Delete(keyUserName, neId)
arr := r.dataByRedis(keyUserName, neId)
if len(arr) < 1 {
continue
}
r.voipAuthRepository.Inserts(arr)
}
}
// ParseCommandParams 解析数据组成命令参数 msisdn=xx,xx=xx,...
func (r *VoIPAuthService) ParseCommandParams(item model.VoIPAuth) string {
var conditions []string
if item.Password != "" {
conditions = append(conditions, fmt.Sprintf("password=%s", item.Password))
}
return strings.Join(conditions, ",")
}
// ResetDataWithResult 重置鉴权用户数据清空数据库重新同步Redis数据
// 通过 channel 返回 ClearAndInsert 的执行结果
func (r *VoIPAuthService) ResetDataWithResult(neId string) chan int64 {
arr := r.dataByRedis("*", neId)
resultCh := make(chan int64, 1)
go func() {
resultCh <- r.voipAuthRepository.ClearAndInsert(neId, arr)
}()
return resultCh
}

9
go.mod
View File

@@ -4,7 +4,6 @@ go 1.22.0
require (
github.com/dlclark/regexp2 v1.11.4
github.com/dustin/go-humanize v1.0.0
github.com/gin-gonic/gin v1.10.0
github.com/go-resty/resty/v2 v2.14.0
github.com/go-sql-driver/mysql v1.8.1
@@ -13,7 +12,6 @@ require (
github.com/gorilla/mux v1.8.1
github.com/gorilla/websocket v1.5.3
github.com/gosnmp/gosnmp v1.38.0
github.com/jlaffaye/ftp v0.2.0
github.com/lestrrat/go-file-rotatelogs v0.0.0-20180223000712-d3151e2a480f
github.com/linxGnu/gosmpp v0.3.0
github.com/matoous/go-nanoid/v2 v2.1.0
@@ -39,15 +37,16 @@ require (
golang.org/x/term v0.28.0
golang.org/x/text v0.21.0
gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df
gopkg.in/yaml.v2 v2.4.0
gopkg.in/yaml.v3 v3.0.1
gorm.io/driver/mysql v1.5.7
gorm.io/gorm v1.25.11
xorm.io/xorm v1.3.9
)
require github.com/google/go-cmp v0.6.0 // indirect
require (
github.com/hashicorp/errwrap v1.1.0 // indirect
github.com/hashicorp/go-multierror v1.1.1 // indirect
filippo.io/edwards25519 v1.1.0 // indirect
github.com/KyleBanks/depth v1.2.1 // indirect
github.com/beorn7/perks v1.0.1 // indirect
@@ -71,7 +70,7 @@ require (
github.com/go-openapi/swag v0.23.0 // indirect
github.com/go-playground/locales v0.14.1 // indirect
github.com/go-playground/universal-translator v0.18.1 // indirect
github.com/go-playground/validator/v10 v10.22.0 // indirect
github.com/go-playground/validator/v10 v10.22.0
github.com/goccy/go-json v0.10.3 // indirect
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect
github.com/golang/snappy v0.0.4 // indirect

93
go.sum
View File

@@ -1,10 +1,24 @@
cloud.google.com/go v0.112.1/go.mod h1:+Vbu+Y1UU+I1rjmzeMOb/8RfkKJK2Gyxi1X6jJCZLo4=
cloud.google.com/go/compute v1.24.0/go.mod h1:kw1/T+h/+tK2LJK0wiPPx1intgdAM3j/g3hFDlscY40=
cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA=
cloud.google.com/go/firestore v1.15.0/go.mod h1:GWOxFXcv8GZUtYpWHw/w6IuYNux/BtmeVTMmjrm4yhk=
cloud.google.com/go/iam v1.1.5/go.mod h1:rB6P/Ic3mykPbFio+vo7403drjlgvoWfYpJhMXEbzv8=
cloud.google.com/go/longrunning v0.5.5/go.mod h1:WV2LAxD8/rg5Z1cNW6FJ/ZpX4E4VnDnoTk0yawPBB7s=
cloud.google.com/go/storage v1.35.1/go.mod h1:M6M/3V/D3KpzMTJyPOR/HU6n2Si5QdaXYEsng2xgOs8=
filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
gitea.com/xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a h1:lSA0F4e9A2NcQSqGqTOXqu2aRi/XEQxDCBwM8yJtE6s=
gitea.com/xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a/go.mod h1:EXuID2Zs0pAQhH8yz+DNjUbjppKQzKFAn28TMYPB6IU=
gitee.com/travelliu/dm v1.8.11192/go.mod h1:DHTzyhCrM843x9VdKVbZ+GKXGRbKM2sJ4LxihRxShkE=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc=
github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE=
github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
github.com/alecthomas/kingpin/v2 v2.4.0/go.mod h1:0gyi0zQnjuFk8xrkNKamJoyUo382HRL7ATRpFZCw6tE=
github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE=
github.com/allegro/bigcache/v3 v3.1.0/go.mod h1:aPyh7jEvrog9zAwx5N7+JUQX5dZTSGpxF1LAR4dr35I=
github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs=
@@ -20,10 +34,13 @@ github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UF
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/chenjiandongx/ginprom v0.0.0-20210617023641-6c809602c38a h1:yTfhjWYoPomJkHVArtNHpo36FuOa6Kc2ZjTLvyyQ5Lg=
github.com/chenjiandongx/ginprom v0.0.0-20210617023641-6c809602c38a/go.mod h1:lINNCb1ZH3c0uL/9ApaQ8muR4QILsi0STj8Ojt8ZmwU=
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk=
github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/0Y=
github.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w=
github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg=
github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY=
github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -39,6 +56,8 @@ github.com/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/
github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ=
github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239 h1:Ghm4eQYC0nEPnSJdVkTrXpu9KtoVCSo1hg7mtI7G9KU=
github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239/go.mod h1:Gdwt2ce0yfBxPvZrHkprdPPTTS3N5rwmLE8T22KBXlw=
github.com/fatih/color v1.14.1/go.mod h1:2oHN61fhTpgcxD3TSWCgKDiH1+x4OiDVVGH8WlgGZGg=
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
@@ -55,6 +74,10 @@ github.com/gin-gonic/gin v1.10.0 h1:nTuyha1TYqgedzytsKYqna+DfLos46nTv2ygFy86HFU=
github.com/gin-gonic/gin v1.10.0/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y=
github.com/go-forks/fsnotify v1.4.7 h1:lyiU2Wqd4fNGCQDn9dZ4UxSiSFgeU1rM6yIfahk8haY=
github.com/go-forks/fsnotify v1.4.7/go.mod h1:AU8mot+GznW5+B4jRJHxKg/2EeO+jMORGRkKSxs0biw=
github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0=
github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=
github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE=
github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78=
@@ -82,10 +105,14 @@ github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqw
github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE=
github.com/goccy/go-json v0.10.3 h1:KZ5WoDbxAIgm2HNbYckL0se1fHD6rz5j4ywS6ebzDqA=
github.com/goccy/go-json v0.10.3/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk=
github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
github.com/golang-sql/sqlexp v0.1.0/go.mod h1:J4ad9Vo8ZCWQ2GMrC4UCQy1JpCbwU9m3EOqtpKwwwHI=
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g=
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
@@ -94,6 +121,7 @@ github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrU
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
@@ -106,8 +134,12 @@ github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/gopacket v1.1.19/go.mod h1:iJ8V8n6KS+z2U1A8pUwu8bW5SyEMkXJB8Yo/Vo+TKTo=
github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0=
github.com/googleapis/gax-go/v2 v2.12.3/go.mod h1:AKloxT6GtNbaLm8QTNSidHUVsHYcBHwWRvkNFJUQcS4=
github.com/googleapis/google-cloud-go-testing v0.0.0-20210719221736-1c9a4c676720/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g=
github.com/gopacket/gopacket v1.2.0 h1:eXbzFad7f73P1n2EJHQlsKuvIMJjVXK5tXoSca78I3A=
github.com/gopacket/gopacket v1.2.0/go.mod h1:BrAKEy5EOGQ76LSqh7DMAr7z0NNPdczWm2GxCG7+I8M=
github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=
@@ -117,28 +149,40 @@ github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/ad
github.com/gosnmp/gosnmp v1.36.2-0.20231009064202-d306ed5aa998/go.mod h1:O938QjIS4vpSag1UTcnnBq9MfNmimuOGtvQsT1NbErc=
github.com/gosnmp/gosnmp v1.38.0 h1:I5ZOMR8kb0DXAFg/88ACurnuwGwYkXWq3eLpJPHMEYc=
github.com/gosnmp/gosnmp v1.38.0/go.mod h1:FE+PEZvKrFz9afP9ii1W3cprXuVZ17ypCcyyfYuu5LY=
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I=
github.com/hashicorp/consul/api v1.28.2/go.mod h1:KyzqzgMEya+IZPcD65YFoOVAgPpbfERu4I/tzG6/ueE=
github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48=
github.com/hashicorp/go-hclog v1.5.0/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M=
github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8=
github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
github.com/hashicorp/serf v0.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfEvMqbG+4=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/jackc/chunkreader/v2 v2.0.1/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk=
github.com/jackc/pgconn v1.14.0/go.mod h1:9mBNlny0UvkgJdCDvdVHYSjI+8tD2rnKK69Wz8ti++E=
github.com/jackc/pgio v1.0.0/go.mod h1:oP+2QK2wFfUWgr+gxjoBH9KGBb31Eio69xUb0w5bYf8=
github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=
github.com/jackc/pgproto3/v2 v2.3.2/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA=
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM=
github.com/jackc/pgtype v1.14.0/go.mod h1:LUMuVrfsFfdKGLw+AFFVv6KtHOFMwRgDDzBt76IqCA4=
github.com/jackc/pgx/v4 v4.18.0/go.mod h1:FydWkUyadDmdNH/mHnGob881GawxeEm7TcMCzkb+qQE=
github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869 h1:IPJ3dvxmJ4uczJe5YQdrYB16oTJlGSC/OyZDqUk9xX4=
github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869/go.mod h1:cJ6Cj7dQo+O6GJNiMx+Pa94qKj+TG8ONdKHgMNIyyag=
github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
github.com/jlaffaye/ftp v0.2.0 h1:lXNvW7cBu7R/68bknOX3MrRIIqZ61zELs1P2RAiA3lg=
github.com/jlaffaye/ftp v0.2.0/go.mod h1:is2Ds5qkhceAPy2xD6RLI6hmp/qysSoymZ+Z2uTnspI=
github.com/jonboulle/clockwork v0.4.0 h1:p4Cf1aMWXnXAUh8lVfewRBx1zaTSYKrKMF2g3ST4RZ4=
github.com/jonboulle/clockwork v0.4.0/go.mod h1:xgRqUGwRcjKCO1vbZUEtSLrqKoPSsUpK7fnezOII0kc=
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs=
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA=
@@ -165,6 +209,7 @@ github.com/lestrrat/go-file-rotatelogs v0.0.0-20180223000712-d3151e2a480f h1:sgU
github.com/lestrrat/go-file-rotatelogs v0.0.0-20180223000712-d3151e2a480f/go.mod h1:UGmTpUd3rjbtfIpwAPrcfmGf/Z1HS95TATB+m57TPB8=
github.com/lestrrat/go-strftime v0.0.0-20180220042222-ba3bf9c1d042 h1:Bvq8AziQ5jFF4BHGAEDSqwPW1NJS3XshxbRCxtjFAZc=
github.com/lestrrat/go-strftime v0.0.0-20180220042222-ba3bf9c1d042/go.mod h1:TPpsiPUEh0zFL1Snz4crhMlBe60PYxRHr5oFF3rRYg0=
github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
github.com/linxGnu/gosmpp v0.3.0 h1:LL+eY+zc9Ei/YY0po9A6L6SHf8nPyGvqsLddttr/y/4=
github.com/linxGnu/gosmpp v0.3.0/go.mod h1:Ba6SULQql3IbF2A5Mtj3DqMKoFbx1pEz/8xyiOh8ZOs=
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I=
@@ -176,6 +221,7 @@ github.com/mailru/easyjson v0.9.0 h1:PrnmzHw7262yW8sTBwxi1PdJA3Iw/EKBa8psRf7d9a4
github.com/mailru/easyjson v0.9.0/go.mod h1:1+xMtQp2MRNVL/V1bOzuP3aP8VNwRW55fQUto+XFtTU=
github.com/matoous/go-nanoid/v2 v2.1.0 h1:P64+dmq21hhWdtvZfEAofnvJULaRR1Yib0+PnU669bE=
github.com/matoous/go-nanoid/v2 v2.1.0/go.mod h1:KlbGNQ+FhrUNIHUxZdL63t7tl4LaPkZNpUULS8H4uVM=
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mattn/go-sqlite3 v1.14.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y=
@@ -184,6 +230,8 @@ github.com/metaleap/go-util v0.0.0-20180330192724-a09253046f73 h1:4vKVhAdype/dej
github.com/metaleap/go-util v0.0.0-20180330192724-a09253046f73/go.mod h1:l71/5fppWP5A6nqhcxz6wQAYok6pr/vM2+KHIy50/LY=
github.com/metaleap/go-xsd v0.0.0-20180330193350-61f7638f502f h1:eeJGcYszuvOpmuJxeq57LaOO8mJurfjpOHJJMfQSD0s=
github.com/metaleap/go-xsd v0.0.0-20180330193350-61f7638f502f/go.mod h1:WK3zEKtwVd/v+NM3lh1ZE6MdDfHsdOFFOD5Ezi4Hutg=
github.com/microsoft/go-mssqldb v1.6.0/go.mod h1:00mDtPbeQCRGC1HwOOR5K/gr30P1NcEG0vx6Kbv2aJU=
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -199,6 +247,10 @@ github.com/mssola/useragent v1.0.0 h1:WRlDpXyxHDNfvZaPEut5Biveq86Ze4o4EMffyMxmH5
github.com/mssola/useragent v1.0.0/go.mod h1:hz9Cqz4RXusgg1EdI4Al0INR62kP7aPSRNHnpU+b85Y=
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/nats-io/nats.go v1.34.0/go.mod h1:Ubdu4Nh9exXdSz0RVWRFBbRfrbSxOYd26oF0wkWclB8=
github.com/nats-io/nkeys v0.4.7/go.mod h1:kqXRgRDPlGy7nGaEDMuYzmiJCIAAWDK0IMBtDmGD0nc=
github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c=
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
@@ -207,6 +259,7 @@ github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+W
github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU=
github.com/onsi/ginkgo/v2 v2.1.6/go.mod h1:MEH45j8TBi6u9BMogfbp0stKC5cdGjumZj5Y7AG4VIk=
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
@@ -253,6 +306,7 @@ github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzG
github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M=
github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA=
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/sagikazarmark/crypt v0.19.0/go.mod h1:c6vimRziqqERhtSe0MhIvzE1w54FrCHtrXb5NH/ja78=
github.com/sagikazarmark/locafero v0.6.0 h1:ON7AQg37yzcRPU69mt7gwhFEBwxI6P9T4Qu3N51bwOk=
github.com/sagikazarmark/locafero v0.6.0/go.mod h1:77OmuIc6VTraTXKXIs/uvUxKGUXjE1GbemJYHqdNjX0=
github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE=
@@ -265,6 +319,7 @@ github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFt
github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ=
github.com/shoenig/test v0.6.4 h1:kVTaSd7WLz5WZ2IaoM0RSzRsUD+m8wRR+5qvntpn4LU=
github.com/shoenig/test v0.6.4/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k=
github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
@@ -319,10 +374,12 @@ github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2
github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE=
github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
github.com/urfave/cli/v2 v2.1.1/go.mod h1:SE9GqnLQmjVa0iPEY0f1w3ygNIYcIJ0OKPMoW2caLfQ=
github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI=
github.com/vishvananda/netlink v1.1.0 h1:1iyaYNBLmP6L0220aDnYQpo1QEV4t4hJ+xEEhhJH8j0=
github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE=
github.com/vishvananda/netns v0.0.0-20211101163701-50045581ed74 h1:gga7acRE695APm9hlsSMoOoE65U4/TcqNj90mc69Rlg=
github.com/vishvananda/netns v0.0.0-20211101163701-50045581ed74/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0=
github.com/xhit/go-str2duration/v2 v2.1.0/go.mod h1:ohY8p+0f07DiV6Em5LKB0s2YpLtXVyJfNt1+BlmyAsU=
github.com/xuri/efp v0.0.0-20240408161823-9ad904a10d6d h1:llb0neMWDQe87IzJLS4Ci7psK/lVsjIS2otl+1WyRyY=
github.com/xuri/efp v0.0.0-20240408161823-9ad904a10d6d/go.mod h1:ybY/Jr0T0GTCnYjKqmdwxyxn2BQf2RcQIIvex5QldPI=
github.com/xuri/excelize/v2 v2.9.0 h1:1tgOaEq92IOEumR1/JfYS/eR0KHOCsRv/rYXXh6YJQE=
@@ -337,8 +394,21 @@ github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5t
github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0=
github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0=
go.etcd.io/etcd/api/v3 v3.5.12/go.mod h1:Ot+o0SWSyT6uHhA56al1oCED0JImsRiU9Dc26+C2a+4=
go.etcd.io/etcd/client/pkg/v3 v3.5.12/go.mod h1:seTzl2d9APP8R5Y2hFL3NVlD6qC/dOT+3kvrqPyTas4=
go.etcd.io/etcd/client/v2 v2.305.12/go.mod h1:aQ/yhsxMu+Oht1FOupSr60oBvcS9cKXHrzBpDsPTf9E=
go.etcd.io/etcd/client/v3 v3.5.12/go.mod h1:tSbBCakoWmmddL+BKVAJHa9km+O/E+bumDe9mSbPiqw=
go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0=
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw=
go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo=
go.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco=
go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU=
go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw=
golang.org/x/arch v0.9.0 h1:ub9TgUInamJ8mrZIGlBG6/4TqWeMszd4N8lNorbrr6k=
golang.org/x/arch v0.9.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
@@ -386,6 +456,7 @@ golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=
golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE=
golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I=
golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
golang.org/x/oauth2 v0.21.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -430,6 +501,7 @@ golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU=
golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE=
golang.org/x/telemetry v0.0.0-20240521205824-bda55230c457/go.mod h1:pRgIJT+bRLFKnoM1ldnzKoxTIn14Yxz928LQRYYgIN0=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
@@ -472,6 +544,13 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8=
google.golang.org/api v0.171.0/go.mod h1:Hnq5AHm4OTMt2BUVjael2CWZFD6vksJdWCWiUAmjC9o=
google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds=
google.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9/go.mod h1:mqHbVIp48Muh7Ywss/AD6I5kNVKZMmAa/QEW58Gxp2s=
google.golang.org/genproto/googleapis/api v0.0.0-20240311132316-a219d84964c2/go.mod h1:O1cOfN1Cy6QEYr7VxtjOyP5AdAuR0aJ/MYZaaof623Y=
google.golang.org/genproto/googleapis/rpc v0.0.0-20240314234333-6e1732d8331c/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY=
google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
@@ -496,6 +575,8 @@ gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
@@ -526,6 +607,8 @@ modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw
modernc.org/token v1.0.1 h1:A3qvTqOwexpfZZeyI0FeGPDlSWX5pjZu9hF4lU+EKWg=
modernc.org/token v1.0.1/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM=
nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50=
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
xorm.io/builder v0.3.13 h1:a3jmiVVL19psGeXx8GIurTp7p0IIgqeDmwhcR6BAOAo=
xorm.io/builder v0.3.13/go.mod h1:aUW0S9eb9VCaPohFCH3j7czOx1PMW3i1HrSzbLYGBSE=
xorm.io/xorm v1.3.9 h1:TUovzS0ko+IQ1XnNLfs5dqK1cJl1H5uHpWbWqAQ04nU=

View File

@@ -0,0 +1,39 @@
package config
import (
"os"
"gopkg.in/yaml.v2"
)
type DerivedRule struct {
ParentCode int `yaml:"parentCode"`
ChildCode int `yaml:"childCode"`
}
type RelatedRule struct {
Codes []int `yaml:"codes"`
NeType string `yaml:"neType"`
TimeWindow int `yaml:"timeWindow"`
}
type AlarmRelationRules struct {
Derived []DerivedRule `yaml:"derived"`
Related []RelatedRule `yaml:"related"`
}
var RelationRules AlarmRelationRules
func LoadAlarmRelationRules(path string) error {
data, err := os.ReadFile(path)
if err != nil {
return err
}
return yaml.Unmarshal(data, &RelationRules)
}
func LoadNbiRelationRulesConfig(path string) error {
data, err := os.ReadFile(path)
if err != nil {
return err
}
return yaml.Unmarshal(data, &RelationRules)
}

View File

@@ -126,6 +126,8 @@ type YamlConfig struct {
Enabled bool `yaml:"enabled"`
File string `yaml:"file"`
} `yaml:"testConfig"`
NbiConfig NbiConfig `yaml:"nbiConfig"`
}
type RestParam struct {
@@ -180,7 +182,23 @@ type AlarmConfig struct {
SignName string `yaml:"signName"`
TemplateCode string `yaml:"templateCode"`
} `yaml:"smsForward"`
SMProxy string `yaml:"smProxy"`
SMProxy string `yaml:"smProxy"`
RelatedRules struct {
Enabled bool `yaml:"enabled"`
File string `yaml:"file"`
} `yaml:"relatedRules"`
}
type NbiConfig struct {
Enabled bool `yaml:"enabled"`
PmConfig struct {
Enabled bool `yaml:"enabled"`
File string `yaml:"file"`
} `yaml:"pmConfig"`
RelationRules struct {
Enabled bool `yaml:"enabled"`
File string `yaml:"file"`
} `yaml:"relationRules"`
}
type MMLParam struct {
@@ -271,6 +289,20 @@ func ReadConfig(configFile string) {
yamlConfig = YamlConfigInfo.ConfigLines
ReadOriginalConfig(configFile)
// load alarm relation rules
if yamlConfig.Alarm.RelatedRules.Enabled {
LoadAlarmRelationRules(yamlConfig.Alarm.RelatedRules.File)
}
if yamlConfig.NbiConfig.Enabled {
if yamlConfig.NbiConfig.PmConfig.Enabled {
LoadNbiPmConfig(yamlConfig.NbiConfig.PmConfig.File)
}
if yamlConfig.NbiConfig.RelationRules.Enabled {
LoadNbiRelationRulesConfig(yamlConfig.NbiConfig.RelationRules.File)
}
}
}
func ReadOriginalConfig(configFile string) {

View File

@@ -0,0 +1,28 @@
package config
import (
"os"
"gopkg.in/yaml.v2"
)
type NbiPmConfig struct {
SchemaPath string `yaml:"schemaPath"`
RandomMin int `yaml:"randomMin"`
RandomMax int `yaml:"randomMax"`
MergeMode string `yaml:"mergeMode"` // MergeModeNone/MergeModeMerge/MergeModeSchema
}
var nbiPmConfig NbiPmConfig
func GetNbiPmConfig() NbiPmConfig {
return nbiPmConfig
}
func LoadNbiPmConfig(path string) error {
data, err := os.ReadFile(path)
if err != nil {
return err
}
return yaml.Unmarshal(data, &nbiPmConfig)
}

View File

@@ -8,21 +8,19 @@ import (
"os"
"os/user"
"path/filepath"
"strings"
"syscall"
"github.com/dustin/go-humanize"
)
type FileInfo struct {
FileType string `json:"fileType"` // 文件类型
FileMode string `json:"fileMode"` // 文件的权限
LinkCount int64 `json:"linkCount"` // 硬链接数目
Owner string `json:"owner"` // 所属用户
Group string `json:"group"` // 所属组
Size string `json:"size"` // 文件的大小
ModifiedTime int64 `json:"modifiedTime"` // 最后修改时间,单位为秒
FileName string `json:"fileName"` // 文件的名称
FileType string `json:"fileType"` // file type: file/directory
FileMode string `json:"fileMode"` // file mode
LinkCount int64 `json:"linkCount"` // link count
Owner string `json:"owner"` // owner
Group string `json:"group"` // group
Size int64 `json:"size"` // size: xx byte
ModifiedTime int64 `json:"modifiedTime"` // last modified time:seconds
FilePath string `json:"filePath"` // file path
FileName string `json:"fileName"` // file name
}
func GetFileInfo(dir, suffix string) ([]FileInfo, error) {
@@ -58,15 +56,15 @@ func GetFileInfo(dir, suffix string) ([]FileInfo, error) {
if err != nil {
return err
}
humanReadableSize := humanize.Bytes(uint64(info.Size()))
fileInfo := FileInfo{
FileType: fileType,
FileMode: info.Mode().String(),
LinkCount: int64(info.Sys().(*syscall.Stat_t).Nlink),
Owner: userInfo.Username,
Group: groupInfo.Name,
Size: strings.ToUpper(humanReadableSize),
Size: info.Size(),
ModifiedTime: info.ModTime().Unix(),
FilePath: dir,
FileName: info.Name(),
}
files = append(files, fileInfo)

View File

@@ -3,7 +3,7 @@
ProjectL = omc
ProjectU = OMC
PROJECT = $(ProjectL)
VERSION = 2.2502.1
VERSION = 2.2508.2
RelDate = `date +%Y%m%d`
Release = $(RelDate)
RelVer = $(VERSION)-$(RelDate)

View File

@@ -2,7 +2,7 @@
ProcList="restagent sshsvc"
ProjectL=omc
VERSION=2.2502.1
VERSION=2.2508.2
RelDate=`date +%Y%m%d`
Release=${RelDate}
RelVer=${VERSION}-${RelDate}

View File

@@ -0,0 +1,10 @@
# alarm relation rules
derived:
- parentCode: 1001
childCode: 1002
- parentCode: 2001
childCode: 2002
related:
- codes: [3001, 3002, 3003]
neType: "AMF"
timeWindow: 60 # 秒

View File

@@ -0,0 +1,4 @@
schemaPath: ./etc/schema
randomMin: 1
randomMax: 100
mergeMode: merge # none: Merge Mode None/merge: Merge Mode Merge/schema: Merge Mode Schema

View File

@@ -20,10 +20,10 @@ pprof:
rest:
- ipv4: 0.0.0.0
ipv6:
port: 33030
port: 43030
- ipv4: 0.0.0.0
ipv6:
port: 33443
port: 43443
schema: https
clientAuthType: 0
caFile: ./etc/certs/omc-ca.crt
@@ -32,11 +32,11 @@ rest:
webServer:
enabled: true
rootDir: d:/omc.git/fe.ems.vue3/dist # front-end build dist directory
rootDir: /home/simon/omc.git/fe.ems.vue3/dist # front-end build dist directory
listen:
- addr: :80
- addr: :8080
schema: http
- addr: :443
- addr: :8443
schema: https
clientAuthType: 0
caFile: ./etc/certs/omc-ca.crt
@@ -46,8 +46,8 @@ webServer:
database:
type: mysql
user: root
password: 1000omc@kp!
host: 127.0.0.1
password: "1000omc@kp!"
host: "192.168.2.165"
port: 33066
name: omc_db
connParam: charset=utf8mb4&collation=utf8mb4_general_ci&parseTime=True&interpolateParams=True
@@ -139,7 +139,7 @@ alarm:
enable: true
emailList:
smtp: mail.smtp.com
port: 25
port: 110
user: smtpext@smtp.com
password: "1000smtp@omc!"
tlsSkipVerify: true
@@ -203,3 +203,13 @@ staticFile:
upload:
prefix: "/upload"
dir: "./upload"
nbiConfig:
enabled: true
pmConfig:
enabled: true
file: ./etc/nbi_pm.yaml
# alarm_relation_rules.yaml
relationRules:
enabled: true
file: ./etc/alarm_relation_rules.yaml

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,269 @@
[
{
"ObjectType": "PcfFunction",
"KPIs": [
{
"KPIID": "PCF.AmAssocNbrMean",
"KPIValues": [
{
"Name": "Total",
"Value": 6
}
]
},
{
"KPIID": "PCF.AmAssocNbrMax",
"KPIValues": [
{
"Name": "Total",
"Value": 10
}
]
},
{
"KPIID": "PCF.SmAssocNbrMean",
"KPIValues": [
{
"Name": "Total",
"Value": 7
}
]
},
{
"KPIID": "PCF.SmAssocNbrMax",
"KPIValues": [
{
"Name": "Total",
"Value": 11
}
]
},
{
"KPIID": "PCF.PolicyAmAssocCreateReq",
"KPIValues": [
{
"Name": "Total",
"Value": 8
}
]
},
{
"KPIID": "PCF.PolicyAmAssocCreateSucc",
"KPIValues": [
{
"Name": "Total",
"Value": 10
}
]
},
{
"KPIID": "PCF.PolicyAmAssocUpdateReq",
"KPIValues": [
{
"Name": "Total",
"Value": 7
}
]
},
{
"KPIID": "PCF.PolicyAmAssocUpdateSucc",
"KPIValues": [
{
"Name": "Total",
"Value": 0
}
]
},
{
"KPIID": "PCF.PolicyAmAssocNotifReq",
"KPIValues": [
{
"Name": "Total",
"Value": 2
}
]
},
{
"KPIID": "PCF.PolicyAmAssocNotifSucc",
"KPIValues": [
{
"Name": "Total",
"Value": 12
}
]
},
{
"KPIID": "PCF.PolicyAmAssocDeleteReq",
"KPIValues": [
{
"Name": "Total",
"Value": 11
}
]
},
{
"KPIID": "PCF.PolicyAmAssocDeleteSucc",
"KPIValues": [
{
"Name": "Total",
"Value": 2
}
]
},
{
"KPIID": "PCF.PolicySmAssocCreateReq",
"KPIValues": [
{
"Name": "Total",
"Value": 11
}
]
},
{
"KPIID": "PCF.PolicySmAssocCreateSucc",
"KPIValues": [
{
"Name": "Total",
"Value": 0
}
]
},
{
"KPIID": "PCF.PolicySmAssocCreateFail",
"KPIValues": [
{
"Name": "Total",
"Value": 11
}
]
},
{
"KPIID": "PCF.PolicySmAssocCreateFail._Cause",
"KPIValues": [
{
"Name": "Total",
"Value": 10
}
]
},
{
"KPIID": "PCF.PolicySmAssocUpdateReq",
"KPIValues": [
{
"Name": "Total",
"Value": 8
}
]
},
{
"KPIID": "PCF.PolicySmAssocUpdateSucc",
"KPIValues": [
{
"Name": "Total",
"Value": 4
}
]
},
{
"KPIID": "PCF.PolicySmAssocUpdateFail",
"KPIValues": [
{
"Name": "Total",
"Value": 9
}
]
},
{
"KPIID": "PCF.PolicySmAssocUpdateFail._Cause",
"KPIValues": [
{
"Name": "Total",
"Value": 3
}
]
},
{
"KPIID": "PCF.PolicySmAssocNotifReq",
"KPIValues": [
{
"Name": "Total",
"Value": 8
}
]
},
{
"KPIID": "PCF.PolicySmAssocNotifSucc",
"KPIValues": [
{
"Name": "Total",
"Value": 10
}
]
},
{
"KPIID": "PCF.PolicySmAssocNotifFail",
"KPIValues": [
{
"Name": "Total",
"Value": 0
}
]
},
{
"KPIID": "PCF.PolicySmAssocNotifFail._Cause",
"KPIValues": [
{
"Name": "Total",
"Value": 6
}
]
},
{
"KPIID": "PCF.PolicySmAssocDeleteReq",
"KPIValues": [
{
"Name": "Total",
"Value": 2
}
]
},
{
"KPIID": "PCF.PolicySmAssocDeleteSucc",
"KPIValues": [
{
"Name": "Total",
"Value": 2
}
]
}
]
},
{
"ObjectType": "UdrFunction",
"KPIs": [
{
"KPIID": "UDR.PcfSubNbr",
"KPIValues": [
{
"Name": "Total",
"Value": 6
}
]
}
]
},
{
"ObjectType": "ManagedElement",
"KPIs": [
{
"KPIID": "ME.MeanMeLoad",
"KPIValues": [
{
"Name": "Total",
"Value": 13
}
]
}
]
}
]

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,373 @@
[
{
"ObjectType": "UdmFunction",
"KPIs": [
{
"KPIID": "UDM.AmfUecmRegReq",
"KPIValues": [
{
"Name": "Total",
"Value": 15
}
]
},
{
"KPIID": "UDM.AmfUecmRegSucc",
"KPIValues": [
{
"Name": "Total",
"Value": 4
}
]
},
{
"KPIID": "UDM.AmfUecmRegUpdateReq",
"KPIValues": [
{
"Name": "Total",
"Value": 9
}
]
},
{
"KPIID": "UDM.AmfUecmRegUpdateSucc",
"KPIValues": [
{
"Name": "Total",
"Value": 9
}
]
},
{
"KPIID": "UDM.AmfUecmDeregReq",
"KPIValues": [
{
"Name": "Total",
"Value": 4
}
]
},
{
"KPIID": "UDM.AmfUecmDeregSucc",
"KPIValues": [
{
"Name": "Total",
"Value": 15
}
]
},
{
"KPIID": "UDM.SmfUecmRegReq",
"KPIValues": [
{
"Name": "Total",
"Value": 1
}
]
},
{
"KPIID": "UDM.SmfUecmRegSucc",
"KPIValues": [
{
"Name": "Total",
"Value": 3
}
]
},
{
"KPIID": "UDM.SmfUecmDeregReq",
"KPIValues": [
{
"Name": "Total",
"Value": 5
}
]
},
{
"KPIID": "UDM.SmfUecmDeregSucc",
"KPIValues": [
{
"Name": "Total",
"Value": 2
}
]
},
{
"KPIID": "UDM.SdmGetReq",
"KPIValues": [
{
"Name": "Total",
"Value": 16
}
]
},
{
"KPIID": "UDM.SdmGetSucc",
"KPIValues": [
{
"Name": "Total",
"Value": 14
}
]
},
{
"KPIID": "UDM.SdmNotif",
"KPIValues": [
{
"Name": "Total",
"Value": 6
}
]
},
{
"KPIID": "UDM.SdmSubscrReq",
"KPIValues": [
{
"Name": "Total",
"Value": 4
}
]
},
{
"KPIID": "UDM.SdmSubscrSucc",
"KPIValues": [
{
"Name": "Total",
"Value": 11
}
]
},
{
"KPIID": "UDM.SdmUnSubscrReq",
"KPIValues": [
{
"Name": "Total",
"Value": 10
}
]
},
{
"KPIID": "UDM.SdmUnSubscrSucc",
"KPIValues": [
{
"Name": "Total",
"Value": 14
}
]
},
{
"KPIID": "UDM.UecmDeregNotif",
"KPIValues": [
{
"Name": "Total",
"Value": 8
}
]
},
{
"KPIID": "UDM.SdmGetUserNotFound",
"KPIValues": [
{
"Name": "Total",
"Value": 7
}
]
},
{
"KPIID": "UDM.SdmGetDataNotFound",
"KPIValues": [
{
"Name": "Total",
"Value": 5
}
]
},
{
"KPIID": "UDM.AmfUecmRegUserNotFound",
"KPIValues": [
{
"Name": "Total",
"Value": 14
}
]
},
{
"KPIID": "UDM.AmfUecmRegUnknownSub",
"KPIValues": [
{
"Name": "Total",
"Value": 2
}
]
},
{
"KPIID": "UDM.AmfUecmRegNoPsSub",
"KPIValues": [
{
"Name": "Total",
"Value": 3
}
]
},
{
"KPIID": "UDM.AmfUecmRegRoamNotAllowed",
"KPIValues": [
{
"Name": "Total",
"Value": 10
}
]
},
{
"KPIID": "UDM.AmfUecmRegRatNotAllowed",
"KPIValues": [
{
"Name": "Total",
"Value": 3
}
]
},
{
"KPIID": "UDM.AmfUecmRegContextNotFound",
"KPIValues": [
{
"Name": "Total",
"Value": 3
}
]
},
{
"KPIID": "UDM.AmfUecmRegReAuth",
"KPIValues": [
{
"Name": "Total",
"Value": 4
}
]
},
{
"KPIID": "UDM.SmfUecmRegUserNotFound",
"KPIValues": [
{
"Name": "Total",
"Value": 15
}
]
},
{
"KPIID": "UDM.SmfUecmRegUnknownSub",
"KPIValues": [
{
"Name": "Total",
"Value": 13
}
]
},
{
"KPIID": "UDM.SmfUecmRegRoamNotAllowed",
"KPIValues": [
{
"Name": "Total",
"Value": 6
}
]
},
{
"KPIID": "UDM.SmfUecmRegDnnNotAllowed",
"KPIValues": [
{
"Name": "Total",
"Value": 6
}
]
}
]
},
{
"ObjectType": "UdrFunction",
"KPIs": [
{
"KPIID": "UDR.5gSupi",
"KPIValues": [
{
"Name": "Total",
"Value": 10
}
]
},
{
"KPIID": "UDR.5gSub",
"KPIValues": [
{
"Name": "Total",
"Value": 14
}
]
},
{
"KPIID": "UDR.5gActSub",
"KPIValues": [
{
"Name": "Total",
"Value": 16
}
]
}
]
},
{
"ObjectType": "AusfFunction",
"KPIs": [
{
"KPIID": "Ausf.UeAuthReq",
"KPIValues": [
{
"Name": "Total",
"Value": 0
}
]
},
{
"KPIID": "Ausf.UeAuthAnsSucc",
"KPIValues": [
{
"Name": "Total",
"Value": 0
}
]
},
{
"KPIID": "Ausf.UeAuthAnsUserNotFound",
"KPIValues": [
{
"Name": "Total",
"Value": 4
}
]
},
{
"KPIID": "Ausf.UeAuthAnsContextNotFound",
"KPIValues": [
{
"Name": "Total",
"Value": 0
}
]
}
]
},
{
"ObjectType": "ManagedElement",
"KPIs": [
{
"KPIID": "ME.MeanMeLoad",
"KPIValues": [
{
"Name": "Total",
"Value": 11
}
]
}
]
}
]

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,7 @@
# Makefile for rest agent project
PROJECT = OMC
VERSION = 2.2502.1
VERSION = 2.2508.2
PLATFORM = amd64
ARMPLATFORM = aarch64
BUILDDIR = ../../build

View File

@@ -20,6 +20,7 @@ import (
"be.ems/features/fm"
"be.ems/features/lm"
"be.ems/features/mml"
"be.ems/features/nbi/redisqueue"
"be.ems/features/pm"
featuresCfg "be.ems/lib/config"
"be.ems/lib/dborm"
@@ -209,6 +210,9 @@ func loadFeatures(app *gin.Engine) {
mml.InitMML()
// 初始化Redis Queue连接池
redisqueue.InitRedisQueue()
// 将 mux.Router 注册到 gin.Engine
// 默认路由组

View File

@@ -5,9 +5,9 @@ import (
"be.ems/src/framework/config"
"be.ems/src/framework/cron"
"be.ems/src/framework/datasource"
"be.ems/src/framework/database/db"
"be.ems/src/framework/database/redis"
"be.ems/src/framework/logger"
"be.ems/src/framework/redis"
)
//go:embed config/*.yaml
@@ -23,7 +23,7 @@ func ConfigurationInit() {
// 初始程序日志
logger.InitLogger()
// 连接数据库实例
datasource.Connect()
db.Connect()
// 连接Redis实例
redis.Connect()
// 启动调度任务实例
@@ -37,7 +37,7 @@ func ConfigurationClose() {
// 关闭Redis实例
redis.Close()
// 关闭数据库实例
datasource.Close()
db.Close()
// 关闭程序日志
logger.Close()
}

View File

@@ -0,0 +1,9 @@
package constants
// 告警 alarmCode 常量
const (
// ALARM_STATE_CHECK 告警-状态检查
ALARM_STATE_CHECK = 10000
// ALARM_EVENT_REBOOT 事件-网元重启
ALARM_EVENT_REBOOT = 9000
)

View File

@@ -0,0 +1,25 @@
package constants
// 缓存的key常量
const (
// CACHE_LOGIN_TOKEN 登录用户
CACHE_LOGIN_TOKEN = "login_tokens"
// CACHE_CAPTCHA_CODE 验证码
CACHE_CAPTCHA_CODE = "captcha_codes"
// CACHE_SYS_CONFIG 参数管理
CACHE_SYS_CONFIG = "sys_config"
// CACHE_SYS_DICT 字典管理
CACHE_SYS_DICT = "sys_dict"
// CACHE_REPEAT_SUBMIT 防重提交
CACHE_REPEAT_SUBMIT = "repeat_submit"
// CACHE_RATE_LIMIT 限流
CACHE_RATE_LIMIT = "rate_limit"
// CACHE_PWD_ERR_COUNT 登录账户密码错误次数
CACHE_PWD_ERR_COUNT = "pwd_err_count"
// CACHE_I18N 国际化语言管理
CACHE_I18N = "i18n"
// CACHE_NE_INFO 网元信息管理
CACHE_NE_INFO = "ne_info"
// CACHE_NE_DATA 网元数据管理
CACHE_NE_DATA = "ne_data"
)

View File

@@ -0,0 +1,11 @@
package constants
// 验证码常量信息
const (
// CAPTCHA_EXPIRATION 验证码有效期,单位秒
CAPTCHA_EXPIRATION = 2 * 60
// CAPTCHA_TYPE_CHAR 验证码类型-数值计算
CAPTCHA_TYPE_CHAR = "char"
// CAPTCHA_TYPE_MATH 验证码类型-字符验证
CAPTCHA_TYPE_MATH = "math"
)

View File

@@ -0,0 +1,14 @@
package constants
const (
// STATUS_YES 通用状态标识-正常/成功/是
STATUS_YES = "1"
// STATUS_NO 通用状态标识-停用/失败/否
STATUS_NO = "0"
)
// CTX_LOGIN_USER 上下文信息-登录用户
const CTX_LOGIN_USER = "ctx:login_user"
// 启动-引导系统初始
const LAUNCH_BOOTLOADER = "bootloader"

View File

@@ -0,0 +1,21 @@
package constants
// 系统菜单常量信息
const (
// MENU_COMPONENT_LAYOUT_BASIC 组件布局类型-基础布局组件标识
MENU_COMPONENT_LAYOUT_BASIC = "BasicLayout"
// MENU_COMPONENT_LAYOUT_BLANK 组件布局类型-空白布局组件标识
MENU_COMPONENT_LAYOUT_BLANK = "BlankLayout"
// MENU_COMPONENT_LAYOUT_LINK 组件布局类型-内链接布局组件标识
MENU_COMPONENT_LAYOUT_LINK = "LinkLayout"
// MENU_TYPE_DIR 菜单类型-目录
MENU_TYPE_DIR = "D"
// MENU_TYPE_MENU 菜单类型-菜单
MENU_TYPE_MENU = "M"
// MENU_TYPE_BUTTON 菜单类型-按钮
MENU_TYPE_BUTTON = "B"
// MENU_PATH_INLINE 菜单内嵌地址标识-带/前缀
MENU_PATH_INLINE = "/inline"
)

View File

@@ -0,0 +1,24 @@
package constants
// 系统角色数据范围常量
const (
// ROLE_SCOPE_ALL 全部数据权限
ROLE_SCOPE_ALL = "1"
// ROLE_SCOPE_CUSTOM 自定数据权限
ROLE_SCOPE_CUSTOM = "2"
// ROLE_SCOPE_DEPT 部门数据权限
ROLE_SCOPE_DEPT = "3"
// ROLE_SCOPE_DEPT_CHILD 部门及以下数据权限
ROLE_SCOPE_DEPT_CHILD = "4"
// ROLE_SCOPE_SELF 仅本人数据权限
ROLE_SCOPE_SELF = "5"
)
// ROLE_SCOPE_DATA 系统角色数据范围映射
var ROLE_SCOPE_DATA = map[string]string{
ROLE_SCOPE_ALL: "全部数据权限",
ROLE_SCOPE_CUSTOM: "自定数据权限",
ROLE_SCOPE_DEPT: "部门数据权限",
ROLE_SCOPE_DEPT_CHILD: "部门及以下数据权限",
ROLE_SCOPE_SELF: "仅本人数据权限",
}

View File

@@ -0,0 +1,12 @@
package constants
// 系统常量信息
// SYS_ROLE_SYSTEM_ID 系统管理员-系统指定角色ID
const SYS_ROLE_SYSTEM_ID = 1
// SYS_ROLE_SYSTEM_KEY 系统管理员-系统指定角色KEY
const SYS_ROLE_SYSTEM_KEY = "system"
// SYS_PERMISSION_SYSTEM 系统管理员-系统指定权限
const SYS_PERMISSION_SYSTEM = "*:*:*"

View File

@@ -0,0 +1,24 @@
package constants
// 令牌常量信息
// HEADER_PREFIX 令牌-请求头标识前缀
const HEADER_PREFIX = "Bearer "
// HEADER_KEY 令牌-请求头标识
const HEADER_KEY = "Authorization"
// JWT_UUID 令牌-JWT唯一标识字段
const JWT_UUID = "uuid"
// JWT_USER_ID 令牌-JWT标识用户主键字段
const JWT_USER_ID = "user_id"
// JWT_USER_NAME 令牌-JWT标识用户登录账号字段
const JWT_USER_NAME = "user_name"
// NMS北向使用-数据响应字段和请求头授权
const ACCESS_TOKEN = "accessToken"
// WS请求使用-数据响应字段和请求头授权
const ACCESS_TOKEN_QUERY = "access_token"

View File

@@ -0,0 +1,36 @@
package constants
// 文件上传-子路径类型常量
const (
// UPLOAD_DEFAULT 默认
UPLOAD_DEFAULT = "default"
// UPLOAD_AVATAR 头像
UPLOAD_AVATAR = "avatar"
// UPLOAD_IMPORT 导入
UPLOAD_IMPORT = "import"
// UPLOAD_EXPORT 导出
UPLOAD_EXPORT = "export"
// UPLOAD_COMMON 通用上传
UPLOAD_COMMON = "common"
// UPLOAD_DOWNLOAD 下载
UPLOAD_DOWNLOAD = "download"
// UPLOAD_CHUNK 切片
UPLOAD_CHUNK = "chunk"
// UPLOAD_SOFTWARE 软件包
UPLOAD_SOFTWARE = "software"
// UPLOAD_LICENSE 授权文件
UPLOAD_LICENSE = "license"
)
// UPLOAD_SUB_PATH 子路径类型映射
var UPLOAD_SUB_PATH = map[string]string{
UPLOAD_DEFAULT: "默认",
UPLOAD_AVATAR: "头像",
UPLOAD_IMPORT: "导入",
UPLOAD_EXPORT: "导出",
UPLOAD_COMMON: "通用上传",
UPLOAD_DOWNLOAD: "下载",
UPLOAD_CHUNK: "切片",
UPLOAD_SOFTWARE: "软件包",
UPLOAD_LICENSE: "授权文件",
}

View File

@@ -0,0 +1,207 @@
package db
import (
"fmt"
"log"
"os"
"regexp"
"time"
"gorm.io/driver/mysql"
"gorm.io/gorm"
gormLog "gorm.io/gorm/logger"
"be.ems/src/framework/config"
"be.ems/src/framework/logger"
"be.ems/src/framework/utils/parse"
)
// 数据库连接实例
var dbMap = make(map[string]*gorm.DB)
type dialectInfo struct {
dialectic gorm.Dialector
logging bool
}
// 载入数据库连接
func loadDialect() map[string]dialectInfo {
dialects := make(map[string]dialectInfo)
// 读取数据源配置
datasource := config.Get("gorm.datasource").(map[string]any)
for key, value := range datasource {
item := value.(map[string]any)
// 数据库类型对应的数据库连接
switch item["type"] {
case "mysql":
dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local",
item["username"],
item["password"],
item["host"],
item["port"],
item["database"],
)
dialects[key] = dialectInfo{
dialectic: mysql.Open(dsn),
logging: parse.Boolean(item["logging"]),
}
default:
logger.Warnf("%s: %v\n Not Load DB Config Type", key, item)
}
}
return dialects
}
// 载入连接日志配置
func loadLogger() gormLog.Interface {
newLogger := gormLog.New(
log.New(os.Stdout, "[GORM] ", log.LstdFlags), // 将日志输出到控制台
gormLog.Config{
SlowThreshold: time.Second, // Slow SQL 阈值
LogLevel: gormLog.Info, // 日志级别 Silent不输出任何日志
ParameterizedQueries: false, // 参数化查询SQL 用实际值带入?的执行语句
Colorful: false, // 彩色日志输出
},
)
return newLogger
}
// Connect 连接数据库实例
func Connect() {
// 遍历进行连接数据库实例
for key, info := range loadDialect() {
opts := &gorm.Config{
Logger: gormLog.Discard,
}
// 是否需要日志输出
if info.logging {
opts.Logger = loadLogger()
}
// 创建连接
db, err := gorm.Open(info.dialectic, opts)
if err != nil {
logger.Errorf("failed error db connect: %s", err)
continue
}
// 获取底层 SQL 数据库连接
sqlDB, err := db.DB()
if err != nil {
logger.Fatalf("failed error underlying SQL database: %v", err)
}
// 测试数据库连接
err = sqlDB.Ping()
if err != nil {
logger.Fatalf("failed error ping database: %v", err)
}
// SetMaxIdleConns 用于设置连接池中空闲连接的最大数量。
sqlDB.SetMaxIdleConns(10)
// SetMaxOpenConns 设置打开数据库连接的最大数量。
sqlDB.SetMaxOpenConns(100)
// SetConnMaxLifetime 设置了连接可复用的最大时间。
sqlDB.SetConnMaxLifetime(time.Hour)
logger.Infof("database %s connection is successful.", key)
dbMap[key] = db
}
}
// Close 关闭数据库实例
func Close() {
for _, db := range dbMap {
sqlDB, err := db.DB()
if err != nil {
continue
}
if err := sqlDB.Close(); err != nil {
logger.Errorf("fatal error db close: %s", err)
}
}
}
// DB 获取数据源
//
// source-数据源
func DB(source string) *gorm.DB {
// 不指定时获取默认实例
if source == "" {
source = config.Get("gorm.defaultDataSourceName").(string)
}
db := dbMap[source]
if db == nil {
logger.Errorf("not database source: %s", source)
return nil
}
return db
}
// Names 获取数据源名称列表
func Names() []string {
var names []string
for key := range dbMap {
names = append(names, key)
}
return names
}
// RawDB 原生语句查询
//
// source-数据源
// sql-预编译的SQL语句
// parameters-预编译的SQL语句参数
func RawDB(source string, sql string, parameters []any) ([]map[string]any, error) {
var rows []map[string]any
// 数据源
db := DB(source)
if db == nil {
return rows, fmt.Errorf("not database source")
}
// 使用正则表达式替换连续的空白字符为单个空格
fmtSql := regexp.MustCompile(`\s+`).ReplaceAllString(sql, " ")
// 查询结果
res := db.Raw(fmtSql, parameters...).Scan(&rows)
if res.Error != nil {
return nil, res.Error
}
return rows, nil
}
// ExecDB 原生语句执行
//
// source-数据源
// sql-预编译的SQL语句
// parameters-预编译的SQL语句参数
func ExecDB(source string, sql string, parameters []any) (int64, error) {
// 数据源
db := DB(source)
if db == nil {
return 0, fmt.Errorf("not database source")
}
// 使用正则表达式替换连续的空白字符为单个空格
fmtSql := regexp.MustCompile(`\s+`).ReplaceAllString(sql, " ")
// 执行结果
res := db.Exec(fmtSql, parameters...)
if res.Error != nil {
return 0, res.Error
}
return res.RowsAffected, nil
}
// PageNumSize 分页页码记录数
//
// pageNum-页码
// pageSize-记录数
func PageNumSize(pageNum, pageSize any) (int, int) {
// 记录起始索引
num := parse.Number(pageNum)
if num < 1 {
num = 1
}
// 显示记录数
size := parse.Number(pageSize)
if size < 0 {
size = 10
}
return int(num - 1), int(size)
}

View File

@@ -0,0 +1,104 @@
package db
import (
"bufio"
"log"
"os"
"path/filepath"
"strings"
"gorm.io/gorm"
"be.ems/src/framework/config"
)
// ImportSQL 导入SQL
func ImportSQL() {
sqlPath := config.Get("sqlPath").(string)
if sqlPath == "" {
return
}
sqlSource := config.Get("sqlSource").(string)
if sqlSource == "" {
sqlSource = config.Get("database.defaultDataSourceName").(string)
}
// 数据源
db := DB(sqlSource)
if db == nil {
log.Fatalln("not database source")
return
}
// 获取路径信息
fileInfo, err := os.Stat(sqlPath)
if err != nil {
log.Fatalln(err.Error())
return
}
// 处理目录或文件
if fileInfo.IsDir() {
// 处理目录
files, err := os.ReadDir(sqlPath)
if err != nil {
log.Fatalln(err.Error())
return
}
for _, file := range files {
if file.IsDir() {
continue
}
if !strings.HasSuffix(file.Name(), ".sql") {
continue
}
processSQLFile(db, filepath.Join(sqlPath, file.Name()))
}
} else {
// 处理单个文件
processSQLFile(db, sqlPath)
}
log.Println("process success")
os.Exit(0)
}
// 处理单个SQL文件的通用函数
func processSQLFile(db *gorm.DB, filePath string) {
file, err := os.Open(filePath)
if err != nil {
log.Fatalln(err.Error())
return
}
defer file.Close()
// 逐行读取 SQL 文件
scanner := bufio.NewScanner(file)
var sqlBuilder strings.Builder
for scanner.Scan() {
line := strings.TrimSpace(scanner.Text())
// 跳过注释和空行
if strings.HasPrefix(line, "--") || strings.TrimSpace(line) == "" {
continue
}
// 跳过配置语句
if strings.HasPrefix(line, "/*!") {
continue
}
sqlBuilder.WriteString(line + "\n")
// 当遇到分号时,执行 SQL 语句
if strings.HasSuffix(line, ";") {
// 执行 SQL 语句
if err := db.Exec(sqlBuilder.String()).Error; err != nil {
log.Fatalln(err.Error())
return
}
sqlBuilder.Reset()
continue
}
}
}

View File

@@ -0,0 +1,175 @@
package redis
import (
"context"
"errors"
"fmt"
"sync"
"time"
"be.ems/src/framework/logger"
"github.com/redis/go-redis/v9"
)
// 连接Redis实例
func ConnectPush(source string, rdb *redis.Client) {
if rdb == nil {
delete(rdbMap, source)
return
}
rdbMap[source] = rdb
}
// 批量获得缓存数据 [key]result
func GetHashBatch(source string, keys []string) (map[string]map[string]string, error) {
result := make(map[string]map[string]string, 0)
if len(keys) == 0 {
return result, fmt.Errorf("not keys")
}
// 数据源
rdb := RDB(source)
if rdb == nil {
return result, fmt.Errorf("redis not client")
}
// 创建一个有限的并发控制信号通道
sem := make(chan struct{}, 10)
var wg sync.WaitGroup
var mt sync.Mutex
batchSize := 1000
total := len(keys)
if total < batchSize {
batchSize = total
}
for i := 0; i < total; i += batchSize {
wg.Add(1)
go func(start int) {
ctx := context.Background()
// 并发控制,限制同时执行的 Goroutine 数量
sem <- struct{}{}
defer func() {
<-sem
ctx.Done()
wg.Done()
}()
// 检查索引是否越界
end := start + batchSize
if end > total {
end = total
}
pipe := rdb.Pipeline()
for _, key := range keys[start:end] {
pipe.HGetAll(ctx, key)
}
cmds, err := pipe.Exec(ctx)
if err != nil {
logger.Errorf("Failed to get hash batch exec err: %v", err)
return
}
// 将结果添加到 result map 并发访问
mt.Lock()
defer mt.Unlock()
// 处理命令结果
for _, cmd := range cmds {
if cmd.Err() != nil {
logger.Errorf("Failed to get hash batch cmds err: %v", cmd.Err())
continue
}
// 将结果转换为 *redis.StringStringMapCmd 类型
rcmd, ok := cmd.(*redis.MapStringStringCmd)
if !ok {
logger.Errorf("Failed to get hash batch type err: %v", cmd.Err())
continue
}
key := "-"
args := rcmd.Args()
if len(args) > 0 {
key = fmt.Sprint(args[1])
}
result[key] = rcmd.Val()
}
}(i)
}
wg.Wait()
return result, nil
}
// GetHash 获得缓存数据
func GetHash(source, key, field string) (string, error) {
// 数据源
rdb := RDB(source)
if rdb == nil {
return "", fmt.Errorf("redis not client")
}
ctx := context.Background()
v, err := rdb.HGet(ctx, key, field).Result()
if errors.Is(err, redis.Nil) {
return "", fmt.Errorf("no key field")
}
if err != nil {
return "", err
}
return v, nil
}
// SetHash 设置缓存数据
func SetHash(source, key string, value map[string]any) error {
// 数据源
rdb := RDB(source)
if rdb == nil {
return fmt.Errorf("redis not client")
}
ctx := context.Background()
err := rdb.HSet(ctx, key, value).Err()
if err != nil {
logger.Errorf("redis HSet err %v", err)
return err
}
return nil
}
// IncrBy 累加统计数据
func IncrBy(source, key, field string, value int64) error {
// 数据源
rdb := RDB(source)
if rdb == nil {
return fmt.Errorf("redis not client")
}
// 使用HINCRBY命令进行累加统计
ctx := context.Background()
err := rdb.HIncrBy(ctx, key, field, value).Err()
if err != nil {
logger.Errorf("redis HIncrBy err %v", err)
return err
}
return nil
}
// Expire 过期时间设置
func Expire(source, key string, expiration time.Duration) error {
// 数据源
rdb := RDB(source)
if rdb == nil {
return fmt.Errorf("redis not client")
}
// 过期时间设置
ctx := context.Background()
err := rdb.Expire(ctx, key, expiration).Err()
if err != nil {
logger.Errorf("redis HIncrBy err %v", err)
return err
}
return nil
}

View File

@@ -0,0 +1,346 @@
package redis
import (
"context"
"errors"
"fmt"
"strings"
"time"
"github.com/redis/go-redis/v9"
"be.ems/src/framework/config"
"be.ems/src/framework/logger"
)
// Redis连接实例
var rdbMap = make(map[string]*redis.Client)
// Connect 连接Redis实例
func Connect() {
ctx := context.Background()
// 读取数据源配置
datasource := config.Get("redis.dataSource").(map[string]any)
for k, v := range datasource {
client := v.(map[string]any)
// 创建连接
address := fmt.Sprintf("%s:%d", client["host"], client["port"])
rdb := redis.NewClient(&redis.Options{
Addr: address,
Password: client["password"].(string),
DB: client["db"].(int),
})
// 测试数据库连接
pong, err := rdb.Ping(ctx).Result()
if err != nil {
logger.Fatalf("failed error redis connect: %s is %v", k, err)
}
logger.Infof("redis %s %d %s connection is successful.", k, client["db"].(int), pong)
rdbMap[k] = rdb
}
}
// Close 关闭Redis实例
func Close() {
for _, rdb := range rdbMap {
if err := rdb.Close(); err != nil {
logger.Errorf("redis db close: %s", err)
}
}
}
// RDB 获取实例
func RDB(source string) *redis.Client {
// 不指定时获取默认实例
if source == "" {
source = config.Get("redis.defaultDataSourceName").(string)
}
return rdbMap[source]
}
// Info 获取redis服务信息
func Info(source string) map[string]map[string]string {
infoObj := make(map[string]map[string]string)
// 数据源
rdb := RDB(source)
if rdb == nil {
return infoObj
}
ctx := context.Background()
info, err := rdb.Info(ctx).Result()
if err != nil {
return infoObj
}
lines := strings.Split(info, "\r\n")
label := ""
for _, line := range lines {
if strings.Contains(line, "#") {
label = strings.Fields(line)[len(strings.Fields(line))-1]
label = strings.ToLower(label)
infoObj[label] = make(map[string]string)
continue
}
kvArr := strings.Split(line, ":")
if len(kvArr) >= 2 {
key := strings.TrimSpace(kvArr[0])
value := strings.TrimSpace(kvArr[len(kvArr)-1])
infoObj[label][key] = value
}
}
return infoObj
}
// KeySize 获取redis当前连接可用键Key总数信息
func KeySize(source string) int64 {
// 数据源
rdb := RDB(source)
if rdb == nil {
return 0
}
ctx := context.Background()
size, err := rdb.DBSize(ctx).Result()
if err != nil {
return 0
}
return size
}
// CommandStats 获取redis命令状态信息
func CommandStats(source string) []map[string]string {
statsObjArr := make([]map[string]string, 0)
// 数据源
rdb := RDB(source)
if rdb == nil {
return statsObjArr
}
ctx := context.Background()
commandstats, err := rdb.Info(ctx, "commandstats").Result()
if err != nil {
return statsObjArr
}
lines := strings.Split(commandstats, "\r\n")
for _, line := range lines {
if !strings.HasPrefix(line, "cmdstat_") {
continue
}
kvArr := strings.Split(line, ":")
key := kvArr[0]
valueStr := kvArr[len(kvArr)-1]
statsObj := make(map[string]string)
statsObj["name"] = key[8:]
statsObj["value"] = valueStr[6:strings.Index(valueStr, ",usec=")]
statsObjArr = append(statsObjArr, statsObj)
}
return statsObjArr
}
// GetExpire 获取键的剩余有效时间(秒)
func GetExpire(source string, key string) (int64, error) {
// 数据源
rdb := RDB(source)
if rdb == nil {
return 0, fmt.Errorf("redis not client")
}
ctx := context.Background()
ttl, err := rdb.TTL(ctx, key).Result()
if err != nil {
return 0, err
}
return int64(ttl.Seconds()), nil
}
// GetKeys 获得缓存数据的key列表
func GetKeys(source string, pattern string) ([]string, error) {
keys := make([]string, 0)
// 数据源
rdb := RDB(source)
if rdb == nil {
return keys, fmt.Errorf("redis not client")
}
// 游标
var cursor uint64 = 0
var count int64 = 100
ctx := context.Background()
// 循环遍历获取匹配的键
for {
// 使用 SCAN 命令获取匹配的键
batchKeys, nextCursor, err := rdb.Scan(ctx, cursor, pattern, count).Result()
if err != nil {
logger.Errorf("failed to scan keys: %v", err)
return keys, err
}
cursor = nextCursor
keys = append(keys, batchKeys...)
// 当 cursor 为 0表示遍历完成
if cursor == 0 {
break
}
}
return keys, nil
}
// GetBatch 批量获得缓存数据
func GetBatch(source string, keys []string) ([]any, error) {
result := make([]any, 0)
if len(keys) == 0 {
return result, fmt.Errorf("not keys")
}
// 数据源
rdb := RDB(source)
if rdb == nil {
return result, fmt.Errorf("redis not client")
}
// 获取缓存数据
v, err := rdb.MGet(context.Background(), keys...).Result()
if err != nil || errors.Is(err, redis.Nil) {
logger.Errorf("failed to get batch data: %v", err)
return result, err
}
return v, nil
}
// Get 获得缓存数据
func Get(source, key string) (string, error) {
// 数据源
rdb := RDB(source)
if rdb == nil {
return "", fmt.Errorf("redis not client")
}
ctx := context.Background()
v, err := rdb.Get(ctx, key).Result()
if errors.Is(err, redis.Nil) {
return "", fmt.Errorf("no keys")
}
if err != nil {
return "", err
}
return v, nil
}
// Has 判断是否存在
func Has(source string, keys ...string) (int64, error) {
// 数据源
rdb := RDB(source)
if rdb == nil {
return 0, fmt.Errorf("redis not client")
}
ctx := context.Background()
exists, err := rdb.Exists(ctx, keys...).Result()
if err != nil {
return 0, err
}
return exists, nil
}
// Set 设置缓存数据
func Set(source, key string, value any) error {
// 数据源
rdb := RDB(source)
if rdb == nil {
return fmt.Errorf("redis not client")
}
ctx := context.Background()
err := rdb.Set(ctx, key, value, 0).Err()
if err != nil {
logger.Errorf("redis Set err %v", err)
return err
}
return nil
}
// SetByExpire 设置缓存数据与过期时间
func SetByExpire(source, key string, value any, expiration time.Duration) error {
// 数据源
rdb := RDB(source)
if rdb == nil {
return fmt.Errorf("redis not client")
}
ctx := context.Background()
err := rdb.Set(ctx, key, value, expiration).Err()
if err != nil {
logger.Errorf("redis SetByExpire err %v", err)
return err
}
return nil
}
// Del 删除单个
func Del(source string, key string) error {
// 数据源
rdb := RDB(source)
if rdb == nil {
return fmt.Errorf("redis not client")
}
ctx := context.Background()
if err := rdb.Del(ctx, key).Err(); err != nil {
logger.Errorf("redis Del err %v", err)
return err
}
return nil
}
// DelKeys 删除多个
func DelKeys(source string, keys []string) error {
if len(keys) == 0 {
return fmt.Errorf("no keys")
}
// 数据源
rdb := RDB(source)
if rdb == nil {
return fmt.Errorf("redis not client")
}
ctx := context.Background()
if err := rdb.Del(ctx, keys...).Err(); err != nil {
logger.Errorf("redis DelKeys err %v", err)
return err
}
return nil
}
// RateLimit 限流查询并记录
func RateLimit(source, limitKey string, time, count int64) (int64, error) {
// 数据源
rdb := RDB(source)
if rdb == nil {
return 0, fmt.Errorf("redis not client")
}
ctx := context.Background()
result, err := rateLimitCommand.Run(ctx, rdb, []string{limitKey}, time, count).Result()
if err != nil {
logger.Errorf("redis lua script err %v", err)
return 0, err
}
return result.(int64), err
}
// 声明定义限流脚本命令
var rateLimitCommand = redis.NewScript(`
local key = KEYS[1]
local time = tonumber(ARGV[1])
local count = tonumber(ARGV[2])
local current = redis.call('get', key);
if current and tonumber(current) >= count then
return tonumber(current);
end
current = redis.call('incr', key)
if tonumber(current) == 1 then
redis.call('expire', key, time)
end
return tonumber(current);`)

View File

@@ -1,127 +1,22 @@
package datasource
import (
"fmt"
"log"
"os"
"regexp"
"time"
"be.ems/src/framework/config"
"be.ems/src/framework/logger"
"be.ems/src/framework/database/db"
"be.ems/src/framework/utils/parse"
"gorm.io/driver/mysql"
"gorm.io/gorm"
gormLog "gorm.io/gorm/logger"
)
// 数据库连接实例
var dbMap = make(map[string]*gorm.DB)
type dialectInfo struct {
dialector gorm.Dialector
logging bool
}
// 载入数据库连接
func loadDialect() map[string]dialectInfo {
dialects := make(map[string]dialectInfo, 0)
// 读取数据源配置
datasource := config.Get("gorm.datasource").(map[string]any)
for key, value := range datasource {
item := value.(map[string]any)
// 数据库类型对应的数据库连接
switch item["type"] {
case "mysql":
dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local",
item["username"],
item["password"],
item["host"],
item["port"],
item["database"],
)
dialects[key] = dialectInfo{
dialector: mysql.Open(dsn),
logging: item["logging"].(bool),
}
default:
logger.Fatalf("%s: %v\n Not Load DB Config Type", key, item)
}
}
return dialects
}
// 载入连接日志配置
func loadLogger() gormLog.Interface {
newLogger := gormLog.New(
log.New(os.Stdout, "[GORM] ", log.LstdFlags), // 将日志输出到控制台
gormLog.Config{
SlowThreshold: time.Second, // Slow SQL 阈值
LogLevel: gormLog.Info, // 日志级别 Silent不输出任何日志
ParameterizedQueries: false, // 参数化查询SQL 用实际值带入?的执行语句
Colorful: false, // 彩色日志输出
},
)
return newLogger
}
// 连接数据库实例
func Connect() {
// 遍历进行连接数据库实例
for key, info := range loadDialect() {
opts := &gorm.Config{}
// 是否需要日志输出
if info.logging {
opts.Logger = loadLogger()
}
// 创建连接
db, err := gorm.Open(info.dialector, opts)
if err != nil {
logger.Fatalf("failed error db connect: %s", err)
}
// 获取底层 SQL 数据库连接
sqlDB, err := db.DB()
if err != nil {
logger.Fatalf("failed error underlying SQL database: %v", err)
}
// 测试数据库连接
err = sqlDB.Ping()
if err != nil {
logger.Fatalf("failed error ping database: %v", err)
}
logger.Infof("database %s connection is successful.", key)
dbMap[key] = db
}
}
// 关闭数据库实例
func Close() {
for _, db := range dbMap {
sqlDB, err := db.DB()
if err != nil {
continue
}
if err := sqlDB.Close(); err != nil {
logger.Errorf("fatal error db close: %s", err)
}
}
}
// 获取默认数据源
func DefaultDB() *gorm.DB {
source := config.Get("gorm.defaultDataSourceName").(string)
return dbMap[source]
return db.DB("")
}
// 获取数据源
func DB(source string) *gorm.DB {
if source == "" {
source = config.Get("gorm.defaultDataSourceName").(string)
}
return dbMap[source]
return db.DB(source)
}
// RawDB 原生查询语句

View File

@@ -6,8 +6,8 @@ import (
"time"
"be.ems/src/framework/constants/cachekey"
"be.ems/src/framework/database/redis"
"be.ems/src/framework/i18n"
"be.ems/src/framework/redis"
"be.ems/src/framework/utils/ctx"
"be.ems/src/framework/utils/ip2region"
"be.ems/src/framework/vo/result"

View File

@@ -6,8 +6,8 @@ import (
"time"
"be.ems/src/framework/constants/cachekey"
"be.ems/src/framework/database/redis"
"be.ems/src/framework/logger"
"be.ems/src/framework/redis"
"be.ems/src/framework/utils/ctx"
"be.ems/src/framework/utils/ip2region"
"be.ems/src/framework/vo/result"

View File

@@ -1,442 +0,0 @@
package redis
import (
"context"
"fmt"
"strings"
"sync"
"time"
"be.ems/src/framework/config"
"be.ems/src/framework/logger"
"github.com/redis/go-redis/v9"
)
// Redis连接实例
var rdbMap = make(map[string]*redis.Client)
// 声明定义限流脚本命令
var rateLimitCommand = redis.NewScript(`
local key = KEYS[1]
local time = tonumber(ARGV[1])
local count = tonumber(ARGV[2])
local current = redis.call('get', key);
if current and tonumber(current) >= count then
return tonumber(current);
end
current = redis.call('incr', key)
if tonumber(current) == 1 then
redis.call('expire', key, time)
end
return tonumber(current);`)
// 连接Redis实例
func ConnectPush(source string, rdb *redis.Client) {
if rdb == nil {
delete(rdbMap, source)
return
}
rdbMap[source] = rdb
}
// 连接Redis实例
func Connect() {
ctx := context.Background()
// 读取数据源配置
datasource := config.Get("redis.dataSource").(map[string]any)
for k, v := range datasource {
client := v.(map[string]any)
// 创建连接
address := fmt.Sprintf("%s:%d", client["host"], client["port"])
rdb := redis.NewClient(&redis.Options{
Addr: address,
Password: client["password"].(string),
DB: client["db"].(int),
})
// 测试数据库连接
pong, err := rdb.Ping(ctx).Result()
if err != nil {
logger.Fatalf("Ping redis %s is %v", k, err)
}
logger.Infof("redis %s %s %d connection is successful.", k, pong, client["db"].(int))
rdbMap[k] = rdb
}
}
// 关闭Redis实例
func Close() {
for _, rdb := range rdbMap {
if err := rdb.Close(); err != nil {
logger.Errorf("fatal error db close: %s", err)
}
}
}
// 获取默认实例
func DefaultRDB() *redis.Client {
source := config.Get("redis.defaultDataSourceName").(string)
return rdbMap[source]
}
// 获取实例
func RDB(source string) *redis.Client {
return rdbMap[source]
}
// Info 获取redis服务信息
func Info(source string) map[string]map[string]string {
// 数据源
rdb := DefaultRDB()
if source != "" {
rdb = RDB(source)
}
ctx := context.Background()
info, err := rdb.Info(ctx).Result()
if err != nil {
return map[string]map[string]string{}
}
infoObj := make(map[string]map[string]string)
lines := strings.Split(info, "\r\n")
label := ""
for _, line := range lines {
if strings.Contains(line, "#") {
label = strings.Fields(line)[len(strings.Fields(line))-1]
label = strings.ToLower(label)
infoObj[label] = make(map[string]string)
continue
}
kvArr := strings.Split(line, ":")
if len(kvArr) >= 2 {
key := strings.TrimSpace(kvArr[0])
value := strings.TrimSpace(kvArr[len(kvArr)-1])
infoObj[label][key] = value
}
}
return infoObj
}
// KeySize 获取redis当前连接可用键Key总数信息
func KeySize(source string) int64 {
// 数据源
rdb := DefaultRDB()
if source != "" {
rdb = RDB(source)
}
ctx := context.Background()
size, err := rdb.DBSize(ctx).Result()
if err != nil {
return 0
}
return size
}
// CommandStats 获取redis命令状态信息
func CommandStats(source string) []map[string]string {
// 数据源
rdb := DefaultRDB()
if source != "" {
rdb = RDB(source)
}
ctx := context.Background()
commandstats, err := rdb.Info(ctx, "commandstats").Result()
if err != nil {
return []map[string]string{}
}
statsObjArr := make([]map[string]string, 0)
lines := strings.Split(commandstats, "\r\n")
for _, line := range lines {
if !strings.HasPrefix(line, "cmdstat_") {
continue
}
kvArr := strings.Split(line, ":")
key := kvArr[0]
valueStr := kvArr[len(kvArr)-1]
statsObj := make(map[string]string)
statsObj["name"] = key[8:]
statsObj["value"] = valueStr[6:strings.Index(valueStr, ",usec=")]
statsObjArr = append(statsObjArr, statsObj)
}
return statsObjArr
}
// 获取键的剩余有效时间(秒)
func GetExpire(source string, key string) (float64, error) {
// 数据源
rdb := DefaultRDB()
if source != "" {
rdb = RDB(source)
}
ctx := context.Background()
ttl, err := rdb.TTL(ctx, key).Result()
if err != nil {
return 0, err
}
return ttl.Seconds(), nil
}
// 获得缓存数据的key列表
func GetKeys(source string, match string) ([]string, error) {
// 数据源
rdb := DefaultRDB()
if source != "" {
rdb = RDB(source)
}
keys := make([]string, 0)
ctx := context.Background()
iter := rdb.Scan(ctx, 0, match, 1000).Iterator()
if err := iter.Err(); err != nil {
logger.Errorf("Failed to scan keys: %v", err)
return keys, err
}
for iter.Next(ctx) {
keys = append(keys, iter.Val())
}
return keys, nil
}
// 批量获得缓存数据
func GetBatch(source string, keys []string) ([]any, error) {
if len(keys) == 0 {
return []any{}, fmt.Errorf("not keys")
}
// 数据源
rdb := DefaultRDB()
if source != "" {
rdb = RDB(source)
}
// 获取缓存数据
result, err := rdb.MGet(context.Background(), keys...).Result()
if err != nil {
logger.Errorf("Failed to get batch data: %v", err)
return []any{}, err
}
return result, nil
}
// 获得缓存数据
func Get(source, key string) (string, error) {
// 数据源
rdb := DefaultRDB()
if source != "" {
rdb = RDB(source)
}
ctx := context.Background()
value, err := rdb.Get(ctx, key).Result()
if err == redis.Nil || err != nil {
return "", err
}
return value, nil
}
// 获得缓存数据Hash
func GetHash(source, key string) (map[string]string, error) {
// 数据源
rdb := DefaultRDB()
if source != "" {
rdb = RDB(source)
}
ctx := context.Background()
value, err := rdb.HGetAll(ctx, key).Result()
if err == redis.Nil || err != nil {
return map[string]string{}, err
}
return value, nil
}
// 批量获得缓存数据 [key]result
func GetHashBatch(source string, keys []string) (map[string]map[string]string, error) {
result := make(map[string]map[string]string, 0)
if len(keys) == 0 {
return result, fmt.Errorf("not keys")
}
// 数据源
rdb := DefaultRDB()
if source != "" {
rdb = RDB(source)
}
// 创建一个有限的并发控制信号通道
sem := make(chan struct{}, 10)
var wg sync.WaitGroup
var mt sync.Mutex
batchSize := 1000
total := len(keys)
if total < batchSize {
batchSize = total
}
for i := 0; i < total; i += batchSize {
wg.Add(1)
go func(start int) {
ctx := context.Background()
// 并发控制,限制同时执行的 Goroutine 数量
sem <- struct{}{}
defer func() {
<-sem
ctx.Done()
wg.Done()
}()
// 检查索引是否越界
end := start + batchSize
if end > total {
end = total
}
pipe := rdb.Pipeline()
for _, key := range keys[start:end] {
pipe.HGetAll(ctx, key)
}
cmds, err := pipe.Exec(ctx)
if err != nil {
logger.Errorf("Failed to get hash batch exec err: %v", err)
return
}
// 将结果添加到 result map 并发访问
mt.Lock()
defer mt.Unlock()
// 处理命令结果
for _, cmd := range cmds {
if cmd.Err() != nil {
logger.Errorf("Failed to get hash batch cmds err: %v", cmd.Err())
continue
}
// 将结果转换为 *redis.StringStringMapCmd 类型
rcmd, ok := cmd.(*redis.MapStringStringCmd)
if !ok {
logger.Errorf("Failed to get hash batch type err: %v", cmd.Err())
continue
}
key := "-"
args := rcmd.Args()
if len(args) > 0 {
key = fmt.Sprint(args[1])
}
result[key] = rcmd.Val()
}
}(i)
}
wg.Wait()
return result, nil
}
// 判断是否存在
func Has(source string, keys ...string) (bool, error) {
// 数据源
rdb := DefaultRDB()
if source != "" {
rdb = RDB(source)
}
ctx := context.Background()
exists, err := rdb.Exists(ctx, keys...).Result()
if err != nil {
return false, err
}
return exists >= 1, nil
}
// 设置缓存数据
func Set(source, key string, value any) (bool, error) {
// 数据源
rdb := DefaultRDB()
if source != "" {
rdb = RDB(source)
}
ctx := context.Background()
err := rdb.Set(ctx, key, value, 0).Err()
if err != nil {
logger.Errorf("redis Set err %v", err)
return false, err
}
return true, nil
}
// 设置缓存数据与过期时间
func SetByExpire(source, key string, value any, expiration time.Duration) (bool, error) {
// 数据源
rdb := DefaultRDB()
if source != "" {
rdb = RDB(source)
}
ctx := context.Background()
err := rdb.Set(ctx, key, value, expiration).Err()
if err != nil {
logger.Errorf("redis SetByExpire err %v", err)
return false, err
}
return true, nil
}
// 删除单个
func Del(source string, key string) (bool, error) {
// 数据源
rdb := DefaultRDB()
if source != "" {
rdb = RDB(source)
}
ctx := context.Background()
err := rdb.Del(ctx, key).Err()
if err != nil {
logger.Errorf("redis Del err %v", err)
return false, err
}
return true, nil
}
// 删除多个
func DelKeys(source string, keys []string) (bool, error) {
if len(keys) == 0 {
return false, fmt.Errorf("no keys")
}
// 数据源
rdb := DefaultRDB()
if source != "" {
rdb = RDB(source)
}
ctx := context.Background()
err := rdb.Del(ctx, keys...).Err()
if err != nil {
logger.Errorf("redis DelKeys err %v", err)
return false, err
}
return true, nil
}
// 限流查询并记录
func RateLimit(source, limitKey string, time, count int64) (int64, error) {
// 数据源
rdb := DefaultRDB()
if source != "" {
rdb = RDB(source)
}
ctx := context.Background()
result, err := rateLimitCommand.Run(ctx, rdb, []string{limitKey}, time, count).Result()
if err != nil {
logger.Errorf("redis RateLimit err %v", err)
return 0, err
}
return result.(int64), err
}

View File

@@ -0,0 +1,160 @@
package reqctx
import (
"fmt"
"strings"
"github.com/gin-gonic/gin"
"be.ems/src/framework/config"
"be.ems/src/framework/constants"
"be.ems/src/framework/vo"
)
// LoginUser 登录用户信息
func LoginUser(c *gin.Context) (vo.LoginUser, error) {
value, exists := c.Get(constants.CTX_LOGIN_USER)
if exists && value != nil {
return value.(vo.LoginUser), nil
}
return vo.LoginUser{}, fmt.Errorf("invalid login user information")
}
// LoginUserToUserID 登录用户信息-用户ID
func LoginUserToUserID(c *gin.Context) string {
info, err := LoginUser(c)
if err != nil {
return ""
}
return info.UserID
}
// LoginUserToUserName 登录用户信息-用户名称
func LoginUserToUserName(c *gin.Context) string {
info, err := LoginUser(c)
if err != nil {
return ""
}
return info.User.UserName
}
// LoginUserByContainRoles 登录用户信息-包含角色KEY
func LoginUserByContainRoles(c *gin.Context, target string) bool {
info, err := LoginUser(c)
if err != nil {
return false
}
if config.IsAdmin(info.UserID) {
return true
}
roles := info.User.Roles
for _, item := range roles {
if item.RoleKey == target {
return true
}
}
return false
}
// LoginUserByContainPerms 登录用户信息-包含权限标识
func LoginUserByContainPerms(c *gin.Context, target string) bool {
loginUser, err := LoginUser(c)
if err != nil {
return false
}
if config.IsAdmin(loginUser.UserID) {
return true
}
perms := loginUser.Permissions
for _, str := range perms {
if str == target {
return true
}
}
return false
}
// LoginUserToDataScopeSQL 登录用户信息-角色数据范围过滤SQL字符串
func LoginUserToDataScopeSQL(c *gin.Context, deptAlias string, userAlias string) string {
dataScopeSQL := ""
// 登录用户信息
info, err := LoginUser(c)
if err != nil {
return dataScopeSQL
}
userInfo := info.User
// 如果是系统管理员,则不过滤数据
if config.IsAdmin(userInfo.UserID) {
return dataScopeSQL
}
// 无用户角色
if len(userInfo.Roles) <= 0 {
return dataScopeSQL
}
// 记录角色权限范围定义添加过, 非自定数据权限不需要重复拼接SQL
var scopeKeys []string
var conditions []string
for _, role := range userInfo.Roles {
dataScope := role.DataScope
if constants.ROLE_SCOPE_ALL == dataScope {
break
}
if constants.ROLE_SCOPE_CUSTOM != dataScope {
hasKey := false
for _, key := range scopeKeys {
if key == dataScope {
hasKey = true
break
}
}
if hasKey {
continue
}
}
if constants.ROLE_SCOPE_CUSTOM == dataScope {
sql := fmt.Sprintf(`%s.dept_id IN
( SELECT dept_id FROM sys_role_dept WHERE role_id = %s )
AND %s.dept_id NOT IN
(
SELECT d.parent_id FROM sys_dept d
INNER JOIN sys_role_dept rd ON rd.dept_id = d.dept_id
AND rd.role_id = %s
)`, deptAlias, role.RoleID, deptAlias, role.RoleID)
conditions = append(conditions, sql)
}
if constants.ROLE_SCOPE_DEPT == dataScope {
sql := fmt.Sprintf("%s.dept_id = %s", deptAlias, userInfo.DeptID)
conditions = append(conditions, sql)
}
if constants.ROLE_SCOPE_DEPT_CHILD == dataScope {
sql := fmt.Sprintf("%s.dept_id IN ( SELECT dept_id FROM sys_dept WHERE dept_id = %s OR find_in_set(%s, ancestors ) )", deptAlias, userInfo.DeptID, userInfo.DeptID)
conditions = append(conditions, sql)
}
if constants.ROLE_SCOPE_SELF == dataScope {
if userAlias == "" {
sql := fmt.Sprintf("%s.dept_id = %s", deptAlias, userInfo.DeptID)
conditions = append(conditions, sql)
} else {
sql := fmt.Sprintf("%s.user_id = %s", userAlias, userInfo.UserID)
conditions = append(conditions, sql)
}
}
// 记录角色范围
scopeKeys = append(scopeKeys, dataScope)
}
// 构建查询条件语句
if len(conditions) > 0 {
dataScopeSQL = fmt.Sprintf(" ( %s ) ", strings.Join(conditions, " OR "))
}
return dataScopeSQL
}

View File

@@ -0,0 +1,106 @@
package reqctx
import (
"strings"
"github.com/gin-gonic/gin"
"golang.org/x/text/language"
"be.ems/src/framework/constants"
)
// QueryMap Query参数转换Map
func QueryMap(c *gin.Context) map[string]string {
queryValues := c.Request.URL.Query()
queryParams := make(map[string]string, len(queryValues))
for key, values := range queryValues {
queryParams[key] = values[0]
}
return queryParams
}
// BodyJSONMap JSON参数转换Map
func BodyJSONMap(c *gin.Context) map[string]any {
params := make(map[string]any, 0)
c.ShouldBindBodyWithJSON(&params)
return params
}
// RequestParamsMap 请求参数转换Map
func RequestParamsMap(c *gin.Context) map[string]any {
params := make(map[string]any, 0)
// json
if strings.HasPrefix(c.ContentType(), "application/json") {
c.ShouldBindBodyWithJSON(&params)
}
// 表单
formParams := c.Request.PostForm
for key, value := range formParams {
if _, ok := params[key]; !ok {
params[key] = value[0]
}
}
// 查询
queryParams := c.Request.URL.Query()
for key, value := range queryParams {
if _, ok := params[key]; !ok {
params[key] = value[0]
}
}
return params
}
// Authorization 解析请求头
func Authorization(c *gin.Context) string {
// Query请求查询
if authQuery, ok := c.GetQuery(constants.ACCESS_TOKEN); ok && authQuery != "" {
return authQuery
}
// Header请求头
if authHeader := c.GetHeader(constants.ACCESS_TOKEN); authHeader != "" {
return authHeader
}
// Query请求查询
if authQuery, ok := c.GetQuery(constants.ACCESS_TOKEN_QUERY); ok && authQuery != "" {
return authQuery
}
// Header请求头
authHeader := c.GetHeader(constants.HEADER_KEY)
if authHeader == "" {
return ""
}
// 拆分 Authorization 请求头,提取 JWT 令牌部分
arr := strings.SplitN(authHeader, constants.HEADER_PREFIX, 2)
if len(arr) < 2 {
return ""
}
return arr[1]
}
// AcceptLanguage 解析客户端接收语言 zh中文 en: 英文
func AcceptLanguage(c *gin.Context) string {
preferredLanguage := language.English
// Query请求查询
if v, ok := c.GetQuery("language"); ok && v != "" {
tags, _, _ := language.ParseAcceptLanguage(v)
if len(tags) > 0 {
preferredLanguage = tags[0]
}
}
// Header请求头
if v := c.GetHeader("Accept-Language"); v != "" {
tags, _, _ := language.ParseAcceptLanguage(v)
if len(tags) > 0 {
preferredLanguage = tags[0]
}
}
// 只取前缀
lang := preferredLanguage.String()
arr := strings.Split(lang, "-")
return arr[0]
}

Some files were not shown because too many files have changed in this diff Show More