diff --git a/.gitignore b/.gitignore index 3c63e24e..1562caa0 100644 --- a/.gitignore +++ b/.gitignore @@ -17,21 +17,11 @@ *.bak *.bak* *.exe +__debug_bin* +debug/ +*.log.* +main # Build Output -local/omc_db.sqlite +local/*.sqlite omc -restagent/restagent - -# Run temp file and dir -restagent/backup/ -restagent/log/ -restagent/upload/ -restagent/software/ -restagent/database/ -restagent/license/ - -sshsvc/sshsvc -sshsvc/mmllog/ -sshsvc/mmlhome/ -sshsvc/log/ diff --git a/.vscode/launch.json b/.vscode/launch.json index f549ed53..a75d47af 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -14,12 +14,13 @@ "args": ["--env", "local", "-c", "./local/omc.yaml"] }, { - "name": "debug sshsvc", + "name": "调试更新数据库", "type": "go", "request": "launch", "mode": "debug", - "program": "sshsvc/sshsvc.go", - "console": "integratedTerminal" - } + "program": "main.go", + "console": "integratedTerminal", + "args": ["-c", "./local/omc.yaml", "--sqlPath", "./build/database/std/upgrade", "--sqlSource", "std"] + } ] } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 432f2e04..0c1c8114 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,66 @@ # 版本发布日志 +## 2.2508.2-20250815 + +- 修复 删除认证源将关联用户信息移除,用户类型sys更新为System +- 优化 UE/CDR查询条件imsi支持模糊匹配 +- 优化 kpi接收neinfo信息局部赋值,ws控制器实例化方式 +- 优化 数据库导入执行异常错误判断忽略 +- 修复 操作日志记录信息json序列化字符串避免结构异常导致无法解析 +- 新增 第三方登录认证和管理 +- 修复 cdr/ue查询时间字段改用记录时间,传入时间解析时区UTC0导致无法正常查询 +- 修复 告警日志查询补充告警状态字段,告警状态字典值修正为枚举字符串 + +## 2.2508.1-20250808 + +- 修复 MML类型object_type初始值mml更新General,MML日志记录功能接口 +- 修复 UDM签约缺失rfsp和usagetype参数修改 +- 修复 MML命令执行回车\r\n ,特殊IMS无法输出问题 +- 修复 基站状态记录时间变更查询字段create_time +- 优化 系统用户账号简单4位长度,密码简单6位 +- 修复 更新数据库重复记录错误输出信息并跳过 +- 修复 自定义KPI计算NaN导致序列化失败 + +## 2.2507.4-20250801 + +- 修复 密码强制修改非首次登录校验去除日期判断,补充参数说明翻译信息 +- 新增 CBC预警广播功能 +- 新增 仪表盘总览替换,语音数据概览 + +## 2.2507.3-20250725 + +- 优化 减少上报数据不进行警告类型日志记录 +- 优化 自检产生的告警辅助信息字符重复追加 +- 修复 告警同步返回状态为正常,过程错误信息返回到响应 +- 更新 IMS-CDR结果码说明,告警导出表格标题编码翻译补充 +- 修复 自定义指标数据统计不处理小数,计算小于0就强制为0 +- 修复 告警级别判断成类型导致事件存储到告警中 +- 修复 网管状态信息返回nil字符修改,信息返回版本号 + +## 2.2507.2-20250718 + +- 移除 iperf安装包,features、lib和sshsvc目录 +- 移除 将配置文件中无用配置删除精简 +- 重构 接收CDR/UE接入/告警/KPI功能 +- 新增 nssf/n3iwf直连接口 +- 新增 通知模块,暂时只有邮件和smsc发送,可在OMC配置中修改参数 +- 新增 mml到工具模块 +- 新增 北向定义网元状态/配置下发接口,oam对外开放无限制接口模块 +- 修复 服务端口监听失败每5秒重试最多10次 +- 更新 OMC/CBC/UDM参数配置映射文件 +- 更新 升级数据库表结构,依赖更新并加入go-oam +- 新增 告警分组统计数量接口 +- 新增 mt版本移动过过来的三个大屏页面的系统菜单 +- 删除 移除sshsvc服务 +- 新增 北向定义网元状态/配置下发接口 +- 新增 补充缺失的自定义指标接口 + +## 2.2507.1-20250705 + +- 修复 SMSC和UDM配置在lite下无法正常显示问题 +- 更新 AMF配置缺少Gnb List Config定义,SMF配置新增GNB和远程Gy配置 +- 新增 IMS指标IDD呼入呼出,自定义指标IDD + ## 2.2506.4-20250627 - 优化 IMS-KPI隐藏掉原因值接收 diff --git a/README.md b/README.md index 2c88408e..5870d8c8 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,9 @@ | 33033/33034 | 信令跟踪上报 UDP/TCP | | 33060 | 性能分析 pprof | | 33040 | 网管测试 Api | +| 21/22/25 | SSH/FTP | +| 33066 | 网管连接 mysql | +| 6379 | 网管连接 redis | ## redis 配置文件相关 diff --git a/build/database/lite/common/mml_command.sql b/build/database/lite/common/mml_command.sql index 0a21cf1e..c87dafd8 100644 --- a/build/database/lite/common/mml_command.sql +++ b/build/database/lite/common/mml_command.sql @@ -15,14 +15,6 @@ CREATE TABLE "mml_command" ( PRIMARY KEY ("id") ); --- ---------------------------- --- Indexes structure for table mml_command --- ---------------------------- -CREATE INDEX "id" -ON "mml_command" ( - "id" ASC -); - -- ---------------------------- -- Records of mml_command -- ---------------------------- diff --git a/build/database/lite/common/mml_system.sql b/build/database/lite/common/mml_system.sql index 6aaf1aec..78d77ead 100644 --- a/build/database/lite/common/mml_system.sql +++ b/build/database/lite/common/mml_system.sql @@ -19,64 +19,64 @@ CREATE TABLE "mml_system" ( -- ---------------------------- -- Records of mml_system -- ---------------------------- -INSERT INTO "mml_system" VALUES (833, 'UPF', 'upfManagement', 'UPF Management', 'help', '', 'List UPF MML CMD', 'mml', 'null', 'Active'); -INSERT INTO "mml_system" VALUES (834, 'UPF', 'systemManagement', 'System Management', 'set', 'n3 driver', 'Set N3 Driver', 'mml', '[{"comment":"","display":"Type","filter":"","name":"type","optional":"false","type":"int"},{"comment":"","display":"IP address","filter":"","name":"ip","optional":"false","type":"string"},{"comment":"","display":"Mask","filter":"","name":"mask","optional":"false","type":"string"},{"comment":"","display":"Mac address","filter":"","name":"mac","optional":"false","type":"string"},{"comment":"","display":"PCI address","filter":"","name":"pci","optional":"false","type":"string"}]', 'Inactive'); -INSERT INTO "mml_system" VALUES (835, 'UPF', 'systemManagement', 'System Management', 'set', 'n4 ip', 'Set N4 IP Address', 'mml', '[{"comment":"","display":"IP Address","filter":"","name":"ip","optional":"false","type":"string"}]', 'Inactive'); -INSERT INTO "mml_system" VALUES (836, 'UPF', 'systemManagement', 'System Management', 'set', 'n6 driver', 'Set N6 Driver', 'mml', '[{"comment":"","display":"Type","filter":"","name":"type","optional":"false","type":"int"},{"comment":"","display":"IP address","filter":"","name":"ip","optional":"false","type":"string"},{"comment":"","display":"Mask","filter":"","name":"mask","optional":"false","type":"string"},{"comment":"","display":"Mac address","filter":"","name":"mac","optional":"false","type":"string"},{"comment":"","display":"PCI address","filter":"","name":"pci","optional":"false","type":"string"}]', 'Inactive'); -INSERT INTO "mml_system" VALUES (837, 'UPF', 'systemManagement', 'System Management', 'set', 'n9 driver', 'Set N9 Driver', 'mml', '[{"comment":"","display":"Type","filter":"","name":"type","optional":"false","type":"int"},{"comment":"","display":"IP address","filter":"","name":"ip","optional":"false","type":"string"},{"comment":"","display":"Mask","filter":"","name":"mask","optional":"false","type":"string"},{"comment":"","display":"Mac address","filter":"","name":"mac","optional":"false","type":"string"},{"comment":"","display":"PCI address","filter":"","name":"pci","optional":"false","type":"string"}]', 'Inactive'); -INSERT INTO "mml_system" VALUES (838, 'UPF', 'systemManagement', 'System Management', 'set', 'dnn', 'Set DNN', 'mml', '[{"comment":"","display":"DNN","filter":"","name":"dnn","optional":"false","type":"string"},{"comment":"","display":"IP Address","filter":"","name":"ip","optional":"false","type":"string"}]', 'Inactive'); -INSERT INTO "mml_system" VALUES (839, 'UPF', 'systemManagement', 'System Management', 'set', 'pfcp', 'Set PFCP', 'mml', '[{"comment":"","display":"Path","filter":"","name":"path","optional":"false","type":"string"},{"comment":"","display":"Local IP Address","filter":"","name":"local","optional":"false","type":"string"},{"comment":"","display":"Remote IP Address","filter":"","name":"remote","optional":"false","type":"string"}]', 'Inactive'); -INSERT INTO "mml_system" VALUES (840, 'UPF', 'systemManagement', 'System Management', 'set', 'qos', 'Set Qos', 'mml', '[{"comment":"","display":"Index","filter":"","name":"index","optional":"false","type":"string"},{"comment":"","display":"5qi","filter":"","name":"5qi","optional":"false","type":"string"},{"comment":"","display":"Priority Level","filter":"","name":"priority","optional":"false","type":"int"},{"comment":"","display":"MBR","filter":"","name":"mbr","optional":"false","type":"string"},{"comment":"","display":"GBR","filter":"","name":"gbr","optional":"false","type":"string"}]', 'Inactive'); -INSERT INTO "mml_system" VALUES (841, 'UPF', 'systemManagement', 'System Management', 'set', 'pccrule', 'Set PCC Rule', 'mml', '[{"comment":"","display":"Index","filter":"0~65535","name":"index","optional":"false","type":"int"},{"comment":"","display":"Precedence","filter":"","name":"precedence","optional":"false","type":"int"},{"comment":"","display":"QOS Index","filter":"","name":"qosindex","optional":"false","type":"int"},{"comment":"","display":"Filter Direction","filter":"{\"0\":\"NA\", \"1\":\"Uplink\", \"2\":\"Downlink\", \"3\":\"Bidirectionallink\"}","name":"direction","optional":"true","type":"int"},{"comment":"","display":"Filter","filter":"","name":"filter","optional":"true","type":"string"},{"comment":"","display":"Application ID","filter":"","name":"appid","optional":"true","type":"string"}]', 'Inactive'); -INSERT INTO "mml_system" VALUES (842, 'UPF', 'systemManagement', 'System Management', 'exec', 'shell', 'Execute Shell Command', 'mml', '[{"comment":"","display":"CMD","filter":"","name":"cmd","optional":"false","type":"string"}]', 'Inactive'); -INSERT INTO "mml_system" VALUES (843, 'UPF', 'systemManagement', 'System Management', 'reload', '', 'Reload Config', 'mml', 'null', 'Inactive'); -INSERT INTO "mml_system" VALUES (853, 'SMF', 'smfManagement', 'SMF Management', 'help', '', 'List SMF MML CMD', 'mml', 'null', 'Active'); -INSERT INTO "mml_system" VALUES (854, 'SMF', 'systemManagement', 'System Management', 'set', 'n7 server', 'Set N7 Server', 'mml', '[{"comment":"","display":"Scheme","filter":"{\"0\":\"http\", \"1\":\"https\"}","name":"scheme","optional":"false","type":"enum"},{"comment":"","display":"IP Address","filter":"0~64","name":"ip","optional":"false","type":"string"},{"comment":"","display":"Port","filter":"0~65535","name":"port","optional":"false","type":"int"}]', 'Inactive'); -INSERT INTO "mml_system" VALUES (855, 'SMF', 'systemManagement', 'System Management', 'set', 'n7 client', 'Set N7 Client', 'mml', '[{"comment":"","display":"Scheme","filter":"{\"0\":\"http\", \"1\":\"https\"}","name":"scheme","optional":"false","type":"enum"},{"comment":"","display":"IP Address","filter":"0~64","name":"ip","optional":"false","type":"string"}]', 'Inactive'); -INSERT INTO "mml_system" VALUES (856, 'SMF', 'systemManagement', 'System Management', 'set', 'n10 server', 'Set N10 Server', 'mml', '[{"comment":"","display":"Scheme","filter":"{\"0\":\"http\", \"1\":\"https\"}","name":"scheme","optional":"false","type":"enum"},{"comment":"","display":"IP Address","filter":"0~64","name":"ip","optional":"false","type":"string"},{"comment":"","display":"Port","filter":"0~65535","name":"port","optional":"false","type":"int"}]', 'Inactive'); -INSERT INTO "mml_system" VALUES (857, 'SMF', 'systemManagement', 'System Management', 'set', 'n10 client', 'Set N10 Client', 'mml', '[{"comment":"","display":"Scheme","filter":"{\"0\":\"http\", \"1\":\"https\"}","name":"scheme","optional":"false","type":"enum"},{"comment":"","display":"IP Address","filter":"0~64","name":"ip","optional":"false","type":"string"}]', 'Inactive'); -INSERT INTO "mml_system" VALUES (858, 'SMF', 'systemManagement', 'System Management', 'set', 'n11 server', 'Set N11 Server', 'mml', '[{"comment":"","display":"Scheme","filter":"{\"0\":\"http\", \"1\":\"https\"}","name":"scheme","optional":"false","type":"enum"},{"comment":"","display":"IP Address","filter":"0~64","name":"ip","optional":"false","type":"string"},{"comment":"","display":"Port","filter":"0~65535","name":"port","optional":"false","type":"int"}]', 'Inactive'); -INSERT INTO "mml_system" VALUES (859, 'SMF', 'systemManagement', 'System Management', 'set', 'n11 client', 'Set N11 Client', 'mml', '[{"comment":"","display":"Scheme","filter":"{\"0\":\"http\", \"1\":\"https\"}","name":"scheme","optional":"false","type":"enum"},{"comment":"","display":"IP Address","filter":"0~64","name":"ip","optional":"false","type":"string"}]', 'Inactive'); -INSERT INTO "mml_system" VALUES (860, 'SMF', 'systemManagement', 'System Management', 'set', 'dnn', 'Set DNN', 'mml', '[{"comment":"","display":"Index","filter":"","name":"index","optional":"false","type":"int"},{"comment":"","display":"DNN","filter":"","name":"DNN","optional":"false","type":"string"}]', 'Inactive'); -INSERT INTO "mml_system" VALUES (862, 'SMF', 'systemManagement', 'System Management', 'set', 'qos', 'Set Qos', 'mml', '[{"comment":"","display":"Index","filter":"","name":"index","optional":"false","type":"string"},{"comment":"","display":"SD","filter":"","name":"5qi","optional":"false","type":"string"},{"comment":"","display":"5qipl","filter":"","name":"5qipl","optional":"false","type":"string"},{"comment":"","display":"arppl","filter":"","name":"arppl","optional":"false","type":"string"},{"comment":"","display":"arppci","filter":"","name":"arppci","optional":"false","type":"string"},{"comment":"","display":"arppvi","filter":"","name":"arppvi","optional":"false","type":"string"},{"comment":"","display":"mfbrul","filter":"","name":"mfbrul","optional":"false","type":"string"},{"comment":"","display":"mfbrdl","filter":"","name":"mfbrdl","optional":"false","type":"string"},{"comment":"","display":"gfbrul","filter":"","name":"gfbrul","optional":"false","type":"string"},{"comment":"","display":"gfbrdl","filter":"","name":"gfbrdl","optional":"false","type":"string"}]', 'Inactive'); -INSERT INTO "mml_system" VALUES (863, 'SMF', 'systemManagement', 'System Management', 'set', 'snssai', 'Set Snssai', 'mml', '[{"comment":"","display":"Index","filter":"","name":"index","optional":"false","type":"string"},{"display":"sst-sd","filter":"","name":"sst-sd","optional":"false","type":"string"}]', 'Inactive'); -INSERT INTO "mml_system" VALUES (864, 'SMF', 'systemManagement', 'System Management', 'release', 'imsi', 'Release IMSI', 'mml', '[{"comment":"","display":"IMSI","filter":"","name":"imsi","optional":"false","type":"string"},{"display":"PDU Session Id","filter":"","name":"pduSessId","optional":"false","type":"string"}]', 'Inactive'); -INSERT INTO "mml_system" VALUES (865, 'SMF', 'systemManagement', 'System Management', 'set', 'urr', 'Set URR', 'mml', '[{"comment":"","display":"Index","filter":"","name":"index","optional":"false","type":"string"},{"comment":"","display":"Quota Volume Tatol","filter":"","name":"quotavolumetatol","optional":"false","type":"string"},{"comment":"","display":"Quota Volume UL","filter":"","name":"quotavolumeul","optional":"false","type":"string"},{"comment":"","display":"Quota Volume DL","filter":"","name":"quotavolumedl","optional":"false","type":"string"},{"comment":"","display":"Quota Time","filter":"","name":"quotatime","optional":"false","type":"string"}]', 'Inactive'); -INSERT INTO "mml_system" VALUES (866, 'SMF', 'systemManagement', 'System Management', 'set', 'dpi', 'Set DPI', 'mml', '[{"comment":"","display":"Flag","filter":"{\"0\":\"disable\", \"1\":\"enable\"}","name":"flag","optional":"false","type":"enum"},{"comment":"","display":"Max Detect Packet Number","filter":"","name":"max","optional":"false","type":"string"}]', 'Inactive'); -INSERT INTO "mml_system" VALUES (867, 'SMF', 'systemManagement', 'System Management', 'exec', 'shell', 'Execute Shell Command', 'mml', '[{"comment":"","display":"CMD","filter":"","name":"cmd","optional":"false","type":"string"}]', 'Inactive'); -INSERT INTO "mml_system" VALUES (868, 'SMF', 'systemManagement', 'System Management', 'reload', '', 'Reload Config', 'mml', 'null', 'Inactive'); -INSERT INTO "mml_system" VALUES (870, 'IMS', 'imsManagement', 'IMS Management', 'help', '', 'List IMS MML CMD', 'mml', 'null', 'Active'); -INSERT INTO "mml_system" VALUES (871, 'N3IWF', 'n3iwfManagement', 'N3IWF Management', 'help', '', 'List N3IWF MML CMD', 'mml', 'null', 'Active'); -INSERT INTO "mml_system" VALUES (872, 'NSSF', 'nssfManagement', 'NSSF Management', 'help', '', 'List NSSF MML CMD', 'mml', 'null', 'Active'); -INSERT INTO "mml_system" VALUES (873, 'NRF', 'nrfManagement', 'NRF Management', 'help', '', 'List NRF MML CMD', 'mml', 'null', 'Active'); -INSERT INTO "mml_system" VALUES (874, 'PCF', 'pcfManagement', 'PCF Management', 'help', '', 'List PCF MML CMD', 'mml', 'null', 'Active'); -INSERT INTO "mml_system" VALUES (875, 'AMF', 'subsManagement', 'Subscriber Management', 'list', 'imsi', 'List Online IMSI', 'mml', '[{"comment":"","display":"IMSI","filter":"32","name":"imsi","optional":"false","type":"string"}]', 'Inactive'); -INSERT INTO "mml_system" VALUES (876, 'AMF', 'amfManagement', 'AMF Management', 'help', '', 'List AMF MML CMD', 'mml', 'null', 'Active'); -INSERT INTO "mml_system" VALUES (877, 'AMF', 'systemManagement', 'System Management', 'set', 'n8_ip', 'Set N8 IP Address', 'mml', '[{"comment":"","display":"IP Address","filter":"0~64","name":"ip","optional":"false","type":"string"}]', 'Inactive'); -INSERT INTO "mml_system" VALUES (878, 'AMF', 'systemManagement', 'System Management', 'set', 'n11_ip', 'Set N11 IP Address', 'mml', '[{"comment":"","display":"IP Address","filter":"0~64","name":"ip","optional":"false","type":"string"}]', 'Inactive'); -INSERT INTO "mml_system" VALUES (879, 'AMF', 'systemManagement', 'System Management', 'set', 'n12_ip', 'Set N12 IP Address', 'mml', '[{"comment":"","display":"IP Address","filter":"0~64","name":"ip","optional":"false","type":"string"}]', 'Inactive'); -INSERT INTO "mml_system" VALUES (880, 'AMF', 'systemManagement', 'System Management', 'set', 'n2_ip', 'Set N2 IP Address', 'mml', '[{"comment":"","display":"IP Address","filter":"","name":"ip","optional":"false","type":"string"}]', 'Inactive'); -INSERT INTO "mml_system" VALUES (881, 'AMF', 'systemManagement', 'System Management', 'set', 'n2_port', 'Set N2 Port', 'mml', '[{"comment":"","display":"Port","filter":"0~65535","name":"port","optional":"false","type":"int"}]', 'Inactive'); -INSERT INTO "mml_system" VALUES (882, 'AMF', 'systemManagement', 'System Management', 'set', 'ntpversion', 'Set NTP Version', 'mml', '[{"comment":"","display":"Version","filter":"","name":"version","optional":"false","type":"int"}]', 'Inactive'); -INSERT INTO "mml_system" VALUES (883, 'AMF', 'systemManagement', 'System Management', 'set', 'ntpmaxdiff', 'Set NTP Max Diff', 'mml', '[{"comment":"","display":"Max Value(ms)","filter":"100~2000","name":"value","optional":"false","type":"int"}]', 'Inactive'); -INSERT INTO "mml_system" VALUES (884, 'AMF', 'systemManagement', 'System Management', 'set', 'ntpsynctimer', 'Set NTP Sync Timer', 'mml', '[{"comment":"","display":"Periods(second)","filter":"","name":"periods","optional":"false","type":"int"}]', 'Inactive'); -INSERT INTO "mml_system" VALUES (885, 'AMF', 'systemManagement', 'System Management', 'add', 'slice', 'Add Slice', 'mml', '[{"comment":"","display":"SST","filter":"","name":"sst","optional":"false","type":"string"},{"comment":"","display":"SD","filter":"","name":"sd","optional":"false","type":"string"}]', 'Inactive'); -INSERT INTO "mml_system" VALUES (886, 'AMF', 'systemManagement', 'System Management', 'deregister', 'imsi', 'Deregister IMSI', 'mml', '[{"comment":"","display":"IMSI","filter":"","name":"IMSI","optional":"false","type":"string"}]', 'Inactive'); -INSERT INTO "mml_system" VALUES (887, 'AMF', 'systemManagement', 'System Management', 'exec', 'shell', 'Execute Shell Command', 'mml', '[{"comment":"","display":"CMD","filter":"","name":"cmd","optional":"false","type":"string"}]', 'Inactive'); -INSERT INTO "mml_system" VALUES (888, 'AMF', 'systemManagement', 'System Management', 'reload', '', 'Reload Config', 'mml', 'null', 'Inactive'); -INSERT INTO "mml_system" VALUES (889, 'UDM', 'udmManagement', 'UDM Management', 'help', '', 'List UDM MML CMD', 'mml', 'null', 'Active'); -INSERT INTO "mml_system" VALUES (890, 'UDM', 'systemManagement', 'System Management', 'set', 'n8ip', 'Set N8 IP Address', 'mml', '[{"comment":"","display":"IP Address","filter":"","name":"ip","optional":"false","type":"ipv4"}]', 'Inactive'); -INSERT INTO "mml_system" VALUES (891, 'UDM', 'systemManagement', 'System Management', 'set', 'n8port', 'Set N8 Port', 'mml', '[{"comment":"","display":"Port","filter":"1~65535","name":"port","optional":"false","type":"int"}]', 'Inactive'); -INSERT INTO "mml_system" VALUES (892, 'UDM', 'systemManagement', 'System Management', 'set', 'n8scheme', 'Set N8 Scheme', 'mml', '[{"comment":"","display":"Scheme","filter":"{\"0\":\"http\", \"1\":\"https\"}","name":"scheme","optional":"false","type":"enum"}]', 'Inactive'); -INSERT INTO "mml_system" VALUES (893, 'UDM', 'systemManagement', 'System Management', 'set', 'n10ip', 'Set N10 IP Address', 'mml', '[{"comment":"","display":"IP Address","filter":"","name":"ip","optional":"false","type":"string"}]', 'Inactive'); -INSERT INTO "mml_system" VALUES (894, 'UDM', 'systemManagement', 'System Management', 'set', 'n10port', 'Set N10 Port', 'mml', '[{"comment":"","display":"Port","filter":"1~65535","name":"port","optional":"false","type":"int"}]', 'Inactive'); -INSERT INTO "mml_system" VALUES (895, 'UDM', 'systemManagement', 'System Management', 'set', 'n10scheme', 'Set N10 Scheme', 'mml', '[{"comment":"","display":"Scheme","filter":"{\"0\":\"http\", \"1\":\"https\"}","name":"scheme","optional":"false","type":"enum"}]', 'Inactive'); -INSERT INTO "mml_system" VALUES (896, 'UDM', 'systemManagement', 'System Management', 'exec', 'shell', 'Execute Shell Command', 'mml', '[{"comment":"","display":"CMD","filter":"","name":"cmd","optional":"false","type":"string"}]', 'Inactive'); -INSERT INTO "mml_system" VALUES (897, 'UDM', 'systemManagement', 'System Management', 'reload', '', 'Reload Config', 'mml', 'null', 'Inactive'); -INSERT INTO "mml_system" VALUES (898, 'AUSF', 'ausfManagement', 'AUSF Management', 'help', '', 'List AUSF MML CMD', 'mml', 'null', 'Active'); -INSERT INTO "mml_system" VALUES (899, 'AUSF', 'systemManagement', 'System Management', 'set', 'n12ip', 'Set N12 IP Address', 'mml', '[{"comment":"","display":"IP Address","filter":"","name":"ip","optional":"false","type":"string"}]', 'Inactive'); -INSERT INTO "mml_system" VALUES (900, 'AUSF', 'systemManagement', 'System Management', 'set', 'n12port', 'Set N12 Port', 'mml', '[{"comment":"","display":"Port","filter":"1~65535","name":"port","optional":"false","type":"int"}]', 'Inactive'); -INSERT INTO "mml_system" VALUES (901, 'AUSF', 'systemManagement', 'System Management', 'set', 'n12scheme', 'Set N12 Scheme', 'mml', '[{"comment":"","display":"Scheme","filter":"{\"0\":\"http\", \"1\":\"https\"}","name":"scheme","optional":"false","type":"enum"}]', 'Inactive'); -INSERT INTO "mml_system" VALUES (902, 'AUSF', 'systemManagement', 'System Management', 'set', 'supirange', 'Set SUPI Range', 'mml', '[{"comment":"","display":"SUPI Range","filter":"","name":"supirange","optional":"false","type":"string"}]', 'Inactive'); -INSERT INTO "mml_system" VALUES (903, 'AUSF', 'systemManagement', 'System Management', 'reload', '', 'Reload Config', 'mml', 'null', 'Inactive'); -INSERT INTO "mml_system" VALUES (904, 'MME', 'mmeManagement', 'MME Management', 'help', '', 'List MME MML CMD', 'mml', 'null', 'Active'); +INSERT INTO "mml_system" VALUES (833, 'UPF', 'upfManagement', 'UPF Management', 'help', '', 'List UPF MML CMD', 'General', 'null', 'Active'); +INSERT INTO "mml_system" VALUES (834, 'UPF', 'systemManagement', 'System Management', 'set', 'n3 driver', 'Set N3 Driver', 'General', '[{"comment":"","display":"Type","filter":"","name":"type","optional":"false","type":"int"},{"comment":"","display":"IP address","filter":"","name":"ip","optional":"false","type":"string"},{"comment":"","display":"Mask","filter":"","name":"mask","optional":"false","type":"string"},{"comment":"","display":"Mac address","filter":"","name":"mac","optional":"false","type":"string"},{"comment":"","display":"PCI address","filter":"","name":"pci","optional":"false","type":"string"}]', 'Inactive'); +INSERT INTO "mml_system" VALUES (835, 'UPF', 'systemManagement', 'System Management', 'set', 'n4 ip', 'Set N4 IP Address', 'General', '[{"comment":"","display":"IP Address","filter":"","name":"ip","optional":"false","type":"string"}]', 'Inactive'); +INSERT INTO "mml_system" VALUES (836, 'UPF', 'systemManagement', 'System Management', 'set', 'n6 driver', 'Set N6 Driver', 'General', '[{"comment":"","display":"Type","filter":"","name":"type","optional":"false","type":"int"},{"comment":"","display":"IP address","filter":"","name":"ip","optional":"false","type":"string"},{"comment":"","display":"Mask","filter":"","name":"mask","optional":"false","type":"string"},{"comment":"","display":"Mac address","filter":"","name":"mac","optional":"false","type":"string"},{"comment":"","display":"PCI address","filter":"","name":"pci","optional":"false","type":"string"}]', 'Inactive'); +INSERT INTO "mml_system" VALUES (837, 'UPF', 'systemManagement', 'System Management', 'set', 'n9 driver', 'Set N9 Driver', 'General', '[{"comment":"","display":"Type","filter":"","name":"type","optional":"false","type":"int"},{"comment":"","display":"IP address","filter":"","name":"ip","optional":"false","type":"string"},{"comment":"","display":"Mask","filter":"","name":"mask","optional":"false","type":"string"},{"comment":"","display":"Mac address","filter":"","name":"mac","optional":"false","type":"string"},{"comment":"","display":"PCI address","filter":"","name":"pci","optional":"false","type":"string"}]', 'Inactive'); +INSERT INTO "mml_system" VALUES (838, 'UPF', 'systemManagement', 'System Management', 'set', 'dnn', 'Set DNN', 'General', '[{"comment":"","display":"DNN","filter":"","name":"dnn","optional":"false","type":"string"},{"comment":"","display":"IP Address","filter":"","name":"ip","optional":"false","type":"string"}]', 'Inactive'); +INSERT INTO "mml_system" VALUES (839, 'UPF', 'systemManagement', 'System Management', 'set', 'pfcp', 'Set PFCP', 'General', '[{"comment":"","display":"Path","filter":"","name":"path","optional":"false","type":"string"},{"comment":"","display":"Local IP Address","filter":"","name":"local","optional":"false","type":"string"},{"comment":"","display":"Remote IP Address","filter":"","name":"remote","optional":"false","type":"string"}]', 'Inactive'); +INSERT INTO "mml_system" VALUES (840, 'UPF', 'systemManagement', 'System Management', 'set', 'qos', 'Set Qos', 'General', '[{"comment":"","display":"Index","filter":"","name":"index","optional":"false","type":"string"},{"comment":"","display":"5qi","filter":"","name":"5qi","optional":"false","type":"string"},{"comment":"","display":"Priority Level","filter":"","name":"priority","optional":"false","type":"int"},{"comment":"","display":"MBR","filter":"","name":"mbr","optional":"false","type":"string"},{"comment":"","display":"GBR","filter":"","name":"gbr","optional":"false","type":"string"}]', 'Inactive'); +INSERT INTO "mml_system" VALUES (841, 'UPF', 'systemManagement', 'System Management', 'set', 'pccrule', 'Set PCC Rule', 'General', '[{"comment":"","display":"Index","filter":"0~65535","name":"index","optional":"false","type":"int"},{"comment":"","display":"Precedence","filter":"","name":"precedence","optional":"false","type":"int"},{"comment":"","display":"QOS Index","filter":"","name":"qosindex","optional":"false","type":"int"},{"comment":"","display":"Filter Direction","filter":"{\"0\":\"NA\", \"1\":\"Uplink\", \"2\":\"Downlink\", \"3\":\"Bidirectionallink\"}","name":"direction","optional":"true","type":"int"},{"comment":"","display":"Filter","filter":"","name":"filter","optional":"true","type":"string"},{"comment":"","display":"Application ID","filter":"","name":"appid","optional":"true","type":"string"}]', 'Inactive'); +INSERT INTO "mml_system" VALUES (842, 'UPF', 'systemManagement', 'System Management', 'exec', 'shell', 'Execute Shell Command', 'General', '[{"comment":"","display":"CMD","filter":"","name":"cmd","optional":"false","type":"string"}]', 'Inactive'); +INSERT INTO "mml_system" VALUES (843, 'UPF', 'systemManagement', 'System Management', 'reload', '', 'Reload Config', 'General', 'null', 'Inactive'); +INSERT INTO "mml_system" VALUES (853, 'SMF', 'smfManagement', 'SMF Management', 'help', '', 'List SMF MML CMD', 'General', 'null', 'Active'); +INSERT INTO "mml_system" VALUES (854, 'SMF', 'systemManagement', 'System Management', 'set', 'n7 server', 'Set N7 Server', 'General', '[{"comment":"","display":"Scheme","filter":"{\"0\":\"http\", \"1\":\"https\"}","name":"scheme","optional":"false","type":"enum"},{"comment":"","display":"IP Address","filter":"0~64","name":"ip","optional":"false","type":"string"},{"comment":"","display":"Port","filter":"0~65535","name":"port","optional":"false","type":"int"}]', 'Inactive'); +INSERT INTO "mml_system" VALUES (855, 'SMF', 'systemManagement', 'System Management', 'set', 'n7 client', 'Set N7 Client', 'General', '[{"comment":"","display":"Scheme","filter":"{\"0\":\"http\", \"1\":\"https\"}","name":"scheme","optional":"false","type":"enum"},{"comment":"","display":"IP Address","filter":"0~64","name":"ip","optional":"false","type":"string"}]', 'Inactive'); +INSERT INTO "mml_system" VALUES (856, 'SMF', 'systemManagement', 'System Management', 'set', 'n10 server', 'Set N10 Server', 'General', '[{"comment":"","display":"Scheme","filter":"{\"0\":\"http\", \"1\":\"https\"}","name":"scheme","optional":"false","type":"enum"},{"comment":"","display":"IP Address","filter":"0~64","name":"ip","optional":"false","type":"string"},{"comment":"","display":"Port","filter":"0~65535","name":"port","optional":"false","type":"int"}]', 'Inactive'); +INSERT INTO "mml_system" VALUES (857, 'SMF', 'systemManagement', 'System Management', 'set', 'n10 client', 'Set N10 Client', 'General', '[{"comment":"","display":"Scheme","filter":"{\"0\":\"http\", \"1\":\"https\"}","name":"scheme","optional":"false","type":"enum"},{"comment":"","display":"IP Address","filter":"0~64","name":"ip","optional":"false","type":"string"}]', 'Inactive'); +INSERT INTO "mml_system" VALUES (858, 'SMF', 'systemManagement', 'System Management', 'set', 'n11 server', 'Set N11 Server', 'General', '[{"comment":"","display":"Scheme","filter":"{\"0\":\"http\", \"1\":\"https\"}","name":"scheme","optional":"false","type":"enum"},{"comment":"","display":"IP Address","filter":"0~64","name":"ip","optional":"false","type":"string"},{"comment":"","display":"Port","filter":"0~65535","name":"port","optional":"false","type":"int"}]', 'Inactive'); +INSERT INTO "mml_system" VALUES (859, 'SMF', 'systemManagement', 'System Management', 'set', 'n11 client', 'Set N11 Client', 'General', '[{"comment":"","display":"Scheme","filter":"{\"0\":\"http\", \"1\":\"https\"}","name":"scheme","optional":"false","type":"enum"},{"comment":"","display":"IP Address","filter":"0~64","name":"ip","optional":"false","type":"string"}]', 'Inactive'); +INSERT INTO "mml_system" VALUES (860, 'SMF', 'systemManagement', 'System Management', 'set', 'dnn', 'Set DNN', 'General', '[{"comment":"","display":"Index","filter":"","name":"index","optional":"false","type":"int"},{"comment":"","display":"DNN","filter":"","name":"DNN","optional":"false","type":"string"}]', 'Inactive'); +INSERT INTO "mml_system" VALUES (862, 'SMF', 'systemManagement', 'System Management', 'set', 'qos', 'Set Qos', 'General', '[{"comment":"","display":"Index","filter":"","name":"index","optional":"false","type":"string"},{"comment":"","display":"SD","filter":"","name":"5qi","optional":"false","type":"string"},{"comment":"","display":"5qipl","filter":"","name":"5qipl","optional":"false","type":"string"},{"comment":"","display":"arppl","filter":"","name":"arppl","optional":"false","type":"string"},{"comment":"","display":"arppci","filter":"","name":"arppci","optional":"false","type":"string"},{"comment":"","display":"arppvi","filter":"","name":"arppvi","optional":"false","type":"string"},{"comment":"","display":"mfbrul","filter":"","name":"mfbrul","optional":"false","type":"string"},{"comment":"","display":"mfbrdl","filter":"","name":"mfbrdl","optional":"false","type":"string"},{"comment":"","display":"gfbrul","filter":"","name":"gfbrul","optional":"false","type":"string"},{"comment":"","display":"gfbrdl","filter":"","name":"gfbrdl","optional":"false","type":"string"}]', 'Inactive'); +INSERT INTO "mml_system" VALUES (863, 'SMF', 'systemManagement', 'System Management', 'set', 'snssai', 'Set Snssai', 'General', '[{"comment":"","display":"Index","filter":"","name":"index","optional":"false","type":"string"},{"display":"sst-sd","filter":"","name":"sst-sd","optional":"false","type":"string"}]', 'Inactive'); +INSERT INTO "mml_system" VALUES (864, 'SMF', 'systemManagement', 'System Management', 'release', 'imsi', 'Release IMSI', 'General', '[{"comment":"","display":"IMSI","filter":"","name":"imsi","optional":"false","type":"string"},{"display":"PDU Session Id","filter":"","name":"pduSessId","optional":"false","type":"string"}]', 'Inactive'); +INSERT INTO "mml_system" VALUES (865, 'SMF', 'systemManagement', 'System Management', 'set', 'urr', 'Set URR', 'General', '[{"comment":"","display":"Index","filter":"","name":"index","optional":"false","type":"string"},{"comment":"","display":"Quota Volume Tatol","filter":"","name":"quotavolumetatol","optional":"false","type":"string"},{"comment":"","display":"Quota Volume UL","filter":"","name":"quotavolumeul","optional":"false","type":"string"},{"comment":"","display":"Quota Volume DL","filter":"","name":"quotavolumedl","optional":"false","type":"string"},{"comment":"","display":"Quota Time","filter":"","name":"quotatime","optional":"false","type":"string"}]', 'Inactive'); +INSERT INTO "mml_system" VALUES (866, 'SMF', 'systemManagement', 'System Management', 'set', 'dpi', 'Set DPI', 'General', '[{"comment":"","display":"Flag","filter":"{\"0\":\"disable\", \"1\":\"enable\"}","name":"flag","optional":"false","type":"enum"},{"comment":"","display":"Max Detect Packet Number","filter":"","name":"max","optional":"false","type":"string"}]', 'Inactive'); +INSERT INTO "mml_system" VALUES (867, 'SMF', 'systemManagement', 'System Management', 'exec', 'shell', 'Execute Shell Command', 'General', '[{"comment":"","display":"CMD","filter":"","name":"cmd","optional":"false","type":"string"}]', 'Inactive'); +INSERT INTO "mml_system" VALUES (868, 'SMF', 'systemManagement', 'System Management', 'reload', '', 'Reload Config', 'General', 'null', 'Inactive'); +INSERT INTO "mml_system" VALUES (870, 'IMS', 'imsManagement', 'IMS Management', 'help', '', 'List IMS MML CMD', 'General', 'null', 'Active'); +INSERT INTO "mml_system" VALUES (871, 'N3IWF', 'n3iwfManagement', 'N3IWF Management', 'help', '', 'List N3IWF MML CMD', 'General', 'null', 'Active'); +INSERT INTO "mml_system" VALUES (872, 'NSSF', 'nssfManagement', 'NSSF Management', 'help', '', 'List NSSF MML CMD', 'General', 'null', 'Active'); +INSERT INTO "mml_system" VALUES (873, 'NRF', 'nrfManagement', 'NRF Management', 'help', '', 'List NRF MML CMD', 'General', 'null', 'Active'); +INSERT INTO "mml_system" VALUES (874, 'PCF', 'pcfManagement', 'PCF Management', 'help', '', 'List PCF MML CMD', 'General', 'null', 'Active'); +INSERT INTO "mml_system" VALUES (875, 'AMF', 'subsManagement', 'Subscriber Management', 'list', 'imsi', 'List Online IMSI', 'General', '[{"comment":"","display":"IMSI","filter":"32","name":"imsi","optional":"false","type":"string"}]', 'Inactive'); +INSERT INTO "mml_system" VALUES (876, 'AMF', 'amfManagement', 'AMF Management', 'help', '', 'List AMF MML CMD', 'General', 'null', 'Active'); +INSERT INTO "mml_system" VALUES (877, 'AMF', 'systemManagement', 'System Management', 'set', 'n8_ip', 'Set N8 IP Address', 'General', '[{"comment":"","display":"IP Address","filter":"0~64","name":"ip","optional":"false","type":"string"}]', 'Inactive'); +INSERT INTO "mml_system" VALUES (878, 'AMF', 'systemManagement', 'System Management', 'set', 'n11_ip', 'Set N11 IP Address', 'General', '[{"comment":"","display":"IP Address","filter":"0~64","name":"ip","optional":"false","type":"string"}]', 'Inactive'); +INSERT INTO "mml_system" VALUES (879, 'AMF', 'systemManagement', 'System Management', 'set', 'n12_ip', 'Set N12 IP Address', 'General', '[{"comment":"","display":"IP Address","filter":"0~64","name":"ip","optional":"false","type":"string"}]', 'Inactive'); +INSERT INTO "mml_system" VALUES (880, 'AMF', 'systemManagement', 'System Management', 'set', 'n2_ip', 'Set N2 IP Address', 'General', '[{"comment":"","display":"IP Address","filter":"","name":"ip","optional":"false","type":"string"}]', 'Inactive'); +INSERT INTO "mml_system" VALUES (881, 'AMF', 'systemManagement', 'System Management', 'set', 'n2_port', 'Set N2 Port', 'General', '[{"comment":"","display":"Port","filter":"0~65535","name":"port","optional":"false","type":"int"}]', 'Inactive'); +INSERT INTO "mml_system" VALUES (882, 'AMF', 'systemManagement', 'System Management', 'set', 'ntpversion', 'Set NTP Version', 'General', '[{"comment":"","display":"Version","filter":"","name":"version","optional":"false","type":"int"}]', 'Inactive'); +INSERT INTO "mml_system" VALUES (883, 'AMF', 'systemManagement', 'System Management', 'set', 'ntpmaxdiff', 'Set NTP Max Diff', 'General', '[{"comment":"","display":"Max Value(ms)","filter":"100~2000","name":"value","optional":"false","type":"int"}]', 'Inactive'); +INSERT INTO "mml_system" VALUES (884, 'AMF', 'systemManagement', 'System Management', 'set', 'ntpsynctimer', 'Set NTP Sync Timer', 'General', '[{"comment":"","display":"Periods(second)","filter":"","name":"periods","optional":"false","type":"int"}]', 'Inactive'); +INSERT INTO "mml_system" VALUES (885, 'AMF', 'systemManagement', 'System Management', 'add', 'slice', 'Add Slice', 'General', '[{"comment":"","display":"SST","filter":"","name":"sst","optional":"false","type":"string"},{"comment":"","display":"SD","filter":"","name":"sd","optional":"false","type":"string"}]', 'Inactive'); +INSERT INTO "mml_system" VALUES (886, 'AMF', 'systemManagement', 'System Management', 'deregister', 'imsi', 'Deregister IMSI', 'General', '[{"comment":"","display":"IMSI","filter":"","name":"IMSI","optional":"false","type":"string"}]', 'Inactive'); +INSERT INTO "mml_system" VALUES (887, 'AMF', 'systemManagement', 'System Management', 'exec', 'shell', 'Execute Shell Command', 'General', '[{"comment":"","display":"CMD","filter":"","name":"cmd","optional":"false","type":"string"}]', 'Inactive'); +INSERT INTO "mml_system" VALUES (888, 'AMF', 'systemManagement', 'System Management', 'reload', '', 'Reload Config', 'General', 'null', 'Inactive'); +INSERT INTO "mml_system" VALUES (889, 'UDM', 'udmManagement', 'UDM Management', 'help', '', 'List UDM MML CMD', 'General', 'null', 'Active'); +INSERT INTO "mml_system" VALUES (890, 'UDM', 'systemManagement', 'System Management', 'set', 'n8ip', 'Set N8 IP Address', 'General', '[{"comment":"","display":"IP Address","filter":"","name":"ip","optional":"false","type":"ipv4"}]', 'Inactive'); +INSERT INTO "mml_system" VALUES (891, 'UDM', 'systemManagement', 'System Management', 'set', 'n8port', 'Set N8 Port', 'General', '[{"comment":"","display":"Port","filter":"1~65535","name":"port","optional":"false","type":"int"}]', 'Inactive'); +INSERT INTO "mml_system" VALUES (892, 'UDM', 'systemManagement', 'System Management', 'set', 'n8scheme', 'Set N8 Scheme', 'General', '[{"comment":"","display":"Scheme","filter":"{\"0\":\"http\", \"1\":\"https\"}","name":"scheme","optional":"false","type":"enum"}]', 'Inactive'); +INSERT INTO "mml_system" VALUES (893, 'UDM', 'systemManagement', 'System Management', 'set', 'n10ip', 'Set N10 IP Address', 'General', '[{"comment":"","display":"IP Address","filter":"","name":"ip","optional":"false","type":"string"}]', 'Inactive'); +INSERT INTO "mml_system" VALUES (894, 'UDM', 'systemManagement', 'System Management', 'set', 'n10port', 'Set N10 Port', 'General', '[{"comment":"","display":"Port","filter":"1~65535","name":"port","optional":"false","type":"int"}]', 'Inactive'); +INSERT INTO "mml_system" VALUES (895, 'UDM', 'systemManagement', 'System Management', 'set', 'n10scheme', 'Set N10 Scheme', 'General', '[{"comment":"","display":"Scheme","filter":"{\"0\":\"http\", \"1\":\"https\"}","name":"scheme","optional":"false","type":"enum"}]', 'Inactive'); +INSERT INTO "mml_system" VALUES (896, 'UDM', 'systemManagement', 'System Management', 'exec', 'shell', 'Execute Shell Command', 'General', '[{"comment":"","display":"CMD","filter":"","name":"cmd","optional":"false","type":"string"}]', 'Inactive'); +INSERT INTO "mml_system" VALUES (897, 'UDM', 'systemManagement', 'System Management', 'reload', '', 'Reload Config', 'General', 'null', 'Inactive'); +INSERT INTO "mml_system" VALUES (898, 'AUSF', 'ausfManagement', 'AUSF Management', 'help', '', 'List AUSF MML CMD', 'General', 'null', 'Active'); +INSERT INTO "mml_system" VALUES (899, 'AUSF', 'systemManagement', 'System Management', 'set', 'n12ip', 'Set N12 IP Address', 'General', '[{"comment":"","display":"IP Address","filter":"","name":"ip","optional":"false","type":"string"}]', 'Inactive'); +INSERT INTO "mml_system" VALUES (900, 'AUSF', 'systemManagement', 'System Management', 'set', 'n12port', 'Set N12 Port', 'General', '[{"comment":"","display":"Port","filter":"1~65535","name":"port","optional":"false","type":"int"}]', 'Inactive'); +INSERT INTO "mml_system" VALUES (901, 'AUSF', 'systemManagement', 'System Management', 'set', 'n12scheme', 'Set N12 Scheme', 'General', '[{"comment":"","display":"Scheme","filter":"{\"0\":\"http\", \"1\":\"https\"}","name":"scheme","optional":"false","type":"enum"}]', 'Inactive'); +INSERT INTO "mml_system" VALUES (902, 'AUSF', 'systemManagement', 'System Management', 'set', 'supirange', 'Set SUPI Range', 'General', '[{"comment":"","display":"SUPI Range","filter":"","name":"supirange","optional":"false","type":"string"}]', 'Inactive'); +INSERT INTO "mml_system" VALUES (903, 'AUSF', 'systemManagement', 'System Management', 'reload', '', 'Reload Config', 'General', 'null', 'Inactive'); +INSERT INTO "mml_system" VALUES (904, 'MME', 'mmeManagement', 'MME Management', 'help', '', 'List MME MML CMD', 'General', 'null', 'Active'); diff --git a/build/database/lite/common/ne_config.sql b/build/database/lite/common/ne_config.sql index da6dc9ae..2df1a188 100644 --- a/build/database/lite/common/ne_config.sql +++ b/build/database/lite/common/ne_config.sql @@ -96,22 +96,22 @@ INSERT INTO "ne_config" VALUES (190, 'SMF', 'localDhcpCfg', 'Local DHCP Config', INSERT INTO "ne_config" VALUES (191, 'SMF', 'dnnselectdhcpserver', 'DNN Select DHCP Server', 'array', '[{"access":"read-only","comment":"","display":"Index","filter":"0~65535","name":"index","type":"int","value":""},{"access":"read-write","comment":"","display":"Enable","filter":"","name":"enable","type":"bool","value":"false"},{"access":"read-write","comment":"","display":"DNN","filter":"1~64","name":"dnn","type":"string","value":""},{"access":"read-write","comment":"e.g. 192.168.1.1","display":"DHCP Server IP","filter":"","name":"dhcpServerAddr","type":"string","value":""}]', 23, '', 1751019165587, 'public'); INSERT INTO "ne_config" VALUES (192, 'SMF', 'offlineChargingConfig', 'Offline Charging Config', 'list', '[{"access":"read-write","comment":"","display":"CDR File Name","filter":"1~64","name":"cdrFileName","type":"string","value":"smf.cdr"},{"access":"read-write","comment":"","display":"CDR File Path","filter":"1~256","name":"cdrFilePath","type":"string","value":"/var/log/smfCdr"},{"access":"read-write","comment":"","display":"CDR File Num","filter":"1~999999999","name":"cdrFileNum","type":"int","value":"50"},{"access":"read-write","comment":"Megabytes","display":"CDR File Size","filter":"1~999999","name":"cdrFileSize","type":"int","value":"300"},{"access":"read-write","comment":"Days","display":"CDR File Max Age","filter":"0~9999","name":"cdrFileMaxAge","type":"int","value":"30"},{"access":"read-write","comment":"","display":"Free Subscribers CDR Enable","filter":"","name":"freeSubsCdrEnable","type":"bool","value":"false"},{"access":"read-write","comment":"Seconds","display":"Time Threshold","filter":"0~999999999","name":"timeThreshold","type":"int","value":"600"},{"access":"read-write","comment":"Bytes","display":"Volume Threshold","filter":"0~999999999999999","name":"volumeThreshold","type":"int","value":"0"}]', 25, '', 1751019165593, 'public'); --- 更新 UDM 配置 20250613 -INSERT INTO "ne_config" VALUES (200, 'UDM', 'system', 'System', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Service IP\",\"filter\":\"\",\"name\":\"serviceIP\",\"type\":\"ipv4\",\"value\":\"172.16.5.140\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Service Port\",\"filter\":\"0~65535\",\"name\":\"servicePort\",\"type\":\"int\",\"value\":\"8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NRF URI\",\"filter\":\"\",\"name\":\"nrfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.180:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"FQDN\",\"filter\":\"\",\"name\":\"fqdn\",\"type\":\"string\",\"value\":\"omc.com\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Priority\",\"filter\":\"0~4095\",\"name\":\"priority\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Capacity\",\"filter\":\"0~65535\",\"name\":\"capacity\",\"type\":\"int\",\"value\":\"4096\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Group ID\",\"filter\":\"\",\"name\":\"groupId\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Supported Plmn1\",\"filter\":\"^\\\\d{5,6}$\",\"name\":\"supportedPlmn1\",\"type\":\"string\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Supported Plmn2\",\"filter\":\"^\\\\d{5,6}$\",\"name\":\"supportedPlmn2\",\"type\":\"string\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Supported Plmn3\",\"filter\":\"^\\\\d{5,6}$\",\"name\":\"supportedPlmn3\",\"type\":\"string\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Supported Plmn4\",\"filter\":\"^\\\\d{5,6}$\",\"name\":\"supportedPlmn4\",\"type\":\"string\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SUPI Ranges\",\"filter\":\"^imsi-\\\\d{15}~imsi-\\\\d{15}$\",\"name\":\"supiRanges\",\"type\":\"regex\",\"value\":\"imsi-001010100080000~imsi-001010100080099\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"GPSI Ranges\",\"filter\":\"^msisdn-\\\\d{2,15}~msisdn-\\\\d{2,15}$\",\"name\":\"gpsiRanges\",\"type\":\"regex\",\"value\":\"msisdn-69072000~msisdn-69072099\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Scheme\",\"filter\":\"{\\\"0\\\":\\\"HTTP\\\", \\\"1\\\":\\\"HTTPS\\\"}\",\"name\":\"scheme\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Redis Link\",\"filter\":\"{\\\"0\\\":\\\"TCP\\\",\\\"1\\\":\\\"SCTP\\\"}\",\"name\":\"redisLink\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Redis Address\",\"filter\":\"\",\"name\":\"redisAddr\",\"type\":\"string\",\"value\":\"172.16.5.140:6379\"}]', 1, '', 1749815867447, 'public'); -INSERT INTO "ne_config" VALUES (201, 'UDM', 'subsUEAmbr', 'Subs UE AMBR', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,32}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_ambr\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Uplink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"uplink\",\"type\":\"regex\",\"value\":\"1 Gbps\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Downlink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"downlink\",\"type\":\"regex\",\"value\":\"2 Gbps\"}]', 5, '', 1749815867466, 'public'); -INSERT INTO "ne_config" VALUES (202, 'UDM', 'subsNssais', 'Subs NSSAIs', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,32}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_nssai\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Supported Features\",\"filter\":\"^[0-9a-fA-F]{8}$\",\"name\":\"supportedFeatures\",\"type\":\"regex\",\"value\":\"00000001\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Default Single NSSAIs\",\"filter\":\"\",\"name\":\"defaultSingleNSSAIs\",\"type\":\"string\",\"value\":\"1-000001\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Single NSSAIs\",\"filter\":\"\",\"name\":\"singleNssais\",\"type\":\"string\",\"value\":\"1-000002\"}]', 7, '', 1749815867471, 'public'); -INSERT INTO "ne_config" VALUES (203, 'UDM', 'forbiddenAreas', 'Forbidden Areas', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,32}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_ambr\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"TACs\",\"filter\":\"\",\"name\":\"tacs\",\"type\":\"string\",\"value\":\"123\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Area Codes\",\"filter\":\"\",\"name\":\"areaCodes\",\"type\":\"string\",\"value\":\"123456\"}]', 9, '', 1749815867476, 'public'); -INSERT INTO "ne_config" VALUES (204, 'UDM', 'serviceAreaRestriction', 'Service Area Restriction', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,32}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_ambr\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Restriction Type\",\"filter\":\"{\\\"0\\\":\\\"Allowed Areas\\\", \\\"1\\\":\\\"Not Allowed Areas\\\"}\",\"name\":\"restrictionType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"TACs\",\"filter\":\"\",\"name\":\"tacs\",\"type\":\"string\",\"value\":\"123\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Area Codes\",\"filter\":\"\",\"name\":\"areaCodes\",\"type\":\"string\",\"value\":\"123456\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max TAs\",\"filter\":\"^\\\\d{1,2}$\",\"name\":\"maxTAs\",\"type\":\"int\",\"value\":\"1\"}]', 11, '', 1749815867480, 'public'); -INSERT INTO "ne_config" VALUES (205, 'UDM', 'smfSelection', 'Subs SMF Selection', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,32}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_snssai\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SNSSAI\",\"filter\":\"^\\\\d{1,3}[A-Fa-f0-9]{6}$\",\"name\":\"snssai\",\"type\":\"string\",\"value\":\"1-000001\"},{\"access\":\"read-only\",\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~4\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DNN\",\"filter\":\"^.{1,32}$\",\"name\":\"dnn\",\"type\":\"string\",\"value\":\"internet\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Default DNN Indicator\",\"filter\":\"false;true;\",\"name\":\"defaultDnnInd\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"LBO Roaming Allowed\",\"filter\":\"false;true;\",\"name\":\"lboRoamingAllowed\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Interworking EPS Indicator\",\"filter\":\"false;true;\",\"name\":\"iwkEpsInd\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"LADN Indicator\",\"filter\":\"false;true;\",\"name\":\"ladnIndicator\",\"type\":\"bool\",\"value\":\"false\"}],\"comment\":\"\",\"display\":\"DNN List\",\"filter\":\"1~4\",\"name\":\"dnnList\",\"type\":\"int\",\"value\":\"1\"}]', 13, '', 1749815867486, 'public'); -INSERT INTO "ne_config" VALUES (206, 'UDM', 'dnn', 'DNN Conf', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,32}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_nssai\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Default PDU Session Type\",\"filter\":\"{\\\"0\\\":\\\"IPv4\\\",\\\"1\\\":\\\"IPv6\\\",\\\"2\\\":\\\"IPv4v6\\\",\\\"3\\\":\\\"Ethernet\\\",\\\"4\\\":\\\"Unstruction\\\"}\",\"name\":\"defaultPDUSessionType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Allowed PDU Session Types\",\"filter\":\"{\\\"0\\\":\\\"IPv4\\\",\\\"1\\\":\\\"IPv6\\\",\\\"2\\\":\\\"IPv4v6\\\",\\\"3\\\":\\\"Ethernet\\\",\\\"4\\\":\\\"Unstruction\\\",\\\"5\\\":\\\"IPv4 \\u0026 IPv6\\\",\\\"6\\\":\\\"IPv4 \\u0026 IPv4v6\\\",\\\"7\\\":\\\"IPv6 \\u0026 IPv4v6\\\",\\\"8\\\":\\\"IPv4 \\u0026 IPv6 \\u0026 IPv4v6\\\"}\",\"name\":\"allowedPDUSessionTypes\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"5QI\",\"filter\":\"0~255\",\"name\":\"5qi\",\"type\":\"int\",\"value\":\"9\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Priority Level\",\"filter\":\"1~127\",\"name\":\"priorityLevel\",\"type\":\"int\",\"value\":\"9\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Default SSC Mode\",\"filter\":\"{\\\"0\\\":\\\"SSC Mode1\\\",\\\"1\\\":\\\"SSC Mode2\\\",\\\"2\\\":\\\"SSC Mode3\\\"}\",\"name\":\"defaultSSCmode\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Allowed SSC Modes\",\"filter\":\"{\\\"0\\\":\\\"SSC Mode1\\\",\\\"1\\\":\\\"SSC Mode2\\\",\\\"2\\\":\\\"SSC Mode3\\\",\\\"3\\\":\\\"SSC Mode1 \\u0026 SSC Mode2\\\",\\\"4\\\":\\\"SSC Mode1 \\u0026 SSC Mode3\\\",\\\"5\\\":\\\"SSC Mode2 \\u0026 SSC Mode3\\\",\\\"6\\\":\\\"SSC Mode1 \\u0026 SSC Mode2 \\u0026 SSC Mode3\\\"}\",\"name\":\"allowedSSCmodes\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Interworking EPS Indicator\",\"filter\":\"\",\"name\":\"interworkingEPSIndicator\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"LADN Indicator\",\"filter\":\"\",\"name\":\"ladnIndicator\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Charging Characteristics\",\"filter\":\"4~4\",\"name\":\"chargingCharacteristics\",\"type\":\"string\",\"value\":\"0001\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Subscribed Session AMBR Uplink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"subscribedSessionAmbrUL\",\"type\":\"regex\",\"value\":\"1 Gbps\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Subscribed Session AMBR Downlink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"subscribedSessionAmbrDL\",\"type\":\"regex\",\"value\":\"2 Gbps\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Static IP Address\",\"filter\":\"\",\"name\":\"staticIPAddress\",\"type\":\"ipv4\",\"value\":\"192.168.1.100\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"User Plane Integrity\",\"filter\":\"{\\\"0\\\":\\\"Null\\\",\\\"1\\\":\\\"Required\\\",\\\"2\\\":\\\"Preferred\\\",\\\"3\\\":\\\"Not Needed\\\"}\",\"name\":\"userPlaneIntegrity\",\"type\":\"enum\",\"value\":\"3\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"User Plane Confidentiality\",\"filter\":\"{\\\"0\\\":\\\"Null\\\",\\\"1\\\":\\\"Required\\\",\\\"2\\\":\\\"Preferred\\\",\\\"3\\\":\\\"Not Needed\\\"}\",\"name\":\"userPlaneConfidentiality\",\"type\":\"enum\",\"value\":\"3\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Priority Level\",\"filter\":\"0~255\",\"name\":\"arpPriorityLevel\",\"type\":\"int\",\"value\":\"6\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Preempt Capability\",\"filter\":\"{\\\"0\\\":\\\"Not Preempt\\\",\\\"1\\\":\\\"May Preempt\\\"}\",\"name\":\"arpPreemptCap\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Preempt Vulnerability\",\"filter\":\"{\\\"0\\\":\\\"Not Preemptable\\\",\\\"1\\\":\\\"Preemptable\\\"}\",\"name\":\"arpPreemptVuln\",\"type\":\"enum\",\"value\":\"0\"}]', 15, '', 1749815867491, 'public'); -INSERT INTO "ne_config" VALUES (207, 'UDM', 'epsTemplate', 'EPS User Template', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{0,31}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_eps\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AMBR Uplink\",\"filter\":\"0~4294967295\",\"name\":\"ambrUplink\",\"type\":\"int\",\"value\":\"100000000\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AMBR Downlink\",\"filter\":\"0~4294967295\",\"name\":\"ambrDownlink\",\"type\":\"int\",\"value\":\"200000000\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"APN OI Replacement\",\"filter\":\"^.{0,31}$\",\"name\":\"apnOIReplacement\",\"type\":\"string\",\"value\":\"money\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"RFSP\",\"filter\":\"\",\"name\":\"rfsp\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"RAU TAU Timer\",\"filter\":\"\",\"name\":\"rauTauTimer\",\"type\":\"int\",\"value\":\"120\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Charging Characteristic\",\"filter\":\"4~4\",\"name\":\"chargingCharacteristic\",\"type\":\"string\",\"value\":\"0001\"}]', 17, '', 1749815867496, 'public'); -INSERT INTO "ne_config" VALUES (208, 'UDM', 'epsApn', 'EPS APN', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DNN\",\"filter\":\"^.{0,127}$\",\"name\":\"dnn\",\"type\":\"string\",\"value\":\"internet\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PDN Type\",\"filter\":\"{\\\"0\\\":\\\"IPv4\\\",\\\"1\\\":\\\"IPv6\\\",\\\"2\\\":\\\"IPv4v6\\\",\\\"3\\\":\\\"IPv4 or IPv6\\\"}\",\"name\":\"pdnType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"QCI\",\"filter\":\"1~255\",\"name\":\"qci\",\"type\":\"int\",\"value\":\"9\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Priority\",\"filter\":\"1~127\",\"name\":\"arpPriorityLevel\",\"type\":\"int\",\"value\":\"8\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Preemption Capability\",\"filter\":\"{\\\"0\\\":\\\"Not Preempt\\\",\\\"1\\\":\\\"May Preempt\\\"}\",\"name\":\"arpPreemptCap\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Preemption Vulnerability\",\"filter\":\"{\\\"0\\\":\\\"Not Preemptable\\\",\\\"1\\\":\\\"Preemptable\\\"}\",\"name\":\"arpPreemptVuln\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Context Identifier\",\"filter\":\"\",\"name\":\"contextIdentifier\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"VPLMN Dynamic Address Allowed\",\"filter\":\"false;true;\",\"name\":\"vplmnDynamicAddressAllowed\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PDN GW Allocation Type\",\"filter\":\"{\\\"0\\\":\\\"Static\\\",\\\"1\\\":\\\"Dynamic\\\"}\",\"name\":\"pdnGWAllocationType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AMBR Uplink\",\"filter\":\"0~4294967295\",\"name\":\"ambrUplink\",\"type\":\"int\",\"value\":\"100000000\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AMBR Downlink\",\"filter\":\"0~4294967295\",\"name\":\"ambrDownlink\",\"type\":\"int\",\"value\":\"200000000\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Charging Characteristic\",\"filter\":\"4~4\",\"name\":\"chargingCharacteristic\",\"type\":\"string\",\"value\":\"0001\"}]', 19, '', 1749815867501, 'public'); -INSERT INTO "ne_config" VALUES (209, 'UDM', 'applicationServer', 'Application Server', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AS Name\",\"filter\":\"^.{1,31}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"mmtel_as\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Default Handling\",\"filter\":\"{\\\"0\\\":\\\"Session Continued\\\",\\\"1\\\":\\\"Session Terminated\\\"}\",\"name\":\"defaultHandling\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Server Name\",\"filter\":\"^.{1,127}$\",\"name\":\"serverName\",\"type\":\"string\",\"value\":\"sip:192.168.8.26:7060\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Diameter Address\",\"filter\":\"^.{1,127}$\",\"name\":\"diameterAddress\",\"type\":\"string\",\"value\":\"mmtel.ims.mnc001.mcc001.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Rep Data Size Limit\",\"filter\":\"0~65535\",\"name\":\"repDataSizeLimit\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Include Register Request\",\"filter\":\"false;true;\",\"name\":\"includeRegisterRequest\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Include Register Response\",\"filter\":\"false;true;\",\"name\":\"includeRegisterResponse\",\"type\":\"bool\",\"value\":\"false\"}]', 21, '', 1749815867506, 'public'); -INSERT INTO "ne_config" VALUES (210, 'UDM', 'scscfSet', 'SCSCF Set', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~8\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,31}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"mmtel_as\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Priority\",\"filter\":\"\",\"name\":\"priority\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Server Name\",\"filter\":\"^.{1,127}$\",\"name\":\"serverName\",\"type\":\"string\",\"value\":\"sip:scscf.ims.mnc001.mcc001.3gppnetwork.org:6060\"}]', 23, '', 1749815867511, 'public'); -INSERT INTO "ne_config" VALUES (211, 'UDM', 'triggerPoint', 'Trigger Point', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,32}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_snssai\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Condition Type CNF\",\"filter\":\"0~1\",\"name\":\"conditionTypeCNF\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-only\",\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~4\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Enable\",\"filter\":\"\",\"name\":\"enable\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Condition Negated\",\"filter\":\"0~1\",\"name\":\"conditionNegated\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Group\",\"filter\":\"0~4096\",\"name\":\"group\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Method\",\"filter\":\"^.{0,32}$\",\"name\":\"method\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SIP Header\",\"filter\":\"^.{0,64}$\",\"name\":\"sipHeader\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SIP Content\",\"filter\":\"^.{0,64}$\",\"name\":\"sipContent\",\"type\":\"string\",\"value\":\"\"}],\"comment\":\"\",\"display\":\"SPT List\",\"filter\":\"1~4\",\"name\":\"sptList\",\"type\":\"int\",\"value\":\"1\"}]', 25, '', 1749815867516, 'public'); -INSERT INTO "ne_config" VALUES (212, 'UDM', 's6aServer', 'S6a Server', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Enable\",\"filter\":\"false;true;\",\"name\":\"enable\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Link Type\",\"filter\":\"{\\\"0\\\":\\\"TCP\\\",\\\"1\\\":\\\"SCTP\\\"}\",\"name\":\"netType\",\"type\":\"enum\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Address\",\"filter\":\"\",\"name\":\"addr\",\"type\":\"string\",\"value\":\"172.16.5.140:3868\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Host\",\"filter\":\"^.{1,127}$\",\"name\":\"host\",\"type\":\"string\",\"value\":\"hss.ims.mnc001.mcc001.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Realm\",\"filter\":\"^.{1,127}$\",\"name\":\"realm\",\"type\":\"string\",\"value\":\"ims.mnc001.mcc001.3gppnetwork.org\"}]', 27, '', 1749815867521, 'public'); -INSERT INTO "ne_config" VALUES (213, 'UDM', 'cxServer', 'Cx Server', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Enable\",\"filter\":\"false;true;\",\"name\":\"enable\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Link Type\",\"filter\":\"{\\\"0\\\":\\\"TCP\\\",\\\"1\\\":\\\"SCTP\\\"}\",\"name\":\"netType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Address\",\"filter\":\"\",\"name\":\"addr\",\"type\":\"string\",\"value\":\"172.16.5.140:3868\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Host\",\"filter\":\"^.{1,127}$\",\"name\":\"host\",\"type\":\"string\",\"value\":\"hss.ims.mnc001.mcc001.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Realm\",\"filter\":\"^.{1,127}$\",\"name\":\"realm\",\"type\":\"string\",\"value\":\"ims.mnc001.mcc001.3gppnetwork.org\"}]', 29, '', 1749815867527, 'public'); -INSERT INTO "ne_config" VALUES (214, 'UDM', 'ausfCfg', 'AUSF Config', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AUSF enable\",\"filter\":\"\",\"name\":\"enable\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"EAP-Aka SupiOrImsi Prefix\",\"filter\":\"\",\"name\":\"eapAkaSupiImsiPrefix\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AUSF FQDN\",\"filter\":\"0~128\",\"name\":\"ausfFqdn\",\"type\":\"string\",\"value\":\"ausf.5gc.com\"}]', 3, '', 1749815867461, 'public'); +-- 更新 UDM 配置 20250715 +INSERT INTO "ne_config" VALUES (200, 'UDM', 'system', 'System', 'list', '[{"access":"read-write","comment":"","display":"Service IP","filter":"","name":"serviceIP","type":"ipv4","value":"172.16.5.140"},{"access":"read-write","comment":"","display":"Service Port","filter":"0~65535","name":"servicePort","type":"int","value":"8080"},{"access":"read-write","comment":"","display":"NRF URI","filter":"","name":"nrfUri","type":"string","value":"http://172.16.5.180:8080"},{"access":"read-write","comment":"","display":"FQDN","filter":"","name":"fqdn","type":"string","value":"omc.com"},{"access":"read-write","comment":"","display":"Priority","filter":"0~4095","name":"priority","type":"int","value":"1"},{"access":"read-write","comment":"","display":"Capacity","filter":"0~65535","name":"capacity","type":"int","value":"4096"},{"access":"read-write","comment":"","display":"Group ID","filter":"","name":"groupId","type":"string","value":"0"},{"access":"read-write","comment":"","display":"Supported Plmn1","filter":"^\\d{5,6}$","name":"supportedPlmn1","type":"string","value":"00101"},{"access":"read-write","comment":"","display":"Supported Plmn2","filter":"^\\d{5,6}$","name":"supportedPlmn2","type":"string","value":"00101"},{"access":"read-write","comment":"","display":"Supported Plmn3","filter":"^\\d{5,6}$","name":"supportedPlmn3","type":"string","value":"00101"},{"access":"read-write","comment":"","display":"Supported Plmn4","filter":"^\\d{5,6}$","name":"supportedPlmn4","type":"string","value":"00101"},{"access":"read-write","comment":"","display":"SUPI Ranges","filter":"^imsi-\\d{15}~imsi-\\d{15}$","name":"supiRanges","type":"regex","value":"imsi-001010100080000~imsi-001010100080099"},{"access":"read-write","comment":"","display":"GPSI Ranges","filter":"^msisdn-\\d{2,15}~msisdn-\\d{2,15}$","name":"gpsiRanges","type":"regex","value":"msisdn-69072000~msisdn-69072099"},{"access":"read-write","comment":"","display":"Scheme","filter":"{\"0\":\"HTTP\", \"1\":\"HTTPS\"}","name":"scheme","type":"enum","value":"0"},{"access":"read-write","comment":"","display":"Redis Link","filter":"{\"0\":\"TCP\",\"1\":\"SCTP\"}","name":"redisLink","type":"enum","value":"0"},{"access":"read-write","comment":"","display":"Redis Address","filter":"","name":"redisAddr","type":"string","value":"172.16.5.140:6379"}]', 1, '', 1752577177260, 'public'); +INSERT INTO "ne_config" VALUES (201, 'UDM', 'ausfCfg', 'AUSF Config', 'list', '[{"access":"read-write","comment":"","display":"AUSF enable","filter":"","name":"enable","type":"bool","value":"true"},{"access":"read-write","comment":"","display":"EAP-Aka SupiOrImsi Prefix","filter":"","name":"eapAkaSupiImsiPrefix","type":"bool","value":"false"},{"access":"read-write","comment":"","display":"AUSF FQDN","filter":"0~128","name":"ausfFqdn","type":"string","value":"ausf.5gc.com"}]', 3, '', 1752577177350, 'public'); +INSERT INTO "ne_config" VALUES (202, 'UDM', 'subsUEAmbr', 'Subs UE AMBR', 'array', '[{"access":"read-only","comment":"","display":"Index","filter":"1~16","name":"index","type":"int","value":"1"},{"access":"read-write","comment":"","display":"Name","filter":"^.{1,32}$","name":"name","type":"string","value":"def_ambr"},{"access":"read-write","comment":"","display":"Uplink","filter":"^\\d+(\\.\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$","name":"uplink","type":"regex","value":"1 Gbps"},{"access":"read-write","comment":"","display":"Downlink","filter":"^\\d+(\\.\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$","name":"downlink","type":"regex","value":"2 Gbps"}]', 5, '', 1752577177371, 'public'); +INSERT INTO "ne_config" VALUES (203, 'UDM', 'subsNssais', 'Subs NSSAIs', 'array', '[{"access":"read-only","comment":"","display":"Index","filter":"1~16","name":"index","type":"int","value":"1"},{"access":"read-write","comment":"","display":"Name","filter":"^.{1,32}$","name":"name","type":"string","value":"def_nssai"},{"access":"read-write","comment":"","display":"Supported Features","filter":"^[0-9a-fA-F]{8}$","name":"supportedFeatures","type":"regex","value":"00000001"},{"access":"read-write","comment":"","display":"Default Single NSSAIs","filter":"","name":"defaultSingleNSSAIs","type":"string","value":"1-000001"},{"access":"read-write","comment":"","display":"Single NSSAIs","filter":"","name":"singleNssais","type":"string","value":"1-000002"}]', 7, '', 1752577177376, 'public'); +INSERT INTO "ne_config" VALUES (204, 'UDM', 'forbiddenAreas', 'Forbidden Areas', 'array', '[{"access":"read-only","comment":"","display":"Index","filter":"1~16","name":"index","type":"int","value":"1"},{"access":"read-write","comment":"","display":"Name","filter":"^.{1,32}$","name":"name","type":"string","value":"def_ambr"},{"access":"read-write","comment":"","display":"TACs","filter":"","name":"tacs","type":"string","value":"123"},{"access":"read-write","comment":"","display":"Area Codes","filter":"","name":"areaCodes","type":"string","value":"123456"}]', 9, '', 1752577177380, 'public'); +INSERT INTO "ne_config" VALUES (205, 'UDM', 'serviceAreaRestriction', 'Service Area Restriction', 'array', '[{"access":"read-only","comment":"","display":"Index","filter":"1~16","name":"index","type":"int","value":"1"},{"access":"read-write","comment":"","display":"Name","filter":"^.{1,32}$","name":"name","type":"string","value":"lab_sar"},{"access":"read-write","comment":"","display":"Restriction Type","filter":"{\"0\":\"Allowed Areas\", \"1\":\"Not Allowed Areas\"}","name":"restrictionType","type":"enum","value":"0"},{"access":"read-write","comment":"","display":"TACs","filter":"","name":"tacs","type":"string","value":"123"},{"access":"read-write","comment":"","display":"Area Codes","filter":"","name":"areaCodes","type":"string","value":"123456"},{"access":"read-write","comment":"","display":"Max TAs","filter":"^\\d{1,2}$","name":"maxTAs","type":"int","value":"1"}]', 11, '', 1752577177385, 'public'); +INSERT INTO "ne_config" VALUES (206, 'UDM', 'smfSelection', 'Subs SMF Selection', 'array', '[{"access":"read-only","comment":"","display":"Index","filter":"1~16","name":"index","type":"int","value":"1"},{"access":"read-write","comment":"","display":"Name","filter":"^.{1,32}$","name":"name","type":"string","value":"def_snssai"},{"access":"read-write","comment":"","display":"SNSSAI","filter":"^\\d{1,3}[A-Fa-f0-9]{6}$","name":"snssai","type":"string","value":"1-000001"},{"access":"read-only","array":[{"access":"read-only","comment":"","display":"Index","filter":"1~4","name":"index","type":"int","value":"1"},{"access":"read-write","comment":"","display":"DNN","filter":"^.{1,32}$","name":"dnn","type":"string","value":"internet"},{"access":"read-write","comment":"","display":"Default DNN Indicator","filter":"false;true;","name":"defaultDnnInd","type":"bool","value":"true"},{"access":"read-write","comment":"","display":"LBO Roaming Allowed","filter":"false;true;","name":"lboRoamingAllowed","type":"bool","value":"false"},{"access":"read-write","comment":"","display":"Interworking EPS Indicator","filter":"false;true;","name":"iwkEpsInd","type":"bool","value":"false"},{"access":"read-write","comment":"","display":"LADN Indicator","filter":"false;true;","name":"ladnIndicator","type":"bool","value":"false"}],"comment":"","display":"DNN List","filter":"1~4","name":"dnnList","type":"int","value":"1"}]', 13, '', 1752577177391, 'public'); +INSERT INTO "ne_config" VALUES (207, 'UDM', 'dnn', 'DNN Conf', 'array', '[{"access":"read-only","comment":"","display":"Index","filter":"1~16","name":"index","type":"int","value":"1"},{"access":"read-write","comment":"","display":"Name","filter":"^.{1,32}$","name":"name","type":"string","value":"def_nssai"},{"access":"read-write","comment":"","display":"Default PDU Session Type","filter":"{\"0\":\"IPv4\",\"1\":\"IPv6\",\"2\":\"IPv4v6\",\"3\":\"Ethernet\",\"4\":\"Unstruction\"}","name":"defaultPDUSessionType","type":"enum","value":"0"},{"access":"read-write","comment":"","display":"Allowed PDU Session Types","filter":"{\"0\":\"IPv4\",\"1\":\"IPv6\",\"2\":\"IPv4v6\",\"3\":\"Ethernet\",\"4\":\"Unstruction\",\"5\":\"IPv4 \u0026 IPv6\",\"6\":\"IPv4 \u0026 IPv4v6\",\"7\":\"IPv6 \u0026 IPv4v6\",\"8\":\"IPv4 \u0026 IPv6 \u0026 IPv4v6\"}","name":"allowedPDUSessionTypes","type":"enum","value":"0"},{"access":"read-write","comment":"","display":"5QI","filter":"0~255","name":"5qi","type":"int","value":"9"},{"access":"read-write","comment":"","display":"Priority Level","filter":"1~127","name":"priorityLevel","type":"int","value":"9"},{"access":"read-write","comment":"","display":"Default SSC Mode","filter":"{\"0\":\"SSC Mode1\",\"1\":\"SSC Mode2\",\"2\":\"SSC Mode3\"}","name":"defaultSSCmode","type":"enum","value":"0"},{"access":"read-write","comment":"","display":"Allowed SSC Modes","filter":"{\"0\":\"SSC Mode1\",\"1\":\"SSC Mode2\",\"2\":\"SSC Mode3\",\"3\":\"SSC Mode1 \u0026 SSC Mode2\",\"4\":\"SSC Mode1 \u0026 SSC Mode3\",\"5\":\"SSC Mode2 \u0026 SSC Mode3\",\"6\":\"SSC Mode1 \u0026 SSC Mode2 \u0026 SSC Mode3\"}","name":"allowedSSCmodes","type":"enum","value":"0"},{"access":"read-write","comment":"","display":"Interworking EPS Indicator","filter":"","name":"interworkingEPSIndicator","type":"bool","value":"1"},{"access":"read-write","comment":"","display":"LADN Indicator","filter":"","name":"ladnIndicator","type":"bool","value":"1"},{"access":"read-write","comment":"","display":"Charging Characteristics","filter":"4~4","name":"chargingCharacteristics","type":"string","value":"0001"},{"access":"read-write","comment":"","display":"Subscribed Session AMBR Uplink","filter":"^\\d+(\\.\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$","name":"subscribedSessionAmbrUL","type":"regex","value":"1 Gbps"},{"access":"read-write","comment":"","display":"Subscribed Session AMBR Downlink","filter":"^\\d+(\\.\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$","name":"subscribedSessionAmbrDL","type":"regex","value":"2 Gbps"},{"access":"read-write","comment":"","display":"Static IP Address","filter":"","name":"staticIPAddress","type":"ipv4","value":"192.168.1.100"},{"access":"read-write","comment":"","display":"User Plane Integrity","filter":"{\"0\":\"Null\",\"1\":\"Required\",\"2\":\"Preferred\",\"3\":\"Not Needed\"}","name":"userPlaneIntegrity","type":"enum","value":"3"},{"access":"read-write","comment":"","display":"User Plane Confidentiality","filter":"{\"0\":\"Null\",\"1\":\"Required\",\"2\":\"Preferred\",\"3\":\"Not Needed\"}","name":"userPlaneConfidentiality","type":"enum","value":"3"},{"access":"read-write","comment":"","display":"ARP Priority Level","filter":"0~255","name":"arpPriorityLevel","type":"int","value":"6"},{"access":"read-write","comment":"","display":"ARP Preempt Capability","filter":"{\"0\":\"Not Preempt\",\"1\":\"May Preempt\"}","name":"arpPreemptCap","type":"enum","value":"0"},{"access":"read-write","comment":"","display":"ARP Preempt Vulnerability","filter":"{\"0\":\"Not Preemptable\",\"1\":\"Preemptable\"}","name":"arpPreemptVuln","type":"enum","value":"0"}]', 15, '', 1752577177395, 'public'); +INSERT INTO "ne_config" VALUES (208, 'UDM', 'epsTemplate', 'EPS User Template', 'array', '[{"access":"read-only","comment":"","display":"Index","filter":"1~16","name":"index","type":"int","value":"1"},{"access":"read-write","comment":"","display":"Name","filter":"^.{0,31}$","name":"name","type":"string","value":"def_eps"},{"access":"read-write","comment":"","display":"AMBR Uplink","filter":"0~4294967295","name":"ambrUplink","type":"int","value":"100000000"},{"access":"read-write","comment":"","display":"AMBR Downlink","filter":"0~4294967295","name":"ambrDownlink","type":"int","value":"200000000"},{"access":"read-write","comment":"","display":"APN OI Replacement","filter":"^.{0,31}$","name":"apnOIReplacement","type":"string","value":"money"},{"access":"read-write","comment":"","display":"RFSP","filter":"","name":"rfsp","type":"int","value":"1"},{"access":"read-write","comment":"","display":"RAU TAU Timer","filter":"","name":"rauTauTimer","type":"int","value":"120"},{"access":"read-write","comment":"","display":"Charging Characteristic","filter":"4~4","name":"chargingCharacteristic","type":"string","value":"0001"}]', 17, '', 1752577177401, 'public'); +INSERT INTO "ne_config" VALUES (209, 'UDM', 'epsApn', 'EPS APN', 'array', '[{"access":"read-only","comment":"","display":"Index","filter":"1~16","name":"index","type":"int","value":"1"},{"access":"read-write","comment":"","display":"DNN","filter":"^.{0,127}$","name":"dnn","type":"string","value":"internet"},{"access":"read-write","comment":"","display":"PDN Type","filter":"{\"0\":\"IPv4\",\"1\":\"IPv6\",\"2\":\"IPv4v6\",\"3\":\"IPv4 or IPv6\"}","name":"pdnType","type":"enum","value":"0"},{"access":"read-write","comment":"","display":"QCI","filter":"1~255","name":"qci","type":"int","value":"9"},{"access":"read-write","comment":"","display":"ARP Priority","filter":"1~127","name":"arpPriorityLevel","type":"int","value":"8"},{"access":"read-write","comment":"","display":"ARP Preemption Capability","filter":"{\"0\":\"Not Preempt\",\"1\":\"May Preempt\"}","name":"arpPreemptCap","type":"enum","value":"0"},{"access":"read-write","comment":"","display":"ARP Preemption Vulnerability","filter":"{\"0\":\"Not Preemptable\",\"1\":\"Preemptable\"}","name":"arpPreemptVuln","type":"enum","value":"0"},{"access":"read-write","comment":"","display":"Context Identifier","filter":"","name":"contextIdentifier","type":"int","value":"1"},{"access":"read-write","comment":"","display":"VPLMN Dynamic Address Allowed","filter":"false;true;","name":"vplmnDynamicAddressAllowed","type":"bool","value":"true"},{"access":"read-write","comment":"","display":"PDN GW Allocation Type","filter":"{\"0\":\"Static\",\"1\":\"Dynamic\"}","name":"pdnGWAllocationType","type":"enum","value":"0"},{"access":"read-write","comment":"","display":"AMBR Uplink","filter":"0~4294967295","name":"ambrUplink","type":"int","value":"100000000"},{"access":"read-write","comment":"","display":"AMBR Downlink","filter":"0~4294967295","name":"ambrDownlink","type":"int","value":"200000000"},{"access":"read-write","comment":"","display":"Charging Characteristic","filter":"4~4","name":"chargingCharacteristic","type":"string","value":"0001"}]', 19, '', 1752577177405, 'public'); +INSERT INTO "ne_config" VALUES (210, 'UDM', 'applicationServer', 'Application Server', 'array', '[{"access":"read-only","comment":"","display":"Index","filter":"1~32","name":"index","type":"int","value":"1"},{"access":"read-write","comment":"","display":"AS Name","filter":"^.{1,31}$","name":"name","type":"string","value":"mmtel_as"},{"access":"read-write","comment":"","display":"Default Handling","filter":"{\"0\":\"Session Continued\",\"1\":\"Session Terminated\"}","name":"defaultHandling","type":"enum","value":"0"},{"access":"read-write","comment":"","display":"Server Name","filter":"^.{1,127}$","name":"serverName","type":"string","value":"sip:192.168.8.26:7060"},{"access":"read-write","comment":"","display":"Diameter Address","filter":"^.{1,127}$","name":"diameterAddress","type":"string","value":"mmtel.ims.mnc001.mcc001.3gppnetwork.org"},{"access":"read-write","comment":"","display":"Rep Data Size Limit","filter":"0~65535","name":"repDataSizeLimit","type":"int","value":"0"},{"access":"read-write","comment":"","display":"Include Register Request","filter":"false;true;","name":"includeRegisterRequest","type":"bool","value":"false"},{"access":"read-write","comment":"","display":"Include Register Response","filter":"false;true;","name":"includeRegisterResponse","type":"bool","value":"false"}]', 21, '', 1752577177410, 'public'); +INSERT INTO "ne_config" VALUES (211, 'UDM', 'scscfSet', 'SCSCF Set', 'array', '[{"access":"read-only","comment":"","display":"Index","filter":"1~8","name":"index","type":"int","value":"1"},{"access":"read-write","comment":"","display":"Name","filter":"^.{1,31}$","name":"name","type":"string","value":"mmtel_as"},{"access":"read-write","comment":"","display":"Priority","filter":"","name":"priority","type":"int","value":"1"},{"access":"read-write","comment":"","display":"Server Name","filter":"^.{1,127}$","name":"serverName","type":"string","value":"sip:scscf.ims.mnc001.mcc001.3gppnetwork.org:6060"}]', 23, '', 1752577177415, 'public'); +INSERT INTO "ne_config" VALUES (212, 'UDM', 'triggerPoint', 'Trigger Point', 'array', '[{"access":"read-only","comment":"","display":"Index","filter":"1~16","name":"index","type":"int","value":"1"},{"access":"read-write","comment":"","display":"Name","filter":"^.{1,32}$","name":"name","type":"string","value":"def_snssai"},{"access":"read-write","comment":"","display":"Condition Type CNF","filter":"0~1","name":"conditionTypeCNF","type":"int","value":"0"},{"access":"read-only","array":[{"access":"read-only","comment":"","display":"Index","filter":"1~4","name":"index","type":"int","value":"1"},{"access":"read-write","comment":"","display":"Enable","filter":"","name":"enable","type":"bool","value":"true"},{"access":"read-write","comment":"","display":"Condition Negated","filter":"0~1","name":"conditionNegated","type":"int","value":"0"},{"access":"read-write","comment":"","display":"Group","filter":"0~4096","name":"group","type":"int","value":"1"},{"access":"read-write","comment":"","display":"Method","filter":"^.{0,32}$","name":"method","type":"string","value":""},{"access":"read-write","comment":"","display":"SIP Header","filter":"^.{0,64}$","name":"sipHeader","type":"string","value":""},{"access":"read-write","comment":"","display":"SIP Content","filter":"^.{0,64}$","name":"sipContent","type":"string","value":""}],"comment":"","display":"SPT List","filter":"1~4","name":"sptList","type":"int","value":"1"}]', 25, '', 1752577177419, 'public'); +INSERT INTO "ne_config" VALUES (213, 'UDM', 's6aServer', 'S6a Server', 'list', '[{"access":"read-write","comment":"","display":"Enable","filter":"false;true;","name":"enable","type":"bool","value":"true"},{"access":"read-write","comment":"","display":"Link Type","filter":"{\"0\":\"TCP\",\"1\":\"SCTP\"}","name":"netType","type":"enum","value":"1"},{"access":"read-write","comment":"","display":"Address","filter":"","name":"addr","type":"string","value":"172.16.5.140:3868"},{"access":"read-write","comment":"","display":"Host","filter":"^.{1,127}$","name":"host","type":"string","value":"hss.ims.mnc001.mcc001.3gppnetwork.org"},{"access":"read-write","comment":"","display":"Realm","filter":"^.{1,127}$","name":"realm","type":"string","value":"ims.mnc001.mcc001.3gppnetwork.org"}]', 27, '', 1752577177423, 'public'); +INSERT INTO "ne_config" VALUES (214, 'UDM', 'cxServer', 'Cx Server', 'list', '[{"access":"read-write","comment":"","display":"Enable","filter":"false;true;","name":"enable","type":"bool","value":"true"},{"access":"read-write","comment":"","display":"Link Type","filter":"{\"0\":\"TCP\",\"1\":\"SCTP\"}","name":"netType","type":"enum","value":"0"},{"access":"read-write","comment":"","display":"Address","filter":"","name":"addr","type":"string","value":"172.16.5.140:3868"},{"access":"read-write","comment":"","display":"Host","filter":"^.{1,127}$","name":"host","type":"string","value":"hss.ims.mnc001.mcc001.3gppnetwork.org"},{"access":"read-write","comment":"","display":"Realm","filter":"^.{1,127}$","name":"realm","type":"string","value":"ims.mnc001.mcc001.3gppnetwork.org"}]', 29, '', 1752577177427, 'public'); -- 更新 UPF 配置 20250320 INSERT INTO "ne_config" VALUES (220, 'UPF', 'general', 'General', 'list', '[{"access":"read-write","comment":"","display":"Config File Directory","filter":"","name":"configFileDirectory","type":"string","value":"/usr/local/etc/upf/"},{"access":"read-write","comment":"","display":"EXE File Directory","filter":"","name":"exeFileDirectory","type":"string","value":"/usr/local/bin/"},{"access":"read-write","comment":"1~255","display":"System ID","filter":"","name":"systemId","type":"int","value":"1"},{"access":"read-write","comment":"1~8","display":"Data Forwarder Number","filter":"1~8","name":"dataForwarderNum","type":"int","value":"1"},{"access":"read-write","comment":"","display":"Common Statistic Interval","filter":"","name":"commonStatisticInterval","type":"int","value":"60"},{"access":"read-write","comment":"","display":"User Statistic Interval","filter":"","name":"userStatisticInterval","type":"int","value":"60"},{"access":"read-write","comment":"","display":"RX N3 OverLoad Threshold Mbps","filter":"","name":"rxN3OverLoadThresholdMbps","type":"int","value":"0"},{"access":"read-write","comment":"","display":"RX N6 OverLoad Threshold Mbps","filter":"","name":"rxN6OverLoadThresholdMbps","type":"int","value":"0"},{"access":"read-write","comment":"0~255","display":"Checksum Offload","filter":"0~255","name":"checksumOffload","type":"int","value":"0"},{"access":"read-write","comment":"","display":"Max Downlink Buffer Num","filter":"","name":"maxDownlinkBufferNum","type":"int","value":"50"}]', 1, '', 1742469466451, 'public'); @@ -133,22 +133,22 @@ INSERT INTO "ne_config" VALUES (235, 'UPF', 'dpiHeaderEnrichInfoList', 'DPI Head INSERT INTO "ne_config" VALUES (236, 'UPF', 'dpiAppList', 'DPI APP List', 'array', '[{"access":"read-write","comment":"1~32","display":"Index","filter":"1~32","name":"index","type":"int","value":"1"},{"access":"read-write","comment":"","display":"APP Name","filter":"","name":"appName","type":"string","value":""},{"access":"read-write","comment":"","display":"Proxy Enabled","filter":"0~1","name":"proxyEnabled","type":"int","value":"0"},{"access":"read-write","comment":"","display":"Force Check Type","filter":"0~1","name":"forceCheckType","type":"int","value":"0"},{"access":"read-write","comment":"","display":"N3 Interface ID","filter":"0~32","name":"n3InterfaceId","type":"int","value":"0"},{"access":"read-write","comment":"","display":"N6 Interface ID","filter":"0~32","name":"n6InterfaceId","type":"int","value":"0"},{"access":"read-write","array":[{"access":"read-only","comment":"1~32","display":"Index","filter":"1~32","name":"index","type":"int","value":"1"},{"access":"read-write","comment":"","display":"Rule ID","filter":"","name":"ruleId","type":"int","value":""},{"access":"read-write","comment":"","display":"REGEX Match","filter":"","name":"regexMatch","type":"string","value":""},{"access":"read-write","comment":"","display":"Flow Description","filter":"","name":"flowDescription","type":"string","value":""},{"access":"read-write","comment":"","display":"Custom Name","filter":"","name":"customName","type":"string","value":""}],"comment":"","display":"Rule List","filter":"0~32","name":"ruleList","type":"int","value":"1"}]', 35, '', 1742469466580, 'public'); INSERT INTO "ne_config" VALUES (237, 'UPF', 'networkControlFreeServerList', 'Free Server List', 'array', '[{"access":"read-write","comment":"1~32","display":"Index","filter":"1~32","name":"index","type":"int","value":"1"},{"access":"read-write","comment":"","display":"Enabled","filter":"0~1","name":"enabled","type":"int","value":"0"},{"access":"read-write","array":[{"access":"read-only","comment":"1~32","display":"Index","filter":"1~32","name":"index","type":"int","value":"1"},{"access":"read-write","comment":"","display":"Server IPv4","filter":"","name":"serverIpv4","type":"string","value":"0.0.0.0"},{"access":"read-write","comment":"","display":"Server IPv4 Mask","filter":"","name":"serverIpv4Mask","type":"string","value":"255.255.255.0"},{"access":"read-write","comment":"","display":"Server IPv6","filter":"","name":"serverIpv6","type":"string","value":""},{"access":"read-write","comment":"","display":"Server IPv6 Prefix","filter":"","name":"serverIpv6Prefix","type":"int","value":"64"}],"comment":"","display":"Free Server Address List","filter":"0~32","name":"freeServerAddrList","type":"int","value":"1"}]', 27, '', 1742469466563, 'public'); --- 更新 CBC 配置 20240823 -INSERT INTO "ne_config" VALUES (240, 'CBC', 'system', 'System Config', 'list', '[{"access":"read-write","comment":"","display":"CBC Name","filter":"0~64","name":"name","type":"string","value":"CBC"},{"access":"read-write","comment":"","display":"NF Instance","filter":"0~64","name":"instance","type":"string","value":"CBC-001"},{"access":"read-write","comment":"","display":"SBI Server IP","filter":"0~64","name":"sbiIp","type":"string","value":"127.0.0.1"},{"access":"read-write","comment":"0~65535","display":"SBI Server Port","filter":"0~65535","name":"sbiPort","type":"int","value":"9090"},{"access":"read-write","comment":"http or https","display":"SBI Scheme","filter":"{\"0\":\"http\",\"1\":\"https\"}","name":"sbiScheme","type":"enum","value":"0"}]', 1, '', 1724327154483, 'public'); -INSERT INTO "ne_config" VALUES (241, 'CBC', 'amfProfile', 'AMF Profile', 'array', '[{"access":"read-only","comment":"0~15","display":"Index","filter":"0~15","name":"index","type":"int","value":"0"},{"access":"read-write","comment":"","display":"NF Name","filter":"0~64","name":"name","type":"string","value":"AMF"},{"access":"read-write","comment":"","display":"AMF URI","filter":"0~64","name":"uri","type":"string","value":"http://172.16.5.130:8080"},{"access":"read-write","comment":"","display":"PLMN ID","filter":"^[0-9]{5,6}$","name":"plmnId","type":"regex","value":"00101"},{"access":"read-write","comment":"0~16777215","display":"TAC","filter":"0~8","name":"tac","type":"string","value":"1"}]', 3, '', 1724327154499, 'public'); -INSERT INTO "ne_config" VALUES (242, 'CBC', 'mmeProfile', 'MME Profile', 'array', '[{"access":"read-only","comment":"0~15","display":"Index","filter":"0~15","name":"index","type":"int","value":"0"},{"access":"read-write","comment":"","display":"NF Name","filter":"0~64","name":"name","type":"string","value":"MME"},{"access":"read-write","comment":"","display":"MME URI","filter":"0~64","name":"uri","type":"string","value":"sctp://192.168.1.1:9090"},{"access":"read-write","comment":"","display":"PLMN ID","filter":"^[0-9]{5,6}$","name":"plmnId","type":"regex","value":"00101"},{"access":"read-write","comment":"0~16777215","display":"TAC","filter":"0~8","name":"tac","type":"string","value":"1"}]', 5, '', 1724327154504, 'public'); +-- 更新 CBC 配置 20250715 +INSERT INTO "ne_config" VALUES (240, 'CBC', 'system', 'System Config', 'list', '[{"access":"read-write","comment":"","display":"CBC Name","filter":"0~64","name":"name","type":"string","value":"CBC"},{"access":"read-write","comment":"","display":"SBI Server IP","filter":"0~64","name":"sbiIp","type":"string","value":"127.0.0.1"},{"access":"read-write","comment":"0~65535","display":"SBI Server Port","filter":"0~65535","name":"sbiPort","type":"int","value":"9090"},{"access":"read-write","comment":"","display":"SBI Scheme","filter":"{\"0\":\"http\",\"1\":\"https\"}","name":"sbiScheme","type":"enum","value":"0"},{"access":"read-write","comment":"0~65535","display":"SBI Timeout","filter":"0~65535","name":"sbiTimeout","type":"int","value":"3"}]', 1, '', 1752577098470, 'public'); +INSERT INTO "ne_config" VALUES (241, 'CBC', 'amfProfile', 'AMF Profile', 'array', '[{"access":"read-only","comment":"0~15","display":"Index","filter":"0~15","name":"index","type":"int","value":"0"},{"access":"read-write","comment":"apply the current AMF NF Profile","display":"Enable AMF","filter":"{\"0\":\"false\",\"1\":\"true\"}","name":"enabled","type":"bool","value":"1"},{"access":"read-write","comment":"","display":"NF Name","filter":"0~64","name":"name","type":"string","value":"AMF"},{"access":"read-write","comment":"format: http://\u003cIP\u003e:\u003cPORT\u003e e.g: http://192.168.1.1:9090","display":"AMF URI","filter":"0~64","name":"uri","type":"string","value":"http://172.16.5.130:8080"},{"access":"read-write","array":[{"access":"read-only","comment":"1~32","display":"Index","filter":"1~32","name":"index","type":"int","value":"1"},{"access":"read-write","comment":"","display":"MCC","filter":"^\\d{3,3}$","name":"mcc","type":"regex","value":"460"},{"access":"read-write","comment":"","display":"MNC","filter":"^\\d{2,3}$","name":"mnc","type":"regex","value":"00"},{"access":"read-write","comment":"(A).format is decimal string,e.g:43888 (B).Allow set multiple tac value by ; split, e:4388;4360 ","display":"TAC","filter":"^(\\d+(;\\d+)*)?$","name":"tac","type":"regex","value":"4388"}],"comment":"allow TaiList null or add more tai value","display":"Tai List","filter":"","name":"taiList","type":"regex","value":""}]', 3, '', 1752577099153, 'public'); +INSERT INTO "ne_config" VALUES (242, 'CBC', 'mmeProfile', 'MME Profile', 'array', '[{"access":"read-only","comment":"0~15","display":"Index","filter":"0~15","name":"index","type":"int","value":"0"},{"access":"read-write","comment":"apply the current MME NF Profile","display":"Enable MME","filter":"{\"0\":\"false\",\"1\":\"true\"}","name":"enabled","type":"bool","value":"1"},{"access":"read-write","comment":"","display":"NF Name","filter":"0~64","name":"name","type":"string","value":"MME"},{"access":"read-write","comment":"format: sctp://\u003cIP\u003e:\u003cPORT\u003e e.g: sctp://192.168.1.1:9090","display":"MME URI","filter":"0~64","name":"uri","type":"string","value":"sctp://192.168.1.1:9090"},{"access":"read-write","array":[{"access":"read-only","comment":"1~32","display":"Index","filter":"1~32","name":"index","type":"int","value":"1"},{"access":"read-write","comment":"","display":"MCC","filter":"^\\d{3,3}$","name":"mcc","type":"regex","value":"460"},{"access":"read-write","comment":"","display":"MNC","filter":"^\\d{2,3}$","name":"mnc","type":"regex","value":"00"},{"access":"read-write","comment":"(A).format is decimal string,e.g:43888 (B).Allow set multiple tac value by ; split, e:4388;4360 ","display":"TAC","filter":"^(\\d+(;\\d+)*)?$","name":"tac","type":"regex","value":"4388"}],"comment":"allow TaiList null or add more tai value","display":"Tai List","filter":"","name":"taiList","type":"regex","value":""}]', 5, '', 1752577099228, 'public'); --- 更新 OMC 配置 2025627 -INSERT INTO "ne_config" VALUES (260, 'OMC', 'alarmEmailForward', 'Alarm Email Forward Interface', 'list', '[{"access":"rw","comment":"Is it enabled forward alarm with Email interface","display":"Enable","filter":"true;false","name":"enable","type":"bool","value":"true"},{"access":"rw","comment":"string, no variable support","display":"Email Title","filter":"","name":"title","type":"string","value":""},{"access":"rw","comment":"","display":"Email List","filter":"","name":"emailList","type":"string","value":""},{"access":"rw","comment":"Email SMTP server","display":"SMTP Server","filter":"","name":"smtp","type":"string","value":""},{"access":"rw","comment":"","display":"Port","filter":"0~65535","name":"port","type":"int","value":""},{"access":"rw","comment":"","display":"User","filter":"","name":"user","type":"string","value":""},{"access":"rw","comment":"","display":"Password","filter":"","name":"password","type":"string","value":""},{"access":"rw","comment":"If skip TLS verify (true/false)","display":"TLS Skip Verify","filter":"true;false","name":"tlsSkipVerify","type":"bool","value":"true"}]', 3, '', 1751013716061, 'public'); -INSERT INTO "ne_config" VALUES (261, 'OMC', 'alarmSMSForward', 'Alarm SMS Forward Interface', 'list', '[{"access":"rw","comment":"Is it enabled forward alarm with SMS interface","display":"Enable","filter":"true;false","name":"enable","type":"bool","value":"true"},{"access":"rw","comment":"Multiple mobile separated by commas","display":"Mobile List","filter":"","name":"mobileList","type":"string","value":""},{"access":"rw","comment":"The SMSC SMPP Address","display":"SMSC Address","filter":"","name":"smscAddr","type":"string","value":""},{"access":"rw","comment":"","display":"System ID","filter":"","name":"systemID","type":"string","value":""},{"access":"rw","comment":"","display":"Password","filter":"","name":"password","type":"string","value":""},{"access":"rw","comment":"","display":"System Type","filter":"","name":"systemType","type":"string","value":""},{"access":"rw","comment":"Short message coding type","display":"Data Coding","filter":"{\"0\":\"GSM7BIT\",\"1\":\"ASCII\",\"2\":\"BINARY8BIT1\",\"3\":\"LATIN1\",\"4\":\"BINARY8BIT2\",\"6\":\"CYRILLIC\",\"7\":\"HEBREW\",\"8\":\"UCS2\"}","name":"dataCoding","type":"enum","value":"GSM7BIT"},{"access":"rw","comment":"It is the source address, the length is between 3 and 20","display":"Service Number","filter":"3~20","name":"serviceNumber","type":"string","value":"OMC"}]', 4, '', 1750993234232, 'public'); -INSERT INTO "ne_config" VALUES (262, 'OMC', 'trace', 'NE Signaling Trace', 'list', '[{"access":"read-write","comment":"enable or disable NE signaling trace creation","display":"Enable","filter":"{\"0\":\"false\",\"1\":\"true\"}","name":"enabled","type":"bool","value":"false"},{"access":"read-write","comment":"NE signaling trace host address","display":"Host","filter":"0~128","name":"host","type":"ipv4","value":"172.16.5.100"},{"access":"read-write","comment":"NE signaling trace port","display":"Port","filter":"3000~65530","name":"port","type":"int","value":"33033"}]', 1, '', 1750993234209, 'public'); +-- 更新 OMC 配置 20250715 +INSERT INTO "ne_config" VALUES (260, 'OMC', 'trace', 'NE Signaling Trace', 'list', '[{"access":"read-write","comment":"enable or disable NE signaling trace creation","display":"Enable","filter":"{\"0\":\"false\",\"1\":\"true\"}","name":"enabled","type":"bool","value":"false"},{"access":"read-write","comment":"NE signaling trace host address","display":"Host","filter":"0~128","name":"host","type":"ipv4","value":"172.16.5.100"},{"access":"read-write","comment":"NE signaling trace port","display":"Port","filter":"3000~65530","name":"port","type":"int","value":"33033"}]', 1, '', 1752576919477, 'public'); +INSERT INTO "ne_config" VALUES (261, 'OMC', 'notificationEmail', 'Alarm Email Forward Interface', 'list', '[{"access":"rw","comment":"Is it enabled forward alarm with Email interface","display":"Enable","filter":"{\"0\":\"false\",\"1\":\"true\"}","name":"enable","type":"bool","value":"true"},{"access":"rw","comment":"","display":"Email List","filter":"","name":"list","type":"string","value":""},{"access":"rw","comment":"string, no variable support","display":"Email Title","filter":"","name":"title","type":"string","value":""},{"access":"rw","comment":"Email SMTP server","display":"SMTP Server","filter":"","name":"smtp","type":"string","value":""},{"access":"rw","comment":"","display":"Port","filter":"0~65535","name":"port","type":"int","value":""},{"access":"rw","comment":"","display":"User","filter":"","name":"user","type":"string","value":""},{"access":"rw","comment":"","display":"Password","filter":"","name":"password","type":"string","value":""}]', 3, '', 1752576919810, 'public'); +INSERT INTO "ne_config" VALUES (262, 'OMC', 'notificationSMSC', 'Alarm SMS Forward Interface', 'list', '[{"access":"rw","comment":"Is it enabled forward alarm with SMS interface","display":"Enable","filter":"true;false","name":"enable","type":"bool","value":"true"},{"access":"rw","comment":"Multiple mobile separated by commas","display":"Mobile List","filter":"","name":"list","type":"string","value":""},{"access":"rw","comment":"The SMSC SMPP Address","display":"SMSC Address","filter":"","name":"addr","type":"string","value":""},{"access":"rw","comment":"","display":"System ID","filter":"","name":"systemid","type":"string","value":""},{"access":"rw","comment":"","display":"System Type","filter":"","name":"systemtype","type":"string","value":""},{"access":"rw","comment":"","display":"Password","filter":"","name":"password","type":"string","value":""},{"access":"rw","comment":"Short message coding type","display":"Data Coding","filter":"{\"0\":\"GSM7BIT\",\"1\":\"ASCII\",\"2\":\"BINARY8BIT1\",\"3\":\"LATIN1\",\"4\":\"BINARY8BIT2\",\"6\":\"CYRILLIC\",\"7\":\"HEBREW\",\"8\":\"UCS2\"}","name":"coding","type":"enum","value":"GSM7BIT"},{"access":"rw","comment":"It is the source address, the length is between 3 and 20","display":"Service Number","filter":"3~20","name":"servicenumber","type":"string","value":"OMC"}]', 4, '', 1752576919817, 'public'); -- 更新 SMSC 配置 2025521 -INSERT INTO "ne_config" VALUES (280, 'SMSC', 'system', 'System', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"CDR Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"cdrFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SM Validity\",\"filter\":\"0-2147483647\",\"name\":\"smValidity\",\"type\":\"int\",\"value\":\"259200\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Log Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"logFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"Enable or disable resend pending SMS to unattainable local users.\",\"display\":\"Local Polling Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"localPollingFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"Enable or disable resend pending SMS to unattainable outbound roaming users.\",\"display\":\"Local Roaming Out Polling Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"localRoamingOutPollingFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"Enable or disable resend pending SMS to unattainable inbound roaming users.\",\"display\":\"Visitor Roaming In Polling Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"visitorRoamingInPollingFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"Enable or disable resend pending SMS to other unattainable users.\",\"display\":\"Other Polling Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"otherPollingFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"Define the maximum port number that the queue of pending SMS may grow to.\",\"display\":\"Polling Number\",\"filter\":\"0-64\",\"name\":\"pollingNumber\",\"type\":\"int\",\"value\":\"64\"},{\"access\":\"read-write\",\"comment\":\"Specify the priority parameter of SM_RP_PRI. true = High; false = Low.\",\"display\":\"Priority Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"priorityFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"Enable or disable TP-Reply-Path parameter in the SMS-DELIVER data unit.\",\"display\":\"TP Reply Path Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"tpReplyPathFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SMSC Number\",\"filter\":\"0~32\",\"name\":\"smscNumber\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SMSC Domain\",\"filter\":\"0~16\",\"name\":\"smscDomain\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"CSFB VoLTE Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"csfbVolteFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Camel Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"camelFlag\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SCF Address\",\"filter\":\"0~16\",\"name\":\"scfAddress\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"If add plus then set false\",\"display\":\"MT Id Format Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"mtIdFormatFlag\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"enable mcast sms\",\"display\":\"Mcast Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"mcastFlag\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Log Level\",\"filter\":\"{\\\"0\\\":\\\"none\\\",\\\"1\\\":\\\"error\\\",\\\"2\\\":\\\"debug\\\"}\",\"name\":\"logLevel\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"The MB sizeof log file\",\"display\":\"Log Size\",\"filter\":\"1-1000\",\"name\":\"logSize\",\"type\":\"int\",\"value\":\"200\"},{\"access\":\"read-write\",\"comment\":\"The number of log file\",\"display\":\"Log Number\",\"filter\":\"1-20\",\"name\":\"logNum\",\"type\":\"int\",\"value\":\"10\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Log Directory\",\"filter\":\"0~128\",\"name\":\"logDir\",\"type\":\"string\",\"value\":\"/var/log/\"}]', 1, '', 1747799255683, 'public'); -INSERT INTO "ne_config" VALUES (281, 'SMSC', 'msisdnsegment', 'MSISDN Segment List', 'array', '[{\"access\":\"read-only\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Start MSISDN\",\"filter\":\"0~32\",\"name\":\"startMSISDN\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"End MSISDN\",\"filter\":\"0~32\",\"name\":\"endMSISDN\",\"type\":\"string\",\"value\":\"0\"}]', 3, 'put', 1747799256006, 'public'); -INSERT INTO "ne_config" VALUES (282, 'SMSC', 'smpplink', 'SMPP Link List', 'array', '[{\"access\":\"read-only\",\"comment\":\"0~63\",\"display\":\"Index\",\"filter\":\"0~63\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Link Alias\",\"filter\":\"0~32\",\"name\":\"linkAlias\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Session Type\",\"filter\":\"{\\\"0\\\":\\\"bindTX\\\",\\\"1\\\":\\\"bindRX\\\",\\\"2\\\":\\\"bindTRX\\\"}\",\"name\":\"sessionType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Service Number\",\"filter\":\"0~32\",\"name\":\"serviceNumber\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Data Coding Scheme\",\"filter\":\"{\\\"0\\\":\\\"smpp7def7\\\",\\\"1\\\":\\\"smpp8dcs4def7\\\",\\\"2\\\":\\\"smpp8dcs0def7\\\",\\\"16\\\":\\\"smpp7def8\\\",\\\"17\\\":\\\"smpp8dcs4def8\\\",\\\"18\\\":\\\"smpp8dcs0def8\\\",\\\"19\\\":\\\"smpp8dcs0Unpack7\\\",\\\"20\\\":\\\"smpp8dcs0ISO8859\\\"}\",\"name\":\"dataCodingScheme\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Platform Num\",\"filter\":\"{\\\"0\\\":\\\"plat0\\\",\\\"1\\\":\\\"plat1\\\",\\\"2\\\":\\\"ignore\\\"}\",\"name\":\"platformNum\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Time To Live\",\"filter\":\"0-2147483647\",\"name\":\"timeToLive\",\"type\":\"int\",\"value\":\"604800\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Manipulation Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"manipulationFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Type of Number\",\"filter\":\"{\\\"0\\\":\\\"unknown\\\",\\\"1\\\":\\\"international\\\",\\\"2\\\":\\\"national\\\",\\\"3\\\":\\\"networkSpecific\\\",\\\"4\\\":\\\"subscriberNumber\\\",\\\"5\\\":\\\"alphanumeric\\\",\\\"6\\\":\\\"abbreviated\\\"}\",\"name\":\"ton\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Number Plan Indicator\",\"filter\":\"{\\\"0\\\":\\\"unknown\\\",\\\"1\\\":\\\"isdn\\\",\\\"3\\\":\\\"data\\\",\\\"4\\\":\\\"telex\\\",\\\"6\\\":\\\"landMobile\\\",\\\"8\\\":\\\"national\\\",\\\"9\\\":\\\"private\\\",\\\"10\\\":\\\"ermes\\\",\\\"14\\\":\\\"internet\\\",\\\"18\\\":\\\"wapClientID\\\"}\",\"name\":\"npi\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Role Type\",\"filter\":\"{\\\"0\\\":\\\"server\\\",\\\"1\\\":\\\"client\\\"}\",\"name\":\"roleType\",\"type\":\"enum\",\"value\":\"0\"}]', 5, 'post,put,delete', 1747799256626, 'public'); -INSERT INTO "ne_config" VALUES (283, 'SMSC', 'convprefix', 'Conv Prefix List', 'array', '[{\"access\":\"read-only\",\"comment\":\"0~127\",\"display\":\"Index\",\"filter\":\"0~127\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Prefix\",\"filter\":\"0~16\",\"name\":\"prefix\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Delete Length\",\"filter\":\"0-16\",\"name\":\"deleteLength\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Add Length\",\"filter\":\"0-16\",\"name\":\"addLength\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Add Digits\",\"filter\":\"0~16\",\"name\":\"addDigits\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Number Length\",\"filter\":\"0-32\",\"name\":\"numberLength\",\"type\":\"int\",\"value\":\"0\"}]', 7, 'post,put,delete', 1747799256855, 'public'); -INSERT INTO "ne_config" VALUES (284, 'SMSC', 'smppparam', 'SMPP Param List', 'array', '[{\"access\":\"read-only\",\"comment\":\"0~31\",\"display\":\"Index\",\"filter\":\"0~31\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Link Alias\",\"filter\":\"0-8\",\"name\":\"linkAlias\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Link Type\",\"filter\":\"{\\\"0\\\":\\\"udp\\\",\\\"1\\\":\\\"tcp\\\"}\",\"name\":\"linkType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Server Type\",\"filter\":\"{\\\"0\\\":\\\"client\\\",\\\"1\\\":\\\"server\\\"}\",\"name\":\"serverType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Session Type\",\"filter\":\"{\\\"0\\\":\\\"bindTX\\\",\\\"1\\\":\\\"bindRX\\\",\\\"2\\\":\\\"bindTRX\\\"}\",\"name\":\"sessionType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"System ID\",\"filter\":\"0-16\",\"name\":\"systemID\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Password\",\"filter\":\"0-8\",\"name\":\"password\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"System Type\",\"filter\":\"0-12\",\"name\":\"systemType\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Local GTT\",\"filter\":\"0-16\",\"name\":\"localGTT\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Remote GTT\",\"filter\":\"0-16\",\"name\":\"remoteGTT\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Local IP\",\"filter\":\"0-32\",\"name\":\"localIP\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Remote IP\",\"filter\":\"0-32\",\"name\":\"remoteIP\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Session Init Timer\",\"filter\":\"0-65535\",\"name\":\"sessionInitTimer\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Enquire Link Timer\",\"filter\":\"0-65535\",\"name\":\"enquireLinkTimer\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Inactivity Timer\",\"filter\":\"0-65535\",\"name\":\"inactivityTimer\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Response Timer\",\"filter\":\"0-65535\",\"name\":\"responseTimer\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Local SSN\",\"filter\":\"0-255\",\"name\":\"localSSN\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Remote SSN\",\"filter\":\"0-255\",\"name\":\"remoteSSN\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Enable Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"enable\",\"type\":\"bool\",\"value\":\"1\"}]', 9, 'put', 1747799257026, 'public'); +INSERT INTO "ne_config" VALUES (280, 'SMSC', 'system', 'System', 'list', '[{"access":"read-write","comment":"","display":"CDR Flag","filter":"{\"0\":\"false\",\"1\":\"true\"}","name":"cdrFlag","type":"bool","value":"1"},{"access":"read-write","comment":"","display":"SM Validity","filter":"0-2147483647","name":"smValidity","type":"int","value":"259200"},{"access":"read-write","comment":"","display":"Log Flag","filter":"{\"0\":\"false\",\"1\":\"true\"}","name":"logFlag","type":"bool","value":"1"},{"access":"read-write","comment":"Enable or disable resend pending SMS to unattainable local users.","display":"Local Polling Flag","filter":"{\"0\":\"false\",\"1\":\"true\"}","name":"localPollingFlag","type":"bool","value":"1"},{"access":"read-write","comment":"Enable or disable resend pending SMS to unattainable outbound roaming users.","display":"Local Roaming Out Polling Flag","filter":"{\"0\":\"false\",\"1\":\"true\"}","name":"localRoamingOutPollingFlag","type":"bool","value":"1"},{"access":"read-write","comment":"Enable or disable resend pending SMS to unattainable inbound roaming users.","display":"Visitor Roaming In Polling Flag","filter":"{\"0\":\"false\",\"1\":\"true\"}","name":"visitorRoamingInPollingFlag","type":"bool","value":"1"},{"access":"read-write","comment":"Enable or disable resend pending SMS to other unattainable users.","display":"Other Polling Flag","filter":"{\"0\":\"false\",\"1\":\"true\"}","name":"otherPollingFlag","type":"bool","value":"1"},{"access":"read-write","comment":"Define the maximum port number that the queue of pending SMS may grow to.","display":"Polling Number","filter":"0-64","name":"pollingNumber","type":"int","value":"64"},{"access":"read-write","comment":"Specify the priority parameter of SM_RP_PRI. true = High; false = Low.","display":"Priority Flag","filter":"{\"0\":\"false\",\"1\":\"true\"}","name":"priorityFlag","type":"bool","value":"1"},{"access":"read-write","comment":"Enable or disable TP-Reply-Path parameter in the SMS-DELIVER data unit.","display":"TP Reply Path Flag","filter":"{\"0\":\"false\",\"1\":\"true\"}","name":"tpReplyPathFlag","type":"bool","value":"1"},{"access":"read-write","comment":"","display":"SMSC Number","filter":"0~32","name":"smscNumber","type":"string","value":"0"},{"access":"read-write","comment":"","display":"SMSC Domain","filter":"0~16","name":"smscDomain","type":"string","value":"0.0.0.0"},{"access":"read-write","comment":"","display":"CSFB VoLTE Flag","filter":"{\"0\":\"false\",\"1\":\"true\"}","name":"csfbVolteFlag","type":"bool","value":"1"},{"access":"read-write","comment":"","display":"Camel Flag","filter":"{\"0\":\"false\",\"1\":\"true\"}","name":"camelFlag","type":"bool","value":"0"},{"access":"read-write","comment":"","display":"SCF Address","filter":"0~16","name":"scfAddress","type":"string","value":"0.0.0.0"},{"access":"read-write","comment":"If add plus then set false","display":"MT Id Format Flag","filter":"{\"0\":\"false\",\"1\":\"true\"}","name":"mtIdFormatFlag","type":"bool","value":"0"},{"access":"read-write","comment":"enable mcast sms","display":"Mcast Flag","filter":"{\"0\":\"false\",\"1\":\"true\"}","name":"mcastFlag","type":"bool","value":"0"},{"access":"read-write","comment":"","display":"Log Level","filter":"{\"0\":\"none\",\"1\":\"error\",\"2\":\"debug\"}","name":"logLevel","type":"enum","value":"0"},{"access":"read-write","comment":"The MB sizeof log file","display":"Log Size","filter":"1-1000","name":"logSize","type":"int","value":"200"},{"access":"read-write","comment":"The number of log file","display":"Log Number","filter":"1-20","name":"logNum","type":"int","value":"10"},{"access":"read-write","comment":"","display":"Log Directory","filter":"0~128","name":"logDir","type":"string","value":"/var/log/"}]', 1, '', 1751438862010, 'public'); +INSERT INTO "ne_config" VALUES (281, 'SMSC', 'msisdnsegment', 'MSISDN Segment List', 'array', '[{"access":"read-only","comment":"0~15","display":"Index","filter":"0~15","name":"index","type":"int","value":"0"},{"access":"read-write","comment":"","display":"Start MSISDN","filter":"0~32","name":"startMSISDN","type":"string","value":"0"},{"access":"read-write","comment":"","display":"End MSISDN","filter":"0~32","name":"endMSISDN","type":"string","value":"0"}]', 3, 'put', 1751438862028, 'public'); +INSERT INTO "ne_config" VALUES (282, 'SMSC', 'smpplink', 'SMPP Link List', 'array', '[{"access":"read-only","comment":"0~63","display":"Index","filter":"0~63","name":"index","type":"int","value":"0"},{"access":"read-write","comment":"","display":"Link Alias","filter":"0~32","name":"linkAlias","type":"string","value":"0"},{"access":"read-write","comment":"","display":"Session Type","filter":"{\"0\":\"bindTX\",\"1\":\"bindRX\",\"2\":\"bindTRX\"}","name":"sessionType","type":"enum","value":"0"},{"access":"read-write","comment":"","display":"Service Number","filter":"0~32","name":"serviceNumber","type":"string","value":"0"},{"access":"read-write","comment":"","display":"Data Coding Scheme","filter":"{\"0\":\"smpp7def7\",\"1\":\"smpp8dcs4def7\",\"2\":\"smpp8dcs0def7\",\"16\":\"smpp7def8\",\"17\":\"smpp8dcs4def8\",\"18\":\"smpp8dcs0def8\",\"19\":\"smpp8dcs0Unpack7\",\"20\":\"smpp8dcs0ISO8859\"}","name":"dataCodingScheme","type":"enum","value":"0"},{"access":"read-write","comment":"","display":"Platform Num","filter":"{\"0\":\"plat0\",\"1\":\"plat1\",\"2\":\"ignore\"}","name":"platformNum","type":"enum","value":"0"},{"access":"read-write","comment":"","display":"Time To Live","filter":"0-2147483647","name":"timeToLive","type":"int","value":"604800"},{"access":"read-write","comment":"","display":"Manipulation Flag","filter":"{\"0\":\"false\",\"1\":\"true\"}","name":"manipulationFlag","type":"bool","value":"1"},{"access":"read-write","comment":"","display":"Type of Number","filter":"{\"0\":\"unknown\",\"1\":\"international\",\"2\":\"national\",\"3\":\"networkSpecific\",\"4\":\"subscriberNumber\",\"5\":\"alphanumeric\",\"6\":\"abbreviated\"}","name":"ton","type":"enum","value":"0"},{"access":"read-write","comment":"","display":"Number Plan Indicator","filter":"{\"0\":\"unknown\",\"1\":\"isdn\",\"3\":\"data\",\"4\":\"telex\",\"6\":\"landMobile\",\"8\":\"national\",\"9\":\"private\",\"10\":\"ermes\",\"14\":\"internet\",\"18\":\"wapClientID\"}","name":"npi","type":"enum","value":"0"},{"access":"read-write","comment":"","display":"Role Type","filter":"{\"0\":\"server\",\"1\":\"client\"}","name":"roleType","type":"enum","value":"0"}]', 5, 'post,put,delete', 1751438862033, 'public'); +INSERT INTO "ne_config" VALUES (283, 'SMSC', 'convprefix', 'Conv Prefix List', 'array', '[{"access":"read-only","comment":"0~127","display":"Index","filter":"0~127","name":"index","type":"int","value":"0"},{"access":"read-write","comment":"","display":"Prefix","filter":"0~16","name":"prefix","type":"string","value":"0"},{"access":"read-write","comment":"","display":"Delete Length","filter":"0-16","name":"deleteLength","type":"int","value":"0"},{"access":"read-write","comment":"","display":"Add Length","filter":"0-16","name":"addLength","type":"int","value":"0"},{"access":"read-write","comment":"","display":"Add Digits","filter":"0~16","name":"addDigits","type":"string","value":"0"},{"access":"read-write","comment":"","display":"Number Length","filter":"0-32","name":"numberLength","type":"int","value":"0"}]', 7, 'post,put,delete', 1751438862037, 'public'); +INSERT INTO "ne_config" VALUES (284, 'SMSC', 'smppparam', 'SMPP Param List', 'array', '[{"access":"read-only","comment":"0~31","display":"Index","filter":"0~31","name":"index","type":"int","value":"0"},{"access":"read-write","comment":"","display":"Link Alias","filter":"0-8","name":"linkAlias","type":"string","value":"0"},{"access":"read-write","comment":"","display":"Link Type","filter":"{\"0\":\"udp\",\"1\":\"tcp\"}","name":"linkType","type":"enum","value":"0"},{"access":"read-write","comment":"","display":"Server Type","filter":"{\"0\":\"client\",\"1\":\"server\"}","name":"serverType","type":"enum","value":"0"},{"access":"read-write","comment":"","display":"Session Type","filter":"{\"0\":\"bindTX\",\"1\":\"bindRX\",\"2\":\"bindTRX\"}","name":"sessionType","type":"enum","value":"0"},{"access":"read-write","comment":"","display":"System ID","filter":"0-16","name":"systemID","type":"string","value":"0"},{"access":"read-write","comment":"","display":"Password","filter":"0-8","name":"password","type":"string","value":"0"},{"access":"read-write","comment":"","display":"System Type","filter":"0-12","name":"systemType","type":"string","value":"0"},{"access":"read-write","comment":"","display":"Local GTT","filter":"0-16","name":"localGTT","type":"string","value":"0"},{"access":"read-write","comment":"","display":"Remote GTT","filter":"0-16","name":"remoteGTT","type":"string","value":"0"},{"access":"read-write","comment":"","display":"Local IP","filter":"0-32","name":"localIP","type":"string","value":"0"},{"access":"read-write","comment":"","display":"Remote IP","filter":"0-32","name":"remoteIP","type":"string","value":"0"},{"access":"read-write","comment":"","display":"Session Init Timer","filter":"0-65535","name":"sessionInitTimer","type":"int","value":"0"},{"access":"read-write","comment":"","display":"Enquire Link Timer","filter":"0-65535","name":"enquireLinkTimer","type":"int","value":"0"},{"access":"read-write","comment":"","display":"Inactivity Timer","filter":"0-65535","name":"inactivityTimer","type":"int","value":"0"},{"access":"read-write","comment":"","display":"Response Timer","filter":"0-65535","name":"responseTimer","type":"int","value":"0"},{"access":"read-write","comment":"","display":"Local SSN","filter":"0-255","name":"localSSN","type":"int","value":"0"},{"access":"read-write","comment":"","display":"Remote SSN","filter":"0-255","name":"remoteSSN","type":"int","value":"0"},{"access":"read-write","comment":"","display":"Enable Flag","filter":"{\"0\":\"false\",\"1\":\"true\"}","name":"enable","type":"bool","value":"1"}]', 9, 'put', 1751438862041, 'public'); -- 更新 SGWC 配置 20241219 INSERT INTO "ne_config" VALUES (300, 'SGWC', 'sgwcSystem', 'System Config', 'list', '[{"access":"read-write","comment":"IPv4/IPv6/IPv4v6","display":"Local S11 IP Type","filter":"^(IPv4|IPv6|IPv4v6)$","name":"s11IpType","type":"string","value":""},{"access":"read-write","comment":"IPv4 Format","display":"Local S11 IPv4","filter":"","name":"s11Ipv4","type":"string","value":"172.16.5.80"},{"access":"read-write","comment":"IPv6 Format","display":"Local S11 IPv6","filter":"","name":"s11Ipv6","type":"string","value":""},{"access":"read-write","comment":"IPv4/IPv6/IPv4v6","display":"Local S5/S8 IP Type","filter":"^(IPv4|IPv6|IPv4v6)$","name":"s58IpType","type":"string","value":""},{"access":"read-write","comment":"IPv4 Format","display":"Local S5/S8 IPv4","filter":"","name":"s58Ipv4","type":"string","value":"172.16.5.81"},{"access":"read-write","comment":"IPv6 Format","display":"Local S5/S8 IPv6","filter":"","name":"s58Ipv6","type":"string","value":""},{"access":"read-write","comment":"IPv4/IPv6/IPv4v6","display":"Local Sx IP Type","filter":"^(IPv4|IPv6|IPv4v6)$","name":"sxIpType","type":"string","value":""},{"access":"read-write","comment":"IPv4 Format","display":"Local Sx IPv4","filter":"","name":"sxIpv4","type":"string","value":"172.16.5.81"},{"access":"read-write","comment":"IPv6 Format","display":"Local Sx IPv6","filter":"","name":"sxIpv6","type":"string","value":""}]', 1, '', 1734512800790, 'public'); diff --git a/build/database/lite/install/alarm.sql b/build/database/lite/install/alarm.sql index 094631bd..31dd1b40 100644 --- a/build/database/lite/install/alarm.sql +++ b/build/database/lite/install/alarm.sql @@ -15,22 +15,22 @@ CREATE TABLE "alarm" ( "alarm_code" integer(11), "event_time" integer(20), "alarm_type" text(64), - "orig_severity" text(10), - "perceived_severity" text(10), + "orig_severity" text(64), + "perceived_severity" text(64), "object_uid" text(64), "object_name" text(64), "object_type" text(20), "location_info" text(2048), - "alarm_status" text(10), + "alarm_status" text(64), "specific_problem" text(255), "specific_problem_id" text(100), "add_info" text(2048), - "ack_state" integer(11), + "ack_state" text(64), "ack_time" integer(20), - "ack_user" text(16), - "clear_type" integer(11), + "ack_user" text(64), + "clear_type" text(64), "clear_time" integer(20), - "clear_user" text(16), + "clear_user" text(64), "timestamp" integer(20), PRIMARY KEY ("id") ); @@ -44,12 +44,11 @@ ON "alarm" ( "orig_severity" ASC, "event_time" ASC ); -CREATE UNIQUE INDEX "uk_uni_aid_ne_aseq" +CREATE UNIQUE INDEX "uk_uni_ne_aid" ON "alarm" ( "ne_type" ASC, "ne_id" ASC, - "alarm_id" ASC, - "alarm_seq" ASC + "alarm_id" ASC ); -- ---------------------------- diff --git a/build/database/lite/install/alarm_event.sql b/build/database/lite/install/alarm_event.sql index 8a398a66..8145b4ab 100644 --- a/build/database/lite/install/alarm_event.sql +++ b/build/database/lite/install/alarm_event.sql @@ -15,13 +15,13 @@ CREATE TABLE "alarm_event" ( "object_name" text(64), "object_type" text(20), "location_info" text(2048), - "alarm_status" text(10), + "alarm_status" text(64), "specific_problem" text(255), "specific_problem_id" text(100), "add_info" text(2048), - "clear_type" integer(11), + "clear_type" text(64), "clear_time" integer(20), - "clear_user" text(16), + "clear_user" text(64), "timestamp" integer(20), PRIMARY KEY ("id") ); @@ -34,12 +34,11 @@ ON "alarm_event" ( "alarm_status" ASC, "event_time" ASC ); -CREATE UNIQUE INDEX "uk_ti_aid_aseq" +CREATE UNIQUE INDEX "uk_ti_aid" ON "alarm_event" ( "ne_type" ASC, "ne_id" ASC, - "alarm_id" ASC, - "alarm_seq" ASC + "alarm_id" ASC ); -- ---------------------------- diff --git a/build/database/lite/install/alarm_forward_log.sql b/build/database/lite/install/alarm_forward_log.sql index 6235f395..86eafc94 100644 --- a/build/database/lite/install/alarm_forward_log.sql +++ b/build/database/lite/install/alarm_forward_log.sql @@ -10,8 +10,8 @@ CREATE TABLE "alarm_forward_log" ( "alarm_id" text(32), "alarm_code" integer(11), "alarm_title" text(255), - "alarm_status" text(10), - "alarm_type" text(10), + "alarm_status" text(64), + "alarm_type" text(64), "orig_severity" text(10), "event_time" integer(20), "created_at" integer(20), diff --git a/build/database/lite/install/alarm_log.sql b/build/database/lite/install/alarm_log.sql index 0e942b41..9bb727a3 100644 --- a/build/database/lite/install/alarm_log.sql +++ b/build/database/lite/install/alarm_log.sql @@ -10,9 +10,9 @@ CREATE TABLE "alarm_log" ( "alarm_id" text(32), "alarm_code" integer(11), "alarm_title" text(255), - "alarm_status" text(10), - "alarm_type" text(10), - "orig_severity" text(10), + "alarm_status" text(64), + "alarm_type" text(64), + "orig_severity" text(64), "event_time" integer(20), "created_at" integer(20), PRIMARY KEY ("id") diff --git a/build/database/lite/install/cbc_message.sql b/build/database/lite/install/cbc_message.sql new file mode 100755 index 00000000..956983db --- /dev/null +++ b/build/database/lite/install/cbc_message.sql @@ -0,0 +1,25 @@ +-- ---------------------------- +-- Table structure for cbc_message +-- ---------------------------- +DROP TABLE IF EXISTS `cbc_message`; +CREATE TABLE "cbc_message" ( + "id" integer NOT NULL, + "ne_type" text(32), + "ne_id" text(32), + "message_json" text(10240), + "status" text(32), + "detail" text(255), + "created_at" integer, + "updated_at" integer, + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table cbc_message +-- ---------------------------- +CREATE INDEX "idx_cbcm_ne_time" +ON "cbc_message" ( + "ne_type" ASC, + "ne_id" ASC, + "created_at" ASC +); diff --git a/build/database/lite/install/kpi_c_title.sql b/build/database/lite/install/kpi_c_title.sql index 19ed5903..f235d713 100644 --- a/build/database/lite/install/kpi_c_title.sql +++ b/build/database/lite/install/kpi_c_title.sql @@ -52,3 +52,5 @@ INSERT INTO "kpi_c_title" VALUES (90, 'IMS', 'IMS.C.01', 'InitReg_Success_Rate', INSERT INTO "kpi_c_title" VALUES (91, 'IMS', 'IMS.C.02', 'MO_Success_Rate', '(''SCSCF.05''/''SCSCF.06'')*100', '%', '', '1', 'admin', 1739362260083); INSERT INTO "kpi_c_title" VALUES (92, 'IMS', 'IMS.C.03', 'MT_Success_Rate', '(''SCSCF.07''/''SCSCF.08'')*100', '%', '', '1', 'admin', 1739362260083); INSERT INTO "kpi_c_title" VALUES (93, 'IMS', 'IMS.C.04', 'Service_Success_Rate', '((''SCSCF.05''+''SCSCF.07'')/(''SCSCF.06''+''SCSCF.08''))*100', '%', '', '1', 'admin', 1739362260083); +INSERT INTO "kpi_c_title" VALUES (94, 'IMS', 'IMS.C.05', 'IDDOutgoing_Success_Rate', '(''IDD.03''/''IDD.01'')*100', '%', '', '1', 'admin', 1739362260083); +INSERT INTO "kpi_c_title" VALUES (95, 'IMS', 'IMS.C.06', 'IDDIncoming_Success_Rate', '(''IDD.06''/''IDD.04'')*100', '%', '', '1', 'admin', 1739362260083); diff --git a/build/database/lite/install/mml_log.sql b/build/database/lite/install/mml_log.sql index 392309ec..8c2a5391 100644 --- a/build/database/lite/install/mml_log.sql +++ b/build/database/lite/install/mml_log.sql @@ -8,9 +8,9 @@ CREATE TABLE "mml_log" ( "ip" text(64), "ne_type" text(32), "ne_id" text(32), - "mml" text(1024), - "result" text(2048), - "log_time" text, + "command" text(512), + "result" text(255), + "log_time" integer, PRIMARY KEY ("id") ); diff --git a/build/database/lite/install/sys_config.sql b/build/database/lite/install/sys_config.sql index 37dd7f6e..6dadb65c 100644 --- a/build/database/lite/install/sys_config.sql +++ b/build/database/lite/install/sys_config.sql @@ -28,7 +28,7 @@ INSERT INTO "sys_config" VALUES (5, 'config.sys.user.lockTime', 'sys.user.lockTi INSERT INTO "sys_config" VALUES (6, 'config.sys.officialUrl', 'sys.officialUrl', '#', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.officialUrlRemark'); INSERT INTO "sys_config" VALUES (7, 'config.sys.helpDoc', 'sys.helpDoc', '/static/helpDoc/{language}_doc.pdf', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.helpDocRemark'); INSERT INTO "sys_config" VALUES (8, 'sys.account.captchaType', 'sys.account.captchaType', 'math', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'sys.account.captchaTypeRemark'); -INSERT INTO "sys_config" VALUES (9, 'config.sys.user.passwordPolicy', 'sys.user.passwordPolicy', '{"minLength":8,"specialChars":2,"uppercase":1,"lowercase":1}', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.user.passwordPolicyRemark'); +INSERT INTO "sys_config" VALUES (9, 'config.sys.user.passwordPolicy', 'sys.user.passwordPolicy', '{"minLength":6,"specialChars":0,"uppercase":0,"lowercase":0}', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.user.passwordPolicyRemark'); INSERT INTO "sys_config" VALUES (10, 'config.sys.user.passwdExpire', 'sys.user.passwdExpire', '{"expHours":0,"alertHours":360}', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.user.passwdExpireRemark'); INSERT INTO "sys_config" VALUES (11, 'config.sys.user.fristPasswdChange', 'sys.user.fristPasswdChange', 'false', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.user.fristPasswdChangeRemark'); INSERT INTO "sys_config" VALUES (12, 'config.sys.user.passwdNotAllowedHistory', 'sys.user.passwdNotAllowedHistory', '0', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.user.passwdNotAllowedHistoryRemark'); diff --git a/build/database/lite/install/sys_dict_data.sql b/build/database/lite/install/sys_dict_data.sql index 9e7049ca..c879e3eb 100644 --- a/build/database/lite/install/sys_dict_data.sql +++ b/build/database/lite/install/sys_dict_data.sql @@ -53,28 +53,28 @@ INSERT INTO "sys_dict_data" VALUES (27, 'trace_type', 'dictData.trace.user', '3' INSERT INTO "sys_dict_data" VALUES (28, 'sys_job_save_log', 'dictData.jobSaveLog.no', '0', 8, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); INSERT INTO "sys_dict_data" VALUES (29, 'sys_job_save_log', 'dictData.jobSaveLog.yes', '1', 9, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); INSERT INTO "sys_dict_data" VALUES (30, 'ne_host_type', 'dictData.ne_host_type.redis', 'redis', 2, '', 'magenta', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -INSERT INTO "sys_dict_data" VALUES (31, 'alarm_status', 'dictData.alarmStatus.history', '0', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -INSERT INTO "sys_dict_data" VALUES (32, 'alarm_status', 'dictData.alarmStatus.active', '1', 2, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (31, 'alarm_status', 'dictData.alarmStatus.history', 'Clear', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (32, 'alarm_status', 'dictData.alarmStatus.active', 'Active', 2, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); INSERT INTO "sys_dict_data" VALUES (33, 'sys_role_datascope', 'dictData.datascope.all', '1', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); INSERT INTO "sys_dict_data" VALUES (34, 'sys_role_datascope', 'dictData.datascope.custom', '2', 2, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); INSERT INTO "sys_dict_data" VALUES (35, 'sys_role_datascope', 'dictData.datascope.dept', '3', 3, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); INSERT INTO "sys_dict_data" VALUES (36, 'sys_role_datascope', 'dictData.datascope.deptAndChid', '4', 4, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); INSERT INTO "sys_dict_data" VALUES (37, 'sys_role_datascope', 'dictData.datascope.self', '5', 5, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -INSERT INTO "sys_dict_data" VALUES (38, 'active_alarm_type', 'dictData.active_alarm_type.communication', '1', 1, '', 'gold', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -INSERT INTO "sys_dict_data" VALUES (39, 'active_alarm_type', 'dictData.active_alarm_type.equipment', '2', 2, '', 'cyan', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -INSERT INTO "sys_dict_data" VALUES (40, 'active_alarm_type', 'dictData.active_alarm_type.processing', '3', 3, '', 'blue ', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -INSERT INTO "sys_dict_data" VALUES (41, 'active_alarm_type', 'dictData.active_alarm_type.environmental', '4', 4, '', 'yellow', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -INSERT INTO "sys_dict_data" VALUES (42, 'active_alarm_type', 'dictData.active_alarm_type.qualityOfService', '5', 5, '', 'purple', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -INSERT INTO "sys_dict_data" VALUES (43, 'active_clear_type', 'dictData.active_clear_type.notCleared', '0', 0, '', 'processing', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -INSERT INTO "sys_dict_data" VALUES (44, 'active_clear_type', 'dictData.active_clear_type.auto', '1', 1, '', 'gold', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -INSERT INTO "sys_dict_data" VALUES (45, 'active_clear_type', 'dictData.active_clear_type.hand', '2', 2, '', 'success', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -INSERT INTO "sys_dict_data" VALUES (46, 'active_ack_state', 'dictData.active_ack_state.unconfirmed', '0', 0, '', 'processing', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -INSERT INTO "sys_dict_data" VALUES (47, 'active_ack_state', 'dictData.active_ack_state.confirmed', '1', 1, '', 'success', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -INSERT INTO "sys_dict_data" VALUES (48, 'active_alarm_severity', 'dictData.active_alarm_severity.critical', '1', 1, '', 'gold', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -INSERT INTO "sys_dict_data" VALUES (49, 'active_alarm_severity', 'dictData.active_alarm_severity.major', '2', 2, '', 'cyan', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -INSERT INTO "sys_dict_data" VALUES (50, 'active_alarm_severity', 'dictData.active_alarm_severity.minor', '3', 3, '', 'blue ', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -INSERT INTO "sys_dict_data" VALUES (51, 'active_alarm_severity', 'dictData.active_alarm_severity.warning', '4', 4, '', 'yellow', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -INSERT INTO "sys_dict_data" VALUES (52, 'active_alarm_severity', 'dictData.active_alarm_severity.event', '5', 5, '', 'purple', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (38, 'active_alarm_type', 'dictData.active_alarm_type.communication', 'CommunicationAlarm', 1, '', 'gold', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (39, 'active_alarm_type', 'dictData.active_alarm_type.equipment', 'EquipmentAlarm', 2, '', 'cyan', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (40, 'active_alarm_type', 'dictData.active_alarm_type.processing', 'ProcessingFailure', 3, '', 'blue ', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (41, 'active_alarm_type', 'dictData.active_alarm_type.environmental', 'EnvironmentalAlarm', 4, '', 'yellow', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (42, 'active_alarm_type', 'dictData.active_alarm_type.qualityOfService', 'QualityOfServiceAlarm', 5, '', 'purple', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (43, 'active_clear_type', 'dictData.active_clear_type.notCleared', 'NotClear', 0, '', 'processing', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (44, 'active_clear_type', 'dictData.active_clear_type.auto', 'AutoClear', 1, '', 'gold', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (45, 'active_clear_type', 'dictData.active_clear_type.hand', 'ManualClear', 2, '', 'success', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (46, 'active_ack_state', 'dictData.active_ack_state.unconfirmed', 'NotAck', 0, '', 'processing', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (47, 'active_ack_state', 'dictData.active_ack_state.confirmed', 'Ack', 1, '', 'success', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (48, 'active_alarm_severity', 'dictData.active_alarm_severity.critical', 'Critical', 1, '', 'gold', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (49, 'active_alarm_severity', 'dictData.active_alarm_severity.major', 'Major', 2, '', 'cyan', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (50, 'active_alarm_severity', 'dictData.active_alarm_severity.minor', 'Minor', 3, '', 'blue ', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (51, 'active_alarm_severity', 'dictData.active_alarm_severity.warning', 'Warning', 4, '', 'yellow', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (52, 'active_alarm_severity', 'dictData.active_alarm_severity.event', 'Event', 5, '', 'purple', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); INSERT INTO "sys_dict_data" VALUES (53, 'index_status', 'dictType.index_status.normal', 'normal', 1, '#91cc75', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); INSERT INTO "sys_dict_data" VALUES (54, 'index_status', 'dictType.index_status.abnormal', 'abnormal', 2, '#ee6666', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); INSERT INTO "sys_dict_data" VALUES (55, 'cdr_sip_code', 'dictData.cdr_sip_code.200', '200', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); @@ -91,9 +91,9 @@ INSERT INTO "sys_dict_data" VALUES (65, 'ue_auth_code', 'dictData.ue_auth_code.0 INSERT INTO "sys_dict_data" VALUES (66, 'ue_auth_code', 'dictData.ue_auth_code.005', '005', 5, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); INSERT INTO "sys_dict_data" VALUES (67, 'ue_auth_code', 'dictData.ue_auth_code.006', '006', 6, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); INSERT INTO "sys_dict_data" VALUES (68, 'ue_auth_code', 'dictData.ue_auth_code.007', '007', 7, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -INSERT INTO "sys_dict_data" VALUES (69, 'ue_event_type', 'dictData.ue_event_type.auth', 'auth-result', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -INSERT INTO "sys_dict_data" VALUES (70, 'ue_event_type', 'dictData.ue_event_type.detach', 'detach', 2, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -INSERT INTO "sys_dict_data" VALUES (71, 'ue_event_type', 'dictData.ue_event_type.state', 'cm-state', 3, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (69, 'ue_event_type', 'dictData.ue_event_type.auth', 'Auth', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (70, 'ue_event_type', 'dictData.ue_event_type.detach', 'Detach', 2, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (71, 'ue_event_type', 'dictData.ue_event_type.state', 'CM', 3, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); INSERT INTO "sys_dict_data" VALUES (72, 'ue_event_cm_state', 'dictData.ue_event_cm_state.connected', '1', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); INSERT INTO "sys_dict_data" VALUES (73, 'ue_event_cm_state', 'dictData.ue_event_cm_state.idle', '2', 2, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); INSERT INTO "sys_dict_data" VALUES (74, 'ue_event_cm_state', 'dictData.ue_event_cm_state.inactive', '3', 3, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); @@ -192,4 +192,8 @@ INSERT INTO "sys_dict_data" VALUES (166, 'cdr_sip_code_cause', 'dictData.cdr_sip INSERT INTO "sys_dict_data" VALUES (167, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.606', '606', 22, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); INSERT INTO "sys_dict_data" VALUES (168, 'trace_interfaces', 'dictData.trace_interfaces.14', 'N14', 14, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); INSERT INTO "sys_dict_data" VALUES (169, 'trace_interfaces', 'dictData.trace_interfaces.5', 'N5', 5, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (170, 'sys_user_type', 'dictData.sys_user_type.system', 'System', 1, '', 'default', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (171, 'sys_user_type', 'dictData.sys_user_type.ldap', 'LDAP', 2, '', 'lime', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (172, 'sys_user_type', 'dictData.sys_user_type.smtp', 'SMTP', 3, '', 'magenta', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (173, 'sys_user_type', 'dictData.sys_user_type.oauth2', 'OAuth2', 4, '', 'gold', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); diff --git a/build/database/lite/install/sys_dict_type.sql b/build/database/lite/install/sys_dict_type.sql index 30bb5f99..39b564de 100644 --- a/build/database/lite/install/sys_dict_type.sql +++ b/build/database/lite/install/sys_dict_type.sql @@ -27,6 +27,7 @@ INSERT INTO "sys_dict_type" VALUES (5, 'dictType.sys_job_group', 'sys_job_group' INSERT INTO "sys_dict_type" VALUES (6, 'dictType.sys_yes_no', 'sys_yes_no', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_yes_no_remark'); INSERT INTO "sys_dict_type" VALUES (9, 'dictType.sys_oper_type', 'sys_oper_type', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_oper_type_remark'); INSERT INTO "sys_dict_type" VALUES (10, 'dictType.sys_common_status', 'sys_common_status', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_common_status_remark'); +INSERT INTO "sys_dict_type" VALUES (11, 'dictType.sys_user_type', 'sys_user_type', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); INSERT INTO "sys_dict_type" VALUES (50, 'dictType.trace_type', 'trace_type', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.trace_type_remark'); INSERT INTO "sys_dict_type" VALUES (51, 'dictType.alarm_status', 'alarm_status', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.alarm_status_remark'); INSERT INTO "sys_dict_type" VALUES (52, 'dictType.ne_version_status', 'ne_version_status', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.ne_version_status_remark'); diff --git a/build/database/lite/install/sys_i18n.sql b/build/database/lite/install/sys_i18n.sql index 8d0e5921..6d99089e 100644 --- a/build/database/lite/install/sys_i18n.sql +++ b/build/database/lite/install/sys_i18n.sql @@ -611,7 +611,7 @@ INSERT INTO "sys_i18n" VALUES (541, 'dictData.cdr_sip_code.404', '404 找不到' INSERT INTO "sys_i18n" VALUES (542, 'dictData.cdr_sip_code.487', '487 请求已终止', '487 Request Terminated'); INSERT INTO "sys_i18n" VALUES (543, 'dictData.cdr_sip_code.503', '503 服务不可用', '503 Service Unavailable'); INSERT INTO "sys_i18n" VALUES (544, 'dictData.cdr_sip_code.504', '504 服务器超时', '504 Server Timeout'); -INSERT INTO "sys_i18n" VALUES (545, 'dictData.cdr_sip_code.603', '603 下降', '603 Decline'); +INSERT INTO "sys_i18n" VALUES (545, 'dictData.cdr_sip_code.603', '603 拒绝', '603 Decline'); INSERT INTO "sys_i18n" VALUES (546, 'dictData.cdr_sip_code.606', '606 不可接受', '606 Not Acceptable'); INSERT INTO "sys_i18n" VALUES (547, 'cache.name.token', '用户令牌', 'User Token'); INSERT INTO "sys_i18n" VALUES (548, 'cache.name.sys_config', '参数管理', 'Parameters Management'); @@ -833,13 +833,13 @@ INSERT INTO "sys_i18n" VALUES (729, 'dictData.cdr_sip_code_cause.200', '正常 INSERT INTO "sys_i18n" VALUES (730, 'dictData.cdr_sip_code_cause.202', '申请已被接受处理,但尚未完成 ', 'The request has been accepted for processing, but it hasn it completed yet'); INSERT INTO "sys_i18n" VALUES (731, 'dictData.cdr_sip_code_cause.302', '因其他原因呼叫失败', 'Call failure for other reason'); INSERT INTO "sys_i18n" VALUES (732, 'dictData.cdr_sip_code_cause.402', '因其他原因呼叫失败', 'Call failure for other reason'); -INSERT INTO "sys_i18n" VALUES (733, 'dictData.cdr_sip_code_cause.403', '拒绝 MO 用户', 'MO User Rejected'); -INSERT INTO "sys_i18n" VALUES (734, 'dictData.cdr_sip_code_cause.404', 'MT 用户离线', 'MT User Offline'); +INSERT INTO "sys_i18n" VALUES (733, 'dictData.cdr_sip_code_cause.403', '拒接主叫用户', 'MO User Rejected'); +INSERT INTO "sys_i18n" VALUES (734, 'dictData.cdr_sip_code_cause.404', '被叫用户离线', 'MT User Offline'); INSERT INTO "sys_i18n" VALUES (735, 'dictData.cdr_sip_code_cause.480', '因其他原因呼叫失败', 'Call failure for other reason'); INSERT INTO "sys_i18n" VALUES (736, 'dictData.cdr_sip_code_cause.481', '电话无法拨出', 'Call cannot be dialed'); INSERT INTO "sys_i18n" VALUES (737, 'dictData.cdr_sip_code_cause.482', '闪断', 'Flashback'); -INSERT INTO "sys_i18n" VALUES (738, 'dictData.cdr_sip_code_cause.486', 'MT 用户忙', 'MT User Busy'); -INSERT INTO "sys_i18n" VALUES (739, 'dictData.cdr_sip_code_cause.487', 'MO 用户断线', 'MO User Disconnected'); +INSERT INTO "sys_i18n" VALUES (738, 'dictData.cdr_sip_code_cause.486', '被叫用户忙', 'MT User Busy'); +INSERT INTO "sys_i18n" VALUES (739, 'dictData.cdr_sip_code_cause.487', '主叫挂断', 'MO User Disconnected'); INSERT INTO "sys_i18n" VALUES (740, 'dictData.cdr_sip_code_cause.408', '服务器等待响应的时间过长', 'The server waits too long for a response'); INSERT INTO "sys_i18n" VALUES (741, 'dictData.cdr_sip_code_cause.488', '媒体详细信息与服务器支持的内容不匹配', 'Media details didn’t match what the server supports'); INSERT INTO "sys_i18n" VALUES (742, 'dictData.cdr_sip_code_cause.489', '因其他原因呼叫失败', 'Call failure for other reason'); @@ -847,7 +847,7 @@ INSERT INTO "sys_i18n" VALUES (743, 'dictData.cdr_sip_code_cause.500', '服务 INSERT INTO "sys_i18n" VALUES (744, 'dictData.cdr_sip_code_cause.503', '服务器超载或因维护而停机,无法处理呼叫', 'The server is overloaded or down for maintenance and can it process the call'); INSERT INTO "sys_i18n" VALUES (745, 'dictData.cdr_sip_code_cause.504', '服务器尝试以您的名义与另一台服务器通信,但未及时收到回复,并超时了', 'The server tried to talk to another server on your behalf, didn’t get a reply in time, and timed out'); INSERT INTO "sys_i18n" VALUES (746, 'dictData.cdr_sip_code_cause.580', '因其他原因呼叫失败', 'Call failure for other reason'); -INSERT INTO "sys_i18n" VALUES (747, 'dictData.cdr_sip_code_cause.603', 'MT 明确拒绝通话', 'MT explicitly rejected the call'); +INSERT INTO "sys_i18n" VALUES (747, 'dictData.cdr_sip_code_cause.603', '被叫拒接', 'MT explicitly rejected the call'); INSERT INTO "sys_i18n" VALUES (748, 'dictData.cdr_sip_code_cause.606', '呼叫已到达用户设备,但会话设置的某些部分不可接受', 'The call reached the user’s device, but some parts of the session setup weren it acceptable'); INSERT INTO "sys_i18n" VALUES (749, 'dictType.cdr_sip_code_cause', 'IMS-Voice-SIP响应代码类别类型原因', 'IMS-Voice-SIP Response Code Category Type Cause'); INSERT INTO "sys_i18n" VALUES (750, 'job.backup_export_log', '备份-日志数据定期导出', 'Backup-Periodic export of Log Data'); @@ -930,3 +930,33 @@ AddInfo: Additional information on alarms dayLt: Days less than, default 30 days'); INSERT INTO "sys_i18n" VALUES (756, 'dictData.trace_interfaces.14', 'N14', 'N14'); INSERT INTO "sys_i18n" VALUES (757, 'dictData.trace_interfaces.5', 'N5', 'N5'); +INSERT INTO "sys_i18n" VALUES (758, "alarm.export.alarmCode", "告警编码", "Alarm Code"); +INSERT INTO "sys_i18n" VALUES (759, "config.sys.user.fristPasswdChangeRemark", "关闭改为false 开启改为true, 建议同时设置密码有效期", "Off to false On to true, it is recommended to set the password expiration date at the same time."); +INSERT INTO "sys_i18n" VALUES (760, "menu.perf.kpiIMSOverview", "语音数据概览", "Voice Data Overview"); +INSERT INTO "sys_i18n" VALUES (761, "dictType.sys_user_type", "用户类型", "User Type"); +INSERT INTO "sys_i18n" VALUES (762, "dictData.sys_user_type.system", "系统", "System"); +INSERT INTO "sys_i18n" VALUES (763, "dictData.sys_user_type.ldap", "LDAP", "LDAP"); +INSERT INTO "sys_i18n" VALUES (764, "dictData.sys_user_type.smtp", "SMTP", "SMTP"); +INSERT INTO "sys_i18n" VALUES (765, "dictData.sys_user_type.oauth2", "OAuth2", "OAuth2"); +INSERT INTO "sys_i18n" VALUES (766, "user.export.userType", "用户类型", "User Type"); +INSERT INTO "sys_i18n" VALUES (767, "menu.system.loginSource", "第三方登录认证", "Third Party Login Source"); +INSERT INTO "sys_i18n" VALUES (768, "log.operate.title.sysLoginSource", "认证源", "Login Source"); + +INSERT INTO "sys_i18n" VALUES (2000, 'menu.psap.agent', '座席', 'Agent'); +INSERT INTO "sys_i18n" VALUES (2001, 'menu.psap.agent.callings', '并行话务', 'Calling Information'); +INSERT INTO "sys_i18n" VALUES (2002, 'menu.psap.agent.callback', '回拨管理', 'Callback Management'); +INSERT INTO "sys_i18n" VALUES (2003, 'callback.status.NEW', '新建', 'New'); +INSERT INTO "sys_i18n" VALUES (2004, 'callback.status.IN_PROGRESS', '处理中', 'In Progress'); +INSERT INTO "sys_i18n" VALUES (2005, 'callback.status.NO_ANSWER_1', '未应答1', 'No Answer 1'); +INSERT INTO "sys_i18n" VALUES (2006, 'callback.status.NO_ANSWER_2', '未应答2', 'No Answer 2'); +INSERT INTO "sys_i18n" VALUES (2007, 'callback.status.TIMEOUT', '超时', 'Timeout'); +INSERT INTO "sys_i18n" VALUES (2008, 'callback.status.PENDING', '挂起', 'Pending'); +INSERT INTO "sys_i18n" VALUES (2009, 'callback.status.CLOSED', '关闭', 'Closed'); +INSERT INTO "sys_i18n" VALUES (2010, 'job.export.cdr.mf', '定期导出MF话单', 'Periodic Export of MF Call Records'); +INSERT INTO "sys_i18n" VALUES (2011, 'job.psap.ticket.monitor', '回拨工单监控', 'Callback Ticket Monitoring'); +INSERT INTO "sys_i18n" VALUES (2012, 'menu.omc.cdr', '话单', 'Call Records'); +INSERT INTO "sys_i18n" VALUES (2013, 'menu.omc.cdr.mf', '紧急呼叫话单', 'Emergency Call Records'); +INSERT INTO "sys_i18n" VALUES (2014, 'menu.omc.cdr.crbt', '彩铃话单', 'Color Ring Back Tone Records'); +INSERT INTO "sys_i18n" VALUES (2015, 'menu.omc.cdr.mms', '彩信话单', 'Multimedia Message Service Records'); +INSERT INTO "sys_i18n" VALUES (2016, 'menu.ue.cbc.cbe', '预警广播', 'Early Warning Broadcast'); +INSERT INTO "sys_i18n" VALUES (2017, 'log.operate.title.cbcMessage', '预警广播', 'Early Warning Broadcast'); diff --git a/build/database/lite/install/sys_job.sql b/build/database/lite/install/sys_job.sql index 1c9a85b4..0e16f7b4 100644 --- a/build/database/lite/install/sys_job.sql +++ b/build/database/lite/install/sys_job.sql @@ -41,9 +41,9 @@ INSERT INTO "sys_job" VALUES (10, 'job.delete_ne_config_backup', 'SYSTEM', 'dele INSERT INTO "sys_job" VALUES (11, 'job.delete_alarm_record', 'SYSTEM', 'delete_alarm_record', '{"storeDays":7}', '0 10 0 * * ?', '3', '0', '1', '1', 'system', 1698478134839, 'system', 1698478134839, 'job.delete_alarm_record_remark'); INSERT INTO "sys_job" VALUES (12, 'job.delete_kpi_record', 'SYSTEM', 'delete_kpi_record', '{"storeDays":7,"neList":["IMS","AMF","UDM","UPF","MME","SMSC","SMF","MME"]}', '0 20 0 * * ?', '3', '0', '1', '1', 'system', 1698478134839, 'system', 1698478134839, 'job.delete_kpi_record_remark'); -INSERT INTO "sys_job" VALUES (20, 'job.ne_alarm_state_check', 'SYSTEM', 'ne_alarm_state_check', '{"alarmTitle":"NE State Check Alarm","alarmType":"2","origSeverity":"2","specificProblem":"alarm cause: the system state of target NE has not been received","specificProblemId":"AC10000","addInfo":""}', '0/30 * * * * ?', '3', '0', '1', '0', 'system', 1698478134839, 'system', 1698478134839, 'job.ne_alarm_state_check_remark'); -INSERT INTO "sys_job" VALUES (21, 'job.ne_alarm_state_check_cmd', 'SYSTEM', 'ne_alarm_state_check_cmd', '{"alarmTitle":"NE State Check Alarm CPU/Menory/Disk","alarmType":"2","origSeverity":"2","specificProblem":"Alarm Cause: CPU/Menory/Disk status received from target NE reaches the threshold","specificProblemId":"AC10100","addInfo":"","cpuUseGt":70,"memUseGt":70,"diskUseGt":70}', '0/15 * * * * ?', '3', '0', '1', '0', 'system', 1698478134839, 'system', 1698478134839, 'job.ne_alarm_state_check_cmd_remark'); -INSERT INTO "sys_job" VALUES (22, 'job.ne_alarm_state_check_license', 'SYSTEM', 'ne_alarm_state_check_license', '{"alarmTitle":"NE State Check Alarm License","alarmType":"2","origSeverity":"2","specificProblem":"Alarm Cause: License received from target NE is about to expire","specificProblemId":"AC10200","addInfo":"","dayLt":7}', '0 5 0 * * ?', '3', '0', '1', '0', 'system', 1698478134839, 'system', 1698478134839, 'job.ne_alarm_state_check_license_remark'); +INSERT INTO "sys_job" VALUES (20, 'job.ne_alarm_state_check', 'SYSTEM', 'ne_alarm_state_check', '{"alarmTitle":"NE State Check Alarm","alarmType":"EquipmentAlarm","origSeverity":"Major","specificProblem":"alarm cause: the system state of target NE has not been received","specificProblemId":"AC10000","addInfo":""}', '0/30 * * * * ?', '3', '0', '1', '0', 'system', 1698478134839, 'system', 1698478134839, 'job.ne_alarm_state_check_remark'); +INSERT INTO "sys_job" VALUES (21, 'job.ne_alarm_state_check_cmd', 'SYSTEM', 'ne_alarm_state_check_cmd', '{"alarmTitle":"NE State Check Alarm CPU/Menory/Disk","alarmType":"EquipmentAlarm","origSeverity":"Major","specificProblem":"Alarm Cause: CPU/Menory/Disk status received from target NE reaches the threshold","specificProblemId":"AC10100","addInfo":"","cpuUseGt":70,"memUseGt":70,"diskUseGt":70}', '0/15 * * * * ?', '3', '0', '1', '0', 'system', 1698478134839, 'system', 1698478134839, 'job.ne_alarm_state_check_cmd_remark'); +INSERT INTO "sys_job" VALUES (22, 'job.ne_alarm_state_check_license', 'SYSTEM', 'ne_alarm_state_check_license', '{"alarmTitle":"NE State Check Alarm License","alarmType":"EquipmentAlarm","origSeverity":"Major","specificProblem":"Alarm Cause: License received from target NE is about to expire","specificProblemId":"AC10200","addInfo":"","dayLt":7}', '0 5 0 * * ?', '3', '0', '1', '0', 'system', 1698478134839, 'system', 1698478134839, 'job.ne_alarm_state_check_license_remark'); INSERT INTO "sys_job" VALUES (30, 'job.backup_remove_file', 'SYSTEM', 'backup_remove_file', '[{"backupPath":"/udm_data/auth","storeDays":30},{"backupPath":"/udm_data/sub","storeDays":30},{"backupPath":"/udm_data/voip","storeDays":30},{"backupPath":"/udm_data/volte","storeDays":30},{"backupPath":"/cdr/ims_cdr_event","storeDays":30},{"backupPath":"/cdr/smsc_cdr_event","storeDays":30},{"backupPath":"/cdr/smf_cdr_event","storeDays":30},{"backupPath":"/cdr/sgwc_cdr_event","storeDays":30},{"backupPath":"/log/sys_log_operate","storeDays":30,"storeNum":7},{"backupPath":"/log/sys_log_login","storeDays":30,"storeNum":7}]', '0 10 0 * * ?', '3', '0', '1', '1', 'system', 1698478134839, 'system', 1698478134839, 'job.backup_remove_file_remark'); INSERT INTO "sys_job" VALUES (31, 'job.backup_export_udm', 'SYSTEM', 'backup_export_udm', '{"dataType":["auth","sub","voip","volte"],"fileType":"txt"}', '0 35 0 * * ?', '3', '0', '1', '1', 'system', 1698478134839, 'supervisor', 1745481169354, 'job.backup_export_udm_remark'); diff --git a/build/database/lite/install/sys_login_source.sql b/build/database/lite/install/sys_login_source.sql new file mode 100644 index 00000000..fd9c6e99 --- /dev/null +++ b/build/database/lite/install/sys_login_source.sql @@ -0,0 +1,33 @@ +-- ---------------------------- +-- Table structure for sys_login_source +-- ---------------------------- +DROP TABLE IF EXISTS "sys_login_source"; +CREATE TABLE "sys_login_source" ( + "id" integer NOT NULL, + "uid" text(32), + "type" text(32), + "name" text(64), + "icon" text(255), + "active_flag" text(1), + "sync_flag" text(1), + "config" text, + "create_by" text(64), + "create_time" integer, + "update_by" text(64), + "update_time" integer, + "remark" text(500), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table sys_login_source +-- ---------------------------- +CREATE INDEX "idx_ls_type_name" +ON "sys_login_source" ( + "type" ASC, + "name" ASC +); + +-- ---------------------------- +-- Records of sys_login_source +-- ---------------------------- diff --git a/build/database/lite/install/sys_menu.sql b/build/database/lite/install/sys_menu.sql index 891ba0bb..2dd693ea 100644 --- a/build/database/lite/install/sys_menu.sql +++ b/build/database/lite/install/sys_menu.sql @@ -47,6 +47,7 @@ INSERT INTO "sys_menu" VALUES (105, 'menu.security.post', 2113, 6, 'post', 'syst INSERT INTO "sys_menu" VALUES (106, 'menu.system.dictType', 1, 30, 'dict', 'system/dict/index', '1', '1', 'M', '1', '1', 'system:dict:list', 'icon-tubiaoku', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.system.dictTypeRemark'); INSERT INTO "sys_menu" VALUES (107, 'menu.system.dictData', 1, 31, 'dict/inline/data/:dictId', 'system/dict/data', '1', '1', 'M', '0', '1', 'system:dict:data', '#', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.system.dictDataRemark'); INSERT INTO "sys_menu" VALUES (108, 'menu.system.paramSet', 1, 59, 'config', 'system/config/index', '1', '1', 'M', '1', '1', 'system:config:list', 'icon-gongnengjieshao', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.system.paramSetRemark'); +INSERT INTO "sys_menu" VALUES (109, 'menu.system.loginSource', 2113, 12, 'login-source', 'system/login-source/index', '1', '1', 'M', '1', '1', 'system:loginSource:list', 'icon-xiangmuchengyuan', '0', 'system', 1728641403588,'system', 1728641403588, ''); INSERT INTO "sys_menu" VALUES (111, 'menu.system.systemLog', 1, 11, 'log', '', '1', '1', 'D', '0', '0', '', '#', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.system.systemLogRemark'); INSERT INTO "sys_menu" VALUES (112, 'menu.system.systemInfo', 1, 5, 'system-info', 'monitor/system/info', '1', '1', 'M', '1', '1', 'monitor:system:info', 'icon-fuzhidaima', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.system.systemInfoRemark'); INSERT INTO "sys_menu" VALUES (113, 'menu.system.cacheInfo', 1, 8, 'cache-info', 'monitor/cache/info', '1', '1', 'M', '1', '1', 'monitor:cache:info', 'icon-gongnengjieshao', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.system.cacheInfoRemark'); @@ -109,6 +110,10 @@ INSERT INTO "sys_menu" VALUES (1053, 'menu.common.edit', 116, 3, '#', '', '1', ' INSERT INTO "sys_menu" VALUES (1054, 'menu.common.delete', 116, 4, '#', '', '1', '1', 'B', '1', '1', 'monitor:job:remove', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); INSERT INTO "sys_menu" VALUES (1055, 'menu.common.edit', 116, 5, '#', '', '1', '1', 'B', '1', '1', 'monitor:job:changeStatus', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); INSERT INTO "sys_menu" VALUES (1056, 'menu.common.export', 116, 6, '#', '', '1', '1', 'B', '1', '1', 'monitor:job:export', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (1057, 'menu.common.query', 109, 1, '#', '', '1', '1', 'B', '1', '1', 'system:loginSource:query', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (1058, 'menu.common.add', 109, 2, '#', '', '1', '1', 'B', '1', '1', 'system:loginSource:add', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (1059, 'menu.common.edit', 109, 3, '#', '', '1', '1', 'B', '1', '1', 'system:loginSource:edit', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (1060, 'menu.common.delete', 109, 4, '#', '', '1', '1', 'B', '1', '1', 'system:loginSource:remove', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); INSERT INTO "sys_menu" VALUES (2000, 'menu.neData.udmAuth', 5, 1, 'udm-auth', 'neData/udm-auth/index', '1', '1', 'M', '1', '1', 'udm#auth:index', 'icon-xiangmuchengyuan', '0', 'system', 1728641403588, 'system', 1728641403588, ''); INSERT INTO "sys_menu" VALUES (2001, 'menu.neData.udmSub', 5, 3, 'udm-sub', 'neData/udm-sub/index', '1', '1', 'M', '1', '1', 'udm#sub:index', 'icon-xiangmuchengyuan', '0', 'system', 1728641403588, 'system', 1728641403588, ''); INSERT INTO "sys_menu" VALUES (2002, 'menu.neData.udmVOIP', 5, 5, 'udm-voip', 'neData/udm-voip/index', '1', '0', 'M', '1', '1', 'udm#voip:list', 'icon-xiangmuchengyuan', '0', 'system', 1728641403588, 'system', 1728641403588, ''); @@ -146,8 +151,8 @@ INSERT INTO "sys_menu" VALUES (2106, 'menu.perf.kpiKeyTarget', 2099, 12, 'kpiKey INSERT INTO "sys_menu" VALUES (2107, 'menu.mml', 0, 8, 'mmlManage', '', '1', '0', 'D', '1', '1', '', 'icon-zhizuoliucheng', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.mmlRemark'); INSERT INTO "sys_menu" VALUES (2108, 'menu.mml.ne', 2107, 1, 'neOperate', 'mmlManage/neOperate/index', '1', '1', 'M', '1', '1', 'mmlManage:neOperate:index', 'icon-huizhiguize', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.mml.neRemark'); INSERT INTO "sys_menu" VALUES (2109, 'menu.mml.udm', 2107, 2, 'udmOperate', 'mmlManage/udmOperate/index', '1', '1', 'M', '1', '1', 'mmlManage:udmOperate:index', 'icon-gonggaodayi', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.mml.udmRemark'); -INSERT INTO "sys_menu" VALUES (2110, 'menu.mml.set', 2107, 4, 'mmlSet', 'mmlManage/mmlSet/index', '1', '0', 'M', '1', '1', 'mmlManage:mmlSet:index', 'icon-wofaqi', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.mml.setRemark'); -INSERT INTO "sys_menu" VALUES (2111, 'menu.mml.omc', 2107, 3, 'omcOperate', 'mmlManage/omcOperate/index', '1', '1', 'M', '1', '1', 'mmlManage:omcOperate:index', 'icon-huizhiguize', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.mml.omcRemark'); +INSERT INTO "sys_menu" VALUES (2110, 'menu.mml.set', 2107, 4, 'mmlSet', 'mmlManage/mmlSet/index', '1', '0', 'M', '0', '0', 'mmlManage:mmlSet:index', 'icon-wofaqi', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.mml.setRemark'); +INSERT INTO "sys_menu" VALUES (2111, 'menu.mml.omc', 2107, 3, 'omcOperate', 'mmlManage/omcOperate/index', '1', '1', 'M', '0', '0', 'mmlManage:omcOperate:index', 'icon-huizhiguize', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.mml.omcRemark'); INSERT INTO "sys_menu" VALUES (2112, 'menu.dashboard.sgwcCDR', 2140, 12, 'sgwcCDR', 'dashboard/sgwcCDR/index', '1', '0', 'M', '1', '1', 'sgwc#cdr:index', 'icon-paixu', '0', 'system', 1728641403588, 'system', 1728641403588, ''); INSERT INTO "sys_menu" VALUES (2113, 'menu.security', 0, 14, 'security', '', '1', '0', 'D', '1', '1', '', 'icon-suofang', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.securityRemark'); INSERT INTO "sys_menu" VALUES (2114, 'menu.system.systemSet', 1, 60, 'setting', 'system/setting/index', '1', '1', 'M', '1', '1', 'system:setting:index', 'icon-piliang', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.system.systemSetRemark'); @@ -155,6 +160,8 @@ INSERT INTO "sys_menu" VALUES (2115, 'menu.system.systemResource', 1, 6, 'monito INSERT INTO "sys_menu" VALUES (2116, 'menu.dashboard.smscCDR.content', 2157, 1, '', '', '1', '1', 'B', '1', '1', 'cdr:smsc:content', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); INSERT INTO "sys_menu" VALUES (2117, 'menu.common.delete', 2140, 1, '', '', '1', '1', 'B', '1', '1', 'cdr:ne:remove', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); INSERT INTO "sys_menu" VALUES (2118, 'menu.dashboard.smfCDRByIMSI', 2140, 7, 'smfCDRByIMSI', 'dashboard/smfCDRByIMSI/index', '1', '0', 'M', '1', '1', 'smf#cdr:index', 'icon-gerenzhanghu', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (2119, 'Alarm Overview', 2129, 6, 'alarm-overview', 'faultManage/alarm-overview/index', '1', '1', 'M', '1', '1', 'faultManage:active-overview:index', 'icon-wenjian', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (2120, 'DashboardV1', 2131, 8, 'dashboardV1', 'dashboard/overview/index', '1', '0', 'M', '1', '1', 'dashboard:overview:index', 'icon-paixu', '0', 'system', 1728641403588, 'system', 1728641403588, ''); INSERT INTO "sys_menu" VALUES (2121, 'menu.system.user.editRole', 100, 8, '', '', '1', '1', 'B', '1', '1', 'system:user:editRole', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); INSERT INTO "sys_menu" VALUES (2122, 'menu.system.setting.i18n', 2114, 1, '', '', '1', '1', 'B', '1', '1', 'system:setting:i18n', '#', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.system.setting.i18nRemark'); INSERT INTO "sys_menu" VALUES (2123, 'menu.log.neFile', 2089, 9, 'neFile', 'ne/neFile/index', '1', '0', 'M', '1', '1', 'ne:neFile:index', 'icon-tubiaohuizhi', '0', 'system', 1728641403588, 'system', 1728641403588, ''); @@ -170,6 +177,7 @@ INSERT INTO "sys_menu" VALUES (2135, 'menu.ne.neHost', 4, 15, 'neHost', 'ne/neHo INSERT INTO "sys_menu" VALUES (2136, 'menu.ne.neHostCommand', 4, 18, 'neHostCommand', 'ne/neHostCommand/index', '1', '0', 'M', '1', '0', 'ne:neHostCommand:list', 'icon-fuzhidaima', '0', 'system', 1728641403588, 'system', 1728641403588, ''); INSERT INTO "sys_menu" VALUES (2137, 'menu.ne.neInfo', 4, 10, 'neInfo', 'ne/neInfo/index', '1', '0', 'M', '1', '1', 'ne:neInfo:list', 'icon-fuzhidaima', '0', 'system', 1728641403588, 'system', 1728641403588, ''); INSERT INTO "sys_menu" VALUES (2138, 'menu.dashboard.amfUE', 2141, 1, 'amfUE', 'dashboard/amfUE/index', '1', '0', 'M', '1', '1', 'amf#ue:index', 'icon-paixu', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (2139, 'menu.perf.kpiIMSOverview', 2099, 14, 'dashboard', 'perfManage/overview/index', '1', '0', 'M', '1', '1', 'ims#perfManage:dashboard:index', 'icon-fuzhichenggong', '0', 'system', 1728641403588, 'system', 1728641403588, ''); INSERT INTO "sys_menu" VALUES (2140, 'menu.monitor.cdr', 2089, 10, 'cdr', '', '1', '0', 'D', '1', '1', '', 'icon-tubiaoku', '0', 'system', 1728641403588, 'system', 1728641403588, ''); INSERT INTO "sys_menu" VALUES (2141, 'menu.monitor.event', 2089, 20, 'event', '', '1', '0', 'D', '1', '1', '', 'icon-gengduo', '0', 'system', 1728641403588, 'system', 1728641403588, ''); INSERT INTO "sys_menu" VALUES (2142, 'menu.ne.neQuickSetup', 4, 40, 'neQuickSetup', 'ne/neQuickSetup/index', '1', '1', 'M', '1', '1', 'ne:neQuickSetup:list', 'icon-wofaqi', '0', 'system', 1728641403588, 'system', 1728641403588, ''); @@ -200,3 +208,5 @@ INSERT INTO "sys_menu" VALUES (2166, 'menu.dashboard.overview.smfUeNum', 2132, 4 INSERT INTO "sys_menu" VALUES (2167, 'menu.dashboard.overview.imsUeNum', 2132, 2, '', '', '1', '1', 'B', '1', '1', 'dashboard:overview:imsUeNum', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); INSERT INTO "sys_menu" VALUES (2168, 'menu.dashboard.overview.gnbBase', 2132, 6, '', '', '1', '1', 'B', '1', '1', 'dashboard:overview:gnbBase', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); INSERT INTO "sys_menu" VALUES (2169, 'menu.dashboard.overview.enbBase', 2132, 8, '', '', '1', '1', 'B', '1', '1', 'dashboard:overview:enbBase', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); + +INSERT INTO `sys_menu` VALUES (20000, 'menu.ue.cbc.cbe', 5, 20, 'cbe', 'cbc/cbe/index', '1', '0', 'M', '1', '1', 'cbc#dashboard:cdr:index', 'icon-tubiaoku', '0', 'system', 1711352709786, 'system', 1747796007372, ''); diff --git a/build/database/lite/install/sys_role_menu.sql b/build/database/lite/install/sys_role_menu.sql index a5786837..1828c854 100644 --- a/build/database/lite/install/sys_role_menu.sql +++ b/build/database/lite/install/sys_role_menu.sql @@ -3,8 +3,8 @@ -- ---------------------------- DROP TABLE IF EXISTS "sys_role_menu"; CREATE TABLE "sys_role_menu" ( - "role_id" integer(20) NOT NULL, - "menu_id" integer(20) NOT NULL, + "role_id" integer NOT NULL, + "menu_id" integer NOT NULL, PRIMARY KEY ("role_id", "menu_id") ); @@ -22,6 +22,7 @@ INSERT INTO "sys_role_menu" VALUES (2, 101); INSERT INTO "sys_role_menu" VALUES (2, 102); INSERT INTO "sys_role_menu" VALUES (2, 103); INSERT INTO "sys_role_menu" VALUES (2, 108); +INSERT INTO "sys_role_menu" VALUES (2, 109); INSERT INTO "sys_role_menu" VALUES (2, 111); INSERT INTO "sys_role_menu" VALUES (2, 116); INSERT INTO "sys_role_menu" VALUES (2, 117); @@ -41,9 +42,23 @@ INSERT INTO "sys_role_menu" VALUES (2, 1012); INSERT INTO "sys_role_menu" VALUES (2, 1014); INSERT INTO "sys_role_menu" VALUES (2, 1030); INSERT INTO "sys_role_menu" VALUES (2, 1032); +INSERT INTO "sys_role_menu" VALUES (2, 1034); +INSERT INTO "sys_role_menu" VALUES (2, 1039); +INSERT INTO "sys_role_menu" VALUES (2, 1041); +INSERT INTO "sys_role_menu" VALUES (2, 1042); +INSERT INTO "sys_role_menu" VALUES (2, 1044); +INSERT INTO "sys_role_menu" VALUES (2, 1045); +INSERT INTO "sys_role_menu" VALUES (2, 1048); +INSERT INTO "sys_role_menu" VALUES (2, 1049); +INSERT INTO "sys_role_menu" VALUES (2, 1050); INSERT INTO "sys_role_menu" VALUES (2, 1051); INSERT INTO "sys_role_menu" VALUES (2, 1053); INSERT INTO "sys_role_menu" VALUES (2, 1055); +INSERT INTO "sys_role_menu" VALUES (2, 1056); +INSERT INTO "sys_role_menu" VALUES (2, 1057); +INSERT INTO "sys_role_menu" VALUES (2, 1058); +INSERT INTO "sys_role_menu" VALUES (2, 1059); +INSERT INTO "sys_role_menu" VALUES (2, 1060); INSERT INTO "sys_role_menu" VALUES (2, 2000); INSERT INTO "sys_role_menu" VALUES (2, 2001); INSERT INTO "sys_role_menu" VALUES (2, 2002); @@ -85,6 +100,7 @@ INSERT INTO "sys_role_menu" VALUES (2, 2132); INSERT INTO "sys_role_menu" VALUES (2, 2133); INSERT INTO "sys_role_menu" VALUES (2, 2137); INSERT INTO "sys_role_menu" VALUES (2, 2138); +INSERT INTO "sys_role_menu" VALUES (2, 2139); INSERT INTO "sys_role_menu" VALUES (2, 2140); INSERT INTO "sys_role_menu" VALUES (2, 2141); INSERT INTO "sys_role_menu" VALUES (2, 2143); @@ -109,6 +125,8 @@ INSERT INTO "sys_role_menu" VALUES (2, 2165); INSERT INTO "sys_role_menu" VALUES (2, 2166); INSERT INTO "sys_role_menu" VALUES (2, 2167); INSERT INTO "sys_role_menu" VALUES (2, 2168); +INSERT INTO "sys_role_menu" VALUES (2, 2169); +INSERT INTO "sys_role_menu" VALUES (2, 20000); INSERT INTO "sys_role_menu" VALUES (3, 1); INSERT INTO "sys_role_menu" VALUES (3, 4); @@ -116,6 +134,15 @@ INSERT INTO "sys_role_menu" VALUES (3, 5); INSERT INTO "sys_role_menu" VALUES (3, 60); INSERT INTO "sys_role_menu" VALUES (3, 65); INSERT INTO "sys_role_menu" VALUES (3, 66); +INSERT INTO "sys_role_menu" VALUES (3, 108); +INSERT INTO "sys_role_menu" VALUES (3, 112); +INSERT INTO "sys_role_menu" VALUES (3, 500); +INSERT INTO "sys_role_menu" VALUES (3, 501); +INSERT INTO "sys_role_menu" VALUES (3, 1030); +INSERT INTO "sys_role_menu" VALUES (3, 1032); +INSERT INTO "sys_role_menu" VALUES (3, 1034); +INSERT INTO "sys_role_menu" VALUES (3, 1039); +INSERT INTO "sys_role_menu" VALUES (3, 1042); INSERT INTO "sys_role_menu" VALUES (3, 2000); INSERT INTO "sys_role_menu" VALUES (3, 2001); INSERT INTO "sys_role_menu" VALUES (3, 2002); @@ -128,6 +155,7 @@ INSERT INTO "sys_role_menu" VALUES (3, 2009); INSERT INTO "sys_role_menu" VALUES (3, 2010); INSERT INTO "sys_role_menu" VALUES (3, 2011); INSERT INTO "sys_role_menu" VALUES (3, 2083); +INSERT INTO "sys_role_menu" VALUES (3, 2084); INSERT INTO "sys_role_menu" VALUES (3, 2086); INSERT INTO "sys_role_menu" VALUES (3, 2087); INSERT INTO "sys_role_menu" VALUES (3, 2088); @@ -137,8 +165,11 @@ INSERT INTO "sys_role_menu" VALUES (3, 2094); INSERT INTO "sys_role_menu" VALUES (3, 2097); INSERT INTO "sys_role_menu" VALUES (3, 2107); INSERT INTO "sys_role_menu" VALUES (3, 2109); +INSERT INTO "sys_role_menu" VALUES (3, 2112); INSERT INTO "sys_role_menu" VALUES (3, 2114); INSERT INTO "sys_role_menu" VALUES (3, 2116); +INSERT INTO "sys_role_menu" VALUES (3, 2118); +INSERT INTO "sys_role_menu" VALUES (3, 2122); INSERT INTO "sys_role_menu" VALUES (3, 2123); INSERT INTO "sys_role_menu" VALUES (3, 2126); INSERT INTO "sys_role_menu" VALUES (3, 2128); @@ -156,20 +187,40 @@ INSERT INTO "sys_role_menu" VALUES (3, 2147); INSERT INTO "sys_role_menu" VALUES (3, 2148); INSERT INTO "sys_role_menu" VALUES (3, 2151); INSERT INTO "sys_role_menu" VALUES (3, 2152); +INSERT INTO "sys_role_menu" VALUES (3, 2153); INSERT INTO "sys_role_menu" VALUES (3, 2157); INSERT INTO "sys_role_menu" VALUES (3, 2158); +INSERT INTO "sys_role_menu" VALUES (3, 2162); +INSERT INTO "sys_role_menu" VALUES (3, 2163); INSERT INTO "sys_role_menu" VALUES (3, 2165); INSERT INTO "sys_role_menu" VALUES (3, 2166); INSERT INTO "sys_role_menu" VALUES (3, 2167); INSERT INTO "sys_role_menu" VALUES (3, 2168); +INSERT INTO "sys_role_menu" VALUES (3, 2169); +INSERT INTO "sys_role_menu" VALUES (3, 20000); INSERT INTO "sys_role_menu" VALUES (4, 4); +INSERT INTO "sys_role_menu" VALUES (4, 112); +INSERT INTO "sys_role_menu" VALUES (4, 115); +INSERT INTO "sys_role_menu" VALUES (4, 500); +INSERT INTO "sys_role_menu" VALUES (4, 501); +INSERT INTO "sys_role_menu" VALUES (4, 1039); +INSERT INTO "sys_role_menu" VALUES (4, 1041); +INSERT INTO "sys_role_menu" VALUES (4, 1042); +INSERT INTO "sys_role_menu" VALUES (4, 1044); +INSERT INTO "sys_role_menu" VALUES (4, 1048); INSERT INTO "sys_role_menu" VALUES (4, 2087); INSERT INTO "sys_role_menu" VALUES (4, 2088); INSERT INTO "sys_role_menu" VALUES (4, 2089); +INSERT INTO "sys_role_menu" VALUES (4, 2091); +INSERT INTO "sys_role_menu" VALUES (4, 2092); +INSERT INTO "sys_role_menu" VALUES (4, 2094); INSERT INTO "sys_role_menu" VALUES (4, 2097); +INSERT INTO "sys_role_menu" VALUES (4, 2112); +INSERT INTO "sys_role_menu" VALUES (4, 2113); +INSERT INTO "sys_role_menu" VALUES (4, 2115); INSERT INTO "sys_role_menu" VALUES (4, 2116); -INSERT INTO "sys_role_menu" VALUES (4, 2118); +INSERT INTO "sys_role_menu" VALUES (4, 2123); INSERT INTO "sys_role_menu" VALUES (4, 2126); INSERT INTO "sys_role_menu" VALUES (4, 2128); INSERT INTO "sys_role_menu" VALUES (4, 2129); @@ -190,6 +241,14 @@ INSERT INTO "sys_role_menu" VALUES (4, 2168); INSERT INTO "sys_role_menu" VALUES (5, 4); INSERT INTO "sys_role_menu" VALUES (5, 2087); +INSERT INTO "sys_role_menu" VALUES (5, 2115); INSERT INTO "sys_role_menu" VALUES (5, 2126); +INSERT INTO "sys_role_menu" VALUES (5, 2128); INSERT INTO "sys_role_menu" VALUES (5, 2130); +INSERT INTO "sys_role_menu" VALUES (5, 2131); +INSERT INTO "sys_role_menu" VALUES (5, 2132); INSERT INTO "sys_role_menu" VALUES (5, 2165); +INSERT INTO "sys_role_menu" VALUES (5, 2166); +INSERT INTO "sys_role_menu" VALUES (5, 2167); +INSERT INTO "sys_role_menu" VALUES (5, 2168); +INSERT INTO "sys_role_menu" VALUES (5, 2169); diff --git a/build/database/lite/install/sys_user.sql b/build/database/lite/install/sys_user.sql index ab646349..ee669db1 100644 --- a/build/database/lite/install/sys_user.sql +++ b/build/database/lite/install/sys_user.sql @@ -12,6 +12,8 @@ CREATE TABLE "sys_user" ( "sex" text(1), "avatar" text(255), "password" text(128), + "user_type" text(20), + "user_source" text(32), "status_flag" text(1), "del_flag" text(1), "password_update_time" integer, @@ -29,7 +31,7 @@ CREATE TABLE "sys_user" ( -- ---------------------------- -- Records of sys_user -- ---------------------------- -INSERT INTO `sys_user` VALUES (1, 100, 'supervisor', 'supervisor', '', '', '0', '', '$2a$10$QgIcp6yuOEGrEU0TNU12K.uQRLbcufesEU7hiRYlRSSdUO7OAkoTq', '1', '0', 0, 0, '127.0.0.1', 0, 'system', 0, '', 0, ''); -INSERT INTO `sys_user` VALUES (2, 100, 'admin', 'admin', '', '', '0', '', '$2a$10$WVW6if2TNfR3OJmcaD9wX.gEd9TRymr5.Di2izFdDKUuiEGWuAqk6', '1', '0', 0, 0, '127.0.0.1', 0, 'system', 0, '', 0, ''); -INSERT INTO `sys_user` VALUES (3, 100, 'manager', 'manager', '', '', '0', '', '$2a$10$RND3fUw9Ai.WcggYSI57tu.u3OIlktdPxFzlWkmiHC1paV038t0I2', '1', '0', 0, 0, '127.0.0.1', 0, 'system', 0, '', 0, ''); -INSERT INTO `sys_user` VALUES (4, 100, 'monitor', 'monitor', '', '', '0', '', '$2a$10$t3zpKQ0olECotFyI1yO43.tCoS0EXoSRBDcqwl09xvrsmn14qFHHy', '1', '0', 0, 0, '127.0.0.1', 0, 'system', 0, '', 0, ''); +INSERT INTO `sys_user` VALUES (1, 100, 'supervisor', 'supervisor', '', '', '0', '', '$2a$10$QgIcp6yuOEGrEU0TNU12K.uQRLbcufesEU7hiRYlRSSdUO7OAkoTq', 'System', '#', '1', '0', 0, 0, '127.0.0.1', 0, 'system', 0, '', 0, ''); +INSERT INTO `sys_user` VALUES (2, 100, 'admin', 'admin', '', '', '0', '', '$2a$10$WVW6if2TNfR3OJmcaD9wX.gEd9TRymr5.Di2izFdDKUuiEGWuAqk6', 'System', '#', '1', '0', 0, 0, '127.0.0.1', 0, 'system', 0, '', 0, ''); +INSERT INTO `sys_user` VALUES (3, 100, 'manager', 'manager', '', '', '0', '', '$2a$10$RND3fUw9Ai.WcggYSI57tu.u3OIlktdPxFzlWkmiHC1paV038t0I2', 'System', '#', '1', '0', 0, 0, '127.0.0.1', 0, 'system', 0, '', 0, ''); +INSERT INTO `sys_user` VALUES (4, 100, 'monitor', 'monitor', '', '', '0', '', '$2a$10$t3zpKQ0olECotFyI1yO43.tCoS0EXoSRBDcqwl09xvrsmn14qFHHy', 'System', '#', '1', '0', 0, 0, '127.0.0.1', 0, 'system', 0, '', 0, ''); diff --git a/build/database/lite/upgrade/upg_alarm.sql b/build/database/lite/upgrade/upg_alarm.sql new file mode 100644 index 00000000..dbb993b7 --- /dev/null +++ b/build/database/lite/upgrade/upg_alarm.sql @@ -0,0 +1,75 @@ +-- ---------------------------- +-- Table structure for alarm +-- ---------------------------- +UPDATE "alarm" SET "alarm_type" = 'CommunicationAlarm' WHERE "alarm_type" = '1'; +UPDATE "alarm" SET "alarm_type" = 'EquipmentAlarm' WHERE "alarm_type" = '2'; +UPDATE "alarm" SET "alarm_type" = 'ProcessingFailure' WHERE "alarm_type" = '3'; +UPDATE "alarm" SET "alarm_type" = 'EnvironmentalAlarm' WHERE "alarm_type" = '4'; +UPDATE "alarm" SET "alarm_type" = 'QualityOfServiceAlarm' WHERE "alarm_type" = '5'; +UPDATE "alarm" SET "orig_severity" = 'Critical', "perceived_severity" = 'Critical' WHERE "orig_severity" = '1'; +UPDATE "alarm" SET "orig_severity" = 'Major', "perceived_severity" = 'Major' WHERE "orig_severity" = '2'; +UPDATE "alarm" SET "orig_severity" = 'Minor', "perceived_severity" = 'Minor' WHERE "orig_severity" = '3'; +UPDATE "alarm" SET "orig_severity" = 'Warning', "perceived_severity" = 'Warning' WHERE "orig_severity" = '4'; +UPDATE "alarm" SET "orig_severity" = 'Event', "perceived_severity" = 'Event' WHERE "orig_severity" = '5'; +UPDATE "alarm" SET "alarm_status" = 'Clear' WHERE "alarm_status" = '0'; +UPDATE "alarm" SET "alarm_status" = 'Active' WHERE "alarm_status" = '1'; +UPDATE "alarm" SET "ack_state" = 'NotAck' WHERE "ack_state" = '0'; +UPDATE "alarm" SET "ack_state" = 'Ack' WHERE "ack_state" = '1'; +UPDATE "alarm" SET "clear_type" = 'NotClear' WHERE "clear_type" = '0'; +UPDATE "alarm" SET "clear_type" = 'AutoClear' WHERE "clear_type" = '1'; +UPDATE "alarm" SET "clear_type" = 'ManualClear' WHERE "clear_type" = '2'; +ALTER TABLE "alarm" RENAME TO "alarm_old"; +CREATE TABLE "alarm" ( + "id" integer NOT NULL, + "ne_type" text(32) NOT NULL, + "ne_id" text(64) NOT NULL, + "ne_name" text(32), + "province" text(32), + "pv_flag" text(10), + "alarm_seq" integer(11), + "alarm_id" text(32) NOT NULL, + "alarm_title" text(255), + "alarm_code" integer(11), + "event_time" integer(20), + "alarm_type" text(64), + "orig_severity" text(64), + "perceived_severity" text(64), + "object_uid" text(64), + "object_name" text(64), + "object_type" text(20), + "location_info" text(2048), + "alarm_status" text(64), + "specific_problem" text(255), + "specific_problem_id" text(100), + "add_info" text(2048), + "ack_state" text(64), + "ack_time" integer(20), + "ack_user" text(64), + "clear_type" text(64), + "clear_time" integer(20), + "clear_user" text(64), + "timestamp" integer(20), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table alarm +-- ---------------------------- +CREATE INDEX IF NOT EXISTS "idx_status_severity_time" +ON "alarm" ( + "alarm_status" ASC, + "orig_severity" ASC, + "event_time" ASC +); +CREATE UNIQUE INDEX IF NOT EXISTS "uk_uni_ne_aid" +ON "alarm" ( + "ne_type" ASC, + "ne_id" ASC, + "alarm_id" ASC +); + +-- ---------------------------- +-- Records of alarm +-- ---------------------------- +INSERT INTO "alarm" ("id", "ne_type", "ne_id", "ne_name", "province", "pv_flag", "alarm_seq", "alarm_id", "alarm_title", "alarm_code", "event_time", "alarm_type", "orig_severity", "perceived_severity", "object_uid", "object_name", "object_type", "location_info", "alarm_status", "specific_problem", "specific_problem_id", "add_info", "ack_state", "ack_time", "ack_user", "clear_type", "clear_time", "clear_user", "timestamp") SELECT "id", "ne_type", "ne_id", "ne_name", "province", "pv_flag", "alarm_seq", "alarm_id", "alarm_title", "alarm_code", "event_time", "alarm_type", "orig_severity", "perceived_severity", "object_uid", "object_name", "object_type", "location_info", "alarm_status", "specific_problem", "specific_problem_id", "add_info", "ack_state", "ack_time", "ack_user", "clear_type", "clear_time", "clear_user", "timestamp" FROM "alarm_old"; +DROP TABLE IF EXISTS "alarm_old"; diff --git a/build/database/lite/upgrade/upg_alarm_event.sql b/build/database/lite/upgrade/upg_alarm_event.sql new file mode 100644 index 00000000..b8e5a583 --- /dev/null +++ b/build/database/lite/upgrade/upg_alarm_event.sql @@ -0,0 +1,53 @@ +-- ---------------------------- +-- Table structure for alarm_event +-- ---------------------------- +UPDATE "alarm_event" SET "alarm_status" = 'Clear' WHERE "alarm_status" = '0'; +UPDATE "alarm_event" SET "alarm_status" = 'Active' WHERE "alarm_status" = '1'; +UPDATE "alarm_event" SET "clear_type" = 'NotClear' WHERE "clear_type" = '0'; +UPDATE "alarm_event" SET "clear_type" = 'AutoClear' WHERE "clear_type" = '1'; +UPDATE "alarm_event" SET "clear_type" = 'ManualClear' WHERE "clear_type" = '2'; +ALTER TABLE "alarm_event" RENAME TO "alarm_event_old"; +CREATE TABLE "alarm_event" ( + "id" integer NOT NULL, + "ne_type" text(32) NOT NULL, + "ne_id" text(64) NOT NULL, + "alarm_seq" integer(11), + "alarm_id" text(32) NOT NULL, + "alarm_title" text(255), + "alarm_code" integer(11), + "event_time" integer(20), + "object_uid" text(64), + "object_name" text(64), + "object_type" text(20), + "location_info" text(2048), + "alarm_status" text(64), + "specific_problem" text(255), + "specific_problem_id" text(100), + "add_info" text(2048), + "clear_type" text(64), + "clear_time" integer(20), + "clear_user" text(64), + "timestamp" integer(20), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table alarm_event +-- ---------------------------- +CREATE INDEX IF NOT EXISTS "idx_astatus_etime" +ON "alarm_event" ( + "alarm_status" ASC, + "event_time" ASC +); +CREATE UNIQUE INDEX IF NOT EXISTS "uk_ti_aid" +ON "alarm_event" ( + "ne_type" ASC, + "ne_id" ASC, + "alarm_id" ASC +); + +-- ---------------------------- +-- Records of alarm_event +-- ---------------------------- +INSERT INTO "alarm_event" ("id", "ne_type", "ne_id", "alarm_seq", "alarm_id", "alarm_title", "alarm_code", "event_time", "object_uid", "object_name", "object_type", "location_info", "alarm_status", "specific_problem", "specific_problem_id", "add_info", "clear_type", "clear_time", "clear_user", "timestamp") SELECT "id", "ne_type", "ne_id", "alarm_seq", "alarm_id", "alarm_title", "alarm_code", "event_time", "object_uid", "object_name", "object_type", "location_info", "alarm_status", "specific_problem", "specific_problem_id", "add_info", "clear_type", "clear_time", "clear_user", "timestamp" FROM "alarm_event_old"; +DROP TABLE IF EXISTS "alarm_event_old"; diff --git a/build/database/lite/upgrade/upg_alarm_forward_log.sql b/build/database/lite/upgrade/upg_alarm_forward_log.sql new file mode 100644 index 00000000..93e5a7e7 --- /dev/null +++ b/build/database/lite/upgrade/upg_alarm_forward_log.sql @@ -0,0 +1,40 @@ +-- ---------------------------- +-- Table structure for alarm_forward_log +-- ---------------------------- +UPDATE "alarm_forward_log" SET "alarm_type" = 'CommunicationAlarm' WHERE "alarm_type" = '1'; +UPDATE "alarm_forward_log" SET "alarm_type" = 'EquipmentAlarm' WHERE "alarm_type" = '2'; +UPDATE "alarm_forward_log" SET "alarm_type" = 'ProcessingFailure' WHERE "alarm_type" = '3'; +UPDATE "alarm_forward_log" SET "alarm_type" = 'EnvironmentalAlarm' WHERE "alarm_type" = '4'; +UPDATE "alarm_forward_log" SET "alarm_type" = 'QualityOfServiceAlarm' WHERE "alarm_type" = '5'; +UPDATE "alarm_forward_log" SET "orig_severity" = 'Critical' WHERE "orig_severity" = '1'; +UPDATE "alarm_forward_log" SET "orig_severity" = 'Major' WHERE "orig_severity" = '2'; +UPDATE "alarm_forward_log" SET "orig_severity" = 'Minor' WHERE "orig_severity" = '3'; +UPDATE "alarm_forward_log" SET "orig_severity" = 'Warning' WHERE "orig_severity" = '4'; +UPDATE "alarm_forward_log" SET "orig_severity" = 'Event' WHERE "orig_severity" = '5'; +UPDATE "alarm_forward_log" SET "alarm_status" = 'Clear' WHERE "alarm_status" = '0'; +UPDATE "alarm_forward_log" SET "alarm_status" = 'Active' WHERE "alarm_status" = '1'; +ALTER TABLE "alarm_forward_log" RENAME TO "alarm_forward_log_old"; +CREATE TABLE "alarm_forward_log" ( + "id" integer NOT NULL, + "ne_type" text(16), + "ne_id" text(64) NOT NULL, + "alarm_seq" integer(11), + "alarm_id" text(32), + "alarm_code" integer(11), + "alarm_title" text(255), + "alarm_status" text(64), + "alarm_type" text(64), + "orig_severity" text(10), + "event_time" integer(20), + "created_at" integer(20), + "type" text(255), + "target" text(255), + "result" text(255), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Records of alarm_forward_log +-- ---------------------------- +INSERT INTO "alarm_forward_log" ("id", "ne_type", "ne_id", "alarm_seq", "alarm_id", "alarm_code", "alarm_title", "alarm_status", "alarm_type", "orig_severity", "event_time", "created_at", "type", "target", "result") SELECT "id", "ne_type", "ne_id", "alarm_seq", "alarm_id", "alarm_code", "alarm_title", "alarm_status", "alarm_type", "orig_severity", "event_time", "created_at", "type", "target", "result" FROM "alarm_forward_log_old"; +DROP TABLE IF EXISTS "alarm_forward_log_old"; diff --git a/build/database/lite/upgrade/upg_alarm_log.sql b/build/database/lite/upgrade/upg_alarm_log.sql new file mode 100644 index 00000000..66b78694 --- /dev/null +++ b/build/database/lite/upgrade/upg_alarm_log.sql @@ -0,0 +1,37 @@ +-- ---------------------------- +-- Table structure for alarm_log +-- ---------------------------- +UPDATE "alarm_log" SET "alarm_type" = 'CommunicationAlarm' WHERE "alarm_type" = '1'; +UPDATE "alarm_log" SET "alarm_type" = 'EquipmentAlarm' WHERE "alarm_type" = '2'; +UPDATE "alarm_log" SET "alarm_type" = 'ProcessingFailure' WHERE "alarm_type" = '3'; +UPDATE "alarm_log" SET "alarm_type" = 'EnvironmentalAlarm' WHERE "alarm_type" = '4'; +UPDATE "alarm_log" SET "alarm_type" = 'QualityOfServiceAlarm' WHERE "alarm_type" = '5'; +UPDATE "alarm_log" SET "orig_severity" = 'Critical' WHERE "orig_severity" = '1'; +UPDATE "alarm_log" SET "orig_severity" = 'Major' WHERE "orig_severity" = '2'; +UPDATE "alarm_log" SET "orig_severity" = 'Minor' WHERE "orig_severity" = '3'; +UPDATE "alarm_log" SET "orig_severity" = 'Warning' WHERE "orig_severity" = '4'; +UPDATE "alarm_log" SET "orig_severity" = 'Event' WHERE "orig_severity" = '5'; +UPDATE "alarm_log" SET "alarm_status" = 'Clear' WHERE "alarm_status" = '0'; +UPDATE "alarm_log" SET "alarm_status" = 'Active' WHERE "alarm_status" = '1'; +ALTER TABLE "alarm_log" RENAME TO "alarm_log_old"; +CREATE TABLE "alarm_log" ( + "id" integer NOT NULL, + "ne_type" text(16), + "ne_id" text(64) NOT NULL, + "alarm_seq" integer(11), + "alarm_id" text(32), + "alarm_code" integer(11), + "alarm_title" text(255), + "alarm_status" text(64), + "alarm_type" text(64), + "orig_severity" text(64), + "event_time" integer(20), + "created_at" integer(20), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Records of alarm_log +-- ---------------------------- +INSERT INTO "alarm_log" ("id", "ne_type", "ne_id", "alarm_seq", "alarm_id", "alarm_code", "alarm_title", "alarm_status", "alarm_type", "orig_severity", "event_time", "created_at") SELECT "id", "ne_type", "ne_id", "alarm_seq", "alarm_id", "alarm_code", "alarm_title", "alarm_status", "alarm_type", "orig_severity", "event_time", "created_at" FROM "alarm_log_old"; +DROP TABLE IF EXISTS "alarm_log_old"; diff --git a/build/database/lite/upgrade/upg_cbc_message.sql b/build/database/lite/upgrade/upg_cbc_message.sql new file mode 100755 index 00000000..b2a1924d --- /dev/null +++ b/build/database/lite/upgrade/upg_cbc_message.sql @@ -0,0 +1,24 @@ +-- ---------------------------- +-- Table structure for cbc_message +-- ---------------------------- +CREATE TABLE IF NOT EXISTS "cbc_message" ( + "id" integer NOT NULL, + "ne_type" text(32), + "ne_id" text(32), + "message_json" text(10240), + "status" text(32), + "detail" text(255), + "created_at" integer, + "updated_at" integer, + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table cbc_message +-- ---------------------------- +CREATE INDEX IF NOT EXISTS "idx_cbcm_ne_time" +ON "cbc_message" ( + "ne_type" ASC, + "ne_id" ASC, + "created_at" ASC +); diff --git a/build/database/lite/upgrade/upg_kpi_c_title.sql b/build/database/lite/upgrade/upg_kpi_c_title.sql index 9e683954..912241e8 100644 --- a/build/database/lite/upgrade/upg_kpi_c_title.sql +++ b/build/database/lite/upgrade/upg_kpi_c_title.sql @@ -53,3 +53,5 @@ REPLACE INTO "kpi_c_title" VALUES (90, 'IMS', 'IMS.C.01', 'InitReg_Success_Rate' REPLACE INTO "kpi_c_title" VALUES (91, 'IMS', 'IMS.C.02', 'MO_Success_Rate', '(''SCSCF.05''/''SCSCF.06'')*100', '%', '', '1', 'admin', 1739362260083); REPLACE INTO "kpi_c_title" VALUES (92, 'IMS', 'IMS.C.03', 'MT_Success_Rate', '(''SCSCF.07''/''SCSCF.08'')*100', '%', '', '1', 'admin', 1739362260083); REPLACE INTO "kpi_c_title" VALUES (93, 'IMS', 'IMS.C.04', 'Service_Success_Rate', '((''SCSCF.05''+''SCSCF.07'')/(''SCSCF.06''+''SCSCF.08''))*100', '%', '', '1', 'admin', 1739362260083); +REPLACE INTO "kpi_c_title" VALUES (94, 'IMS', 'IMS.C.05', 'IDDOutgoing_Success_Rate', '(''IDD.03''/''IDD.01'')*100', '%', '', '1', 'admin', 1739362260083); +REPLACE INTO "kpi_c_title" VALUES (95, 'IMS', 'IMS.C.06', 'IDDIncoming_Success_Rate', '(''IDD.06''/''IDD.04'')*100', '%', '', '1', 'admin', 1739362260083); diff --git a/build/database/lite/upgrade/upg_mml_log.sql b/build/database/lite/upgrade/upg_mml_log.sql new file mode 100644 index 00000000..8c2a5391 --- /dev/null +++ b/build/database/lite/upgrade/upg_mml_log.sql @@ -0,0 +1,19 @@ +-- ---------------------------- +-- Table structure for mml_log +-- ---------------------------- +DROP TABLE IF EXISTS "mml_log"; +CREATE TABLE "mml_log" ( + "id" integer NOT NULL, + "user" text(32), + "ip" text(64), + "ne_type" text(32), + "ne_id" text(32), + "command" text(512), + "result" text(255), + "log_time" integer, + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Records of mml_log +-- ---------------------------- diff --git a/build/database/lite/upgrade/upg_sys_config.sql b/build/database/lite/upgrade/upg_sys_config.sql new file mode 100644 index 00000000..5c378642 --- /dev/null +++ b/build/database/lite/upgrade/upg_sys_config.sql @@ -0,0 +1,45 @@ +-- ---------------------------- +-- Table structure for sys_config +-- ---------------------------- +CREATE TABLE IF NOT EXISTS "sys_config" ( + "config_id" integer NOT NULL, + "config_name" text(64), + "config_key" text(64), + "config_value" text(500), + "config_type" text(1), + "del_flag" text(1), + "create_by" text(64), + "create_time" integer, + "update_by" text(64), + "update_time" integer, + "remark" text(500), + PRIMARY KEY ("config_id") +); + +-- ---------------------------- +-- Records of sys_config +-- ---------------------------- +REPLACE INTO "sys_config" VALUES (1, 'config.sys.user.initPassword', 'sys.user.initPassword', 'Abcd@1234..', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.user.initPasswordRemark'); +REPLACE INTO "sys_config" VALUES (2, 'config.sys.account.captchaEnabled', 'sys.account.captchaEnabled', 'false', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.account.captchaEnabledRemark'); +REPLACE INTO "sys_config" VALUES (3, 'config.sys.account.registerUser', 'sys.account.registerUser', 'false', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.account.registerUserRemark'); +REPLACE INTO "sys_config" VALUES (4, 'config.sys.user.maxRetryCount', 'sys.user.maxRetryCount', '5', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.user.maxRetryCountRemark'); +REPLACE INTO "sys_config" VALUES (5, 'config.sys.user.lockTime', 'sys.user.lockTime', '10', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.user.lockTimeRemark'); +REPLACE INTO "sys_config" VALUES (6, 'config.sys.officialUrl', 'sys.officialUrl', '#', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.officialUrlRemark'); +REPLACE INTO "sys_config" VALUES (7, 'config.sys.helpDoc', 'sys.helpDoc', '/static/helpDoc/{language}_doc.pdf', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.helpDocRemark'); +REPLACE INTO "sys_config" VALUES (8, 'sys.account.captchaType', 'sys.account.captchaType', 'math', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'sys.account.captchaTypeRemark'); +REPLACE INTO "sys_config" VALUES (9, 'config.sys.user.passwordPolicy', 'sys.user.passwordPolicy', '{"minLength":6,"specialChars":0,"uppercase":0,"lowercase":0}', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.user.passwordPolicyRemark'); +REPLACE INTO "sys_config" VALUES (10, 'config.sys.user.passwdExpire', 'sys.user.passwdExpire', '{"expHours":0,"alertHours":360}', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.user.passwdExpireRemark'); +REPLACE INTO "sys_config" VALUES (11, 'config.sys.user.fristPasswdChange', 'sys.user.fristPasswdChange', 'false', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.user.fristPasswdChangeRemark'); +REPLACE INTO "sys_config" VALUES (12, 'config.sys.user.passwdNotAllowedHistory', 'sys.user.passwdNotAllowedHistory', '0', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.user.passwdNotAllowedHistoryRemark'); +REPLACE INTO "sys_config" VALUES (21, 'config.monitor.sysResource.storeDays', 'monitor.sysResource.storeDays', '30', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.monitor.sysResource.storeDaysRemark'); +REPLACE INTO "sys_config" VALUES (22, 'config.sys.logo.type', 'sys.logo.type', 'brand', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.logo.typeRemark'); +REPLACE INTO "sys_config" VALUES (23, 'config.sys.logo.filePathIcon', 'sys.logo.filePathIcon', '/static/logo/{language}_icon.png', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.logo.filePathIconRemark'); +REPLACE INTO "sys_config" VALUES (24, 'config.sys.logo.filePathBrand', 'sys.logo.filePathBrand', '/static/logo/{language}_brand.png', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.logo.filePathBrandRemark'); +REPLACE INTO "sys_config" VALUES (25, 'config.sys.loginBackground', 'sys.loginBackground', '#', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.loginBackgroundRemark'); +REPLACE INTO "sys_config" VALUES (26, 'config.sys.title', 'sys.title', 'config.sys.titleValue', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.titleRemark'); +REPLACE INTO "sys_config" VALUES (27, 'config.sys.copyright', 'sys.copyright', 'config.sys.copyrightValue', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.copyrightRemark'); +REPLACE INTO "sys_config" VALUES (28, 'config.sys.i18nOpen', 'sys.i18n.open', 'true', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.i18nOpenRemark'); +REPLACE INTO "sys_config" VALUES (29, 'config.sys.i18nDefault', 'sys.i18n.default', 'en_US', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.i18nDefaultRemark'); +REPLACE INTO "sys_config" VALUES (30, 'config.sys.lockTime', 'sys.lockTime', '0', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.lockTimeRemark'); +REPLACE INTO "sys_config" VALUES (31, 'config.sys.homePage', 'sys.homePage', 'configManage/neOverview/index', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.homePageRemark'); +REPLACE INTO "sys_config" VALUES (32, 'config.neData.backupDataFTP', 'neData.backupDataFTP', 'VXEECeDMoYhX29pqsb753ecJOnPfxB6XrEa9QdUrRqwKI7EmJei5HlvehvL+wL0Osjo3Y2Qs7ADA6eL3SrisiVXAVVXv38KMhvcSU9eaAzl/jrY4ahsq6a/eSbzxFDgE21US7/YnsyDRG7eGAc7W5Q==', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.neData.backupDataFTPRemark'); diff --git a/build/database/lite/upgrade/upg_sys_dict_data.sql b/build/database/lite/upgrade/upg_sys_dict_data.sql new file mode 100644 index 00000000..aae60d22 --- /dev/null +++ b/build/database/lite/upgrade/upg_sys_dict_data.sql @@ -0,0 +1,198 @@ +-- ---------------------------- +-- Table structure for sys_dict_data +-- ---------------------------- +CREATE TABLE IF NOT EXISTS "sys_dict_data" ( + "data_id" integer NOT NULL, + "dict_type" text(64) NOT NULL, + "data_label" text(255) NOT NULL, + "data_value" text(512) NOT NULL, + "data_sort" integer(11), + "tag_class" text(64), + "tag_type" text(12), + "status_flag" text(1), + "del_flag" text(1), + "create_by" text(64), + "create_time" integer(20), + "update_by" text(64), + "update_time" integer(20), + "remark" text(500), + PRIMARY KEY ("data_id") +); + +-- ---------------------------- +-- Records of sys_dict_data +-- ---------------------------- +REPLACE INTO "sys_dict_data" VALUES (1, 'sys_user_sex', 'dictData.sex.un', '0', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (2, 'sys_user_sex', 'dictData.sex.male', '1', 2, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (3, 'sys_user_sex', 'dictData.sex.female', '2', 3, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (4, 'sys_show_hide', 'dictData.show', '1', 1, '', 'success', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (5, 'sys_show_hide', 'dictData.hide', '0', 2, '', 'error', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (6, 'sys_normal_disable', 'dictData.normal', '1', 1, '', 'success', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (7, 'sys_normal_disable', 'dictData.disable', '0', 2, '', 'error', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (8, 'sys_yes_no', 'dictData.yes', 'Y', 1, '', 'success', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (9, 'sys_yes_no', 'dictData.no', 'N', 2, '', 'error', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (10, 'sys_common_status', 'dictData.success', '1', 1, '', 'success', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (11, 'sys_common_status', 'dictData.fail', '0', 2, '', 'error', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (12, 'sys_job_status', 'dictData.jobStatus.normal', '1', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (13, 'sys_job_status', 'dictData.jobStatus.pause', '0', 2, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (14, 'sys_job_group', 'dictData.jobGroup.Default', 'DEFAULT', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (15, 'sys_job_group', 'dictData.jobGroup.System', 'SYSTEM', 2, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (16, 'sys_oper_type', 'dictData.operType.other', '0', 1, '', 'purple', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (17, 'sys_oper_type', 'dictData.operType.add', '1', 2, '', 'blue', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (18, 'sys_oper_type', 'dictData.operType.edit', '2', 3, '', 'cyan', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (19, 'sys_oper_type', 'dictData.operType.delete', '3', 4, '', 'red', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (20, 'sys_oper_type', 'dictData.operType.auth', '4', 5, '', '#108ee9', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (21, 'sys_oper_type', 'dictData.operType.export', '5', 6, '', 'orange', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (22, 'sys_oper_type', 'dictData.operType.import', '6', 7, '', 'orange', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (23, 'sys_oper_type', 'dictData.operType.forced quit', '7', 8, '', 'default', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (24, 'sys_oper_type', 'dictData.operType.clear', '8', 9, '', '#f50', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (25, 'trace_type', 'dictData.trace.interface', '1', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (26, 'trace_type', 'dictData.trace.device', '2', 2, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (27, 'trace_type', 'dictData.trace.user', '3', 3, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (28, 'sys_job_save_log', 'dictData.jobSaveLog.no', '0', 8, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (29, 'sys_job_save_log', 'dictData.jobSaveLog.yes', '1', 9, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (30, 'ne_host_type', 'dictData.ne_host_type.redis', 'redis', 2, '', 'magenta', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (31, 'alarm_status', 'dictData.alarmStatus.history', 'Clear', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (32, 'alarm_status', 'dictData.alarmStatus.active', 'Active', 2, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (33, 'sys_role_datascope', 'dictData.datascope.all', '1', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (34, 'sys_role_datascope', 'dictData.datascope.custom', '2', 2, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (35, 'sys_role_datascope', 'dictData.datascope.dept', '3', 3, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (36, 'sys_role_datascope', 'dictData.datascope.deptAndChid', '4', 4, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (37, 'sys_role_datascope', 'dictData.datascope.self', '5', 5, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (38, 'active_alarm_type', 'dictData.active_alarm_type.communication', 'CommunicationAlarm', 1, '', 'gold', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (39, 'active_alarm_type', 'dictData.active_alarm_type.equipment', 'EquipmentAlarm', 2, '', 'cyan', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (40, 'active_alarm_type', 'dictData.active_alarm_type.processing', 'ProcessingFailure', 3, '', 'blue ', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (41, 'active_alarm_type', 'dictData.active_alarm_type.environmental', 'EnvironmentalAlarm', 4, '', 'yellow', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (42, 'active_alarm_type', 'dictData.active_alarm_type.qualityOfService', 'QualityOfServiceAlarm', 5, '', 'purple', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (43, 'active_clear_type', 'dictData.active_clear_type.notCleared', 'NotClear', 0, '', 'processing', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (44, 'active_clear_type', 'dictData.active_clear_type.auto', 'AutoClear', 1, '', 'gold', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (45, 'active_clear_type', 'dictData.active_clear_type.hand', 'ManualClear', 2, '', 'success', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (46, 'active_ack_state', 'dictData.active_ack_state.unconfirmed', 'NotAck', 0, '', 'processing', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (47, 'active_ack_state', 'dictData.active_ack_state.confirmed', 'Ack', 1, '', 'success', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (48, 'active_alarm_severity', 'dictData.active_alarm_severity.critical', 'Critical', 1, '', 'gold', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (49, 'active_alarm_severity', 'dictData.active_alarm_severity.major', 'Major', 2, '', 'cyan', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (50, 'active_alarm_severity', 'dictData.active_alarm_severity.minor', 'Minor', 3, '', 'blue ', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (51, 'active_alarm_severity', 'dictData.active_alarm_severity.warning', 'Warning', 4, '', 'yellow', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (52, 'active_alarm_severity', 'dictData.active_alarm_severity.event', 'Event', 5, '', 'purple', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (53, 'index_status', 'dictType.index_status.normal', 'normal', 1, '#91cc75', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (54, 'index_status', 'dictType.index_status.abnormal', 'abnormal', 2, '#ee6666', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (55, 'cdr_sip_code', 'dictData.cdr_sip_code.200', '200', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (56, 'cdr_sip_code', 'dictData.cdr_sip_code.403', '403', 5, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (57, 'cdr_sip_code', 'dictData.cdr_sip_code.408', '408', 13, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (58, 'cdr_sip_code', 'dictData.cdr_sip_code.500', '500', 16, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (59, 'cdr_call_type', 'dictData.cdr_call_type.audio', 'audio', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (60, 'cdr_call_type', 'dictData.cdr_call_type.video', 'video', 2, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (61, 'ue_auth_code', 'dictData.ue_auth_code.200', '200', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (62, 'ue_auth_code', 'dictData.ue_auth_code.001', '001', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (63, 'ue_auth_code', 'dictData.ue_auth_code.002', '002', 2, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (64, 'ue_auth_code', 'dictData.ue_auth_code.003', '003', 3, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (65, 'ue_auth_code', 'dictData.ue_auth_code.004', '004', 4, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (66, 'ue_auth_code', 'dictData.ue_auth_code.005', '005', 5, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (67, 'ue_auth_code', 'dictData.ue_auth_code.006', '006', 6, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (68, 'ue_auth_code', 'dictData.ue_auth_code.007', '007', 7, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (69, 'ue_event_type', 'dictData.ue_event_type.auth', 'Auth', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (70, 'ue_event_type', 'dictData.ue_event_type.detach', 'Detach', 2, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (71, 'ue_event_type', 'dictData.ue_event_type.state', 'CM', 3, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (72, 'ue_event_cm_state', 'dictData.ue_event_cm_state.connected', '1', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (73, 'ue_event_cm_state', 'dictData.ue_event_cm_state.idle', '2', 2, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (74, 'ue_event_cm_state', 'dictData.ue_event_cm_state.inactive', '3', 3, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (75, 'cdr_sip_code', 'dictData.cdr_sip_code.404', '404', 6, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (76, 'cdr_sip_code', 'dictData.cdr_sip_code.487', '487', 12, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (77, 'cdr_sip_code', 'dictData.cdr_sip_code.503', '503', 17, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (78, 'cdr_sip_code', 'dictData.cdr_sip_code.504', '504', 18, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (79, 'cdr_sip_code', 'dictData.cdr_sip_code.603', '603', 21, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (80, 'cdr_sip_code', 'dictData.cdr_sip_code.606', '606', 22, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (81, 'cdr_sip_code', 'dictData.cdr_sip_code.202', '202', 2, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (82, 'cdr_call_type', 'dictData.cdr_call_type.sms', 'sms', 3, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (83, 'cdr_sip_code', 'dictData.cdr_sip_code.488', '488', 14, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (84, 'cdr_sip_code', 'dictData.cdr_sip_code.0', '0', 99, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (85, 'ne_host_type', 'dictData.ne_host_type.ssh', 'ssh', 0, '', 'blue', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (86, 'ne_host_type', 'dictData.ne_host_type.telnet', 'telnet', 1, '', 'purple', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (87, 'ne_host_groupId', 'dictData.ne_host_groupId.0', '0', 0, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (88, 'ne_host_groupId', 'dictData.ne_host_groupId.1', '1', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (89, 'ne_host_groupId', 'dictData.ne_host_groupId.2', '2', 2, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (90, 'ne_host_authMode', 'dictData.ne_host_authMode.0', '0', 0, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (91, 'ne_host_authMode', 'dictData.ne_host_authMode.1', '1', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (92, 'ne_host_cmd_groupId', 'dictData.ne_host_cmd_groupId.0', '0', 0, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (93, 'ne_host_cmd_groupId', 'dictData.ne_host_cmd_groupId.1', '1', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (94, 'ne_info_status', 'dictData.ne_info_status.0', '0', 0, '', 'error', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (95, 'ne_info_status', 'dictData.ne_info_status.1', '1', 1, '', 'success', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (96, 'ne_info_status', 'dictData.ne_info_status.2', '2', 2, '', 'orange', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (97, 'ne_info_status', 'dictData.ne_info_status.3', '3', 3, '', 'blue', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (98, 'ne_license_status', 'dictData.ne_license_status.0', '0', 0, '', 'warning', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (99, 'ne_license_status', 'dictData.ne_license_status.1', '1', 1, '', 'processing', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (100, 'ne_host_authMode', 'dictData.ne_host_authMode.2', '2', 2, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (101, 'ne_version_status', 'dictData.ne_version_status.0', '0', 0, '', 'default', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (102, 'ne_version_status', 'dictData.ne_version_status.1', '1', 1, '', 'success', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (103, 'ne_version_status', 'dictData.ne_version_status.2', '2', 1, '', 'purple', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (104, 'ne_version_status', 'dictData.ne_version_status.3', '3', 1, '', 'processing', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (105, 'cdr_cause_code', 'dictData.cdr_cause_code.0', '0', 0, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (106, 'cdr_cause_code', 'dictData.cdr_cause_code.8', '8', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (107, 'cdr_cause_code', 'dictData.cdr_cause_code.10', '10', 2, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (108, 'cdr_cause_code', 'dictData.cdr_cause_code.21', '21', 10, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (109, 'cdr_cause_code', 'dictData.cdr_cause_code.22', '22', 11, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (110, 'cdr_cause_code', 'dictData.cdr_cause_code.27', '27', 12, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (111, 'cdr_cause_code', 'dictData.cdr_cause_code.28', '28', 13, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (112, 'cdr_cause_code', 'dictData.cdr_cause_code.29', '29', 14, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (113, 'cdr_cause_code', 'dictData.cdr_cause_code.30', '30', 15, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (114, 'cdr_cause_code', 'dictData.cdr_cause_code.38', '38', 16, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (115, 'cdr_cause_code', 'dictData.cdr_cause_code.41', '41', 20, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (116, 'cdr_cause_code', 'dictData.cdr_cause_code.41', '41', 21, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (117, 'cdr_cause_code', 'dictData.cdr_cause_code.42', '42', 22, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (118, 'cdr_cause_code', 'dictData.cdr_cause_code.47', '47', 23, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (119, 'cdr_cause_code', 'dictData.cdr_cause_code.50', '50', 30, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (120, 'trace_msg_type', 'dictData.trace_msg_type.0', '0', 0, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (121, 'trace_msg_type', 'dictData.trace_msg_type.1', '1', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (122, 'trace_msg_direct', 'dictData.trace_msg_direct.0', '0', 0, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (123, 'trace_msg_direct', 'dictData.trace_msg_direct.1', '1', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (124, 'trace_interfaces', 'dictData.trace_interfaces.1', 'N1', 1, '', '', '0', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (125, 'trace_interfaces', 'dictData.trace_interfaces.2', 'N2', 2, '', '', '0', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (126, 'trace_interfaces', 'dictData.trace_interfaces.3', 'N1/N2', 3, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (127, 'trace_interfaces', 'dictData.trace_interfaces.4', 'N4', 4, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (128, 'trace_interfaces', 'dictData.trace_interfaces.8', 'N8', 8, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (129, 'trace_interfaces', 'dictData.trace_interfaces.10', 'N10', 10, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (130, 'trace_interfaces', 'dictData.trace_interfaces.11', 'N11', 11, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (131, 'trace_interfaces', 'dictData.trace_interfaces.12', 'N12', 12, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (132, 'trace_interfaces', 'dictData.trace_interfaces.13', 'N13', 13, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (133, 'trace_interfaces', 'dictData.trace_interfaces.7', 'N7', 7, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (134, 'trace_interfaces', 'dictData.trace_interfaces.15', 'N15', 15, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (135, 'trace_interfaces', 'dictData.trace_interfaces.17', 'N17', 17, '', '', '0', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (136, 'trace_interfaces', 'dictData.trace_interfaces.20', 'N20', 20, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (137, 'trace_interfaces', 'dictData.trace_interfaces.22', 'N22', 22, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (138, 'trace_interfaces', 'dictData.trace_interfaces.40', 'N40', 40, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (139, 'cdr_sip_code', 'dictData.cdr_sip_code.302', '302', 3, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (140, 'cdr_sip_code', 'dictData.cdr_sip_code.402', '402', 4, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (141, 'cdr_sip_code', 'dictData.cdr_sip_code.480', '480', 7, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (142, 'cdr_sip_code', 'dictData.cdr_sip_code.481', '481', 8, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (143, 'cdr_sip_code', 'dictData.cdr_sip_code.482', '482', 9, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (144, 'cdr_sip_code', 'dictData.cdr_sip_code.486', '486', 11, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (145, 'cdr_sip_code', 'dictData.cdr_sip_code.489', '489', 15, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (146, 'cdr_sip_code', 'dictData.cdr_sip_code.580', '580', 19, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (147, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.0', '0', 99, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (148, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.200', '200', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (149, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.202', '202', 2, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (150, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.302', '302', 3, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (151, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.402', '402', 4, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (152, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.403', '403', 5, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (153, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.404', '404', 6, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (154, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.480', '480', 7, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (155, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.481', '481', 8, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (156, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.482', '482', 9, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (157, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.486', '486', 11, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (158, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.487', '487', 12, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (159, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.408', '408', 13, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (160, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.488', '488', 14, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (161, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.489', '489', 15, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (162, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.500', '500', 16, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (163, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.503', '503', 17, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (164, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.504', '504', 18, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (165, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.580', '580', 19, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (166, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.603', '603', 21, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (167, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.606', '606', 22, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (168, 'trace_interfaces', 'dictData.trace_interfaces.14', 'N14', 14, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (169, 'trace_interfaces', 'dictData.trace_interfaces.5', 'N5', 5, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (170, 'sys_user_type', 'dictData.sys_user_type.system', 'System', 1, '', 'default', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (171, 'sys_user_type', 'dictData.sys_user_type.ldap', 'LDAP', 2, '', 'lime', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (172, 'sys_user_type', 'dictData.sys_user_type.smtp', 'SMTP', 3, '', 'magenta', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_data" VALUES (173, 'sys_user_type', 'dictData.sys_user_type.oauth2', 'OAuth2', 4, '', 'gold', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); + diff --git a/build/database/lite/upgrade/upg_sys_dict_type.sql b/build/database/lite/upgrade/upg_sys_dict_type.sql new file mode 100644 index 00000000..dca3cac3 --- /dev/null +++ b/build/database/lite/upgrade/upg_sys_dict_type.sql @@ -0,0 +1,54 @@ +-- ---------------------------- +-- Table structure for sys_dict_type +-- ---------------------------- +CREATE TABLE IF NOT EXISTS "sys_dict_type" ( + "dict_id" integer NOT NULL, + "dict_name" text(64) NOT NULL, + "dict_type" text(64) NOT NULL, + "status_flag" text(1), + "del_flag" text(1), + "create_by" text(64), + "create_time" integer(20), + "update_by" text(64), + "update_time" integer(20), + "remark" text(500), + PRIMARY KEY ("dict_id") +); + +-- ---------------------------- +-- Records of sys_dict_type +-- ---------------------------- +REPLACE INTO "sys_dict_type" VALUES (1, 'dictType.sys_user_sex', 'sys_user_sex', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_user_sex_remark'); +REPLACE INTO "sys_dict_type" VALUES (2, 'dictType.sys_show_hide', 'sys_show_hide', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_show_hide_remark'); +REPLACE INTO "sys_dict_type" VALUES (3, 'dictType.sys_normal_disable', 'sys_normal_disable', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_normal_disable_remark'); +REPLACE INTO "sys_dict_type" VALUES (4, 'dictType.sys_job_status', 'sys_job_status', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_job_status_remark'); +REPLACE INTO "sys_dict_type" VALUES (5, 'dictType.sys_job_group', 'sys_job_group', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_job_group_remark'); +REPLACE INTO "sys_dict_type" VALUES (6, 'dictType.sys_yes_no', 'sys_yes_no', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_yes_no_remark'); +REPLACE INTO "sys_dict_type" VALUES (9, 'dictType.sys_oper_type', 'sys_oper_type', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_oper_type_remark'); +REPLACE INTO "sys_dict_type" VALUES (10, 'dictType.sys_common_status', 'sys_common_status', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_common_status_remark'); +REPLACE INTO "sys_dict_type" VALUES (11, 'dictType.sys_user_type', 'sys_user_type', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_type" VALUES (50, 'dictType.trace_type', 'trace_type', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.trace_type_remark'); +REPLACE INTO "sys_dict_type" VALUES (51, 'dictType.alarm_status', 'alarm_status', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.alarm_status_remark'); +REPLACE INTO "sys_dict_type" VALUES (52, 'dictType.ne_version_status', 'ne_version_status', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.ne_version_status_remark'); +REPLACE INTO "sys_dict_type" VALUES (53, 'dictType.sys_role_datascope', 'sys_role_datascope', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_role_datascope_remark'); +REPLACE INTO "sys_dict_type" VALUES (54, 'dictType.active_alarm_type', 'active_alarm_type', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.active_alarm_type_remark'); +REPLACE INTO "sys_dict_type" VALUES (55, 'dictType.active_clear_type', 'active_clear_type', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.active_clear_type_remark'); +REPLACE INTO "sys_dict_type" VALUES (56, 'dictType.active_ack_state', 'active_ack_state', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.active_ack_state_remark'); +REPLACE INTO "sys_dict_type" VALUES (57, 'dictType.active_alarm_severity', 'active_alarm_severity', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.active_alarm_severity_remark'); +REPLACE INTO "sys_dict_type" VALUES (58, 'dictType.index_status', 'index_status', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.index_status_remark'); +REPLACE INTO "sys_dict_type" VALUES (59, 'dictType.cdr_sip_code', 'cdr_sip_code', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_type" VALUES (60, 'dictType.cdr_call_type', 'cdr_call_type', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_type" VALUES (61, 'dictType.ue_auth_code', 'ue_auth_code', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_type" VALUES (62, 'dictType.ue_event_type', 'ue_event_type', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_type" VALUES (63, 'dictType.ue_event_cm_state', 'ue_event_cm_state', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_type" VALUES (64, 'dictType.ne_host_type', 'ne_host_type', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_type" VALUES (65, 'dictType.ne_host_groupId', 'ne_host_groupId', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_type" VALUES (66, 'dictType.ne_host_authMode', 'ne_host_authMode', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_type" VALUES (67, 'dictType.ne_host_cmd_groupId', 'ne_host_cmd_groupId', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_type" VALUES (68, 'dictType.ne_info_status', 'ne_info_status', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_type" VALUES (69, 'dictType.ne_license_status', 'ne_license_status', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_type" VALUES (70, 'dictType.cdr_cause_code', 'cdr_cause_code', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_type" VALUES (71, 'dictType.trace_msg_type', 'trace_msg_type', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_type" VALUES (72, 'dictType.trace_msg_direct', 'trace_msg_direct', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_type" VALUES (73, 'dictType.trace_interfaces', 'trace_interfaces', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO "sys_dict_type" VALUES (74, 'dictType.cdr_sip_code_cause', 'cdr_sip_code_cause', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); diff --git a/build/database/lite/upgrade/upg_sys_i18n.sql b/build/database/lite/upgrade/upg_sys_i18n.sql new file mode 100644 index 00000000..256fbb8a --- /dev/null +++ b/build/database/lite/upgrade/upg_sys_i18n.sql @@ -0,0 +1,961 @@ +-- ---------------------------- +-- Table structure for sys_i18n +-- ---------------------------- +CREATE TABLE IF NOT EXISTS "sys_i18n" ( + "id" integer NOT NULL, + "key_lable" text(255) NOT NULL, + "value_zh" text(2048), + "value_en" text(2048), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Records of sys_i18n +-- ---------------------------- +REPLACE INTO "sys_i18n" VALUES (1, 'i18n', '中文', 'English'); +REPLACE INTO "sys_i18n" VALUES (2, 'hello', '你好', 'Hello'); +REPLACE INTO "sys_i18n" VALUES (3, 'menu.system', '系统', 'System'); +REPLACE INTO "sys_i18n" VALUES (4, 'menu.monitor', '监控', 'Monitor'); +REPLACE INTO "sys_i18n" VALUES (5, 'menu.tools', '工具', 'Tools'); +REPLACE INTO "sys_i18n" VALUES (6, 'menu.ne', '网元', 'NE'); +REPLACE INTO "sys_i18n" VALUES (7, 'menu.ue', '终端', 'UE'); +REPLACE INTO "sys_i18n" VALUES (8, 'menu.systemRemark', '系统管理目录', 'System Management Catalog'); +REPLACE INTO "sys_i18n" VALUES (9, 'menu.monitorRemark', '系统监控目录', 'System Monitor Catalog'); +REPLACE INTO "sys_i18n" VALUES (10, 'menu.toolsRemark', '系统工具目录', 'System Tools Catalog'); +REPLACE INTO "sys_i18n" VALUES (11, 'menu.neRemark', '网元配置管理目录', 'NE Configuration Management Catalog'); +REPLACE INTO "sys_i18n" VALUES (12, 'menu.ueRemark', '网元终端信息目录', 'Network Element Terminal Information Catalog'); +REPLACE INTO "sys_i18n" VALUES (13, 'menu.security.user', '用户管理', 'User Management'); +REPLACE INTO "sys_i18n" VALUES (14, 'menu.security.role', '角色管理', 'Role Management'); +REPLACE INTO "sys_i18n" VALUES (15, 'menu.security.roleUser', '分配角色', 'Assigning Roles'); +REPLACE INTO "sys_i18n" VALUES (16, 'menu.system.menu', '菜单管理', 'Menu Management'); +REPLACE INTO "sys_i18n" VALUES (17, 'menu.security.dept', '部门管理', 'Department Management'); +REPLACE INTO "sys_i18n" VALUES (18, 'menu.security.post', '岗位管理', 'Position Management'); +REPLACE INTO "sys_i18n" VALUES (19, 'menu.system.dictType', '字典管理', 'Dictionary Management'); +REPLACE INTO "sys_i18n" VALUES (20, 'menu.system.dictData', '字典数据', 'Dictionary Data'); +REPLACE INTO "sys_i18n" VALUES (21, 'menu.system.paramSet', '参数设置', 'Parameter Settings'); +REPLACE INTO "sys_i18n" VALUES (22, 'menu.system.systemLog', '系统日志', 'System Log'); +REPLACE INTO "sys_i18n" VALUES (23, 'menu.system.systemInfo', '系统信息', 'System Information'); +REPLACE INTO "sys_i18n" VALUES (24, 'menu.system.cacheInfo', '缓存信息', 'Cache Information'); +REPLACE INTO "sys_i18n" VALUES (25, 'menu.system.cache', '缓存管理', 'Cache Management'); +REPLACE INTO "sys_i18n" VALUES (26, 'menu.security.onlineUser', '在线用户', 'Online Users'); +REPLACE INTO "sys_i18n" VALUES (27, 'menu.system.job', '调度任务', 'Scheduling Tasks'); +REPLACE INTO "sys_i18n" VALUES (28, 'menu.system.jobLog', '调度日志', 'Scheduling Logs'); +REPLACE INTO "sys_i18n" VALUES (29, 'menu.tools.help', '帮助文档', 'Help Documentation'); +REPLACE INTO "sys_i18n" VALUES (30, 'menu.log.operat', '操作日志', 'Operation logs'); +REPLACE INTO "sys_i18n" VALUES (31, 'menu.log.login', '安全日志', 'Security logs'); +REPLACE INTO "sys_i18n" VALUES (32, 'menu.security.userRemark', '用户管理菜单', 'User Management Menu'); +REPLACE INTO "sys_i18n" VALUES (33, 'menu.security.roleRemark', '角色管理菜单', 'Role Management Menu'); +REPLACE INTO "sys_i18n" VALUES (34, 'menu.security.roleUserRemark', '分配角色内嵌隐藏菜单', 'Assign Roles Embedded Hidden Menu'); +REPLACE INTO "sys_i18n" VALUES (35, 'menu.system.menuRemark', '菜单管理菜单', 'Menu Management Menu'); +REPLACE INTO "sys_i18n" VALUES (36, 'menu.security.deptRemark', '部门管理菜单', 'Department management menu'); +REPLACE INTO "sys_i18n" VALUES (37, 'menu.security.postRemark', '岗位管理菜单', 'Job Management Menu'); +REPLACE INTO "sys_i18n" VALUES (38, 'menu.system.dictTypeRemark', '字典管理菜单', 'Dictionary management menu'); +REPLACE INTO "sys_i18n" VALUES (39, 'menu.system.dictDataRemark', '字典数据内嵌隐藏菜单', 'Dictionary data embedded hidden menu'); +REPLACE INTO "sys_i18n" VALUES (40, 'menu.system.paramSetRemark', '参数设置菜单', 'Parameter setting menu'); +REPLACE INTO "sys_i18n" VALUES (41, 'menu.system.systemLogRemark', '系统日志目录', 'System Log Catalog'); +REPLACE INTO "sys_i18n" VALUES (42, 'menu.system.systemInfoRemark', '系统信息菜单', 'System information menu'); +REPLACE INTO "sys_i18n" VALUES (43, 'menu.system.cacheInfoRemark', '缓存信息菜单', 'Cache Information Menu'); +REPLACE INTO "sys_i18n" VALUES (44, 'menu.system.cacheRemark', '缓存列表菜单', 'Cache List Menu'); +REPLACE INTO "sys_i18n" VALUES (45, 'menu.security.onlineUserRemark', '在线用户菜单', 'Online User Menu'); +REPLACE INTO "sys_i18n" VALUES (46, 'menu.system.jobRemark', '调度任务菜单', 'Scheduling Tasks menu'); +REPLACE INTO "sys_i18n" VALUES (47, 'menu.system.jobLogRemark', '调度日志内嵌隐藏菜单', 'Scheduling Log Embedded Hidden Menu'); +REPLACE INTO "sys_i18n" VALUES (48, 'menu.tools.helpRemark', '帮助文档菜单', 'Help file menu'); +REPLACE INTO "sys_i18n" VALUES (49, 'menu.log.operatRemark', '操作日志菜单', 'Operation log menu'); +REPLACE INTO "sys_i18n" VALUES (50, 'menu.log.loginRemark', '登录日志菜单', 'Login log menu'); +REPLACE INTO "sys_i18n" VALUES (51, 'menu.common.query', '查询', 'Inquiry'); +REPLACE INTO "sys_i18n" VALUES (52, 'menu.common.add', '新增', 'Add'); +REPLACE INTO "sys_i18n" VALUES (53, 'menu.common.edit', '修改', 'Modify'); +REPLACE INTO "sys_i18n" VALUES (54, 'menu.common.delete', '删除', 'Delete'); +REPLACE INTO "sys_i18n" VALUES (55, 'menu.common.export', '导出', 'Export'); +REPLACE INTO "sys_i18n" VALUES (56, 'menu.common.import', '导入', 'Import'); +REPLACE INTO "sys_i18n" VALUES (57, 'menu.common.resetPwd', '重置密码', 'Reset Password'); +REPLACE INTO "sys_i18n" VALUES (58, 'menu.common.unlock', '账户解锁', 'Account Unlock'); +REPLACE INTO "sys_i18n" VALUES (59, 'menu.forcedQuit.batch ', '批量强退', 'Batch Undo'); +REPLACE INTO "sys_i18n" VALUES (60, 'menu.forcedQuit.single', '单条强退', 'Individual Forced Retirement'); +REPLACE INTO "sys_i18n" VALUES (61, 'menu.neData.udmAuth', 'UDM鉴权用户', 'UDM Authentication'); +REPLACE INTO "sys_i18n" VALUES (62, 'menu.neData.udmSub', 'UDM签约用户', 'UDM Subscribers'); +REPLACE INTO "sys_i18n" VALUES (63, 'menu.neData.udmVOIP', 'VOIP鉴权用户', 'VOIP Authentication'); +REPLACE INTO "sys_i18n" VALUES (64, 'menu.neData.udmVolte', 'IMS签约用户', 'IMS Subscribers'); +REPLACE INTO "sys_i18n" VALUES (65, 'menu.neData.imsSub', 'IMS在线用户', 'IMS Online Users'); +REPLACE INTO "sys_i18n" VALUES (66, 'menu.neData.smfSub', 'UE在线信息', 'UE Online Information'); +REPLACE INTO "sys_i18n" VALUES (67, 'menu.neData.baseOnline', '基站在线', 'Radio Online'); +REPLACE INTO "sys_i18n" VALUES (68, 'menu.trace', '跟踪', 'Trace'); +REPLACE INTO "sys_i18n" VALUES (69, 'menu.trace.task', '网元跟踪任务', 'NE Trace Task'); +REPLACE INTO "sys_i18n" VALUES (70, 'menu.trace.taskData', '网元跟踪任务数据', 'NE Trace Task Data'); +REPLACE INTO "sys_i18n" VALUES (71, 'menu.trace.pcap', '信令抓包', 'Signaling Capture'); +REPLACE INTO "sys_i18n" VALUES (72, 'menu.fault', '监控', 'Monitor'); +REPLACE INTO "sys_i18n" VALUES (73, 'config.neData.backupDataFTP', '备份网元数据-同步FTP服务', 'Backup NE Data - Sync Data FTP Service'); +REPLACE INTO "sys_i18n" VALUES (74, 'config.neData.backupDataFTPRemark', '请通过系统页面进行设置FTP信息', 'Please set the FTP information through the system page.'); +REPLACE INTO "sys_i18n" VALUES (75, 'job.backup_export_table_sys_log_operate_remark', 'hour: 数据时间从任务执行时间前的小时数 +tableName: 数据表名 +columns: 支持字段 +backupPath: 备份输出路径 /usr/local/omc/backup/{backupPath}', 'hour: data time from the hour before the task execution time +tableName: data table name +columns: support fields +backupPath: backup output path /usr/local/omc/backup/{backupPath}'); +REPLACE INTO "sys_i18n" VALUES (76, 'job.backup_export_table_cdr_event_ims_remark', 'hour: 数据时间从任务执行时间前的小时数 +tableName: 数据表名 +columns: 支持字段 +backupPath: 备份输出路径 /usr/local/omc/backup/{backupPath}', 'hour: data time from the hour before the task execution time +tableName: data table name +columns: support fields +backupPath: backup output path /usr/local/omc/backup/{backupPath}'); +REPLACE INTO "sys_i18n" VALUES (77, 'job.backup_export_table_cdr_event_smf_remark', 'hour: 数据时间从任务执行时间前的小时数 +tableName: 数据表名 +columns: 支持字段 +backupPath: 备份输出路径 /usr/local/omc/backup/{backupPath}', 'hour: data time from the hour before the task execution time +tableName: data table name +columns: support fields +backupPath: backup output path /usr/local/omc/backup/{backupPath}'); +REPLACE INTO "sys_i18n" VALUES (78, 'menu.traceRemark', '跟踪管理目录', 'Tracking Management Menu'); +REPLACE INTO "sys_i18n" VALUES (79, 'menu.trace.taskRemark', '跟踪任务菜单', 'Tracking Task Menu'); +REPLACE INTO "sys_i18n" VALUES (80, 'config.sys.user.fristPasswdChange', '用户管理-首次登录密码修改', 'User Management-First Login Password Change'); +REPLACE INTO "sys_i18n" VALUES (81, 'menu.trace.pcapRemark', '信令抓包菜单', 'Signaling Capture Menu'); +REPLACE INTO "sys_i18n" VALUES (82, 'menu.faultRemark', '故障管理目录', 'Fault Management Catalog'); +REPLACE INTO "sys_i18n" VALUES (83, 'menu.fault.active', '活动告警', 'Active Alarms'); +REPLACE INTO "sys_i18n" VALUES (84, 'menu.log', '日志', 'Logs'); +REPLACE INTO "sys_i18n" VALUES (85, 'menu.log.mml', 'MML日志', 'MML Logs'); +REPLACE INTO "sys_i18n" VALUES (86, 'menu.log.alarm', '告警日志', 'Alarm Logs'); +REPLACE INTO "sys_i18n" VALUES (87, 'menu.log.forwarding', '告警前转日志', 'Alarm Forwarding Logs'); +REPLACE INTO "sys_i18n" VALUES (88, 'menu.log.set', '日志设置', 'Log Settings'); +REPLACE INTO "sys_i18n" VALUES (89, 'menu.monitor.sessionUser', '用户会话', 'User Sessions'); +REPLACE INTO "sys_i18n" VALUES (90, 'menu.fault.history', '历史告警', 'Historical Alarms'); +REPLACE INTO "sys_i18n" VALUES (91, 'menu.fault.set', '设置', 'Settings'); +REPLACE INTO "sys_i18n" VALUES (92, 'menu.perf', '性能', 'Performance'); +REPLACE INTO "sys_i18n" VALUES (93, 'menu.fault.activemRemark', '活动告警菜单', 'Active Alarm Menu'); +REPLACE INTO "sys_i18n" VALUES (94, 'menu.logRemark', '日志管理目录', 'Log Management Catalog'); +REPLACE INTO "sys_i18n" VALUES (95, 'menu.log.operatOldRemark', '操作日志旧layui菜单', 'Operation log old layui menu'); +REPLACE INTO "sys_i18n" VALUES (96, 'menu.log.mmlRemark', '操作MML日志', 'Operation MML Log'); +REPLACE INTO "sys_i18n" VALUES (97, 'menu.log.alarmRemark', '告警日志菜单', 'Alarm Log Menu'); +REPLACE INTO "sys_i18n" VALUES (98, 'menu.log.securityOldRemark', '安全日志旧layui菜单', 'Security Log Old Layui Menu'); +REPLACE INTO "sys_i18n" VALUES (99, 'menu.log.forwardingRemark', '告警前转日志菜单', 'Alarm forward log menu'); +REPLACE INTO "sys_i18n" VALUES (100, 'menu.log.setRemark', '日志设置菜单', 'Log Settings menu'); +REPLACE INTO "sys_i18n" VALUES (101, 'menu.monitor.sessionUserRemark', '用户会话旧layui菜单', 'User Session Old Layui Menu'); +REPLACE INTO "sys_i18n" VALUES (102, 'menu.fault.historyRemark', '历史告警菜单', 'Alarm history menu'); +REPLACE INTO "sys_i18n" VALUES (103, 'menu.fault.setRemark', '故障通用设置菜单', 'Fault General Setup Menu'); +REPLACE INTO "sys_i18n" VALUES (104, 'menu.perfRemark', '性能目录', 'Performance Catalog'); +REPLACE INTO "sys_i18n" VALUES (105, 'menu.perf.task', '任务管理', 'Performance Tasks'); +REPLACE INTO "sys_i18n" VALUES (106, 'menu.perf.data', '性能数据', 'Performance Data'); +REPLACE INTO "sys_i18n" VALUES (107, 'menu.perf.kpiOverView', '关键指标概览', 'Key Performance Overview'); +REPLACE INTO "sys_i18n" VALUES (108, 'menu.perf.threshold', '性能门限', 'Performance Thresholds'); +REPLACE INTO "sys_i18n" VALUES (109, 'menu.perf.kpi', '关键指标', 'Key Performance Indicators'); +REPLACE INTO "sys_i18n" VALUES (110, 'menu.perf.customTarget', '自定义指标', 'Custom Indicator Management'); +REPLACE INTO "sys_i18n" VALUES (111, 'menu.perf.kpiKeyTarget', '关键指标报表', 'Key Performance Reports'); +REPLACE INTO "sys_i18n" VALUES (112, 'menu.mml', 'MML', 'MML'); +REPLACE INTO "sys_i18n" VALUES (113, 'menu.mml.ne', '网元操作', 'NE Operation'); +REPLACE INTO "sys_i18n" VALUES (114, 'menu.mml.udm', 'UDM操作', 'UDM Operation'); +REPLACE INTO "sys_i18n" VALUES (115, 'menu.mml.set', 'MML设置', 'MML Settings'); +REPLACE INTO "sys_i18n" VALUES (116, 'menu.mml.omc', 'OMC操作', 'OMC Operation'); +REPLACE INTO "sys_i18n" VALUES (117, 'menu.perf.taskRemark', '任务管理菜单', 'Task Management Menu'); +REPLACE INTO "sys_i18n" VALUES (118, 'menu.perf.dataRemark', '性能数据菜单', 'Performance Data Menu'); +REPLACE INTO "sys_i18n" VALUES (119, 'menu.dashboard.smscCDR.content', '可见短信内容', 'Visible SMS content'); +REPLACE INTO "sys_i18n" VALUES (120, 'menu.perf.thresholdRemark', '性能门限菜单', 'Performance Threshold Menu'); +REPLACE INTO "sys_i18n" VALUES (121, 'menu.perf.kpiRemark', '黄金指标菜单', 'Key Performance Indicator Menu'); +REPLACE INTO "sys_i18n" VALUES (122, 'menu.perf.customTargetRemark', '自定义指标菜单', 'Custom Indicator Management Menu'); +REPLACE INTO "sys_i18n" VALUES (123, 'menu.dashboard.smfCDRByIMSI', '数据流量报表', 'Data Usage Report'); +REPLACE INTO "sys_i18n" VALUES (124, 'menu.mmlRemark', 'MML管理目录', 'MML Management Catalog'); +REPLACE INTO "sys_i18n" VALUES (125, 'menu.mml.neRemark', '网元操作菜单', 'Network Element Operations Menu'); +REPLACE INTO "sys_i18n" VALUES (126, 'menu.mml.udmRemark', '网元UDM用户数据菜单', 'Network Element UDM User Data Menu'); +REPLACE INTO "sys_i18n" VALUES (127, 'menu.mml.setRemark', 'MML设置菜单', 'MML Setup Menu'); +REPLACE INTO "sys_i18n" VALUES (128, 'menu.mml.omcRemark', 'OMC操作菜单', 'OMC Operation Menu'); +REPLACE INTO "sys_i18n" VALUES (129, 'menu.dashboard.sgwcCDR', '漫游数据话单', 'Roaming Data CDR'); +REPLACE INTO "sys_i18n" VALUES (130, 'menu.security', '安全', 'Security'); +REPLACE INTO "sys_i18n" VALUES (131, 'menu.system.systemSet', '系统设置', 'System Settings'); +REPLACE INTO "sys_i18n" VALUES (132, 'menu.system.systemResource', '系统资源', 'System Resources'); +REPLACE INTO "sys_i18n" VALUES (133, 'log.operate.title.sgwcCDR', '漫游数据话单', 'Roaming Data CDR'); +REPLACE INTO "sys_i18n" VALUES (134, 'menu.securityRemark', '安全管理目录', 'Security Management Catalog'); +REPLACE INTO "sys_i18n" VALUES (135, 'menu.system.systemSetRemark', '系统设置菜单', 'System Settings Menu'); +REPLACE INTO "sys_i18n" VALUES (136, 'menu.system.systemResourceRemark', '系统资源 cpu io network菜单', 'System Resources cpu io network menu'); +REPLACE INTO "sys_i18n" VALUES (137, 'dictData.offline', '离线', 'Offline'); +REPLACE INTO "sys_i18n" VALUES (138, 'dictData.online', '在线', 'Online'); +REPLACE INTO "sys_i18n" VALUES (139, 'menu.neData.baseStation', '基站状态', 'Radio State'); +REPLACE INTO "sys_i18n" VALUES (140, 'menu.noData', '没有可访问菜单数据!', 'There is no accessible menu data!'); +REPLACE INTO "sys_i18n" VALUES (141, 'menu.errNameExists', '操作菜单【{name}】失败,菜单名称已存在', 'Failed to operate menu [{name}], menu name already exists!'); +REPLACE INTO "sys_i18n" VALUES (142, 'menu.errPathExists', '操作菜单【{name}】失败,菜单路由地址已存在', 'Failed to operate menu [{name}], menu routing address already exists!'); +REPLACE INTO "sys_i18n" VALUES (143, 'menu.errFramePath', '操作菜单【{name}】失败,非内部地址请以http(s)://开头', 'Failed to manipulate menu [{name}], non-internal address should start with http(s)://'); +REPLACE INTO "sys_i18n" VALUES (144, 'menu.errParentStatus', '上级菜单未启用!', 'The parent menu is not enabled!'); +REPLACE INTO "sys_i18n" VALUES (145, 'menu.errHasChildUse', '操作菜单【{name}】失败,存在使用子菜单数:{num}', 'Operation menu [{name}] failed, number of submenus in use exists: {num}'); +REPLACE INTO "sys_i18n" VALUES (146, 'menu.errHasRoleUse', '操作菜单【{name}】失败,菜单已分配给角色数:{num}', 'Operation menu [{name}] failed, number of roles the menu has been assigned to: {num}'); +REPLACE INTO "sys_i18n" VALUES (147, 'dictData.sex.un', '未选择', 'Not Selected'); +REPLACE INTO "sys_i18n" VALUES (148, 'dictData.sex.male', '男', 'Male'); +REPLACE INTO "sys_i18n" VALUES (149, 'dictData.sex.female', '女', 'Female'); +REPLACE INTO "sys_i18n" VALUES (150, 'dictData.show', '显示', 'Show'); +REPLACE INTO "sys_i18n" VALUES (151, 'dictData.hide', '隐藏', 'Hide'); +REPLACE INTO "sys_i18n" VALUES (152, 'dictData.normal', '正常', 'Active'); +REPLACE INTO "sys_i18n" VALUES (153, 'dictData.disable', '停用', 'Inactive'); +REPLACE INTO "sys_i18n" VALUES (154, 'dictData.yes', '是', 'Yes'); +REPLACE INTO "sys_i18n" VALUES (155, 'dictData.no', '否', 'No'); +REPLACE INTO "sys_i18n" VALUES (156, 'dictData.success', '成功', 'Successful'); +REPLACE INTO "sys_i18n" VALUES (157, 'dictData.fail', '失败', 'Failed'); +REPLACE INTO "sys_i18n" VALUES (158, 'dictData.jobStatus.normal', '正常', 'Active'); +REPLACE INTO "sys_i18n" VALUES (159, 'dictData.jobStatus.pause', '暂停', 'Inactive'); +REPLACE INTO "sys_i18n" VALUES (160, 'dictData.jobGroup.Default', '默认', 'Default'); +REPLACE INTO "sys_i18n" VALUES (161, 'dictData.jobGroup.System', '系统', 'System'); +REPLACE INTO "sys_i18n" VALUES (162, 'dictData.operType.other', '其他', 'Other'); +REPLACE INTO "sys_i18n" VALUES (163, 'dictData.operType.add', '新增', 'New'); +REPLACE INTO "sys_i18n" VALUES (164, 'dictData.operType.edit', '修改', 'Modify'); +REPLACE INTO "sys_i18n" VALUES (165, 'dictData.operType.delete', '删除', 'Delete'); +REPLACE INTO "sys_i18n" VALUES (166, 'dictData.operType.auth', '授权', 'Authorization'); +REPLACE INTO "sys_i18n" VALUES (167, 'dictData.operType.export', '导出', 'Export'); +REPLACE INTO "sys_i18n" VALUES (168, 'dictData.operType.import', '导入', 'Import'); +REPLACE INTO "sys_i18n" VALUES (169, 'dictData.operType.forced quit', '强退', 'Forced Retirement'); +REPLACE INTO "sys_i18n" VALUES (170, 'dictData.operType.clear', '清空', 'Clear'); +REPLACE INTO "sys_i18n" VALUES (171, 'dictData.trace.interface', '接口跟踪', 'Interface Tracing'); +REPLACE INTO "sys_i18n" VALUES (172, 'dictData.trace.device', '设备跟踪', 'Module Tracing'); +REPLACE INTO "sys_i18n" VALUES (173, 'dictData.trace.user', '用户跟踪', 'User Tracing'); +REPLACE INTO "sys_i18n" VALUES (174, 'nbState.export.id', '编号', 'ID'); +REPLACE INTO "sys_i18n" VALUES (175, 'nbState.export.name', '基站名称', 'Name'); +REPLACE INTO "sys_i18n" VALUES (176, 'nbState.export.position', '基站位置', 'Position'); +REPLACE INTO "sys_i18n" VALUES (177, 'nbState.export.address', 'IP地址', 'IP Address'); +REPLACE INTO "sys_i18n" VALUES (178, 'nbState.export.nbName', '设备名称', 'RanNodeName'); +REPLACE INTO "sys_i18n" VALUES (179, 'nbState.export.ueNum', '在线用户数', 'UE Number'); +REPLACE INTO "sys_i18n" VALUES (180, 'nbState.export.state', '基站状态', 'State'); +REPLACE INTO "sys_i18n" VALUES (181, 'nbState.export.time', '变更时间', 'Change Time'); +REPLACE INTO "sys_i18n" VALUES (182, 'neHost.okBySSHLink', '设置免密直连成功', 'Setting up a password-free direct connection is successful'); +REPLACE INTO "sys_i18n" VALUES (183, 'neHost.banNE', '禁止操作网元', 'Do not operate the NE'); +REPLACE INTO "sys_i18n" VALUES (184, 'dictData.ne_host_type.redis', 'Redis', 'Redis'); +REPLACE INTO "sys_i18n" VALUES (185, 'menu.tools.ping', '网络探测测试', 'Net Probing Test'); +REPLACE INTO "sys_i18n" VALUES (186, 'menu.tools.iperf', '网络性能测试', 'Net Performance Test'); +REPLACE INTO "sys_i18n" VALUES (187, 'dictData.jobSaveLog.no', '不记录', 'No Record'); +REPLACE INTO "sys_i18n" VALUES (188, 'dictData.jobSaveLog.yes', '记录', 'Recorded'); +REPLACE INTO "sys_i18n" VALUES (189, 'dictData.neVersionStatus.upload', '已上传', 'Uploaded'); +REPLACE INTO "sys_i18n" VALUES (190, 'dictData.neVersionStatus.inactive', '未激活', 'Inactivated'); +REPLACE INTO "sys_i18n" VALUES (191, 'dictData.neVersionStatus.active', '已激活', 'Activated'); +REPLACE INTO "sys_i18n" VALUES (192, 'dictData.alarmStatus.history', '历史告警', 'Historical Alarm'); +REPLACE INTO "sys_i18n" VALUES (193, 'dictData.alarmStatus.active', '活动告警', 'Active Alarm'); +REPLACE INTO "sys_i18n" VALUES (194, 'dictData.export.code', '数据代码', 'Data Code'); +REPLACE INTO "sys_i18n" VALUES (195, 'dictData.export.sort', '数据排序', 'Data Sort'); +REPLACE INTO "sys_i18n" VALUES (196, 'dictData.export.label', '数据标签', 'Data Key'); +REPLACE INTO "sys_i18n" VALUES (197, 'dictData.export.value', '数据键值', 'Data Value'); +REPLACE INTO "sys_i18n" VALUES (198, 'dictData.export.type', '数据排序', 'Data Type'); +REPLACE INTO "sys_i18n" VALUES (199, 'dictData.export.status', '数据状态', 'Status'); +REPLACE INTO "sys_i18n" VALUES (200, 'dictData.datascope.all', '全部数据权限', 'All data permissions'); +REPLACE INTO "sys_i18n" VALUES (201, 'dictData.datascope.custom', '自定数据权限', 'Customized Data Rights'); +REPLACE INTO "sys_i18n" VALUES (202, 'dictData.datascope.dept', '部门数据权限', 'Departmental Data Permissions'); +REPLACE INTO "sys_i18n" VALUES (203, 'dictData.datascope.deptAndChid', '部门及以下数据权限', 'Department and below'); +REPLACE INTO "sys_i18n" VALUES (204, 'dictData.datascope.self', '仅本人数据权限', 'Personal data access only'); +REPLACE INTO "sys_i18n" VALUES (205, 'dictData.noData', '没有可访问字典编码数据!', 'There is no accessible dictionary code data!'); +REPLACE INTO "sys_i18n" VALUES (206, 'dictData.errLabelExists', '操作数据【{name}】失败,该字典类型下标签名已存在', 'Failed to manipulate data [{name}], tag name already exists under this dictionary type!'); +REPLACE INTO "sys_i18n" VALUES (207, 'dictType.sys_user_sex', '用户性别', 'User Gender'); +REPLACE INTO "sys_i18n" VALUES (208, 'dictType.sys_show_hide', '菜单状态', 'Menu Status'); +REPLACE INTO "sys_i18n" VALUES (209, 'dictType.sys_normal_disable', '系统开关', 'System switches'); +REPLACE INTO "sys_i18n" VALUES (210, 'dictType.sys_job_status', '任务状态', 'Task Status'); +REPLACE INTO "sys_i18n" VALUES (211, 'dictType.sys_job_group', '任务分组', 'Task Grouping'); +REPLACE INTO "sys_i18n" VALUES (212, 'dictType.sys_yes_no', '系统是否', 'System or not'); +REPLACE INTO "sys_i18n" VALUES (213, 'dictType.sys_oper_type', '操作类型', 'Operation Type'); +REPLACE INTO "sys_i18n" VALUES (214, 'dictType.sys_common_status', '系统状态', 'System Status'); +REPLACE INTO "sys_i18n" VALUES (215, 'dictType.trace_type', '跟踪类型', 'Trace Types'); +REPLACE INTO "sys_i18n" VALUES (216, 'menu.tools.ps', '进程运行程序', 'Process Running Program'); +REPLACE INTO "sys_i18n" VALUES (217, 'dictType.alarm_status', '告警日志类型', 'Alarm Log Type'); +REPLACE INTO "sys_i18n" VALUES (218, 'menu.tools.net', '进程网络连接', 'Process Net Connection'); +REPLACE INTO "sys_i18n" VALUES (219, 'dictType.ne_version_status', '网元软件版本状态', 'Network element software version status'); +REPLACE INTO "sys_i18n" VALUES (220, 'dictType.sys_user_sex_remark', '用户性别列表', 'User gender list'); +REPLACE INTO "sys_i18n" VALUES (221, 'dictType.sys_show_hide_remark', '菜单状态列表', 'Menu Status List'); +REPLACE INTO "sys_i18n" VALUES (222, 'dictType.sys_normal_disable_remark', '系统开关列表', 'System switch list'); +REPLACE INTO "sys_i18n" VALUES (223, 'dictType.sys_job_status_remark', '任务状态列表', 'Task Status List'); +REPLACE INTO "sys_i18n" VALUES (224, 'dictType.sys_job_group_remark', '任务分组列表', 'Task Grouping List'); +REPLACE INTO "sys_i18n" VALUES (225, 'dictType.sys_yes_no_remark', '系统是否列表', 'System whether list'); +REPLACE INTO "sys_i18n" VALUES (226, 'dictType.sys_oper_type_remark', '操作类型列表', 'Operation type list'); +REPLACE INTO "sys_i18n" VALUES (227, 'dictType.sys_common_status_remark', '登录状态列表', 'Login Status List'); +REPLACE INTO "sys_i18n" VALUES (228, 'dictType.trace_type_remark', '跟踪类型', 'Trace Types'); +REPLACE INTO "sys_i18n" VALUES (229, 'dictType.alarm_status_remark', '告警日志状态类型', 'Alarm Log Status Type'); +REPLACE INTO "sys_i18n" VALUES (230, 'menu.trace.tshark', '信令分析', 'Signaling Analysis'); +REPLACE INTO "sys_i18n" VALUES (231, 'menu.trace.wireshark', '信令跟踪', 'Signaling Trace'); +REPLACE INTO "sys_i18n" VALUES (232, 'dictType.ne_version_status_remark', '网元软件版本状态', 'Network element software version status'); +REPLACE INTO "sys_i18n" VALUES (233, 'dictType.export.id', '字典编号', 'Dictionary Number'); +REPLACE INTO "sys_i18n" VALUES (234, 'dictType.export.name', '字典名称', 'Dictionary Name'); +REPLACE INTO "sys_i18n" VALUES (235, 'dictType.export.type', '字典类型', 'Dictionary Type'); +REPLACE INTO "sys_i18n" VALUES (236, 'dictType.export.status', '字典状态', 'Status'); +REPLACE INTO "sys_i18n" VALUES (237, 'dictType.sys_role_datascope', '系统角色数据范围', 'System Role Data Range'); +REPLACE INTO "sys_i18n" VALUES (238, 'dictType.sys_role_datascope_remark', '系统角色数据范围映射', 'System Role Data Range Mapping'); +REPLACE INTO "sys_i18n" VALUES (239, 'dictType.noData', '没有可访问字典类型数据!', 'There is no accessible dictionary type data!'); +REPLACE INTO "sys_i18n" VALUES (240, 'dictType.errNameExists', '操作字典【{name}】失败,字典名称已存在', 'Failed to manipulate dictionary [{name}], dictionary name already exists!'); +REPLACE INTO "sys_i18n" VALUES (241, 'dictType.errTypeExists', '操作字典【{name}】失败,字典类型已存在', 'Failed to manipulate dictionary [{name}], dictionary type already exists!'); +REPLACE INTO "sys_i18n" VALUES (242, 'dept.root', '系统', 'System'); +REPLACE INTO "sys_i18n" VALUES (243, 'dept.root.item1', '未分配', 'Unallocated'); +REPLACE INTO "sys_i18n" VALUES (244, 'dept.noData', '没有可访问部门数据!', 'There is no accessible department data!'); +REPLACE INTO "sys_i18n" VALUES (245, 'dept.errParentDelFlag', '上级部门【{name}】已删除,不允许新增', 'The parent department [{name}] has been deleted and is not allowed to be added.'); +REPLACE INTO "sys_i18n" VALUES (246, 'dept.errParentStatus', '上级部门【{name}】停用,不允许新增', 'Parent department [{name}] is deactivated, additions are not allowed!'); +REPLACE INTO "sys_i18n" VALUES (247, 'dept.errNameExists', '操作部门【{name}】失败,部门名称已存在', 'Manipulate department [{name}] failed, department name already exists!'); +REPLACE INTO "sys_i18n" VALUES (248, 'dept.errParentID', '操作部门【{name}】失败,上级部门不能是自己', 'Failed to operate department [{name}], the parent department cannot be itself.'); +REPLACE INTO "sys_i18n" VALUES (249, 'dept.errHasChildUse', '操作失败,该部门包含未停用的子部门数量:{num}', 'Operation failed, the department contains undeactivated sub-departments number: {num}'); +REPLACE INTO "sys_i18n" VALUES (250, 'dept.errHasUserUse', '不允许删除,部门已分配给用户数:{num}', 'Deletion is not allowed, number of users the department has been assigned to: {num}'); +REPLACE INTO "sys_i18n" VALUES (251, 'config.sys.user.initPassword', '用户管理-账号初始密码', 'User Management-Account Initial Password'); +REPLACE INTO "sys_i18n" VALUES (252, 'config.sys.account.captchaEnabled', '账号自助-验证码开关', 'Account self-help-Certification code switch'); +REPLACE INTO "sys_i18n" VALUES (253, 'config.sys.account.registerUser', '账号自助-是否开启用户注册功能', 'Account self-service-Whether to enable the user registration function'); +REPLACE INTO "sys_i18n" VALUES (254, 'config.sys.user.maxRetryCount', '用户管理-密码最大错误次数', 'User Management-Maximum number of password errors'); +REPLACE INTO "sys_i18n" VALUES (255, 'config.sys.user.lockTime', '用户管理-密码锁定时间', 'User Management-Password Lock Time'); +REPLACE INTO "sys_i18n" VALUES (256, 'config.monitor.sysResource.storeDays', '监控-系统资源-数据保留时长', 'Monitor-System Resources-Data retention time'); +REPLACE INTO "sys_i18n" VALUES (257, 'config.sys.logo.type', '系统设置-LOGO类型', 'System Settings-Logo Type'); +REPLACE INTO "sys_i18n" VALUES (258, 'config.sys.logo.filePathIcon', '系统设置-LOGO文件icon', 'System Settings-Logo File icon'); +REPLACE INTO "sys_i18n" VALUES (259, 'config.sys.logo.filePathBrand', '系统设置-LOGO文件brand', 'System Settings-Logo File Brand'); +REPLACE INTO "sys_i18n" VALUES (260, 'config.sys.loginBackground', '系统设置-登录界面背景', 'System Settings-Login Interface Background'); +REPLACE INTO "sys_i18n" VALUES (261, 'config.sys.title', '系统设置-系统名称', 'System Settings-System Name'); +REPLACE INTO "sys_i18n" VALUES (262, 'config.sys.copyright', '系统设置-版权声明', 'System Settings-Copyright Notice'); +REPLACE INTO "sys_i18n" VALUES (263, 'config.sys.user.initPasswordRemark', '导入用户初始化密码', 'Import user initialization password'); +REPLACE INTO "sys_i18n" VALUES (264, 'config.sys.account.captchaEnabledRemark', '是否开启验证码功能(true开启,false关闭)', 'Whether to enable the verification code function (true on, false off)'); +REPLACE INTO "sys_i18n" VALUES (265, 'config.sys.account.registerUserRemark', '是否开启注册用户功能(true开启,false关闭)', 'Whether to enable the function of registered users (true on, false off)'); +REPLACE INTO "sys_i18n" VALUES (266, 'config.sys.user.maxRetryCountRemark', '密码最大错误次数', 'Maximum number of password errors'); +REPLACE INTO "sys_i18n" VALUES (267, 'config.sys.user.lockTimeRemark', '密码锁定时间,单位分钟(默认10分钟)', 'Password lock time in minutes (default 10 minutes)'); +REPLACE INTO "sys_i18n" VALUES (268, 'config.monitor.sysResource.storeDaysRemark', '监控-系统资源-数据保留时长,单位天。根据当前日期,删除超过保留时长的日期数据信息。', 'Monitor-System Resources-Data retention time, in days. According to the current date, delete the date data information that exceeds the retention time.'); +REPLACE INTO "sys_i18n" VALUES (269, 'config.sys.logo.typeRemark', '全图:brand +小图:icon', 'Full image: brand +Small image: icon'); +REPLACE INTO "sys_i18n" VALUES (270, 'config.sys.logo.filePathIconRemark', '文件支持网络地址图片和内部上传的文件路径', 'File support for web address images and file paths for internal uploads'); +REPLACE INTO "sys_i18n" VALUES (271, 'config.sys.logo.filePathBrandRemark', '文件支持网络地址图片和内部上传的文件路径', 'File support for web address images and paths to internally uploaded files'); +REPLACE INTO "sys_i18n" VALUES (272, 'config.sys.loginBackgroundRemark', '文件支持网络地址图片和内部上传的文件路径,默认背景用#号', 'The file supports web address images and internal upload file paths with a # in the default background'); +REPLACE INTO "sys_i18n" VALUES (273, 'config.sys.titleRemark', '系统名称长度限制20位字符串', 'System name length limit of 20-digit string'); +REPLACE INTO "sys_i18n" VALUES (274, 'config.sys.copyrightRemark', '底脚固定条,左侧放置版权声明', 'Footer fixing strip with copyright notice on the left side'); +REPLACE INTO "sys_i18n" VALUES (275, 'config..export.id', '参数编号', 'ID'); +REPLACE INTO "sys_i18n" VALUES (276, 'config..export.name', '参数名称', 'Config Name'); +REPLACE INTO "sys_i18n" VALUES (277, 'config..export.key', '参数键名', 'Config Key'); +REPLACE INTO "sys_i18n" VALUES (278, 'config..export.value', '参数键值', 'Config Value'); +REPLACE INTO "sys_i18n" VALUES (279, 'config..export.type', '系统内置', 'Built In'); +REPLACE INTO "sys_i18n" VALUES (280, 'config..export.remark', '参数说明', 'Config Description'); +REPLACE INTO "sys_i18n" VALUES (281, 'config.sys.titleValue', 'Core Network', 'Core Network'); +REPLACE INTO "sys_i18n" VALUES (282, 'config.sys.copyrightValue', 'Copyright ©2025 Core Network', 'Copyright ©2025 Core Network'); +REPLACE INTO "sys_i18n" VALUES (283, 'config.noData', '没有可访问参数配置数据!', 'No parameter configuration data is accessible!'); +REPLACE INTO "sys_i18n" VALUES (284, 'config.errKey', '无效 key', 'Invalid key'); +REPLACE INTO "sys_i18n" VALUES (285, 'config.errValueEq', '变更状态与旧值相等!', 'Change state is equal to the old value!'); +REPLACE INTO "sys_i18n" VALUES (286, 'config.errKeyExists', '操作参数配置【{name}】失败,参数键名已存在', 'Failed to manipulate parameter configuration [{name}], parameter key name already exists!'); +REPLACE INTO "sys_i18n" VALUES (287, 'config.errDelete', '删除参数配置信息失败!', 'Deletion of parameter configuration information failed!'); +REPLACE INTO "sys_i18n" VALUES (288, 'config.errType', '操作含有内置参数,禁止删除!', 'The operation contains built-in parameters and deletion is prohibited!'); +REPLACE INTO "sys_i18n" VALUES (289, 'job.monitor_sys_resource', '监控-系统资源', 'Monitor-System Resources'); +REPLACE INTO "sys_i18n" VALUES (290, 'job.monitor_sys_resource_remark', '系统资源CPU/IO/Netword收集 +interval单位分钟,平均分钟资源情况 +注:请根据cron表达式的时间单位分钟,传入参数interva值', 'System Resource CPU/IO/Netword Collection +interval unit minutes, average minute resource situation +Note: Please pass the value of the parameter interva according to the time unit minutes of the cron expression'); +REPLACE INTO "sys_i18n" VALUES (291, 'job.delete_ne_config_backup', '删除-过期配置文件备份', 'Delete-Expired NE ETC Backup File'); +REPLACE INTO "sys_i18n" VALUES (292, 'job.delete_ne_config_backup_remark', 'storeDays:表示保留最近天数的数据记录', 'storeDays: indicates that the most recent days of data records are kept.'); +REPLACE INTO "sys_i18n" VALUES (293, 'job.delete_alarm_record', '删除-过期告警记录', 'Delete-Expired Alarm Records'); +REPLACE INTO "sys_i18n" VALUES (294, 'job.delete_alarm_record_remark', 'storeDays:表示保留最近天数的数据记录 +storeNum:保留数量,默认保留7个', 'storeDays: indicates that the most recent days of data records are kept. +storeNum: the number of reservations, the default reservation is 7.'); +REPLACE INTO "sys_i18n" VALUES (295, 'job.delete_kpi_record', '删除-过期指标记录', 'Delete-Expired KPI Records'); +REPLACE INTO "sys_i18n" VALUES (296, 'job.delete_kpi_record_remark', 'storeDays:表示保留最近天数的数据记录 +neList:表示匹配的网元类型', 'storeDays: Indicates the most recent days of data records retained +neList: Indicates the type of network elements matched'); +REPLACE INTO "sys_i18n" VALUES (297, 'menu.neData.backupData', '导出文件', 'Exponted File'); +REPLACE INTO "sys_i18n" VALUES (298, 'config.sys.user.passwordPolicyNot', '未配置密码策略', 'Password policy not configured'); +REPLACE INTO "sys_i18n" VALUES (299, 'job.export.jobID', '任务编号', 'ID'); +REPLACE INTO "sys_i18n" VALUES (300, 'job.export.jobName', '任务名称', 'Name'); +REPLACE INTO "sys_i18n" VALUES (301, 'job.export.jobGroupName', '任务组名', 'Group'); +REPLACE INTO "sys_i18n" VALUES (302, 'job.export.invokeTarget', '调用目标', 'Invoke'); +REPLACE INTO "sys_i18n" VALUES (303, 'job.export.targetParams', '传入参数', 'Incoming Parameters'); +REPLACE INTO "sys_i18n" VALUES (304, 'job.export.cronExpression', 'cron表达式', 'Cron'); +REPLACE INTO "sys_i18n" VALUES (305, 'job.export.status', '状态', 'Status'); +REPLACE INTO "sys_i18n" VALUES (306, 'job.export.remark', '备注说明', 'Description'); +REPLACE INTO "sys_i18n" VALUES (307, 'job.export.jobLogID', '任务日志编号', 'ID'); +REPLACE INTO "sys_i18n" VALUES (308, 'job.export.jobLogStatus', '任务日志状态', 'Status'); +REPLACE INTO "sys_i18n" VALUES (309, 'job.export.jobLogTime', '任务日志时间', 'Time'); +REPLACE INTO "sys_i18n" VALUES (310, 'job.noData', '没有可访问调度任务数据!', 'There is no accessible scheduling task data!'); +REPLACE INTO "sys_i18n" VALUES (311, 'job.errTargetParams', '操作调度任务【{name}】失败,任务传入参数json字符串不正确', 'Failed to operate scheduling task [{name}] with incorrect task incoming parameter json string!'); +REPLACE INTO "sys_i18n" VALUES (312, 'job.errCronExpression', '操作调度任务【{name}】失败,Cron表达式不正确', 'Scheduled task [{name}] failed with incorrect Cron expression!'); +REPLACE INTO "sys_i18n" VALUES (313, 'job.errJobExists', '调度任务新增【{name}】失败,同任务组内有相同任务名称', 'Failed to add a new task [{name}] to a scheduling task, same task name in the same task group'); +REPLACE INTO "sys_i18n" VALUES (314, 'job.statusEq', '变更状态与旧值相等!', 'The change state is equal to the old value!'); +REPLACE INTO "sys_i18n" VALUES (315, 'role.system', '系统', 'System'); +REPLACE INTO "sys_i18n" VALUES (316, 'role.admin', '管理人员', 'Administrator'); +REPLACE INTO "sys_i18n" VALUES (317, 'role.operator', '运维人员', 'Operators'); +REPLACE INTO "sys_i18n" VALUES (318, 'role.monitor', '监控人员', 'Monitor'); +REPLACE INTO "sys_i18n" VALUES (319, 'role.vistor', '普通用户', 'General Users'); +REPLACE INTO "sys_i18n" VALUES (320, 'role.systemRemark', '系统,无法修改删除', 'System, cannot modify or delete'); +REPLACE INTO "sys_i18n" VALUES (321, 'role.adminRemark', '管理人员 可以对设备进行任何操作', 'Administrators can perform any operation on the device'); +REPLACE INTO "sys_i18n" VALUES (322, 'role.operatorRemark', '运维人员 可以从设备读取数据,并对设备进行配置,但是不能对设备进行软件升级操作。', 'Operation and maintenance personnel can read data from the device and configure the device, but cannot perform software upgrade operations on the device.'); +REPLACE INTO "sys_i18n" VALUES (323, 'role.monitorRemark', '监控人员 只能从设备读取数据,而不能对设备进行任何设置', 'Monitoring personnel Can only read data from the device, but cannot make any settings on the device'); +REPLACE INTO "sys_i18n" VALUES (324, 'role.vistorRemark', '普通用户 只可看系统相关信息', 'Ordinary users can only see system-related information'); +REPLACE INTO "sys_i18n" VALUES (325, 'role.export.id', '角色编号', 'Role Number'); +REPLACE INTO "sys_i18n" VALUES (326, 'role.export.name', '角色名称 ', 'Role Name'); +REPLACE INTO "sys_i18n" VALUES (327, 'role.export.key', '角色键值', 'Role Key'); +REPLACE INTO "sys_i18n" VALUES (328, 'role.export.sort', '角色顺序', 'Role Sort'); +REPLACE INTO "sys_i18n" VALUES (329, 'role.export.dataScope', '角色数据范围', 'Role Data Range'); +REPLACE INTO "sys_i18n" VALUES (330, 'role.export.status', '角色状态', 'Role Status'); +REPLACE INTO "sys_i18n" VALUES (331, 'role.noData', '没有可访问角色数据!', 'There is no accessible role data!'); +REPLACE INTO "sys_i18n" VALUES (332, 'role.statusEq', '变更状态与旧值相等!', 'The change status is equal to the old value!'); +REPLACE INTO "sys_i18n" VALUES (333, 'role.errNameExists', '操作角色【{name}】失败,角色名称已存在', 'Manipulating role [{name}] failed, role name already exists!'); +REPLACE INTO "sys_i18n" VALUES (334, 'role.errKeyExists', '操作角色【{name}】失败,角色键值已存在', 'Failed to manipulate role [{name}], role key already exists!'); +REPLACE INTO "sys_i18n" VALUES (335, 'post.admin', '系统', 'Systems'); +REPLACE INTO "sys_i18n" VALUES (336, 'post.operator', '管理', 'Management'); +REPLACE INTO "sys_i18n" VALUES (337, 'post.monitor', '运维', 'Operation & Maintenance'); +REPLACE INTO "sys_i18n" VALUES (338, 'post.visitor', '监控', 'Monitoring'); +REPLACE INTO "sys_i18n" VALUES (339, 'post.export.id', '岗位编号 ', 'Position Number'); +REPLACE INTO "sys_i18n" VALUES (340, 'post.export.code', '岗位编码', 'Position Code'); +REPLACE INTO "sys_i18n" VALUES (341, 'post.export.name', '岗位名称', 'Position Name'); +REPLACE INTO "sys_i18n" VALUES (342, 'post.export.sort', '岗位排序', 'Position Sort'); +REPLACE INTO "sys_i18n" VALUES (343, 'post.export.status', '岗位状态', 'Position Status'); +REPLACE INTO "sys_i18n" VALUES (344, 'post.noData', '没有可访问岗位数据!', 'There is no accessible post data!'); +REPLACE INTO "sys_i18n" VALUES (345, 'post.errNameExists', '操作岗位【{name}】失败,岗位名称已存在已存在', 'Failed to manipulate post [{name}], post name already exists already exists'); +REPLACE INTO "sys_i18n" VALUES (346, 'post.errCodeExists', '操作角色【{name}】失败,角色键值已存在', 'Failed to manipulate role [{name}], role key already exists.'); +REPLACE INTO "sys_i18n" VALUES (347, 'user.export.id', '用户编号', 'User Number'); +REPLACE INTO "sys_i18n" VALUES (348, 'user.export.name', '登录账号', 'Account'); +REPLACE INTO "sys_i18n" VALUES (349, 'user.export.nick', '用户昵称', 'Nick Name'); +REPLACE INTO "sys_i18n" VALUES (350, 'user.export.email', '电子邮箱', 'E-Mail'); +REPLACE INTO "sys_i18n" VALUES (351, 'user.export.phone', '手机号码', 'Cell phone number'); +REPLACE INTO "sys_i18n" VALUES (352, 'user.export.sex', '用户性别', 'Gender'); +REPLACE INTO "sys_i18n" VALUES (353, 'user.export.status', '用户状态', 'Status'); +REPLACE INTO "sys_i18n" VALUES (354, 'user.export.deptID', '部门编号', 'Department number'); +REPLACE INTO "sys_i18n" VALUES (355, 'user.export.deptName', '部门名称', 'Department'); +REPLACE INTO "sys_i18n" VALUES (356, 'user.export.deptLeader', '部门负责人', 'Department Head'); +REPLACE INTO "sys_i18n" VALUES (357, 'user.export.loginIP', '用户登录IP', 'Login Address'); +REPLACE INTO "sys_i18n" VALUES (358, 'user.export.loginDate', '用户登录时间', 'Login Time'); +REPLACE INTO "sys_i18n" VALUES (359, 'user.noData', '没有可访问用户数据!', 'No accessible user data!'); +REPLACE INTO "sys_i18n" VALUES (360, 'user.statusEq', '变更状态与旧值相等!', 'The change status is equal to the old value!'); +REPLACE INTO "sys_i18n" VALUES (361, 'user.errPasswdOld', '修改密码失败,旧密码错误', 'Change password failed, old password is wrong'); +REPLACE INTO "sys_i18n" VALUES (362, 'user.errPasswdEqOld', '新密码不能与旧密码相同', 'New password cannot be the same as the old one'); +REPLACE INTO "sys_i18n" VALUES (363, 'config.sys.user.passwordPolicyError', '密码至少{minLength}位,至少包含{specialChars}个特殊字符和至少{uppercase}个大写字母和至少{lowercase}个小写字母', 'Passwords are at least {minLength} digits long and contain at least {specialChars} special characters and at least {uppercase} uppercase letter and at least {lowercase} lowercase letter.'); +REPLACE INTO "sys_i18n" VALUES (364, 'user.errEmailFormat', '操作用户【{name}】失败,邮箱格式错误', 'Failed to operate user [{name}], mailbox format error'); +REPLACE INTO "sys_i18n" VALUES (365, 'user.errEmailExists', '操作用户【{name}】失败,邮箱已存在', 'Failed to operate user [{name}], mailbox already exists.'); +REPLACE INTO "sys_i18n" VALUES (366, 'user.errPhoneFormat', '操作用户【{name}】失败,手机号码格式错误', 'Failed to operate user [{name}], cell phone number format is wrong.'); +REPLACE INTO "sys_i18n" VALUES (367, 'user.errPhoneExists', '操作用户【{name}】失败,手机号码已存在', 'Failed to operate user [{name}], cell phone number already exists.'); +REPLACE INTO "sys_i18n" VALUES (368, 'user.errNameExists', '操作用户【{name}】失败,登录账号已存在', 'Failed to operate user [{name}], login account already exists.'); +REPLACE INTO "sys_i18n" VALUES (369, 'user.import.mustItem', '表格中必填列表项,{text}', 'Required list item in form, {text}'); +REPLACE INTO "sys_i18n" VALUES (370, 'user.import.phoneExist', '用户编号:{id} 手机号码 {phone} 已存在', 'User ID: {id} cell phone number {phone} Existing'); +REPLACE INTO "sys_i18n" VALUES (371, 'user.import.phoneFormat', '用户编号:{id} 手机号码 {phone} 格式错误', 'User ID: {id} cell phone number {phone} Wrong format'); +REPLACE INTO "sys_i18n" VALUES (372, 'user.import.emailExist', '用户编号:{id} 用户邮箱:{email} 已存在', 'User ID: {id} User Email: {email} Existing'); +REPLACE INTO "sys_i18n" VALUES (373, 'user.import.emailFormat', '用户编号:{id} 用户邮箱:{email} 格式错误', 'User ID: {id} Email: {email} Wrong Format'); +REPLACE INTO "sys_i18n" VALUES (374, 'user.import.success', '用户编号:{id} 登录名称:{name} 导入成功', 'User ID:{id} Login name:{name} Imported successfully!'); +REPLACE INTO "sys_i18n" VALUES (375, 'user.import.fail', '用户编号:{id} 登录名称:{name} 导入失败', 'User ID: {id} Login name: {name} Import failed'); +REPLACE INTO "sys_i18n" VALUES (376, 'user.import.successUpdate', '用户编号:{id} 登录名称:{name} 更新成功', 'User ID: {id} Login name: {name} Update success'); +REPLACE INTO "sys_i18n" VALUES (377, 'user.import.failUpdate', '用户编号:{id} 登录名称:{name} 更新失败', 'User ID: {id} Login Name: {name} Update Failed'); +REPLACE INTO "sys_i18n" VALUES (378, 'user.import.failTip', '很抱歉,导入失败!共 {num} 条数据格式不正确,错误如下:', 'Sorry, the import failed! A total of {num} entries were not formatted correctly, the error is below:'); +REPLACE INTO "sys_i18n" VALUES (379, 'user.import.successTip', '恭喜您,数据已全部导入成功!共 {num} 条,数据如下:', 'Congratulations, the data has been imported successfully! There are {num} entries with the following data:'); +REPLACE INTO "sys_i18n" VALUES (380, 'app.common.err403', '无权访问 {method} {requestURI}', 'Unauthorized access {method} {requestURI}'); +REPLACE INTO "sys_i18n" VALUES (381, 'app.common.err401', '无效身份授权', 'Invalid authorization'); +REPLACE INTO "sys_i18n" VALUES (382, 'app.common.err400', '参数错误', 'Parameter error'); +REPLACE INTO "sys_i18n" VALUES (383, 'app.common.exportEmpty', '导出数据记录为空', 'Export data record is empty'); +REPLACE INTO "sys_i18n" VALUES (384, 'app.common.errOperateAdmin', '不允许操作内置用户', 'Built-in users are not allowed to operate'); +REPLACE INTO "sys_i18n" VALUES (385, 'app.common.errOperateRole', '不允许操作内置角色', 'Built-in roles are not allowed to be operated'); +REPLACE INTO "sys_i18n" VALUES (386, 'app.common.deleteSuccess', '删除成功:{num}', 'Deleted successfully: {num}'); +REPLACE INTO "sys_i18n" VALUES (387, 'app.common.loginSuccess', '登录成功', 'Login Success'); +REPLACE INTO "sys_i18n" VALUES (388, 'app.common.logoutSuccess', '注销成功', 'Logout Successful'); +REPLACE INTO "sys_i18n" VALUES (389, 'app.common.errUnlock', '该用户未被锁定', 'The user is not locked'); +REPLACE INTO "sys_i18n" VALUES (390, 'app.common.noLoginUser', '登录用户信息无效', 'Invalid login user information'); +REPLACE INTO "sys_i18n" VALUES (391, 'app.common.rateLimitTip', '访问过于频繁,请稍候再试', 'Access too often, please try again later'); +REPLACE INTO "sys_i18n" VALUES (392, 'log.operate.export.id', '操作编号', 'Log ID'); +REPLACE INTO "sys_i18n" VALUES (393, 'log.operate.export.title', '模块名称', 'Module Name'); +REPLACE INTO "sys_i18n" VALUES (394, 'log.operate.export.businessType', '业务类型', 'Business Type'); +REPLACE INTO "sys_i18n" VALUES (395, 'log.operate.export.method', '操作方法', 'Operation Method'); +REPLACE INTO "sys_i18n" VALUES (396, 'log.operate.export.requestMethod', '请求方式 ', 'Request Method'); +REPLACE INTO "sys_i18n" VALUES (397, 'log.operate.export.operatorType', '操作类型', 'Operation Type'); +REPLACE INTO "sys_i18n" VALUES (398, 'log.operate.export.operName', '操作人员', 'Operator'); +REPLACE INTO "sys_i18n" VALUES (399, 'log.operate.export.deptName', '操作人员部门名称', 'Operator Department Name'); +REPLACE INTO "sys_i18n" VALUES (400, 'log.operate.export.url', '请求链接地址', 'Request URL'); +REPLACE INTO "sys_i18n" VALUES (401, 'log.operate.export.ip', '请求主机 ', 'Request Host'); +REPLACE INTO "sys_i18n" VALUES (402, 'log.operate.export.location', '请求地址', 'Request Address'); +REPLACE INTO "sys_i18n" VALUES (403, 'log.operate.export.param', '请求参数', 'Request Parameters'); +REPLACE INTO "sys_i18n" VALUES (404, 'log.operate.export.msg', '操作信息', 'Operation Information'); +REPLACE INTO "sys_i18n" VALUES (405, 'log.operate.export.status', '操作状态', 'Status'); +REPLACE INTO "sys_i18n" VALUES (406, 'log.operate.export.costTime', '消耗时间(毫秒)', 'Time Consumption (ms)'); +REPLACE INTO "sys_i18n" VALUES (407, 'log.operate.export.operTime', '操作时间', 'Time'); +REPLACE INTO "sys_i18n" VALUES (408, 'log.login.export.id', '记录编号', 'Log ID'); +REPLACE INTO "sys_i18n" VALUES (409, 'log.login.export.userName', '登录账号', 'Login Account'); +REPLACE INTO "sys_i18n" VALUES (410, 'log.login.export.status', '登录状态', 'Status'); +REPLACE INTO "sys_i18n" VALUES (411, 'log.login.export.ip', '登录地址', 'Login Address'); +REPLACE INTO "sys_i18n" VALUES (412, 'log.login.export.location', '登录地点', 'Login Location'); +REPLACE INTO "sys_i18n" VALUES (413, 'log.login.export.browser', '浏览器', 'Browser'); +REPLACE INTO "sys_i18n" VALUES (414, 'log.login.export.os', '操作系统', 'Operating System'); +REPLACE INTO "sys_i18n" VALUES (415, 'log.login.export.msg', '登录信息', 'Login Information'); +REPLACE INTO "sys_i18n" VALUES (416, 'log.login.export.time', '登录时间', 'Login Time'); +REPLACE INTO "sys_i18n" VALUES (417, 'trace.tcpdump.noData', '找不到 {type} {id} 对应网元信息', 'Can it find {type} {id} information of the corresponding network element.'); +REPLACE INTO "sys_i18n" VALUES (418, 'register.errUsername', '账号不能以数字开头,可包含大写小写字母,数字,且不少于5位', 'The account number cannot start with a number, but can contain upper and lower case letters, numbers, and not less than 5 digits.'); +REPLACE INTO "sys_i18n" VALUES (419, 'login.errPasswdExpire', '登录密码已过期', 'Login password has expired'); +REPLACE INTO "sys_i18n" VALUES (420, 'register.errPasswdNotEq', '用户确认输入密码不一致', 'User confirms password inconsistency'); +REPLACE INTO "sys_i18n" VALUES (421, 'register.success', '注册成功', 'Successful registration'); +REPLACE INTO "sys_i18n" VALUES (422, 'register.successMsg', '{name} 注册成功 {id}', '{name} Register Successful {id}'); +REPLACE INTO "sys_i18n" VALUES (423, 'log.operate.title.sysJobLog', '调度任务日志', 'Scheduling Task Logs'); +REPLACE INTO "sys_i18n" VALUES (424, 'log.operate.title.sysJob', '调度任务', 'Scheduling Tasks'); +REPLACE INTO "sys_i18n" VALUES (425, 'log.operate.title.tcpdump', '信令抓包', 'Signaling Capture'); +REPLACE INTO "sys_i18n" VALUES (426, 'log.operate.title.sysConfig', '参数配置', 'Parameter Configuration'); +REPLACE INTO "sys_i18n" VALUES (427, 'log.operate.title.sysDept', '部门', 'Sector'); +REPLACE INTO "sys_i18n" VALUES (428, 'log.operate.title.sysDictData', '字典数据', 'Dictionary Data'); +REPLACE INTO "sys_i18n" VALUES (429, 'log.operate.title.sysDictType', '字典类型', 'Dictionary type'); +REPLACE INTO "sys_i18n" VALUES (430, 'log.operate.title.sysMenu', '菜单', 'Menu'); +REPLACE INTO "sys_i18n" VALUES (431, 'log.operate.title.sysPost', '岗位', 'Positions'); +REPLACE INTO "sys_i18n" VALUES (432, 'log.operate.title.sysProfile', '个人信息', 'Personal Information'); +REPLACE INTO "sys_i18n" VALUES (433, 'log.operate.title.sysProfileAvatar', '个人头像', 'Personal avatar'); +REPLACE INTO "sys_i18n" VALUES (434, 'log.operate.title.sysRole', '角色', 'Roles'); +REPLACE INTO "sys_i18n" VALUES (435, 'log.operate.title.sysUser', '用户', 'User'); +REPLACE INTO "sys_i18n" VALUES (436, 'log.operate.title.sysLogOper', '操作日志记录', 'Operation Logging'); +REPLACE INTO "sys_i18n" VALUES (437, 'log.operate.title.sysLogLogin', '登录日志记录', 'Operation Logging'); +REPLACE INTO "sys_i18n" VALUES (438, 'login.errNameOrPasswd', '用户不存在或密码错误', 'User does not exist or password is wrong'); +REPLACE INTO "sys_i18n" VALUES (439, 'login.errDelFlag', '对不起,您的账号已被删除', 'Sorry, your account has been deleted'); +REPLACE INTO "sys_i18n" VALUES (440, 'login.errStatus', '对不起,您的帐户已被禁用', 'Sorry, your account has been disabled'); +REPLACE INTO "sys_i18n" VALUES (441, 'login.errRetryPasswd', '密码输入错误多次,帐户已被锁定', 'Password was entered incorrectly several times, account has been locked'); +REPLACE INTO "sys_i18n" VALUES (442, 'captcha.err', '验证码错误', 'Captcha Error'); +REPLACE INTO "sys_i18n" VALUES (443, 'captcha.errValid', '验证码已失效', 'Captcha is invalid'); +REPLACE INTO "sys_i18n" VALUES (444, 'app.common.noUaOsBrowser', '未知 未知', 'Unknown Unknown'); +REPLACE INTO "sys_i18n" VALUES (445, 'app.common.noIPregion', '内网', 'Intranet'); +REPLACE INTO "sys_i18n" VALUES (446, 'app.common.unknown', '未知', 'Unknown'); +REPLACE INTO "sys_i18n" VALUES (447, 'app.common.noNEInfo', '未找到匹配网元信息', 'No matching network element information found'); +REPLACE INTO "sys_i18n" VALUES (448, 'ne.udm.errImportUserAuthFileFormat', '请上传.csv或.txt的格式文件。英文逗号分割txt格式:imsi, ki, algo, amf, opc', 'Please upload a file in the format of. csv or. txt. English comma separated txt format: imsi, ki, algo, amf, opc'); +REPLACE INTO "sys_i18n" VALUES (449, 'ne.udm.errExportType', '导出文件类型支持CSV和txt', 'Export file types support CSV and txt'); +REPLACE INTO "sys_i18n" VALUES (450, 'ne.udm.errImportUserSubFileFormat', '请上传.csv或.txt的格式文件。英文逗号分割txt格式:imsi, msisdn, ambr, nssai, arfb, sar, rat, cn, smf_sel, sm_dat, eps_dat', 'Please upload files in .csv or .txt format. English comma-separated txt format: imsi, msisdn, ambr, nssai, arfb, sar, rat, cn, smf_sel, sm_dat, eps_dat'); +REPLACE INTO "sys_i18n" VALUES (451, 'log.operate.title.udmAuth', 'UDM鉴权用户', 'UDM Authentication'); +REPLACE INTO "sys_i18n" VALUES (452, 'log.operate.title.udmSub', 'UDM签约用户', 'UDM Subscriber'); +REPLACE INTO "sys_i18n" VALUES (453, 'dictType.active_alarm_type', '活动告警类型', 'Event Alarm Types'); +REPLACE INTO "sys_i18n" VALUES (454, 'dictType.active_alarm_type_remark', '活动告警类型列表', 'List of Active Alarm Types'); +REPLACE INTO "sys_i18n" VALUES (455, 'dictData.active_alarm_type.communication', '通信告警', 'Communication Alarm'); +REPLACE INTO "sys_i18n" VALUES (456, 'dictData.active_alarm_type.equipment', '设备告警', 'Equipment Alarm'); +REPLACE INTO "sys_i18n" VALUES (457, 'dictData.active_alarm_type.processing', '处理错误', 'Processing Failure Alarm'); +REPLACE INTO "sys_i18n" VALUES (458, 'dictData.active_alarm_type.environmental', '环境告警', 'Environmental Alarm'); +REPLACE INTO "sys_i18n" VALUES (459, 'dictData.active_alarm_type.qualityOfService', '服务质量', 'Quality of Service Alarm'); +REPLACE INTO "sys_i18n" VALUES (460, 'dictType.active_clear_type', '告警清除类型', 'Alarm Clearing Types'); +REPLACE INTO "sys_i18n" VALUES (461, 'dictType.active_clear_type_remark', '告警清除类型列表', 'List of Alarm Clearing Types'); +REPLACE INTO "sys_i18n" VALUES (462, 'dictData.active_clear_type.notCleared', '告警未清除', 'Not cleared'); +REPLACE INTO "sys_i18n" VALUES (463, 'dictData.active_clear_type.hand', '手动清除', 'Manually cleared'); +REPLACE INTO "sys_i18n" VALUES (464, 'dictData.active_clear_type.auto', '自动清除', 'Automatically cleared'); +REPLACE INTO "sys_i18n" VALUES (465, 'dictType.active_ack_state', '告警确认类型', 'Alarm Acknowledgement Types'); +REPLACE INTO "sys_i18n" VALUES (466, 'dictType.active_ack_state_remark', '告警确认类型列表', 'Alarm Acknowledgement Type List'); +REPLACE INTO "sys_i18n" VALUES (467, 'dictData.active_ack_state.unconfirmed', '未确认', 'Not Confirm'); +REPLACE INTO "sys_i18n" VALUES (468, 'dictData.active_ack_state.confirmed', '已确认', 'Confirm'); +REPLACE INTO "sys_i18n" VALUES (469, 'dictType.active_alarm_severity', '严重程度', 'Severity'); +REPLACE INTO "sys_i18n" VALUES (470, 'dictType.active_alarm_severity_remark', '严重程度列表', 'Severity List'); +REPLACE INTO "sys_i18n" VALUES (471, 'dictData.active_alarm_severity.critical', '严重告警', 'Critical'); +REPLACE INTO "sys_i18n" VALUES (472, 'dictData.active_alarm_severity.major', '主要告警', 'Major'); +REPLACE INTO "sys_i18n" VALUES (473, 'dictData.active_alarm_severity.minor', '次要告警', 'Minor'); +REPLACE INTO "sys_i18n" VALUES (474, 'dictData.active_alarm_severity.warning', '警告告警', 'Warning'); +REPLACE INTO "sys_i18n" VALUES (475, 'dictData.active_alarm_severity.event', '事件告警', 'Event'); +REPLACE INTO "sys_i18n" VALUES (476, 'config.sys.officialUrl', '系统设置-官网链接', 'System Settings - Official Website Links'); +REPLACE INTO "sys_i18n" VALUES (477, 'config.sys.helpDoc', '系统设置-系统使用文档', 'System Settings-System Documentation'); +REPLACE INTO "sys_i18n" VALUES (478, 'config.sys.officialUrlRemark', '默认无地址用#号', 'Default no address with # sign'); +REPLACE INTO "sys_i18n" VALUES (479, 'config.sys.helpDocRemark', '静态文件目录地址,使用{language}区分语言文件', 'Static file directory address, use {language} to distinguish language files'); +REPLACE INTO "sys_i18n" VALUES (480, 'log.operate.title.neAction', '网元处理', 'Network Element Processing'); +REPLACE INTO "sys_i18n" VALUES (481, 'log.operate.title.helpDoc', '系统使用文档', 'System Usage Documentation'); +REPLACE INTO "sys_i18n" VALUES (482, 'menu.ueUser.n3iwf', 'N3IWF在线用户', 'N3IWF Online User'); +REPLACE INTO "sys_i18n" VALUES (483, 'menu.neData.pcfSub', '用户策略控制信息', 'User PCC Information'); +REPLACE INTO "sys_i18n" VALUES (484, 'menu.system.user.editRole', '修改用户角色', 'Modifying User Role'); +REPLACE INTO "sys_i18n" VALUES (485, 'config.sys.i18nOpen', '国际化切换', 'Internationalization Switching'); +REPLACE INTO "sys_i18n" VALUES (486, 'config.sys.i18nDefault', '国际化默认语言', 'Internationalization Default Language'); +REPLACE INTO "sys_i18n" VALUES (487, 'user.export.role', '用户角色', 'Role'); +REPLACE INTO "sys_i18n" VALUES (488, 'menu.system.setting.i18n', '国际化切换', 'Internationalization Switch'); +REPLACE INTO "sys_i18n" VALUES (489, 'menu.system.setting.i18nRemark', '国际化多语言的切换选择', 'Internationalized multilingual switching options'); +REPLACE INTO "sys_i18n" VALUES (490, 'dictType.index_status', '首页状态', 'Home Status'); +REPLACE INTO "sys_i18n" VALUES (491, 'dictType.index_status_remark', '首页的网元状态颜色', 'Network element status colors on the home page'); +REPLACE INTO "sys_i18n" VALUES (492, 'dictType.index_status.normal', '正常', 'Normal'); +REPLACE INTO "sys_i18n" VALUES (493, 'dictType.index_status.abnormal', '异常', 'Abnormal'); +REPLACE INTO "sys_i18n" VALUES (494, 'menu.log.neFile', '网元日志文件', 'NE Log File'); +REPLACE INTO "sys_i18n" VALUES (495, 'menu.dashboard.overview.smfUeNum', '展示数据会话数', 'Display data session number'); +REPLACE INTO "sys_i18n" VALUES (496, 'menu.dashboard.overview.imsUeNum', '展示语音会话数', 'Display the number of voice sessions'); +REPLACE INTO "sys_i18n" VALUES (497, 'menu.dashboard.overview.gnbBase', '展示5G基站在线信息', 'Display 5G base station online information'); +REPLACE INTO "sys_i18n" VALUES (498, 'menu.dashboard.overview.enbBase', '展示4G基站在线信息', 'Display 4G base station online information'); +REPLACE INTO "sys_i18n" VALUES (499, 'job.ne_alarm_state_check', '网元告警-状态检查', 'NE Alarm-Health State Check'); +REPLACE INTO "sys_i18n" VALUES (500, 'job.ne_alarm_state_check_remark', '检查网元的健康状况,在出现异常时发出警报。 + +Alarm type: +CommunicationAlarm=1 +EquipmentAlarm=2 +ProcessingFailure=3 +EnvironmentalAlarm=4 +QualityOfServiceAlarm=5 + +Severity: +Critical=1 +Major=2 +Minor=3 +Warning=4', 'Checks the health of network elements and sends alerts in case of anomalies. + +Alarm type: +CommunicationAlarm=1 +EquipmentAlarm=2 +ProcessingFailure=3 +EnvironmentalAlarm=4 +QualityOfServiceAlarm=5 + +Severity: +Critical=1 +Major=2 +Minor=3 +Warning=4'); +REPLACE INTO "sys_i18n" VALUES (501, 'menu.neUser.nssf', 'NSSF在线订阅数', 'NSSF Subscription Info'); +REPLACE INTO "sys_i18n" VALUES (502, 'menu.neUser.nssfAmf', 'NSSF可用的注册AMF', 'NSSF Available AMFs'); +REPLACE INTO "sys_i18n" VALUES (503, 'menu.monitor.topology', '拓扑信息', 'Topology Info'); +REPLACE INTO "sys_i18n" VALUES (504, 'menu.monitor.topologyBuild', '拓扑图组编辑', 'Topological Graph Build'); +REPLACE INTO "sys_i18n" VALUES (505, 'log.operate.title.chartGraph', '拓扑图组', 'Topological Graph'); +REPLACE INTO "sys_i18n" VALUES (506, 'menu.monitor.topologyArchitecture', '网元拓扑组网', 'NE System Topology'); +REPLACE INTO "sys_i18n" VALUES (507, 'menu.alarm', '告警', 'Alarm'); +REPLACE INTO "sys_i18n" VALUES (508, 'menu.topology', '拓扑', 'Topology'); +REPLACE INTO "sys_i18n" VALUES (509, 'config.sys.lockTime', '系统设置-锁屏超时时长', 'System Settings - Screen Lock Timeout Duration'); +REPLACE INTO "sys_i18n" VALUES (510, 'config.sys.lockTimeRemark', '无操作时锁屏超时时长,单位(秒)。0表示无锁屏超时', 'Timeout of lock screen when no operation, unit (sec), 0 means no timeout of lock screen'); +REPLACE INTO "sys_i18n" VALUES (511, 'sys.account.captchaType', '账号自助-验证码类型', 'Account Self Service - Captcha Type'); +REPLACE INTO "sys_i18n" VALUES (512, 'sys.account.captchaTypeRemark', '使用验证码类型(math数值计算,char字符验证)', 'Using CAPTCHA types (math numeric calculation, char character validation)'); +REPLACE INTO "sys_i18n" VALUES (513, 'menu.dashboard', '仪表盘', 'Dashboard'); +REPLACE INTO "sys_i18n" VALUES (514, 'menu.dashboard.overview', '总览', 'Overview'); +REPLACE INTO "sys_i18n" VALUES (515, 'menu.dashboard.imsCDR', '语音话单', 'Voice CDR'); +REPLACE INTO "sys_i18n" VALUES (516, 'dictType.cdr_sip_code', 'IMS-Voice-SIP响应代码类别类型', 'IMS-Voice-SIP Response Code Category Type'); +REPLACE INTO "sys_i18n" VALUES (517, 'dictType.cdr_call_type', 'IMS-呼叫类型', 'IMS-Call Type'); +REPLACE INTO "sys_i18n" VALUES (518, 'dictType.ue_auth_code', 'UE 事件认证代码类型', 'UE Event Authentication Code Type'); +REPLACE INTO "sys_i18n" VALUES (519, 'dictType.ue_event_type', 'UE 事件类型', 'UE Event Type'); +REPLACE INTO "sys_i18n" VALUES (520, 'dictData.cdr_sip_code.200', '200 正常通话', '200 OK'); +REPLACE INTO "sys_i18n" VALUES (521, 'dictData.cdr_sip_code.403', '403 禁止访问', '403 Forbidden'); +REPLACE INTO "sys_i18n" VALUES (522, 'dictData.cdr_sip_code.408', '408 请求超时', '408 Request Timeout'); +REPLACE INTO "sys_i18n" VALUES (523, 'dictData.cdr_sip_code.500', '500 内部服务器错误', '500 Internal Server Error'); +REPLACE INTO "sys_i18n" VALUES (524, 'dictData.cdr_call_type.audio', '语音', 'Voice'); +REPLACE INTO "sys_i18n" VALUES (525, 'dictData.cdr_call_type.video', '视频', 'Video'); +REPLACE INTO "sys_i18n" VALUES (526, 'dictData.ue_auth_code.200', '成功', 'Success'); +REPLACE INTO "sys_i18n" VALUES (527, 'dictData.ue_auth_code.001', '网络失败', 'Network Failure'); +REPLACE INTO "sys_i18n" VALUES (528, 'dictData.ue_auth_code.002', '接口失败', 'Interface Failure'); +REPLACE INTO "sys_i18n" VALUES (529, 'dictData.ue_auth_code.003', 'MAC失败', 'MAC Failure'); +REPLACE INTO "sys_i18n" VALUES (530, 'dictData.ue_auth_code.004', '同步失败', 'Synchronization failure'); +REPLACE INTO "sys_i18n" VALUES (531, 'dictData.ue_auth_code.005', '不接受非5G认证', 'Non-5G Authentication Not Accepted'); +REPLACE INTO "sys_i18n" VALUES (532, 'dictData.ue_auth_code.006', '响应失败', 'Response Failure'); +REPLACE INTO "sys_i18n" VALUES (533, 'dictData.ue_auth_code.007', '未知', 'Unknown'); +REPLACE INTO "sys_i18n" VALUES (534, 'dictData.ue_event_type.auth', '认证', 'Authentication'); +REPLACE INTO "sys_i18n" VALUES (535, 'dictData.ue_event_type.detach', '注销', 'Detach'); +REPLACE INTO "sys_i18n" VALUES (536, 'dictData.ue_event_type.state', 'CM状态', 'CM Status'); +REPLACE INTO "sys_i18n" VALUES (537, 'dictType.ue_event_cm_state', 'UE 事件CM状态', 'UE Event CM Status'); +REPLACE INTO "sys_i18n" VALUES (538, 'dictData.ue_event_cm_state.connected', '连接', 'Connected'); +REPLACE INTO "sys_i18n" VALUES (539, 'dictData.ue_event_cm_state.idle', '空闲', 'Idle'); +REPLACE INTO "sys_i18n" VALUES (540, 'dictData.ue_event_cm_state.inactive', '不活动', 'Inactive'); +REPLACE INTO "sys_i18n" VALUES (541, 'dictData.cdr_sip_code.404', '404 找不到', '404 Not Found'); +REPLACE INTO "sys_i18n" VALUES (542, 'dictData.cdr_sip_code.487', '487 请求已终止', '487 Request Terminated'); +REPLACE INTO "sys_i18n" VALUES (543, 'dictData.cdr_sip_code.503', '503 服务不可用', '503 Service Unavailable'); +REPLACE INTO "sys_i18n" VALUES (544, 'dictData.cdr_sip_code.504', '504 服务器超时', '504 Server Timeout'); +REPLACE INTO "sys_i18n" VALUES (545, 'dictData.cdr_sip_code.603', '603 拒绝', '603 Decline'); +REPLACE INTO "sys_i18n" VALUES (546, 'dictData.cdr_sip_code.606', '606 不可接受', '606 Not Acceptable'); +REPLACE INTO "sys_i18n" VALUES (547, 'cache.name.token', '用户令牌', 'User Token'); +REPLACE INTO "sys_i18n" VALUES (548, 'cache.name.sys_config', '参数管理', 'Parameters Management'); +REPLACE INTO "sys_i18n" VALUES (549, 'cache.name.sys_dict', '字典管理', 'Dictionary Management'); +REPLACE INTO "sys_i18n" VALUES (550, 'cache.name.captcha_codes', '验证码', 'Captcha'); +REPLACE INTO "sys_i18n" VALUES (551, 'cache.name.repeat_submit', '防重提交', 'Resubmit'); +REPLACE INTO "sys_i18n" VALUES (552, 'cache.name.rate_limit', '限流', 'Limit Traffic'); +REPLACE INTO "sys_i18n" VALUES (553, 'cache.name.pwd_err_cnt', '登录账户密码错误次数', 'Number of Password Errors'); +REPLACE INTO "sys_i18n" VALUES (554, 'cache.name.ne_info', '网元信息管理', 'NE Info Management'); +REPLACE INTO "sys_i18n" VALUES (555, 'cache.name.ne_data', '网元数据管理', 'NE Data Management'); +REPLACE INTO "sys_i18n" VALUES (556, 'dictData.cdr_call_type.sms', '短信', 'SMS'); +REPLACE INTO "sys_i18n" VALUES (557, 'dictData.cdr_sip_code.202', '202 已接受', '202 Accepted'); +REPLACE INTO "sys_i18n" VALUES (558, 'dictData.cdr_sip_code.488', '488 这里不接受', '488 Not Acceptable Here'); +REPLACE INTO "sys_i18n" VALUES (559, 'dictData.cdr_sip_code.0', '0 原因不明', '0 Unknown Reason'); +REPLACE INTO "sys_i18n" VALUES (560, 'log.operate.title.ws', 'WS会话', 'WS Sessions'); +REPLACE INTO "sys_i18n" VALUES (561, 'log.operate.title.neHost', '网元主机', 'NE Host'); +REPLACE INTO "sys_i18n" VALUES (562, 'neHost.noData', '没有可访问主机信息数据!', 'There is no accessible host information data!'); +REPLACE INTO "sys_i18n" VALUES (563, 'neHost.errKeyExists', '主机信息操作【{name}】失败,同组内名称已存在', 'Host information operation [{name}] failed, name already exists in the same group'); +REPLACE INTO "sys_i18n" VALUES (564, 'neHost.errByHostInfo', '连接失败,请检查连接参数后重试', 'Connection Failed, Please check connection parameters and retry'); +REPLACE INTO "sys_i18n" VALUES (565, 'dictType.ne_host_type', '网元主机连接类型', 'Network element host connection type'); +REPLACE INTO "sys_i18n" VALUES (566, 'dictType.ne_host_groupId', '网元主机分组', 'Network element host grouping'); +REPLACE INTO "sys_i18n" VALUES (567, 'dictType.ne_host_authMode', '网元主机认证模式', 'Network element host authentication mode'); +REPLACE INTO "sys_i18n" VALUES (568, 'dictData.ne_host_type.ssh', 'SSH', 'SSH'); +REPLACE INTO "sys_i18n" VALUES (569, 'dictData.ne_host_type.telnet', 'Telnet', 'Telnet'); +REPLACE INTO "sys_i18n" VALUES (570, 'dictData.ne_host_groupId.0', '其他', 'Other'); +REPLACE INTO "sys_i18n" VALUES (571, 'dictData.ne_host_groupId.1', '网元', 'Network Elements'); +REPLACE INTO "sys_i18n" VALUES (572, 'dictData.ne_host_groupId.2', '系统', 'System'); +REPLACE INTO "sys_i18n" VALUES (573, 'dictData.ne_host_authMode.0', '密码认证', 'Password Authentication'); +REPLACE INTO "sys_i18n" VALUES (574, 'dictData.ne_host_authMode.1', '私钥认证', 'Private key authentication'); +REPLACE INTO "sys_i18n" VALUES (575, 'menu.tools.terminal', '主机终端', 'Host Terminal'); +REPLACE INTO "sys_i18n" VALUES (576, 'menu.ne.neHost', '网元主机', 'NE Host'); +REPLACE INTO "sys_i18n" VALUES (577, 'menu.ne.neHostCommand', '网元主机命令', 'NE Host CMD'); +REPLACE INTO "sys_i18n" VALUES (578, 'log.operate.title.neHostCmd', '网元主机命令', 'NE Host CMD'); +REPLACE INTO "sys_i18n" VALUES (579, 'neHostCmd.noData', '没有可访问主机命令数据!', 'No accessible host command data!'); +REPLACE INTO "sys_i18n" VALUES (580, 'neHostCmd.errKeyExists', '主机命令操作【{name}】失败,同组内名称已存在', 'Host command operation [{name}] failed, name already exists in the same group'); +REPLACE INTO "sys_i18n" VALUES (581, 'dictType.ne_host_cmd_groupId', '网元主机命令分组', 'Network element host command grouping'); +REPLACE INTO "sys_i18n" VALUES (582, 'dictData.ne_host_cmd_groupId.0', '默认', 'Default'); +REPLACE INTO "sys_i18n" VALUES (583, 'dictData.ne_host_cmd_groupId.1', '快速命令', 'Quick Commands'); +REPLACE INTO "sys_i18n" VALUES (584, 'menu.ne.neInfo', '网元信息', 'NE Information'); +REPLACE INTO "sys_i18n" VALUES (585, 'log.operate.title.neInfo', '网元信息', 'NE Information'); +REPLACE INTO "sys_i18n" VALUES (586, 'neInfo.noData', '没有可访问网元信息数据!', 'There is no accessible network element information data!'); +REPLACE INTO "sys_i18n" VALUES (587, 'neInfo.errKeyExists', '网元信息操作【{key}】失败,同类型下标识已存在', 'NE info operation [{key}] failed, identifier already exists under the same type'); +REPLACE INTO "sys_i18n" VALUES (588, 'log.operate.title.imsCDR', '通话话单', 'Voice CDR'); +REPLACE INTO "sys_i18n" VALUES (589, 'menu.dashboard.amfUE', '5G 终端事件', '5G UE Events'); +REPLACE INTO "sys_i18n" VALUES (590, 'log.operate.title.amfUE', '5G 终端事件', '5G UE Events'); +REPLACE INTO "sys_i18n" VALUES (591, 'dictData.ne_info_status.0', '离线', 'Offline'); +REPLACE INTO "sys_i18n" VALUES (592, 'dictData.ne_info_status.1', '在线', 'Active'); +REPLACE INTO "sys_i18n" VALUES (593, 'dictData.ne_info_status.2', '等待同步', 'Wait Sync'); +REPLACE INTO "sys_i18n" VALUES (594, 'dictData.ne_info_status.3', '待机', 'Standby'); +REPLACE INTO "sys_i18n" VALUES (595, 'dictType.ne_info_status', '网元信息状态', 'NE Info State'); +REPLACE INTO "sys_i18n" VALUES (596, 'menu.ne.neQuickSetup', '网元快速安装', 'NE Quick Setup'); +REPLACE INTO "sys_i18n" VALUES (597, 'log.operate.title.neConfig', '网元参数配置', 'NE Parameter Configuration'); +REPLACE INTO "sys_i18n" VALUES (598, 'menu.ne.neLicense', '网元许可', 'NE License'); +REPLACE INTO "sys_i18n" VALUES (599, 'log.operate.title.neLicense', '网元许可', 'NE License'); +REPLACE INTO "sys_i18n" VALUES (600, 'menu.ne.neSoftware', '网元软件包', 'NE Software'); +REPLACE INTO "sys_i18n" VALUES (601, 'log.operate.title.neSoftware', '网元软件包', 'NE Software'); +REPLACE INTO "sys_i18n" VALUES (602, 'log.operate.title.neVersion', '网元版本', 'NE Version'); +REPLACE INTO "sys_i18n" VALUES (603, 'menu.ne.neVersion', '网元版本', 'Ne Version'); +REPLACE INTO "sys_i18n" VALUES (604, 'dictType.ne_license_status', '网元许可状态', 'NE License Status'); +REPLACE INTO "sys_i18n" VALUES (605, 'dictData.ne_license_status.0', '无效', 'Invalid'); +REPLACE INTO "sys_i18n" VALUES (606, 'dictData.ne_license_status.1', '有效', 'Valid'); +REPLACE INTO "sys_i18n" VALUES (607, 'menu.dashboard.mocn', 'MOCN', 'MOCN'); +REPLACE INTO "sys_i18n" VALUES (608, 'menu.monitor.cdr', '话单', 'CDR'); +REPLACE INTO "sys_i18n" VALUES (609, 'menu.monitor.event', '事件', 'Events'); +REPLACE INTO "sys_i18n" VALUES (610, 'post.export.time', '创建时间', 'Creation Time'); +REPLACE INTO "sys_i18n" VALUES (611, 'role.export.time', '创建时间', 'Creation Time'); +REPLACE INTO "sys_i18n" VALUES (612, 'dictData.ne_host_authMode.2', '免密认证', 'Confidentiality Auth Mode'); +REPLACE INTO "sys_i18n" VALUES (613, 'menu.ne.neConfig', '网元配置', 'NE Config'); +REPLACE INTO "sys_i18n" VALUES (614, 'dictData.ne_version_status.0', '无', 'Nothing'); +REPLACE INTO "sys_i18n" VALUES (615, 'dictData.ne_version_status.1', '已是最新', 'Updated'); +REPLACE INTO "sys_i18n" VALUES (616, 'dictData.ne_version_status.2', '上一版本', 'Previous'); +REPLACE INTO "sys_i18n" VALUES (617, 'dictData.ne_version_status.3', '有新版本', 'Has New'); +REPLACE INTO "sys_i18n" VALUES (618, 'menu.fault.event', '事件通知', 'Event Notification'); +REPLACE INTO "sys_i18n" VALUES (619, 'menu.dashboard.smfCDR', '数据话单', 'Data CDR'); +REPLACE INTO "sys_i18n" VALUES (620, 'log.operate.title.smfCDR', '数据话单', 'Data CDR'); +REPLACE INTO "sys_i18n" VALUES (621, 'config.sys.i18nDefaultRemark', '国际化默认语言可选择 en_US、zh_CN', 'Internationalization default language selectable en_US、zh_CN'); +REPLACE INTO "sys_i18n" VALUES (622, 'config.sys.i18nOpenRemark', '是否显示切换的控件 true/false', 'Whether to display switched controls true/false'); +REPLACE INTO "sys_i18n" VALUES (623, 'menu.dashboard.mmeUE', '4G 终端事件', '4G UE Events'); +REPLACE INTO "sys_i18n" VALUES (624, 'log.operate.title.mmeUE', '4G 终端事件', '4G UE Events'); +REPLACE INTO "sys_i18n" VALUES (625, 'menu.system.user.editPost', '修改用户岗位', 'Modify User Post'); +REPLACE INTO "sys_i18n" VALUES (626, 'menu.dashboard.smscCDR', '短信话单', 'SMS CDR'); +REPLACE INTO "sys_i18n" VALUES (627, 'log.operate.title.smscCDR', '短信话单', 'SMS CDR'); +REPLACE INTO "sys_i18n" VALUES (628, 'menu.trace.pcapFile', '信令抓包文件', 'Signaling Capture File'); +REPLACE INTO "sys_i18n" VALUES (629, 'menu.trace.taskAnalyze', '网元跟踪任务分析', 'NE Trace Task Analysis'); +REPLACE INTO "sys_i18n" VALUES (630, 'job.ne_data_udm', '网元数据-UDM用户数据同步', 'NE Data-Sync UDM Data'); +REPLACE INTO "sys_i18n" VALUES (631, 'menu.system.setting.doc', '系统使用文档', 'System User Documentation'); +REPLACE INTO "sys_i18n" VALUES (632, 'menu.system.setting.official', '官网链接', 'Official Website'); +REPLACE INTO "sys_i18n" VALUES (633, 'menu.system.setting.lock', '锁屏操作', 'Lockscreen Operation'); +REPLACE INTO "sys_i18n" VALUES (634, 'menu.ne.neConfigBackup', '网元配置备份', 'NE Config Backups'); +REPLACE INTO "sys_i18n" VALUES (635, 'job.ne_config_backup', '网元-配置文件定期备份', 'NE-Config Backup Regularly'); +REPLACE INTO "sys_i18n" VALUES (636, 'job.ne_config_backup_remark', '网元配置文件定期备份到网管服务器 +可查看网元配置备份记录进行下载或通过网元信息操作导入配置', 'Network Element Configuration files are regularly backed up to the OMC +View network element configuration backup records for downloading or importing configurations through network element information operations.'); +REPLACE INTO "sys_i18n" VALUES (637, 'job.backup_export_table_sys_log_operate', '备份-操作日志表定期导出', 'Backup-Operation Log Table Periodic Export'); +REPLACE INTO "sys_i18n" VALUES (638, 'job.backup_export_table_cdr_event_ims', '备份-语音话单表定期导出', 'Backup-Regular Export of voice bill forms'); +REPLACE INTO "sys_i18n" VALUES (639, 'job.backup_export_table_cdr_event_smf', '备份-数据话单表定期导出', 'Backup-Regular Export of data sheet tables'); +REPLACE INTO "sys_i18n" VALUES (640, 'cache.name.oauth2_codes', '客户端授权码', 'Oauth2 Client Code'); +REPLACE INTO "sys_i18n" VALUES (641, 'cache.name.oauth2_devices', '客户端令牌', 'Oauth2 Token'); +REPLACE INTO "sys_i18n" VALUES (642, 'job.backup_export_cdr', '备份-CDR数据定期导出', 'Backup-Periodic export of CDR Data'); +REPLACE INTO "sys_i18n" VALUES (643, 'job.backup_export_cdr_remark', 'dataType: 类型支持 ims/smf/sgwc/smsc +fileType: 文件类型 csv/xlsx +hour: 数据时间从任务执行时间前的小时数', 'Backup-Periodic export of dataType: type support ims/smf/sgwc/smsc +fileType: file type csv/xlsx +hour: data time from the hour before the task execution time'); +REPLACE INTO "sys_i18n" VALUES (644, 'menu.log.exportFile', '导出文件', 'Exported File'); +REPLACE INTO "sys_i18n" VALUES (645, 'menu.perf.kpiCReport', '自定义指标数据', 'Custom Indicator Data'); +REPLACE INTO "sys_i18n" VALUES (646, 'menu.trace.taskHLR', 'HLR 跟踪任务', 'HLR Trace Task'); +REPLACE INTO "sys_i18n" VALUES (647, 'dictType.cdr_cause_code', 'CDR 响应原因代码类别类型', 'CDR Response Reason Code Category Type'); +REPLACE INTO "sys_i18n" VALUES (648, 'dictData.cdr_cause_code.0', '未知错误', 'Unknown Error'); +REPLACE INTO "sys_i18n" VALUES (649, 'dictData.cdr_cause_code.8', '运营者确定的禁止', 'Operator determined barring'); +REPLACE INTO "sys_i18n" VALUES (650, 'dictData.cdr_cause_code.10', '禁止呼叫', 'Call Barred'); +REPLACE INTO "sys_i18n" VALUES (651, 'dictData.cdr_cause_code.21', '呼叫被拒', 'Call rejected'); +REPLACE INTO "sys_i18n" VALUES (652, 'dictData.cdr_cause_code.22', '数量已更改', 'Number changed'); +REPLACE INTO "sys_i18n" VALUES (653, 'dictData.cdr_cause_code.27', '目的地出错', 'Destination out of order'); +REPLACE INTO "sys_i18n" VALUES (654, 'dictData.cdr_cause_code.28', '数字格式无效(数字不完整)', 'Invalid number format (incomplete number)'); +REPLACE INTO "sys_i18n" VALUES (655, 'dictData.cdr_cause_code.29', '设施被拒', 'Facility rejected'); +REPLACE INTO "sys_i18n" VALUES (656, 'dictData.cdr_cause_code.30', '回复状态查询', 'Response to STATUS ENQUIRY'); +REPLACE INTO "sys_i18n" VALUES (657, 'dictData.cdr_cause_code.38', '网络故障', 'Network out of order'); +REPLACE INTO "sys_i18n" VALUES (658, 'dictData.cdr_cause_code.41', '临时故障', 'Temporary failure'); +REPLACE INTO "sys_i18n" VALUES (659, 'dictData.cdr_cause_code.42', '交换设备拥塞', 'Switching equipment congestion'); +REPLACE INTO "sys_i18n" VALUES (660, 'dictData.cdr_cause_code.47', '资源不可用', 'Resource unavailable, unspecified'); +REPLACE INTO "sys_i18n" VALUES (661, 'dictData.cdr_cause_code.50', '请求的设施未订阅', 'Requested facility not subscribed'); +REPLACE INTO "sys_i18n" VALUES (662, 'job.backup_export_table_cdr_event_smsc', '备份-短信话单表定期导出', 'Backup-Regular Export of SMS call list'); +REPLACE INTO "sys_i18n" VALUES (663, 'job.backup_remove_file', '备份-定期删除备份目录下文件', 'Backup-Periodically Delete Directory Files'); +REPLACE INTO "sys_i18n" VALUES (664, 'config.sys.homePage', '自定义主页', 'Custom Home Page'); +REPLACE INTO "sys_i18n" VALUES (665, 'config.sys.homePageRemark', '选择列表中的任一页面作为主页路径', 'Select any page in the list as the homepage'); +REPLACE INTO "sys_i18n" VALUES (666, 'menu.ne.neOverview', '网元概览', 'NE Overview'); +REPLACE INTO "sys_i18n" VALUES (667, 'menu.ne.neOverviewRemark', '显示所有网元状态配置和license等概览信息', 'Displays overview information such as status, configuration and license of all network elements'); +REPLACE INTO "sys_i18n" VALUES (668, 'job.backup_export_table_cdr_event_sgwc', '备份-漫游数据话单表定期导出', 'Backup-Regular Export of Roaming Data table'); +REPLACE INTO "sys_i18n" VALUES (669, 'cache.name.i18n', '国际化语言管理', 'Internationalized Language Management'); +REPLACE INTO "sys_i18n" VALUES (670, 'config.sys.user.passwordPolicy', '用户管理-默认密码策略强度', 'User Management-Default Password Policy Strength'); +REPLACE INTO "sys_i18n" VALUES (671, 'config.sys.user.passwordPolicyRemark', 'minLength:密码至少8个字符 +specialChars:至少包含2个特殊字符(例如:!@#$%^&*()) +uppercase:至少包含一个大写字母 +lowercase:至少包含一个小写字母', 'minLength: password should be at least 8 characters long +specialChars: at least 2 special characters (e.g. ! @#$%^&*()) +uppercase: contain at least one uppercase letter +lowercase: contains at least one lowercase letter'); +REPLACE INTO "sys_i18n" VALUES (672, 'config.sys.user.passwdExpire', '用户管理-密码有效期', 'User Management-Password Expiration Date'); +REPLACE INTO "sys_i18n" VALUES (673, 'config.sys.user.passwdExpireRemark', '数值单位(小时) +expHours为过期时间,0表示不启用 +alertHours即将到期提醒时间', 'Numerical unit (hours) +expHours for the expiration time, 0 means not enabled +alertHours upcoming expiration reminder time'); +REPLACE INTO "sys_i18n" VALUES (674, 'config.sys.user.passwdNotAllowedHistory', '用户管理-不允许使用最近密码次数', 'User Management-Not Allowed Recent Passwords'); +REPLACE INTO "sys_i18n" VALUES (675, 'config.sys.user.passwdNotAllowedHistoryRemark', '创建新密码不等于之前使用的x次中的密码', 'Creating a new password that is not equal to the previously used password in x times'); +REPLACE INTO "sys_i18n" VALUES (676, 'login.errPasswdHistory', '不允许使用最近密码', 'Recent passwords not allowed'); +REPLACE INTO "sys_i18n" VALUES (677, 'log.operate.title.oauth2client', 'Oauth2客户端授权', 'Oauth2 Client Authorization'); +REPLACE INTO "sys_i18n" VALUES (678, 'log.operate.title.pcfRule', '终端策略规则', 'UE PCC Rule'); +REPLACE INTO "sys_i18n" VALUES (679, 'dictType.trace_msg_type', '跟踪消息类型', 'Trace Message Type'); +REPLACE INTO "sys_i18n" VALUES (680, 'dictData.trace_msg_type.0', '请求', 'Request'); +REPLACE INTO "sys_i18n" VALUES (681, 'dictData.trace_msg_type.1', '响应', 'Response'); +REPLACE INTO "sys_i18n" VALUES (682, 'dictType.trace_msg_direct', '跟踪消息方向', 'Track Message Direction'); +REPLACE INTO "sys_i18n" VALUES (683, 'dictData.trace_msg_direct.0', '接收', 'Receive'); +REPLACE INTO "sys_i18n" VALUES (684, 'dictData.trace_msg_direct.1', '发送', 'Send'); +REPLACE INTO "sys_i18n" VALUES (685, 'dictData.trace_interfaces.1', 'N1', 'N1'); +REPLACE INTO "sys_i18n" VALUES (686, 'dictData.trace_interfaces.2', 'N2', 'N2'); +REPLACE INTO "sys_i18n" VALUES (687, 'dictData.trace_interfaces.3', 'N1/N2', 'N1/N2'); +REPLACE INTO "sys_i18n" VALUES (688, 'dictData.trace_interfaces.4', 'N4', 'N4'); +REPLACE INTO "sys_i18n" VALUES (689, 'dictData.trace_interfaces.8', 'N8', 'N8'); +REPLACE INTO "sys_i18n" VALUES (690, 'dictData.trace_interfaces.10', 'N10', 'N10'); +REPLACE INTO "sys_i18n" VALUES (691, 'dictData.trace_interfaces.11', 'N11', 'N11'); +REPLACE INTO "sys_i18n" VALUES (692, 'dictData.trace_interfaces.12', 'N12', 'N12'); +REPLACE INTO "sys_i18n" VALUES (693, 'dictData.trace_interfaces.13', 'N13', 'N13'); +REPLACE INTO "sys_i18n" VALUES (694, 'dictData.trace_interfaces.7', 'N7', 'N7'); +REPLACE INTO "sys_i18n" VALUES (695, 'dictData.trace_interfaces.15', 'N15', 'N15'); +REPLACE INTO "sys_i18n" VALUES (696, 'dictData.trace_interfaces.17', 'N17', 'N17'); +REPLACE INTO "sys_i18n" VALUES (697, 'dictData.trace_interfaces.20', 'N20', 'N20'); +REPLACE INTO "sys_i18n" VALUES (698, 'dictData.trace_interfaces.22', 'N22', 'N22'); +REPLACE INTO "sys_i18n" VALUES (699, 'dictData.trace_interfaces.40', 'N40', 'N40'); +REPLACE INTO "sys_i18n" VALUES (700, 'dictData.cdr_sip_code.302', '302 原因不明', '302 Unknown Reason'); +REPLACE INTO "sys_i18n" VALUES (701, 'dictData.cdr_sip_code.402', '402 原因不明', '402 Unknown Reason'); +REPLACE INTO "sys_i18n" VALUES (702, 'dictData.cdr_sip_code.480', '480 被叫挂断/拒接', '480 Temporarily Unavailable'); +REPLACE INTO "sys_i18n" VALUES (703, 'dictData.cdr_sip_code.481', '481 原因不明', '481 Unknown Reason'); +REPLACE INTO "sys_i18n" VALUES (704, 'dictData.cdr_sip_code.482', '482 发现环路', '482 Loop Detected'); +REPLACE INTO "sys_i18n" VALUES (705, 'dictData.cdr_sip_code.486', '486 这里很忙', '486 Busy Here'); +REPLACE INTO "sys_i18n" VALUES (706, 'dictData.cdr_sip_code.489', '489 原因不明', '489 Unknown Reason'); +REPLACE INTO "sys_i18n" VALUES (707, 'dictData.cdr_sip_code.580', '580 原因不明', '580 Unknown Reason'); +REPLACE INTO "sys_i18n" VALUES (708, 'alarm.export.alarmType', '告警类型', 'Alarm Type'); +REPLACE INTO "sys_i18n" VALUES (709, 'alarm.export.origSeverity', '告警级别', 'Severity'); +REPLACE INTO "sys_i18n" VALUES (710, 'alarm.export.alarmTitle', '告警标题', 'Alarm Title'); +REPLACE INTO "sys_i18n" VALUES (711, 'alarm.export.eventTime', '告警产生时间', 'Event Time'); +REPLACE INTO "sys_i18n" VALUES (712, 'alarm.export.alarmId', '告警唯一标识', 'Alarm ID'); +REPLACE INTO "sys_i18n" VALUES (713, 'alarm.export.clearUser', '告警清除用户', 'Clear User'); +REPLACE INTO "sys_i18n" VALUES (714, 'alarm.export.clearType', '告警清除类型', 'Clear Type'); +REPLACE INTO "sys_i18n" VALUES (715, 'alarm.export.clearTime', '告警清除时间', 'Clear Time'); +REPLACE INTO "sys_i18n" VALUES (716, 'log.operate.title.alarm', '告警', 'Alarm'); +REPLACE INTO "sys_i18n" VALUES (717, 'ne.common.neType', '网元类型', 'NE Type'); +REPLACE INTO "sys_i18n" VALUES (718, 'ne.common.neName', '网元名称', 'NE Name'); +REPLACE INTO "sys_i18n" VALUES (719, 'ne.common.neId', '网元标识', 'NE ID'); +REPLACE INTO "sys_i18n" VALUES (720, 'log.operate.title.udmVOIP', 'VOIP用户', 'UDM VOIP'); +REPLACE INTO "sys_i18n" VALUES (721, 'log.operate.title.udmVolteIMS', 'VolteIMS用户', 'UDM VolteIMS'); +REPLACE INTO "sys_i18n" VALUES (722, 'log.operate.title.backup', '备份', 'Backup'); +REPLACE INTO "sys_i18n" VALUES (723, 'job.backup_export_table_cdr_event_smsc_remark', 'hour: 数据时间从任务执行时间前的小时数 +tableName: 数据表名 +columns: 支持字段 +backupPath: 备份输出路径 /usr/local/omc/backup/{backupPath}', 'hour: data time from the hour before the task execution time +tableName: data table name +columns: support fields +backupPath: backup output path /usr/local/omc/backup/{backupPath}'); +REPLACE INTO "sys_i18n" VALUES (724, 'job.backup_export_table_cdr_event_sgwc_remark', 'hour: 数据时间从任务执行时间前的小时数 +tableName: 数据表名 +columns: 支持字段 +backupPath: 备份输出路径 /usr/local/omc/backup/{backupPath}', 'hour: data time from the hour before the task execution time +tableName: data table name +columns: support fields +backupPath: backup output path /usr/local/omc/backup/{backupPath}'); +REPLACE INTO "sys_i18n" VALUES (725, 'job.backup_remove_file_remark', 'backupPath: 备份路径 /usr/local/omc/backup/{backupPath} +storeDays: 保留天数 +storeNum: 保留数量,默认保留7', 'backupPath: backup path /usr/local/omc/backup/{backupPath} +storeDays: retention days +storeNum: retention number, default retention 7'); +REPLACE INTO "sys_i18n" VALUES (726, 'job.backup_export_udm', '备份-UDM数据定期导出', 'Backup-Periodic export of UDM Data'); +REPLACE INTO "sys_i18n" VALUES (727, 'job.backup_export_udm_remark', 'dataType: 类型支持 auth/sub/voip/volte +fileType: 文件类型 csv/txt', 'Backup-Periodic export of dataType: type support auth/sub/voip/volte +fileType: file type csv/txt'); +REPLACE INTO "sys_i18n" VALUES (728, 'dictData.cdr_sip_code_cause.0', '因其他原因呼叫失败', 'Call failure for other reason'); +REPLACE INTO "sys_i18n" VALUES (729, 'dictData.cdr_sip_code_cause.200', '正常通话清除', 'Normal Call Clearing'); +REPLACE INTO "sys_i18n" VALUES (730, 'dictData.cdr_sip_code_cause.202', '申请已被接受处理,但尚未完成 ', 'The request has been accepted for processing, but it hasn it completed yet'); +REPLACE INTO "sys_i18n" VALUES (731, 'dictData.cdr_sip_code_cause.302', '因其他原因呼叫失败', 'Call failure for other reason'); +REPLACE INTO "sys_i18n" VALUES (732, 'dictData.cdr_sip_code_cause.402', '因其他原因呼叫失败', 'Call failure for other reason'); +REPLACE INTO "sys_i18n" VALUES (733, 'dictData.cdr_sip_code_cause.403', '拒接主叫用户', 'MO User Rejected'); +REPLACE INTO "sys_i18n" VALUES (734, 'dictData.cdr_sip_code_cause.404', '被叫用户离线', 'MT User Offline'); +REPLACE INTO "sys_i18n" VALUES (735, 'dictData.cdr_sip_code_cause.480', '因其他原因呼叫失败', 'Call failure for other reason'); +REPLACE INTO "sys_i18n" VALUES (736, 'dictData.cdr_sip_code_cause.481', '电话无法拨出', 'Call cannot be dialed'); +REPLACE INTO "sys_i18n" VALUES (737, 'dictData.cdr_sip_code_cause.482', '闪断', 'Flashback'); +REPLACE INTO "sys_i18n" VALUES (738, 'dictData.cdr_sip_code_cause.486', '被叫用户忙', 'MT User Busy'); +REPLACE INTO "sys_i18n" VALUES (739, 'dictData.cdr_sip_code_cause.487', '主叫挂断', 'MO User Disconnected'); +REPLACE INTO "sys_i18n" VALUES (740, 'dictData.cdr_sip_code_cause.408', '服务器等待响应的时间过长', 'The server waits too long for a response'); +REPLACE INTO "sys_i18n" VALUES (741, 'dictData.cdr_sip_code_cause.488', '媒体详细信息与服务器支持的内容不匹配', 'Media details didn’t match what the server supports'); +REPLACE INTO "sys_i18n" VALUES (742, 'dictData.cdr_sip_code_cause.489', '因其他原因呼叫失败', 'Call failure for other reason'); +REPLACE INTO "sys_i18n" VALUES (743, 'dictData.cdr_sip_code_cause.500', '服务器本身出了问题', 'Something went wrong inside the server itself'); +REPLACE INTO "sys_i18n" VALUES (744, 'dictData.cdr_sip_code_cause.503', '服务器超载或因维护而停机,无法处理呼叫', 'The server is overloaded or down for maintenance and can it process the call'); +REPLACE INTO "sys_i18n" VALUES (745, 'dictData.cdr_sip_code_cause.504', '服务器尝试以您的名义与另一台服务器通信,但未及时收到回复,并超时了', 'The server tried to talk to another server on your behalf, didn’t get a reply in time, and timed out'); +REPLACE INTO "sys_i18n" VALUES (746, 'dictData.cdr_sip_code_cause.580', '因其他原因呼叫失败', 'Call failure for other reason'); +REPLACE INTO "sys_i18n" VALUES (747, 'dictData.cdr_sip_code_cause.603', '被叫拒接', 'MT explicitly rejected the call'); +REPLACE INTO "sys_i18n" VALUES (748, 'dictData.cdr_sip_code_cause.606', '呼叫已到达用户设备,但会话设置的某些部分不可接受', 'The call reached the user’s device, but some parts of the session setup weren it acceptable'); +REPLACE INTO "sys_i18n" VALUES (749, 'dictType.cdr_sip_code_cause', 'IMS-Voice-SIP响应代码类别类型原因', 'IMS-Voice-SIP Response Code Category Type Cause'); +REPLACE INTO "sys_i18n" VALUES (750, 'job.backup_export_log', '备份-日志数据定期导出', 'Backup-Periodic export of Log Data'); +REPLACE INTO "sys_i18n" VALUES (751, 'job.backup_export_log_remark', 'dataType: 类型支持 operate/login +fileType: 文件类型 csv/xlsx +hour: 数据时间从任务执行时间前的小时数', 'Backup-Periodic export of dataType: type support operate/login +fileType: file type csv/xlsx +hour: data time from the hour before the task execution time'); +REPLACE INTO "sys_i18n" VALUES (752, 'job.ne_alarm_state_check_cmd', '网元告警-内存/CPU/磁盘检查', 'NE Alarm-Memory/CPU/Disk Checks'); +REPLACE INTO "sys_i18n" VALUES (753, 'job.ne_alarm_state_check_cmd_remark', '检查网元的内存/CPU/磁盘检查健康状况,在出现过阈值时发出警报。 + +Alarm type: +CommunicationAlarm=1 +EquipmentAlarm=2 +ProcessingFailure=3 +EnvironmentalAlarm=4 +QualityOfServiceAlarm=5 + +Severity: +Critical=1 +Major=2 +Minor=3 +Warning=4 + +AddInfo: 告警补充信息 +cpuUseGt: CPU使用率大于, 范围0~100*CPU核心数 +memUseGt: 内存使用率大于, 范围0~100% +diskUseGt: 磁盘使用率大于, 范围0~100%', 'Checks the memory/CPU/disk check health of the network element and sends alerts when thresholds are crossed. + +Alarm type: +CommunicationAlarm=1 +EquipmentAlarm=2 +ProcessingFailure=3 +EnvironmentalAlarm=4 +QualityOfServiceAlarm=5 + +Severity: +Critical=1 +Major=2 +Minor=3 +Warning=4 + +AddInfo: Additional information on alarms +cpuUseGt: CPU utilization is greater than, range 0~100*number of CPU cores +memUseGt: Memory utilization greater than, range 0 to 100% +diskUseGt: Disk utilization greater than, range 0 to 100%'); +REPLACE INTO "sys_i18n" VALUES (754, 'job.ne_alarm_state_check_license', '网元告警-License到期检查', 'NE Alarm-License Expire Check'); +REPLACE INTO "sys_i18n" VALUES (755, 'job.ne_alarm_state_check_license_remark', '检查网元的License是否即将到期,在出现过阈值时发出警报。 + +Alarm type: +CommunicationAlarm=1 +EquipmentAlarm=2 +ProcessingFailure=3 +EnvironmentalAlarm=4 +QualityOfServiceAlarm=5 + +Severity: +Critical=1 +Major=2 +Minor=3 +Warning=4 + +AddInfo: 告警补充信息 +dayLt: 天数小于,默认30天', 'Checks if the network element is License is about to expire and sends an alert if a threshold is crossed. + +Alarm type: +CommunicationAlarm=1 +EquipmentAlarm=2 +ProcessingFailure=3 +EnvironmentalAlarm=4 +QualityOfServiceAlarm=5 + +Severity: +Critical=1 +Major=2 +Minor=3 +Warning=4 + +AddInfo: Additional information on alarms +dayLt: Days less than, default 30 days'); +REPLACE INTO "sys_i18n" VALUES (756, 'dictData.trace_interfaces.14', 'N14', 'N14'); +REPLACE INTO "sys_i18n" VALUES (757, 'dictData.trace_interfaces.5', 'N5', 'N5'); +REPLACE INTO "sys_i18n" VALUES (758, "alarm.export.alarmCode", "告警编码", "Alarm Code"); +REPLACE INTO "sys_i18n" VALUES (759, "config.sys.user.fristPasswdChangeRemark", "关闭改为false 开启改为true, 建议同时设置密码有效期", "Off to false On to true, it is recommended to set the password expiration date at the same time."); +REPLACE INTO "sys_i18n" VALUES (760, "menu.perf.kpiIMSOverview", "语音数据概览", "Voice Data Overview"); +REPLACE INTO "sys_i18n" VALUES (761, "dictType.sys_user_type", "用户类型", "User Type"); +REPLACE INTO "sys_i18n" VALUES (762, "dictData.sys_user_type.system", "系统", "System"); +REPLACE INTO "sys_i18n" VALUES (763, "dictData.sys_user_type.ldap", "LDAP", "LDAP"); +REPLACE INTO "sys_i18n" VALUES (764, "dictData.sys_user_type.smtp", "SMTP", "SMTP"); +REPLACE INTO "sys_i18n" VALUES (765, "dictData.sys_user_type.oauth2", "OAuth2", "OAuth2"); +REPLACE INTO "sys_i18n" VALUES (766, "user.export.userType", "用户类型", "User Type"); +REPLACE INTO "sys_i18n" VALUES (767, "menu.system.loginSource", "第三方登录认证", "Third Party Login Source"); +REPLACE INTO "sys_i18n" VALUES (768, "log.operate.title.sysLoginSource", "认证源", "Login Source"); + +REPLACE INTO "sys_i18n" VALUES (2000, 'menu.psap.agent', '座席', 'Agent'); +REPLACE INTO "sys_i18n" VALUES (2001, 'menu.psap.agent.callings', '并行话务', 'Calling Information'); +REPLACE INTO "sys_i18n" VALUES (2002, 'menu.psap.agent.callback', '回拨管理', 'Callback Management'); +REPLACE INTO "sys_i18n" VALUES (2003, 'callback.status.NEW', '新建', 'New'); +REPLACE INTO "sys_i18n" VALUES (2004, 'callback.status.IN_PROGRESS', '处理中', 'In Progress'); +REPLACE INTO "sys_i18n" VALUES (2005, 'callback.status.NO_ANSWER_1', '未应答1', 'No Answer 1'); +REPLACE INTO "sys_i18n" VALUES (2006, 'callback.status.NO_ANSWER_2', '未应答2', 'No Answer 2'); +REPLACE INTO "sys_i18n" VALUES (2007, 'callback.status.TIMEOUT', '超时', 'Timeout'); +REPLACE INTO "sys_i18n" VALUES (2008, 'callback.status.PENDING', '挂起', 'Pending'); +REPLACE INTO "sys_i18n" VALUES (2009, 'callback.status.CLOSED', '关闭', 'Closed'); +REPLACE INTO "sys_i18n" VALUES (2010, 'job.export.cdr.mf', '定期导出MF话单', 'Periodic Export of MF Call Records'); +REPLACE INTO "sys_i18n" VALUES (2011, 'job.psap.ticket.monitor', '回拨工单监控', 'Callback Ticket Monitoring'); +REPLACE INTO "sys_i18n" VALUES (2012, 'menu.omc.cdr', '话单', 'Call Records'); +REPLACE INTO "sys_i18n" VALUES (2013, 'menu.omc.cdr.mf', '紧急呼叫话单', 'Emergency Call Records'); +REPLACE INTO "sys_i18n" VALUES (2014, 'menu.omc.cdr.crbt', '彩铃话单', 'Color Ring Back Tone Records'); +REPLACE INTO "sys_i18n" VALUES (2015, 'menu.omc.cdr.mms', '彩信话单', 'Multimedia Message Service Records'); +REPLACE INTO "sys_i18n" VALUES (2016, 'menu.ue.cbc.cbe', '预警广播', 'Early Warning Broadcast'); +REPLACE INTO "sys_i18n" VALUES (2017, 'log.operate.title.cbcMessage', '预警广播', 'Early Warning Broadcast'); diff --git a/build/database/lite/upgrade/upg_sys_job.sql b/build/database/lite/upgrade/upg_sys_job.sql new file mode 100644 index 00000000..47859628 --- /dev/null +++ b/build/database/lite/upgrade/upg_sys_job.sql @@ -0,0 +1,50 @@ +-- ---------------------------- +-- Table structure for sys_job +-- ---------------------------- +CREATE TABLE IF NOT EXISTS "sys_job" ( + "job_id" integer NOT NULL, + "job_name" text(64), + "job_group" text(64), + "invoke_target" text(64) NOT NULL, + "target_params" text(2048), + "cron_expression" text(64), + "misfire_policy" text(1), + "concurrent" text(1), + "status_flag" text(1), + "save_log" text(1), + "create_by" text(64), + "create_time" integer(20), + "update_by" text(64), + "update_time" integer(20), + "remark" text(500), + PRIMARY KEY ("job_id") +); + +-- ---------------------------- +-- Indexes structure for table sys_job +-- ---------------------------- +CREATE UNIQUE INDEX IF NOT EXISTS "uk_name_group" +ON "sys_job" ( + "job_name" ASC, + "job_group" ASC +); + +-- ---------------------------- +-- Records of sys_job +-- ---------------------------- +REPLACE INTO "sys_job" VALUES (1, 'job.monitor_sys_resource', 'SYSTEM', 'monitor_sys_resource', '{"interval":5}', '0 0/5 * * * ?', '3', '0', '1', '0', 'system', 1698478134839, 'system', 1698478134839, 'job.monitor_sys_resource_remark'); +REPLACE INTO "sys_job" VALUES (3, 'job.ne_data_udm', 'SYSTEM', 'ne_data_udm', '', '0 0 0/12 * * ?', '3', '0', '1', '1', 'system', 1698478134839, 'system', 1698478134839, ''); +REPLACE INTO "sys_job" VALUES (6, 'job.ne_config_backup', 'SYSTEM', 'ne_config_backup', '', '0 30 0 * * ?', '3', '0', '1', '1', 'system', 1698478134839, 'system', 1698478134839, 'job.ne_config_backup_remark'); + +REPLACE INTO "sys_job" VALUES (10, 'job.delete_ne_config_backup', 'SYSTEM', 'delete_ne_config_backup', '{"storeDays":7,"storeNum":7}', '0 20 0 * * ?', '3', '0', '1', '1', 'system', 1698478134839, 'system', 1698478134839, 'job.delete_ne_config_backup_remark'); +REPLACE INTO "sys_job" VALUES (11, 'job.delete_alarm_record', 'SYSTEM', 'delete_alarm_record', '{"storeDays":7}', '0 10 0 * * ?', '3', '0', '1', '1', 'system', 1698478134839, 'system', 1698478134839, 'job.delete_alarm_record_remark'); +REPLACE INTO "sys_job" VALUES (12, 'job.delete_kpi_record', 'SYSTEM', 'delete_kpi_record', '{"storeDays":7,"neList":["IMS","AMF","UDM","UPF","MME","SMSC","SMF","MME"]}', '0 20 0 * * ?', '3', '0', '1', '1', 'system', 1698478134839, 'system', 1698478134839, 'job.delete_kpi_record_remark'); + +REPLACE INTO "sys_job" VALUES (20, 'job.ne_alarm_state_check', 'SYSTEM', 'ne_alarm_state_check', '{"alarmTitle":"NE State Check Alarm","alarmType":"EquipmentAlarm","origSeverity":"Major","specificProblem":"alarm cause: the system state of target NE has not been received","specificProblemId":"AC10000","addInfo":""}', '0/30 * * * * ?', '3', '0', '1', '0', 'system', 1698478134839, 'system', 1698478134839, 'job.ne_alarm_state_check_remark'); +REPLACE INTO "sys_job" VALUES (21, 'job.ne_alarm_state_check_cmd', 'SYSTEM', 'ne_alarm_state_check_cmd', '{"alarmTitle":"NE State Check Alarm CPU/Menory/Disk","alarmType":"EquipmentAlarm","origSeverity":"Major","specificProblem":"Alarm Cause: CPU/Menory/Disk status received from target NE reaches the threshold","specificProblemId":"AC10100","addInfo":"","cpuUseGt":70,"memUseGt":70,"diskUseGt":70}', '0/15 * * * * ?', '3', '0', '1', '0', 'system', 1698478134839, 'system', 1698478134839, 'job.ne_alarm_state_check_cmd_remark'); +REPLACE INTO "sys_job" VALUES (22, 'job.ne_alarm_state_check_license', 'SYSTEM', 'ne_alarm_state_check_license', '{"alarmTitle":"NE State Check Alarm License","alarmType":"EquipmentAlarm","origSeverity":"Major","specificProblem":"Alarm Cause: License received from target NE is about to expire","specificProblemId":"AC10200","addInfo":"","dayLt":7}', '0 5 0 * * ?', '3', '0', '1', '0', 'system', 1698478134839, 'system', 1698478134839, 'job.ne_alarm_state_check_license_remark'); + +REPLACE INTO "sys_job" VALUES (30, 'job.backup_remove_file', 'SYSTEM', 'backup_remove_file', '[{"backupPath":"/udm_data/auth","storeDays":30},{"backupPath":"/udm_data/sub","storeDays":30},{"backupPath":"/udm_data/voip","storeDays":30},{"backupPath":"/udm_data/volte","storeDays":30},{"backupPath":"/cdr/ims_cdr_event","storeDays":30},{"backupPath":"/cdr/smsc_cdr_event","storeDays":30},{"backupPath":"/cdr/smf_cdr_event","storeDays":30},{"backupPath":"/cdr/sgwc_cdr_event","storeDays":30},{"backupPath":"/log/sys_log_operate","storeDays":30,"storeNum":7},{"backupPath":"/log/sys_log_login","storeDays":30,"storeNum":7}]', '0 10 0 * * ?', '3', '0', '1', '1', 'system', 1698478134839, 'system', 1698478134839, 'job.backup_remove_file_remark'); +REPLACE INTO "sys_job" VALUES (31, 'job.backup_export_udm', 'SYSTEM', 'backup_export_udm', '{"dataType":["auth","sub","voip","volte"],"fileType":"txt"}', '0 35 0 * * ?', '3', '0', '1', '1', 'system', 1698478134839, 'supervisor', 1745481169354, 'job.backup_export_udm_remark'); +REPLACE INTO "sys_job" VALUES (32, 'job.backup_export_cdr', 'SYSTEM', 'backup_export_cdr', '{"dataType":["ims","smf","sgwc","smsc"],"fileType":"xlsx","hour":1}', '0 0 0/1 * * ?', '3', '0', '1', '1', 'system', 1698478134839, 'supervisor', 1745481169354, 'job.backup_export_cdr_remark'); +REPLACE INTO "sys_job" VALUES (33, 'job.backup_export_log', 'SYSTEM', 'backup_export_log', '{"dataType":["operate","login"],"fileType":"xlsx","hour":1}', '0 0 0/1 * * ?', '3', '0', '1', '1', 'system', 1698478134839, 'supervisor', 1745481169354, 'job.backup_export_log_remark'); diff --git a/build/database/lite/upgrade/upg_sys_login_source.sql b/build/database/lite/upgrade/upg_sys_login_source.sql new file mode 100644 index 00000000..34071608 --- /dev/null +++ b/build/database/lite/upgrade/upg_sys_login_source.sql @@ -0,0 +1,32 @@ +-- ---------------------------- +-- Table structure for sys_login_source +-- ---------------------------- +CREATE TABLE IF NOT EXISTS "sys_login_source" ( + "id" integer NOT NULL, + "uid" text(32), + "type" text(32), + "name" text(64), + "icon" text(255), + "active_flag" text(1), + "sync_flag" text(1), + "config" text, + "create_by" text(64), + "create_time" integer, + "update_by" text(64), + "update_time" integer, + "remark" text(500), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table sys_login_source +-- ---------------------------- +CREATE INDEX IF NOT EXISTS "idx_ls_type_name" +ON "sys_login_source" ( + "type" ASC, + "name" ASC +); + +-- ---------------------------- +-- Records of sys_login_source +-- ---------------------------- diff --git a/build/database/lite/upgrade/upg_sys_menu.sql b/build/database/lite/upgrade/upg_sys_menu.sql new file mode 100644 index 00000000..1cc7a1c7 --- /dev/null +++ b/build/database/lite/upgrade/upg_sys_menu.sql @@ -0,0 +1,211 @@ +-- ---------------------------- +-- Table structure for sys_menu +-- ---------------------------- +CREATE TABLE IF NOT EXISTS "sys_menu" ( + "menu_id" integer NOT NULL, + "menu_name" text(64) NOT NULL, + "parent_id" integer, + "menu_sort" integer, + "menu_path" text(255), + "component" text(255), + "frame_flag" text(1), + "cache_flag" text(1), + "menu_type" text(1) NOT NULL, + "visible_flag" text(1), + "status_flag" text(1), + "perms" text(128), + "icon" text(128), + "del_flag" text(1), + "create_by" text(64), + "create_time" integer, + "update_by" text(64), + "update_time" integer, + "remark" text(500), + PRIMARY KEY ("menu_id") +); + +-- ---------------------------- +-- Records of sys_menu +-- ---------------------------- +REPLACE INTO "sys_menu" VALUES (1, 'menu.system', 0, 16, 'system', '', '1', '1', 'D', '1', '1', '', 'icon-xiangmu', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.systemRemark'); +REPLACE INTO "sys_menu" VALUES (4, 'menu.ne', 0, 3, 'ne', '', '1', '0', 'D', '1', '1', '', 'icon-huizhiguize', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.configRemark'); +REPLACE INTO "sys_menu" VALUES (5, 'menu.ue', 0, 7, 'ue', '', '1', '0', 'D', '1', '1', '', 'icon-wocanyu', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.ueRemark'); +REPLACE INTO "sys_menu" VALUES (60, 'menu.tools', 0, 60, 'tool', '', '1', '1', 'D', '1', '1', '', 'icon-wenjian', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.toolsRemark'); +REPLACE INTO "sys_menu" VALUES (61, 'menu.tools.terminal', 60, 20, 'terminal', 'tool/terminal/index', '1', '1', 'M', '1', '1', 'tool:terminal:index', 'icon-suofang', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (62, 'menu.tools.help', 60, 62, 'help', 'tool/help/index', '1', '1', 'M', '0', '1', 'tool:help:list', 'icon-shuoming', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.tools.helpRemark'); +REPLACE INTO "sys_menu" VALUES (63, 'menu.tools.ps', 60, 8, 'ps', 'tool/ps/index', '1', '0', 'M', '1', '1', 'tool:ps:list', 'icon-zhizuoliucheng', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (64, 'menu.tools.net', 60, 9, 'net', 'tool/net/index', '1', '0', 'M', '1', '1', 'tool:net:list', 'icon-zhizuoliucheng', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (65, 'menu.tools.ping', 60, 4, 'ping', 'tool/ping/index', '1', '0', 'M', '1', '1', 'tool:ping:index', 'icon-paixu', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (66, 'menu.tools.iperf', 60, 6, 'iperf', 'tool/iperf/index', '1', '0', 'M', '1', '1', 'tool:iperf:index', 'icon-paixu', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (100, 'menu.security.user', 2113, 1, 'user', 'system/user/index', '1', '1', 'M', '1', '1', 'system:user:list', 'icon-wocanyu', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.security.userRemark'); +REPLACE INTO "sys_menu" VALUES (101, 'menu.security.role', 2113, 3, 'role', 'system/role/index', '1', '1', 'M', '1', '1', 'system:role:list', 'icon-anzhuo', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.security.roleRemark'); +REPLACE INTO "sys_menu" VALUES (102, 'menu.security.roleUser', 2113, 3, 'role/inline/auth-user/:roleId', 'system/role/auth-user', '1', '1', 'M', '0', '1', 'system:role:auth', '#', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.security.roleUserRemark'); +REPLACE INTO "sys_menu" VALUES (103, 'menu.system.menu', 1, 10, 'menu', 'system/menu/index', '1', '1', 'M', '1', '1', 'system:menu:list', 'icon-wofaqi', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.system.menuRemark'); +REPLACE INTO "sys_menu" VALUES (104, 'menu.security.dept', 2113, 5, 'dept', 'system/dept/index', '1', '1', 'M', '1', '1', 'system:dept:list', 'icon-yuzhanghao1', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.security.deptRemark'); +REPLACE INTO "sys_menu" VALUES (105, 'menu.security.post', 2113, 6, 'post', 'system/post/index', '1', '1', 'M', '1', '1', 'system:post:list', 'icon-gonggaodayi', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.security.postRemark'); +REPLACE INTO "sys_menu" VALUES (106, 'menu.system.dictType', 1, 30, 'dict', 'system/dict/index', '1', '1', 'M', '1', '1', 'system:dict:list', 'icon-tubiaoku', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.system.dictTypeRemark'); +REPLACE INTO "sys_menu" VALUES (107, 'menu.system.dictData', 1, 31, 'dict/inline/data/:dictId', 'system/dict/data', '1', '1', 'M', '0', '1', 'system:dict:data', '#', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.system.dictDataRemark'); +REPLACE INTO "sys_menu" VALUES (108, 'menu.system.paramSet', 1, 59, 'config', 'system/config/index', '1', '1', 'M', '1', '1', 'system:config:list', 'icon-gongnengjieshao', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.system.paramSetRemark'); +REPLACE INTO "sys_menu" VALUES (109, 'menu.system.loginSource', 2113, 12, 'login-source', 'system/login-source/index', '1', '1', 'M', '1', '1', 'system:loginSource:list', 'icon-xiangmuchengyuan', '0', 'system', 1728641403588,'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (111, 'menu.system.systemLog', 1, 11, 'log', '', '1', '1', 'D', '0', '0', '', '#', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.system.systemLogRemark'); +REPLACE INTO "sys_menu" VALUES (112, 'menu.system.systemInfo', 1, 5, 'system-info', 'monitor/system/info', '1', '1', 'M', '1', '1', 'monitor:system:info', 'icon-fuzhidaima', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.system.systemInfoRemark'); +REPLACE INTO "sys_menu" VALUES (113, 'menu.system.cacheInfo', 1, 8, 'cache-info', 'monitor/cache/info', '1', '1', 'M', '1', '1', 'monitor:cache:info', 'icon-gongnengjieshao', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.system.cacheInfoRemark'); +REPLACE INTO "sys_menu" VALUES (114, 'menu.system.cache', 1, 9, 'cache', 'monitor/cache/index', '1', '1', 'M', '1', '1', 'monitor:cache:list', 'icon-tubiaoku', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.system.cacheRemark'); +REPLACE INTO "sys_menu" VALUES (115, 'menu.security.onlineUser', 2113, 2, 'online', 'monitor/online/index', '1', '1', 'M', '1', '1', 'monitor:online:list', 'icon-xiangmuchengyuan', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.security.onlineUserRemark'); +REPLACE INTO "sys_menu" VALUES (116, 'menu.system.job', 1, 20, 'job', 'monitor/job/index', '1', '1', 'M', '1', '1', 'monitor:job:list', 'icon-lishi', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.system.jobRemark'); +REPLACE INTO "sys_menu" VALUES (117, 'menu.system.jobLog', 1, 21, '/system/job/inline/log/:jobId', 'monitor/job/log', '1', '1', 'M', '0', '1', 'monitor:job:log', '#', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.system.jobLogRemark'); +REPLACE INTO "sys_menu" VALUES (500, 'menu.log.operat', 2089, 25, 'operate', 'system/log/operate/index', '1', '1', 'M', '1', '1', 'system:log:operate:list', 'icon-fuzhidaima', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.log.operatRemark'); +REPLACE INTO "sys_menu" VALUES (501, 'menu.log.login', 2089, 26, 'login', 'system/log/login/index', '1', '1', 'M', '1', '1', 'system:log:login:list', 'icon-fuzhidaima', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.log.loginRemark'); +REPLACE INTO "sys_menu" VALUES (1000, 'menu.common.query', 100, 1, '', '', '1', '1', 'B', '1', '1', 'system:user:query', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1001, 'menu.common.add', 100, 2, '', '', '1', '1', 'B', '1', '1', 'system:user:add', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1002, 'menu.common.edit', 100, 3, '', '', '1', '1', 'B', '1', '1', 'system:user:edit', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1003, 'menu.common.delete', 100, 4, '', '', '1', '1', 'B', '1', '1', 'system:user:remove', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1004, 'menu.common.export', 100, 5, '', '', '1', '1', 'B', '1', '1', 'system:user:export', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1005, 'menu.common.import', 100, 6, '', '', '1', '1', 'B', '1', '1', 'system:user:import', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1006, 'menu.common.resetPwd', 100, 7, '', '', '1', '1', 'B', '1', '1', 'system:user:resetPwd', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1007, 'menu.common.query', 101, 1, '', '', '1', '1', 'B', '1', '1', 'system:role:query', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1008, 'menu.common.add', 101, 2, '', '', '1', '1', 'B', '1', '1', 'system:role:add', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1009, 'menu.common.edit', 101, 3, '', '', '1', '1', 'B', '1', '1', 'system:role:edit', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1010, 'menu.common.delete', 101, 4, '', '', '1', '1', 'B', '1', '1', 'system:role:remove', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1011, 'menu.common.export', 101, 5, '', '', '1', '1', 'B', '1', '1', 'system:role:export', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1012, 'menu.common.query', 103, 1, '', '', '1', '1', 'B', '1', '1', 'system:menu:query', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1013, 'menu.common.add', 103, 2, '', '', '1', '1', 'B', '1', '1', 'system:menu:add', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1014, 'menu.common.edit', 103, 3, '', '', '1', '1', 'B', '1', '1', 'system:menu:edit', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1015, 'menu.common.delete', 103, 4, '', '', '1', '1', 'B', '1', '1', 'system:menu:remove', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1016, 'menu.common.query', 104, 1, '', '', '1', '1', 'B', '1', '1', 'system:dept:query', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1017, 'menu.common.add', 104, 2, '', '', '1', '1', 'B', '1', '1', 'system:dept:add', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1018, 'menu.common.edit', 104, 3, '', '', '1', '1', 'B', '1', '1', 'system:dept:edit', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1019, 'menu.common.delete', 104, 4, '', '', '1', '1', 'B', '1', '1', 'system:dept:remove', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1020, 'menu.common.query', 105, 1, '', '', '1', '1', 'B', '1', '1', 'system:post:query', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1021, 'menu.common.add', 105, 2, '', '', '1', '1', 'B', '1', '1', 'system:post:add', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1022, 'menu.common.edit', 105, 3, '', '', '1', '1', 'B', '1', '1', 'system:post:edit', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1023, 'menu.common.delete', 105, 4, '', '', '1', '1', 'B', '1', '1', 'system:post:remove', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1024, 'menu.common.export', 105, 5, '', '', '1', '1', 'B', '1', '1', 'system:post:export', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1025, 'menu.common.query', 106, 1, '#', '', '1', '1', 'B', '1', '1', 'system:dict:query', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1026, 'menu.common.add', 106, 2, '#', '', '1', '1', 'B', '1', '1', 'system:dict:add', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1027, 'menu.common.edit', 106, 3, '#', '', '1', '1', 'B', '1', '1', 'system:dict:edit', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1028, 'menu.common.delete', 106, 4, '#', '', '1', '1', 'B', '1', '1', 'system:dict:remove', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1029, 'menu.common.export', 106, 5, '#', '', '1', '1', 'B', '1', '1', 'system:dict:export', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1030, 'menu.common.query', 108, 1, '#', '', '1', '1', 'B', '1', '1', 'system:config:query', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1031, 'menu.common.add', 108, 2, '#', '', '1', '1', 'B', '1', '1', 'system:config:add', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1032, 'menu.common.edit', 108, 3, '#', '', '1', '1', 'B', '1', '1', 'system:config:edit', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1033, 'menu.common.delete', 108, 4, '#', '', '1', '1', 'B', '1', '1', 'system:config:remove', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1034, 'menu.common.export', 108, 5, '#', '', '1', '1', 'B', '1', '1', 'system:config:export', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1039, 'menu.common.query', 500, 1, '#', '', '1', '1', 'B', '1', '1', 'system:log:operate:query', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1040, 'menu.common.delete', 500, 2, '#', '', '1', '1', 'B', '1', '1', 'system:log:operate:remove', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1041, 'menu.common.export', 500, 3, '#', '', '1', '1', 'B', '1', '1', 'system:log:operate:export', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1042, 'menu.common.query', 501, 1, '#', '', '1', '1', 'B', '1', '1', 'system:log:login:query', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1043, 'menu.common.delete', 501, 2, '#', '', '1', '1', 'B', '1', '1', 'system:log:login:remove', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1044, 'menu.common.export', 501, 3, '#', '', '1', '1', 'B', '1', '1', 'system:log:login:export', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1045, 'menu.common.unlock', 501, 4, '#', '', '1', '1', 'B', '1', '1', 'system:log:login:unlock', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1046, 'menu.common.query', 114, 1, '#', '', '1', '1', 'B', '1', '1', 'monitor:cache:query', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1047, 'menu.common.delete', 114, 2, '#', '', '1', '1', 'B', '1', '1', 'monitor:cache:remove', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1048, 'menu.common.query', 115, 1, '#', '', '1', '1', 'B', '1', '1', 'monitor:online:query', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1049, 'menu.forcedQuit.batch ', 115, 2, '#', '', '1', '1', 'B', '1', '1', 'monitor:online:batchLogout', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1050, 'menu.forcedQuit.single', 115, 3, '#', '', '1', '1', 'B', '1', '1', 'monitor:online:forceLogout', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1051, 'menu.common.query', 116, 1, '#', '', '1', '1', 'B', '1', '1', 'monitor:job:query', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1052, 'menu.common.add', 116, 2, '#', '', '1', '1', 'B', '1', '1', 'monitor:job:add', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1053, 'menu.common.edit', 116, 3, '#', '', '1', '1', 'B', '1', '1', 'monitor:job:edit', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1054, 'menu.common.delete', 116, 4, '#', '', '1', '1', 'B', '1', '1', 'monitor:job:remove', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1055, 'menu.common.edit', 116, 5, '#', '', '1', '1', 'B', '1', '1', 'monitor:job:changeStatus', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1056, 'menu.common.export', 116, 6, '#', '', '1', '1', 'B', '1', '1', 'monitor:job:export', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1057, 'menu.common.query', 109, 1, '#', '', '1', '1', 'B', '1', '1', 'system:loginSource:query', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1058, 'menu.common.add', 109, 2, '#', '', '1', '1', 'B', '1', '1', 'system:loginSource:add', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1059, 'menu.common.edit', 109, 3, '#', '', '1', '1', 'B', '1', '1', 'system:loginSource:edit', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (1060, 'menu.common.delete', 109, 4, '#', '', '1', '1', 'B', '1', '1', 'system:loginSource:remove', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2000, 'menu.neData.udmAuth', 5, 1, 'udm-auth', 'neData/udm-auth/index', '1', '1', 'M', '1', '1', 'udm#auth:index', 'icon-xiangmuchengyuan', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2001, 'menu.neData.udmSub', 5, 3, 'udm-sub', 'neData/udm-sub/index', '1', '1', 'M', '1', '1', 'udm#sub:index', 'icon-xiangmuchengyuan', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2002, 'menu.neData.udmVOIP', 5, 5, 'udm-voip', 'neData/udm-voip/index', '1', '0', 'M', '1', '1', 'udm#voip:list', 'icon-xiangmuchengyuan', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2003, 'menu.neData.udmVolte', 5, 7, 'udm-volte', 'neData/udm-volte/index', '1', '0', 'M', '1', '1', 'udm+ims#volte:list', 'icon-xiangmuchengyuan', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2004, 'menu.neData.imsSub', 5, 9, 'ims-sub', 'neData/ims-sub/index', '1', '0', 'M', '1', '1', 'ims#sub:index', 'icon-xiangmuchengyuan', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2005, 'menu.neData.smfSub', 5, 12, 'smf-sub', 'neData/smf-sub/index', '1', '0', 'M', '1', '1', 'smf#sub:index', 'icon-xiangmuchengyuan', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2006, 'menu.neData.baseOnline', 5, 15, 'base-online', 'neData/base-online/index', '1', '0', 'M', '0', '1', 'amf,mme#base-online:index', 'icon-paixu', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2007, 'menu.neData.baseStation', 5, 18, 'base-station', 'neData/base-station/index', '1', '0', 'M', '1', '1', 'amf,mme#base-station:list', 'icon-fenxiang', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2008, 'menu.ueUser.n3iwf', 5, 20, 'n3iwf', 'neUser/n3iwf/index', '1', '0', 'M', '1', '1', 'n3iwf#sub:index', 'icon-paixu', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2009, 'menu.neData.pcfSub', 5, 24, 'pcf-sub', 'neData/pcf-sub/index', '1', '0', 'M', '1', '1', 'pcf#sub:index', 'icon-paixu', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2010, 'menu.neUser.nssf', 5, 26, 'nssf', 'neUser/nssf/index', '1', '0', 'M', '1', '1', 'nssf#sub:index', 'icon-daimayingyong', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2011, 'menu.neUser.nssfAmf', 5, 28, 'nssfAmf', 'neUser/nssfAmf/index', '1', '0', 'M', '1', '1', 'nssf#sub:index', 'icon-paixu', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2083, 'menu.trace', 2087, 30, 'traceManage', '', '1', '0', 'D', '1', '1', '', 'icon-paixu', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.traceRemark'); +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', '0', 'system', 1728641403588, 'system', 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', '#', '0', 'system', 1728641403588, 'system', 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', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.trace.pcapRemark'); +REPLACE INTO "sys_menu" VALUES (2087, 'menu.fault', 0, 2, 'faultManage', '', '1', '0', 'D', '1', '1', '', 'icon-jinggao', '0', 'system', 1728641403588, 'system', 1728641403588, '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', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.fault.activemRemark'); +REPLACE INTO "sys_menu" VALUES (2089, 'menu.log', 0, 9, 'logManage', '', '1', '0', 'D', '1', '1', '', 'icon-fuzhidaima', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.logRemark'); +REPLACE INTO "sys_menu" VALUES (2091, 'menu.log.mml', 2089, 30, 'mml', 'logManage/mml/index', '1', '1', 'M', '1', '1', 'logManage:mml:index', 'icon-wocanyu', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.log.mmlRemark'); +REPLACE INTO "sys_menu" VALUES (2092, 'menu.log.alarm', 2089, 40, 'alarm-log', 'logManage/alarm/index', '1', '0', 'M', '1', '1', 'logManage:alarm:index', 'icon-fuzhidaima', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.log.alarmRemark'); +REPLACE INTO "sys_menu" VALUES (2094, 'menu.log.forwarding', 2089, 41, 'forwarding', 'logManage/forwarding/index', '1', '0', 'M', '1', '1', 'logManage:forwarding:index', 'icon-huizhiguize', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.log.forwardingRemark'); +REPLACE INTO "sys_menu" VALUES (2095, 'menu.log.set', 2089, 45, 'logSet', 'logManage/logSet/index', '1', '0', 'M', '0', '0', 'logManage:logSet:index', 'icon-you', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.log.setRemark'); +REPLACE INTO "sys_menu" VALUES (2096, 'menu.neData.backupData', 5, 40, 'backup-data', 'neData/backup-data/index', '1', '0', 'M', '1', '1', 'ne-data:backup-data:list', 'icon-wenjian', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2097, 'menu.fault.history', 2129, 2, 'history-alarm', 'faultManage/history-alarm/index', '1', '1', 'M', '1', '1', 'faultManage/history-alarm/index', 'icon-huizhiguize', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.fault.historyRemark'); +REPLACE INTO "sys_menu" VALUES (2098, 'menu.fault.set', 2129, 100, 'fault-setting', 'faultManage/fault-setting/index', '1', '0', 'M', '0', '1', 'faultManage/fault-setting/index', 'icon-gonggaodayi', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.fault.setRemark'); +REPLACE INTO "sys_menu" VALUES (2099, 'menu.perf', 0, 5, 'perfManage', '', '1', '0', 'D', '1', '1', '', 'icon-soutubiao', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.perfRemark'); +REPLACE INTO "sys_menu" VALUES (2100, 'menu.perf.task', 2099, 1, 'taskManage', 'perfManage/taskManage/index', '1', '0', 'M', '0', '1', 'perfManage:taskManage:index', 'icon-wofaqi', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.perf.taskRemark'); +REPLACE INTO "sys_menu" VALUES (2101, 'menu.perf.data', 2099, 2, 'perfData', 'perfManage/perfData/index', '1', '0', 'M', '0', '1', 'perfManage:perfData:index', 'icon-soutubiao', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.perf.dataRemark'); +REPLACE INTO "sys_menu" VALUES (2102, 'menu.perf.kpiOverView', 2099, 10, 'kpiOverView', 'perfManage/kpiOverView/index', '1', '0', 'M', '1', '1', 'perfManage:perfReport:index', 'icon-gonggaodayi', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2103, 'menu.perf.threshold', 2099, 4, 'perfThreshold', 'perfManage/perfThreshold/index', '1', '0', 'M', '0', '0', 'perfManage:perfThreshold:index', 'icon-zhuanrang', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.perf.thresholdRemark'); +REPLACE INTO "sys_menu" VALUES (2104, 'menu.perf.kpi', 2099, 20, 'goldTarget', 'perfManage/goldTarget/index', '1', '1', 'M', '1', '1', 'perfManage:goldTarget:index', 'icon-soutubiao', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.perf.kpiRemark'); +REPLACE INTO "sys_menu" VALUES (2105, 'menu.perf.customTarget', 2099, 99, 'customTarget', 'perfManage/customTarget/index', '1', '0', 'M', '1', '1', 'perfManage:customTarget:index', 'icon-fanhui1', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.perf.customTargetRemark'); +REPLACE INTO "sys_menu" VALUES (2106, 'menu.perf.kpiKeyTarget', 2099, 12, 'kpiKeyTarget', 'perfManage/kpiKeyTarget/index', '1', '0', 'M', '1', '1', 'perfManage:kpiKeyTarget:index', 'icon-fuzhichenggong', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2107, 'menu.mml', 0, 8, 'mmlManage', '', '1', '0', 'D', '1', '1', '', 'icon-zhizuoliucheng', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.mmlRemark'); +REPLACE INTO "sys_menu" VALUES (2108, 'menu.mml.ne', 2107, 1, 'neOperate', 'mmlManage/neOperate/index', '1', '1', 'M', '1', '1', 'mmlManage:neOperate:index', 'icon-huizhiguize', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.mml.neRemark'); +REPLACE INTO "sys_menu" VALUES (2109, 'menu.mml.udm', 2107, 2, 'udmOperate', 'mmlManage/udmOperate/index', '1', '1', 'M', '1', '1', 'mmlManage:udmOperate:index', 'icon-gonggaodayi', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.mml.udmRemark'); +REPLACE INTO "sys_menu" VALUES (2110, 'menu.mml.set', 2107, 4, 'mmlSet', 'mmlManage/mmlSet/index', '1', '0', 'M', '0', '0', 'mmlManage:mmlSet:index', 'icon-wofaqi', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.mml.setRemark'); +REPLACE INTO "sys_menu" VALUES (2111, 'menu.mml.omc', 2107, 3, 'omcOperate', 'mmlManage/omcOperate/index', '1', '1', 'M', '0', '0', 'mmlManage:omcOperate:index', 'icon-huizhiguize', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.mml.omcRemark'); +REPLACE INTO "sys_menu" VALUES (2112, 'menu.dashboard.sgwcCDR', 2140, 12, 'sgwcCDR', 'dashboard/sgwcCDR/index', '1', '0', 'M', '1', '1', 'sgwc#cdr:index', 'icon-paixu', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2113, 'menu.security', 0, 14, 'security', '', '1', '0', 'D', '1', '1', '', 'icon-suofang', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.securityRemark'); +REPLACE INTO "sys_menu" VALUES (2114, 'menu.system.systemSet', 1, 60, 'setting', 'system/setting/index', '1', '1', 'M', '1', '1', 'system:setting:index', 'icon-piliang', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.system.systemSetRemark'); +REPLACE INTO "sys_menu" VALUES (2115, 'menu.system.systemResource', 1, 6, 'monitor', 'monitor/monitor/index', '1', '1', 'M', '1', '1', 'monitor:monitor:info', 'icon-soutubiao', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.system.systemResourceRemark'); +REPLACE INTO "sys_menu" VALUES (2116, 'menu.dashboard.smscCDR.content', 2157, 1, '', '', '1', '1', 'B', '1', '1', 'cdr:smsc:content', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2117, 'menu.common.delete', 2140, 1, '', '', '1', '1', 'B', '1', '1', 'cdr:ne:remove', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2118, 'menu.dashboard.smfCDRByIMSI', 2140, 7, 'smfCDRByIMSI', 'dashboard/smfCDRByIMSI/index', '1', '0', 'M', '1', '1', 'smf#cdr:index', 'icon-gerenzhanghu', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2119, 'Alarm Overview', 2129, 6, 'alarm-overview', 'faultManage/alarm-overview/index', '1', '1', 'M', '1', '1', 'faultManage:active-overview:index', 'icon-wenjian', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2120, 'DashboardV1', 2131, 8, 'dashboardV1', 'dashboard/overview/index', '1', '0', 'M', '1', '1', 'dashboard:overview:index', 'icon-paixu', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2121, 'menu.system.user.editRole', 100, 8, '', '', '1', '1', 'B', '1', '1', 'system:user:editRole', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2122, 'menu.system.setting.i18n', 2114, 1, '', '', '1', '1', 'B', '1', '1', 'system:setting:i18n', '#', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.system.setting.i18nRemark'); +REPLACE INTO "sys_menu" VALUES (2123, 'menu.log.neFile', 2089, 9, 'neFile', 'ne/neFile/index', '1', '0', 'M', '1', '1', 'ne:neFile:index', 'icon-tubiaohuizhi', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2126, 'menu.monitor.topology', 2130, 10, 'topology', 'monitor/topology/index', '1', '0', 'M', '1', '1', 'monitor:topology:index', 'icon-fangda', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2127, 'menu.monitor.topologyBuild', 2130, 30, 'topologyBuild', 'monitor/topologyBuild/index', '1', '0', 'M', '1', '1', 'monitor:topologyBuild:index', 'icon-fangda', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2128, 'menu.monitor.topologyArchitecture', 2130, 20, 'topologyArchitecture', 'monitor/topologyArchitecture/index', '1', '0', 'M', '1', '1', 'monitor:topologyArchitecture:index', 'icon-soutubiao', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2129, 'menu.alarm', 2087, 20, 'alarm', '', '1', '0', 'D', '1', '1', '', 'icon-jinggao', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2130, 'menu.topology', 2087, 10, 'topology', '', '1', '0', 'D', '1', '1', '', 'icon-anzhuo', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2131, 'menu.dashboard', 2087, 15, 'dashboard', '', '1', '0', 'D', '1', '1', '', 'icon-soutubiao', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2132, 'menu.dashboard.overview', 2131, 1, 'overview', 'dashboard/overview2/index', '1', '0', 'M', '1', '1', 'dashboard:overview:index', 'icon-paixu', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2133, 'menu.dashboard.imsCDR', 2140, 3, 'imsCDR', 'dashboard/imsCDR/index', '1', '0', 'M', '1', '1', 'ims#cdr:index', 'icon-paixu', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2135, 'menu.ne.neHost', 4, 15, 'neHost', 'ne/neHost/index', '1', '1', 'M', '1', '0', 'ne:neHost:list', 'icon-fuzhidaima', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2136, 'menu.ne.neHostCommand', 4, 18, 'neHostCommand', 'ne/neHostCommand/index', '1', '0', 'M', '1', '0', 'ne:neHostCommand:list', 'icon-fuzhidaima', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2137, 'menu.ne.neInfo', 4, 10, 'neInfo', 'ne/neInfo/index', '1', '0', 'M', '1', '1', 'ne:neInfo:list', 'icon-fuzhidaima', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2138, 'menu.dashboard.amfUE', 2141, 1, 'amfUE', 'dashboard/amfUE/index', '1', '0', 'M', '1', '1', 'amf#ue:index', 'icon-paixu', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2139, 'menu.perf.kpiIMSOverview', 2099, 14, 'dashboard', 'perfManage/overview/index', '1', '0', 'M', '1', '1', 'ims#perfManage:dashboard:index', 'icon-fuzhichenggong', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2140, 'menu.monitor.cdr', 2089, 10, 'cdr', '', '1', '0', 'D', '1', '1', '', 'icon-tubiaoku', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2141, 'menu.monitor.event', 2089, 20, 'event', '', '1', '0', 'D', '1', '1', '', 'icon-gengduo', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2142, 'menu.ne.neQuickSetup', 4, 40, 'neQuickSetup', 'ne/neQuickSetup/index', '1', '1', 'M', '1', '1', 'ne:neQuickSetup:list', 'icon-wofaqi', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2143, 'menu.ne.neLicense', 4, 20, 'neLicense', 'ne/neLicense/index', '1', '0', 'M', '1', '1', 'ne:neLicense:list', 'icon-fuzhidaima', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2144, 'menu.ne.neSoftware', 4, 23, 'neSoftware', 'ne/neSoftware/index', '1', '0', 'M', '1', '1', 'ne:neSoftware:list', 'icon-fuzhidaima', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2145, 'menu.ne.neVersion', 4, 26, 'neVersion', 'ne/neVersion/index', '1', '0', 'M', '1', '1', 'ne:neVersion:list', 'icon-fuzhidaima', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2146, 'menu.ne.neConfig', 4, 28, 'neConfig', 'ne/neConfig/index', '1', '0', 'M', '1', '1', 'ne:neConfig:list', 'icon-wofaqi', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2147, 'menu.fault.event', 2129, 3, 'event', 'faultManage/event/index', '1', '0', 'M', '1', '1', 'faultManage:event:index', 'icon-tubiaoku', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2148, 'menu.dashboard.smfCDR', 2140, 6, 'smfCDR', 'dashboard/smfCDR/index', '1', '0', 'M', '1', '1', 'smf#cdr:index', 'icon-paixu', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2149, 'menu.dashboard.mmeUE', 2141, 5, 'mmeUE', 'dashboard/mmeUE/index', '1', '0', 'M', '1', '1', 'mme#ue:index', 'icon-paixu', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2150, 'menu.system.user.editPost', 100, 9, '', '', '1', '1', 'B', '1', '1', 'system:user:editPost', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2151, 'menu.system.setting.doc', 2114, 2, '', '', '1', '1', 'B', '1', '1', 'system:setting:doc', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2152, 'menu.system.setting.official', 2114, 3, '', '', '1', '1', 'B', '1', '1', 'system:setting:official', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2153, 'menu.system.setting.lock', 2114, 4, '', '', '1', '1', 'B', '1', '1', 'system:setting:lock', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2154, 'menu.ne.neConfigBackup', 4, 29, 'neConfigBackup', 'ne/neConfigBackup/index', '1', '0', 'M', '1', '1', 'ne:neConfigBackup:list', 'icon-fuzhidaima', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2155, 'menu.common.delete', 2154, 1, '#', '', '1', '1', 'B', '1', '1', 'ne:neConfigBackup:remove', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2156, 'menu.common.edit', 2154, 2, '#', '', '1', '1', 'B', '1', '1', 'ne:neConfigBackup:edit', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2157, 'menu.dashboard.smscCDR', 2140, 9, 'smscCDR', 'dashboard/smscCDR/index', '1', '0', 'M', '1', '1', 'smsc#cdr:index', 'icon-paixu', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2158, 'menu.trace.pcapFile', 2083, 12, 'pcap/inline/file', 'traceManage/pcap/file', '1', '0', 'M', '0', '1', 'traceManage:pcap:index', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2159, 'menu.log.exportFile', 2089, 100, 'exportFile', 'logManage/exportFile/index', '1', '0', 'M', '1', '1', 'logManage:exportFile:index', 'icon-wenjian', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +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', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +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', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +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', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +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', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +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', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2165, 'menu.ne.neOverview', 4, 1, 'neOverview', 'configManage/neOverview/index', '1', '0', 'M', '1', '1', 'configManage:neOverview:index', 'icon-tubiaoku', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.ne.neOverviewRemark'); +REPLACE INTO "sys_menu" VALUES (2166, 'menu.dashboard.overview.smfUeNum', 2132, 4, '', '', '1', '1', 'B', '1', '1', 'dashboard:overview:smfUeNum', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2167, 'menu.dashboard.overview.imsUeNum', 2132, 2, '', '', '1', '1', 'B', '1', '1', 'dashboard:overview:imsUeNum', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2168, 'menu.dashboard.overview.gnbBase', 2132, 6, '', '', '1', '1', 'B', '1', '1', 'dashboard:overview:gnbBase', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO "sys_menu" VALUES (2169, 'menu.dashboard.overview.enbBase', 2132, 8, '', '', '1', '1', 'B', '1', '1', 'dashboard:overview:enbBase', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); + +REPLACE INTO `sys_menu` VALUES (20000, 'menu.ue.cbc.cbe', 5, 20, 'cbe', 'cbc/cbe/index', '1', '0', 'M', '1', '1', 'cbc#dashboard:cdr:index', 'icon-tubiaoku', '0', 'system', 1711352709786, 'system', 1747796007372, ''); diff --git a/build/database/lite/upgrade/upg_sys_role_menu.sql b/build/database/lite/upgrade/upg_sys_role_menu.sql new file mode 100644 index 00000000..15b8ae6a --- /dev/null +++ b/build/database/lite/upgrade/upg_sys_role_menu.sql @@ -0,0 +1,299 @@ +-- ---------------------------- +-- Table structure for sys_role_menu +-- ---------------------------- +CREATE TABLE IF NOT EXISTS "sys_role_menu" ( + "role_id" integer NOT NULL, + "menu_id" integer NOT NULL, + PRIMARY KEY ("role_id", "menu_id") +); + +DELETE FROM "sys_role_menu" WHERE "role_id" IN (2,3,4,5); +-- ---------------------------- +-- Records of sys_role_menu +-- ---------------------------- +REPLACE INTO "sys_role_menu" VALUES (2, 1); +REPLACE INTO "sys_role_menu" VALUES (2, 4); +REPLACE INTO "sys_role_menu" VALUES (2, 5); +REPLACE INTO "sys_role_menu" VALUES (2, 60); +REPLACE INTO "sys_role_menu" VALUES (2, 61); +REPLACE INTO "sys_role_menu" VALUES (2, 63); +REPLACE INTO "sys_role_menu" VALUES (2, 64); +REPLACE INTO "sys_role_menu" VALUES (2, 65); +REPLACE INTO "sys_role_menu" VALUES (2, 66); +REPLACE INTO "sys_role_menu" VALUES (2, 100); +REPLACE INTO "sys_role_menu" VALUES (2, 101); +REPLACE INTO "sys_role_menu" VALUES (2, 102); +REPLACE INTO "sys_role_menu" VALUES (2, 103); +REPLACE INTO "sys_role_menu" VALUES (2, 104); +REPLACE INTO "sys_role_menu" VALUES (2, 105); +REPLACE INTO "sys_role_menu" VALUES (2, 108); +REPLACE INTO "sys_role_menu" VALUES (2, 109); +REPLACE INTO "sys_role_menu" VALUES (2, 111); +REPLACE INTO "sys_role_menu" VALUES (2, 112); +REPLACE INTO "sys_role_menu" VALUES (2, 115); +REPLACE INTO "sys_role_menu" VALUES (2, 116); +REPLACE INTO "sys_role_menu" VALUES (2, 117); +REPLACE INTO "sys_role_menu" VALUES (2, 500); +REPLACE INTO "sys_role_menu" VALUES (2, 501); +REPLACE INTO "sys_role_menu" VALUES (2, 1000); +REPLACE INTO "sys_role_menu" VALUES (2, 1001); +REPLACE INTO "sys_role_menu" VALUES (2, 1002); +REPLACE INTO "sys_role_menu" VALUES (2, 1003); +REPLACE INTO "sys_role_menu" VALUES (2, 1004); +REPLACE INTO "sys_role_menu" VALUES (2, 1005); +REPLACE INTO "sys_role_menu" VALUES (2, 1006); +REPLACE INTO "sys_role_menu" VALUES (2, 1007); +REPLACE INTO "sys_role_menu" VALUES (2, 1008); +REPLACE INTO "sys_role_menu" VALUES (2, 1009); +REPLACE INTO "sys_role_menu" VALUES (2, 1010); +REPLACE INTO "sys_role_menu" VALUES (2, 1011); +REPLACE INTO "sys_role_menu" VALUES (2, 1012); +REPLACE INTO "sys_role_menu" VALUES (2, 1013); +REPLACE INTO "sys_role_menu" VALUES (2, 1014); +REPLACE INTO "sys_role_menu" VALUES (2, 1015); +REPLACE INTO "sys_role_menu" VALUES (2, 1016); +REPLACE INTO "sys_role_menu" VALUES (2, 1017); +REPLACE INTO "sys_role_menu" VALUES (2, 1018); +REPLACE INTO "sys_role_menu" VALUES (2, 1019); +REPLACE INTO "sys_role_menu" VALUES (2, 1020); +REPLACE INTO "sys_role_menu" VALUES (2, 1021); +REPLACE INTO "sys_role_menu" VALUES (2, 1022); +REPLACE INTO "sys_role_menu" VALUES (2, 1023); +REPLACE INTO "sys_role_menu" VALUES (2, 1024); +REPLACE INTO "sys_role_menu" VALUES (2, 1030); +REPLACE INTO "sys_role_menu" VALUES (2, 1032); +REPLACE INTO "sys_role_menu" VALUES (2, 1034); +REPLACE INTO "sys_role_menu" VALUES (2, 1039); +REPLACE INTO "sys_role_menu" VALUES (2, 1041); +REPLACE INTO "sys_role_menu" VALUES (2, 1042); +REPLACE INTO "sys_role_menu" VALUES (2, 1044); +REPLACE INTO "sys_role_menu" VALUES (2, 1045); +REPLACE INTO "sys_role_menu" VALUES (2, 1048); +REPLACE INTO "sys_role_menu" VALUES (2, 1049); +REPLACE INTO "sys_role_menu" VALUES (2, 1050); +REPLACE INTO "sys_role_menu" VALUES (2, 1051); +REPLACE INTO "sys_role_menu" VALUES (2, 1052); +REPLACE INTO "sys_role_menu" VALUES (2, 1053); +REPLACE INTO "sys_role_menu" VALUES (2, 1054); +REPLACE INTO "sys_role_menu" VALUES (2, 1055); +REPLACE INTO "sys_role_menu" VALUES (2, 1056); +REPLACE INTO "sys_role_menu" VALUES (2, 1057); +REPLACE INTO "sys_role_menu" VALUES (2, 1058); +REPLACE INTO "sys_role_menu" VALUES (2, 1059); +REPLACE INTO "sys_role_menu" VALUES (2, 1060); +REPLACE INTO "sys_role_menu" VALUES (2, 2000); +REPLACE INTO "sys_role_menu" VALUES (2, 2001); +REPLACE INTO "sys_role_menu" VALUES (2, 2002); +REPLACE INTO "sys_role_menu" VALUES (2, 2003); +REPLACE INTO "sys_role_menu" VALUES (2, 2004); +REPLACE INTO "sys_role_menu" VALUES (2, 2005); +REPLACE INTO "sys_role_menu" VALUES (2, 2007); +REPLACE INTO "sys_role_menu" VALUES (2, 2008); +REPLACE INTO "sys_role_menu" VALUES (2, 2009); +REPLACE INTO "sys_role_menu" VALUES (2, 2010); +REPLACE INTO "sys_role_menu" VALUES (2, 2011); +REPLACE INTO "sys_role_menu" VALUES (2, 2083); +REPLACE INTO "sys_role_menu" VALUES (2, 2084); +REPLACE INTO "sys_role_menu" VALUES (2, 2086); +REPLACE INTO "sys_role_menu" VALUES (2, 2087); +REPLACE INTO "sys_role_menu" VALUES (2, 2088); +REPLACE INTO "sys_role_menu" VALUES (2, 2089); +REPLACE INTO "sys_role_menu" VALUES (2, 2091); +REPLACE INTO "sys_role_menu" VALUES (2, 2092); +REPLACE INTO "sys_role_menu" VALUES (2, 2094); +REPLACE INTO "sys_role_menu" VALUES (2, 2096); +REPLACE INTO "sys_role_menu" VALUES (2, 2097); +REPLACE INTO "sys_role_menu" VALUES (2, 2099); +REPLACE INTO "sys_role_menu" VALUES (2, 2100); +REPLACE INTO "sys_role_menu" VALUES (2, 2101); +REPLACE INTO "sys_role_menu" VALUES (2, 2102); +REPLACE INTO "sys_role_menu" VALUES (2, 2103); +REPLACE INTO "sys_role_menu" VALUES (2, 2104); +REPLACE INTO "sys_role_menu" VALUES (2, 2105); +REPLACE INTO "sys_role_menu" VALUES (2, 2107); +REPLACE INTO "sys_role_menu" VALUES (2, 2108); +REPLACE INTO "sys_role_menu" VALUES (2, 2109); +REPLACE INTO "sys_role_menu" VALUES (2, 2112); +REPLACE INTO "sys_role_menu" VALUES (2, 2113); +REPLACE INTO "sys_role_menu" VALUES (2, 2114); +REPLACE INTO "sys_role_menu" VALUES (2, 2115); +REPLACE INTO "sys_role_menu" VALUES (2, 2116); +REPLACE INTO "sys_role_menu" VALUES (2, 2117); +REPLACE INTO "sys_role_menu" VALUES (2, 2118); +REPLACE INTO "sys_role_menu" VALUES (2, 2121); +REPLACE INTO "sys_role_menu" VALUES (2, 2122); +REPLACE INTO "sys_role_menu" VALUES (2, 2123); +REPLACE INTO "sys_role_menu" VALUES (2, 2126); +REPLACE INTO "sys_role_menu" VALUES (2, 2128); +REPLACE INTO "sys_role_menu" VALUES (2, 2129); +REPLACE INTO "sys_role_menu" VALUES (2, 2130); +REPLACE INTO "sys_role_menu" VALUES (2, 2131); +REPLACE INTO "sys_role_menu" VALUES (2, 2132); +REPLACE INTO "sys_role_menu" VALUES (2, 2133); +REPLACE INTO "sys_role_menu" VALUES (2, 2137); +REPLACE INTO "sys_role_menu" VALUES (2, 2138); +REPLACE INTO "sys_role_menu" VALUES (2, 2139); +REPLACE INTO "sys_role_menu" VALUES (2, 2140); +REPLACE INTO "sys_role_menu" VALUES (2, 2141); +REPLACE INTO "sys_role_menu" VALUES (2, 2142); +REPLACE INTO "sys_role_menu" VALUES (2, 2143); +REPLACE INTO "sys_role_menu" VALUES (2, 2145); +REPLACE INTO "sys_role_menu" VALUES (2, 2146); +REPLACE INTO "sys_role_menu" VALUES (2, 2147); +REPLACE INTO "sys_role_menu" VALUES (2, 2148); +REPLACE INTO "sys_role_menu" VALUES (2, 2149); +REPLACE INTO "sys_role_menu" VALUES (2, 2150); +REPLACE INTO "sys_role_menu" VALUES (2, 2151); +REPLACE INTO "sys_role_menu" VALUES (2, 2152); +REPLACE INTO "sys_role_menu" VALUES (2, 2153); +REPLACE INTO "sys_role_menu" VALUES (2, 2154); +REPLACE INTO "sys_role_menu" VALUES (2, 2155); +REPLACE INTO "sys_role_menu" VALUES (2, 2156); +REPLACE INTO "sys_role_menu" VALUES (2, 2157); +REPLACE INTO "sys_role_menu" VALUES (2, 2158); +REPLACE INTO "sys_role_menu" VALUES (2, 2159); +REPLACE INTO "sys_role_menu" VALUES (2, 2160); +REPLACE INTO "sys_role_menu" VALUES (2, 2162); +REPLACE INTO "sys_role_menu" VALUES (2, 2163); +REPLACE INTO "sys_role_menu" VALUES (2, 2164); +REPLACE INTO "sys_role_menu" VALUES (2, 2165); +REPLACE INTO "sys_role_menu" VALUES (2, 2166); +REPLACE INTO "sys_role_menu" VALUES (2, 2167); +REPLACE INTO "sys_role_menu" VALUES (2, 2168); +REPLACE INTO "sys_role_menu" VALUES (2, 2169); +REPLACE INTO "sys_role_menu" VALUES (2, 20000); + +REPLACE INTO "sys_role_menu" VALUES (3, 1); +REPLACE INTO "sys_role_menu" VALUES (3, 4); +REPLACE INTO "sys_role_menu" VALUES (3, 5); +REPLACE INTO "sys_role_menu" VALUES (3, 60); +REPLACE INTO "sys_role_menu" VALUES (3, 65); +REPLACE INTO "sys_role_menu" VALUES (3, 66); +REPLACE INTO "sys_role_menu" VALUES (3, 108); +REPLACE INTO "sys_role_menu" VALUES (3, 112); +REPLACE INTO "sys_role_menu" VALUES (3, 500); +REPLACE INTO "sys_role_menu" VALUES (3, 501); +REPLACE INTO "sys_role_menu" VALUES (3, 1030); +REPLACE INTO "sys_role_menu" VALUES (3, 1032); +REPLACE INTO "sys_role_menu" VALUES (3, 1034); +REPLACE INTO "sys_role_menu" VALUES (3, 1039); +REPLACE INTO "sys_role_menu" VALUES (3, 1042); +REPLACE INTO "sys_role_menu" VALUES (3, 2000); +REPLACE INTO "sys_role_menu" VALUES (3, 2001); +REPLACE INTO "sys_role_menu" VALUES (3, 2002); +REPLACE INTO "sys_role_menu" VALUES (3, 2003); +REPLACE INTO "sys_role_menu" VALUES (3, 2004); +REPLACE INTO "sys_role_menu" VALUES (3, 2005); +REPLACE INTO "sys_role_menu" VALUES (3, 2007); +REPLACE INTO "sys_role_menu" VALUES (3, 2008); +REPLACE INTO "sys_role_menu" VALUES (3, 2009); +REPLACE INTO "sys_role_menu" VALUES (3, 2010); +REPLACE INTO "sys_role_menu" VALUES (3, 2011); +REPLACE INTO "sys_role_menu" VALUES (3, 2083); +REPLACE INTO "sys_role_menu" VALUES (3, 2084); +REPLACE INTO "sys_role_menu" VALUES (3, 2086); +REPLACE INTO "sys_role_menu" VALUES (3, 2087); +REPLACE INTO "sys_role_menu" VALUES (3, 2088); +REPLACE INTO "sys_role_menu" VALUES (3, 2089); +REPLACE INTO "sys_role_menu" VALUES (3, 2091); +REPLACE INTO "sys_role_menu" VALUES (3, 2092); +REPLACE INTO "sys_role_menu" VALUES (3, 2094); +REPLACE INTO "sys_role_menu" VALUES (3, 2097); +REPLACE INTO "sys_role_menu" VALUES (3, 2107); +REPLACE INTO "sys_role_menu" VALUES (3, 2108); +REPLACE INTO "sys_role_menu" VALUES (3, 2109); +REPLACE INTO "sys_role_menu" VALUES (3, 2112); +REPLACE INTO "sys_role_menu" VALUES (3, 2114); +REPLACE INTO "sys_role_menu" VALUES (3, 2115); +REPLACE INTO "sys_role_menu" VALUES (3, 2116); +REPLACE INTO "sys_role_menu" VALUES (3, 2118); +REPLACE INTO "sys_role_menu" VALUES (3, 2122); +REPLACE INTO "sys_role_menu" VALUES (3, 2123); +REPLACE INTO "sys_role_menu" VALUES (3, 2126); +REPLACE INTO "sys_role_menu" VALUES (3, 2128); +REPLACE INTO "sys_role_menu" VALUES (3, 2129); +REPLACE INTO "sys_role_menu" VALUES (3, 2130); +REPLACE INTO "sys_role_menu" VALUES (3, 2131); +REPLACE INTO "sys_role_menu" VALUES (3, 2132); +REPLACE INTO "sys_role_menu" VALUES (3, 2133); +REPLACE INTO "sys_role_menu" VALUES (3, 2137); +REPLACE INTO "sys_role_menu" VALUES (3, 2138); +REPLACE INTO "sys_role_menu" VALUES (3, 2140); +REPLACE INTO "sys_role_menu" VALUES (3, 2141); +REPLACE INTO "sys_role_menu" VALUES (3, 2143); +REPLACE INTO "sys_role_menu" VALUES (3, 2146); +REPLACE INTO "sys_role_menu" VALUES (3, 2147); +REPLACE INTO "sys_role_menu" VALUES (3, 2148); +REPLACE INTO "sys_role_menu" VALUES (3, 2149); +REPLACE INTO "sys_role_menu" VALUES (3, 2151); +REPLACE INTO "sys_role_menu" VALUES (3, 2152); +REPLACE INTO "sys_role_menu" VALUES (3, 2153); +REPLACE INTO "sys_role_menu" VALUES (3, 2157); +REPLACE INTO "sys_role_menu" VALUES (3, 2158); +REPLACE INTO "sys_role_menu" VALUES (3, 2162); +REPLACE INTO "sys_role_menu" VALUES (3, 2163); +REPLACE INTO "sys_role_menu" VALUES (3, 2165); +REPLACE INTO "sys_role_menu" VALUES (3, 2166); +REPLACE INTO "sys_role_menu" VALUES (3, 2167); +REPLACE INTO "sys_role_menu" VALUES (3, 2168); +REPLACE INTO "sys_role_menu" VALUES (3, 2169); +REPLACE INTO "sys_role_menu" VALUES (3, 20000); + +REPLACE INTO "sys_role_menu" VALUES (4, 1); +REPLACE INTO "sys_role_menu" VALUES (4, 4); +REPLACE INTO "sys_role_menu" VALUES (4, 112); +REPLACE INTO "sys_role_menu" VALUES (4, 115); +REPLACE INTO "sys_role_menu" VALUES (4, 500); +REPLACE INTO "sys_role_menu" VALUES (4, 501); +REPLACE INTO "sys_role_menu" VALUES (4, 1039); +REPLACE INTO "sys_role_menu" VALUES (4, 1041); +REPLACE INTO "sys_role_menu" VALUES (4, 1042); +REPLACE INTO "sys_role_menu" VALUES (4, 1044); +REPLACE INTO "sys_role_menu" VALUES (4, 1048); +REPLACE INTO "sys_role_menu" VALUES (4, 2087); +REPLACE INTO "sys_role_menu" VALUES (4, 2088); +REPLACE INTO "sys_role_menu" VALUES (4, 2089); +REPLACE INTO "sys_role_menu" VALUES (4, 2091); +REPLACE INTO "sys_role_menu" VALUES (4, 2092); +REPLACE INTO "sys_role_menu" VALUES (4, 2094); +REPLACE INTO "sys_role_menu" VALUES (4, 2097); +REPLACE INTO "sys_role_menu" VALUES (4, 2112); +REPLACE INTO "sys_role_menu" VALUES (4, 2113); +REPLACE INTO "sys_role_menu" VALUES (4, 2115); +REPLACE INTO "sys_role_menu" VALUES (4, 2116); +REPLACE INTO "sys_role_menu" VALUES (4, 2123); +REPLACE INTO "sys_role_menu" VALUES (4, 2126); +REPLACE INTO "sys_role_menu" VALUES (4, 2128); +REPLACE INTO "sys_role_menu" VALUES (4, 2129); +REPLACE INTO "sys_role_menu" VALUES (4, 2130); +REPLACE INTO "sys_role_menu" VALUES (4, 2131); +REPLACE INTO "sys_role_menu" VALUES (4, 2132); +REPLACE INTO "sys_role_menu" VALUES (4, 2133); +REPLACE INTO "sys_role_menu" VALUES (4, 2138); +REPLACE INTO "sys_role_menu" VALUES (4, 2140); +REPLACE INTO "sys_role_menu" VALUES (4, 2141); +REPLACE INTO "sys_role_menu" VALUES (4, 2147); +REPLACE INTO "sys_role_menu" VALUES (4, 2148); +REPLACE INTO "sys_role_menu" VALUES (4, 2149); +REPLACE INTO "sys_role_menu" VALUES (4, 2157); +REPLACE INTO "sys_role_menu" VALUES (4, 2165); +REPLACE INTO "sys_role_menu" VALUES (4, 2166); +REPLACE INTO "sys_role_menu" VALUES (4, 2167); +REPLACE INTO "sys_role_menu" VALUES (4, 2168); +REPLACE INTO "sys_role_menu" VALUES (4, 2169); + +REPLACE INTO "sys_role_menu" VALUES (5, 1); +REPLACE INTO "sys_role_menu" VALUES (5, 4); +REPLACE INTO "sys_role_menu" VALUES (5, 112); +REPLACE INTO "sys_role_menu" VALUES (5, 2087); +REPLACE INTO "sys_role_menu" VALUES (5, 2115); +REPLACE INTO "sys_role_menu" VALUES (5, 2126); +REPLACE INTO "sys_role_menu" VALUES (5, 2128); +REPLACE INTO "sys_role_menu" VALUES (5, 2130); +REPLACE INTO "sys_role_menu" VALUES (5, 2131); +REPLACE INTO "sys_role_menu" VALUES (5, 2132); +REPLACE INTO "sys_role_menu" VALUES (5, 2165); +REPLACE INTO "sys_role_menu" VALUES (5, 2166); +REPLACE INTO "sys_role_menu" VALUES (5, 2167); +REPLACE INTO "sys_role_menu" VALUES (5, 2168); +REPLACE INTO "sys_role_menu" VALUES (5, 2169); diff --git a/build/database/lite/upgrade/upg_sys_user.sql b/build/database/lite/upgrade/upg_sys_user.sql new file mode 100644 index 00000000..89eab69f --- /dev/null +++ b/build/database/lite/upgrade/upg_sys_user.sql @@ -0,0 +1,46 @@ +-- ---------------------------- +-- Table structure for sys_user +-- ---------------------------- +ALTER TABLE "sys_user" RENAME TO "sys_user_old"; +CREATE TABLE "sys_user" ( + "user_id" integer NOT NULL, + "dept_id" integer, + "user_name" text(36) NOT NULL, + "nick_name" text(36) NOT NULL, + "email" text(64), + "phone" text(32), + "sex" text(1), + "avatar" text(255), + "password" text(128), + "user_type" text(20), + "user_source" text(32), + "status_flag" text(1), + "del_flag" text(1), + "password_update_time" integer, + "login_count" integer, + "login_ip" text(128), + "login_time" integer, + "create_by" text(64), + "create_time" integer, + "update_by" text(64), + "update_time" integer, + "remark" text(200), + PRIMARY KEY ("user_id") +); + +-- ---------------------------- +-- Records of sys_user +-- ---------------------------- +INSERT INTO "sys_user" ( +"user_id", "dept_id", "user_name", "nick_name", "email", "phone", "sex", "avatar", "password", "status_flag", "del_flag", "password_update_time", "login_count", "login_ip", "login_time", "create_by", "create_time", "update_by", "update_time", "remark") +SELECT +"user_id", "dept_id", "user_name", "nick_name", "email", "phone", "sex", "avatar", "password", "status_flag", "del_flag", "password_update_time", "login_count", "login_ip", "login_time", "create_by", "create_time", "update_by", "update_time", "remark" +FROM "sys_user_old"; + +-- UPDATE "user_type", "user_source" +UPDATE sys_user SET +user_type = COALESCE((SELECT user_type FROM sys_user_old WHERE sys_user_old.user_id = sys_user.user_id), 'Sytem'), +user_source = COALESCE((SELECT user_source FROM sys_user_old WHERE sys_user_old.user_id = sys_user.user_id), '#') +WHERE EXISTS (SELECT 1 FROM sys_user_old WHERE sys_user_old.user_id = sys_user.user_id); + +DROP TABLE IF EXISTS "sys_user_old"; \ No newline at end of file diff --git a/build/database/std/common/mml_command.sql b/build/database/std/common/mml_command.sql index 43d1e488..ef32e0d4 100644 --- a/build/database/std/common/mml_command.sql +++ b/build/database/std/common/mml_command.sql @@ -1,22 +1,3 @@ -/* - Navicat Premium Data Transfer - - Source Server : local_mariadb - Source Server Type : MariaDB - Source Server Version : 100338 (10.3.38-MariaDB) - Source Host : localhost:33066 - Source Schema : omc_db - - Target Server Type : MariaDB - Target Server Version : 100338 (10.3.38-MariaDB) - File Encoding : 65001 - - Date: 14/05/2024 11:55:53 -*/ - -SET NAMES utf8mb4; -SET FOREIGN_KEY_CHECKS = 0; - -- ---------------------------- -- Table structure for mml_command -- ---------------------------- @@ -31,9 +12,8 @@ CREATE TABLE `mml_command` ( `mml_display` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, `param_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, `status` enum('Active','Inactive') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'Active' COMMENT '激活: Active 未激活: Inactive', - PRIMARY KEY (`id`) USING BTREE, - INDEX `id`(`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 1626 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of mml_command @@ -71,5 +51,3 @@ INSERT INTO `mml_command` VALUES (1622, 'OMC', 'logManagement', 'Log Management' INSERT INTO `mml_command` VALUES (1623, 'OMC', 'logManagement', 'Log Management', 'lst', 'eventlog', 'List NE Event Log', '[{\"alias\":\"ne_type\",\"apostr\":\"true\",\"comment\":\"\",\"display\":\"NE type\",\"filter\":\"\",\"loc\":\"true\",\"name\":\"netype\",\"optional\":\"true\",\"type\":\"string\"},{\"alias\":\"ne_id\",\"apostr\":\"true\",\"comment\":\"\",\"display\":\"NE ID\",\"filter\":\"\",\"loc\":\"true\",\"name\":\"neid\",\"optional\":\"true\",\"type\":\"string\"},{\"alias\":\"log_time\\u003e\",\"apostr\":\"true\",\"comment\":\"\",\"display\":\"Log time(\\u003e=)\",\"filter\":\"\",\"name\":\"starttime\",\"optional\":\"true\",\"type\":\"string\"},{\"alias\":\"log_time\\u003c\",\"apostr\":\"true\",\"comment\":\"\",\"display\":\"Log time(\\u003c=)\",\"filter\":\"\",\"name\":\"endtime\",\"optional\":\"true\",\"type\":\"string\"}]', 'Active'); INSERT INTO `mml_command` VALUES (1624, 'OMC', 'mmlManagement', 'MML Management', 'lst', 'mmlcmd', 'List MML Command', '[{\"alias\":\"ne_type\",\"apostr\":\"true\",\"comment\":\"\",\"display\":\"Category\",\"filter\":\"\",\"name\":\"category\",\"optional\":\"true\",\"type\":\"string\"},{\"alias\":\"operation\",\"apostr\":\"true\",\"comment\":\"\",\"display\":\"Operation\",\"filter\":\"\",\"name\":\"operation\",\"optional\":\"true\",\"type\":\"string\"},{\"alias\":\"object\",\"apostr\":\"true\",\"comment\":\"\",\"display\":\"Object\",\"filter\":\"\",\"name\":\"object\",\"optional\":\"true\",\"type\":\"string\"}]', 'Active'); INSERT INTO `mml_command` VALUES (1625, 'OMC', 'systemManagement', 'System Management', 'dsp', 'sysinfo', 'Display NE System Information', '[{\"alias\":\"neType\",\"apostr\":\"false\",\"comment\":\"\",\"display\":\"NE type\",\"filter\":\"\",\"name\":\"netype\",\"optional\":\"true\",\"type\":\"string\"},{\"alias\":\"neId\",\"comment\":\"\",\"display\":\"NE ID\",\"filter\":\"\",\"name\":\"neid\",\"optional\":\"true\",\"type\":\"string\"}]', 'Active'); - -SET FOREIGN_KEY_CHECKS = 1; diff --git a/build/database/std/common/mml_system.sql b/build/database/std/common/mml_system.sql index f19b51c7..696dc145 100644 --- a/build/database/std/common/mml_system.sql +++ b/build/database/std/common/mml_system.sql @@ -29,7 +29,7 @@ CREATE TABLE `mml_system` ( `operation` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, `object` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, `mml_display` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `object_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'mml', + `object_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'General', `param_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, `status` enum('Active','Inactive') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'Active' COMMENT '激活: Active 未激活: Inactive', PRIMARY KEY (`id`) USING BTREE @@ -38,66 +38,66 @@ CREATE TABLE `mml_system` ( -- ---------------------------- -- Records of mml_system -- ---------------------------- -INSERT INTO `mml_system` VALUES (833, 'UPF', 'upfManagement', 'UPF Management', 'help', '', 'List UPF MML CMD', 'mml', 'null', 'Active'); -INSERT INTO `mml_system` VALUES (834, 'UPF', 'systemManagement', 'System Management', 'set', 'n3 driver', 'Set N3 Driver', 'mml', '[{\"comment\":\"\",\"display\":\"Type\",\"filter\":\"\",\"name\":\"type\",\"optional\":\"false\",\"type\":\"int\"},{\"comment\":\"\",\"display\":\"IP address\",\"filter\":\"\",\"name\":\"ip\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"Mask\",\"filter\":\"\",\"name\":\"mask\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"Mac address\",\"filter\":\"\",\"name\":\"mac\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"PCI address\",\"filter\":\"\",\"name\":\"pci\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); -INSERT INTO `mml_system` VALUES (835, 'UPF', 'systemManagement', 'System Management', 'set', 'n4 ip', 'Set N4 IP Address', 'mml', '[{\"comment\":\"\",\"display\":\"IP Address\",\"filter\":\"\",\"name\":\"ip\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); -INSERT INTO `mml_system` VALUES (836, 'UPF', 'systemManagement', 'System Management', 'set', 'n6 driver', 'Set N6 Driver', 'mml', '[{\"comment\":\"\",\"display\":\"Type\",\"filter\":\"\",\"name\":\"type\",\"optional\":\"false\",\"type\":\"int\"},{\"comment\":\"\",\"display\":\"IP address\",\"filter\":\"\",\"name\":\"ip\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"Mask\",\"filter\":\"\",\"name\":\"mask\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"Mac address\",\"filter\":\"\",\"name\":\"mac\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"PCI address\",\"filter\":\"\",\"name\":\"pci\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); -INSERT INTO `mml_system` VALUES (837, 'UPF', 'systemManagement', 'System Management', 'set', 'n9 driver', 'Set N9 Driver', 'mml', '[{\"comment\":\"\",\"display\":\"Type\",\"filter\":\"\",\"name\":\"type\",\"optional\":\"false\",\"type\":\"int\"},{\"comment\":\"\",\"display\":\"IP address\",\"filter\":\"\",\"name\":\"ip\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"Mask\",\"filter\":\"\",\"name\":\"mask\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"Mac address\",\"filter\":\"\",\"name\":\"mac\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"PCI address\",\"filter\":\"\",\"name\":\"pci\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); -INSERT INTO `mml_system` VALUES (838, 'UPF', 'systemManagement', 'System Management', 'set', 'dnn', 'Set DNN', 'mml', '[{\"comment\":\"\",\"display\":\"DNN\",\"filter\":\"\",\"name\":\"dnn\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"IP Address\",\"filter\":\"\",\"name\":\"ip\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); -INSERT INTO `mml_system` VALUES (839, 'UPF', 'systemManagement', 'System Management', 'set', 'pfcp', 'Set PFCP', 'mml', '[{\"comment\":\"\",\"display\":\"Path\",\"filter\":\"\",\"name\":\"path\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"Local IP Address\",\"filter\":\"\",\"name\":\"local\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"Remote IP Address\",\"filter\":\"\",\"name\":\"remote\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); -INSERT INTO `mml_system` VALUES (840, 'UPF', 'systemManagement', 'System Management', 'set', 'qos', 'Set Qos', 'mml', '[{\"comment\":\"\",\"display\":\"Index\",\"filter\":\"\",\"name\":\"index\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"5qi\",\"filter\":\"\",\"name\":\"5qi\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"Priority Level\",\"filter\":\"\",\"name\":\"priority\",\"optional\":\"false\",\"type\":\"int\"},{\"comment\":\"\",\"display\":\"MBR\",\"filter\":\"\",\"name\":\"mbr\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"GBR\",\"filter\":\"\",\"name\":\"gbr\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); -INSERT INTO `mml_system` VALUES (841, 'UPF', 'systemManagement', 'System Management', 'set', 'pccrule', 'Set PCC Rule', 'mml', '[{\"comment\":\"\",\"display\":\"Index\",\"filter\":\"0~65535\",\"name\":\"index\",\"optional\":\"false\",\"type\":\"int\"},{\"comment\":\"\",\"display\":\"Precedence\",\"filter\":\"\",\"name\":\"precedence\",\"optional\":\"false\",\"type\":\"int\"},{\"comment\":\"\",\"display\":\"QOS Index\",\"filter\":\"\",\"name\":\"qosindex\",\"optional\":\"false\",\"type\":\"int\"},{\"comment\":\"\",\"display\":\"Filter Direction\",\"filter\":\"{\\\"0\\\":\\\"NA\\\", \\\"1\\\":\\\"Uplink\\\", \\\"2\\\":\\\"Downlink\\\", \\\"3\\\":\\\"Bidirectionallink\\\"}\",\"name\":\"direction\",\"optional\":\"true\",\"type\":\"int\"},{\"comment\":\"\",\"display\":\"Filter\",\"filter\":\"\",\"name\":\"filter\",\"optional\":\"true\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"Application ID\",\"filter\":\"\",\"name\":\"appid\",\"optional\":\"true\",\"type\":\"string\"}]', 'Inactive'); -INSERT INTO `mml_system` VALUES (842, 'UPF', 'systemManagement', 'System Management', 'exec', 'shell', 'Execute Shell Command', 'mml', '[{\"comment\":\"\",\"display\":\"CMD\",\"filter\":\"\",\"name\":\"cmd\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); -INSERT INTO `mml_system` VALUES (843, 'UPF', 'systemManagement', 'System Management', 'reload', '', 'Reload Config', 'mml', 'null', 'Inactive'); -INSERT INTO `mml_system` VALUES (853, 'SMF', 'smfManagement', 'SMF Management', 'help', '', 'List SMF MML CMD', 'mml', 'null', 'Active'); -INSERT INTO `mml_system` VALUES (854, 'SMF', 'systemManagement', 'System Management', 'set', 'n7 server', 'Set N7 Server', 'mml', '[{\"comment\":\"\",\"display\":\"Scheme\",\"filter\":\"{\\\"0\\\":\\\"http\\\", \\\"1\\\":\\\"https\\\"}\",\"name\":\"scheme\",\"optional\":\"false\",\"type\":\"enum\"},{\"comment\":\"\",\"display\":\"IP Address\",\"filter\":\"0~64\",\"name\":\"ip\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"Port\",\"filter\":\"0~65535\",\"name\":\"port\",\"optional\":\"false\",\"type\":\"int\"}]', 'Inactive'); -INSERT INTO `mml_system` VALUES (855, 'SMF', 'systemManagement', 'System Management', 'set', 'n7 client', 'Set N7 Client', 'mml', '[{\"comment\":\"\",\"display\":\"Scheme\",\"filter\":\"{\\\"0\\\":\\\"http\\\", \\\"1\\\":\\\"https\\\"}\",\"name\":\"scheme\",\"optional\":\"false\",\"type\":\"enum\"},{\"comment\":\"\",\"display\":\"IP Address\",\"filter\":\"0~64\",\"name\":\"ip\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); -INSERT INTO `mml_system` VALUES (856, 'SMF', 'systemManagement', 'System Management', 'set', 'n10 server', 'Set N10 Server', 'mml', '[{\"comment\":\"\",\"display\":\"Scheme\",\"filter\":\"{\\\"0\\\":\\\"http\\\", \\\"1\\\":\\\"https\\\"}\",\"name\":\"scheme\",\"optional\":\"false\",\"type\":\"enum\"},{\"comment\":\"\",\"display\":\"IP Address\",\"filter\":\"0~64\",\"name\":\"ip\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"Port\",\"filter\":\"0~65535\",\"name\":\"port\",\"optional\":\"false\",\"type\":\"int\"}]', 'Inactive'); -INSERT INTO `mml_system` VALUES (857, 'SMF', 'systemManagement', 'System Management', 'set', 'n10 client', 'Set N10 Client', 'mml', '[{\"comment\":\"\",\"display\":\"Scheme\",\"filter\":\"{\\\"0\\\":\\\"http\\\", \\\"1\\\":\\\"https\\\"}\",\"name\":\"scheme\",\"optional\":\"false\",\"type\":\"enum\"},{\"comment\":\"\",\"display\":\"IP Address\",\"filter\":\"0~64\",\"name\":\"ip\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); -INSERT INTO `mml_system` VALUES (858, 'SMF', 'systemManagement', 'System Management', 'set', 'n11 server', 'Set N11 Server', 'mml', '[{\"comment\":\"\",\"display\":\"Scheme\",\"filter\":\"{\\\"0\\\":\\\"http\\\", \\\"1\\\":\\\"https\\\"}\",\"name\":\"scheme\",\"optional\":\"false\",\"type\":\"enum\"},{\"comment\":\"\",\"display\":\"IP Address\",\"filter\":\"0~64\",\"name\":\"ip\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"Port\",\"filter\":\"0~65535\",\"name\":\"port\",\"optional\":\"false\",\"type\":\"int\"}]', 'Inactive'); -INSERT INTO `mml_system` VALUES (859, 'SMF', 'systemManagement', 'System Management', 'set', 'n11 client', 'Set N11 Client', 'mml', '[{\"comment\":\"\",\"display\":\"Scheme\",\"filter\":\"{\\\"0\\\":\\\"http\\\", \\\"1\\\":\\\"https\\\"}\",\"name\":\"scheme\",\"optional\":\"false\",\"type\":\"enum\"},{\"comment\":\"\",\"display\":\"IP Address\",\"filter\":\"0~64\",\"name\":\"ip\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); -INSERT INTO `mml_system` VALUES (860, 'SMF', 'systemManagement', 'System Management', 'set', 'dnn', 'Set DNN', 'mml', '[{\"comment\":\"\",\"display\":\"Index\",\"filter\":\"\",\"name\":\"index\",\"optional\":\"false\",\"type\":\"int\"},{\"comment\":\"\",\"display\":\"DNN\",\"filter\":\"\",\"name\":\"DNN\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); -INSERT INTO `mml_system` VALUES (862, 'SMF', 'systemManagement', 'System Management', 'set', 'qos', 'Set Qos', 'mml', '[{\"comment\":\"\",\"display\":\"Index\",\"filter\":\"\",\"name\":\"index\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"SD\",\"filter\":\"\",\"name\":\"5qi\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"5qipl\",\"filter\":\"\",\"name\":\"5qipl\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"arppl\",\"filter\":\"\",\"name\":\"arppl\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"arppci\",\"filter\":\"\",\"name\":\"arppci\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"arppvi\",\"filter\":\"\",\"name\":\"arppvi\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"mfbrul\",\"filter\":\"\",\"name\":\"mfbrul\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"mfbrdl\",\"filter\":\"\",\"name\":\"mfbrdl\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"gfbrul\",\"filter\":\"\",\"name\":\"gfbrul\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"gfbrdl\",\"filter\":\"\",\"name\":\"gfbrdl\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); -INSERT INTO `mml_system` VALUES (863, 'SMF', 'systemManagement', 'System Management', 'set', 'snssai', 'Set Snssai', 'mml', '[{\"comment\":\"\",\"display\":\"Index\",\"filter\":\"\",\"name\":\"index\",\"optional\":\"false\",\"type\":\"string\"},{\"display\":\"sst-sd\",\"filter\":\"\",\"name\":\"sst-sd\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); -INSERT INTO `mml_system` VALUES (864, 'SMF', 'systemManagement', 'System Management', 'release', 'imsi', 'Release IMSI', 'mml', '[{\"comment\":\"\",\"display\":\"IMSI\",\"filter\":\"\",\"name\":\"imsi\",\"optional\":\"false\",\"type\":\"string\"},{\"display\":\"PDU Session Id\",\"filter\":\"\",\"name\":\"pduSessId\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); -INSERT INTO `mml_system` VALUES (865, 'SMF', 'systemManagement', 'System Management', 'set', 'urr', 'Set URR', 'mml', '[{\"comment\":\"\",\"display\":\"Index\",\"filter\":\"\",\"name\":\"index\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"Quota Volume Tatol\",\"filter\":\"\",\"name\":\"quotavolumetatol\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"Quota Volume UL\",\"filter\":\"\",\"name\":\"quotavolumeul\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"Quota Volume DL\",\"filter\":\"\",\"name\":\"quotavolumedl\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"Quota Time\",\"filter\":\"\",\"name\":\"quotatime\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); -INSERT INTO `mml_system` VALUES (866, 'SMF', 'systemManagement', 'System Management', 'set', 'dpi', 'Set DPI', 'mml', '[{\"comment\":\"\",\"display\":\"Flag\",\"filter\":\"{\\\"0\\\":\\\"disable\\\", \\\"1\\\":\\\"enable\\\"}\",\"name\":\"flag\",\"optional\":\"false\",\"type\":\"enum\"},{\"comment\":\"\",\"display\":\"Max Detect Packet Number\",\"filter\":\"\",\"name\":\"max\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); -INSERT INTO `mml_system` VALUES (867, 'SMF', 'systemManagement', 'System Management', 'exec', 'shell', 'Execute Shell Command', 'mml', '[{\"comment\":\"\",\"display\":\"CMD\",\"filter\":\"\",\"name\":\"cmd\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); -INSERT INTO `mml_system` VALUES (868, 'SMF', 'systemManagement', 'System Management', 'reload', '', 'Reload Config', 'mml', 'null', 'Inactive'); -INSERT INTO `mml_system` VALUES (870, 'IMS', 'imsManagement', 'IMS Management', 'help', '', 'List IMS MML CMD', 'mml', 'null', 'Active'); -INSERT INTO `mml_system` VALUES (871, 'N3IWF', 'n3iwfManagement', 'N3IWF Management', 'help', '', 'List N3IWF MML CMD', 'mml', 'null', 'Active'); -INSERT INTO `mml_system` VALUES (872, 'NSSF', 'nssfManagement', 'NSSF Management', 'help', '', 'List NSSF MML CMD', 'mml', 'null', 'Active'); -INSERT INTO `mml_system` VALUES (873, 'NRF', 'nrfManagement', 'NRF Management', 'help', '', 'List NRF MML CMD', 'mml', 'null', 'Active'); -INSERT INTO `mml_system` VALUES (874, 'PCF', 'pcfManagement', 'PCF Management', 'help', '', 'List PCF MML CMD', 'mml', 'null', 'Active'); -INSERT INTO `mml_system` VALUES (875, 'AMF', 'subsManagement', 'Subscriber Management', 'list', 'imsi', 'List Online IMSI', 'mml', '[{\"comment\":\"\",\"display\":\"IMSI\",\"filter\":\"32\",\"name\":\"imsi\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); -INSERT INTO `mml_system` VALUES (876, 'AMF', 'amfManagement', 'AMF Management', 'help', '', 'List AMF MML CMD', 'mml', 'null', 'Active'); -INSERT INTO `mml_system` VALUES (877, 'AMF', 'systemManagement', 'System Management', 'set', 'n8_ip', 'Set N8 IP Address', 'mml', '[{\"comment\":\"\",\"display\":\"IP Address\",\"filter\":\"0~64\",\"name\":\"ip\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); -INSERT INTO `mml_system` VALUES (878, 'AMF', 'systemManagement', 'System Management', 'set', 'n11_ip', 'Set N11 IP Address', 'mml', '[{\"comment\":\"\",\"display\":\"IP Address\",\"filter\":\"0~64\",\"name\":\"ip\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); -INSERT INTO `mml_system` VALUES (879, 'AMF', 'systemManagement', 'System Management', 'set', 'n12_ip', 'Set N12 IP Address', 'mml', '[{\"comment\":\"\",\"display\":\"IP Address\",\"filter\":\"0~64\",\"name\":\"ip\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); -INSERT INTO `mml_system` VALUES (880, 'AMF', 'systemManagement', 'System Management', 'set', 'n2_ip', 'Set N2 IP Address', 'mml', '[{\"comment\":\"\",\"display\":\"IP Address\",\"filter\":\"\",\"name\":\"ip\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); -INSERT INTO `mml_system` VALUES (881, 'AMF', 'systemManagement', 'System Management', 'set', 'n2_port', 'Set N2 Port', 'mml', '[{\"comment\":\"\",\"display\":\"Port\",\"filter\":\"0~65535\",\"name\":\"port\",\"optional\":\"false\",\"type\":\"int\"}]', 'Inactive'); -INSERT INTO `mml_system` VALUES (882, 'AMF', 'systemManagement', 'System Management', 'set', 'ntpversion', 'Set NTP Version', 'mml', '[{\"comment\":\"\",\"display\":\"Version\",\"filter\":\"\",\"name\":\"version\",\"optional\":\"false\",\"type\":\"int\"}]', 'Inactive'); -INSERT INTO `mml_system` VALUES (883, 'AMF', 'systemManagement', 'System Management', 'set', 'ntpmaxdiff', 'Set NTP Max Diff', 'mml', '[{\"comment\":\"\",\"display\":\"Max Value(ms)\",\"filter\":\"100~2000\",\"name\":\"value\",\"optional\":\"false\",\"type\":\"int\"}]', 'Inactive'); -INSERT INTO `mml_system` VALUES (884, 'AMF', 'systemManagement', 'System Management', 'set', 'ntpsynctimer', 'Set NTP Sync Timer', 'mml', '[{\"comment\":\"\",\"display\":\"Periods(second)\",\"filter\":\"\",\"name\":\"periods\",\"optional\":\"false\",\"type\":\"int\"}]', 'Inactive'); -INSERT INTO `mml_system` VALUES (885, 'AMF', 'systemManagement', 'System Management', 'add', 'slice', 'Add Slice', 'mml', '[{\"comment\":\"\",\"display\":\"SST\",\"filter\":\"\",\"name\":\"sst\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"SD\",\"filter\":\"\",\"name\":\"sd\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); -INSERT INTO `mml_system` VALUES (886, 'AMF', 'systemManagement', 'System Management', 'deregister', 'imsi', 'Deregister IMSI', 'mml', '[{\"comment\":\"\",\"display\":\"IMSI\",\"filter\":\"\",\"name\":\"IMSI\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); -INSERT INTO `mml_system` VALUES (887, 'AMF', 'systemManagement', 'System Management', 'exec', 'shell', 'Execute Shell Command', 'mml', '[{\"comment\":\"\",\"display\":\"CMD\",\"filter\":\"\",\"name\":\"cmd\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); -INSERT INTO `mml_system` VALUES (888, 'AMF', 'systemManagement', 'System Management', 'reload', '', 'Reload Config', 'mml', 'null', 'Inactive'); -INSERT INTO `mml_system` VALUES (889, 'UDM', 'udmManagement', 'UDM Management', 'help', '', 'List UDM MML CMD', 'mml', 'null', 'Active'); -INSERT INTO `mml_system` VALUES (890, 'UDM', 'systemManagement', 'System Management', 'set', 'n8ip', 'Set N8 IP Address', 'mml', '[{\"comment\":\"\",\"display\":\"IP Address\",\"filter\":\"\",\"name\":\"ip\",\"optional\":\"false\",\"type\":\"ipv4\"}]', 'Inactive'); -INSERT INTO `mml_system` VALUES (891, 'UDM', 'systemManagement', 'System Management', 'set', 'n8port', 'Set N8 Port', 'mml', '[{\"comment\":\"\",\"display\":\"Port\",\"filter\":\"1~65535\",\"name\":\"port\",\"optional\":\"false\",\"type\":\"int\"}]', 'Inactive'); -INSERT INTO `mml_system` VALUES (892, 'UDM', 'systemManagement', 'System Management', 'set', 'n8scheme', 'Set N8 Scheme', 'mml', '[{\"comment\":\"\",\"display\":\"Scheme\",\"filter\":\"{\\\"0\\\":\\\"http\\\", \\\"1\\\":\\\"https\\\"}\",\"name\":\"scheme\",\"optional\":\"false\",\"type\":\"enum\"}]', 'Inactive'); -INSERT INTO `mml_system` VALUES (893, 'UDM', 'systemManagement', 'System Management', 'set', 'n10ip', 'Set N10 IP Address', 'mml', '[{\"comment\":\"\",\"display\":\"IP Address\",\"filter\":\"\",\"name\":\"ip\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); -INSERT INTO `mml_system` VALUES (894, 'UDM', 'systemManagement', 'System Management', 'set', 'n10port', 'Set N10 Port', 'mml', '[{\"comment\":\"\",\"display\":\"Port\",\"filter\":\"1~65535\",\"name\":\"port\",\"optional\":\"false\",\"type\":\"int\"}]', 'Inactive'); -INSERT INTO `mml_system` VALUES (895, 'UDM', 'systemManagement', 'System Management', 'set', 'n10scheme', 'Set N10 Scheme', 'mml', '[{\"comment\":\"\",\"display\":\"Scheme\",\"filter\":\"{\\\"0\\\":\\\"http\\\", \\\"1\\\":\\\"https\\\"}\",\"name\":\"scheme\",\"optional\":\"false\",\"type\":\"enum\"}]', 'Inactive'); -INSERT INTO `mml_system` VALUES (896, 'UDM', 'systemManagement', 'System Management', 'exec', 'shell', 'Execute Shell Command', 'mml', '[{\"comment\":\"\",\"display\":\"CMD\",\"filter\":\"\",\"name\":\"cmd\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); -INSERT INTO `mml_system` VALUES (897, 'UDM', 'systemManagement', 'System Management', 'reload', '', 'Reload Config', 'mml', 'null', 'Inactive'); -INSERT INTO `mml_system` VALUES (898, 'AUSF', 'ausfManagement', 'AUSF Management', 'help', '', 'List AUSF MML CMD', 'mml', 'null', 'Active'); -INSERT INTO `mml_system` VALUES (899, 'AUSF', 'systemManagement', 'System Management', 'set', 'n12ip', 'Set N12 IP Address', 'mml', '[{\"comment\":\"\",\"display\":\"IP Address\",\"filter\":\"\",\"name\":\"ip\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); -INSERT INTO `mml_system` VALUES (900, 'AUSF', 'systemManagement', 'System Management', 'set', 'n12port', 'Set N12 Port', 'mml', '[{\"comment\":\"\",\"display\":\"Port\",\"filter\":\"1~65535\",\"name\":\"port\",\"optional\":\"false\",\"type\":\"int\"}]', 'Inactive'); -INSERT INTO `mml_system` VALUES (901, 'AUSF', 'systemManagement', 'System Management', 'set', 'n12scheme', 'Set N12 Scheme', 'mml', '[{\"comment\":\"\",\"display\":\"Scheme\",\"filter\":\"{\\\"0\\\":\\\"http\\\", \\\"1\\\":\\\"https\\\"}\",\"name\":\"scheme\",\"optional\":\"false\",\"type\":\"enum\"}]', 'Inactive'); -INSERT INTO `mml_system` VALUES (902, 'AUSF', 'systemManagement', 'System Management', 'set', 'supirange', 'Set SUPI Range', 'mml', '[{\"comment\":\"\",\"display\":\"SUPI Range\",\"filter\":\"\",\"name\":\"supirange\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); -INSERT INTO `mml_system` VALUES (903, 'AUSF', 'systemManagement', 'System Management', 'reload', '', 'Reload Config', 'mml', 'null', 'Inactive'); -INSERT INTO `mml_system` VALUES (904, 'MME', 'mmeManagement', 'MME Management', 'help', '', 'List MME MML CMD', 'mml', 'null', 'Active'); +INSERT INTO `mml_system` VALUES (833, 'UPF', 'upfManagement', 'UPF Management', 'help', '', 'List UPF MML CMD', 'General', 'null', 'Active'); +INSERT INTO `mml_system` VALUES (834, 'UPF', 'systemManagement', 'System Management', 'set', 'n3 driver', 'Set N3 Driver', 'General', '[{\"comment\":\"\",\"display\":\"Type\",\"filter\":\"\",\"name\":\"type\",\"optional\":\"false\",\"type\":\"int\"},{\"comment\":\"\",\"display\":\"IP address\",\"filter\":\"\",\"name\":\"ip\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"Mask\",\"filter\":\"\",\"name\":\"mask\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"Mac address\",\"filter\":\"\",\"name\":\"mac\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"PCI address\",\"filter\":\"\",\"name\":\"pci\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); +INSERT INTO `mml_system` VALUES (835, 'UPF', 'systemManagement', 'System Management', 'set', 'n4 ip', 'Set N4 IP Address', 'General', '[{\"comment\":\"\",\"display\":\"IP Address\",\"filter\":\"\",\"name\":\"ip\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); +INSERT INTO `mml_system` VALUES (836, 'UPF', 'systemManagement', 'System Management', 'set', 'n6 driver', 'Set N6 Driver', 'General', '[{\"comment\":\"\",\"display\":\"Type\",\"filter\":\"\",\"name\":\"type\",\"optional\":\"false\",\"type\":\"int\"},{\"comment\":\"\",\"display\":\"IP address\",\"filter\":\"\",\"name\":\"ip\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"Mask\",\"filter\":\"\",\"name\":\"mask\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"Mac address\",\"filter\":\"\",\"name\":\"mac\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"PCI address\",\"filter\":\"\",\"name\":\"pci\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); +INSERT INTO `mml_system` VALUES (837, 'UPF', 'systemManagement', 'System Management', 'set', 'n9 driver', 'Set N9 Driver', 'General', '[{\"comment\":\"\",\"display\":\"Type\",\"filter\":\"\",\"name\":\"type\",\"optional\":\"false\",\"type\":\"int\"},{\"comment\":\"\",\"display\":\"IP address\",\"filter\":\"\",\"name\":\"ip\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"Mask\",\"filter\":\"\",\"name\":\"mask\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"Mac address\",\"filter\":\"\",\"name\":\"mac\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"PCI address\",\"filter\":\"\",\"name\":\"pci\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); +INSERT INTO `mml_system` VALUES (838, 'UPF', 'systemManagement', 'System Management', 'set', 'dnn', 'Set DNN', 'General', '[{\"comment\":\"\",\"display\":\"DNN\",\"filter\":\"\",\"name\":\"dnn\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"IP Address\",\"filter\":\"\",\"name\":\"ip\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); +INSERT INTO `mml_system` VALUES (839, 'UPF', 'systemManagement', 'System Management', 'set', 'pfcp', 'Set PFCP', 'General', '[{\"comment\":\"\",\"display\":\"Path\",\"filter\":\"\",\"name\":\"path\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"Local IP Address\",\"filter\":\"\",\"name\":\"local\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"Remote IP Address\",\"filter\":\"\",\"name\":\"remote\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); +INSERT INTO `mml_system` VALUES (840, 'UPF', 'systemManagement', 'System Management', 'set', 'qos', 'Set Qos', 'General', '[{\"comment\":\"\",\"display\":\"Index\",\"filter\":\"\",\"name\":\"index\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"5qi\",\"filter\":\"\",\"name\":\"5qi\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"Priority Level\",\"filter\":\"\",\"name\":\"priority\",\"optional\":\"false\",\"type\":\"int\"},{\"comment\":\"\",\"display\":\"MBR\",\"filter\":\"\",\"name\":\"mbr\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"GBR\",\"filter\":\"\",\"name\":\"gbr\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); +INSERT INTO `mml_system` VALUES (841, 'UPF', 'systemManagement', 'System Management', 'set', 'pccrule', 'Set PCC Rule', 'General', '[{\"comment\":\"\",\"display\":\"Index\",\"filter\":\"0~65535\",\"name\":\"index\",\"optional\":\"false\",\"type\":\"int\"},{\"comment\":\"\",\"display\":\"Precedence\",\"filter\":\"\",\"name\":\"precedence\",\"optional\":\"false\",\"type\":\"int\"},{\"comment\":\"\",\"display\":\"QOS Index\",\"filter\":\"\",\"name\":\"qosindex\",\"optional\":\"false\",\"type\":\"int\"},{\"comment\":\"\",\"display\":\"Filter Direction\",\"filter\":\"{\\\"0\\\":\\\"NA\\\", \\\"1\\\":\\\"Uplink\\\", \\\"2\\\":\\\"Downlink\\\", \\\"3\\\":\\\"Bidirectionallink\\\"}\",\"name\":\"direction\",\"optional\":\"true\",\"type\":\"int\"},{\"comment\":\"\",\"display\":\"Filter\",\"filter\":\"\",\"name\":\"filter\",\"optional\":\"true\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"Application ID\",\"filter\":\"\",\"name\":\"appid\",\"optional\":\"true\",\"type\":\"string\"}]', 'Inactive'); +INSERT INTO `mml_system` VALUES (842, 'UPF', 'systemManagement', 'System Management', 'exec', 'shell', 'Execute Shell Command', 'General', '[{\"comment\":\"\",\"display\":\"CMD\",\"filter\":\"\",\"name\":\"cmd\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); +INSERT INTO `mml_system` VALUES (843, 'UPF', 'systemManagement', 'System Management', 'reload', '', 'Reload Config', 'General', 'null', 'Inactive'); +INSERT INTO `mml_system` VALUES (853, 'SMF', 'smfManagement', 'SMF Management', 'help', '', 'List SMF MML CMD', 'General', 'null', 'Active'); +INSERT INTO `mml_system` VALUES (854, 'SMF', 'systemManagement', 'System Management', 'set', 'n7 server', 'Set N7 Server', 'General', '[{\"comment\":\"\",\"display\":\"Scheme\",\"filter\":\"{\\\"0\\\":\\\"http\\\", \\\"1\\\":\\\"https\\\"}\",\"name\":\"scheme\",\"optional\":\"false\",\"type\":\"enum\"},{\"comment\":\"\",\"display\":\"IP Address\",\"filter\":\"0~64\",\"name\":\"ip\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"Port\",\"filter\":\"0~65535\",\"name\":\"port\",\"optional\":\"false\",\"type\":\"int\"}]', 'Inactive'); +INSERT INTO `mml_system` VALUES (855, 'SMF', 'systemManagement', 'System Management', 'set', 'n7 client', 'Set N7 Client', 'General', '[{\"comment\":\"\",\"display\":\"Scheme\",\"filter\":\"{\\\"0\\\":\\\"http\\\", \\\"1\\\":\\\"https\\\"}\",\"name\":\"scheme\",\"optional\":\"false\",\"type\":\"enum\"},{\"comment\":\"\",\"display\":\"IP Address\",\"filter\":\"0~64\",\"name\":\"ip\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); +INSERT INTO `mml_system` VALUES (856, 'SMF', 'systemManagement', 'System Management', 'set', 'n10 server', 'Set N10 Server', 'General', '[{\"comment\":\"\",\"display\":\"Scheme\",\"filter\":\"{\\\"0\\\":\\\"http\\\", \\\"1\\\":\\\"https\\\"}\",\"name\":\"scheme\",\"optional\":\"false\",\"type\":\"enum\"},{\"comment\":\"\",\"display\":\"IP Address\",\"filter\":\"0~64\",\"name\":\"ip\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"Port\",\"filter\":\"0~65535\",\"name\":\"port\",\"optional\":\"false\",\"type\":\"int\"}]', 'Inactive'); +INSERT INTO `mml_system` VALUES (857, 'SMF', 'systemManagement', 'System Management', 'set', 'n10 client', 'Set N10 Client', 'General', '[{\"comment\":\"\",\"display\":\"Scheme\",\"filter\":\"{\\\"0\\\":\\\"http\\\", \\\"1\\\":\\\"https\\\"}\",\"name\":\"scheme\",\"optional\":\"false\",\"type\":\"enum\"},{\"comment\":\"\",\"display\":\"IP Address\",\"filter\":\"0~64\",\"name\":\"ip\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); +INSERT INTO `mml_system` VALUES (858, 'SMF', 'systemManagement', 'System Management', 'set', 'n11 server', 'Set N11 Server', 'General', '[{\"comment\":\"\",\"display\":\"Scheme\",\"filter\":\"{\\\"0\\\":\\\"http\\\", \\\"1\\\":\\\"https\\\"}\",\"name\":\"scheme\",\"optional\":\"false\",\"type\":\"enum\"},{\"comment\":\"\",\"display\":\"IP Address\",\"filter\":\"0~64\",\"name\":\"ip\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"Port\",\"filter\":\"0~65535\",\"name\":\"port\",\"optional\":\"false\",\"type\":\"int\"}]', 'Inactive'); +INSERT INTO `mml_system` VALUES (859, 'SMF', 'systemManagement', 'System Management', 'set', 'n11 client', 'Set N11 Client', 'General', '[{\"comment\":\"\",\"display\":\"Scheme\",\"filter\":\"{\\\"0\\\":\\\"http\\\", \\\"1\\\":\\\"https\\\"}\",\"name\":\"scheme\",\"optional\":\"false\",\"type\":\"enum\"},{\"comment\":\"\",\"display\":\"IP Address\",\"filter\":\"0~64\",\"name\":\"ip\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); +INSERT INTO `mml_system` VALUES (860, 'SMF', 'systemManagement', 'System Management', 'set', 'dnn', 'Set DNN', 'General', '[{\"comment\":\"\",\"display\":\"Index\",\"filter\":\"\",\"name\":\"index\",\"optional\":\"false\",\"type\":\"int\"},{\"comment\":\"\",\"display\":\"DNN\",\"filter\":\"\",\"name\":\"DNN\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); +INSERT INTO `mml_system` VALUES (862, 'SMF', 'systemManagement', 'System Management', 'set', 'qos', 'Set Qos', 'General', '[{\"comment\":\"\",\"display\":\"Index\",\"filter\":\"\",\"name\":\"index\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"SD\",\"filter\":\"\",\"name\":\"5qi\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"5qipl\",\"filter\":\"\",\"name\":\"5qipl\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"arppl\",\"filter\":\"\",\"name\":\"arppl\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"arppci\",\"filter\":\"\",\"name\":\"arppci\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"arppvi\",\"filter\":\"\",\"name\":\"arppvi\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"mfbrul\",\"filter\":\"\",\"name\":\"mfbrul\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"mfbrdl\",\"filter\":\"\",\"name\":\"mfbrdl\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"gfbrul\",\"filter\":\"\",\"name\":\"gfbrul\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"gfbrdl\",\"filter\":\"\",\"name\":\"gfbrdl\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); +INSERT INTO `mml_system` VALUES (863, 'SMF', 'systemManagement', 'System Management', 'set', 'snssai', 'Set Snssai', 'General', '[{\"comment\":\"\",\"display\":\"Index\",\"filter\":\"\",\"name\":\"index\",\"optional\":\"false\",\"type\":\"string\"},{\"display\":\"sst-sd\",\"filter\":\"\",\"name\":\"sst-sd\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); +INSERT INTO `mml_system` VALUES (864, 'SMF', 'systemManagement', 'System Management', 'release', 'imsi', 'Release IMSI', 'General', '[{\"comment\":\"\",\"display\":\"IMSI\",\"filter\":\"\",\"name\":\"imsi\",\"optional\":\"false\",\"type\":\"string\"},{\"display\":\"PDU Session Id\",\"filter\":\"\",\"name\":\"pduSessId\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); +INSERT INTO `mml_system` VALUES (865, 'SMF', 'systemManagement', 'System Management', 'set', 'urr', 'Set URR', 'General', '[{\"comment\":\"\",\"display\":\"Index\",\"filter\":\"\",\"name\":\"index\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"Quota Volume Tatol\",\"filter\":\"\",\"name\":\"quotavolumetatol\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"Quota Volume UL\",\"filter\":\"\",\"name\":\"quotavolumeul\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"Quota Volume DL\",\"filter\":\"\",\"name\":\"quotavolumedl\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"Quota Time\",\"filter\":\"\",\"name\":\"quotatime\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); +INSERT INTO `mml_system` VALUES (866, 'SMF', 'systemManagement', 'System Management', 'set', 'dpi', 'Set DPI', 'General', '[{\"comment\":\"\",\"display\":\"Flag\",\"filter\":\"{\\\"0\\\":\\\"disable\\\", \\\"1\\\":\\\"enable\\\"}\",\"name\":\"flag\",\"optional\":\"false\",\"type\":\"enum\"},{\"comment\":\"\",\"display\":\"Max Detect Packet Number\",\"filter\":\"\",\"name\":\"max\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); +INSERT INTO `mml_system` VALUES (867, 'SMF', 'systemManagement', 'System Management', 'exec', 'shell', 'Execute Shell Command', 'General', '[{\"comment\":\"\",\"display\":\"CMD\",\"filter\":\"\",\"name\":\"cmd\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); +INSERT INTO `mml_system` VALUES (868, 'SMF', 'systemManagement', 'System Management', 'reload', '', 'Reload Config', 'General', 'null', 'Inactive'); +INSERT INTO `mml_system` VALUES (870, 'IMS', 'imsManagement', 'IMS Management', 'help', '', 'List IMS MML CMD', 'General', 'null', 'Active'); +INSERT INTO `mml_system` VALUES (871, 'N3IWF', 'n3iwfManagement', 'N3IWF Management', 'help', '', 'List N3IWF MML CMD', 'General', 'null', 'Active'); +INSERT INTO `mml_system` VALUES (872, 'NSSF', 'nssfManagement', 'NSSF Management', 'help', '', 'List NSSF MML CMD', 'General', 'null', 'Active'); +INSERT INTO `mml_system` VALUES (873, 'NRF', 'nrfManagement', 'NRF Management', 'help', '', 'List NRF MML CMD', 'General', 'null', 'Active'); +INSERT INTO `mml_system` VALUES (874, 'PCF', 'pcfManagement', 'PCF Management', 'help', '', 'List PCF MML CMD', 'General', 'null', 'Active'); +INSERT INTO `mml_system` VALUES (875, 'AMF', 'subsManagement', 'Subscriber Management', 'list', 'imsi', 'List Online IMSI', 'General', '[{\"comment\":\"\",\"display\":\"IMSI\",\"filter\":\"32\",\"name\":\"imsi\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); +INSERT INTO `mml_system` VALUES (876, 'AMF', 'amfManagement', 'AMF Management', 'help', '', 'List AMF MML CMD', 'General', 'null', 'Active'); +INSERT INTO `mml_system` VALUES (877, 'AMF', 'systemManagement', 'System Management', 'set', 'n8_ip', 'Set N8 IP Address', 'General', '[{\"comment\":\"\",\"display\":\"IP Address\",\"filter\":\"0~64\",\"name\":\"ip\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); +INSERT INTO `mml_system` VALUES (878, 'AMF', 'systemManagement', 'System Management', 'set', 'n11_ip', 'Set N11 IP Address', 'General', '[{\"comment\":\"\",\"display\":\"IP Address\",\"filter\":\"0~64\",\"name\":\"ip\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); +INSERT INTO `mml_system` VALUES (879, 'AMF', 'systemManagement', 'System Management', 'set', 'n12_ip', 'Set N12 IP Address', 'General', '[{\"comment\":\"\",\"display\":\"IP Address\",\"filter\":\"0~64\",\"name\":\"ip\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); +INSERT INTO `mml_system` VALUES (880, 'AMF', 'systemManagement', 'System Management', 'set', 'n2_ip', 'Set N2 IP Address', 'General', '[{\"comment\":\"\",\"display\":\"IP Address\",\"filter\":\"\",\"name\":\"ip\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); +INSERT INTO `mml_system` VALUES (881, 'AMF', 'systemManagement', 'System Management', 'set', 'n2_port', 'Set N2 Port', 'General', '[{\"comment\":\"\",\"display\":\"Port\",\"filter\":\"0~65535\",\"name\":\"port\",\"optional\":\"false\",\"type\":\"int\"}]', 'Inactive'); +INSERT INTO `mml_system` VALUES (882, 'AMF', 'systemManagement', 'System Management', 'set', 'ntpversion', 'Set NTP Version', 'General', '[{\"comment\":\"\",\"display\":\"Version\",\"filter\":\"\",\"name\":\"version\",\"optional\":\"false\",\"type\":\"int\"}]', 'Inactive'); +INSERT INTO `mml_system` VALUES (883, 'AMF', 'systemManagement', 'System Management', 'set', 'ntpmaxdiff', 'Set NTP Max Diff', 'General', '[{\"comment\":\"\",\"display\":\"Max Value(ms)\",\"filter\":\"100~2000\",\"name\":\"value\",\"optional\":\"false\",\"type\":\"int\"}]', 'Inactive'); +INSERT INTO `mml_system` VALUES (884, 'AMF', 'systemManagement', 'System Management', 'set', 'ntpsynctimer', 'Set NTP Sync Timer', 'General', '[{\"comment\":\"\",\"display\":\"Periods(second)\",\"filter\":\"\",\"name\":\"periods\",\"optional\":\"false\",\"type\":\"int\"}]', 'Inactive'); +INSERT INTO `mml_system` VALUES (885, 'AMF', 'systemManagement', 'System Management', 'add', 'slice', 'Add Slice', 'General', '[{\"comment\":\"\",\"display\":\"SST\",\"filter\":\"\",\"name\":\"sst\",\"optional\":\"false\",\"type\":\"string\"},{\"comment\":\"\",\"display\":\"SD\",\"filter\":\"\",\"name\":\"sd\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); +INSERT INTO `mml_system` VALUES (886, 'AMF', 'systemManagement', 'System Management', 'deregister', 'imsi', 'Deregister IMSI', 'General', '[{\"comment\":\"\",\"display\":\"IMSI\",\"filter\":\"\",\"name\":\"IMSI\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); +INSERT INTO `mml_system` VALUES (887, 'AMF', 'systemManagement', 'System Management', 'exec', 'shell', 'Execute Shell Command', 'General', '[{\"comment\":\"\",\"display\":\"CMD\",\"filter\":\"\",\"name\":\"cmd\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); +INSERT INTO `mml_system` VALUES (888, 'AMF', 'systemManagement', 'System Management', 'reload', '', 'Reload Config', 'General', 'null', 'Inactive'); +INSERT INTO `mml_system` VALUES (889, 'UDM', 'udmManagement', 'UDM Management', 'help', '', 'List UDM MML CMD', 'General', 'null', 'Active'); +INSERT INTO `mml_system` VALUES (890, 'UDM', 'systemManagement', 'System Management', 'set', 'n8ip', 'Set N8 IP Address', 'General', '[{\"comment\":\"\",\"display\":\"IP Address\",\"filter\":\"\",\"name\":\"ip\",\"optional\":\"false\",\"type\":\"ipv4\"}]', 'Inactive'); +INSERT INTO `mml_system` VALUES (891, 'UDM', 'systemManagement', 'System Management', 'set', 'n8port', 'Set N8 Port', 'General', '[{\"comment\":\"\",\"display\":\"Port\",\"filter\":\"1~65535\",\"name\":\"port\",\"optional\":\"false\",\"type\":\"int\"}]', 'Inactive'); +INSERT INTO `mml_system` VALUES (892, 'UDM', 'systemManagement', 'System Management', 'set', 'n8scheme', 'Set N8 Scheme', 'General', '[{\"comment\":\"\",\"display\":\"Scheme\",\"filter\":\"{\\\"0\\\":\\\"http\\\", \\\"1\\\":\\\"https\\\"}\",\"name\":\"scheme\",\"optional\":\"false\",\"type\":\"enum\"}]', 'Inactive'); +INSERT INTO `mml_system` VALUES (893, 'UDM', 'systemManagement', 'System Management', 'set', 'n10ip', 'Set N10 IP Address', 'General', '[{\"comment\":\"\",\"display\":\"IP Address\",\"filter\":\"\",\"name\":\"ip\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); +INSERT INTO `mml_system` VALUES (894, 'UDM', 'systemManagement', 'System Management', 'set', 'n10port', 'Set N10 Port', 'General', '[{\"comment\":\"\",\"display\":\"Port\",\"filter\":\"1~65535\",\"name\":\"port\",\"optional\":\"false\",\"type\":\"int\"}]', 'Inactive'); +INSERT INTO `mml_system` VALUES (895, 'UDM', 'systemManagement', 'System Management', 'set', 'n10scheme', 'Set N10 Scheme', 'General', '[{\"comment\":\"\",\"display\":\"Scheme\",\"filter\":\"{\\\"0\\\":\\\"http\\\", \\\"1\\\":\\\"https\\\"}\",\"name\":\"scheme\",\"optional\":\"false\",\"type\":\"enum\"}]', 'Inactive'); +INSERT INTO `mml_system` VALUES (896, 'UDM', 'systemManagement', 'System Management', 'exec', 'shell', 'Execute Shell Command', 'General', '[{\"comment\":\"\",\"display\":\"CMD\",\"filter\":\"\",\"name\":\"cmd\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); +INSERT INTO `mml_system` VALUES (897, 'UDM', 'systemManagement', 'System Management', 'reload', '', 'Reload Config', 'General', 'null', 'Inactive'); +INSERT INTO `mml_system` VALUES (898, 'AUSF', 'ausfManagement', 'AUSF Management', 'help', '', 'List AUSF MML CMD', 'General', 'null', 'Active'); +INSERT INTO `mml_system` VALUES (899, 'AUSF', 'systemManagement', 'System Management', 'set', 'n12ip', 'Set N12 IP Address', 'General', '[{\"comment\":\"\",\"display\":\"IP Address\",\"filter\":\"\",\"name\":\"ip\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); +INSERT INTO `mml_system` VALUES (900, 'AUSF', 'systemManagement', 'System Management', 'set', 'n12port', 'Set N12 Port', 'General', '[{\"comment\":\"\",\"display\":\"Port\",\"filter\":\"1~65535\",\"name\":\"port\",\"optional\":\"false\",\"type\":\"int\"}]', 'Inactive'); +INSERT INTO `mml_system` VALUES (901, 'AUSF', 'systemManagement', 'System Management', 'set', 'n12scheme', 'Set N12 Scheme', 'General', '[{\"comment\":\"\",\"display\":\"Scheme\",\"filter\":\"{\\\"0\\\":\\\"http\\\", \\\"1\\\":\\\"https\\\"}\",\"name\":\"scheme\",\"optional\":\"false\",\"type\":\"enum\"}]', 'Inactive'); +INSERT INTO `mml_system` VALUES (902, 'AUSF', 'systemManagement', 'System Management', 'set', 'supirange', 'Set SUPI Range', 'General', '[{\"comment\":\"\",\"display\":\"SUPI Range\",\"filter\":\"\",\"name\":\"supirange\",\"optional\":\"false\",\"type\":\"string\"}]', 'Inactive'); +INSERT INTO `mml_system` VALUES (903, 'AUSF', 'systemManagement', 'System Management', 'reload', '', 'Reload Config', 'General', 'null', 'Inactive'); +INSERT INTO `mml_system` VALUES (904, 'MME', 'mmeManagement', 'MME Management', 'help', '', 'List MME MML CMD', 'General', 'null', 'Active'); SET FOREIGN_KEY_CHECKS = 1; diff --git a/build/database/std/common/ne_config.sql b/build/database/std/common/ne_config.sql index ec3ae400..d4d6f635 100644 --- a/build/database/std/common/ne_config.sql +++ b/build/database/std/common/ne_config.sql @@ -97,22 +97,22 @@ INSERT INTO `ne_config` VALUES (190, 'SMF', 'localDhcpCfg', 'Local DHCP Config', INSERT INTO `ne_config` VALUES (191, 'SMF', 'dnnselectdhcpserver', 'DNN Select DHCP Server', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"0~65535\",\"name\":\"index\",\"type\":\"int\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Enable\",\"filter\":\"\",\"name\":\"enable\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DNN\",\"filter\":\"1~64\",\"name\":\"dnn\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"e.g. 192.168.1.1\",\"display\":\"DHCP Server IP\",\"filter\":\"\",\"name\":\"dhcpServerAddr\",\"type\":\"string\",\"value\":\"\"}]', 23, '', 1751019165587, 'public'); INSERT INTO `ne_config` VALUES (192, 'SMF', 'offlineChargingConfig', 'Offline Charging Config', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"CDR File Name\",\"filter\":\"1~64\",\"name\":\"cdrFileName\",\"type\":\"string\",\"value\":\"smf.cdr\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"CDR File Path\",\"filter\":\"1~256\",\"name\":\"cdrFilePath\",\"type\":\"string\",\"value\":\"/var/log/smfCdr\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"CDR File Num\",\"filter\":\"1~999999999\",\"name\":\"cdrFileNum\",\"type\":\"int\",\"value\":\"50\"},{\"access\":\"read-write\",\"comment\":\"Megabytes\",\"display\":\"CDR File Size\",\"filter\":\"1~999999\",\"name\":\"cdrFileSize\",\"type\":\"int\",\"value\":\"300\"},{\"access\":\"read-write\",\"comment\":\"Days\",\"display\":\"CDR File Max Age\",\"filter\":\"0~9999\",\"name\":\"cdrFileMaxAge\",\"type\":\"int\",\"value\":\"30\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Free Subscribers CDR Enable\",\"filter\":\"\",\"name\":\"freeSubsCdrEnable\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"Seconds\",\"display\":\"Time Threshold\",\"filter\":\"0~999999999\",\"name\":\"timeThreshold\",\"type\":\"int\",\"value\":\"600\"},{\"access\":\"read-write\",\"comment\":\"Bytes\",\"display\":\"Volume Threshold\",\"filter\":\"0~999999999999999\",\"name\":\"volumeThreshold\",\"type\":\"int\",\"value\":\"0\"}]', 25, '', 1751019165593, 'public'); --- 更新 UDM 配置 20250613 -INSERT INTO `ne_config` VALUES (200, 'UDM', 'system', 'System', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Service IP\",\"filter\":\"\",\"name\":\"serviceIP\",\"type\":\"ipv4\",\"value\":\"172.16.5.140\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Service Port\",\"filter\":\"0~65535\",\"name\":\"servicePort\",\"type\":\"int\",\"value\":\"8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NRF URI\",\"filter\":\"\",\"name\":\"nrfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.180:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"FQDN\",\"filter\":\"\",\"name\":\"fqdn\",\"type\":\"string\",\"value\":\"omc.com\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Priority\",\"filter\":\"0~4095\",\"name\":\"priority\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Capacity\",\"filter\":\"0~65535\",\"name\":\"capacity\",\"type\":\"int\",\"value\":\"4096\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Group ID\",\"filter\":\"\",\"name\":\"groupId\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Supported Plmn1\",\"filter\":\"^\\\\d{5,6}$\",\"name\":\"supportedPlmn1\",\"type\":\"string\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Supported Plmn2\",\"filter\":\"^\\\\d{5,6}$\",\"name\":\"supportedPlmn2\",\"type\":\"string\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Supported Plmn3\",\"filter\":\"^\\\\d{5,6}$\",\"name\":\"supportedPlmn3\",\"type\":\"string\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Supported Plmn4\",\"filter\":\"^\\\\d{5,6}$\",\"name\":\"supportedPlmn4\",\"type\":\"string\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SUPI Ranges\",\"filter\":\"^imsi-\\\\d{15}~imsi-\\\\d{15}$\",\"name\":\"supiRanges\",\"type\":\"regex\",\"value\":\"imsi-001010100080000~imsi-001010100080099\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"GPSI Ranges\",\"filter\":\"^msisdn-\\\\d{2,15}~msisdn-\\\\d{2,15}$\",\"name\":\"gpsiRanges\",\"type\":\"regex\",\"value\":\"msisdn-69072000~msisdn-69072099\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Scheme\",\"filter\":\"{\\\"0\\\":\\\"HTTP\\\", \\\"1\\\":\\\"HTTPS\\\"}\",\"name\":\"scheme\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Redis Link\",\"filter\":\"{\\\"0\\\":\\\"TCP\\\",\\\"1\\\":\\\"SCTP\\\"}\",\"name\":\"redisLink\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Redis Address\",\"filter\":\"\",\"name\":\"redisAddr\",\"type\":\"string\",\"value\":\"172.16.5.140:6379\"}]', 1, '', 1749815867447, 'public'); -INSERT INTO `ne_config` VALUES (201, 'UDM', 'subsUEAmbr', 'Subs UE AMBR', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,32}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_ambr\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Uplink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"uplink\",\"type\":\"regex\",\"value\":\"1 Gbps\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Downlink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"downlink\",\"type\":\"regex\",\"value\":\"2 Gbps\"}]', 5, '', 1749815867466, 'public'); -INSERT INTO `ne_config` VALUES (202, 'UDM', 'subsNssais', 'Subs NSSAIs', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,32}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_nssai\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Supported Features\",\"filter\":\"^[0-9a-fA-F]{8}$\",\"name\":\"supportedFeatures\",\"type\":\"regex\",\"value\":\"00000001\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Default Single NSSAIs\",\"filter\":\"\",\"name\":\"defaultSingleNSSAIs\",\"type\":\"string\",\"value\":\"1-000001\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Single NSSAIs\",\"filter\":\"\",\"name\":\"singleNssais\",\"type\":\"string\",\"value\":\"1-000002\"}]', 7, '', 1749815867471, 'public'); -INSERT INTO `ne_config` VALUES (203, 'UDM', 'forbiddenAreas', 'Forbidden Areas', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,32}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_ambr\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"TACs\",\"filter\":\"\",\"name\":\"tacs\",\"type\":\"string\",\"value\":\"123\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Area Codes\",\"filter\":\"\",\"name\":\"areaCodes\",\"type\":\"string\",\"value\":\"123456\"}]', 9, '', 1749815867476, 'public'); -INSERT INTO `ne_config` VALUES (204, 'UDM', 'serviceAreaRestriction', 'Service Area Restriction', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,32}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_ambr\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Restriction Type\",\"filter\":\"{\\\"0\\\":\\\"Allowed Areas\\\", \\\"1\\\":\\\"Not Allowed Areas\\\"}\",\"name\":\"restrictionType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"TACs\",\"filter\":\"\",\"name\":\"tacs\",\"type\":\"string\",\"value\":\"123\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Area Codes\",\"filter\":\"\",\"name\":\"areaCodes\",\"type\":\"string\",\"value\":\"123456\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max TAs\",\"filter\":\"^\\\\d{1,2}$\",\"name\":\"maxTAs\",\"type\":\"int\",\"value\":\"1\"}]', 11, '', 1749815867480, 'public'); -INSERT INTO `ne_config` VALUES (205, 'UDM', 'smfSelection', 'Subs SMF Selection', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,32}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_snssai\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SNSSAI\",\"filter\":\"^\\\\d{1,3}[A-Fa-f0-9]{6}$\",\"name\":\"snssai\",\"type\":\"string\",\"value\":\"1-000001\"},{\"access\":\"read-only\",\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~4\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DNN\",\"filter\":\"^.{1,32}$\",\"name\":\"dnn\",\"type\":\"string\",\"value\":\"internet\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Default DNN Indicator\",\"filter\":\"false;true;\",\"name\":\"defaultDnnInd\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"LBO Roaming Allowed\",\"filter\":\"false;true;\",\"name\":\"lboRoamingAllowed\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Interworking EPS Indicator\",\"filter\":\"false;true;\",\"name\":\"iwkEpsInd\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"LADN Indicator\",\"filter\":\"false;true;\",\"name\":\"ladnIndicator\",\"type\":\"bool\",\"value\":\"false\"}],\"comment\":\"\",\"display\":\"DNN List\",\"filter\":\"1~4\",\"name\":\"dnnList\",\"type\":\"int\",\"value\":\"1\"}]', 13, '', 1749815867486, 'public'); -INSERT INTO `ne_config` VALUES (206, 'UDM', 'dnn', 'DNN Conf', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,32}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_nssai\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Default PDU Session Type\",\"filter\":\"{\\\"0\\\":\\\"IPv4\\\",\\\"1\\\":\\\"IPv6\\\",\\\"2\\\":\\\"IPv4v6\\\",\\\"3\\\":\\\"Ethernet\\\",\\\"4\\\":\\\"Unstruction\\\"}\",\"name\":\"defaultPDUSessionType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Allowed PDU Session Types\",\"filter\":\"{\\\"0\\\":\\\"IPv4\\\",\\\"1\\\":\\\"IPv6\\\",\\\"2\\\":\\\"IPv4v6\\\",\\\"3\\\":\\\"Ethernet\\\",\\\"4\\\":\\\"Unstruction\\\",\\\"5\\\":\\\"IPv4 \\u0026 IPv6\\\",\\\"6\\\":\\\"IPv4 \\u0026 IPv4v6\\\",\\\"7\\\":\\\"IPv6 \\u0026 IPv4v6\\\",\\\"8\\\":\\\"IPv4 \\u0026 IPv6 \\u0026 IPv4v6\\\"}\",\"name\":\"allowedPDUSessionTypes\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"5QI\",\"filter\":\"0~255\",\"name\":\"5qi\",\"type\":\"int\",\"value\":\"9\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Priority Level\",\"filter\":\"1~127\",\"name\":\"priorityLevel\",\"type\":\"int\",\"value\":\"9\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Default SSC Mode\",\"filter\":\"{\\\"0\\\":\\\"SSC Mode1\\\",\\\"1\\\":\\\"SSC Mode2\\\",\\\"2\\\":\\\"SSC Mode3\\\"}\",\"name\":\"defaultSSCmode\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Allowed SSC Modes\",\"filter\":\"{\\\"0\\\":\\\"SSC Mode1\\\",\\\"1\\\":\\\"SSC Mode2\\\",\\\"2\\\":\\\"SSC Mode3\\\",\\\"3\\\":\\\"SSC Mode1 \\u0026 SSC Mode2\\\",\\\"4\\\":\\\"SSC Mode1 \\u0026 SSC Mode3\\\",\\\"5\\\":\\\"SSC Mode2 \\u0026 SSC Mode3\\\",\\\"6\\\":\\\"SSC Mode1 \\u0026 SSC Mode2 \\u0026 SSC Mode3\\\"}\",\"name\":\"allowedSSCmodes\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Interworking EPS Indicator\",\"filter\":\"\",\"name\":\"interworkingEPSIndicator\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"LADN Indicator\",\"filter\":\"\",\"name\":\"ladnIndicator\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Charging Characteristics\",\"filter\":\"4~4\",\"name\":\"chargingCharacteristics\",\"type\":\"string\",\"value\":\"0001\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Subscribed Session AMBR Uplink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"subscribedSessionAmbrUL\",\"type\":\"regex\",\"value\":\"1 Gbps\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Subscribed Session AMBR Downlink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"subscribedSessionAmbrDL\",\"type\":\"regex\",\"value\":\"2 Gbps\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Static IP Address\",\"filter\":\"\",\"name\":\"staticIPAddress\",\"type\":\"ipv4\",\"value\":\"192.168.1.100\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"User Plane Integrity\",\"filter\":\"{\\\"0\\\":\\\"Null\\\",\\\"1\\\":\\\"Required\\\",\\\"2\\\":\\\"Preferred\\\",\\\"3\\\":\\\"Not Needed\\\"}\",\"name\":\"userPlaneIntegrity\",\"type\":\"enum\",\"value\":\"3\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"User Plane Confidentiality\",\"filter\":\"{\\\"0\\\":\\\"Null\\\",\\\"1\\\":\\\"Required\\\",\\\"2\\\":\\\"Preferred\\\",\\\"3\\\":\\\"Not Needed\\\"}\",\"name\":\"userPlaneConfidentiality\",\"type\":\"enum\",\"value\":\"3\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Priority Level\",\"filter\":\"0~255\",\"name\":\"arpPriorityLevel\",\"type\":\"int\",\"value\":\"6\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Preempt Capability\",\"filter\":\"{\\\"0\\\":\\\"Not Preempt\\\",\\\"1\\\":\\\"May Preempt\\\"}\",\"name\":\"arpPreemptCap\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Preempt Vulnerability\",\"filter\":\"{\\\"0\\\":\\\"Not Preemptable\\\",\\\"1\\\":\\\"Preemptable\\\"}\",\"name\":\"arpPreemptVuln\",\"type\":\"enum\",\"value\":\"0\"}]', 15, '', 1749815867491, 'public'); -INSERT INTO `ne_config` VALUES (207, 'UDM', 'epsTemplate', 'EPS User Template', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{0,31}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_eps\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AMBR Uplink\",\"filter\":\"0~4294967295\",\"name\":\"ambrUplink\",\"type\":\"int\",\"value\":\"100000000\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AMBR Downlink\",\"filter\":\"0~4294967295\",\"name\":\"ambrDownlink\",\"type\":\"int\",\"value\":\"200000000\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"APN OI Replacement\",\"filter\":\"^.{0,31}$\",\"name\":\"apnOIReplacement\",\"type\":\"string\",\"value\":\"money\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"RFSP\",\"filter\":\"\",\"name\":\"rfsp\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"RAU TAU Timer\",\"filter\":\"\",\"name\":\"rauTauTimer\",\"type\":\"int\",\"value\":\"120\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Charging Characteristic\",\"filter\":\"4~4\",\"name\":\"chargingCharacteristic\",\"type\":\"string\",\"value\":\"0001\"}]', 17, '', 1749815867496, 'public'); -INSERT INTO `ne_config` VALUES (208, 'UDM', 'epsApn', 'EPS APN', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DNN\",\"filter\":\"^.{0,127}$\",\"name\":\"dnn\",\"type\":\"string\",\"value\":\"internet\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PDN Type\",\"filter\":\"{\\\"0\\\":\\\"IPv4\\\",\\\"1\\\":\\\"IPv6\\\",\\\"2\\\":\\\"IPv4v6\\\",\\\"3\\\":\\\"IPv4 or IPv6\\\"}\",\"name\":\"pdnType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"QCI\",\"filter\":\"1~255\",\"name\":\"qci\",\"type\":\"int\",\"value\":\"9\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Priority\",\"filter\":\"1~127\",\"name\":\"arpPriorityLevel\",\"type\":\"int\",\"value\":\"8\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Preemption Capability\",\"filter\":\"{\\\"0\\\":\\\"Not Preempt\\\",\\\"1\\\":\\\"May Preempt\\\"}\",\"name\":\"arpPreemptCap\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Preemption Vulnerability\",\"filter\":\"{\\\"0\\\":\\\"Not Preemptable\\\",\\\"1\\\":\\\"Preemptable\\\"}\",\"name\":\"arpPreemptVuln\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Context Identifier\",\"filter\":\"\",\"name\":\"contextIdentifier\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"VPLMN Dynamic Address Allowed\",\"filter\":\"false;true;\",\"name\":\"vplmnDynamicAddressAllowed\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PDN GW Allocation Type\",\"filter\":\"{\\\"0\\\":\\\"Static\\\",\\\"1\\\":\\\"Dynamic\\\"}\",\"name\":\"pdnGWAllocationType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AMBR Uplink\",\"filter\":\"0~4294967295\",\"name\":\"ambrUplink\",\"type\":\"int\",\"value\":\"100000000\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AMBR Downlink\",\"filter\":\"0~4294967295\",\"name\":\"ambrDownlink\",\"type\":\"int\",\"value\":\"200000000\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Charging Characteristic\",\"filter\":\"4~4\",\"name\":\"chargingCharacteristic\",\"type\":\"string\",\"value\":\"0001\"}]', 19, '', 1749815867501, 'public'); -INSERT INTO `ne_config` VALUES (209, 'UDM', 'applicationServer', 'Application Server', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AS Name\",\"filter\":\"^.{1,31}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"mmtel_as\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Default Handling\",\"filter\":\"{\\\"0\\\":\\\"Session Continued\\\",\\\"1\\\":\\\"Session Terminated\\\"}\",\"name\":\"defaultHandling\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Server Name\",\"filter\":\"^.{1,127}$\",\"name\":\"serverName\",\"type\":\"string\",\"value\":\"sip:192.168.8.26:7060\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Diameter Address\",\"filter\":\"^.{1,127}$\",\"name\":\"diameterAddress\",\"type\":\"string\",\"value\":\"mmtel.ims.mnc001.mcc001.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Rep Data Size Limit\",\"filter\":\"0~65535\",\"name\":\"repDataSizeLimit\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Include Register Request\",\"filter\":\"false;true;\",\"name\":\"includeRegisterRequest\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Include Register Response\",\"filter\":\"false;true;\",\"name\":\"includeRegisterResponse\",\"type\":\"bool\",\"value\":\"false\"}]', 21, '', 1749815867506, 'public'); -INSERT INTO `ne_config` VALUES (210, 'UDM', 'scscfSet', 'SCSCF Set', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~8\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,31}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"mmtel_as\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Priority\",\"filter\":\"\",\"name\":\"priority\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Server Name\",\"filter\":\"^.{1,127}$\",\"name\":\"serverName\",\"type\":\"string\",\"value\":\"sip:scscf.ims.mnc001.mcc001.3gppnetwork.org:6060\"}]', 23, '', 1749815867511, 'public'); -INSERT INTO `ne_config` VALUES (211, 'UDM', 'triggerPoint', 'Trigger Point', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,32}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_snssai\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Condition Type CNF\",\"filter\":\"0~1\",\"name\":\"conditionTypeCNF\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-only\",\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~4\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Enable\",\"filter\":\"\",\"name\":\"enable\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Condition Negated\",\"filter\":\"0~1\",\"name\":\"conditionNegated\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Group\",\"filter\":\"0~4096\",\"name\":\"group\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Method\",\"filter\":\"^.{0,32}$\",\"name\":\"method\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SIP Header\",\"filter\":\"^.{0,64}$\",\"name\":\"sipHeader\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SIP Content\",\"filter\":\"^.{0,64}$\",\"name\":\"sipContent\",\"type\":\"string\",\"value\":\"\"}],\"comment\":\"\",\"display\":\"SPT List\",\"filter\":\"1~4\",\"name\":\"sptList\",\"type\":\"int\",\"value\":\"1\"}]', 25, '', 1749815867516, 'public'); -INSERT INTO `ne_config` VALUES (212, 'UDM', 's6aServer', 'S6a Server', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Enable\",\"filter\":\"false;true;\",\"name\":\"enable\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Link Type\",\"filter\":\"{\\\"0\\\":\\\"TCP\\\",\\\"1\\\":\\\"SCTP\\\"}\",\"name\":\"netType\",\"type\":\"enum\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Address\",\"filter\":\"\",\"name\":\"addr\",\"type\":\"string\",\"value\":\"172.16.5.140:3868\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Host\",\"filter\":\"^.{1,127}$\",\"name\":\"host\",\"type\":\"string\",\"value\":\"hss.ims.mnc001.mcc001.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Realm\",\"filter\":\"^.{1,127}$\",\"name\":\"realm\",\"type\":\"string\",\"value\":\"ims.mnc001.mcc001.3gppnetwork.org\"}]', 27, '', 1749815867521, 'public'); -INSERT INTO `ne_config` VALUES (213, 'UDM', 'cxServer', 'Cx Server', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Enable\",\"filter\":\"false;true;\",\"name\":\"enable\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Link Type\",\"filter\":\"{\\\"0\\\":\\\"TCP\\\",\\\"1\\\":\\\"SCTP\\\"}\",\"name\":\"netType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Address\",\"filter\":\"\",\"name\":\"addr\",\"type\":\"string\",\"value\":\"172.16.5.140:3868\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Host\",\"filter\":\"^.{1,127}$\",\"name\":\"host\",\"type\":\"string\",\"value\":\"hss.ims.mnc001.mcc001.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Realm\",\"filter\":\"^.{1,127}$\",\"name\":\"realm\",\"type\":\"string\",\"value\":\"ims.mnc001.mcc001.3gppnetwork.org\"}]', 29, '', 1749815867527, 'public'); -INSERT INTO `ne_config` VALUES (214, 'UDM', 'ausfCfg', 'AUSF Config', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AUSF enable\",\"filter\":\"\",\"name\":\"enable\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"EAP-Aka SupiOrImsi Prefix\",\"filter\":\"\",\"name\":\"eapAkaSupiImsiPrefix\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AUSF FQDN\",\"filter\":\"0~128\",\"name\":\"ausfFqdn\",\"type\":\"string\",\"value\":\"ausf.5gc.com\"}]', 3, '', 1749815867461, 'public'); +-- 更新 UDM 配置 20250715 +INSERT INTO `ne_config` VALUES (200, 'UDM', 'system', 'System', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Service IP\",\"filter\":\"\",\"name\":\"serviceIP\",\"type\":\"ipv4\",\"value\":\"172.16.5.140\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Service Port\",\"filter\":\"0~65535\",\"name\":\"servicePort\",\"type\":\"int\",\"value\":\"8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NRF URI\",\"filter\":\"\",\"name\":\"nrfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.180:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"FQDN\",\"filter\":\"\",\"name\":\"fqdn\",\"type\":\"string\",\"value\":\"omc.com\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Priority\",\"filter\":\"0~4095\",\"name\":\"priority\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Capacity\",\"filter\":\"0~65535\",\"name\":\"capacity\",\"type\":\"int\",\"value\":\"4096\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Group ID\",\"filter\":\"\",\"name\":\"groupId\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Supported Plmn1\",\"filter\":\"^\\\\d{5,6}$\",\"name\":\"supportedPlmn1\",\"type\":\"string\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Supported Plmn2\",\"filter\":\"^\\\\d{5,6}$\",\"name\":\"supportedPlmn2\",\"type\":\"string\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Supported Plmn3\",\"filter\":\"^\\\\d{5,6}$\",\"name\":\"supportedPlmn3\",\"type\":\"string\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Supported Plmn4\",\"filter\":\"^\\\\d{5,6}$\",\"name\":\"supportedPlmn4\",\"type\":\"string\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SUPI Ranges\",\"filter\":\"^imsi-\\\\d{15}~imsi-\\\\d{15}$\",\"name\":\"supiRanges\",\"type\":\"regex\",\"value\":\"imsi-001010100080000~imsi-001010100080099\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"GPSI Ranges\",\"filter\":\"^msisdn-\\\\d{2,15}~msisdn-\\\\d{2,15}$\",\"name\":\"gpsiRanges\",\"type\":\"regex\",\"value\":\"msisdn-69072000~msisdn-69072099\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Scheme\",\"filter\":\"{\\\"0\\\":\\\"HTTP\\\", \\\"1\\\":\\\"HTTPS\\\"}\",\"name\":\"scheme\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Redis Link\",\"filter\":\"{\\\"0\\\":\\\"TCP\\\",\\\"1\\\":\\\"SCTP\\\"}\",\"name\":\"redisLink\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Redis Address\",\"filter\":\"\",\"name\":\"redisAddr\",\"type\":\"string\",\"value\":\"172.16.5.140:6379\"}]', 1, '', 1752577177260, 'public'); +INSERT INTO `ne_config` VALUES (201, 'UDM', 'ausfCfg', 'AUSF Config', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AUSF enable\",\"filter\":\"\",\"name\":\"enable\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"EAP-Aka SupiOrImsi Prefix\",\"filter\":\"\",\"name\":\"eapAkaSupiImsiPrefix\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AUSF FQDN\",\"filter\":\"0~128\",\"name\":\"ausfFqdn\",\"type\":\"string\",\"value\":\"ausf.5gc.com\"}]', 3, '', 1752577177350, 'public'); +INSERT INTO `ne_config` VALUES (202, 'UDM', 'subsUEAmbr', 'Subs UE AMBR', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,32}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_ambr\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Uplink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"uplink\",\"type\":\"regex\",\"value\":\"1 Gbps\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Downlink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"downlink\",\"type\":\"regex\",\"value\":\"2 Gbps\"}]', 5, '', 1752577177371, 'public'); +INSERT INTO `ne_config` VALUES (203, 'UDM', 'subsNssais', 'Subs NSSAIs', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,32}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_nssai\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Supported Features\",\"filter\":\"^[0-9a-fA-F]{8}$\",\"name\":\"supportedFeatures\",\"type\":\"regex\",\"value\":\"00000001\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Default Single NSSAIs\",\"filter\":\"\",\"name\":\"defaultSingleNSSAIs\",\"type\":\"string\",\"value\":\"1-000001\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Single NSSAIs\",\"filter\":\"\",\"name\":\"singleNssais\",\"type\":\"string\",\"value\":\"1-000002\"}]', 7, '', 1752577177376, 'public'); +INSERT INTO `ne_config` VALUES (204, 'UDM', 'forbiddenAreas', 'Forbidden Areas', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,32}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_ambr\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"TACs\",\"filter\":\"\",\"name\":\"tacs\",\"type\":\"string\",\"value\":\"123\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Area Codes\",\"filter\":\"\",\"name\":\"areaCodes\",\"type\":\"string\",\"value\":\"123456\"}]', 9, '', 1752577177380, 'public'); +INSERT INTO `ne_config` VALUES (205, 'UDM', 'serviceAreaRestriction', 'Service Area Restriction', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,32}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"lab_sar\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Restriction Type\",\"filter\":\"{\\\"0\\\":\\\"Allowed Areas\\\", \\\"1\\\":\\\"Not Allowed Areas\\\"}\",\"name\":\"restrictionType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"TACs\",\"filter\":\"\",\"name\":\"tacs\",\"type\":\"string\",\"value\":\"123\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Area Codes\",\"filter\":\"\",\"name\":\"areaCodes\",\"type\":\"string\",\"value\":\"123456\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max TAs\",\"filter\":\"^\\\\d{1,2}$\",\"name\":\"maxTAs\",\"type\":\"int\",\"value\":\"1\"}]', 11, '', 1752577177385, 'public'); +INSERT INTO `ne_config` VALUES (206, 'UDM', 'smfSelection', 'Subs SMF Selection', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,32}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_snssai\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SNSSAI\",\"filter\":\"^\\\\d{1,3}[A-Fa-f0-9]{6}$\",\"name\":\"snssai\",\"type\":\"string\",\"value\":\"1-000001\"},{\"access\":\"read-only\",\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~4\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DNN\",\"filter\":\"^.{1,32}$\",\"name\":\"dnn\",\"type\":\"string\",\"value\":\"internet\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Default DNN Indicator\",\"filter\":\"false;true;\",\"name\":\"defaultDnnInd\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"LBO Roaming Allowed\",\"filter\":\"false;true;\",\"name\":\"lboRoamingAllowed\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Interworking EPS Indicator\",\"filter\":\"false;true;\",\"name\":\"iwkEpsInd\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"LADN Indicator\",\"filter\":\"false;true;\",\"name\":\"ladnIndicator\",\"type\":\"bool\",\"value\":\"false\"}],\"comment\":\"\",\"display\":\"DNN List\",\"filter\":\"1~4\",\"name\":\"dnnList\",\"type\":\"int\",\"value\":\"1\"}]', 13, '', 1752577177391, 'public'); +INSERT INTO `ne_config` VALUES (207, 'UDM', 'dnn', 'DNN Conf', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,32}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_nssai\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Default PDU Session Type\",\"filter\":\"{\\\"0\\\":\\\"IPv4\\\",\\\"1\\\":\\\"IPv6\\\",\\\"2\\\":\\\"IPv4v6\\\",\\\"3\\\":\\\"Ethernet\\\",\\\"4\\\":\\\"Unstruction\\\"}\",\"name\":\"defaultPDUSessionType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Allowed PDU Session Types\",\"filter\":\"{\\\"0\\\":\\\"IPv4\\\",\\\"1\\\":\\\"IPv6\\\",\\\"2\\\":\\\"IPv4v6\\\",\\\"3\\\":\\\"Ethernet\\\",\\\"4\\\":\\\"Unstruction\\\",\\\"5\\\":\\\"IPv4 \\u0026 IPv6\\\",\\\"6\\\":\\\"IPv4 \\u0026 IPv4v6\\\",\\\"7\\\":\\\"IPv6 \\u0026 IPv4v6\\\",\\\"8\\\":\\\"IPv4 \\u0026 IPv6 \\u0026 IPv4v6\\\"}\",\"name\":\"allowedPDUSessionTypes\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"5QI\",\"filter\":\"0~255\",\"name\":\"5qi\",\"type\":\"int\",\"value\":\"9\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Priority Level\",\"filter\":\"1~127\",\"name\":\"priorityLevel\",\"type\":\"int\",\"value\":\"9\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Default SSC Mode\",\"filter\":\"{\\\"0\\\":\\\"SSC Mode1\\\",\\\"1\\\":\\\"SSC Mode2\\\",\\\"2\\\":\\\"SSC Mode3\\\"}\",\"name\":\"defaultSSCmode\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Allowed SSC Modes\",\"filter\":\"{\\\"0\\\":\\\"SSC Mode1\\\",\\\"1\\\":\\\"SSC Mode2\\\",\\\"2\\\":\\\"SSC Mode3\\\",\\\"3\\\":\\\"SSC Mode1 \\u0026 SSC Mode2\\\",\\\"4\\\":\\\"SSC Mode1 \\u0026 SSC Mode3\\\",\\\"5\\\":\\\"SSC Mode2 \\u0026 SSC Mode3\\\",\\\"6\\\":\\\"SSC Mode1 \\u0026 SSC Mode2 \\u0026 SSC Mode3\\\"}\",\"name\":\"allowedSSCmodes\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Interworking EPS Indicator\",\"filter\":\"\",\"name\":\"interworkingEPSIndicator\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"LADN Indicator\",\"filter\":\"\",\"name\":\"ladnIndicator\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Charging Characteristics\",\"filter\":\"4~4\",\"name\":\"chargingCharacteristics\",\"type\":\"string\",\"value\":\"0001\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Subscribed Session AMBR Uplink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"subscribedSessionAmbrUL\",\"type\":\"regex\",\"value\":\"1 Gbps\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Subscribed Session AMBR Downlink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"subscribedSessionAmbrDL\",\"type\":\"regex\",\"value\":\"2 Gbps\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Static IP Address\",\"filter\":\"\",\"name\":\"staticIPAddress\",\"type\":\"ipv4\",\"value\":\"192.168.1.100\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"User Plane Integrity\",\"filter\":\"{\\\"0\\\":\\\"Null\\\",\\\"1\\\":\\\"Required\\\",\\\"2\\\":\\\"Preferred\\\",\\\"3\\\":\\\"Not Needed\\\"}\",\"name\":\"userPlaneIntegrity\",\"type\":\"enum\",\"value\":\"3\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"User Plane Confidentiality\",\"filter\":\"{\\\"0\\\":\\\"Null\\\",\\\"1\\\":\\\"Required\\\",\\\"2\\\":\\\"Preferred\\\",\\\"3\\\":\\\"Not Needed\\\"}\",\"name\":\"userPlaneConfidentiality\",\"type\":\"enum\",\"value\":\"3\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Priority Level\",\"filter\":\"0~255\",\"name\":\"arpPriorityLevel\",\"type\":\"int\",\"value\":\"6\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Preempt Capability\",\"filter\":\"{\\\"0\\\":\\\"Not Preempt\\\",\\\"1\\\":\\\"May Preempt\\\"}\",\"name\":\"arpPreemptCap\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Preempt Vulnerability\",\"filter\":\"{\\\"0\\\":\\\"Not Preemptable\\\",\\\"1\\\":\\\"Preemptable\\\"}\",\"name\":\"arpPreemptVuln\",\"type\":\"enum\",\"value\":\"0\"}]', 15, '', 1752577177395, 'public'); +INSERT INTO `ne_config` VALUES (208, 'UDM', 'epsTemplate', 'EPS User Template', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{0,31}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_eps\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AMBR Uplink\",\"filter\":\"0~4294967295\",\"name\":\"ambrUplink\",\"type\":\"int\",\"value\":\"100000000\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AMBR Downlink\",\"filter\":\"0~4294967295\",\"name\":\"ambrDownlink\",\"type\":\"int\",\"value\":\"200000000\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"APN OI Replacement\",\"filter\":\"^.{0,31}$\",\"name\":\"apnOIReplacement\",\"type\":\"string\",\"value\":\"money\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"RFSP\",\"filter\":\"\",\"name\":\"rfsp\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"RAU TAU Timer\",\"filter\":\"\",\"name\":\"rauTauTimer\",\"type\":\"int\",\"value\":\"120\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Charging Characteristic\",\"filter\":\"4~4\",\"name\":\"chargingCharacteristic\",\"type\":\"string\",\"value\":\"0001\"}]', 17, '', 1752577177401, 'public'); +INSERT INTO `ne_config` VALUES (209, 'UDM', 'epsApn', 'EPS APN', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DNN\",\"filter\":\"^.{0,127}$\",\"name\":\"dnn\",\"type\":\"string\",\"value\":\"internet\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PDN Type\",\"filter\":\"{\\\"0\\\":\\\"IPv4\\\",\\\"1\\\":\\\"IPv6\\\",\\\"2\\\":\\\"IPv4v6\\\",\\\"3\\\":\\\"IPv4 or IPv6\\\"}\",\"name\":\"pdnType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"QCI\",\"filter\":\"1~255\",\"name\":\"qci\",\"type\":\"int\",\"value\":\"9\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Priority\",\"filter\":\"1~127\",\"name\":\"arpPriorityLevel\",\"type\":\"int\",\"value\":\"8\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Preemption Capability\",\"filter\":\"{\\\"0\\\":\\\"Not Preempt\\\",\\\"1\\\":\\\"May Preempt\\\"}\",\"name\":\"arpPreemptCap\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Preemption Vulnerability\",\"filter\":\"{\\\"0\\\":\\\"Not Preemptable\\\",\\\"1\\\":\\\"Preemptable\\\"}\",\"name\":\"arpPreemptVuln\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Context Identifier\",\"filter\":\"\",\"name\":\"contextIdentifier\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"VPLMN Dynamic Address Allowed\",\"filter\":\"false;true;\",\"name\":\"vplmnDynamicAddressAllowed\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PDN GW Allocation Type\",\"filter\":\"{\\\"0\\\":\\\"Static\\\",\\\"1\\\":\\\"Dynamic\\\"}\",\"name\":\"pdnGWAllocationType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AMBR Uplink\",\"filter\":\"0~4294967295\",\"name\":\"ambrUplink\",\"type\":\"int\",\"value\":\"100000000\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AMBR Downlink\",\"filter\":\"0~4294967295\",\"name\":\"ambrDownlink\",\"type\":\"int\",\"value\":\"200000000\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Charging Characteristic\",\"filter\":\"4~4\",\"name\":\"chargingCharacteristic\",\"type\":\"string\",\"value\":\"0001\"}]', 19, '', 1752577177405, 'public'); +INSERT INTO `ne_config` VALUES (210, 'UDM', 'applicationServer', 'Application Server', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AS Name\",\"filter\":\"^.{1,31}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"mmtel_as\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Default Handling\",\"filter\":\"{\\\"0\\\":\\\"Session Continued\\\",\\\"1\\\":\\\"Session Terminated\\\"}\",\"name\":\"defaultHandling\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Server Name\",\"filter\":\"^.{1,127}$\",\"name\":\"serverName\",\"type\":\"string\",\"value\":\"sip:192.168.8.26:7060\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Diameter Address\",\"filter\":\"^.{1,127}$\",\"name\":\"diameterAddress\",\"type\":\"string\",\"value\":\"mmtel.ims.mnc001.mcc001.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Rep Data Size Limit\",\"filter\":\"0~65535\",\"name\":\"repDataSizeLimit\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Include Register Request\",\"filter\":\"false;true;\",\"name\":\"includeRegisterRequest\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Include Register Response\",\"filter\":\"false;true;\",\"name\":\"includeRegisterResponse\",\"type\":\"bool\",\"value\":\"false\"}]', 21, '', 1752577177410, 'public'); +INSERT INTO `ne_config` VALUES (211, 'UDM', 'scscfSet', 'SCSCF Set', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~8\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,31}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"mmtel_as\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Priority\",\"filter\":\"\",\"name\":\"priority\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Server Name\",\"filter\":\"^.{1,127}$\",\"name\":\"serverName\",\"type\":\"string\",\"value\":\"sip:scscf.ims.mnc001.mcc001.3gppnetwork.org:6060\"}]', 23, '', 1752577177415, 'public'); +INSERT INTO `ne_config` VALUES (212, 'UDM', 'triggerPoint', 'Trigger Point', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,32}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_snssai\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Condition Type CNF\",\"filter\":\"0~1\",\"name\":\"conditionTypeCNF\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-only\",\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~4\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Enable\",\"filter\":\"\",\"name\":\"enable\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Condition Negated\",\"filter\":\"0~1\",\"name\":\"conditionNegated\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Group\",\"filter\":\"0~4096\",\"name\":\"group\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Method\",\"filter\":\"^.{0,32}$\",\"name\":\"method\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SIP Header\",\"filter\":\"^.{0,64}$\",\"name\":\"sipHeader\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SIP Content\",\"filter\":\"^.{0,64}$\",\"name\":\"sipContent\",\"type\":\"string\",\"value\":\"\"}],\"comment\":\"\",\"display\":\"SPT List\",\"filter\":\"1~4\",\"name\":\"sptList\",\"type\":\"int\",\"value\":\"1\"}]', 25, '', 1752577177419, 'public'); +INSERT INTO `ne_config` VALUES (213, 'UDM', 's6aServer', 'S6a Server', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Enable\",\"filter\":\"false;true;\",\"name\":\"enable\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Link Type\",\"filter\":\"{\\\"0\\\":\\\"TCP\\\",\\\"1\\\":\\\"SCTP\\\"}\",\"name\":\"netType\",\"type\":\"enum\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Address\",\"filter\":\"\",\"name\":\"addr\",\"type\":\"string\",\"value\":\"172.16.5.140:3868\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Host\",\"filter\":\"^.{1,127}$\",\"name\":\"host\",\"type\":\"string\",\"value\":\"hss.ims.mnc001.mcc001.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Realm\",\"filter\":\"^.{1,127}$\",\"name\":\"realm\",\"type\":\"string\",\"value\":\"ims.mnc001.mcc001.3gppnetwork.org\"}]', 27, '', 1752577177423, 'public'); +INSERT INTO `ne_config` VALUES (214, 'UDM', 'cxServer', 'Cx Server', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Enable\",\"filter\":\"false;true;\",\"name\":\"enable\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Link Type\",\"filter\":\"{\\\"0\\\":\\\"TCP\\\",\\\"1\\\":\\\"SCTP\\\"}\",\"name\":\"netType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Address\",\"filter\":\"\",\"name\":\"addr\",\"type\":\"string\",\"value\":\"172.16.5.140:3868\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Host\",\"filter\":\"^.{1,127}$\",\"name\":\"host\",\"type\":\"string\",\"value\":\"hss.ims.mnc001.mcc001.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Realm\",\"filter\":\"^.{1,127}$\",\"name\":\"realm\",\"type\":\"string\",\"value\":\"ims.mnc001.mcc001.3gppnetwork.org\"}]', 29, '', 1752577177427, 'public'); -- 更新 UPF 配置 20250320 INSERT INTO `ne_config` VALUES (220, 'UPF', 'general', 'General', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Config File Directory\",\"filter\":\"\",\"name\":\"configFileDirectory\",\"type\":\"string\",\"value\":\"/usr/local/etc/upf/\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"EXE File Directory\",\"filter\":\"\",\"name\":\"exeFileDirectory\",\"type\":\"string\",\"value\":\"/usr/local/bin/\"},{\"access\":\"read-write\",\"comment\":\"1~255\",\"display\":\"System ID\",\"filter\":\"\",\"name\":\"systemId\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"1~8\",\"display\":\"Data Forwarder Number\",\"filter\":\"1~8\",\"name\":\"dataForwarderNum\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Common Statistic Interval\",\"filter\":\"\",\"name\":\"commonStatisticInterval\",\"type\":\"int\",\"value\":\"60\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"User Statistic Interval\",\"filter\":\"\",\"name\":\"userStatisticInterval\",\"type\":\"int\",\"value\":\"60\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"RX N3 OverLoad Threshold Mbps\",\"filter\":\"\",\"name\":\"rxN3OverLoadThresholdMbps\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"RX N6 OverLoad Threshold Mbps\",\"filter\":\"\",\"name\":\"rxN6OverLoadThresholdMbps\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"0~255\",\"display\":\"Checksum Offload\",\"filter\":\"0~255\",\"name\":\"checksumOffload\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max Downlink Buffer Num\",\"filter\":\"\",\"name\":\"maxDownlinkBufferNum\",\"type\":\"int\",\"value\":\"50\"}]', 1, '', 1742469466451, 'public'); @@ -134,22 +134,22 @@ INSERT INTO `ne_config` VALUES (235, 'UPF', 'dpiHeaderEnrichInfoList', 'DPI Head INSERT INTO `ne_config` VALUES (236, 'UPF', 'dpiAppList', 'DPI APP List', 'array', '[{\"access\":\"read-write\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"APP Name\",\"filter\":\"\",\"name\":\"appName\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Proxy Enabled\",\"filter\":\"0~1\",\"name\":\"proxyEnabled\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Force Check Type\",\"filter\":\"0~1\",\"name\":\"forceCheckType\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N3 Interface ID\",\"filter\":\"0~32\",\"name\":\"n3InterfaceId\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N6 Interface ID\",\"filter\":\"0~32\",\"name\":\"n6InterfaceId\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Rule ID\",\"filter\":\"\",\"name\":\"ruleId\",\"type\":\"int\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"REGEX Match\",\"filter\":\"\",\"name\":\"regexMatch\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Flow Description\",\"filter\":\"\",\"name\":\"flowDescription\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Custom Name\",\"filter\":\"\",\"name\":\"customName\",\"type\":\"string\",\"value\":\"\"}],\"comment\":\"\",\"display\":\"Rule List\",\"filter\":\"0~32\",\"name\":\"ruleList\",\"type\":\"int\",\"value\":\"1\"}]', 35, '', 1742469466580, 'public'); INSERT INTO `ne_config` VALUES (237, 'UPF', 'networkControlFreeServerList', 'Free Server List', 'array', '[{\"access\":\"read-write\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Enabled\",\"filter\":\"0~1\",\"name\":\"enabled\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Server IPv4\",\"filter\":\"\",\"name\":\"serverIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Server IPv4 Mask\",\"filter\":\"\",\"name\":\"serverIpv4Mask\",\"type\":\"string\",\"value\":\"255.255.255.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Server IPv6\",\"filter\":\"\",\"name\":\"serverIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Server IPv6 Prefix\",\"filter\":\"\",\"name\":\"serverIpv6Prefix\",\"type\":\"int\",\"value\":\"64\"}],\"comment\":\"\",\"display\":\"Free Server Address List\",\"filter\":\"0~32\",\"name\":\"freeServerAddrList\",\"type\":\"int\",\"value\":\"1\"}]', 27, '', 1742469466563, 'public'); --- 更新 CBC 配置 20240823 -INSERT INTO `ne_config` VALUES (240, 'CBC', 'system', 'System Config', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"CBC Name\",\"filter\":\"0~64\",\"name\":\"name\",\"type\":\"string\",\"value\":\"CBC\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NF Instance\",\"filter\":\"0~64\",\"name\":\"instance\",\"type\":\"string\",\"value\":\"CBC-001\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SBI Server IP\",\"filter\":\"0~64\",\"name\":\"sbiIp\",\"type\":\"string\",\"value\":\"127.0.0.1\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"SBI Server Port\",\"filter\":\"0~65535\",\"name\":\"sbiPort\",\"type\":\"int\",\"value\":\"9090\"},{\"access\":\"read-write\",\"comment\":\"http or https\",\"display\":\"SBI Scheme\",\"filter\":\"{\\\"0\\\":\\\"http\\\",\\\"1\\\":\\\"https\\\"}\",\"name\":\"sbiScheme\",\"type\":\"enum\",\"value\":\"0\"}]', 1, '', 1724327154483, 'public'); -INSERT INTO `ne_config` VALUES (241, 'CBC', 'amfProfile', 'AMF Profile', 'array', '[{\"access\":\"read-only\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NF Name\",\"filter\":\"0~64\",\"name\":\"name\",\"type\":\"string\",\"value\":\"AMF\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AMF URI\",\"filter\":\"0~64\",\"name\":\"uri\",\"type\":\"string\",\"value\":\"http://172.16.5.130:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"0~16777215\",\"display\":\"TAC\",\"filter\":\"0~8\",\"name\":\"tac\",\"type\":\"string\",\"value\":\"1\"}]', 3, '', 1724327154499, 'public'); -INSERT INTO `ne_config` VALUES (242, 'CBC', 'mmeProfile', 'MME Profile', 'array', '[{\"access\":\"read-only\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NF Name\",\"filter\":\"0~64\",\"name\":\"name\",\"type\":\"string\",\"value\":\"MME\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"MME URI\",\"filter\":\"0~64\",\"name\":\"uri\",\"type\":\"string\",\"value\":\"sctp://192.168.1.1:9090\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"0~16777215\",\"display\":\"TAC\",\"filter\":\"0~8\",\"name\":\"tac\",\"type\":\"string\",\"value\":\"1\"}]', 5, '', 1724327154504, 'public'); +-- 更新 CBC 配置 20250715 +INSERT INTO `ne_config` VALUES (240, 'CBC', 'system', 'System Config', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"CBC Name\",\"filter\":\"0~64\",\"name\":\"name\",\"type\":\"string\",\"value\":\"CBC\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SBI Server IP\",\"filter\":\"0~64\",\"name\":\"sbiIp\",\"type\":\"string\",\"value\":\"127.0.0.1\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"SBI Server Port\",\"filter\":\"0~65535\",\"name\":\"sbiPort\",\"type\":\"int\",\"value\":\"9090\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SBI Scheme\",\"filter\":\"{\\\"0\\\":\\\"http\\\",\\\"1\\\":\\\"https\\\"}\",\"name\":\"sbiScheme\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"SBI Timeout\",\"filter\":\"0~65535\",\"name\":\"sbiTimeout\",\"type\":\"int\",\"value\":\"3\"}]', 1, '', 1752577098470, 'public'); +INSERT INTO `ne_config` VALUES (241, 'CBC', 'amfProfile', 'AMF Profile', 'array', '[{\"access\":\"read-only\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"apply the current AMF NF Profile\",\"display\":\"Enable AMF\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"enabled\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NF Name\",\"filter\":\"0~64\",\"name\":\"name\",\"type\":\"string\",\"value\":\"AMF\"},{\"access\":\"read-write\",\"comment\":\"format: http://\\u003cIP\\u003e:\\u003cPORT\\u003e e.g: http://192.168.1.1:9090\",\"display\":\"AMF URI\",\"filter\":\"0~64\",\"name\":\"uri\",\"type\":\"string\",\"value\":\"http://172.16.5.130:8080\"},{\"access\":\"read-write\",\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"MCC\",\"filter\":\"^\\\\d{3,3}$\",\"name\":\"mcc\",\"type\":\"regex\",\"value\":\"460\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"MNC\",\"filter\":\"^\\\\d{2,3}$\",\"name\":\"mnc\",\"type\":\"regex\",\"value\":\"00\"},{\"access\":\"read-write\",\"comment\":\"(A).format is decimal string,e.g:43888 (B).Allow set multiple tac value by ; split, e:4388;4360 \",\"display\":\"TAC\",\"filter\":\"^(\\\\d+(;\\\\d+)*)?$\",\"name\":\"tac\",\"type\":\"regex\",\"value\":\"4388\"}],\"comment\":\"allow TaiList null or add more tai value\",\"display\":\"Tai List\",\"filter\":\"\",\"name\":\"taiList\",\"type\":\"regex\",\"value\":\"\"}]', 3, '', 1752577099153, 'public'); +INSERT INTO `ne_config` VALUES (242, 'CBC', 'mmeProfile', 'MME Profile', 'array', '[{\"access\":\"read-only\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"apply the current MME NF Profile\",\"display\":\"Enable MME\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"enabled\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NF Name\",\"filter\":\"0~64\",\"name\":\"name\",\"type\":\"string\",\"value\":\"MME\"},{\"access\":\"read-write\",\"comment\":\"format: sctp://\\u003cIP\\u003e:\\u003cPORT\\u003e e.g: sctp://192.168.1.1:9090\",\"display\":\"MME URI\",\"filter\":\"0~64\",\"name\":\"uri\",\"type\":\"string\",\"value\":\"sctp://192.168.1.1:9090\"},{\"access\":\"read-write\",\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"MCC\",\"filter\":\"^\\\\d{3,3}$\",\"name\":\"mcc\",\"type\":\"regex\",\"value\":\"460\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"MNC\",\"filter\":\"^\\\\d{2,3}$\",\"name\":\"mnc\",\"type\":\"regex\",\"value\":\"00\"},{\"access\":\"read-write\",\"comment\":\"(A).format is decimal string,e.g:43888 (B).Allow set multiple tac value by ; split, e:4388;4360 \",\"display\":\"TAC\",\"filter\":\"^(\\\\d+(;\\\\d+)*)?$\",\"name\":\"tac\",\"type\":\"regex\",\"value\":\"4388\"}],\"comment\":\"allow TaiList null or add more tai value\",\"display\":\"Tai List\",\"filter\":\"\",\"name\":\"taiList\",\"type\":\"regex\",\"value\":\"\"}]', 5, '', 1752577099228, 'public'); --- 更新 OMC 配置 20250627 -INSERT INTO `ne_config` VALUES (260, 'OMC', 'alarmEmailForward', 'Alarm Email Forward Interface', 'list', '[{\"access\":\"rw\",\"comment\":\"Is it enabled forward alarm with Email interface\",\"display\":\"Enable\",\"filter\":\"true;false\",\"name\":\"enable\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"rw\",\"comment\":\"string, no variable support\",\"display\":\"Email Title\",\"filter\":\"\",\"name\":\"title\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"rw\",\"comment\":\"\",\"display\":\"Email List\",\"filter\":\"\",\"name\":\"emailList\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"rw\",\"comment\":\"Email SMTP server\",\"display\":\"SMTP Server\",\"filter\":\"\",\"name\":\"smtp\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"rw\",\"comment\":\"\",\"display\":\"Port\",\"filter\":\"0~65535\",\"name\":\"port\",\"type\":\"int\",\"value\":\"\"},{\"access\":\"rw\",\"comment\":\"\",\"display\":\"User\",\"filter\":\"\",\"name\":\"user\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"rw\",\"comment\":\"\",\"display\":\"Password\",\"filter\":\"\",\"name\":\"password\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"rw\",\"comment\":\"If skip TLS verify (true/false)\",\"display\":\"TLS Skip Verify\",\"filter\":\"true;false\",\"name\":\"tlsSkipVerify\",\"type\":\"bool\",\"value\":\"true\"}]', 3, '', 1751013716061, 'public'); -INSERT INTO `ne_config` VALUES (261, 'OMC', 'alarmSMSForward', 'Alarm SMS Forward Interface', 'list', '[{\"access\":\"rw\",\"comment\":\"Is it enabled forward alarm with SMS interface\",\"display\":\"Enable\",\"filter\":\"true;false\",\"name\":\"enable\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"rw\",\"comment\":\"Multiple mobile separated by commas\",\"display\":\"Mobile List\",\"filter\":\"\",\"name\":\"mobileList\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"rw\",\"comment\":\"The SMSC SMPP Address\",\"display\":\"SMSC Address\",\"filter\":\"\",\"name\":\"smscAddr\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"rw\",\"comment\":\"\",\"display\":\"System ID\",\"filter\":\"\",\"name\":\"systemID\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"rw\",\"comment\":\"\",\"display\":\"Password\",\"filter\":\"\",\"name\":\"password\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"rw\",\"comment\":\"\",\"display\":\"System Type\",\"filter\":\"\",\"name\":\"systemType\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"rw\",\"comment\":\"Short message coding type\",\"display\":\"Data Coding\",\"filter\":\"{\\\"0\\\":\\\"GSM7BIT\\\",\\\"1\\\":\\\"ASCII\\\",\\\"2\\\":\\\"BINARY8BIT1\\\",\\\"3\\\":\\\"LATIN1\\\",\\\"4\\\":\\\"BINARY8BIT2\\\",\\\"6\\\":\\\"CYRILLIC\\\",\\\"7\\\":\\\"HEBREW\\\",\\\"8\\\":\\\"UCS2\\\"}\",\"name\":\"dataCoding\",\"type\":\"enum\",\"value\":\"GSM7BIT\"},{\"access\":\"rw\",\"comment\":\"It is the source address, the length is between 3 and 20\",\"display\":\"Service Number\",\"filter\":\"3~20\",\"name\":\"serviceNumber\",\"type\":\"string\",\"value\":\"OMC\"}]', 4, '', 1750993234232, 'public'); -INSERT INTO `ne_config` VALUES (262, 'OMC', 'trace', 'NE Signaling Trace', 'list', '[{\"access\":\"read-write\",\"comment\":\"enable or disable NE signaling trace creation\",\"display\":\"Enable\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"enabled\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"NE signaling trace host address\",\"display\":\"Host\",\"filter\":\"0~128\",\"name\":\"host\",\"type\":\"ipv4\",\"value\":\"172.16.5.100\"},{\"access\":\"read-write\",\"comment\":\"NE signaling trace port\",\"display\":\"Port\",\"filter\":\"3000~65530\",\"name\":\"port\",\"type\":\"int\",\"value\":\"33033\"}]', 1, '', 1750993234209, 'public'); +-- 更新 OMC 配置 20250715 +INSERT INTO `ne_config` VALUES (260, 'OMC', 'trace', 'NE Signaling Trace', 'list', '[{\"access\":\"read-write\",\"comment\":\"enable or disable NE signaling trace creation\",\"display\":\"Enable\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"enabled\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"NE signaling trace host address\",\"display\":\"Host\",\"filter\":\"0~128\",\"name\":\"host\",\"type\":\"ipv4\",\"value\":\"172.16.5.100\"},{\"access\":\"read-write\",\"comment\":\"NE signaling trace port\",\"display\":\"Port\",\"filter\":\"3000~65530\",\"name\":\"port\",\"type\":\"int\",\"value\":\"33033\"}]', 1, '', 1752576919477, 'public'); +INSERT INTO `ne_config` VALUES (261, 'OMC', 'notificationEmail', 'Alarm Email Forward Interface', 'list', '[{\"access\":\"rw\",\"comment\":\"Is it enabled forward alarm with Email interface\",\"display\":\"Enable\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"enable\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"rw\",\"comment\":\"\",\"display\":\"Email List\",\"filter\":\"\",\"name\":\"list\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"rw\",\"comment\":\"string, no variable support\",\"display\":\"Email Title\",\"filter\":\"\",\"name\":\"title\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"rw\",\"comment\":\"Email SMTP server\",\"display\":\"SMTP Server\",\"filter\":\"\",\"name\":\"smtp\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"rw\",\"comment\":\"\",\"display\":\"Port\",\"filter\":\"0~65535\",\"name\":\"port\",\"type\":\"int\",\"value\":\"\"},{\"access\":\"rw\",\"comment\":\"\",\"display\":\"User\",\"filter\":\"\",\"name\":\"user\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"rw\",\"comment\":\"\",\"display\":\"Password\",\"filter\":\"\",\"name\":\"password\",\"type\":\"string\",\"value\":\"\"}]', 3, '', 1752576919810, 'public'); +INSERT INTO `ne_config` VALUES (262, 'OMC', 'notificationSMSC', 'Alarm SMS Forward Interface', 'list', '[{\"access\":\"rw\",\"comment\":\"Is it enabled forward alarm with SMS interface\",\"display\":\"Enable\",\"filter\":\"true;false\",\"name\":\"enable\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"rw\",\"comment\":\"Multiple mobile separated by commas\",\"display\":\"Mobile List\",\"filter\":\"\",\"name\":\"list\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"rw\",\"comment\":\"The SMSC SMPP Address\",\"display\":\"SMSC Address\",\"filter\":\"\",\"name\":\"addr\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"rw\",\"comment\":\"\",\"display\":\"System ID\",\"filter\":\"\",\"name\":\"systemid\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"rw\",\"comment\":\"\",\"display\":\"System Type\",\"filter\":\"\",\"name\":\"systemtype\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"rw\",\"comment\":\"\",\"display\":\"Password\",\"filter\":\"\",\"name\":\"password\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"rw\",\"comment\":\"Short message coding type\",\"display\":\"Data Coding\",\"filter\":\"{\\\"0\\\":\\\"GSM7BIT\\\",\\\"1\\\":\\\"ASCII\\\",\\\"2\\\":\\\"BINARY8BIT1\\\",\\\"3\\\":\\\"LATIN1\\\",\\\"4\\\":\\\"BINARY8BIT2\\\",\\\"6\\\":\\\"CYRILLIC\\\",\\\"7\\\":\\\"HEBREW\\\",\\\"8\\\":\\\"UCS2\\\"}\",\"name\":\"coding\",\"type\":\"enum\",\"value\":\"GSM7BIT\"},{\"access\":\"rw\",\"comment\":\"It is the source address, the length is between 3 and 20\",\"display\":\"Service Number\",\"filter\":\"3~20\",\"name\":\"servicenumber\",\"type\":\"string\",\"value\":\"OMC\"}]', 4, '', 1752576919817, 'public'); -- 更新 SMSC 配置 2025521 -INSERT INTO `ne_config` VALUES (280, 'SMSC', 'system', 'System', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"CDR Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"cdrFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SM Validity\",\"filter\":\"0-2147483647\",\"name\":\"smValidity\",\"type\":\"int\",\"value\":\"259200\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Log Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"logFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"Enable or disable resend pending SMS to unattainable local users.\",\"display\":\"Local Polling Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"localPollingFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"Enable or disable resend pending SMS to unattainable outbound roaming users.\",\"display\":\"Local Roaming Out Polling Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"localRoamingOutPollingFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"Enable or disable resend pending SMS to unattainable inbound roaming users.\",\"display\":\"Visitor Roaming In Polling Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"visitorRoamingInPollingFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"Enable or disable resend pending SMS to other unattainable users.\",\"display\":\"Other Polling Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"otherPollingFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"Define the maximum port number that the queue of pending SMS may grow to.\",\"display\":\"Polling Number\",\"filter\":\"0-64\",\"name\":\"pollingNumber\",\"type\":\"int\",\"value\":\"64\"},{\"access\":\"read-write\",\"comment\":\"Specify the priority parameter of SM_RP_PRI. true = High; false = Low.\",\"display\":\"Priority Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"priorityFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"Enable or disable TP-Reply-Path parameter in the SMS-DELIVER data unit.\",\"display\":\"TP Reply Path Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"tpReplyPathFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SMSC Number\",\"filter\":\"0~32\",\"name\":\"smscNumber\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SMSC Domain\",\"filter\":\"0~16\",\"name\":\"smscDomain\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"CSFB VoLTE Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"csfbVolteFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Camel Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"camelFlag\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SCF Address\",\"filter\":\"0~16\",\"name\":\"scfAddress\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"If add plus then set false\",\"display\":\"MT Id Format Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"mtIdFormatFlag\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"enable mcast sms\",\"display\":\"Mcast Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"mcastFlag\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Log Level\",\"filter\":\"{\\\"0\\\":\\\"none\\\",\\\"1\\\":\\\"error\\\",\\\"2\\\":\\\"debug\\\"}\",\"name\":\"logLevel\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"The MB sizeof log file\",\"display\":\"Log Size\",\"filter\":\"1-1000\",\"name\":\"logSize\",\"type\":\"int\",\"value\":\"200\"},{\"access\":\"read-write\",\"comment\":\"The number of log file\",\"display\":\"Log Number\",\"filter\":\"1-20\",\"name\":\"logNum\",\"type\":\"int\",\"value\":\"10\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Log Directory\",\"filter\":\"0~128\",\"name\":\"logDir\",\"type\":\"string\",\"value\":\"/var/log/\"}]', 1, '', 1747799255683, 'public'); -INSERT INTO `ne_config` VALUES (281, 'SMSC', 'msisdnsegment', 'MSISDN Segment List', 'array', '[{\"access\":\"read-only\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Start MSISDN\",\"filter\":\"0~32\",\"name\":\"startMSISDN\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"End MSISDN\",\"filter\":\"0~32\",\"name\":\"endMSISDN\",\"type\":\"string\",\"value\":\"0\"}]', 3, 'put', 1747799256006, 'public'); -INSERT INTO `ne_config` VALUES (282, 'SMSC', 'smpplink', 'SMPP Link List', 'array', '[{\"access\":\"read-only\",\"comment\":\"0~63\",\"display\":\"Index\",\"filter\":\"0~63\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Link Alias\",\"filter\":\"0~32\",\"name\":\"linkAlias\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Session Type\",\"filter\":\"{\\\"0\\\":\\\"bindTX\\\",\\\"1\\\":\\\"bindRX\\\",\\\"2\\\":\\\"bindTRX\\\"}\",\"name\":\"sessionType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Service Number\",\"filter\":\"0~32\",\"name\":\"serviceNumber\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Data Coding Scheme\",\"filter\":\"{\\\"0\\\":\\\"smpp7def7\\\",\\\"1\\\":\\\"smpp8dcs4def7\\\",\\\"2\\\":\\\"smpp8dcs0def7\\\",\\\"16\\\":\\\"smpp7def8\\\",\\\"17\\\":\\\"smpp8dcs4def8\\\",\\\"18\\\":\\\"smpp8dcs0def8\\\",\\\"19\\\":\\\"smpp8dcs0Unpack7\\\",\\\"20\\\":\\\"smpp8dcs0ISO8859\\\"}\",\"name\":\"dataCodingScheme\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Platform Num\",\"filter\":\"{\\\"0\\\":\\\"plat0\\\",\\\"1\\\":\\\"plat1\\\",\\\"2\\\":\\\"ignore\\\"}\",\"name\":\"platformNum\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Time To Live\",\"filter\":\"0-2147483647\",\"name\":\"timeToLive\",\"type\":\"int\",\"value\":\"604800\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Manipulation Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"manipulationFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Type of Number\",\"filter\":\"{\\\"0\\\":\\\"unknown\\\",\\\"1\\\":\\\"international\\\",\\\"2\\\":\\\"national\\\",\\\"3\\\":\\\"networkSpecific\\\",\\\"4\\\":\\\"subscriberNumber\\\",\\\"5\\\":\\\"alphanumeric\\\",\\\"6\\\":\\\"abbreviated\\\"}\",\"name\":\"ton\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Number Plan Indicator\",\"filter\":\"{\\\"0\\\":\\\"unknown\\\",\\\"1\\\":\\\"isdn\\\",\\\"3\\\":\\\"data\\\",\\\"4\\\":\\\"telex\\\",\\\"6\\\":\\\"landMobile\\\",\\\"8\\\":\\\"national\\\",\\\"9\\\":\\\"private\\\",\\\"10\\\":\\\"ermes\\\",\\\"14\\\":\\\"internet\\\",\\\"18\\\":\\\"wapClientID\\\"}\",\"name\":\"npi\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Role Type\",\"filter\":\"{\\\"0\\\":\\\"server\\\",\\\"1\\\":\\\"client\\\"}\",\"name\":\"roleType\",\"type\":\"enum\",\"value\":\"0\"}]', 5, 'post,put,delete', 1747799256626, 'public'); -INSERT INTO `ne_config` VALUES (283, 'SMSC', 'convprefix', 'Conv Prefix List', 'array', '[{\"access\":\"read-only\",\"comment\":\"0~127\",\"display\":\"Index\",\"filter\":\"0~127\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Prefix\",\"filter\":\"0~16\",\"name\":\"prefix\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Delete Length\",\"filter\":\"0-16\",\"name\":\"deleteLength\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Add Length\",\"filter\":\"0-16\",\"name\":\"addLength\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Add Digits\",\"filter\":\"0~16\",\"name\":\"addDigits\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Number Length\",\"filter\":\"0-32\",\"name\":\"numberLength\",\"type\":\"int\",\"value\":\"0\"}]', 7, 'post,put,delete', 1747799256855, 'public'); -INSERT INTO `ne_config` VALUES (284, 'SMSC', 'smppparam', 'SMPP Param List', 'array', '[{\"access\":\"read-only\",\"comment\":\"0~31\",\"display\":\"Index\",\"filter\":\"0~31\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Link Alias\",\"filter\":\"0-8\",\"name\":\"linkAlias\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Link Type\",\"filter\":\"{\\\"0\\\":\\\"udp\\\",\\\"1\\\":\\\"tcp\\\"}\",\"name\":\"linkType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Server Type\",\"filter\":\"{\\\"0\\\":\\\"client\\\",\\\"1\\\":\\\"server\\\"}\",\"name\":\"serverType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Session Type\",\"filter\":\"{\\\"0\\\":\\\"bindTX\\\",\\\"1\\\":\\\"bindRX\\\",\\\"2\\\":\\\"bindTRX\\\"}\",\"name\":\"sessionType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"System ID\",\"filter\":\"0-16\",\"name\":\"systemID\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Password\",\"filter\":\"0-8\",\"name\":\"password\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"System Type\",\"filter\":\"0-12\",\"name\":\"systemType\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Local GTT\",\"filter\":\"0-16\",\"name\":\"localGTT\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Remote GTT\",\"filter\":\"0-16\",\"name\":\"remoteGTT\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Local IP\",\"filter\":\"0-32\",\"name\":\"localIP\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Remote IP\",\"filter\":\"0-32\",\"name\":\"remoteIP\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Session Init Timer\",\"filter\":\"0-65535\",\"name\":\"sessionInitTimer\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Enquire Link Timer\",\"filter\":\"0-65535\",\"name\":\"enquireLinkTimer\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Inactivity Timer\",\"filter\":\"0-65535\",\"name\":\"inactivityTimer\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Response Timer\",\"filter\":\"0-65535\",\"name\":\"responseTimer\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Local SSN\",\"filter\":\"0-255\",\"name\":\"localSSN\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Remote SSN\",\"filter\":\"0-255\",\"name\":\"remoteSSN\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Enable Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"enable\",\"type\":\"bool\",\"value\":\"1\"}]', 9, 'put', 1747799257026, 'public'); +INSERT INTO `ne_config` VALUES (280, 'SMSC', 'system', 'System', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"CDR Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"cdrFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SM Validity\",\"filter\":\"0-2147483647\",\"name\":\"smValidity\",\"type\":\"int\",\"value\":\"259200\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Log Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"logFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"Enable or disable resend pending SMS to unattainable local users.\",\"display\":\"Local Polling Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"localPollingFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"Enable or disable resend pending SMS to unattainable outbound roaming users.\",\"display\":\"Local Roaming Out Polling Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"localRoamingOutPollingFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"Enable or disable resend pending SMS to unattainable inbound roaming users.\",\"display\":\"Visitor Roaming In Polling Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"visitorRoamingInPollingFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"Enable or disable resend pending SMS to other unattainable users.\",\"display\":\"Other Polling Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"otherPollingFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"Define the maximum port number that the queue of pending SMS may grow to.\",\"display\":\"Polling Number\",\"filter\":\"0-64\",\"name\":\"pollingNumber\",\"type\":\"int\",\"value\":\"64\"},{\"access\":\"read-write\",\"comment\":\"Specify the priority parameter of SM_RP_PRI. true = High; false = Low.\",\"display\":\"Priority Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"priorityFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"Enable or disable TP-Reply-Path parameter in the SMS-DELIVER data unit.\",\"display\":\"TP Reply Path Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"tpReplyPathFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SMSC Number\",\"filter\":\"0~32\",\"name\":\"smscNumber\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SMSC Domain\",\"filter\":\"0~16\",\"name\":\"smscDomain\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"CSFB VoLTE Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"csfbVolteFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Camel Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"camelFlag\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SCF Address\",\"filter\":\"0~16\",\"name\":\"scfAddress\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"If add plus then set false\",\"display\":\"MT Id Format Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"mtIdFormatFlag\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"enable mcast sms\",\"display\":\"Mcast Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"mcastFlag\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Log Level\",\"filter\":\"{\\\"0\\\":\\\"none\\\",\\\"1\\\":\\\"error\\\",\\\"2\\\":\\\"debug\\\"}\",\"name\":\"logLevel\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"The MB sizeof log file\",\"display\":\"Log Size\",\"filter\":\"1-1000\",\"name\":\"logSize\",\"type\":\"int\",\"value\":\"200\"},{\"access\":\"read-write\",\"comment\":\"The number of log file\",\"display\":\"Log Number\",\"filter\":\"1-20\",\"name\":\"logNum\",\"type\":\"int\",\"value\":\"10\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Log Directory\",\"filter\":\"0~128\",\"name\":\"logDir\",\"type\":\"string\",\"value\":\"/var/log/\"}]', 1, '', 1751438862010, 'public'); +INSERT INTO `ne_config` VALUES (281, 'SMSC', 'msisdnsegment', 'MSISDN Segment List', 'array', '[{\"access\":\"read-only\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Start MSISDN\",\"filter\":\"0~32\",\"name\":\"startMSISDN\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"End MSISDN\",\"filter\":\"0~32\",\"name\":\"endMSISDN\",\"type\":\"string\",\"value\":\"0\"}]', 3, 'put', 1751438862028, 'public'); +INSERT INTO `ne_config` VALUES (282, 'SMSC', 'smpplink', 'SMPP Link List', 'array', '[{\"access\":\"read-only\",\"comment\":\"0~63\",\"display\":\"Index\",\"filter\":\"0~63\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Link Alias\",\"filter\":\"0~32\",\"name\":\"linkAlias\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Session Type\",\"filter\":\"{\\\"0\\\":\\\"bindTX\\\",\\\"1\\\":\\\"bindRX\\\",\\\"2\\\":\\\"bindTRX\\\"}\",\"name\":\"sessionType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Service Number\",\"filter\":\"0~32\",\"name\":\"serviceNumber\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Data Coding Scheme\",\"filter\":\"{\\\"0\\\":\\\"smpp7def7\\\",\\\"1\\\":\\\"smpp8dcs4def7\\\",\\\"2\\\":\\\"smpp8dcs0def7\\\",\\\"16\\\":\\\"smpp7def8\\\",\\\"17\\\":\\\"smpp8dcs4def8\\\",\\\"18\\\":\\\"smpp8dcs0def8\\\",\\\"19\\\":\\\"smpp8dcs0Unpack7\\\",\\\"20\\\":\\\"smpp8dcs0ISO8859\\\"}\",\"name\":\"dataCodingScheme\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Platform Num\",\"filter\":\"{\\\"0\\\":\\\"plat0\\\",\\\"1\\\":\\\"plat1\\\",\\\"2\\\":\\\"ignore\\\"}\",\"name\":\"platformNum\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Time To Live\",\"filter\":\"0-2147483647\",\"name\":\"timeToLive\",\"type\":\"int\",\"value\":\"604800\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Manipulation Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"manipulationFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Type of Number\",\"filter\":\"{\\\"0\\\":\\\"unknown\\\",\\\"1\\\":\\\"international\\\",\\\"2\\\":\\\"national\\\",\\\"3\\\":\\\"networkSpecific\\\",\\\"4\\\":\\\"subscriberNumber\\\",\\\"5\\\":\\\"alphanumeric\\\",\\\"6\\\":\\\"abbreviated\\\"}\",\"name\":\"ton\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Number Plan Indicator\",\"filter\":\"{\\\"0\\\":\\\"unknown\\\",\\\"1\\\":\\\"isdn\\\",\\\"3\\\":\\\"data\\\",\\\"4\\\":\\\"telex\\\",\\\"6\\\":\\\"landMobile\\\",\\\"8\\\":\\\"national\\\",\\\"9\\\":\\\"private\\\",\\\"10\\\":\\\"ermes\\\",\\\"14\\\":\\\"internet\\\",\\\"18\\\":\\\"wapClientID\\\"}\",\"name\":\"npi\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Role Type\",\"filter\":\"{\\\"0\\\":\\\"server\\\",\\\"1\\\":\\\"client\\\"}\",\"name\":\"roleType\",\"type\":\"enum\",\"value\":\"0\"}]', 5, 'post,put,delete', 1751438862033, 'public'); +INSERT INTO `ne_config` VALUES (283, 'SMSC', 'convprefix', 'Conv Prefix List', 'array', '[{\"access\":\"read-only\",\"comment\":\"0~127\",\"display\":\"Index\",\"filter\":\"0~127\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Prefix\",\"filter\":\"0~16\",\"name\":\"prefix\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Delete Length\",\"filter\":\"0-16\",\"name\":\"deleteLength\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Add Length\",\"filter\":\"0-16\",\"name\":\"addLength\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Add Digits\",\"filter\":\"0~16\",\"name\":\"addDigits\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Number Length\",\"filter\":\"0-32\",\"name\":\"numberLength\",\"type\":\"int\",\"value\":\"0\"}]', 7, 'post,put,delete', 1751438862037, 'public'); +INSERT INTO `ne_config` VALUES (284, 'SMSC', 'smppparam', 'SMPP Param List', 'array', '[{\"access\":\"read-only\",\"comment\":\"0~31\",\"display\":\"Index\",\"filter\":\"0~31\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Link Alias\",\"filter\":\"0-8\",\"name\":\"linkAlias\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Link Type\",\"filter\":\"{\\\"0\\\":\\\"udp\\\",\\\"1\\\":\\\"tcp\\\"}\",\"name\":\"linkType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Server Type\",\"filter\":\"{\\\"0\\\":\\\"client\\\",\\\"1\\\":\\\"server\\\"}\",\"name\":\"serverType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Session Type\",\"filter\":\"{\\\"0\\\":\\\"bindTX\\\",\\\"1\\\":\\\"bindRX\\\",\\\"2\\\":\\\"bindTRX\\\"}\",\"name\":\"sessionType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"System ID\",\"filter\":\"0-16\",\"name\":\"systemID\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Password\",\"filter\":\"0-8\",\"name\":\"password\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"System Type\",\"filter\":\"0-12\",\"name\":\"systemType\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Local GTT\",\"filter\":\"0-16\",\"name\":\"localGTT\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Remote GTT\",\"filter\":\"0-16\",\"name\":\"remoteGTT\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Local IP\",\"filter\":\"0-32\",\"name\":\"localIP\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Remote IP\",\"filter\":\"0-32\",\"name\":\"remoteIP\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Session Init Timer\",\"filter\":\"0-65535\",\"name\":\"sessionInitTimer\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Enquire Link Timer\",\"filter\":\"0-65535\",\"name\":\"enquireLinkTimer\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Inactivity Timer\",\"filter\":\"0-65535\",\"name\":\"inactivityTimer\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Response Timer\",\"filter\":\"0-65535\",\"name\":\"responseTimer\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Local SSN\",\"filter\":\"0-255\",\"name\":\"localSSN\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Remote SSN\",\"filter\":\"0-255\",\"name\":\"remoteSSN\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Enable Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"enable\",\"type\":\"bool\",\"value\":\"1\"}]', 9, 'put', 1751438862041, 'public'); -- 更新 SGWC 配置 20241219 INSERT INTO `ne_config` VALUES (300, 'SGWC', 'sgwcSystem', 'System Config', 'list', '[{\"access\":\"read-write\",\"comment\":\"IPv4/IPv6/IPv4v6\",\"display\":\"Local S11 IP Type\",\"filter\":\"^(IPv4|IPv6|IPv4v6)$\",\"name\":\"s11IpType\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"IPv4 Format\",\"display\":\"Local S11 IPv4\",\"filter\":\"\",\"name\":\"s11Ipv4\",\"type\":\"string\",\"value\":\"172.16.5.80\"},{\"access\":\"read-write\",\"comment\":\"IPv6 Format\",\"display\":\"Local S11 IPv6\",\"filter\":\"\",\"name\":\"s11Ipv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"IPv4/IPv6/IPv4v6\",\"display\":\"Local S5/S8 IP Type\",\"filter\":\"^(IPv4|IPv6|IPv4v6)$\",\"name\":\"s58IpType\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"IPv4 Format\",\"display\":\"Local S5/S8 IPv4\",\"filter\":\"\",\"name\":\"s58Ipv4\",\"type\":\"string\",\"value\":\"172.16.5.81\"},{\"access\":\"read-write\",\"comment\":\"IPv6 Format\",\"display\":\"Local S5/S8 IPv6\",\"filter\":\"\",\"name\":\"s58Ipv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"IPv4/IPv6/IPv4v6\",\"display\":\"Local Sx IP Type\",\"filter\":\"^(IPv4|IPv6|IPv4v6)$\",\"name\":\"sxIpType\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"IPv4 Format\",\"display\":\"Local Sx IPv4\",\"filter\":\"\",\"name\":\"sxIpv4\",\"type\":\"string\",\"value\":\"172.16.5.81\"},{\"access\":\"read-write\",\"comment\":\"IPv6 Format\",\"display\":\"Local Sx IPv6\",\"filter\":\"\",\"name\":\"sxIpv6\",\"type\":\"string\",\"value\":\"\"}]', 1, '', 1734512800790, 'public'); diff --git a/build/database/std/install/alarm.sql b/build/database/std/install/alarm.sql index cd132c3a..8cda201e 100644 --- a/build/database/std/install/alarm.sql +++ b/build/database/std/install/alarm.sql @@ -13,31 +13,31 @@ CREATE TABLE `alarm` ( `ne_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '网元名称', `province` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '网元省份地域', `pv_flag` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '网元标识虚拟化标识', - `alarm_seq` int DEFAULT '0' COMMENT '告警序号 同网元类型连续递增', + `alarm_seq` int DEFAULT '0' COMMENT '告警序号 连续递增', `alarm_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '告警ID', `alarm_title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '告警标题', `alarm_code` int DEFAULT '0' COMMENT '告警状态码', - `event_time` bigint DEFAULT '0' COMMENT '事件产生时间 秒级', - `alarm_type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '告警类型 CommunicationAlarm=1,EquipmentAlarm=2,ProcessingFailure=3,EnvironmentalAlarm=4,QualityOfServiceAlarm=5', - `orig_severity` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '3' COMMENT '严重程度 1: Critical, 2: Major, 3: Minor, 4: Warning, 5: Event(Only VNF)', - `perceived_severity` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '3' COMMENT '告警级别 1: Critical, 2: Major, 3: Minor, 4: Warning, 5: Event(Only VNF)', + `event_time` bigint DEFAULT '0' COMMENT '事件产生时间', + `alarm_type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '告警类型', + `orig_severity` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'Minor' COMMENT '严重程度', + `perceived_severity` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'Minor' COMMENT '告警级别', `object_uid` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '对象ID', `object_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '对象名称', `object_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '对象类型', `location_info` varchar(2048) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '告警定位信息', - `alarm_status` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '1' COMMENT '告警状态 0:clear, 1:active', + `alarm_status` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'Active' COMMENT '告警状态', `specific_problem` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '告警问题原因', `specific_problem_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '告警问题原因ID', `add_info` varchar(2048) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '告警辅助信息', - `ack_state` int DEFAULT '0' COMMENT '确认状态 0: Unacked, 1: Acked', - `ack_time` bigint DEFAULT '0' COMMENT '确认时间 秒级', - `ack_user` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '确认用户', - `clear_type` int DEFAULT '0' COMMENT '清除状态 0: Unclear, 1: AutoClear, 2: ManualClear', + `ack_state` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'NotAck' COMMENT '确认状态', + `ack_time` bigint DEFAULT '0' COMMENT '确认时间', + `ack_user` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '确认用户', + `clear_type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'NotClear' COMMENT '清除状态', `clear_time` bigint DEFAULT '0' COMMENT '清除时间', - `clear_user` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '清除用户', + `clear_user` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '清除用户', `timestamp` bigint DEFAULT '0' COMMENT '创建时间', PRIMARY KEY (`id`) USING BTREE, - UNIQUE KEY `uk_uni_aid_ne_aseq` (`ne_type`,`ne_id`,`alarm_id`,`alarm_seq`) USING BTREE, + UNIQUE KEY `uk_uni_ne_aid` (`ne_type`,`ne_id`,`alarm_id`) USING BTREE, KEY `idx_status_severity_time` (`alarm_status`,`orig_severity`,`event_time`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='告警_记录表'; diff --git a/build/database/std/install/alarm_event.sql b/build/database/std/install/alarm_event.sql index a9175d33..984d03c1 100644 --- a/build/database/std/install/alarm_event.sql +++ b/build/database/std/install/alarm_event.sql @@ -10,22 +10,22 @@ CREATE TABLE `alarm_event` ( `id` int NOT NULL AUTO_INCREMENT, `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元类型', `ne_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元ID', - `alarm_seq` int DEFAULT '0' COMMENT '告警序号 同网元类型连续递增', + `alarm_seq` int DEFAULT '0' COMMENT '告警序号 连续递增', `alarm_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '告警ID', `alarm_title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '告警标题', `alarm_code` int DEFAULT '0' COMMENT '告警状态码', - `event_time` bigint DEFAULT '0' COMMENT '事件产生时间 秒级', + `event_time` bigint DEFAULT '0' COMMENT '事件产生时间', `object_uid` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '对象ID', `object_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '对象名称', `object_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '对象类型', `location_info` varchar(2048) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '告警定位信息', - `alarm_status` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '1' COMMENT '告警状态 0:clear, 1:active', + `alarm_status` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'Active' COMMENT '告警状态', `specific_problem` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '告警问题原因', `specific_problem_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '告警问题原因ID', `add_info` varchar(2048) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '告警辅助信息', - `clear_type` int DEFAULT '0' COMMENT '清除状态 0: Unclear, 1: AutoClear, 2: ManualClear', + `clear_type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'NotClear' COMMENT '清除状态', `clear_time` bigint DEFAULT '0' COMMENT '清除时间', - `clear_user` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '清除用户', + `clear_user` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '清除用户', `timestamp` bigint DEFAULT '0' COMMENT '创建时间', PRIMARY KEY (`id`) USING BTREE, UNIQUE KEY `uk_ti_aid_aseq` (`ne_type`,`ne_id`,`alarm_id`,`alarm_seq`) USING BTREE, diff --git a/build/database/std/install/alarm_forward_log.sql b/build/database/std/install/alarm_forward_log.sql index 5fd2fe30..72686a10 100644 --- a/build/database/std/install/alarm_forward_log.sql +++ b/build/database/std/install/alarm_forward_log.sql @@ -10,16 +10,16 @@ CREATE TABLE `alarm_forward_log` ( `id` int NOT NULL AUTO_INCREMENT, `ne_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', `ne_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', - `alarm_seq` int DEFAULT '0' COMMENT '告警序号 同网元类型连续递增', + `alarm_seq` int DEFAULT '0' COMMENT '告警序号 连续递增', `alarm_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '告警ID', `alarm_code` int DEFAULT '0' COMMENT '告警状态码', `alarm_title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '告警标题', - `alarm_status` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '1' COMMENT '告警状态 0:clear, 1:active', - `alarm_type` varchar(10) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '告警类型 CommunicationAlarm=1,EquipmentAlarm=2,ProcessingFailure=3,EnvironmentalAlarm=4,QualityOfServiceAlarm=5', - `orig_severity` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '3' COMMENT '严重程度 1: Critical, 2: Major, 3: Minor, 4: Warning, 5: Event(Only VNF)', - `event_time` bigint DEFAULT '0' COMMENT '事件产生时间 秒级', + `alarm_status` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'Active' COMMENT '告警状态', + `alarm_type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '告警类型', + `orig_severity` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'Minor' COMMENT '严重程度 ', + `event_time` bigint DEFAULT '0' COMMENT '事件产生时间', `created_at` bigint DEFAULT '0' COMMENT '创建时间', - `type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '转发方式 SMS/EMAIL', + `type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '转发方式 SMS/EMAIL', `target` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '发送目标用户', `result` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '发送结果', PRIMARY KEY (`id`) USING BTREE diff --git a/build/database/std/install/alarm_log.sql b/build/database/std/install/alarm_log.sql index 2aa760ea..66239890 100644 --- a/build/database/std/install/alarm_log.sql +++ b/build/database/std/install/alarm_log.sql @@ -8,14 +8,14 @@ CREATE TABLE `alarm_log` ( `id` int NOT NULL AUTO_INCREMENT, `ne_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', `ne_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', - `alarm_seq` int DEFAULT '0' COMMENT '告警序号 同网元类型连续递增', + `alarm_seq` int DEFAULT '0' COMMENT '告警序号 连续递增', `alarm_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '告警ID', `alarm_code` int DEFAULT '0' COMMENT '告警状态码', `alarm_title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '告警标题', - `alarm_status` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '1' COMMENT '告警状态 0:clear, 1:active', - `alarm_type` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '告警类型 CommunicationAlarm=1,EquipmentAlarm=2,ProcessingFailure=3,EnvironmentalAlarm=4,QualityOfServiceAlarm=5', - `orig_severity` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '3' COMMENT '严重程度 1: Critical, 2: Major, 3: Minor, 4: Warning, 5: Event(Only VNF)', - `event_time` bigint DEFAULT '0' COMMENT '事件产生时间 秒级', + `alarm_status` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'Active' COMMENT '告警状态', + `alarm_type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '告警类型', + `orig_severity` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'Minor' COMMENT '严重程度', + `event_time` bigint DEFAULT '0' COMMENT '事件产生时间', `created_at` bigint DEFAULT '0' COMMENT '创建时间', PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='告警_日志记录'; diff --git a/build/database/std/install/cbc_message.sql b/build/database/std/install/cbc_message.sql new file mode 100755 index 00000000..78d119b1 --- /dev/null +++ b/build/database/std/install/cbc_message.sql @@ -0,0 +1,16 @@ +-- ---------------------------- +-- Table structure for cbc_message +-- ---------------------------- +DROP TABLE IF EXISTS `cbc_message`; +CREATE TABLE `cbc_message` ( + `id` bigint NOT NULL AUTO_INCREMENT, + `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `message_json` varchar(10240) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `status` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'INACTIVE' COMMENT 'ACTIVE/INACTIVE', + `detail` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `created_at` bigint DEFAULT NULL, + `updated_at` bigint DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE, + KEY `idx_cbcm_ne_time` (`ne_type`,`ne_id`,`created_at`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='CDR事件_MF'; diff --git a/build/database/std/install/kpi_c_title.sql b/build/database/std/install/kpi_c_title.sql index 55fa97ad..7b4e5e10 100644 --- a/build/database/std/install/kpi_c_title.sql +++ b/build/database/std/install/kpi_c_title.sql @@ -25,7 +25,7 @@ INSERT INTO `kpi_c_title` VALUES (4, 'AMF', 'AMF.C.04', '5G Register Subscriber' INSERT INTO `kpi_c_title` VALUES (20, 'SMF', 'SMF.C.01', 'SA_MeanPduSession', '\'SMF.01\'', ' ', '', '1', 'admin', 1739362260083); INSERT INTO `kpi_c_title` VALUES (21, 'SMF', 'SMF.C.02', 'PDU Session Establishment Success Rate', '(\'SMF.02\'/\'SMF.03\')*100', '%', '', '1', 'admin', 1739362260083); INSERT INTO `kpi_c_title` VALUES (22, 'SMF', 'SMF.C.03', 'IMS Session Establishment Success Rate', '(\'SMF.04\'/\'SMF.05\')*100', '%', '', '1', 'admin', 1739362260083); -INSERT INTO `kpi_c_title` VALUES (23, 'SMF', 'SMF.C.06', 'IMS_DefaultBear_Success_Rate ', '(\'SMF.13\'/\'SMF.14\')*100', '%', '', '1', 'admin', 1739362260083); +INSERT INTO `kpi_c_title` VALUES (23, 'SMF', 'SMF.C.06', 'IMS_DefaultBear_Success_Rate', '(\'SMF.13\'/\'SMF.14\')*100', '%', '', '1', 'admin', 1739362260083); INSERT INTO `kpi_c_title` VALUES (24, 'SMF', 'SMF.C.07', 'Bear_Success_Rate_new', '((\'SMF.09\'+\'SMF.11\')/(\'SMF.10\'+\'SMF.12\') )*100', '%', '', '0', 'admin', 1739362260083); INSERT INTO `kpi_c_title` VALUES (40, 'MME', 'MME.C.01', 'Combine Attach Success Rate', '(\'MME.A.05\'/\'MME.A.04\')*100', '%', '', '1', 'admin', 1739362260083); @@ -46,3 +46,5 @@ INSERT INTO `kpi_c_title` VALUES (90, 'IMS', 'IMS.C.01', 'InitReg_Success_Rate', INSERT INTO `kpi_c_title` VALUES (91, 'IMS', 'IMS.C.02', 'MO_Success_Rate', '(\'SCSCF.05\'/\'SCSCF.06\')*100', '%', '', '1', 'admin', 1739362260083); INSERT INTO `kpi_c_title` VALUES (92, 'IMS', 'IMS.C.03', 'MT_Success_Rate', '(\'SCSCF.07\'/\'SCSCF.08\')*100', '%', '', '1', 'admin', 1739362260083); INSERT INTO `kpi_c_title` VALUES (93, 'IMS', 'IMS.C.04', 'Service_Success_Rate', '((\'SCSCF.05\'+\'SCSCF.07\')/(\'SCSCF.06\'+\'SCSCF.08\'))*100', '%', '', '1', 'admin', 1739362260083); +INSERT INTO `kpi_c_title` VALUES (94, 'IMS', 'IMS.C.05', 'IDDOutgoing_Success_Rate', '(\'IDD.03\'/\'IDD.01\')*100', '%', '', '1', 'admin', 1739362260083); +INSERT INTO `kpi_c_title` VALUES (95, 'IMS', 'IMS.C.06', 'IDDIncoming_Success_Rate', '(\'IDD.06\'/\'IDD.04\')*100', '%', '', '1', 'admin', 1739362260083); diff --git a/build/database/std/install/mml_log.sql b/build/database/std/install/mml_log.sql index e6a817c9..22c7ca66 100644 --- a/build/database/std/install/mml_log.sql +++ b/build/database/std/install/mml_log.sql @@ -1,47 +1,18 @@ --- 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 `mml_log` -- DROP TABLE IF EXISTS `mml_log`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; CREATE TABLE `mml_log` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user` varchar(32) DEFAULT NULL, `ip` varchar(64) DEFAULT NULL, `ne_type` varchar(32) DEFAULT NULL, `ne_id` varchar(32) DEFAULT NULL, - `mml` varchar(1024) DEFAULT NULL, - `result` varchar(2048) DEFAULT NULL, - `log_time` datetime DEFAULT NULL, + `command` varchar(512) DEFAULT NULL COMMENT '命令 ; 分隔', + `result` varchar(255) DEFAULT NULL COMMENT '成功和有错误', + `log_time` bigint DEFAULT '0' COMMENT '记录时间', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=467 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 */; +) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; -- Dump completed on 2024-03-06 17:26:56 diff --git a/build/database/std/install/sys_config.sql b/build/database/std/install/sys_config.sql index ba790b85..3d8fc923 100644 --- a/build/database/std/install/sys_config.sql +++ b/build/database/std/install/sys_config.sql @@ -32,7 +32,7 @@ INSERT INTO `sys_config` VALUES (5, 'config.sys.user.lockTime', 'sys.user.lockTi INSERT INTO `sys_config` VALUES (6, 'config.sys.officialUrl', 'sys.officialUrl', '#', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.officialUrlRemark'); INSERT INTO `sys_config` VALUES (7, 'config.sys.helpDoc', 'sys.helpDoc', '/static/helpDoc/{language}_doc.pdf', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.helpDocRemark'); INSERT INTO `sys_config` VALUES (8, 'sys.account.captchaType', 'sys.account.captchaType', 'math', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'sys.account.captchaTypeRemark'); -INSERT INTO `sys_config` VALUES (9, 'config.sys.user.passwordPolicy', 'sys.user.passwordPolicy', '{\"minLength\":8,\"specialChars\":2,\"uppercase\":1,\"lowercase\":1}', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.user.passwordPolicyRemark'); +INSERT INTO `sys_config` VALUES (9, 'config.sys.user.passwordPolicy', 'sys.user.passwordPolicy', '{\"minLength\":6,\"specialChars\":0,\"uppercase\":0,\"lowercase\":0}', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.user.passwordPolicyRemark'); INSERT INTO `sys_config` VALUES (10, 'config.sys.user.passwdExpire', 'sys.user.passwdExpire', '{\"expHours\":0,\"alertHours\":360}', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.user.passwdExpireRemark'); INSERT INTO `sys_config` VALUES (11, 'config.sys.user.fristPasswdChange', 'sys.user.fristPasswdChange', 'false', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.user.fristPasswdChangeRemark'); INSERT INTO `sys_config` VALUES (12, 'config.sys.user.passwdNotAllowedHistory', 'sys.user.passwdNotAllowedHistory', '0', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.user.passwdNotAllowedHistoryRemark'); diff --git a/build/database/std/install/sys_dict_data.sql b/build/database/std/install/sys_dict_data.sql index 6ae74908..0dbcda4f 100644 --- a/build/database/std/install/sys_dict_data.sql +++ b/build/database/std/install/sys_dict_data.sql @@ -56,28 +56,28 @@ INSERT INTO `sys_dict_data` VALUES (27, 'trace_type', 'dictData.trace.user', '3' INSERT INTO `sys_dict_data` VALUES (28, 'sys_job_save_log', 'dictData.jobSaveLog.no', '0', 8, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); INSERT INTO `sys_dict_data` VALUES (29, 'sys_job_save_log', 'dictData.jobSaveLog.yes', '1', 9, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); INSERT INTO `sys_dict_data` VALUES (30, 'ne_host_type', 'dictData.ne_host_type.redis', 'redis', 2, '', 'magenta', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -INSERT INTO `sys_dict_data` VALUES (31, 'alarm_status', 'dictData.alarmStatus.history', '0', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -INSERT INTO `sys_dict_data` VALUES (32, 'alarm_status', 'dictData.alarmStatus.active', '1', 2, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO `sys_dict_data` VALUES (31, 'alarm_status', 'dictData.alarmStatus.history', 'Clear', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO `sys_dict_data` VALUES (32, 'alarm_status', 'dictData.alarmStatus.active', 'Active', 2, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); INSERT INTO `sys_dict_data` VALUES (33, 'sys_role_datascope', 'dictData.datascope.all', '1', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); INSERT INTO `sys_dict_data` VALUES (34, 'sys_role_datascope', 'dictData.datascope.custom', '2', 2, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); INSERT INTO `sys_dict_data` VALUES (35, 'sys_role_datascope', 'dictData.datascope.dept', '3', 3, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); INSERT INTO `sys_dict_data` VALUES (36, 'sys_role_datascope', 'dictData.datascope.deptAndChid', '4', 4, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); INSERT INTO `sys_dict_data` VALUES (37, 'sys_role_datascope', 'dictData.datascope.self', '5', 5, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -INSERT INTO `sys_dict_data` VALUES (38, 'active_alarm_type', 'dictData.active_alarm_type.communication', '1', 1, '', 'gold', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -INSERT INTO `sys_dict_data` VALUES (39, 'active_alarm_type', 'dictData.active_alarm_type.equipment', '2', 2, '', 'cyan', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -INSERT INTO `sys_dict_data` VALUES (40, 'active_alarm_type', 'dictData.active_alarm_type.processing', '3', 3, '', 'blue ', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -INSERT INTO `sys_dict_data` VALUES (41, 'active_alarm_type', 'dictData.active_alarm_type.environmental', '4', 4, '', 'yellow', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -INSERT INTO `sys_dict_data` VALUES (42, 'active_alarm_type', 'dictData.active_alarm_type.qualityOfService', '5', 5, '', 'purple', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -INSERT INTO `sys_dict_data` VALUES (43, 'active_clear_type', 'dictData.active_clear_type.notCleared', '0', 0, '', 'processing', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -INSERT INTO `sys_dict_data` VALUES (44, 'active_clear_type', 'dictData.active_clear_type.auto', '1', 1, '', 'gold', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -INSERT INTO `sys_dict_data` VALUES (45, 'active_clear_type', 'dictData.active_clear_type.hand', '2', 2, '', 'success', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -INSERT INTO `sys_dict_data` VALUES (46, 'active_ack_state', 'dictData.active_ack_state.unconfirmed', '0', 0, '', 'processing', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -INSERT INTO `sys_dict_data` VALUES (47, 'active_ack_state', 'dictData.active_ack_state.confirmed', '1', 1, '', 'success', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -INSERT INTO `sys_dict_data` VALUES (48, 'active_alarm_severity', 'dictData.active_alarm_severity.critical', '1', 1, '', 'gold', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -INSERT INTO `sys_dict_data` VALUES (49, 'active_alarm_severity', 'dictData.active_alarm_severity.major', '2', 2, '', 'cyan', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -INSERT INTO `sys_dict_data` VALUES (50, 'active_alarm_severity', 'dictData.active_alarm_severity.minor', '3', 3, '', 'blue ', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -INSERT INTO `sys_dict_data` VALUES (51, 'active_alarm_severity', 'dictData.active_alarm_severity.warning', '4', 4, '', 'yellow', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -INSERT INTO `sys_dict_data` VALUES (52, 'active_alarm_severity', 'dictData.active_alarm_severity.event', '5', 5, '', 'purple', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO `sys_dict_data` VALUES (38, 'active_alarm_type', 'dictData.active_alarm_type.communication', 'CommunicationAlarm', 1, '', 'gold', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO `sys_dict_data` VALUES (39, 'active_alarm_type', 'dictData.active_alarm_type.equipment', 'EquipmentAlarm', 2, '', 'cyan', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO `sys_dict_data` VALUES (40, 'active_alarm_type', 'dictData.active_alarm_type.processing', 'ProcessingFailure', 3, '', 'blue ', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO `sys_dict_data` VALUES (41, 'active_alarm_type', 'dictData.active_alarm_type.environmental', 'EnvironmentalAlarm', 4, '', 'yellow', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO `sys_dict_data` VALUES (42, 'active_alarm_type', 'dictData.active_alarm_type.qualityOfService', 'QualityOfServiceAlarm', 5, '', 'purple', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO `sys_dict_data` VALUES (43, 'active_clear_type', 'dictData.active_clear_type.notCleared', 'NotClear', 0, '', 'processing', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO `sys_dict_data` VALUES (44, 'active_clear_type', 'dictData.active_clear_type.auto', 'AutoClear', 1, '', 'gold', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO `sys_dict_data` VALUES (45, 'active_clear_type', 'dictData.active_clear_type.hand', 'ManualClear', 2, '', 'success', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO `sys_dict_data` VALUES (46, 'active_ack_state', 'dictData.active_ack_state.unconfirmed', 'NotAck', 0, '', 'processing', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO `sys_dict_data` VALUES (47, 'active_ack_state', 'dictData.active_ack_state.confirmed', 'Ack', 1, '', 'success', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO `sys_dict_data` VALUES (48, 'active_alarm_severity', 'dictData.active_alarm_severity.critical', 'Critical', 1, '', 'gold', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO `sys_dict_data` VALUES (49, 'active_alarm_severity', 'dictData.active_alarm_severity.major', 'Major', 2, '', 'cyan', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO `sys_dict_data` VALUES (50, 'active_alarm_severity', 'dictData.active_alarm_severity.minor', 'Minor', 3, '', 'blue ', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO `sys_dict_data` VALUES (51, 'active_alarm_severity', 'dictData.active_alarm_severity.warning', 'Warning', 4, '', 'yellow', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO `sys_dict_data` VALUES (52, 'active_alarm_severity', 'dictData.active_alarm_severity.event', 'Event', 5, '', 'purple', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); INSERT INTO `sys_dict_data` VALUES (53, 'index_status', 'dictType.index_status.normal', 'normal', 1, '#91cc75', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); INSERT INTO `sys_dict_data` VALUES (54, 'index_status', 'dictType.index_status.abnormal', 'abnormal', 2, '#ee6666', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); INSERT INTO `sys_dict_data` VALUES (55, 'cdr_sip_code', 'dictData.cdr_sip_code.200', '200', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); @@ -94,9 +94,9 @@ INSERT INTO `sys_dict_data` VALUES (65, 'ue_auth_code', 'dictData.ue_auth_code.0 INSERT INTO `sys_dict_data` VALUES (66, 'ue_auth_code', 'dictData.ue_auth_code.005', '005', 5, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); INSERT INTO `sys_dict_data` VALUES (67, 'ue_auth_code', 'dictData.ue_auth_code.006', '006', 6, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); INSERT INTO `sys_dict_data` VALUES (68, 'ue_auth_code', 'dictData.ue_auth_code.007', '007', 7, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -INSERT INTO `sys_dict_data` VALUES (69, 'ue_event_type', 'dictData.ue_event_type.auth', 'auth-result', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -INSERT INTO `sys_dict_data` VALUES (70, 'ue_event_type', 'dictData.ue_event_type.detach', 'detach', 2, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -INSERT INTO `sys_dict_data` VALUES (71, 'ue_event_type', 'dictData.ue_event_type.state', 'cm-state', 3, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO `sys_dict_data` VALUES (69, 'ue_event_type', 'dictData.ue_event_type.auth', 'Auth', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO `sys_dict_data` VALUES (70, 'ue_event_type', 'dictData.ue_event_type.detach', 'Detach', 2, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO `sys_dict_data` VALUES (71, 'ue_event_type', 'dictData.ue_event_type.state', 'CM', 3, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); INSERT INTO `sys_dict_data` VALUES (72, 'ue_event_cm_state', 'dictData.ue_event_cm_state.connected', '1', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); INSERT INTO `sys_dict_data` VALUES (73, 'ue_event_cm_state', 'dictData.ue_event_cm_state.idle', '2', 2, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); INSERT INTO `sys_dict_data` VALUES (74, 'ue_event_cm_state', 'dictData.ue_event_cm_state.inactive', '3', 3, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); @@ -195,6 +195,10 @@ INSERT INTO `sys_dict_data` VALUES (166, 'cdr_sip_code_cause', 'dictData.cdr_sip INSERT INTO `sys_dict_data` VALUES (167, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.606', '606', 22, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); INSERT INTO `sys_dict_data` VALUES (168, 'trace_interfaces', 'dictData.trace_interfaces.14', 'N14', 14, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); INSERT INTO `sys_dict_data` VALUES (169, 'trace_interfaces', 'dictData.trace_interfaces.5', 'N5', 5, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO `sys_dict_data` VALUES (170, 'sys_user_type', 'dictData.sys_user_type.system', 'System', 1, '', 'default', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO `sys_dict_data` VALUES (171, 'sys_user_type', 'dictData.sys_user_type.ldap', 'LDAP', 2, '', 'lime', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO `sys_dict_data` VALUES (172, 'sys_user_type', 'dictData.sys_user_type.smtp', 'SMTP', 3, '', 'magenta', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO `sys_dict_data` VALUES (173, 'sys_user_type', 'dictData.sys_user_type.oauth2', 'OAuth2', 4, '', 'gold', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); SET FOREIGN_KEY_CHECKS = 1; diff --git a/build/database/std/install/sys_dict_type.sql b/build/database/std/install/sys_dict_type.sql index 750c56d1..a03a372b 100644 --- a/build/database/std/install/sys_dict_type.sql +++ b/build/database/std/install/sys_dict_type.sql @@ -31,6 +31,7 @@ INSERT INTO `sys_dict_type` VALUES (5, 'dictType.sys_job_group', 'sys_job_group' INSERT INTO `sys_dict_type` VALUES (6, 'dictType.sys_yes_no', 'sys_yes_no', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_yes_no_remark'); INSERT INTO `sys_dict_type` VALUES (9, 'dictType.sys_oper_type', 'sys_oper_type', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_oper_type_remark'); INSERT INTO `sys_dict_type` VALUES (10, 'dictType.sys_common_status', 'sys_common_status', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_common_status_remark'); +INSERT INTO `sys_dict_type` VALUES (11, 'dictType.sys_user_type', 'sys_user_type', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); INSERT INTO `sys_dict_type` VALUES (50, 'dictType.trace_type', 'trace_type', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.trace_type_remark'); INSERT INTO `sys_dict_type` VALUES (51, 'dictType.alarm_status', 'alarm_status', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.alarm_status_remark'); INSERT INTO `sys_dict_type` VALUES (52, 'dictType.ne_version_status', 'ne_version_status', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.ne_version_status_remark'); diff --git a/build/database/std/install/sys_i18n.sql b/build/database/std/install/sys_i18n.sql index e58e4734..c7bc230d 100644 --- a/build/database/std/install/sys_i18n.sql +++ b/build/database/std/install/sys_i18n.sql @@ -559,7 +559,7 @@ INSERT INTO `sys_i18n` VALUES (541, 'dictData.cdr_sip_code.404', '404 找不到' INSERT INTO `sys_i18n` VALUES (542, 'dictData.cdr_sip_code.487', '487 请求已终止', '487 Request Terminated'); INSERT INTO `sys_i18n` VALUES (543, 'dictData.cdr_sip_code.503', '503 服务不可用', '503 Service Unavailable'); INSERT INTO `sys_i18n` VALUES (544, 'dictData.cdr_sip_code.504', '504 服务器超时', '504 Server Timeout'); -INSERT INTO `sys_i18n` VALUES (545, 'dictData.cdr_sip_code.603', '603 下降', '603 Decline'); +INSERT INTO `sys_i18n` VALUES (545, 'dictData.cdr_sip_code.603', '603 拒绝', '603 Decline'); INSERT INTO `sys_i18n` VALUES (546, 'dictData.cdr_sip_code.606', '606 不可接受', '606 Not Acceptable'); INSERT INTO `sys_i18n` VALUES (547, 'cache.name.token', '用户令牌', 'User Token'); INSERT INTO `sys_i18n` VALUES (548, 'cache.name.sys_config', '参数管理', 'Parameters Management'); @@ -747,13 +747,13 @@ INSERT INTO `sys_i18n` VALUES (729, 'dictData.cdr_sip_code_cause.200', '正常 INSERT INTO `sys_i18n` VALUES (730, 'dictData.cdr_sip_code_cause.202', '申请已被接受处理,但尚未完成 ', 'The request has been accepted for processing, but it hasn it completed yet'); INSERT INTO `sys_i18n` VALUES (731, 'dictData.cdr_sip_code_cause.302', '因其他原因呼叫失败', 'Call failure for other reason'); INSERT INTO `sys_i18n` VALUES (732, 'dictData.cdr_sip_code_cause.402', '因其他原因呼叫失败', 'Call failure for other reason'); -INSERT INTO `sys_i18n` VALUES (733, 'dictData.cdr_sip_code_cause.403', '拒绝 MO 用户', 'MO User Rejected'); -INSERT INTO `sys_i18n` VALUES (734, 'dictData.cdr_sip_code_cause.404', 'MT 用户离线', 'MT User Offline'); +INSERT INTO `sys_i18n` VALUES (733, 'dictData.cdr_sip_code_cause.403', '拒接主叫用户', 'MO User Rejected'); +INSERT INTO `sys_i18n` VALUES (734, 'dictData.cdr_sip_code_cause.404', '被叫用户离线', 'MT User Offline'); INSERT INTO `sys_i18n` VALUES (735, 'dictData.cdr_sip_code_cause.480', '因其他原因呼叫失败', 'Call failure for other reason'); INSERT INTO `sys_i18n` VALUES (736, 'dictData.cdr_sip_code_cause.481', '电话无法拨出', 'Call cannot be dialed'); INSERT INTO `sys_i18n` VALUES (737, 'dictData.cdr_sip_code_cause.482', '闪断', 'Flashback'); -INSERT INTO `sys_i18n` VALUES (738, 'dictData.cdr_sip_code_cause.486', 'MT 用户忙', 'MT User Busy'); -INSERT INTO `sys_i18n` VALUES (739, 'dictData.cdr_sip_code_cause.487', 'MO 用户断线', 'MO User Disconnected'); +INSERT INTO `sys_i18n` VALUES (738, 'dictData.cdr_sip_code_cause.486', '被叫用户忙', 'MT User Busy'); +INSERT INTO `sys_i18n` VALUES (739, 'dictData.cdr_sip_code_cause.487', '主叫挂断', 'MO User Disconnected'); INSERT INTO `sys_i18n` VALUES (740, 'dictData.cdr_sip_code_cause.408', '服务器等待响应的时间过长', 'The server waits too long for a response'); INSERT INTO `sys_i18n` VALUES (741, 'dictData.cdr_sip_code_cause.488', '媒体详细信息与服务器支持的内容不匹配', 'Media details didn’t match what the server supports'); INSERT INTO `sys_i18n` VALUES (742, 'dictData.cdr_sip_code_cause.489', '因其他原因呼叫失败', 'Call failure for other reason'); @@ -761,7 +761,7 @@ INSERT INTO `sys_i18n` VALUES (743, 'dictData.cdr_sip_code_cause.500', '服务 INSERT INTO `sys_i18n` VALUES (744, 'dictData.cdr_sip_code_cause.503', '服务器超载或因维护而停机,无法处理呼叫', 'The server is overloaded or down for maintenance and can it process the call'); INSERT INTO `sys_i18n` VALUES (745, 'dictData.cdr_sip_code_cause.504', '服务器尝试以您的名义与另一台服务器通信,但未及时收到回复,并超时了', 'The server tried to talk to another server on your behalf, didn’t get a reply in time, and timed out'); INSERT INTO `sys_i18n` VALUES (746, 'dictData.cdr_sip_code_cause.580', '因其他原因呼叫失败', 'Call failure for other reason'); -INSERT INTO `sys_i18n` VALUES (747, 'dictData.cdr_sip_code_cause.603', 'MT 明确拒绝通话', 'MT explicitly rejected the call'); +INSERT INTO `sys_i18n` VALUES (747, 'dictData.cdr_sip_code_cause.603', '被叫拒接', 'MT explicitly rejected the call'); INSERT INTO `sys_i18n` VALUES (748, 'dictData.cdr_sip_code_cause.606', '呼叫已到达用户设备,但会话设置的某些部分不可接受', 'The call reached the user’s device, but some parts of the session setup weren it acceptable'); INSERT INTO `sys_i18n` VALUES (749, 'dictType.cdr_sip_code_cause', 'IMS-Voice-SIP响应代码类别类型原因', 'IMS-Voice-SIP Response Code Category Type Cause'); INSERT INTO `sys_i18n` VALUES (750, 'job.backup_export_log', '备份-日志数据定期导出', 'Backup-Periodic export of Log Data'); @@ -772,5 +772,35 @@ INSERT INTO `sys_i18n` VALUES (754, 'job.ne_alarm_state_check_license', '网元 INSERT INTO `sys_i18n` VALUES (755, 'job.ne_alarm_state_check_license_remark', '检查网元的License是否即将到期,在出现过阈值时发出警报。\r\n\r\nAlarm type:\r\nCommunicationAlarm=1\r\nEquipmentAlarm=2\r\nProcessingFailure=3\r\nEnvironmentalAlarm=4\r\nQualityOfServiceAlarm=5\r\n\r\nSeverity:\r\nCritical=1\r\nMajor=2\r\nMinor=3\r\nWarning=4\r\n\r\nAddInfo: 告警补充信息\r\ndayLt: 天数小于,默认30天', 'Checks if the network element is License is about to expire and sends an alert if a threshold is crossed.\n\nAlarm type:\nCommunicationAlarm=1\nEquipmentAlarm=2\nProcessingFailure=3\nEnvironmentalAlarm=4\nQualityOfServiceAlarm=5\n\nSeverity:\nCritical=1\nMajor=2\nMinor=3\nWarning=4\r\n\r\nAddInfo: Additional information on alarms\r\ndayLt: Days less than, default 30 days'); INSERT INTO `sys_i18n` VALUES (756, 'dictData.trace_interfaces.14', 'N14', 'N14'); INSERT INTO `sys_i18n` VALUES (757, 'dictData.trace_interfaces.5', 'N5', 'N5'); +INSERT INTO `sys_i18n` VALUES (758, "alarm.export.alarmCode", "告警编码", "Alarm Code"); +INSERT INTO `sys_i18n` VALUES (759, "config.sys.user.fristPasswdChangeRemark", "关闭改为false 开启改为true, 建议同时设置密码有效期", "Off to false On to true, it is recommended to set the password expiration date at the same time."); +INSERT INTO `sys_i18n` VALUES (760, "menu.perf.kpiIMSOverview", "语音数据概览", "Voice Data Overview"); +INSERT INTO `sys_i18n` VALUES (761, "dictType.sys_user_type", "用户类型", "User Type"); +INSERT INTO `sys_i18n` VALUES (762, "dictData.sys_user_type.system", "系统", "System"); +INSERT INTO `sys_i18n` VALUES (763, "dictData.sys_user_type.ldap", "LDAP", "LDAP"); +INSERT INTO `sys_i18n` VALUES (764, "dictData.sys_user_type.smtp", "SMTP", "SMTP"); +INSERT INTO `sys_i18n` VALUES (765, "dictData.sys_user_type.oauth2", "OAuth2", "OAuth2"); +INSERT INTO `sys_i18n` VALUES (766, "user.export.userType", "用户类型", "User Type"); +INSERT INTO `sys_i18n` VALUES (767, "menu.system.loginSource", "第三方登录认证", "Third Party Login Source"); +INSERT INTO `sys_i18n` VALUES (768, "log.operate.title.sysLoginSource", "认证源", "Login Source"); + +INSERT INTO `sys_i18n` VALUES (2000, 'menu.psap.agent', '座席', 'Agent'); +INSERT INTO `sys_i18n` VALUES (2001, 'menu.psap.agent.callings', '并行话务', 'Calling Information'); +INSERT INTO `sys_i18n` VALUES (2002, 'menu.psap.agent.callback', '回拨管理', 'Callback Management'); +INSERT INTO `sys_i18n` VALUES (2003, 'callback.status.NEW', '新建', 'New'); +INSERT INTO `sys_i18n` VALUES (2004, 'callback.status.IN_PROGRESS', '处理中', 'In Progress'); +INSERT INTO `sys_i18n` VALUES (2005, 'callback.status.NO_ANSWER_1', '未应答1', 'No Answer 1'); +INSERT INTO `sys_i18n` VALUES (2006, 'callback.status.NO_ANSWER_2', '未应答2', 'No Answer 2'); +INSERT INTO `sys_i18n` VALUES (2007, 'callback.status.TIMEOUT', '超时', 'Timeout'); +INSERT INTO `sys_i18n` VALUES (2008, 'callback.status.PENDING', '挂起', 'Pending'); +INSERT INTO `sys_i18n` VALUES (2009, 'callback.status.CLOSED', '关闭', 'Closed'); +INSERT INTO `sys_i18n` VALUES (2010, 'job.export.cdr.mf', '定期导出MF话单', 'Periodic Export of MF Call Records'); +INSERT INTO `sys_i18n` VALUES (2011, 'job.psap.ticket.monitor', '回拨工单监控', 'Callback Ticket Monitoring'); +INSERT INTO `sys_i18n` VALUES (2012, 'menu.omc.cdr', '话单', 'Call Records'); +INSERT INTO `sys_i18n` VALUES (2013, 'menu.omc.cdr.mf', '紧急呼叫话单', 'Emergency Call Records'); +INSERT INTO `sys_i18n` VALUES (2014, 'menu.omc.cdr.crbt', '彩铃话单', 'Color Ring Back Tone Records'); +INSERT INTO `sys_i18n` VALUES (2015, 'menu.omc.cdr.mms', '彩信话单', 'Multimedia Message Service Records'); +INSERT INTO `sys_i18n` VALUES (2016, 'menu.ue.cbc.cbe', '预警广播', 'Early Warning Broadcast'); +INSERT INTO `sys_i18n` VALUES (2017, 'log.operate.title.cbcMessage', '预警广播', 'Early Warning Broadcast'); -- Dump completed on 2025-02-14 15:26:56 diff --git a/build/database/std/install/sys_job.sql b/build/database/std/install/sys_job.sql index ae856654..f7ea93d8 100644 --- a/build/database/std/install/sys_job.sql +++ b/build/database/std/install/sys_job.sql @@ -36,9 +36,9 @@ INSERT INTO `sys_job` VALUES (10, 'job.delete_ne_config_backup', 'SYSTEM', 'dele INSERT INTO `sys_job` VALUES (11, 'job.delete_alarm_record', 'SYSTEM', 'delete_alarm_record', '{\"storeDays\":7}', '0 10 0 * * ?', '3', '0', '1', '1', 'system', 1698478134839, 'system', 1698478134839, 'job.delete_alarm_record_remark'); INSERT INTO `sys_job` VALUES (12, 'job.delete_kpi_record', 'SYSTEM', 'delete_kpi_record', '{\"storeDays\":7,\"neList\":[\"IMS\",\"AMF\",\"UDM\",\"UPF\",\"MME\",\"SMSC\",\"SMF\",\"MME\"]}', '0 20 0 * * ?', '3', '0', '1', '1', 'system', 1698478134839, 'system', 1698478134839, 'job.delete_kpi_record_remark'); -INSERT INTO `sys_job` VALUES (20, 'job.ne_alarm_state_check', 'SYSTEM', 'ne_alarm_state_check', '{\"alarmTitle\":\"NE State Check Alarm\",\"alarmType\":\"2\",\"origSeverity\":\"2\",\"specificProblem\":\"alarm cause: the system state of target NE has not been received\",\"specificProblemId\":\"AC10000\",\"addInfo\":\"\"}', '0/30 * * * * ?', '3', '0', '1', '0', 'system', 1698478134839, 'system', 1698478134839, 'job.ne_alarm_state_check_remark'); -INSERT INTO `sys_job` VALUES (21, 'job.ne_alarm_state_check_cmd', 'SYSTEM', 'ne_alarm_state_check_cmd', '{\"alarmTitle\":\"NE State Check Alarm CPU/Menory/Disk\",\"alarmType\":\"2\",\"origSeverity\":\"2\",\"specificProblem\":\"Alarm Cause: CPU/Menory/Disk status received from target NE reaches the threshold\",\"specificProblemId\":\"AC10100\",\"addInfo\":\"\",\"cpuUseGt\":70,\"memUseGt\":70,\"diskUseGt\":70}', '0/15 * * * * ?', '3', '0', '1', '0', 'system', 1698478134839, 'system', 1698478134839, 'job.ne_alarm_state_check_cmd_remark'); -INSERT INTO `sys_job` VALUES (22, 'job.ne_alarm_state_check_license', 'SYSTEM', 'ne_alarm_state_check_license', '{\"alarmTitle\":\"NE State Check Alarm License\",\"alarmType\":\"2\",\"origSeverity\":\"2\",\"specificProblem\":\"Alarm Cause: License received from target NE is about to expire\",\"specificProblemId\":\"AC10200\",\"addInfo\":\"\",\"dayLt\":7}', '0 5 0 * * ?', '3', '0', '1', '0', 'system', 1698478134839, 'system', 1698478134839, 'job.ne_alarm_state_check_license_remark'); +INSERT INTO `sys_job` VALUES (20, 'job.ne_alarm_state_check', 'SYSTEM', 'ne_alarm_state_check', '{\"alarmTitle\":\"NE State Check Alarm\",\"alarmType\":\"EquipmentAlarm\",\"origSeverity\":\"Major\",\"specificProblem\":\"alarm cause: the system state of target NE has not been received\",\"specificProblemId\":\"AC10000\",\"addInfo\":\"\"}', '0/30 * * * * ?', '3', '0', '1', '0', 'system', 1698478134839, 'system', 1698478134839, 'job.ne_alarm_state_check_remark'); +INSERT INTO `sys_job` VALUES (21, 'job.ne_alarm_state_check_cmd', 'SYSTEM', 'ne_alarm_state_check_cmd', '{\"alarmTitle\":\"NE State Check Alarm CPU/Menory/Disk\",\"alarmType\":\"EquipmentAlarm\",\"origSeverity\":\"Major\",\"specificProblem\":\"Alarm Cause: CPU/Menory/Disk status received from target NE reaches the threshold\",\"specificProblemId\":\"AC10100\",\"addInfo\":\"\",\"cpuUseGt\":70,\"memUseGt\":70,\"diskUseGt\":70}', '0/15 * * * * ?', '3', '0', '1', '0', 'system', 1698478134839, 'system', 1698478134839, 'job.ne_alarm_state_check_cmd_remark'); +INSERT INTO `sys_job` VALUES (22, 'job.ne_alarm_state_check_license', 'SYSTEM', 'ne_alarm_state_check_license', '{\"alarmTitle\":\"NE State Check Alarm License\",\"alarmType\":\"EquipmentAlarm\",\"origSeverity\":\"Major\",\"specificProblem\":\"Alarm Cause: License received from target NE is about to expire\",\"specificProblemId\":\"AC10200\",\"addInfo\":\"\",\"dayLt\":7}', '0 5 0 * * ?', '3', '0', '1', '0', 'system', 1698478134839, 'system', 1698478134839, 'job.ne_alarm_state_check_license_remark'); INSERT INTO `sys_job` VALUES (30, 'job.backup_remove_file', 'SYSTEM', 'backup_remove_file', '[{\"backupPath\":\"/udm_data/auth\",\"storeDays\":30},{\"backupPath\":\"/udm_data/sub\",\"storeDays\":30},{\"backupPath\":\"/udm_data/voip\",\"storeDays\":30},{\"backupPath\":\"/udm_data/volte\",\"storeDays\":30},{\"backupPath\":\"/cdr/ims_cdr_event\",\"storeDays\":30},{\"backupPath\":\"/cdr/smsc_cdr_event\",\"storeDays\":30},{\"backupPath\":\"/cdr/smf_cdr_event\",\"storeDays\":30},{\"backupPath\":\"/cdr/sgwc_cdr_event\",\"storeDays\":30},{\"backupPath\":\"/log/sys_log_operate\",\"storeDays\":30,\"storeNum\":7},{\"backupPath\":\"/log/sys_log_login\",\"storeDays\":30,\"storeNum\":7}]', '0 10 0 * * ?', '3', '0', '1', '1', 'system', 1698478134839, 'system', 1698478134839, 'job.backup_remove_file_remark'); INSERT INTO `sys_job` VALUES (31, 'job.backup_export_udm', 'SYSTEM', 'backup_export_udm', '{\"dataType\":[\"auth\",\"sub\",\"voip\",\"volte\"],\"fileType\":\"txt\"}', '0 35 0 * * ?', '3', '0', '1', '1', 'system', 1698478134839, 'supervisor', 1745481169354, 'job.backup_export_udm_remark'); diff --git a/build/database/std/install/sys_login_source.sql b/build/database/std/install/sys_login_source.sql new file mode 100644 index 00000000..073189af --- /dev/null +++ b/build/database/std/install/sys_login_source.sql @@ -0,0 +1,24 @@ +-- +-- Table structure for table `sys_login_source` +-- + +DROP TABLE IF EXISTS `sys_login_source`; +CREATE TABLE `sys_login_source` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID', + `uid` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'UID 16位长度字符串', + `type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '认证类型 LDAP SMTP OAuth2', + `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '认证名称', + `icon` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '图标', + `active_flag` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '激活标记(0未激活 1激活)', + `sync_flag` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '同步标记(0未同步 1同步)', + `config` text COLLATE utf8mb4_general_ci COMMENT '认证配置', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` bigint NULL DEFAULT 0 COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` bigint NULL DEFAULT 0 COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注', + PRIMARY KEY (`id`) USING BTREE, + KEY `idx_ls_type_name` (`type`,`name`) USING BTREE COMMENT '认证类型_认证名称' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='系统_认证源表'; + +-- Dump completed on 2025-08-05 16:20:56 diff --git a/build/database/std/install/sys_menu.sql b/build/database/std/install/sys_menu.sql index c1770d97..ec793c77 100644 --- a/build/database/std/install/sys_menu.sql +++ b/build/database/std/install/sys_menu.sql @@ -50,6 +50,7 @@ INSERT INTO `sys_menu` VALUES (105, 'menu.security.post', 2113, 6, 'post', 'syst INSERT INTO `sys_menu` VALUES (106, 'menu.system.dictType', 1, 30, 'dict', 'system/dict/index', '1', '1', 'M', '1', '1', 'system:dict:list', 'icon-tubiaoku', '0', 'system', 1728641403588,'system', 1728641403588, 'menu.system.dictTypeRemark'); INSERT INTO `sys_menu` VALUES (107, 'menu.system.dictData', 1, 31, 'dict/inline/data/:dictId', 'system/dict/data', '1', '1', 'M', '0', '1', 'system:dict:data', '#', '0', 'system', 1728641403588,'system', 1728641403588, 'menu.system.dictDataRemark'); INSERT INTO `sys_menu` VALUES (108, 'menu.system.paramSet', 1, 59, 'config', 'system/config/index', '1', '1', 'M', '1', '1', 'system:config:list', 'icon-gongnengjieshao', '0', 'system', 1728641403588,'system', 1728641403588, 'menu.system.paramSetRemark'); +INSERT INTO `sys_menu` VALUES (109, 'menu.system.loginSource', 2113, 12, 'login-source', 'system/login-source/index', '1', '1', 'M', '1', '1', 'system:loginSource:list', 'icon-xiangmuchengyuan', '0', 'system', 1728641403588,'system', 1728641403588, ''); INSERT INTO `sys_menu` VALUES (111, 'menu.system.systemLog', 1, 11, 'log', '', '1', '1', 'D', '0', '0', '', '#', '0', 'system', 1728641403588,'system', 1728641403588, 'menu.system.systemLogRemark'); INSERT INTO `sys_menu` VALUES (112, 'menu.system.systemInfo', 1, 5, 'system-info', 'monitor/system/info', '1', '1', 'M', '1', '1', 'monitor:system:info', 'icon-fuzhidaima', '0', 'system', 1728641403588,'system', 1728641403588, 'menu.system.systemInfoRemark'); INSERT INTO `sys_menu` VALUES (113, 'menu.system.cacheInfo', 1, 8, 'cache-info', 'monitor/cache/info', '1', '1', 'M', '1', '1', 'monitor:cache:info', 'icon-gongnengjieshao', '0', 'system', 1728641403588,'system', 1728641403588, 'menu.system.cacheInfoRemark'); @@ -112,6 +113,10 @@ INSERT INTO `sys_menu` VALUES (1053, 'menu.common.edit', 116, 3, '#', '', '1', ' INSERT INTO `sys_menu` VALUES (1054, 'menu.common.delete', 116, 4, '#', '', '1', '1', 'B', '1', '1', 'monitor:job:remove', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); INSERT INTO `sys_menu` VALUES (1055, 'menu.common.edit', 116, 5, '#', '', '1', '1', 'B', '1', '1', 'monitor:job:changeStatus', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); INSERT INTO `sys_menu` VALUES (1056, 'menu.common.export', 116, 6, '#', '', '1', '1', 'B', '1', '1', 'monitor:job:export', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (1057, 'menu.common.query', 109, 1, '#', '', '1', '1', 'B', '1', '1', 'system:loginSource:query', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (1058, 'menu.common.add', 109, 2, '#', '', '1', '1', 'B', '1', '1', 'system:loginSource:add', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (1059, 'menu.common.edit', 109, 3, '#', '', '1', '1', 'B', '1', '1', 'system:loginSource:edit', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (1060, 'menu.common.delete', 109, 4, '#', '', '1', '1', 'B', '1', '1', 'system:loginSource:remove', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); INSERT INTO `sys_menu` VALUES (2000, 'menu.neData.udmAuth', 5, 1, 'udm-auth', 'neData/udm-auth/index', '1', '1', 'M', '1', '1', 'udm#auth:index', 'icon-xiangmuchengyuan', '0', 'system', 1728641403588,'system', 1728641403588, ''); INSERT INTO `sys_menu` VALUES (2001, 'menu.neData.udmSub', 5, 3, 'udm-sub', 'neData/udm-sub/index', '1', '1', 'M', '1', '1', 'udm#sub:index', 'icon-xiangmuchengyuan', '0', 'system', 1728641403588,'system', 1728641403588, ''); INSERT INTO `sys_menu` VALUES (2002, 'menu.neData.udmVOIP', 5, 5, 'udm-voip', 'neData/udm-voip/index', '1', '0', 'M', '1', '1', 'udm#voip:list', 'icon-xiangmuchengyuan', '0', 'system', 1728641403588,'system', 1728641403588, ''); @@ -149,8 +154,8 @@ INSERT INTO `sys_menu` VALUES (2106, 'menu.perf.kpiKeyTarget', 2099, 12, 'kpiKey INSERT INTO `sys_menu` VALUES (2107, 'menu.mml', 0, 8, 'mmlManage', '', '1', '0', 'D', '1', '1', '', 'icon-zhizuoliucheng', '0', 'system', 1728641403588,'system', 1728641403588, 'menu.mmlRemark'); INSERT INTO `sys_menu` VALUES (2108, 'menu.mml.ne', 2107, 1, 'neOperate', 'mmlManage/neOperate/index', '1', '1', 'M', '1', '1', 'mmlManage:neOperate:index', 'icon-huizhiguize', '0', 'system', 1728641403588,'system', 1728641403588, 'menu.mml.neRemark'); INSERT INTO `sys_menu` VALUES (2109, 'menu.mml.udm', 2107, 2, 'udmOperate', 'mmlManage/udmOperate/index', '1', '1', 'M', '1', '1', 'mmlManage:udmOperate:index', 'icon-gonggaodayi', '0', 'system', 1728641403588,'system', 1728641403588, 'menu.mml.udmRemark'); -INSERT INTO `sys_menu` VALUES (2110, 'menu.mml.set', 2107, 4, 'mmlSet', 'mmlManage/mmlSet/index', '1', '0', 'M', '1', '1', 'mmlManage:mmlSet:index', 'icon-wofaqi', '0', 'system', 1728641403588,'system', 1728641403588, 'menu.mml.setRemark'); -INSERT INTO `sys_menu` VALUES (2111, 'menu.mml.omc', 2107, 3, 'omcOperate', 'mmlManage/omcOperate/index', '1', '1', 'M', '1', '1', 'mmlManage:omcOperate:index', 'icon-huizhiguize', '0', 'system', 1728641403588,'system', 1728641403588, 'menu.mml.omcRemark'); +INSERT INTO `sys_menu` VALUES (2110, 'menu.mml.set', 2107, 4, 'mmlSet', 'mmlManage/mmlSet/index', '1', '0', 'M', '0', '0', 'mmlManage:mmlSet:index', 'icon-wofaqi', '0', 'system', 1728641403588,'system', 1728641403588, 'menu.mml.setRemark'); +INSERT INTO `sys_menu` VALUES (2111, 'menu.mml.omc', 2107, 3, 'omcOperate', 'mmlManage/omcOperate/index', '1', '1', 'M', '0', '0', 'mmlManage:omcOperate:index', 'icon-huizhiguize', '0', 'system', 1728641403588,'system', 1728641403588, 'menu.mml.omcRemark'); INSERT INTO `sys_menu` VALUES (2112, 'menu.dashboard.sgwcCDR', 2140, 12, 'sgwcCDR', 'dashboard/sgwcCDR/index', '1', '0', 'M', '1', '1', 'sgwc#cdr:index', 'icon-paixu', '0', 'system', 1728641403588,'system', 1728641403588, ''); INSERT INTO `sys_menu` VALUES (2113, 'menu.security', 0, 14, 'security', '', '1', '0', 'D', '1', '1', '', 'icon-suofang', '0', 'system', 1728641403588,'system', 1728641403588, 'menu.securityRemark'); INSERT INTO `sys_menu` VALUES (2114, 'menu.system.systemSet', 1, 60, 'setting', 'system/setting/index', '1', '1', 'M', '1', '1', 'system:setting:index', 'icon-piliang', '0', 'system', 1728641403588,'system', 1728641403588, 'menu.system.systemSetRemark'); @@ -158,8 +163,8 @@ INSERT INTO `sys_menu` VALUES (2115, 'menu.system.systemResource', 1, 6, 'monito INSERT INTO `sys_menu` VALUES (2116, 'menu.dashboard.smscCDR.content', 2157, 1, '', '', '1', '1', 'B', '1', '1', 'cdr:smsc:content', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); INSERT INTO `sys_menu` VALUES (2117, 'menu.common.delete', 2140, 1, '', '', '1', '1', 'B', '1', '1', 'cdr:ne:remove', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); INSERT INTO `sys_menu` VALUES (2118, 'menu.dashboard.smfCDRByIMSI', 2140, 7, 'smfCDRByIMSI', 'dashboard/smfCDRByIMSI/index', '1', '0', 'M', '1', '1', 'smf#cdr:index', 'icon-gerenzhanghu', '0', 'system', 1728641403588,'system', 1728641403588, ''); --- INSERT INTO `sys_menu` VALUES (2119, 'menu.ueUser.n3iwf', 5, 8, 'n3iwf', 'neUser/n3iwf/index', '1', '0', 'M', '0', '1', 'neUser:n3iwf:index', 'icon-paixu', '0', 'system', 1728641403588,'system', 1728641403588, ''); --- INSERT INTO `sys_menu` VALUES (2120, 'menu.ueUser.pcf', 5, 9, 'pcf', 'neUser/pcf/index', '1', '0', 'M', '1', '1', 'neUser:pcf:index', 'icon-paixu', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (2119, 'Alarm Overview', 2129, 6, 'alarm-overview', 'faultManage/alarm-overview/index', '1', '1', 'M', '1', '1', 'faultManage:active-overview:index', 'icon-wenjian', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (2120, 'DashboardV1', 2131, 8, 'dashboardV1', 'dashboard/overview/index', '1', '0', 'M', '1', '1', 'dashboard:overview:index', 'icon-paixu', '0', 'system', 1728641403588,'system', 1728641403588, ''); INSERT INTO `sys_menu` VALUES (2121, 'menu.system.user.editRole', 100, 8, '', '', '1', '1', 'B', '1', '1', 'system:user:editRole', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); INSERT INTO `sys_menu` VALUES (2122, 'menu.system.setting.i18n', 2114, 1, '', '', '1', '1', 'B', '1', '1', 'system:setting:i18n', '#', '0', 'system', 1728641403588,'system', 1728641403588, 'menu.system.setting.i18nRemark'); INSERT INTO `sys_menu` VALUES (2123, 'menu.log.neFile', 2089, 9, 'neFile', 'ne/neFile/index', '1', '0', 'M', '1', '1', 'ne:neFile:index', 'icon-tubiaohuizhi', '0', 'system', 1728641403588,'system', 1728641403588, ''); @@ -177,6 +182,7 @@ INSERT INTO `sys_menu` VALUES (2135, 'menu.ne.neHost', 4, 15, 'neHost', 'ne/neHo INSERT INTO `sys_menu` VALUES (2136, 'menu.ne.neHostCommand', 4, 18, 'neHostCommand', 'ne/neHostCommand/index', '1', '0', 'M', '1', '0', 'ne:neHostCommand:list', 'icon-fuzhidaima', '0', 'system', 1728641403588,'system', 1728641403588, ''); INSERT INTO `sys_menu` VALUES (2137, 'menu.ne.neInfo', 4, 10, 'neInfo', 'ne/neInfo/index', '1', '0', 'M', '1', '1', 'ne:neInfo:list', 'icon-fuzhidaima', '0', 'system', 1728641403588,'system', 1728641403588, ''); INSERT INTO `sys_menu` VALUES (2138, 'menu.dashboard.amfUE', 2141, 1, 'amfUE', 'dashboard/amfUE/index', '1', '0', 'M', '1', '1', 'amf#ue:index', 'icon-paixu', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (2139, 'menu.perf.kpiIMSOverview', 2099, 14, 'dashboard', 'perfManage/overview/index', '1', '0', 'M', '1', '1', 'ims#perfManage:dashboard:index', 'icon-fuzhichenggong', '0', 'system', 1728641403588,'system', 1728641403588, ''); INSERT INTO `sys_menu` VALUES (2140, 'menu.monitor.cdr', 2089, 10, 'cdr', '', '1', '0', 'D', '1', '1', '', 'icon-tubiaoku', '0', 'system', 1728641403588,'system', 1728641403588, ''); INSERT INTO `sys_menu` VALUES (2141, 'menu.monitor.event', 2089, 20, 'event', '', '1', '0', 'D', '1', '1', '', 'icon-gengduo', '0', 'system', 1728641403588,'system', 1728641403588, ''); INSERT INTO `sys_menu` VALUES (2142, 'menu.ne.neQuickSetup', 4, 40, 'neQuickSetup', 'ne/neQuickSetup/index', '1', '1', 'M', '1', '1', 'ne:neQuickSetup:list', 'icon-wofaqi', '0', 'system', 1728641403588,'system', 1728641403588, ''); @@ -208,6 +214,8 @@ INSERT INTO `sys_menu` VALUES (2167, 'menu.dashboard.overview.imsUeNum', 2132, 2 INSERT INTO `sys_menu` VALUES (2168, 'menu.dashboard.overview.gnbBase', 2132, 6, '', '', '1', '1', 'B', '1', '1', 'dashboard:overview:gnbBase', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); INSERT INTO `sys_menu` VALUES (2169, 'menu.dashboard.overview.enbBase', 2132, 8, '', '', '1', '1', 'B', '1', '1', 'dashboard:overview:enbBase', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (20000, 'menu.ue.cbc.cbe', 5, 20, 'cbe', 'cbc/cbe/index', '1', '0', 'M', '1', '1', 'cbc#dashboard:cdr:index', 'icon-tubiaoku', '0', 'system', 1711352709786, 'system', 1747796007372, ''); + SET FOREIGN_KEY_CHECKS = 1; -- Dump completed on 2025-02-14 15:26:56 diff --git a/build/database/std/install/sys_role_menu.sql b/build/database/std/install/sys_role_menu.sql index d9a6ccc3..9b5a7d57 100644 --- a/build/database/std/install/sys_role_menu.sql +++ b/build/database/std/install/sys_role_menu.sql @@ -1,6 +1,3 @@ -SET NAMES utf8mb4; -SET FOREIGN_KEY_CHECKS = 0; - -- ---------------------------- -- Table structure for sys_role_menu -- ---------------------------- @@ -14,9 +11,6 @@ CREATE TABLE `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); @@ -28,6 +22,7 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 101); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 102); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 103); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 108); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 109); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 111); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 116); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 117); @@ -47,9 +42,23 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1012); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1014); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1030); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1032); +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, 1041); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1042); +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, 1053); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1055); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1056); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1057); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1058); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1059); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1060); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2000); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2001); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2002); @@ -57,8 +66,8 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2003); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2004); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2005); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2007); -INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2009); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2008); +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, 2011); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2083); @@ -91,6 +100,7 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2132); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2133); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2137); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2138); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2139); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2140); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2141); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2143); @@ -115,6 +125,8 @@ 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 (2, 20000); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 4); @@ -122,6 +134,15 @@ 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, 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, 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, 2000); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2001); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2002); @@ -134,6 +155,7 @@ 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, 2011); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2083); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2084); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2086); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2087); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2088); @@ -143,8 +165,11 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2094); 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, 2109); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2112); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2114); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2116); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2118); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2122); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2123); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2126); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2128); @@ -162,20 +187,40 @@ 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, 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, 2157); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2158); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2162); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2163); 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 (3, 20000); INSERT IGNORE INTO `sys_role_menu` VALUES (4, 4); +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); +INSERT IGNORE INTO `sys_role_menu` VALUES (4, 1039); +INSERT IGNORE INTO `sys_role_menu` VALUES (4, 1041); +INSERT IGNORE INTO `sys_role_menu` VALUES (4, 1042); +INSERT IGNORE INTO `sys_role_menu` VALUES (4, 1044); +INSERT IGNORE INTO `sys_role_menu` VALUES (4, 1048); INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2087); INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2088); INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2089); +INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2091); +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, 2112); +INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2113); +INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2115); INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2116); -INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2118); +INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2123); 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); @@ -196,10 +241,16 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2168); INSERT IGNORE INTO `sys_role_menu` VALUES (5, 4); 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, 2126); +INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2128); INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2130); +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); - -UNLOCK TABLES; +INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2166); +INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2167); +INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2168); +INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2169); -- Dump completed on 2025-02-14 15:26:56 diff --git a/build/database/std/install/sys_user.sql b/build/database/std/install/sys_user.sql index 7a237952..d73973d1 100644 --- a/build/database/std/install/sys_user.sql +++ b/build/database/std/install/sys_user.sql @@ -1,4 +1,3 @@ --- MariaDB dump 10.19 Distrib 10.6.16-MariaDB, for debian-linux-gnu (x86_64) -- -- Table structure for table `sys_user` -- @@ -14,6 +13,8 @@ CREATE TABLE `sys_user` ( `sex` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '用户性别(0未选择 1男 2女)', `avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '头像地址', `password` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '密码', + `user_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'System' COMMENT '用户类型(System系统用户)', + `user_source` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '#' COMMENT '用户来源UID(#系统)', `status_flag` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '账号状态(0停用 1正常)', `del_flag` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '删除标记(0存在 1删除)', `password_update_time` bigint NULL DEFAULT 0 COMMENT '密码更新时间', @@ -30,15 +31,10 @@ CREATE TABLE `sys_user` ( -- -- Dumping data for table `sys_user` --- - -LOCK TABLES `sys_user` WRITE; -/*!40000 ALTER TABLE `sys_user` DISABLE KEYS */; -INSERT INTO `sys_user` VALUES (1, 100, 'supervisor', 'supervisor', '', '', '0', '', '$2a$10$QgIcp6yuOEGrEU0TNU12K.uQRLbcufesEU7hiRYlRSSdUO7OAkoTq', '1', '0', 0, 0, '127.0.0.1', 0, 'system', 0, '', 0, ''); -INSERT INTO `sys_user` VALUES (2, 100, 'admin', 'admin', '', '', '0', '', '$2a$10$WVW6if2TNfR3OJmcaD9wX.gEd9TRymr5.Di2izFdDKUuiEGWuAqk6', '1', '0', 0, 0, '127.0.0.1', 0, 'system', 0, '', 0, ''); -INSERT INTO `sys_user` VALUES (3, 100, 'manager', 'manager', '', '', '0', '', '$2a$10$RND3fUw9Ai.WcggYSI57tu.u3OIlktdPxFzlWkmiHC1paV038t0I2', '1', '0', 0, 0, '127.0.0.1', 0, 'system', 0, '', 0, ''); -INSERT INTO `sys_user` VALUES (4, 100, 'monitor', 'monitor', '', '', '0', '', '$2a$10$t3zpKQ0olECotFyI1yO43.tCoS0EXoSRBDcqwl09xvrsmn14qFHHy', '1', '0', 0, 0, '127.0.0.1', 0, 'system', 0, '', 0, ''); - -UNLOCK TABLES; +-- +INSERT INTO `sys_user` VALUES (1, 100, 'supervisor', 'supervisor', '', '', '0', '', '$2a$10$QgIcp6yuOEGrEU0TNU12K.uQRLbcufesEU7hiRYlRSSdUO7OAkoTq', 'System', '#', '1', '0', 0, 0, '127.0.0.1', 0, 'system', 0, '', 0, ''); +INSERT INTO `sys_user` VALUES (2, 100, 'admin', 'admin', '', '', '0', '', '$2a$10$WVW6if2TNfR3OJmcaD9wX.gEd9TRymr5.Di2izFdDKUuiEGWuAqk6', 'System', '#', '1', '0', 0, 0, '127.0.0.1', 0, 'system', 0, '', 0, ''); +INSERT INTO `sys_user` VALUES (3, 100, 'manager', 'manager', '', '', '0', '', '$2a$10$RND3fUw9Ai.WcggYSI57tu.u3OIlktdPxFzlWkmiHC1paV038t0I2', 'System', '#', '1', '0', 0, 0, '127.0.0.1', 0, 'system', 0, '', 0, ''); +INSERT INTO `sys_user` VALUES (4, 100, 'monitor', 'monitor', '', '', '0', '', '$2a$10$t3zpKQ0olECotFyI1yO43.tCoS0EXoSRBDcqwl09xvrsmn14qFHHy', 'System', '#', '1', '0', 0, 0, '127.0.0.1', 0, 'system', 0, '', 0, ''); -- Dump completed on 2025-02-14 15:26:56 diff --git a/build/database/std/install/ue_event.sql b/build/database/std/install/ue_event.sql index 5e77c77d..7e5ad74e 100644 --- a/build/database/std/install/ue_event.sql +++ b/build/database/std/install/ue_event.sql @@ -7,8 +7,8 @@ CREATE TABLE `ue_event` ( `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', `ne_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', `rm_uid` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '可能没有', - `timestamp` bigint DEFAULT '48' COMMENT '接收到的timestamp秒级存储毫秒时间戳', - `event_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '事件类型 auth-result detach cm-state', + `timestamp` bigint DEFAULT '48' COMMENT '接收到的时间', + `event_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '事件类型', `event_json` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT 'data JSON String', `created_at` bigint DEFAULT '0' COMMENT '记录创建存储毫秒', PRIMARY KEY (`id`) USING BTREE, diff --git a/build/database/std/install/ue_event_amf.sql b/build/database/std/install/ue_event_amf.sql index 78898c86..768e0826 100644 --- a/build/database/std/install/ue_event_amf.sql +++ b/build/database/std/install/ue_event_amf.sql @@ -7,8 +7,8 @@ CREATE TABLE `ue_event_amf` ( `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', `ne_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', `rm_uid` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '可能没有', - `timestamp` bigint DEFAULT '48' COMMENT '接收到的timestamp秒级存储毫秒时间戳', - `event_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '事件类型 auth-result detach cm-state', + `timestamp` bigint DEFAULT '48' COMMENT '接收到的时间', + `event_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '事件类型', `event_json` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT 'data JSON String', `created_at` bigint DEFAULT '0' COMMENT '记录创建存储毫秒', PRIMARY KEY (`id`) USING BTREE, diff --git a/build/database/std/install/ue_event_mme.sql b/build/database/std/install/ue_event_mme.sql index 20026bc1..e6548fce 100644 --- a/build/database/std/install/ue_event_mme.sql +++ b/build/database/std/install/ue_event_mme.sql @@ -7,8 +7,8 @@ CREATE TABLE `ue_event_mme` ( `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', `ne_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', `rm_uid` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '可能没有', - `timestamp` bigint DEFAULT '48' COMMENT '接收到的timestamp秒级存储毫秒时间戳', - `event_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '事件类型 auth-result detach cm-state', + `timestamp` bigint DEFAULT '48' COMMENT '接收到的时间', + `event_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '事件类型', `event_json` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT 'data JSON String', `created_at` bigint DEFAULT '0' COMMENT '记录创建存储毫秒', PRIMARY KEY (`id`) USING BTREE, diff --git a/build/database/std/upgrade/upg_alarm.sql b/build/database/std/upgrade/upg_alarm.sql index 68b3522e..e19327b9 100644 --- a/build/database/std/upgrade/upg_alarm.sql +++ b/build/database/std/upgrade/upg_alarm.sql @@ -11,31 +11,31 @@ CREATE TABLE IF NOT EXISTS `alarm` ( `ne_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '网元名称', `province` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '网元省份地域', `pv_flag` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '网元标识虚拟化标识', - `alarm_seq` int DEFAULT '0' COMMENT '告警序号 同网元类型连续递增', + `alarm_seq` int DEFAULT '0' COMMENT '告警序号 连续递增', `alarm_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '告警ID', `alarm_title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '告警标题', `alarm_code` int DEFAULT '0' COMMENT '告警状态码', - `event_time` bigint DEFAULT '0' COMMENT '事件产生时间 秒级', - `alarm_type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '告警类型 CommunicationAlarm=1,EquipmentAlarm=2,ProcessingFailure=3,EnvironmentalAlarm=4,QualityOfServiceAlarm=5', - `orig_severity` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '3' COMMENT '严重程度 1: Critical, 2: Major, 3: Minor, 4: Warning, 5: Event(Only VNF)', - `perceived_severity` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '3' COMMENT '告警级别 1: Critical, 2: Major, 3: Minor, 4: Warning, 5: Event(Only VNF)', + `event_time` bigint DEFAULT '0' COMMENT '事件产生时间', + `alarm_type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '告警类型', + `orig_severity` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'Minor' COMMENT '严重程度', + `perceived_severity` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'Minor' COMMENT '告警级别', `object_uid` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '对象ID', `object_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '对象名称', `object_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '对象类型', `location_info` varchar(2048) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '告警定位信息', - `alarm_status` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '1' COMMENT '告警状态 0:clear, 1:active', + `alarm_status` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'Active' COMMENT '告警状态', `specific_problem` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '告警问题原因', `specific_problem_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '告警问题原因ID', `add_info` varchar(2048) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '告警辅助信息', - `ack_state` int DEFAULT '0' COMMENT '确认状态 0: Unacked, 1: Acked', - `ack_time` bigint DEFAULT '0' COMMENT '确认时间 秒级', - `ack_user` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '确认用户', - `clear_type` int DEFAULT '0' COMMENT '清除状态 0: Unclear, 1: AutoClear, 2: ManualClear', + `ack_state` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'NotAck' COMMENT '确认状态', + `ack_time` bigint DEFAULT '0' COMMENT '确认时间', + `ack_user` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '确认用户', + `clear_type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'NotClear' COMMENT '清除状态', `clear_time` bigint DEFAULT '0' COMMENT '清除时间', - `clear_user` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '清除用户', + `clear_user` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '清除用户', `timestamp` bigint DEFAULT '0' COMMENT '创建时间', PRIMARY KEY (`id`) USING BTREE, - UNIQUE KEY `uk_uni_aid_ne_aseq` (`ne_type`,`ne_id`,`alarm_id`,`alarm_seq`) USING BTREE, + UNIQUE KEY `uk_uni_ne_aid` (`ne_type`,`ne_id`,`alarm_id`) USING BTREE, KEY `idx_status_severity_time` (`alarm_status`,`orig_severity`,`event_time`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='告警_记录表'; @@ -54,31 +54,49 @@ ALTER TABLE `alarm` MODIFY COLUMN `ne_id` varchar(64) CHARACTER SET utf8mb4 COLL ALTER TABLE `alarm` MODIFY COLUMN `ne_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '网元名称' AFTER `ne_id`; ALTER TABLE `alarm` MODIFY COLUMN `province` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '网元省份地域' AFTER `ne_name`; ALTER TABLE `alarm` MODIFY COLUMN `pv_flag` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '网元标识虚拟化标识' AFTER `province`; -ALTER TABLE `alarm` MODIFY COLUMN `alarm_seq` int(11) NULL DEFAULT 0 COMMENT '告警序号 同网元类型连续递增' AFTER `pv_flag`; +ALTER TABLE `alarm` MODIFY COLUMN `alarm_seq` int(11) NULL DEFAULT 0 COMMENT '告警序号 连续递增' AFTER `pv_flag`; ALTER TABLE `alarm` MODIFY COLUMN `alarm_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '告警ID' AFTER `alarm_seq`; ALTER TABLE `alarm` MODIFY COLUMN `alarm_title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '告警标题' AFTER `alarm_id`; ALTER TABLE `alarm` MODIFY COLUMN `alarm_code` int(11) NULL DEFAULT 0 COMMENT '告警状态码' AFTER `alarm_title`; -ALTER TABLE `alarm` MODIFY COLUMN `event_time` bigint(20) NULL DEFAULT 0 COMMENT '事件产生时间 秒级' AFTER `alarm_code`; -ALTER TABLE `alarm` MODIFY COLUMN `alarm_type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '告警类型 CommunicationAlarm=1,EquipmentAlarm=2,ProcessingFailure=3,EnvironmentalAlarm=4,QualityOfServiceAlarm=5' AFTER `event_time`; -ALTER TABLE `alarm` MODIFY COLUMN `orig_severity` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '3' COMMENT '严重程度 1: Critical, 2: Major, 3: Minor, 4: Warning, 5: Event(Only VNF)' AFTER `alarm_type`; -ALTER TABLE `alarm` MODIFY COLUMN `perceived_severity` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '3' COMMENT '告警级别 1: Critical, 2: Major, 3: Minor, 4: Warning, 5: Event(Only VNF)' AFTER `orig_severity`; +ALTER TABLE `alarm` MODIFY COLUMN `event_time` bigint(20) NULL DEFAULT 0 COMMENT '事件产生时间' AFTER `alarm_code`; +ALTER TABLE `alarm` MODIFY COLUMN `alarm_type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '告警类型' AFTER `event_time`; +ALTER TABLE `alarm` MODIFY COLUMN `orig_severity` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'Minor' COMMENT '严重程度' AFTER `alarm_type`; +ALTER TABLE `alarm` MODIFY COLUMN `perceived_severity` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'Minor' COMMENT '告警级别' AFTER `orig_severity`; ALTER TABLE `alarm` MODIFY COLUMN `object_uid` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '对象ID' AFTER `perceived_severity`; ALTER TABLE `alarm` MODIFY COLUMN `object_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '对象名称' AFTER `object_uid`; ALTER TABLE `alarm` MODIFY COLUMN `object_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '对象类型' AFTER `object_name`; ALTER TABLE `alarm` MODIFY COLUMN `location_info` varchar(2048) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '告警定位信息' AFTER `object_type`; -ALTER TABLE `alarm` MODIFY COLUMN `alarm_status` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '1' COMMENT '告警状态 0:clear, 1:active' AFTER `location_info`; +ALTER TABLE `alarm` MODIFY COLUMN `alarm_status` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'Active' COMMENT '告警状态' AFTER `location_info`; ALTER TABLE `alarm` MODIFY COLUMN `specific_problem` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '告警问题原因' AFTER `alarm_status`; ALTER TABLE `alarm` MODIFY COLUMN `specific_problem_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '告警问题原因ID' AFTER `specific_problem`; ALTER TABLE `alarm` MODIFY COLUMN `add_info` varchar(2048) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '告警辅助信息' AFTER `specific_problem_id`; -ALTER TABLE `alarm` MODIFY COLUMN `ack_state` int(11) NULL DEFAULT 0 COMMENT '确认状态 0: Unacked, 1: Acked' AFTER `add_info`; -ALTER TABLE `alarm` MODIFY COLUMN `ack_time` bigint(20) NULL DEFAULT 0 COMMENT '确认时间 秒级' AFTER `ack_state`; -ALTER TABLE `alarm` MODIFY COLUMN `ack_user` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '确认用户' AFTER `ack_time`; -ALTER TABLE `alarm` MODIFY COLUMN `clear_type` int(11) NULL DEFAULT 0 COMMENT '清除状态 0: Unclear, 1: AutoClear, 2: ManualClear' AFTER `ack_user`; +ALTER TABLE `alarm` MODIFY COLUMN `ack_state` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'NotAck' COMMENT '确认状态' AFTER `add_info`; +ALTER TABLE `alarm` MODIFY COLUMN `ack_time` bigint(20) NULL DEFAULT 0 COMMENT '确认时间' AFTER `ack_state`; +ALTER TABLE `alarm` MODIFY COLUMN `ack_user` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '确认用户' AFTER `ack_time`; +ALTER TABLE `alarm` MODIFY COLUMN `clear_type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'NotClear' COMMENT '清除状态' AFTER `ack_user`; ALTER TABLE `alarm` MODIFY COLUMN `clear_time` bigint(20) NULL DEFAULT 0 COMMENT '清除时间' AFTER `clear_type`; -ALTER TABLE `alarm` MODIFY COLUMN `clear_user` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '清除用户' AFTER `clear_time`; +ALTER TABLE `alarm` MODIFY COLUMN `clear_user` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '清除用户' AFTER `clear_time`; ALTER TABLE `alarm` MODIFY COLUMN `timestamp` bigint(20) NULL DEFAULT 0 COMMENT '创建时间' AFTER `clear_user`; -ALTER TABLE `alarm` ADD UNIQUE INDEX `uk_uni_aid_ne_aseq`(`ne_type`, `ne_id`, `alarm_id`, `alarm_seq`) USING BTREE; +ALTER TABLE `alarm` ADD UNIQUE INDEX `uk_uni_ne_aid`(`ne_type`, `ne_id`, `alarm_id`) USING BTREE; ALTER TABLE `alarm` ADD INDEX `idx_status_severity_time`(`alarm_status`, `orig_severity`, `event_time`) USING BTREE; +-- 更新数据 +UPDATE `alarm` SET `alarm_type` = 'CommunicationAlarm' WHERE `alarm_type` = '1'; +UPDATE `alarm` SET `alarm_type` = 'EquipmentAlarm' WHERE `alarm_type` = '2'; +UPDATE `alarm` SET `alarm_type` = 'ProcessingFailure' WHERE `alarm_type` = '3'; +UPDATE `alarm` SET `alarm_type` = 'EnvironmentalAlarm' WHERE `alarm_type` = '4'; +UPDATE `alarm` SET `alarm_type` = 'QualityOfServiceAlarm' WHERE `alarm_type` = '5'; +UPDATE `alarm` SET `orig_severity` = 'Critical', `perceived_severity` = 'Critical' WHERE `orig_severity` = '1'; +UPDATE `alarm` SET `orig_severity` = 'Major', `perceived_severity` = 'Major' WHERE `orig_severity` = '2'; +UPDATE `alarm` SET `orig_severity` = 'Minor', `perceived_severity` = 'Minor' WHERE `orig_severity` = '3'; +UPDATE `alarm` SET `orig_severity` = 'Warning', `perceived_severity` = 'Warning' WHERE `orig_severity` = '4'; +UPDATE `alarm` SET `orig_severity` = 'Event', `perceived_severity` = 'Event' WHERE `orig_severity` = '5'; +UPDATE `alarm` SET `alarm_status` = 'Clear' WHERE `alarm_status` = '0'; +UPDATE `alarm` SET `alarm_status` = 'Active' WHERE `alarm_status` = '1'; +UPDATE `alarm` SET `ack_state` = 'NotAck' WHERE `ack_state` = '0'; +UPDATE `alarm` SET `ack_state` = 'Ack' WHERE `ack_state` = '1'; +UPDATE `alarm` SET `clear_type` = 'NotClear' WHERE `clear_type` = '0'; +UPDATE `alarm` SET `clear_type` = 'AutoClear' WHERE `clear_type` = '1'; +UPDATE `alarm` SET `clear_type` = 'ManualClear' WHERE `clear_type` = '2'; SET FOREIGN_KEY_CHECKS = 1; diff --git a/build/database/std/upgrade/upg_alarm_event.sql b/build/database/std/upgrade/upg_alarm_event.sql index e60f928d..94ce4024 100644 --- a/build/database/std/upgrade/upg_alarm_event.sql +++ b/build/database/std/upgrade/upg_alarm_event.sql @@ -8,25 +8,25 @@ CREATE TABLE IF NOT EXISTS `alarm_event` ( `id` int NOT NULL AUTO_INCREMENT, `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元类型', `ne_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元ID', - `alarm_seq` int DEFAULT '0' COMMENT '告警序号 同网元类型连续递增', + `alarm_seq` int DEFAULT '0' COMMENT '告警序号 连续递增', `alarm_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '告警ID', `alarm_title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '告警标题', `alarm_code` int DEFAULT '0' COMMENT '告警状态码', - `event_time` bigint DEFAULT '0' COMMENT '事件产生时间 秒级', + `event_time` bigint DEFAULT '0' COMMENT '事件产生时间', `object_uid` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '对象ID', `object_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '对象名称', `object_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '对象类型', `location_info` varchar(2048) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '告警定位信息', - `alarm_status` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '1' COMMENT '告警状态 0:clear, 1:active', + `alarm_status` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'Active' COMMENT '告警状态', `specific_problem` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '告警问题原因', `specific_problem_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '告警问题原因ID', `add_info` varchar(2048) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '告警辅助信息', - `clear_type` int DEFAULT '0' COMMENT '清除状态 0: Unclear, 1: AutoClear, 2: ManualClear', + `clear_type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'NotClear' COMMENT '清除状态', `clear_time` bigint DEFAULT '0' COMMENT '清除时间', - `clear_user` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '清除用户', + `clear_user` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '清除用户', `timestamp` bigint DEFAULT '0' COMMENT '创建时间', PRIMARY KEY (`id`) USING BTREE, - UNIQUE KEY `uk_ti_aid_aseq` (`ne_type`,`ne_id`,`alarm_id`,`alarm_seq`) USING BTREE, + UNIQUE KEY `uk_ti_aid` (`ne_type`,`ne_id`,`alarm_id`) USING BTREE, KEY `idx_astatus_etime` (`alarm_status`,`event_time`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='告警_事件记录表'; @@ -51,25 +51,31 @@ ALTER TABLE `alarm_event` DROP INDEX `idx_severity_status`; ALTER TABLE `alarm_event` COMMENT = '告警_事件记录表'; ALTER TABLE `alarm_event` MODIFY COLUMN `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元类型' AFTER `id`; ALTER TABLE `alarm_event` MODIFY COLUMN `ne_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元ID' AFTER `ne_type`; -ALTER TABLE `alarm_event` MODIFY COLUMN `alarm_seq` int(11) NULL DEFAULT 0 COMMENT '告警序号 同网元类型连续递增' AFTER `ne_id`; +ALTER TABLE `alarm_event` MODIFY COLUMN `alarm_seq` int(11) NULL DEFAULT 0 COMMENT '告警序号 连续递增' AFTER `ne_id`; ALTER TABLE `alarm_event` MODIFY COLUMN `alarm_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '告警ID' AFTER `alarm_seq`; ALTER TABLE `alarm_event` MODIFY COLUMN `alarm_title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '告警标题' AFTER `alarm_id`; ALTER TABLE `alarm_event` MODIFY COLUMN `alarm_code` int(11) NULL DEFAULT 0 COMMENT '告警状态码' AFTER `alarm_title`; -ALTER TABLE `alarm_event` MODIFY COLUMN `event_time` bigint(20) NULL DEFAULT 0 COMMENT '事件产生时间 秒级' AFTER `alarm_code`; +ALTER TABLE `alarm_event` MODIFY COLUMN `event_time` bigint(20) NULL DEFAULT 0 COMMENT '事件产生时间' AFTER `alarm_code`; ALTER TABLE `alarm_event` MODIFY COLUMN `object_uid` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '对象ID' AFTER `event_time`; ALTER TABLE `alarm_event` MODIFY COLUMN `object_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '对象名称' AFTER `object_uid`; ALTER TABLE `alarm_event` MODIFY COLUMN `object_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '对象类型' AFTER `object_name`; ALTER TABLE `alarm_event` MODIFY COLUMN `location_info` varchar(2048) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '告警定位信息' AFTER `object_type`; -ALTER TABLE `alarm_event` MODIFY COLUMN `alarm_status` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '1' COMMENT '告警状态 0:clear, 1:active' AFTER `location_info`; +ALTER TABLE `alarm_event` MODIFY COLUMN `alarm_status` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'Active' COMMENT '告警状态' AFTER `location_info`; ALTER TABLE `alarm_event` MODIFY COLUMN `specific_problem` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '告警问题原因' AFTER `alarm_status`; ALTER TABLE `alarm_event` MODIFY COLUMN `specific_problem_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '告警问题原因ID' AFTER `specific_problem`; ALTER TABLE `alarm_event` MODIFY COLUMN `add_info` varchar(2048) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '告警辅助信息' AFTER `specific_problem_id`; -ALTER TABLE `alarm_event` MODIFY COLUMN `clear_type` int(11) NULL DEFAULT 0 COMMENT '清除状态 0: Unclear, 1: AutoClear, 2: ManualClear' AFTER `add_info`; +ALTER TABLE `alarm_event` MODIFY COLUMN `clear_type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'NotClear' COMMENT '清除状态' AFTER `add_info`; ALTER TABLE `alarm_event` MODIFY COLUMN `clear_time` bigint(20) NULL DEFAULT 0 COMMENT '清除时间' AFTER `clear_type`; -ALTER TABLE `alarm_event` MODIFY COLUMN `clear_user` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '清除用户' AFTER `clear_time`; +ALTER TABLE `alarm_event` MODIFY COLUMN `clear_user` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '清除用户' AFTER `clear_time`; ALTER TABLE `alarm_event` MODIFY COLUMN `timestamp` bigint(20) NULL DEFAULT 0 COMMENT '创建时间' AFTER `clear_user`; -ALTER TABLE `alarm_event` ADD UNIQUE INDEX `uk_ti_aid_aseq`(`ne_type`, `ne_id`, `alarm_id`, `alarm_seq`) USING BTREE; +ALTER TABLE `alarm_event` ADD UNIQUE INDEX `uk_ti_aid`(`ne_type`, `ne_id`, `alarm_id`) USING BTREE; ALTER TABLE `alarm_event` ADD INDEX `idx_astatus_etime`(`alarm_status`, `event_time`) USING BTREE; +-- 更新数据 +UPDATE `alarm_event` SET `alarm_status` = 'Clear' WHERE `alarm_status` = '0'; +UPDATE `alarm_event` SET `alarm_status` = 'Active' WHERE `alarm_status` = '1'; +UPDATE `alarm_event` SET `clear_type` = 'NotClear' WHERE `clear_type` = '0'; +UPDATE `alarm_event` SET `clear_type` = 'AutoClear' WHERE `clear_type` = '1'; +UPDATE `alarm_event` SET `clear_type` = 'ManualClear' WHERE `clear_type` = '2'; SET FOREIGN_KEY_CHECKS = 1; diff --git a/build/database/std/upgrade/upg_alarm_forward_log.sql b/build/database/std/upgrade/upg_alarm_forward_log.sql index fd3c804c..918c29d9 100644 --- a/build/database/std/upgrade/upg_alarm_forward_log.sql +++ b/build/database/std/upgrade/upg_alarm_forward_log.sql @@ -8,16 +8,16 @@ CREATE TABLE IF NOT EXISTS `alarm_forward_log` ( `id` int NOT NULL AUTO_INCREMENT, `ne_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', `ne_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', - `alarm_seq` int DEFAULT '0' COMMENT '告警序号 同网元类型连续递增', + `alarm_seq` int DEFAULT '0' COMMENT '告警序号 连续递增', `alarm_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '告警ID', `alarm_code` int DEFAULT '0' COMMENT '告警状态码', `alarm_title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '告警标题', - `alarm_status` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '1' COMMENT '告警状态 0:clear, 1:active', - `alarm_type` varchar(10) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '告警类型 CommunicationAlarm=1,EquipmentAlarm=2,ProcessingFailure=3,EnvironmentalAlarm=4,QualityOfServiceAlarm=5', - `orig_severity` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '3' COMMENT '严重程度 1: Critical, 2: Major, 3: Minor, 4: Warning, 5: Event(Only VNF)', - `event_time` bigint DEFAULT '0' COMMENT '事件产生时间 秒级', + `alarm_status` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'Active' COMMENT '告警状态', + `alarm_type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '告警类型', + `orig_severity` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'Minor' COMMENT '严重程度 ', + `event_time` bigint DEFAULT '0' COMMENT '事件产生时间', `created_at` bigint DEFAULT '0' COMMENT '创建时间', - `type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '转发方式 SMS/EMAIL', + `type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '转发方式 SMS/EMAIL', `target` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '发送目标用户', `result` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '发送结果', PRIMARY KEY (`id`) USING BTREE @@ -33,17 +33,32 @@ ALTER TABLE `alarm_forward_log` DROP COLUMN `log_time`; ALTER TABLE `alarm_forward_log` COMMENT = '告警_转发日志记录'; ALTER TABLE `alarm_forward_log` MODIFY COLUMN `ne_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' AFTER `id`; ALTER TABLE `alarm_forward_log` MODIFY COLUMN `ne_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' AFTER `ne_type`; -ALTER TABLE `alarm_forward_log` MODIFY COLUMN `alarm_seq` int(11) NULL DEFAULT 0 COMMENT '告警序号 同网元类型连续递增' AFTER `ne_id`; +ALTER TABLE `alarm_forward_log` MODIFY COLUMN `alarm_seq` int(11) NULL DEFAULT 0 COMMENT '告警序号 连续递增' AFTER `ne_id`; ALTER TABLE `alarm_forward_log` MODIFY COLUMN `alarm_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '告警ID' AFTER `alarm_seq`; ALTER TABLE `alarm_forward_log` ADD COLUMN `alarm_code` int(11) NULL DEFAULT 0 COMMENT '告警状态码' AFTER `alarm_id`; ALTER TABLE `alarm_forward_log` MODIFY COLUMN `alarm_title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '告警标题' AFTER `alarm_code`; -ALTER TABLE `alarm_forward_log` ADD COLUMN `alarm_status` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '1' COMMENT '告警状态 0:clear, 1:active' AFTER `alarm_title`; -ALTER TABLE `alarm_forward_log` ADD COLUMN `alarm_type` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '告警类型 CommunicationAlarm=1,EquipmentAlarm=2,ProcessingFailure=3,EnvironmentalAlarm=4,QualityOfServiceAlarm=5' AFTER `alarm_status`; -ALTER TABLE `alarm_forward_log` ADD COLUMN `orig_severity` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '3' COMMENT '严重程度 1: Critical, 2: Major, 3: Minor, 4: Warning, 5: Event(Only VNF)' AFTER `alarm_type`; +ALTER TABLE `alarm_forward_log` ADD COLUMN `alarm_status` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'Active' COMMENT '告警状态' AFTER `alarm_title`; +ALTER TABLE `alarm_forward_log` MODIFY COLUMN `alarm_status` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'Active' COMMENT '告警状态' AFTER `alarm_title`; +ALTER TABLE `alarm_forward_log` ADD COLUMN `alarm_type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '告警类型' AFTER `alarm_status`; +ALTER TABLE `alarm_forward_log` MODIFY COLUMN `alarm_type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '告警类型' AFTER `alarm_status`; +ALTER TABLE `alarm_forward_log` ADD COLUMN `orig_severity` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'Minor' COMMENT '严重程度' AFTER `alarm_type`; ALTER TABLE `alarm_forward_log` MODIFY COLUMN `event_time` bigint(20) NULL DEFAULT 0 COMMENT '事件产生时间 秒级' AFTER `orig_severity`; ALTER TABLE `alarm_forward_log` ADD COLUMN `created_at` bigint(20) NULL DEFAULT 0 COMMENT '创建时间' AFTER `event_time`; -ALTER TABLE `alarm_forward_log` ADD COLUMN `type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '转发方式 SMS/EMAIL' AFTER `created_at`; +ALTER TABLE `alarm_forward_log` ADD COLUMN `type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '转发方式 SMS/EMAIL' AFTER `created_at`; ALTER TABLE `alarm_forward_log` ADD COLUMN `target` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '发送目标用户' AFTER `type`; ALTER TABLE `alarm_forward_log` ADD COLUMN `result` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '发送结果' AFTER `target`; +-- 更新数据 +UPDATE `alarm_forward_log` SET `alarm_type` = 'CommunicationAlarm' WHERE `alarm_type` = '1'; +UPDATE `alarm_forward_log` SET `alarm_type` = 'EquipmentAlarm' WHERE `alarm_type` = '2'; +UPDATE `alarm_forward_log` SET `alarm_type` = 'ProcessingFailure' WHERE `alarm_type` = '3'; +UPDATE `alarm_forward_log` SET `alarm_type` = 'EnvironmentalAlarm' WHERE `alarm_type` = '4'; +UPDATE `alarm_forward_log` SET `alarm_type` = 'QualityOfServiceAlarm' WHERE `alarm_type` = '5'; +UPDATE `alarm_forward_log` SET `orig_severity` = 'Critical' WHERE `orig_severity` = '1'; +UPDATE `alarm_forward_log` SET `orig_severity` = 'Major' WHERE `orig_severity` = '2'; +UPDATE `alarm_forward_log` SET `orig_severity` = 'Minor' WHERE `orig_severity` = '3'; +UPDATE `alarm_forward_log` SET `orig_severity` = 'Warning' WHERE `orig_severity` = '4'; +UPDATE `alarm_forward_log` SET `orig_severity` = 'Event' WHERE `orig_severity` = '5'; +UPDATE `alarm_forward_log` SET `alarm_status` = 'Clear' WHERE `alarm_status` = '0'; +UPDATE `alarm_forward_log` SET `alarm_status` = 'Active' WHERE `alarm_status` = '1'; SET FOREIGN_KEY_CHECKS=1; diff --git a/build/database/std/upgrade/upg_alarm_log.sql b/build/database/std/upgrade/upg_alarm_log.sql index 992f8d8f..1fe1620c 100644 --- a/build/database/std/upgrade/upg_alarm_log.sql +++ b/build/database/std/upgrade/upg_alarm_log.sql @@ -5,14 +5,14 @@ CREATE TABLE IF NOT EXISTS `alarm_log` ( `id` int NOT NULL AUTO_INCREMENT, `ne_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', `ne_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', - `alarm_seq` int DEFAULT '0' COMMENT '告警序号 同网元类型连续递增', + `alarm_seq` int DEFAULT '0' COMMENT '告警序号 连续递增', `alarm_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '告警ID', `alarm_code` int DEFAULT '0' COMMENT '告警状态码', `alarm_title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '告警标题', - `alarm_status` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '1' COMMENT '告警状态 0:clear, 1:active', - `alarm_type` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '告警类型 CommunicationAlarm=1,EquipmentAlarm=2,ProcessingFailure=3,EnvironmentalAlarm=4,QualityOfServiceAlarm=5', - `orig_severity` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '3' COMMENT '严重程度 1: Critical, 2: Major, 3: Minor, 4: Warning, 5: Event(Only VNF)', - `event_time` bigint DEFAULT '0' COMMENT '事件产生时间 秒级', + `alarm_status` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'Active' COMMENT '告警状态', + `alarm_type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '告警类型', + `orig_severity` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'Minor' COMMENT '严重程度', + `event_time` bigint DEFAULT '0' COMMENT '事件产生时间', `created_at` bigint DEFAULT '0' COMMENT '创建时间', PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='告警_日志记录'; @@ -28,10 +28,25 @@ ALTER TABLE `alarm_log` MODIFY COLUMN `alarm_seq` int(11) NULL DEFAULT 0 COMMENT ALTER TABLE `alarm_log` MODIFY COLUMN `alarm_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '告警ID' AFTER `alarm_seq`; ALTER TABLE `alarm_log` MODIFY COLUMN `alarm_code` int(11) NULL DEFAULT 0 COMMENT '告警状态码' AFTER `alarm_id`; ALTER TABLE `alarm_log` ADD COLUMN `alarm_title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '告警标题' AFTER `alarm_code`; -ALTER TABLE `alarm_log` MODIFY COLUMN `alarm_status` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '1' COMMENT '告警状态 0:clear, 1:active' AFTER `alarm_title`; -ALTER TABLE `alarm_log` ADD COLUMN `alarm_type` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '告警类型 CommunicationAlarm=1,EquipmentAlarm=2,ProcessingFailure=3,EnvironmentalAlarm=4,QualityOfServiceAlarm=5' AFTER `alarm_status`; -ALTER TABLE `alarm_log` ADD COLUMN `orig_severity` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '3' COMMENT '严重程度 1: Critical, 2: Major, 3: Minor, 4: Warning, 5: Event(Only VNF)' AFTER `alarm_type`; -ALTER TABLE `alarm_log` MODIFY COLUMN `event_time` bigint(20) NULL DEFAULT 0 COMMENT '事件产生时间 秒级' AFTER `orig_severity`; +ALTER TABLE `alarm_log` MODIFY COLUMN `alarm_status` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'Active' COMMENT '告警状态' AFTER `alarm_title`; +ALTER TABLE `alarm_log` ADD COLUMN `alarm_type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '告警类型' AFTER `alarm_status`; +ALTER TABLE `alarm_log` MODIFY COLUMN `alarm_type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '告警类型' AFTER `alarm_status`; +ALTER TABLE `alarm_log` ADD COLUMN `orig_severity` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'Minor' COMMENT '严重程度' AFTER `alarm_type`; +ALTER TABLE `alarm_log` MODIFY COLUMN `orig_severity` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'Minor' COMMENT '严重程度' AFTER `alarm_type`; +ALTER TABLE `alarm_log` MODIFY COLUMN `event_time` bigint(20) NULL DEFAULT 0 COMMENT '事件产生时间' AFTER `orig_severity`; ALTER TABLE `alarm_log` ADD COLUMN `created_at` bigint(20) NULL DEFAULT 0 COMMENT '创建时间' AFTER `event_time`; +-- 更新数据 +UPDATE `alarm_log` SET `alarm_type` = 'CommunicationAlarm' WHERE `alarm_type` = '1'; +UPDATE `alarm_log` SET `alarm_type` = 'EquipmentAlarm' WHERE `alarm_type` = '2'; +UPDATE `alarm_log` SET `alarm_type` = 'ProcessingFailure' WHERE `alarm_type` = '3'; +UPDATE `alarm_log` SET `alarm_type` = 'EnvironmentalAlarm' WHERE `alarm_type` = '4'; +UPDATE `alarm_log` SET `alarm_type` = 'QualityOfServiceAlarm' WHERE `alarm_type` = '5'; +UPDATE `alarm_log` SET `orig_severity` = 'Critical' WHERE `orig_severity` = '1'; +UPDATE `alarm_log` SET `orig_severity` = 'Major' WHERE `orig_severity` = '2'; +UPDATE `alarm_log` SET `orig_severity` = 'Minor' WHERE `orig_severity` = '3'; +UPDATE `alarm_log` SET `orig_severity` = 'Warning' WHERE `orig_severity` = '4'; +UPDATE `alarm_log` SET `orig_severity` = 'Event' WHERE `orig_severity` = '5'; +UPDATE `alarm_log` SET `alarm_status` = 'Clear' WHERE `alarm_status` = '0'; +UPDATE `alarm_log` SET `alarm_status` = 'Active' WHERE `alarm_status` = '1'; -- Dump completed on 2024-02-18 18:26:55 diff --git a/build/database/std/upgrade/upg_cbc_message.sql b/build/database/std/upgrade/upg_cbc_message.sql new file mode 100755 index 00000000..845c049a --- /dev/null +++ b/build/database/std/upgrade/upg_cbc_message.sql @@ -0,0 +1,15 @@ +-- ---------------------------- +-- Table structure for cbc_message +-- ---------------------------- +CREATE TABLE IF NOT EXISTS `cbc_message` ( + `id` bigint NOT NULL AUTO_INCREMENT, + `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `message_json` varchar(10240) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `status` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'INACTIVE' COMMENT 'ACTIVE/INACTIVE', + `detail` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `created_at` bigint DEFAULT NULL, + `updated_at` bigint DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE, + KEY `idx_cbcm_ne_time` (`ne_type`,`ne_id`,`created_at`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='CDR事件_MF'; diff --git a/build/database/std/upgrade/upg_kpi_c_title.sql b/build/database/std/upgrade/upg_kpi_c_title.sql index 28e3c566..d7d08d68 100644 --- a/build/database/std/upgrade/upg_kpi_c_title.sql +++ b/build/database/std/upgrade/upg_kpi_c_title.sql @@ -19,6 +19,20 @@ CREATE TABLE IF NOT EXISTS `kpi_c_title` ( UNIQUE KEY `idx_ne_kpi_id` (`ne_type`,`kpi_id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='KPI_自定义指标标题'; +-- ---------------------------- +-- COLUMN for kpi_c_title +-- ---------------------------- +ALTER TABLE `kpi_c_title` MODIFY COLUMN `ne_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' AFTER `id`; +ALTER TABLE `kpi_c_title` MODIFY COLUMN `kpi_id` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' AFTER `ne_type`; +ALTER TABLE `kpi_c_title` MODIFY COLUMN `title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' AFTER `kpi_id`; +ALTER TABLE `kpi_c_title` MODIFY COLUMN `expression` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' AFTER `title`; +ALTER TABLE `kpi_c_title` MODIFY COLUMN `unit` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' AFTER `expression`; +ALTER TABLE `kpi_c_title` MODIFY COLUMN `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' AFTER `unit`; +ALTER TABLE `kpi_c_title` MODIFY COLUMN `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '0-Inactive/1-Active/2-Deleted' AFTER `description`; +ALTER TABLE `kpi_c_title` MODIFY COLUMN `created_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' AFTER `status`; +ALTER TABLE `kpi_c_title` MODIFY COLUMN `updated_at` bigint(20) NULL DEFAULT 0 AFTER `created_by`; +ALTER TABLE `kpi_c_title` COMMENT = 'KPI_自定义指标标题'; + -- ---------------------------- -- Data for kpi_c_title -- ---------------------------- @@ -31,7 +45,7 @@ REPLACE INTO `kpi_c_title` VALUES (4, 'AMF', 'AMF.C.04', '5G Register Subscriber REPLACE INTO `kpi_c_title` VALUES (20, 'SMF', 'SMF.C.01', 'SA_MeanPduSession', '\'SMF.01\'', ' ', '', '1', 'admin', 1739362260083); REPLACE INTO `kpi_c_title` VALUES (21, 'SMF', 'SMF.C.02', 'PDU Session Establishment Success Rate', '(\'SMF.02\'/\'SMF.03\')*100', '%', '', '1', 'admin', 1739362260083); REPLACE INTO `kpi_c_title` VALUES (22, 'SMF', 'SMF.C.03', 'IMS Session Establishment Success Rate', '(\'SMF.04\'/\'SMF.05\')*100', '%', '', '1', 'admin', 1739362260083); -REPLACE INTO `kpi_c_title` VALUES (23, 'SMF', 'SMF.C.06', 'IMS_DefaultBear_Success_Rate ', '(\'SMF.13\'/\'SMF.14\')*100', '%', '', '1', 'admin', 1739362260083); +REPLACE INTO `kpi_c_title` VALUES (23, 'SMF', 'SMF.C.06', 'IMS_DefaultBear_Success_Rate', '(\'SMF.13\'/\'SMF.14\')*100', '%', '', '1', 'admin', 1739362260083); REPLACE INTO `kpi_c_title` VALUES (24, 'SMF', 'SMF.C.07', 'Bear_Success_Rate_new', '((\'SMF.09\'+\'SMF.11\')/(\'SMF.10\'+\'SMF.12\') )*100', '%', '', '0', 'admin', 1739362260083); REPLACE INTO `kpi_c_title` VALUES (40, 'MME', 'MME.C.01', 'Combine Attach Success Rate', '(\'MME.A.05\'/\'MME.A.04\')*100', '%', '', '1', 'admin', 1739362260083); @@ -52,19 +66,7 @@ REPLACE INTO `kpi_c_title` VALUES (90, 'IMS', 'IMS.C.01', 'InitReg_Success_Rate' REPLACE INTO `kpi_c_title` VALUES (91, 'IMS', 'IMS.C.02', 'MO_Success_Rate', '(\'SCSCF.05\'/\'SCSCF.06\')*100', '%', '', '1', 'admin', 1739362260083); REPLACE INTO `kpi_c_title` VALUES (92, 'IMS', 'IMS.C.03', 'MT_Success_Rate', '(\'SCSCF.07\'/\'SCSCF.08\')*100', '%', '', '1', 'admin', 1739362260083); REPLACE INTO `kpi_c_title` VALUES (93, 'IMS', 'IMS.C.04', 'Service_Success_Rate', '((\'SCSCF.05\'+\'SCSCF.07\')/(\'SCSCF.06\'+\'SCSCF.08\'))*100', '%', '', '1', 'admin', 1739362260083); - --- ---------------------------- --- COLUMN for kpi_c_title --- ---------------------------- -ALTER TABLE `kpi_c_title` MODIFY COLUMN `ne_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' AFTER `id`; -ALTER TABLE `kpi_c_title` MODIFY COLUMN `kpi_id` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' AFTER `ne_type`; -ALTER TABLE `kpi_c_title` MODIFY COLUMN `title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' AFTER `kpi_id`; -ALTER TABLE `kpi_c_title` MODIFY COLUMN `expression` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' AFTER `title`; -ALTER TABLE `kpi_c_title` MODIFY COLUMN `unit` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' AFTER `expression`; -ALTER TABLE `kpi_c_title` MODIFY COLUMN `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' AFTER `unit`; -ALTER TABLE `kpi_c_title` MODIFY COLUMN `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '0-Inactive/1-Active/2-Deleted' AFTER `description`; -ALTER TABLE `kpi_c_title` MODIFY COLUMN `created_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' AFTER `status`; -ALTER TABLE `kpi_c_title` MODIFY COLUMN `updated_at` bigint(20) NULL DEFAULT 0 AFTER `created_by`; -ALTER TABLE `kpi_c_title` COMMENT = 'KPI_自定义指标标题'; +REPLACE INTO `kpi_c_title` VALUES (94, 'IMS', 'IMS.C.05', 'IDDOutgoing_Success_Rate', '(\'IDD.03\'/\'IDD.01\')*100', '%', '', '1', 'admin', 1739362260083); +REPLACE INTO `kpi_c_title` VALUES (95, 'IMS', 'IMS.C.06', 'IDDIncoming_Success_Rate', '(\'IDD.06\'/\'IDD.04\')*100', '%', '', '1', 'admin', 1739362260083); SET FOREIGN_KEY_CHECKS = 1; diff --git a/build/database/std/upgrade/upg_mml_log.sql b/build/database/std/upgrade/upg_mml_log.sql new file mode 100644 index 00000000..22c7ca66 --- /dev/null +++ b/build/database/std/upgrade/upg_mml_log.sql @@ -0,0 +1,18 @@ +-- +-- Table structure for table `mml_log` +-- + +DROP TABLE IF EXISTS `mml_log`; +CREATE TABLE `mml_log` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `user` varchar(32) DEFAULT NULL, + `ip` varchar(64) DEFAULT NULL, + `ne_type` varchar(32) DEFAULT NULL, + `ne_id` varchar(32) DEFAULT NULL, + `command` varchar(512) DEFAULT NULL COMMENT '命令 ; 分隔', + `result` varchar(255) DEFAULT NULL COMMENT '成功和有错误', + `log_time` bigint DEFAULT '0' COMMENT '记录时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; + +-- Dump completed on 2024-03-06 17:26:56 diff --git a/build/database/std/upgrade/upg_sys_config.sql b/build/database/std/upgrade/upg_sys_config.sql index b7859ba5..d9236c58 100644 --- a/build/database/std/upgrade/upg_sys_config.sql +++ b/build/database/std/upgrade/upg_sys_config.sql @@ -41,7 +41,7 @@ REPLACE INTO `sys_config` VALUES (5, 'config.sys.user.lockTime', 'sys.user.lockT REPLACE INTO `sys_config` VALUES (6, 'config.sys.officialUrl', 'sys.officialUrl', '#', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.officialUrlRemark'); REPLACE INTO `sys_config` VALUES (7, 'config.sys.helpDoc', 'sys.helpDoc', '/static/helpDoc/{language}_doc.pdf', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.helpDocRemark'); REPLACE INTO `sys_config` VALUES (8, 'sys.account.captchaType', 'sys.account.captchaType', 'math', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'sys.account.captchaTypeRemark'); -REPLACE INTO `sys_config` VALUES (9, 'config.sys.user.passwordPolicy', 'sys.user.passwordPolicy', '{\"minLength\":8,\"specialChars\":2,\"uppercase\":1,\"lowercase\":1}', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.user.passwordPolicyRemark'); +REPLACE INTO `sys_config` VALUES (9, 'config.sys.user.passwordPolicy', 'sys.user.passwordPolicy', '{\"minLength\":6,\"specialChars\":0,\"uppercase\":0,\"lowercase\":0}', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.user.passwordPolicyRemark'); REPLACE INTO `sys_config` VALUES (10, 'config.sys.user.passwdExpire', 'sys.user.passwdExpire', '{\"expHours\":0,\"alertHours\":360}', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.user.passwdExpireRemark'); REPLACE INTO `sys_config` VALUES (11, 'config.sys.user.fristPasswdChange', 'sys.user.fristPasswdChange', 'false', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.user.fristPasswdChangeRemark'); REPLACE INTO `sys_config` VALUES (12, 'config.sys.user.passwdNotAllowedHistory', 'sys.user.passwdNotAllowedHistory', '0', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.user.passwdNotAllowedHistoryRemark'); diff --git a/build/database/std/upgrade/upg_sys_dict_data.sql b/build/database/std/upgrade/upg_sys_dict_data.sql index 4ac4f59d..51ae420a 100644 --- a/build/database/std/upgrade/upg_sys_dict_data.sql +++ b/build/database/std/upgrade/upg_sys_dict_data.sql @@ -60,28 +60,28 @@ REPLACE INTO `sys_dict_data` VALUES (27, 'trace_type', 'dictData.trace.user', '3 REPLACE INTO `sys_dict_data` VALUES (28, 'sys_job_save_log', 'dictData.jobSaveLog.no', '0', 8, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); REPLACE INTO `sys_dict_data` VALUES (29, 'sys_job_save_log', 'dictData.jobSaveLog.yes', '1', 9, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); REPLACE INTO `sys_dict_data` VALUES (30, 'ne_host_type', 'dictData.ne_host_type.redis', 'redis', 2, '', 'magenta', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -REPLACE INTO `sys_dict_data` VALUES (31, 'alarm_status', 'dictData.alarmStatus.history', '0', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -REPLACE INTO `sys_dict_data` VALUES (32, 'alarm_status', 'dictData.alarmStatus.active', '1', 2, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO `sys_dict_data` VALUES (31, 'alarm_status', 'dictData.alarmStatus.history', 'Clear', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO `sys_dict_data` VALUES (32, 'alarm_status', 'dictData.alarmStatus.active', 'Active', 2, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); REPLACE INTO `sys_dict_data` VALUES (33, 'sys_role_datascope', 'dictData.datascope.all', '1', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); REPLACE INTO `sys_dict_data` VALUES (34, 'sys_role_datascope', 'dictData.datascope.custom', '2', 2, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); REPLACE INTO `sys_dict_data` VALUES (35, 'sys_role_datascope', 'dictData.datascope.dept', '3', 3, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); REPLACE INTO `sys_dict_data` VALUES (36, 'sys_role_datascope', 'dictData.datascope.deptAndChid', '4', 4, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); REPLACE INTO `sys_dict_data` VALUES (37, 'sys_role_datascope', 'dictData.datascope.self', '5', 5, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -REPLACE INTO `sys_dict_data` VALUES (38, 'active_alarm_type', 'dictData.active_alarm_type.communication', '1', 1, '', 'gold', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -REPLACE INTO `sys_dict_data` VALUES (39, 'active_alarm_type', 'dictData.active_alarm_type.equipment', '2', 2, '', 'cyan', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -REPLACE INTO `sys_dict_data` VALUES (40, 'active_alarm_type', 'dictData.active_alarm_type.processing', '3', 3, '', 'blue ', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -REPLACE INTO `sys_dict_data` VALUES (41, 'active_alarm_type', 'dictData.active_alarm_type.environmental', '4', 4, '', 'yellow', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -REPLACE INTO `sys_dict_data` VALUES (42, 'active_alarm_type', 'dictData.active_alarm_type.qualityOfService', '5', 5, '', 'purple', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -REPLACE INTO `sys_dict_data` VALUES (43, 'active_clear_type', 'dictData.active_clear_type.notCleared', '0', 0, '', 'processing', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -REPLACE INTO `sys_dict_data` VALUES (44, 'active_clear_type', 'dictData.active_clear_type.auto', '1', 1, '', 'gold', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -REPLACE INTO `sys_dict_data` VALUES (45, 'active_clear_type', 'dictData.active_clear_type.hand', '2', 2, '', 'success', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -REPLACE INTO `sys_dict_data` VALUES (46, 'active_ack_state', 'dictData.active_ack_state.unconfirmed', '0', 0, '', 'processing', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -REPLACE INTO `sys_dict_data` VALUES (47, 'active_ack_state', 'dictData.active_ack_state.confirmed', '1', 1, '', 'success', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -REPLACE INTO `sys_dict_data` VALUES (48, 'active_alarm_severity', 'dictData.active_alarm_severity.critical', '1', 1, '', 'gold', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -REPLACE INTO `sys_dict_data` VALUES (49, 'active_alarm_severity', 'dictData.active_alarm_severity.major', '2', 2, '', 'cyan', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -REPLACE INTO `sys_dict_data` VALUES (50, 'active_alarm_severity', 'dictData.active_alarm_severity.minor', '3', 3, '', 'blue ', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -REPLACE INTO `sys_dict_data` VALUES (51, 'active_alarm_severity', 'dictData.active_alarm_severity.warning', '4', 4, '', 'yellow', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -REPLACE INTO `sys_dict_data` VALUES (52, 'active_alarm_severity', 'dictData.active_alarm_severity.event', '5', 5, '', 'purple', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO `sys_dict_data` VALUES (38, 'active_alarm_type', 'dictData.active_alarm_type.communication', 'CommunicationAlarm', 1, '', 'gold', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO `sys_dict_data` VALUES (39, 'active_alarm_type', 'dictData.active_alarm_type.equipment', 'EquipmentAlarm', 2, '', 'cyan', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO `sys_dict_data` VALUES (40, 'active_alarm_type', 'dictData.active_alarm_type.processing', 'ProcessingFailure', 3, '', 'blue ', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO `sys_dict_data` VALUES (41, 'active_alarm_type', 'dictData.active_alarm_type.environmental', 'EnvironmentalAlarm', 4, '', 'yellow', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO `sys_dict_data` VALUES (42, 'active_alarm_type', 'dictData.active_alarm_type.qualityOfService', 'QualityOfServiceAlarm', 5, '', 'purple', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO `sys_dict_data` VALUES (43, 'active_clear_type', 'dictData.active_clear_type.notCleared', 'NotClear', 0, '', 'processing', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO `sys_dict_data` VALUES (44, 'active_clear_type', 'dictData.active_clear_type.auto', 'AutoClear', 1, '', 'gold', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO `sys_dict_data` VALUES (45, 'active_clear_type', 'dictData.active_clear_type.hand', 'ManualClear', 2, '', 'success', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO `sys_dict_data` VALUES (46, 'active_ack_state', 'dictData.active_ack_state.unconfirmed', 'NotAck', 0, '', 'processing', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO `sys_dict_data` VALUES (47, 'active_ack_state', 'dictData.active_ack_state.confirmed', 'Ack', 1, '', 'success', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO `sys_dict_data` VALUES (48, 'active_alarm_severity', 'dictData.active_alarm_severity.critical', 'Critical', 1, '', 'gold', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO `sys_dict_data` VALUES (49, 'active_alarm_severity', 'dictData.active_alarm_severity.major', 'Major', 2, '', 'cyan', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO `sys_dict_data` VALUES (50, 'active_alarm_severity', 'dictData.active_alarm_severity.minor', 'Minor', 3, '', 'blue ', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO `sys_dict_data` VALUES (51, 'active_alarm_severity', 'dictData.active_alarm_severity.warning', 'Warning', 4, '', 'yellow', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO `sys_dict_data` VALUES (52, 'active_alarm_severity', 'dictData.active_alarm_severity.event', 'Event', 5, '', 'purple', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); REPLACE INTO `sys_dict_data` VALUES (53, 'index_status', 'dictType.index_status.normal', 'normal', 1, '#91cc75', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); REPLACE INTO `sys_dict_data` VALUES (54, 'index_status', 'dictType.index_status.abnormal', 'abnormal', 2, '#ee6666', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); REPLACE INTO `sys_dict_data` VALUES (55, 'cdr_sip_code', 'dictData.cdr_sip_code.200', '200', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); @@ -98,9 +98,9 @@ REPLACE INTO `sys_dict_data` VALUES (65, 'ue_auth_code', 'dictData.ue_auth_code. REPLACE INTO `sys_dict_data` VALUES (66, 'ue_auth_code', 'dictData.ue_auth_code.005', '005', 5, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); REPLACE INTO `sys_dict_data` VALUES (67, 'ue_auth_code', 'dictData.ue_auth_code.006', '006', 6, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); REPLACE INTO `sys_dict_data` VALUES (68, 'ue_auth_code', 'dictData.ue_auth_code.007', '007', 7, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -REPLACE INTO `sys_dict_data` VALUES (69, 'ue_event_type', 'dictData.ue_event_type.auth', 'auth-result', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -REPLACE INTO `sys_dict_data` VALUES (70, 'ue_event_type', 'dictData.ue_event_type.detach', 'detach', 2, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -REPLACE INTO `sys_dict_data` VALUES (71, 'ue_event_type', 'dictData.ue_event_type.state', 'cm-state', 3, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO `sys_dict_data` VALUES (69, 'ue_event_type', 'dictData.ue_event_type.auth', 'Auth', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO `sys_dict_data` VALUES (70, 'ue_event_type', 'dictData.ue_event_type.detach', 'Detach', 2, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO `sys_dict_data` VALUES (71, 'ue_event_type', 'dictData.ue_event_type.state', 'CM', 3, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); REPLACE INTO `sys_dict_data` VALUES (72, 'ue_event_cm_state', 'dictData.ue_event_cm_state.connected', '1', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); REPLACE INTO `sys_dict_data` VALUES (73, 'ue_event_cm_state', 'dictData.ue_event_cm_state.idle', '2', 2, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); REPLACE INTO `sys_dict_data` VALUES (74, 'ue_event_cm_state', 'dictData.ue_event_cm_state.inactive', '3', 3, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); @@ -199,6 +199,10 @@ REPLACE INTO `sys_dict_data` VALUES (166, 'cdr_sip_code_cause', 'dictData.cdr_si REPLACE INTO `sys_dict_data` VALUES (167, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.606', '606', 22, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); REPLACE INTO `sys_dict_data` VALUES (168, 'trace_interfaces', 'dictData.trace_interfaces.14', 'N14', 14, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); REPLACE INTO `sys_dict_data` VALUES (169, 'trace_interfaces', 'dictData.trace_interfaces.5', 'N5', 5, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO `sys_dict_data` VALUES (170, 'sys_user_type', 'dictData.sys_user_type.system', 'System', 1, '', 'default', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO `sys_dict_data` VALUES (171, 'sys_user_type', 'dictData.sys_user_type.ldap', 'LDAP', 2, '', 'lime', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO `sys_dict_data` VALUES (172, 'sys_user_type', 'dictData.sys_user_type.smtp', 'SMTP', 3, '', 'magenta', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +REPLACE INTO `sys_dict_data` VALUES (173, 'sys_user_type', 'dictData.sys_user_type.oauth2', 'OAuth2', 4, '', 'gold', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); SET FOREIGN_KEY_CHECKS = 1; diff --git a/build/database/std/upgrade/upg_sys_dict_type.sql b/build/database/std/upgrade/upg_sys_dict_type.sql index baa43888..0dc114a0 100644 --- a/build/database/std/upgrade/upg_sys_dict_type.sql +++ b/build/database/std/upgrade/upg_sys_dict_type.sql @@ -31,6 +31,7 @@ REPLACE INTO `sys_dict_type` VALUES (5, 'dictType.sys_job_group', 'sys_job_group REPLACE INTO `sys_dict_type` VALUES (6, 'dictType.sys_yes_no', 'sys_yes_no', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_yes_no_remark'); REPLACE INTO `sys_dict_type` VALUES (9, 'dictType.sys_oper_type', 'sys_oper_type', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_oper_type_remark'); REPLACE INTO `sys_dict_type` VALUES (10, 'dictType.sys_common_status', 'sys_common_status', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_common_status_remark'); +REPLACE INTO `sys_dict_type` VALUES (11, 'dictType.sys_user_type', 'sys_user_type', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); REPLACE INTO `sys_dict_type` VALUES (50, 'dictType.trace_type', 'trace_type', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.trace_type_remark'); REPLACE INTO `sys_dict_type` VALUES (51, 'dictType.alarm_status', 'alarm_status', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.alarm_status_remark'); REPLACE INTO `sys_dict_type` VALUES (52, 'dictType.ne_version_status', 'ne_version_status', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.ne_version_status_remark'); diff --git a/build/database/std/upgrade/upg_sys_i18n.sql b/build/database/std/upgrade/upg_sys_i18n.sql index 625f533a..45033918 100644 --- a/build/database/std/upgrade/upg_sys_i18n.sql +++ b/build/database/std/upgrade/upg_sys_i18n.sql @@ -556,7 +556,7 @@ REPLACE INTO `sys_i18n` VALUES (541, 'dictData.cdr_sip_code.404', '404 找不到 REPLACE INTO `sys_i18n` VALUES (542, 'dictData.cdr_sip_code.487', '487 请求已终止', '487 Request Terminated'); REPLACE INTO `sys_i18n` VALUES (543, 'dictData.cdr_sip_code.503', '503 服务不可用', '503 Service Unavailable'); REPLACE INTO `sys_i18n` VALUES (544, 'dictData.cdr_sip_code.504', '504 服务器超时', '504 Server Timeout'); -REPLACE INTO `sys_i18n` VALUES (545, 'dictData.cdr_sip_code.603', '603 下降', '603 Decline'); +REPLACE INTO `sys_i18n` VALUES (545, 'dictData.cdr_sip_code.603', '603 拒绝', '603 Decline'); REPLACE INTO `sys_i18n` VALUES (546, 'dictData.cdr_sip_code.606', '606 不可接受', '606 Not Acceptable'); REPLACE INTO `sys_i18n` VALUES (547, 'cache.name.token', '用户令牌', 'User Token'); REPLACE INTO `sys_i18n` VALUES (548, 'cache.name.sys_config', '参数管理', 'Parameters Management'); @@ -744,13 +744,13 @@ REPLACE INTO `sys_i18n` VALUES (729, 'dictData.cdr_sip_code_cause.200', '正常 REPLACE INTO `sys_i18n` VALUES (730, 'dictData.cdr_sip_code_cause.202', '申请已被接受处理,但尚未完成 ', 'The request has been accepted for processing, but it hasn it completed yet'); REPLACE INTO `sys_i18n` VALUES (731, 'dictData.cdr_sip_code_cause.302', '因其他原因呼叫失败', 'Call failure for other reason'); REPLACE INTO `sys_i18n` VALUES (732, 'dictData.cdr_sip_code_cause.402', '因其他原因呼叫失败', 'Call failure for other reason'); -REPLACE INTO `sys_i18n` VALUES (733, 'dictData.cdr_sip_code_cause.403', '拒绝 MO 用户', 'MO User Rejected'); -REPLACE INTO `sys_i18n` VALUES (734, 'dictData.cdr_sip_code_cause.404', 'MT 用户离线', 'MT User Offline'); +REPLACE INTO `sys_i18n` VALUES (733, 'dictData.cdr_sip_code_cause.403', '拒接主叫用户', 'MO User Rejected'); +REPLACE INTO `sys_i18n` VALUES (734, 'dictData.cdr_sip_code_cause.404', '被叫用户离线', 'MT User Offline'); REPLACE INTO `sys_i18n` VALUES (735, 'dictData.cdr_sip_code_cause.480', '因其他原因呼叫失败', 'Call failure for other reason'); REPLACE INTO `sys_i18n` VALUES (736, 'dictData.cdr_sip_code_cause.481', '电话无法拨出', 'Call cannot be dialed'); REPLACE INTO `sys_i18n` VALUES (737, 'dictData.cdr_sip_code_cause.482', '闪断', 'Flashback'); -REPLACE INTO `sys_i18n` VALUES (738, 'dictData.cdr_sip_code_cause.486', 'MT 用户忙', 'MT User Busy'); -REPLACE INTO `sys_i18n` VALUES (739, 'dictData.cdr_sip_code_cause.487', 'MO 用户断线', 'MO User Disconnected'); +REPLACE INTO `sys_i18n` VALUES (738, 'dictData.cdr_sip_code_cause.486', '被叫用户忙', 'MT User Busy'); +REPLACE INTO `sys_i18n` VALUES (739, 'dictData.cdr_sip_code_cause.487', '主叫挂断', 'MO User Disconnected'); REPLACE INTO `sys_i18n` VALUES (740, 'dictData.cdr_sip_code_cause.408', '服务器等待响应的时间过长', 'The server waits too long for a response'); REPLACE INTO `sys_i18n` VALUES (741, 'dictData.cdr_sip_code_cause.488', '媒体详细信息与服务器支持的内容不匹配', 'Media details didn’t match what the server supports'); REPLACE INTO `sys_i18n` VALUES (742, 'dictData.cdr_sip_code_cause.489', '因其他原因呼叫失败', 'Call failure for other reason'); @@ -758,7 +758,7 @@ REPLACE INTO `sys_i18n` VALUES (743, 'dictData.cdr_sip_code_cause.500', '服务 REPLACE INTO `sys_i18n` VALUES (744, 'dictData.cdr_sip_code_cause.503', '服务器超载或因维护而停机,无法处理呼叫', 'The server is overloaded or down for maintenance and can it process the call'); REPLACE INTO `sys_i18n` VALUES (745, 'dictData.cdr_sip_code_cause.504', '服务器尝试以您的名义与另一台服务器通信,但未及时收到回复,并超时了', 'The server tried to talk to another server on your behalf, didn’t get a reply in time, and timed out'); REPLACE INTO `sys_i18n` VALUES (746, 'dictData.cdr_sip_code_cause.580', '因其他原因呼叫失败', 'Call failure for other reason'); -REPLACE INTO `sys_i18n` VALUES (747, 'dictData.cdr_sip_code_cause.603', 'MT 明确拒绝通话', 'MT explicitly rejected the call'); +REPLACE INTO `sys_i18n` VALUES (747, 'dictData.cdr_sip_code_cause.603', '被叫拒接', 'MT explicitly rejected the call'); REPLACE INTO `sys_i18n` VALUES (748, 'dictData.cdr_sip_code_cause.606', '呼叫已到达用户设备,但会话设置的某些部分不可接受', 'The call reached the user’s device, but some parts of the session setup weren it acceptable'); REPLACE INTO `sys_i18n` VALUES (749, 'dictType.cdr_sip_code_cause', 'IMS-Voice-SIP响应代码类别类型原因', 'IMS-Voice-SIP Response Code Category Type Cause'); REPLACE INTO `sys_i18n` VALUES (750, 'job.backup_export_log', '备份-日志数据定期导出', 'Backup-Periodic export of Log Data'); @@ -769,5 +769,35 @@ REPLACE INTO `sys_i18n` VALUES (754, 'job.ne_alarm_state_check_license', '网元 REPLACE INTO `sys_i18n` VALUES (755, 'job.ne_alarm_state_check_license_remark', '检查网元的License是否即将到期,在出现过阈值时发出警报。\r\n\r\nAlarm type:\r\nCommunicationAlarm=1\r\nEquipmentAlarm=2\r\nProcessingFailure=3\r\nEnvironmentalAlarm=4\r\nQualityOfServiceAlarm=5\r\n\r\nSeverity:\r\nCritical=1\r\nMajor=2\r\nMinor=3\r\nWarning=4\r\n\r\nAddInfo: 告警补充信息\r\ndayLt: 天数小于,默认30天', 'Checks if the network element is License is about to expire and sends an alert if a threshold is crossed.\n\nAlarm type:\nCommunicationAlarm=1\nEquipmentAlarm=2\nProcessingFailure=3\nEnvironmentalAlarm=4\nQualityOfServiceAlarm=5\n\nSeverity:\nCritical=1\nMajor=2\nMinor=3\nWarning=4\r\n\r\nAddInfo: Additional information on alarms\r\ndayLt: Days less than, default 30 days'); REPLACE INTO `sys_i18n` VALUES (756, 'dictData.trace_interfaces.14', 'N14', 'N14'); REPLACE INTO `sys_i18n` VALUES (757, 'dictData.trace_interfaces.5', 'N5', 'N5'); +REPLACE INTO `sys_i18n` VALUES (758, "alarm.export.alarmCode", "告警编码", "Alarm Code"); +REPLACE INTO `sys_i18n` VALUES (759, "config.sys.user.fristPasswdChangeRemark", "关闭改为false 开启改为true, 建议同时设置密码有效期", "Off to false On to true, it is recommended to set the password expiration date at the same time."); +REPLACE INTO `sys_i18n` VALUES (760, "menu.perf.kpiIMSOverview", "语音数据概览", "Voice Data Overview"); +REPLACE INTO `sys_i18n` VALUES (761, "dictType.sys_user_type", "用户类型", "User Type"); +REPLACE INTO `sys_i18n` VALUES (762, "dictData.sys_user_type.system", "系统", "System"); +REPLACE INTO `sys_i18n` VALUES (763, "dictData.sys_user_type.ldap", "LDAP", "LDAP"); +REPLACE INTO `sys_i18n` VALUES (764, "dictData.sys_user_type.smtp", "SMTP", "SMTP"); +REPLACE INTO `sys_i18n` VALUES (765, "dictData.sys_user_type.oauth2", "OAuth2", "OAuth2"); +REPLACE INTO `sys_i18n` VALUES (766, "user.export.userType", "用户类型", "User Type"); +REPLACE INTO `sys_i18n` VALUES (767, "menu.system.loginSource", "第三方登录认证", "Third Party Login Source"); +REPLACE INTO `sys_i18n` VALUES (768, "log.operate.title.sysLoginSource", "认证源", "Login Source"); + +REPLACE INTO `sys_i18n` VALUES (2000, 'menu.psap.agent', '座席', 'Agent'); +REPLACE INTO `sys_i18n` VALUES (2001, 'menu.psap.agent.callings', '并行话务', 'Calling Information'); +REPLACE INTO `sys_i18n` VALUES (2002, 'menu.psap.agent.callback', '回拨管理', 'Callback Management'); +REPLACE INTO `sys_i18n` VALUES (2003, 'callback.status.NEW', '新建', 'New'); +REPLACE INTO `sys_i18n` VALUES (2004, 'callback.status.IN_PROGRESS', '处理中', 'In Progress'); +REPLACE INTO `sys_i18n` VALUES (2005, 'callback.status.NO_ANSWER_1', '未应答1', 'No Answer 1'); +REPLACE INTO `sys_i18n` VALUES (2006, 'callback.status.NO_ANSWER_2', '未应答2', 'No Answer 2'); +REPLACE INTO `sys_i18n` VALUES (2007, 'callback.status.TIMEOUT', '超时', 'Timeout'); +REPLACE INTO `sys_i18n` VALUES (2008, 'callback.status.PENDING', '挂起', 'Pending'); +REPLACE INTO `sys_i18n` VALUES (2009, 'callback.status.CLOSED', '关闭', 'Closed'); +REPLACE INTO `sys_i18n` VALUES (2010, 'job.export.cdr.mf', '定期导出MF话单', 'Periodic Export of MF Call Records'); +REPLACE INTO `sys_i18n` VALUES (2011, 'job.psap.ticket.monitor', '回拨工单监控', 'Callback Ticket Monitoring'); +REPLACE INTO `sys_i18n` VALUES (2012, 'menu.omc.cdr', '话单', 'Call Records'); +REPLACE INTO `sys_i18n` VALUES (2013, 'menu.omc.cdr.mf', '紧急呼叫话单', 'Emergency Call Records'); +REPLACE INTO `sys_i18n` VALUES (2014, 'menu.omc.cdr.crbt', '彩铃话单', 'Color Ring Back Tone Records'); +REPLACE INTO `sys_i18n` VALUES (2015, 'menu.omc.cdr.mms', '彩信话单', 'Multimedia Message Service Records'); +REPLACE INTO `sys_i18n` VALUES (2016, 'menu.ue.cbc.cbe', '预警广播', 'Early Warning Broadcast'); +REPLACE INTO `sys_i18n` VALUES (2017, 'log.operate.title.cbcMessage', '预警广播', 'Early Warning Broadcast'); -- Dump completed on 2025-02-14 15:26:56 diff --git a/build/database/std/upgrade/upg_sys_job.sql b/build/database/std/upgrade/upg_sys_job.sql index 9019ce6f..9752e55c 100644 --- a/build/database/std/upgrade/upg_sys_job.sql +++ b/build/database/std/upgrade/upg_sys_job.sql @@ -52,9 +52,9 @@ REPLACE INTO `sys_job` VALUES (10, 'job.delete_ne_config_backup', 'SYSTEM', 'del REPLACE INTO `sys_job` VALUES (11, 'job.delete_alarm_record', 'SYSTEM', 'delete_alarm_record', '{\"storeDays\":7}', '0 10 0 * * ?', '3', '0', '1', '1', 'system', 1698478134839, 'system', 1698478134839, 'job.delete_alarm_record_remark'); REPLACE INTO `sys_job` VALUES (12, 'job.delete_kpi_record', 'SYSTEM', 'delete_kpi_record', '{\"storeDays\":7,\"neList\":[\"IMS\",\"AMF\",\"UDM\",\"UPF\",\"MME\",\"SMSC\",\"SMF\",\"MME\"]}', '0 20 0 * * ?', '3', '0', '1', '1', 'system', 1698478134839, 'system', 1698478134839, 'job.delete_kpi_record_remark'); -REPLACE INTO `sys_job` VALUES (20, 'job.ne_alarm_state_check', 'SYSTEM', 'ne_alarm_state_check', '{\"alarmTitle\":\"NE State Check Alarm\",\"alarmType\":\"2\",\"origSeverity\":\"2\",\"specificProblem\":\"alarm cause: the system state of target NE has not been received\",\"specificProblemId\":\"AC10000\",\"addInfo\":\"\"}', '0/30 * * * * ?', '3', '0', '1', '0', 'system', 1698478134839, 'system', 1698478134839, 'job.ne_alarm_state_check_remark'); -REPLACE INTO `sys_job` VALUES (21, 'job.ne_alarm_state_check_cmd', 'SYSTEM', 'ne_alarm_state_check_cmd', '{\"alarmTitle\":\"NE State Check Alarm CPU/Menory/Disk\",\"alarmType\":\"2\",\"origSeverity\":\"2\",\"specificProblem\":\"Alarm Cause: CPU/Menory/Disk status received from target NE reaches the threshold\",\"specificProblemId\":\"AC10100\",\"addInfo\":\"\",\"cpuUseGt\":70,\"memUseGt\":70,\"diskUseGt\":70}', '0/15 * * * * ?', '3', '0', '1', '0', 'system', 1698478134839, 'system', 1698478134839, 'job.ne_alarm_state_check_cmd_remark'); -REPLACE INTO `sys_job` VALUES (22, 'job.ne_alarm_state_check_license', 'SYSTEM', 'ne_alarm_state_check_license', '{\"alarmTitle\":\"NE State Check Alarm License\",\"alarmType\":\"2\",\"origSeverity\":\"2\",\"specificProblem\":\"Alarm Cause: License received from target NE is about to expire\",\"specificProblemId\":\"AC10200\",\"addInfo\":\"\",\"dayLt\":7}', '0 5 0 * * ?', '3', '0', '1', '0', 'system', 1698478134839, 'system', 1698478134839, 'job.ne_alarm_state_check_license_remark'); +REPLACE INTO `sys_job` VALUES (20, 'job.ne_alarm_state_check', 'SYSTEM', 'ne_alarm_state_check', '{\"alarmTitle\":\"NE State Check Alarm\",\"alarmType\":\"EquipmentAlarm\",\"origSeverity\":\"Major\",\"specificProblem\":\"alarm cause: the system state of target NE has not been received\",\"specificProblemId\":\"AC10000\",\"addInfo\":\"\"}', '0/30 * * * * ?', '3', '0', '1', '0', 'system', 1698478134839, 'system', 1698478134839, 'job.ne_alarm_state_check_remark'); +REPLACE INTO `sys_job` VALUES (21, 'job.ne_alarm_state_check_cmd', 'SYSTEM', 'ne_alarm_state_check_cmd', '{\"alarmTitle\":\"NE State Check Alarm CPU/Menory/Disk\",\"alarmType\":\"EquipmentAlarm\",\"origSeverity\":\"Major\",\"specificProblem\":\"Alarm Cause: CPU/Menory/Disk status received from target NE reaches the threshold\",\"specificProblemId\":\"AC10100\",\"addInfo\":\"\",\"cpuUseGt\":70,\"memUseGt\":70,\"diskUseGt\":70}', '0/15 * * * * ?', '3', '0', '1', '0', 'system', 1698478134839, 'system', 1698478134839, 'job.ne_alarm_state_check_cmd_remark'); +REPLACE INTO `sys_job` VALUES (22, 'job.ne_alarm_state_check_license', 'SYSTEM', 'ne_alarm_state_check_license', '{\"alarmTitle\":\"NE State Check Alarm License\",\"alarmType\":\"EquipmentAlarm\",\"origSeverity\":\"Major\",\"specificProblem\":\"Alarm Cause: License received from target NE is about to expire\",\"specificProblemId\":\"AC10200\",\"addInfo\":\"\",\"dayLt\":7}', '0 5 0 * * ?', '3', '0', '1', '0', 'system', 1698478134839, 'system', 1698478134839, 'job.ne_alarm_state_check_license_remark'); REPLACE INTO `sys_job` VALUES (30, 'job.backup_remove_file', 'SYSTEM', 'backup_remove_file', '[{\"backupPath\":\"/udm_data/auth\",\"storeDays\":30},{\"backupPath\":\"/udm_data/sub\",\"storeDays\":30},{\"backupPath\":\"/udm_data/voip\",\"storeDays\":30},{\"backupPath\":\"/udm_data/volte\",\"storeDays\":30},{\"backupPath\":\"/cdr/ims_cdr_event\",\"storeDays\":30},{\"backupPath\":\"/cdr/smsc_cdr_event\",\"storeDays\":30},{\"backupPath\":\"/cdr/smf_cdr_event\",\"storeDays\":30},{\"backupPath\":\"/cdr/sgwc_cdr_event\",\"storeDays\":30},{\"backupPath\":\"/log/sys_log_operate\",\"storeDays\":30,\"storeNum\":7},{\"backupPath\":\"/log/sys_log_login\",\"storeDays\":30,\"storeNum\":7}]', '0 10 0 * * ?', '3', '0', '1', '1', 'system', 1698478134839, 'system', 1698478134839, 'job.backup_remove_file_remark'); REPLACE INTO `sys_job` VALUES (31, 'job.backup_export_udm', 'SYSTEM', 'backup_export_udm', '{\"dataType\":[\"auth\",\"sub\",\"voip\",\"volte\"],\"fileType\":\"txt\"}', '0 35 0 * * ?', '3', '0', '1', '1', 'system', 1698478134839, 'supervisor', 1745481169354, 'job.backup_export_udm_remark'); diff --git a/build/database/std/upgrade/upg_sys_login_source.sql b/build/database/std/upgrade/upg_sys_login_source.sql new file mode 100644 index 00000000..e68e205a --- /dev/null +++ b/build/database/std/upgrade/upg_sys_login_source.sql @@ -0,0 +1,23 @@ +-- +-- Table structure for table `sys_login_source` +-- + +CREATE TABLE IF NOT EXISTS `sys_login_source` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID', + `uid` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'UID 16位长度字符串', + `type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '认证类型 LDAP SMTP OAuth2', + `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '认证名称', + `icon` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '图标', + `active_flag` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '激活标记(0未激活 1激活)', + `sync_flag` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '同步标记(0未同步 1同步)', + `config` text COLLATE utf8mb4_general_ci COMMENT '认证配置', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` bigint NULL DEFAULT 0 COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` bigint NULL DEFAULT 0 COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注', + PRIMARY KEY (`id`) USING BTREE, + KEY `idx_ls_type_name` (`type`,`name`) USING BTREE COMMENT '认证类型_认证名称' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='系统_认证源表'; + +-- Dump completed on 2025-08-05 16:20:56 diff --git a/build/database/std/upgrade/upg_sys_menu.sql b/build/database/std/upgrade/upg_sys_menu.sql index b083b531..6f2770ed 100644 --- a/build/database/std/upgrade/upg_sys_menu.sql +++ b/build/database/std/upgrade/upg_sys_menu.sql @@ -72,6 +72,7 @@ REPLACE INTO `sys_menu` VALUES (105, 'menu.security.post', 2113, 6, 'post', 'sys REPLACE INTO `sys_menu` VALUES (106, 'menu.system.dictType', 1, 30, 'dict', 'system/dict/index', '1', '1', 'M', '1', '1', 'system:dict:list', 'icon-tubiaoku', '0', 'system', 1728641403588,'system', 1728641403588, 'menu.system.dictTypeRemark'); REPLACE INTO `sys_menu` VALUES (107, 'menu.system.dictData', 1, 31, 'dict/inline/data/:dictId', 'system/dict/data', '1', '1', 'M', '0', '1', 'system:dict:data', '#', '0', 'system', 1728641403588,'system', 1728641403588, 'menu.system.dictDataRemark'); REPLACE INTO `sys_menu` VALUES (108, 'menu.system.paramSet', 1, 59, 'config', 'system/config/index', '1', '1', 'M', '1', '1', 'system:config:list', 'icon-gongnengjieshao', '0', 'system', 1728641403588,'system', 1728641403588, 'menu.system.paramSetRemark'); +REPLACE INTO `sys_menu` VALUES (109, 'menu.system.loginSource', 2113, 12, 'login-source', 'system/login-source/index', '1', '1', 'M', '1', '1', 'system:loginSource:list', 'icon-xiangmuchengyuan', '0', 'system', 1728641403588,'system', 1728641403588, ''); REPLACE INTO `sys_menu` VALUES (111, 'menu.system.systemLog', 1, 11, 'log', '', '1', '1', 'D', '0', '0', '', '#', '0', 'system', 1728641403588,'system', 1728641403588, 'menu.system.systemLogRemark'); REPLACE INTO `sys_menu` VALUES (112, 'menu.system.systemInfo', 1, 5, 'system-info', 'monitor/system/info', '1', '1', 'M', '1', '1', 'monitor:system:info', 'icon-fuzhidaima', '0', 'system', 1728641403588,'system', 1728641403588, 'menu.system.systemInfoRemark'); REPLACE INTO `sys_menu` VALUES (113, 'menu.system.cacheInfo', 1, 8, 'cache-info', 'monitor/cache/info', '1', '1', 'M', '1', '1', 'monitor:cache:info', 'icon-gongnengjieshao', '0', 'system', 1728641403588,'system', 1728641403588, 'menu.system.cacheInfoRemark'); @@ -134,6 +135,10 @@ REPLACE INTO `sys_menu` VALUES (1053, 'menu.common.edit', 116, 3, '#', '', '1', REPLACE INTO `sys_menu` VALUES (1054, 'menu.common.delete', 116, 4, '#', '', '1', '1', 'B', '1', '1', 'monitor:job:remove', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); REPLACE INTO `sys_menu` VALUES (1055, 'menu.common.edit', 116, 5, '#', '', '1', '1', 'B', '1', '1', 'monitor:job:changeStatus', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); REPLACE INTO `sys_menu` VALUES (1056, 'menu.common.export', 116, 6, '#', '', '1', '1', 'B', '1', '1', 'monitor:job:export', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +REPLACE INTO `sys_menu` VALUES (1057, 'menu.common.query', 109, 1, '#', '', '1', '1', 'B', '1', '1', 'system:loginSource:query', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +REPLACE INTO `sys_menu` VALUES (1058, 'menu.common.add', 109, 2, '#', '', '1', '1', 'B', '1', '1', 'system:loginSource:add', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +REPLACE INTO `sys_menu` VALUES (1059, 'menu.common.edit', 109, 3, '#', '', '1', '1', 'B', '1', '1', 'system:loginSource:edit', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +REPLACE INTO `sys_menu` VALUES (1060, 'menu.common.delete', 109, 4, '#', '', '1', '1', 'B', '1', '1', 'system:loginSource:remove', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); REPLACE INTO `sys_menu` VALUES (2000, 'menu.neData.udmAuth', 5, 1, 'udm-auth', 'neData/udm-auth/index', '1', '1', 'M', '1', '1', 'udm#auth:index', 'icon-xiangmuchengyuan', '0', 'system', 1728641403588,'system', 1728641403588, ''); REPLACE INTO `sys_menu` VALUES (2001, 'menu.neData.udmSub', 5, 3, 'udm-sub', 'neData/udm-sub/index', '1', '1', 'M', '1', '1', 'udm#sub:index', 'icon-xiangmuchengyuan', '0', 'system', 1728641403588,'system', 1728641403588, ''); REPLACE INTO `sys_menu` VALUES (2002, 'menu.neData.udmVOIP', 5, 5, 'udm-voip', 'neData/udm-voip/index', '1', '0', 'M', '1', '1', 'udm#voip:list', 'icon-xiangmuchengyuan', '0', 'system', 1728641403588,'system', 1728641403588, ''); @@ -171,8 +176,8 @@ REPLACE INTO `sys_menu` VALUES (2106, 'menu.perf.kpiKeyTarget', 2099, 12, 'kpiKe REPLACE INTO `sys_menu` VALUES (2107, 'menu.mml', 0, 8, 'mmlManage', '', '1', '0', 'D', '1', '1', '', 'icon-zhizuoliucheng', '0', 'system', 1728641403588,'system', 1728641403588, 'menu.mmlRemark'); REPLACE INTO `sys_menu` VALUES (2108, 'menu.mml.ne', 2107, 1, 'neOperate', 'mmlManage/neOperate/index', '1', '1', 'M', '1', '1', 'mmlManage:neOperate:index', 'icon-huizhiguize', '0', 'system', 1728641403588,'system', 1728641403588, 'menu.mml.neRemark'); REPLACE INTO `sys_menu` VALUES (2109, 'menu.mml.udm', 2107, 2, 'udmOperate', 'mmlManage/udmOperate/index', '1', '1', 'M', '1', '1', 'mmlManage:udmOperate:index', 'icon-gonggaodayi', '0', 'system', 1728641403588,'system', 1728641403588, 'menu.mml.udmRemark'); -REPLACE INTO `sys_menu` VALUES (2110, 'menu.mml.set', 2107, 4, 'mmlSet', 'mmlManage/mmlSet/index', '1', '0', 'M', '1', '1', 'mmlManage:mmlSet:index', 'icon-wofaqi', '0', 'system', 1728641403588,'system', 1728641403588, 'menu.mml.setRemark'); -REPLACE INTO `sys_menu` VALUES (2111, 'menu.mml.omc', 2107, 3, 'omcOperate', 'mmlManage/omcOperate/index', '1', '1', 'M', '1', '1', 'mmlManage:omcOperate:index', 'icon-huizhiguize', '0', 'system', 1728641403588,'system', 1728641403588, 'menu.mml.omcRemark'); +REPLACE INTO `sys_menu` VALUES (2110, 'menu.mml.set', 2107, 4, 'mmlSet', 'mmlManage/mmlSet/index', '1', '0', 'M', '0', '0', 'mmlManage:mmlSet:index', 'icon-wofaqi', '0', 'system', 1728641403588,'system', 1728641403588, 'menu.mml.setRemark'); +REPLACE INTO `sys_menu` VALUES (2111, 'menu.mml.omc', 2107, 3, 'omcOperate', 'mmlManage/omcOperate/index', '1', '1', 'M', '0', '0', 'mmlManage:omcOperate:index', 'icon-huizhiguize', '0', 'system', 1728641403588,'system', 1728641403588, 'menu.mml.omcRemark'); REPLACE INTO `sys_menu` VALUES (2112, 'menu.dashboard.sgwcCDR', 2140, 12, 'sgwcCDR', 'dashboard/sgwcCDR/index', '1', '0', 'M', '1', '1', 'sgwc#cdr:index', 'icon-paixu', '0', 'system', 1728641403588,'system', 1728641403588, ''); REPLACE INTO `sys_menu` VALUES (2113, 'menu.security', 0, 14, 'security', '', '1', '0', 'D', '1', '1', '', 'icon-suofang', '0', 'system', 1728641403588,'system', 1728641403588, 'menu.securityRemark'); REPLACE INTO `sys_menu` VALUES (2114, 'menu.system.systemSet', 1, 60, 'setting', 'system/setting/index', '1', '1', 'M', '1', '1', 'system:setting:index', 'icon-piliang', '0', 'system', 1728641403588,'system', 1728641403588, 'menu.system.systemSetRemark'); @@ -180,8 +185,8 @@ REPLACE INTO `sys_menu` VALUES (2115, 'menu.system.systemResource', 1, 6, 'monit REPLACE INTO `sys_menu` VALUES (2116, 'menu.dashboard.smscCDR.content', 2157, 1, '', '', '1', '1', 'B', '1', '1', 'cdr:smsc:content', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); REPLACE INTO `sys_menu` VALUES (2117, 'menu.common.delete', 2140, 1, '', '', '1', '1', 'B', '1', '1', 'cdr:ne:remove', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); REPLACE INTO `sys_menu` VALUES (2118, 'menu.dashboard.smfCDRByIMSI', 2140, 7, 'smfCDRByIMSI', 'dashboard/smfCDRByIMSI/index', '1', '0', 'M', '1', '1', 'smf#cdr:index', 'icon-gerenzhanghu', '0', 'system', 1728641403588,'system', 1728641403588, ''); --- REPLACE INTO `sys_menu` VALUES (2119, 'menu.ueUser.n3iwf', 5, 8, 'n3iwf', 'neUser/n3iwf/index', '1', '0', 'M', '0', '1', 'neUser:n3iwf:index', 'icon-paixu', '0', 'system', 1728641403588,'system', 1728641403588, ''); --- REPLACE INTO `sys_menu` VALUES (2120, 'menu.ueUser.pcf', 5, 9, 'pcf', 'neUser/pcf/index', '1', '0', 'M', '1', '1', 'neUser:pcf:index', 'icon-paixu', '0', 'system', 1728641403588,'system', 1728641403588, ''); +REPLACE INTO `sys_menu` VALUES (2119, 'Alarm Overview', 2129, 6, 'alarm-overview', 'faultManage/alarm-overview/index', '1', '1', 'M', '1', '1', 'faultManage:active-overview:index', 'icon-wenjian', '0', 'system', 1728641403588,'system', 1728641403588, ''); +REPLACE INTO `sys_menu` VALUES (2120, 'DashboardV1', 2131, 8, 'dashboardV1', 'dashboard/overview/index', '1', '0', 'M', '1', '1', 'dashboard:overview:index', 'icon-paixu', '0', 'system', 1728641403588,'system', 1728641403588, ''); REPLACE INTO `sys_menu` VALUES (2121, 'menu.system.user.editRole', 100, 8, '', '', '1', '1', 'B', '1', '1', 'system:user:editRole', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); REPLACE INTO `sys_menu` VALUES (2122, 'menu.system.setting.i18n', 2114, 1, '', '', '1', '1', 'B', '1', '1', 'system:setting:i18n', '#', '0', 'system', 1728641403588,'system', 1728641403588, 'menu.system.setting.i18nRemark'); REPLACE INTO `sys_menu` VALUES (2123, 'menu.log.neFile', 2089, 9, 'neFile', 'ne/neFile/index', '1', '0', 'M', '1', '1', 'ne:neFile:index', 'icon-tubiaohuizhi', '0', 'system', 1728641403588,'system', 1728641403588, ''); @@ -193,12 +198,13 @@ REPLACE INTO `sys_menu` VALUES (2128, 'menu.monitor.topologyArchitecture', 2130, REPLACE INTO `sys_menu` VALUES (2129, 'menu.alarm', 2087, 20, 'alarm', '', '1', '0', 'D', '1', '1', '', 'icon-jinggao', '0', 'system', 1728641403588,'system', 1728641403588, ''); REPLACE INTO `sys_menu` VALUES (2130, 'menu.topology', 2087, 10, 'topology', '', '1', '0', 'D', '1', '1', '', 'icon-anzhuo', '0', 'system', 1728641403588,'system', 1728641403588, ''); REPLACE INTO `sys_menu` VALUES (2131, 'menu.dashboard', 2087, 15, 'dashboard', '', '1', '0', 'D', '1', '1', '', 'icon-soutubiao', '0', 'system', 1728641403588,'system', 1728641403588, ''); -REPLACE INTO `sys_menu` VALUES (2132, 'menu.dashboard.overview', 2131, 1, 'overview', 'dashboard/overview/index', '1', '0', 'M', '1', '1', 'dashboard:overview:index', 'icon-paixu', '0', 'system', 1728641403588,'system', 1728641403588, ''); +REPLACE INTO `sys_menu` VALUES (2132, 'menu.dashboard.overview', 2131, 1, 'overview', 'dashboard/overview2/index', '1', '0', 'M', '1', '1', 'dashboard:overview:index', 'icon-paixu', '0', 'system', 1728641403588,'system', 1728641403588, ''); REPLACE INTO `sys_menu` VALUES (2133, 'menu.dashboard.imsCDR', 2140, 3, 'imsCDR', 'dashboard/imsCDR/index', '1', '0', 'M', '1', '1', 'ims#cdr:index', 'icon-paixu', '0', 'system', 1728641403588,'system', 1728641403588, ''); REPLACE INTO `sys_menu` VALUES (2135, 'menu.ne.neHost', 4, 15, 'neHost', 'ne/neHost/index', '1', '1', 'M', '1', '0', 'ne:neHost:list', 'icon-fuzhidaima', '0', 'system', 1728641403588,'system', 1728641403588, ''); REPLACE INTO `sys_menu` VALUES (2136, 'menu.ne.neHostCommand', 4, 18, 'neHostCommand', 'ne/neHostCommand/index', '1', '0', 'M', '1', '0', 'ne:neHostCommand:list', 'icon-fuzhidaima', '0', 'system', 1728641403588,'system', 1728641403588, ''); REPLACE INTO `sys_menu` VALUES (2137, 'menu.ne.neInfo', 4, 10, 'neInfo', 'ne/neInfo/index', '1', '0', 'M', '1', '1', 'ne:neInfo:list', 'icon-fuzhidaima', '0', 'system', 1728641403588,'system', 1728641403588, ''); REPLACE INTO `sys_menu` VALUES (2138, 'menu.dashboard.amfUE', 2141, 1, 'amfUE', 'dashboard/amfUE/index', '1', '0', 'M', '1', '1', 'amf#ue:index', 'icon-paixu', '0', 'system', 1728641403588,'system', 1728641403588, ''); +REPLACE INTO `sys_menu` VALUES (2139, 'menu.perf.kpiIMSOverview', 2099, 14, 'dashboard', 'perfManage/overview/index', '1', '0', 'M', '1', '1', 'ims#perfManage:dashboard:index', 'icon-fuzhichenggong', '0', 'system', 1728641403588,'system', 1728641403588, ''); REPLACE INTO `sys_menu` VALUES (2140, 'menu.monitor.cdr', 2089, 10, 'cdr', '', '1', '0', 'D', '1', '1', '', 'icon-tubiaoku', '0', 'system', 1728641403588,'system', 1728641403588, ''); REPLACE INTO `sys_menu` VALUES (2141, 'menu.monitor.event', 2089, 20, 'event', '', '1', '0', 'D', '1', '1', '', 'icon-gengduo', '0', 'system', 1728641403588,'system', 1728641403588, ''); REPLACE INTO `sys_menu` VALUES (2142, 'menu.ne.neQuickSetup', 4, 40, 'neQuickSetup', 'ne/neQuickSetup/index', '1', '1', 'M', '1', '1', 'ne:neQuickSetup:list', 'icon-wofaqi', '0', 'system', 1728641403588,'system', 1728641403588, ''); @@ -230,6 +236,8 @@ REPLACE INTO `sys_menu` VALUES (2167, 'menu.dashboard.overview.imsUeNum', 2132, REPLACE INTO `sys_menu` VALUES (2168, 'menu.dashboard.overview.gnbBase', 2132, 6, '', '', '1', '1', 'B', '1', '1', 'dashboard:overview:gnbBase', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); REPLACE INTO `sys_menu` VALUES (2169, 'menu.dashboard.overview.enbBase', 2132, 8, '', '', '1', '1', 'B', '1', '1', 'dashboard:overview:enbBase', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +REPLACE INTO `sys_menu` VALUES (20000, 'menu.ue.cbc.cbe', 5, 20, 'cbe', 'cbc/cbe/index', '1', '0', 'M', '1', '1', 'cbc#dashboard:cdr:index', 'icon-tubiaoku', '0', 'system', 1711352709786, 'system', 1747796007372, ''); + SET FOREIGN_KEY_CHECKS = 1; -- Dump completed on 2025-02-14 15:26:56 diff --git a/build/database/std/upgrade/upg_sys_role_menu.sql b/build/database/std/upgrade/upg_sys_role_menu.sql index e236b3e4..8733307c 100644 --- a/build/database/std/upgrade/upg_sys_role_menu.sql +++ b/build/database/std/upgrade/upg_sys_role_menu.sql @@ -1,6 +1,3 @@ -SET NAMES utf8mb4; -SET FOREIGN_KEY_CHECKS = 0; - -- ---------------------------- -- Table structure for sys_role_menu -- ---------------------------- @@ -10,12 +7,10 @@ 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; +DELETE FROM `sys_role_menu` WHERE `role_id` IN (2,3,4,5); -- -- 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); @@ -32,6 +27,7 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 103); 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, 109); 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); @@ -68,10 +64,8 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1030); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1032); 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); @@ -83,6 +77,10 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1053); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1054); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1055); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1056); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1057); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1058); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1059); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1060); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2000); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2001); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2002); @@ -90,8 +88,8 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2003); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2004); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2005); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2007); -INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2009); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2008); +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, 2011); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2083); @@ -134,6 +132,7 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2132); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2133); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2137); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2138); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2139); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2140); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2141); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2142); @@ -162,6 +161,7 @@ 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 (2, 20000); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 4); @@ -171,7 +171,6 @@ 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); @@ -179,7 +178,6 @@ 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); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2000); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2001); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2002); @@ -192,6 +190,7 @@ 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, 2011); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2083); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2084); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2086); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2087); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2088); @@ -203,11 +202,12 @@ 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, 2112); 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, 2116); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2118); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2122); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2123); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2126); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2128); @@ -228,22 +228,19 @@ 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, 2162); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2163); 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 (3, 20000); 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); @@ -253,17 +250,18 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (4, 1041); INSERT IGNORE INTO `sys_role_menu` VALUES (4, 1042); INSERT IGNORE INTO `sys_role_menu` VALUES (4, 1044); INSERT IGNORE INTO `sys_role_menu` VALUES (4, 1048); -INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2083); -INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2086); INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2087); INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2088); INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2089); +INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2091); 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, 2112); 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, 2115); INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2116); +INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2123); 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); @@ -277,11 +275,7 @@ 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, 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); @@ -293,10 +287,15 @@ 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, 2126); +INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2128); +INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2130); 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); - -UNLOCK TABLES; +INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2166); +INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2167); +INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2168); +INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2169); -- Dump completed on 2025-02-14 15:26:56 diff --git a/build/database/std/upgrade/upg_sys_user.sql b/build/database/std/upgrade/upg_sys_user.sql index eb89d6b1..d8baa5e8 100644 --- a/build/database/std/upgrade/upg_sys_user.sql +++ b/build/database/std/upgrade/upg_sys_user.sql @@ -1,6 +1,7 @@ -- -- Table structure for table `sys_user` -- + CREATE TABLE IF NOT EXISTS `sys_user` ( `user_id` bigint NOT NULL AUTO_INCREMENT COMMENT '用户ID', `dept_id` bigint NULL DEFAULT 0 COMMENT '部门ID', @@ -11,6 +12,8 @@ CREATE TABLE IF NOT EXISTS `sys_user` ( `sex` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '用户性别(0未选择 1男 2女)', `avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '头像地址', `password` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '密码', + `user_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'System' COMMENT '用户类型(System系统用户)', + `user_source` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '#' COMMENT '用户来源UID (系统#)', `status_flag` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '账号状态(0停用 1正常)', `del_flag` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '删除标记(0存在 1删除)', `password_update_time` bigint NULL DEFAULT 0 COMMENT '密码更新时间', @@ -28,10 +31,6 @@ CREATE TABLE IF NOT EXISTS `sys_user` ( -- ---------------------------- -- COLUMN for sys_user -- ---------------------------- -ALTER TABLE `sys_user` DROP COLUMN `user_type`; -ALTER TABLE `sys_user` DROP COLUMN `phonenumber`; -ALTER TABLE `sys_user` DROP COLUMN `status`; -ALTER TABLE `sys_user` DROP COLUMN `login_date`; ALTER TABLE `sys_user` MODIFY COLUMN `user_name` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户账号' AFTER `dept_id`; ALTER TABLE `sys_user` MODIFY COLUMN `nick_name` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户昵称' AFTER `user_name`; ALTER TABLE `sys_user` ADD COLUMN `phone` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '手机号码' AFTER `email`; @@ -45,15 +44,18 @@ ALTER TABLE `sys_user` ADD COLUMN `login_time` bigint(20) NULL DEFAULT 0 COMMENT ALTER TABLE `sys_user` MODIFY COLUMN `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者' AFTER `login_time`; ALTER TABLE `sys_user` MODIFY COLUMN `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者' AFTER `create_time`; ALTER TABLE `sys_user` MODIFY COLUMN `remark` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注' AFTER `update_time`; +ALTER TABLE `sys_user` ADD COLUMN `user_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'System' COMMENT '用户类型(System系统用户)' AFTER `password`; +ALTER TABLE `sys_user` ADD COLUMN `user_source` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '#' COMMENT '用户来源UID (系统#)' AFTER `user_type`; ALTER TABLE `sys_user` COMMENT = '系统_用户信息表'; -- ---------------------------- -- Data for sys_user -- ---------------------------- -INSERT IGNORE INTO `sys_user` VALUES (1, 100, 'supervisor', 'supervisor', '', '', '0', '', '$2a$10$QgIcp6yuOEGrEU0TNU12K.uQRLbcufesEU7hiRYlRSSdUO7OAkoTq', '1', '0', 0, 0, '127.0.0.1', 0, 'system', 0, '', 0, ''); -INSERT IGNORE INTO `sys_user` VALUES (2, 100, 'admin', 'admin', '', '', '0', '', '$2a$10$QgIcp6yuOEGrEU0TNU12K.uQRLbcufesEU7hiRYlRSSdUO7OAkoTq', '1', '0', 0, 0, '127.0.0.1', 0, 'system', 0, '', 0, ''); -INSERT IGNORE INTO `sys_user` VALUES (3, 100, 'manager', 'manager', '', '', '0', '', '$2a$10$RND3fUw9Ai.WcggYSI57tu.u3OIlktdPxFzlWkmiHC1paV038t0I2', '1', '0', 0, 0, '127.0.0.1', 0, 'system', 0, '', 0, ''); -INSERT IGNORE INTO `sys_user` VALUES (4, 100, 'monitor', 'monitor', '', '', '0', '', '$2a$10$t3zpKQ0olECotFyI1yO43.tCoS0EXoSRBDcqwl09xvrsmn14qFHHy', '1', '0', 0, 0, '127.0.0.1', 0, 'system', 0, '', 0, ''); -UPDATE `sys_user` SET `status_flag` = '1' WHERE `user_id` in (1,2,3,4); +INSERT IGNORE INTO `sys_user` VALUES (1, 100, 'supervisor', 'supervisor', '', '', '0', '', '$2a$10$QgIcp6yuOEGrEU0TNU12K.uQRLbcufesEU7hiRYlRSSdUO7OAkoTq', 'System', '#', '1', '0', 0, 0, '127.0.0.1', 0, 'system', 0, '', 0, ''); +INSERT IGNORE INTO `sys_user` VALUES (2, 100, 'admin', 'admin', '', '', '0', '', '$2a$10$QgIcp6yuOEGrEU0TNU12K.uQRLbcufesEU7hiRYlRSSdUO7OAkoTq', 'System', '#', '1', '0', 0, 0, '127.0.0.1', 0, 'system', 0, '', 0, ''); +INSERT IGNORE INTO `sys_user` VALUES (3, 100, 'manager', 'manager', '', '', '0', '', '$2a$10$RND3fUw9Ai.WcggYSI57tu.u3OIlktdPxFzlWkmiHC1paV038t0I2', 'System', '#', '1', '0', 0, 0, '127.0.0.1', 0, 'system', 0, '', 0, ''); +INSERT IGNORE INTO `sys_user` VALUES (4, 100, 'monitor', 'monitor', '', '', '0', '', '$2a$10$t3zpKQ0olECotFyI1yO43.tCoS0EXoSRBDcqwl09xvrsmn14qFHHy', 'System', '#', '1', '0', 0, 0, '127.0.0.1', 0, 'system', 0, '', 0, ''); +UPDATE `sys_user` SET `status_flag` = '1', `user_type` = 'System', `user_source` = '#' WHERE `user_id` in (1,2,3,4); +UPDATE `sys_user` SET `user_type` = 'System', `user_source` = '#' WHERE `user_type` = 'sys'; -- Dump completed on 2025-02-14 15:26:56 diff --git a/build/database/std/upgrade/upg_ue_event.sql b/build/database/std/upgrade/upg_ue_event.sql index 77d78a61..26e84ca2 100644 --- a/build/database/std/upgrade/upg_ue_event.sql +++ b/build/database/std/upgrade/upg_ue_event.sql @@ -6,8 +6,8 @@ CREATE TABLE IF NOT EXISTS `ue_event` ( `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', `ne_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', `rm_uid` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '可能没有', - `timestamp` bigint DEFAULT '48' COMMENT '接收到的timestamp秒级存储毫秒时间戳', - `event_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '事件类型 auth-result detach cm-state', + `timestamp` bigint DEFAULT '0' COMMENT '接收到时间', + `event_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '事件类型', `event_json` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT 'data JSON String', `created_at` bigint DEFAULT '0' COMMENT '记录创建存储毫秒', PRIMARY KEY (`id`) USING BTREE, @@ -22,8 +22,8 @@ ALTER TABLE `ue_event` DROP INDEX `idx_type_timestamp`; ALTER TABLE `ue_event` MODIFY COLUMN `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' AFTER `id`; ALTER TABLE `ue_event` MODIFY COLUMN `ne_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' AFTER `ne_type`; ALTER TABLE `ue_event` MODIFY COLUMN `rm_uid` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '可能没有' AFTER `ne_name`; -ALTER TABLE `ue_event` MODIFY COLUMN `timestamp` bigint(20) NULL DEFAULT 48 COMMENT '接收到的timestamp秒级存储毫秒时间戳' AFTER `rm_uid`; -ALTER TABLE `ue_event` MODIFY COLUMN `event_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '事件类型 auth-result detach cm-state' AFTER `timestamp`; +ALTER TABLE `ue_event` MODIFY COLUMN `timestamp` bigint(20) NULL DEFAULT 0 COMMENT '接收到时间' AFTER `rm_uid`; +ALTER TABLE `ue_event` MODIFY COLUMN `event_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '事件类型' AFTER `timestamp`; ALTER TABLE `ue_event` MODIFY COLUMN `event_json` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'data JSON String' AFTER `event_type`; ALTER TABLE `ue_event` MODIFY COLUMN `created_at` bigint(20) NULL DEFAULT 0 COMMENT '记录创建存储毫秒' AFTER `event_json`; ALTER TABLE `ue_event` ADD INDEX `idx_type_t`(`event_type`, `timestamp`) USING BTREE; diff --git a/build/database/std/upgrade/upg_ue_event_amf.sql b/build/database/std/upgrade/upg_ue_event_amf.sql index 59a07c6d..5da30e00 100644 --- a/build/database/std/upgrade/upg_ue_event_amf.sql +++ b/build/database/std/upgrade/upg_ue_event_amf.sql @@ -6,8 +6,8 @@ CREATE TABLE IF NOT EXISTS `ue_event_amf` ( `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', `ne_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', `rm_uid` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '可能没有', - `timestamp` bigint DEFAULT '48' COMMENT '接收到的timestamp秒级存储毫秒时间戳', - `event_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '事件类型 auth-result detach cm-state', + `timestamp` bigint DEFAULT '0' COMMENT '接收到时间', + `event_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '事件类型', `event_json` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT 'data JSON String', `created_at` bigint DEFAULT '0' COMMENT '记录创建存储毫秒', PRIMARY KEY (`id`) USING BTREE, @@ -22,11 +22,15 @@ ALTER TABLE `ue_event_amf` DROP INDEX `idx_type_timestamp`; ALTER TABLE `ue_event_amf` MODIFY COLUMN `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' AFTER `id`; ALTER TABLE `ue_event_amf` MODIFY COLUMN `ne_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' AFTER `ne_type`; ALTER TABLE `ue_event_amf` MODIFY COLUMN `rm_uid` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '可能没有' AFTER `ne_name`; -ALTER TABLE `ue_event_amf` MODIFY COLUMN `timestamp` bigint(20) NULL DEFAULT 48 COMMENT '接收到的timestamp秒级存储毫秒时间戳' AFTER `rm_uid`; -ALTER TABLE `ue_event_amf` MODIFY COLUMN `event_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '事件类型 auth-result detach cm-state' AFTER `timestamp`; +ALTER TABLE `ue_event_amf` MODIFY COLUMN `timestamp` bigint(20) NULL DEFAULT 0 COMMENT '接收到时间' AFTER `rm_uid`; +ALTER TABLE `ue_event_amf` MODIFY COLUMN `event_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '事件类型' AFTER `timestamp`; ALTER TABLE `ue_event_amf` MODIFY COLUMN `event_json` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'data JSON String' AFTER `event_type`; ALTER TABLE `ue_event_amf` MODIFY COLUMN `created_at` bigint(20) NULL DEFAULT 0 COMMENT '记录创建存储毫秒' AFTER `event_json`; ALTER TABLE `ue_event_amf` ADD INDEX `idx_amf_type_t`(`event_type`, `timestamp`) USING BTREE; ALTER TABLE `ue_event_amf` COMMENT = 'UE事件_AMF终端接入'; +-- 更新数据 +UPDATE `ue_event_amf` SET `event_type` = 'Auth' WHERE `event_type` = 'auth-result'; +UPDATE `ue_event_amf` SET `event_type` = 'Detach' WHERE `event_type` = 'detach'; +UPDATE `ue_event_amf` SET `event_type` = 'CM' WHERE `event_type` = 'cm-state'; -- Dump completed on 2025-02-14 15:26:56 diff --git a/build/database/std/upgrade/upg_ue_event_mme.sql b/build/database/std/upgrade/upg_ue_event_mme.sql index 6a306fff..60acbb36 100644 --- a/build/database/std/upgrade/upg_ue_event_mme.sql +++ b/build/database/std/upgrade/upg_ue_event_mme.sql @@ -6,8 +6,8 @@ CREATE TABLE IF NOT EXISTS `ue_event_mme` ( `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', `ne_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', `rm_uid` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '可能没有', - `timestamp` bigint DEFAULT '48' COMMENT '接收到的timestamp秒级存储毫秒时间戳', - `event_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '事件类型 auth-result detach cm-state', + `timestamp` bigint DEFAULT '0' COMMENT '接收到时间', + `event_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '事件类型', `event_json` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT 'data JSON String', `created_at` bigint DEFAULT '0' COMMENT '记录创建存储毫秒', PRIMARY KEY (`id`) USING BTREE, @@ -22,11 +22,15 @@ ALTER TABLE `ue_event_mme` DROP INDEX `idx_type_timestamp`; ALTER TABLE `ue_event_mme` MODIFY COLUMN `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' AFTER `id`; ALTER TABLE `ue_event_mme` MODIFY COLUMN `ne_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' AFTER `ne_type`; ALTER TABLE `ue_event_mme` MODIFY COLUMN `rm_uid` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '可能没有' AFTER `ne_name`; -ALTER TABLE `ue_event_mme` MODIFY COLUMN `timestamp` bigint(20) NULL DEFAULT 48 COMMENT '接收到的timestamp秒级存储毫秒时间戳' AFTER `rm_uid`; -ALTER TABLE `ue_event_mme` MODIFY COLUMN `event_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '事件类型 auth-result detach cm-state' AFTER `timestamp`; +ALTER TABLE `ue_event_mme` MODIFY COLUMN `timestamp` bigint(20) NULL DEFAULT 0 COMMENT '接收到时间' AFTER `rm_uid`; +ALTER TABLE `ue_event_mme` MODIFY COLUMN `event_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '事件类型' AFTER `timestamp`; ALTER TABLE `ue_event_mme` MODIFY COLUMN `event_json` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'data JSON String' AFTER `event_type`; ALTER TABLE `ue_event_mme` MODIFY COLUMN `created_at` bigint(20) NULL DEFAULT 0 COMMENT '记录创建存储毫秒' AFTER `event_json`; ALTER TABLE `ue_event_mme` ADD INDEX `idx_mme_type_t`(`event_type`, `timestamp`) USING BTREE; ALTER TABLE `ue_event_mme` COMMENT = 'UE事件_MME终端接入'; +-- 更新数据 +UPDATE `ue_event_mme` SET `event_type` = 'Auth' WHERE `event_type` = 'auth-result'; +UPDATE `ue_event_mme` SET `event_type` = 'Detach' WHERE `event_type` = 'detach'; +UPDATE `ue_event_mme` SET `event_type` = 'CM' WHERE `event_type` = 'cm-state'; -- Dump completed on 2025-02-14 15:26:56 diff --git a/build/default/omc.yaml b/build/default/omc.yaml index ef20aadc..f4291c9d 100644 --- a/build/default/omc.yaml +++ b/build/default/omc.yaml @@ -7,21 +7,15 @@ serverVersion: "lite" # interface encryption, default false # serverCryptoApi: false - +# route service configuration # service listen ipv4/v6 and port, support multiple routines -# ip: 0.0.0.0 or ::0, support IPv4/v6 -server: - - ipv4: 0.0.0.0 - ipv6: "" - port: 33080 # http listen port - schema: http - - ipv4: 0.0.0.0 - ipv6: "" - port: 33443 # https listen port - schema: https - certFile: /usr/local/etc/omc/certs/www.omc.net.crt - keyFile: /usr/local/etc/omc/certs/www.omc.net.key - +routeServer: + - addr: "0.0.0.0:33080" # route http port + schema: "http" + - addr: "0.0.0.0:33443" # route https port + schema: "https" + certFile: "/usr/local/etc/omc/certs/www.omc.net.crt" + keyFile: "/usr/local/etc/omc/certs/www.omc.net.key" # web service configuration # if you are using nginx to take over, you can disable the @@ -29,12 +23,12 @@ webServer: enabled: true # web server enabled, default false rootDir: /usr/local/etc/omc/web listen: - - addr: 0.0.0.0:44080 - schema: http - - addr: 0.0.0.0:44443 - schema: https - certFile: /usr/local/etc/omc/certs/www.omc.net.crt - keyFile: /usr/local/etc/omc/certs/www.omc.net.key + - addr: "0.0.0.0:44080" # web http port + schema: "http" + - addr: "0.0.0.0:44443" # web https port + schema: "https" + certFile: "/usr/local/etc/omc/certs/www.omc.net.crt" + keyFile: "/usr/local/etc/omc/certs/www.omc.net.key" # track configuration for NE signaling trace # host fill in the specific IP address @@ -61,7 +55,6 @@ database: # default data source name defaultDataSourceName: "lite" - # redis cached data redis: dataSource: @@ -73,136 +66,11 @@ redis: # default data source name defaultDataSourceName: "default" - -# file: log file name -# level: /trace/debug/info/warn/error/fatal, default: debug -# duration: rotation time with xx hours, example: 1/12/24 hours -# count: rotation count of log, default is 30 rotation +# log logger: - file: /var/log/omc_restagent.log - level: warn - duration: 24 - count: 90 + fileDir: "/var/log" # Log File Dir + fileName: "omc.log" # Log File Name + level: 2 # Log Level of 0:silent<1:info<2:warn<3:error + maxDay: 7 # Log retention Days + maxSize: 10 # Log File cutting by size -# sleep: time delay for after write buffer (millisecond) -# deadLine: timeout for io read and write (second) -mml: - sleep: 200 - deadLine: 10 - sizeRow: 600 - sizeCol: 128 - bufferSize: 65535 - mmlHome: ./mmlhome - -# NE config -ne: - user: omcuser - etcdir: /usr/local/etc - bindir: /usr/local/bin - omcdir: /usr/local/omc - scpdir: /tmp - licensedir: /usr/local/etc/{neType}/license - # backup etc list of IMS, does not contain spaces - etcListIMS: "{*.yaml,mmtel,vars.cfg}" - etcListDefault: "{*.yaml,*.conf,*.cfg}" - # true/false to overwrite config file when dpkg ne software - dpkgOverwrite: false - # dpkg timeout (second) - dpkgTimeout: 180 - -# chk2ne: true/false, if put OmcNeConfig parameters to NE -omc: - uriPrefix: "/omc/rest" - neType: OMC - neId: 001 - rmUID: 4400HX101 - neName: OMC - province: "" - vendor: "" - dn: "" - chk2ne: false - capability: 50 - sn: "-" - expiryDate: "-" - checksign: false - rootDir: /usr/local/omc - binDir: /usr/local/omc/bin - backup: /usr/local/omc/backup - upload: /usr/local/omc/upload - frontUpload: /usr/local/omc/htdocs/front/upload - frontTraceDir: /usr/local/omc/htdocs/front/trace - software: /usr/local/omc/software - license: /usr/local/omc/license - gtpUri: gtp:192.168.2.119:32152 - checkContentType: false - testMode: false - rbacMode: true - runDir: /usr/local/omc/run - cmdTimeout: 120 - -# Alarm module setting -# Forward interface: -# TLS Skip verify: true/false -# email/sms -# smProxy: sms(Short Message Service)/smsc(SMS Centre) -# dataCoding: 0:GSM7BIT, 1:ASCII, 2:BINARY8BIT1, 3:LATIN1, -# 4:BINARY8BIT2, 6:CYRILLIC, 7:HEBREW, 8:UCS2 -alarm: - alarmEmailForward: - enable: false - emailList: "" - title: "Alarm from OMC" - smtp: mail.smtp.com - port: 25 - user: smtpext@smtp.com - password: "1000smtp@omc!" - tlsSkipVerify: true - alarmSMSForward: - enable: false - mobileList: "" - smscAddr: "192.168.13.114:2775" - systemID: "omc" - password: "omc123" - systemType: "UTRAN" - dataCoding: 0 - serviceNumber: "OMC" - sms: - apiURL: http://smsc.xxx.com/ - accessKeyID: xxxx - accessKeySecret: xxxx - signName: xxx SMSC - templateCode: 1000 - smProxy: smsc - -# User authorized information -# crypt: mysql/md5/bcrypt -# token: true/false to check accessToken -# expires for session, unit: second -# Support single/multiple session of user -# -auth: - crypt: bcrypt - token: true - expires: 1800 - session: multiple - publicKey: /usr/local/omc/etc/certs/omc - privateKey: /usr/local/omc/etc/certs/omc - -# Parameter for limit number -# rmuid_maxnum: the max number of rmUID, default: 50 -# alarmid_maxnum: the max number of AlarmID, default: 50 -# pmid_maxnum: the max number of pmID, default: 50 -# subid_maxnum: the max number of subscription ID, default: 20 -# uri_maxlen: the max length of uri, default: 8192 -# rmuid_regexp: regexp pattern of rmUID -params: - rmuidmaxnum: 50 - alarmidmaxnum: 50 - pmidmaxnum: 50 - subidmaxnum: 20 - urimaxlen: 2100000 - rmuidregexp: "[0-9]{4}[A-Z]{2}[A-Z]{2}[0-9A-Z]{1}[0-9A-Z]{3}[0-9A-Z]{1,16}" - -testConfig: - enabled: false - file: /usr/local/omc/etc/testconfig.yaml diff --git a/build/default/sshsvc.yaml b/build/default/sshsvc.yaml deleted file mode 100644 index cf555d98..00000000 --- a/build/default/sshsvc.yaml +++ /dev/null @@ -1,87 +0,0 @@ -# file: log file name -# level: /trace/debug/info/warn/error/fatal, default: debug -# duration: rotation time with xx hours, example: 1/12/24 hours -# count: rotation count of log, default is 30 rotation -logger: - file: /var/log/omc_sshsvc.log - level: warn - duration: 24 - count: 30 - -# file: MML log file name -# duration: rotation time with xx hours, example: 1/12/24 hours -# count: rotation count of log, default is 30 rotation -# level: cmd/ret log cmd/log cmd & result -logmml: - file: /var/log/omc_mml.log - duration: 24 - count: 30 - level: cmd - -# ssh service listen ipv4/v6 and port, support multiple routines -# ip: 0.0.0.0 or ::0, support IPv4/v6 -# session: single/multiple session for one user -sshd: - listenAddr: 0.0.0.0 - listenPort: 32222 - privateKey: /root/.ssh/id_rsa - maxConnNum: 2 - timeout: 1800 - session: multiple - mmlHome: /usr/local/omc/mmlhome - userName: manager - password: pass123 - authType: local - tagNE: omc - -# authType: local/omc -telnetServer: - listenAddr: 0.0.0.0 - listenPort: 32323 - maxConnNum: 2 - timeout: 1800 - session: multiple - mmlHome: /usr/local/omc/mmlhome - userName: manager - password: pass123 - authType: local - tagNE: omc - -# authproto: NoAuth/MD5/SHA -# privProto: NoPriv/DES/AES/AES192/AES256 -snmpServer: - listenAddr: '[::]' - listenPort: 34957 - userName: manager - authPass: pass123 - authproto: MD5 - privPass: "3F2A1B4C5D6E7F8A9B0C1D2E3F4A5B6C7D8E9F0A1B2C3D4E" - privProto: DES - engineID: "8000000004323030313a6462383a3a39313636" - trapPort: 34958 - trapListen: false - trapBool: false - trapTick: 60 - timeOut: 5 - trapTarget: "" - -database: - type: mysql - user: root - password: 1000omc@kp! - host: 127.0.0.1 - port: 33066 - name: omc_db - connParam: charset=utf8mb4&collation=utf8mb4_general_ci&parseTime=True&interpolateParams=True - -omc: - httpUri: http://127.0.0.1:33030 - userCrypt: bcrypt - -ne: - port: 4100 - sleep: 200 - user: admin - password: admin - - diff --git a/features/aaaa/aaaa.go b/features/aaaa/aaaa.go deleted file mode 100644 index c6dde188..00000000 --- a/features/aaaa/aaaa.go +++ /dev/null @@ -1,142 +0,0 @@ -package aaaa - -import ( - "encoding/json" - "fmt" - "net/http" - "strings" - "time" - - "github.com/go-resty/resty/v2" - - "be.ems/lib/config" - "be.ems/lib/dborm" - "be.ems/lib/log" - "be.ems/lib/oauth" - "be.ems/lib/services" -) - -var ( - UriAAAASSO = config.DefaultUriPrefix + "/aaaa/{apiVersion}/security/sso" // for 4A external - - CustomUriAAAASSO = config.UriPrefix + "/aaaa/{apiVersion}/security/sso" // for 4A external -) - -var client = resty.New() - -func init() { - /* - client. - SetTimeout(10 * time.Second). - SetRetryCount(1). - SetRetryWaitTime(1 * time.Second). - SetRetryMaxWaitTime(2 * time.Second). - SetRetryAfter(func(client *resty.Client, resp *resty.Response) (time.Duration, error) { - return 0, errors.New("quota exceeded") - }) - */ - client.SetTimeout(3 * time.Second) -} - -type AAAATicket struct { - Ticket string `json:"ticket"` -} - -type SSOResult struct { - SSO struct { - Result string `json:"result"` - ResultMsg string `json:"result_msg"` - Ticket string `json:"ticket"` - ResultMsgcode string `json:"result_msgcode"` - Account []struct { - Accid string `json:"accid"` - } `json:"account"` - } `json:"sso"` -} - -// Get system state from NF/NFs -func GetSSOFromAAAA(w http.ResponseWriter, r *http.Request) { - log.Info("GetSSOFromAAAA processing... ") - - vars := r.URL.Query() - ticket := vars["ticket"] - if len(ticket) == 0 { - services.ResponseNotFound404UriNotExist(w, r) - return - } - log.Debug("ticket:", ticket) - - log.Debugf("r.RemoteAddr:%s r.Host: %s", r.RemoteAddr, r.Host) - - aaaaIp := r.RemoteAddr[:strings.Index(r.RemoteAddr, ":")] - omcIp := r.Host[:strings.Index(r.Host, ":")] - - log.Debugf("aaaaIp=%s omcIp=%s", aaaaIp, omcIp) - requestURI2NF := fmt.Sprintf("http://%s:8080/qryUserByTicket", aaaaIp) - - log.Debug("requestURI2NF:", requestURI2NF) - - aaaaTicket := &AAAATicket{ - Ticket: ticket[0], - } - - body, err := json.Marshal(aaaaTicket) - if err != nil { - log.Error("Failed to json.Marshal:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - - response, err := client.R(). - EnableTrace(). - SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}). - SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). - SetBody(body). - Post(requestURI2NF) - if err != nil { - log.Error("Failed to Post:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - log.Debug("response:", response) - - switch response.StatusCode() { - case http.StatusOK, http.StatusCreated, http.StatusNoContent, http.StatusAccepted: - ssoResult := new(SSOResult) - json.Unmarshal(response.Body(), ssoResult) - var accid string - if len(ssoResult.SSO.Account) != 0 { - accid = ssoResult.SSO.Account[0].Accid - } - - log.Debug("accid:", accid) - exist, err := dborm.XormIsExistUser(accid) - if err != nil { - services.ResponseInternalServerError500ProcessError(w, err) - return - } - token := oauth.GenRandToken("aaaa") // Generate new token to session ID - affected, err := dborm.XormInsertSession(accid, r.RemoteAddr, token, - config.GetExpiresFromConfig(), config.GetYamlConfig().Auth.Session) - if err != nil { - log.Error("Failed to XormInsertSession:", err) - if affected == -1 { - services.ResponseForbidden403MultiLoginNotAllowed(w) - } else { - services.ResponseBadRequest400IncorrectLogin(w) - } - return - } - if exist == true { - redirectUrl := fmt.Sprintf("http://%s:8888/home.html?user=%s&token=%s", omcIp, accid, token) - services.ResponseRedirect(w, redirectUrl, accid, token) - return - } else { - services.ResponseBadRequest400IncorrectLogin(w) - return - } - default: - services.ResponseForbidden403NotPermission(w) - return - } -} diff --git a/features/cdr/cdrevent.go b/features/cdr/cdrevent.go deleted file mode 100644 index 47a74f5c..00000000 --- a/features/cdr/cdrevent.go +++ /dev/null @@ -1,102 +0,0 @@ -package cdr - -import ( - "encoding/json" - "fmt" - "net/http" - "strings" - "time" - - "be.ems/lib/config" - "be.ems/lib/core/ctx" - "be.ems/lib/log" - "be.ems/lib/services" - "be.ems/src/framework/database/db" - neService "be.ems/src/modules/network_element/service" - wsService "be.ems/src/modules/ws/service" -) - -var ( - UriCDREvent = config.DefaultUriPrefix + "/cdrManagement/v1/elementType/{elementTypeValue}/objectType/cdrEvent" - UriCDRFile = config.DefaultUriPrefix + "/cdrManagement/v1/elementType/{elementTypeValue}/objectType/cdrFile" - - CustomUriCDREvent = config.UriPrefix + "/cdrManagement/v1/elementType/{elementTypeValue}/objectType/cdrEvent" - CustomUriCDRFile = config.UriPrefix + "/cdrManagement/v1/elementType/{elementTypeValue}/objectType/cdrFile" -) - -// PostCDREventFrom 接收CDR数据请求 -func PostCDREventFrom(w http.ResponseWriter, r *http.Request) { - log.Info("PostCDREventFrom processing... ") - neType := ctx.GetParam(r, "elementTypeValue") - var body struct { - NeType string `json:"neType" ` - NeName string `json:"neName" ` - RmUID string `json:"rmUID" ` - Timestamp int `json:"timestamp" ` - CDR map[string]any `json:"CDR" ` - } - if err := ctx.ShouldBindJSON(r, &body); err != nil { - services.ResponseInternalServerError500ProcessError(w, err) - return - } - - neTypeLower := strings.ToLower(body.NeType) - if neType == "" || neType != neTypeLower { - services.ResponseInternalServerError500ProcessError(w, fmt.Errorf("inconsistent network element types")) - return - } - - // 是否存在网元 - neInfo := neService.NewNeInfo.FindByRmuid(body.RmUID) - if neInfo.NeType != body.NeType || neInfo.RmUID != body.RmUID { - services.ResponseInternalServerError500ProcessError(w, fmt.Errorf("network element does not exist")) - return - } - - cdrByte, err := json.Marshal(body.CDR) - if err != nil { - services.ResponseInternalServerError500ProcessError(w, err) - return - } - - // 执行插入表 - type CDREvent struct { - ID int64 `json:"-" gorm:"column:id;primaryKey;autoIncrement"` - NeType string `json:"neType" gorm:"column:ne_type"` - NeName string `json:"neName" gorm:"column:ne_name"` - RmUid string `json:"rmUid" gorm:"column:rm_uid"` - Timestamp int64 `json:"timestamp" gorm:"column:timestamp"` // 接收到的timestamp秒级存储毫秒时间戳 - CdrJson string `json:"cdrJSON" gorm:"column:cdr_json"` // data JSON String - CreatedAt int64 `json:"-" gorm:"column:created_at"` // 记录创建存储毫秒 - } - data := CDREvent{ - NeType: body.NeType, - NeName: body.NeName, - RmUid: body.RmUID, - Timestamp: int64(body.Timestamp) * 1000, - CdrJson: string(cdrByte), - CreatedAt: time.Now().UnixMilli(), - } - tableName := fmt.Sprintf("cdr_event_%s", neTypeLower) - if err := db.DB("").Table(tableName).Create(&data).Error; err != nil { - log.Error("Failed to insert "+tableName, err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - - // 推送到ws订阅组 - switch neInfo.NeType { - case "IMS": - if v, ok := body.CDR["recordType"]; ok && (v == "MOC" || v == "MTSM") { - wsService.NewWSSend.ByGroupID(fmt.Sprintf("%s_%s", wsService.GROUP_IMS_CDR, neInfo.NeId), data) - } - case "SMF": - wsService.NewWSSend.ByGroupID(fmt.Sprintf("%s_%s", wsService.GROUP_SMF_CDR, neInfo.NeId), data) - case "SMSC": - wsService.NewWSSend.ByGroupID(fmt.Sprintf("%s_%s", wsService.GROUP_SMSC_CDR, neInfo.NeId), data) - case "SGWC": - wsService.NewWSSend.ByGroupID(fmt.Sprintf("%s_%s", wsService.GROUP_SGWC_CDR, neInfo.NeId), data) - } - - services.ResponseStatusOK204NoContent(w) -} diff --git a/features/cm/exec_linux.go b/features/cm/exec_linux.go deleted file mode 100644 index b8b7b36f..00000000 --- a/features/cm/exec_linux.go +++ /dev/null @@ -1,95 +0,0 @@ -//go:build linux -// +build linux - -package cm - -import ( - "bytes" - "context" - "os/exec" - "time" - - "be.ems/lib/log" -) - -func ExecCmd(command string) error { - log.Debug("Exec command:", command) - - cmd := exec.Command("/bin/bash", "-c", command) - out, err := cmd.CombinedOutput() - log.Tracef("Exec output: %v", string(out)) - if err != nil { - log.Error("exe cmd error: ", err) - return err - } - /* - if err := cmd.Start(); err != nil { - log.Error("Start error: ", err) - return err - } - if err := cmd.Wait(); err != nil { - log.Error("Wait error: ", err) - return err - } - */ - return nil -} - -func ExecShell(command string) error { - in := bytes.NewBuffer(nil) - cmd := exec.Command("sh") - cmd.Stdin = in - in.WriteString(command) - in.WriteString("exit\n") - if err := cmd.Start(); err != nil { - return err - } - return nil -} - -func ExecOsCmd(command, os string) error { - log.Debugf("Exec %s command:%s", os, command) - - var cmd *exec.Cmd - switch os { - case "Linux": - cmd = exec.Command(command) - case "Windows": - cmd = exec.Command("cmd", "/C", command) - } - - out, err := cmd.CombinedOutput() - log.Tracef("Exec output: %v", string(out)) - if err != nil { - log.Error("exe cmd error: ", err) - return err - } - return nil -} - -func StartSSHCmdWithTimeout(duration int, sshHost, cmdStr string) error { - timeout := time.Duration(duration) * time.Second - ctx, cancel := context.WithTimeout(context.Background(), timeout) // 设置超时 - defer cancel() - cmd := exec.CommandContext(ctx, "ssh", sshHost, cmdStr) - var stdout, stderr bytes.Buffer - cmd.Stdout = &stdout - cmd.Stderr = &stderr - err := cmd.Start() - if err != nil { - return err - } - return nil -} - -func RunSSHCmd(sshHost, cmdStr string) error { - cmd := exec.Command("ssh", sshHost, cmdStr) - var stdout, stderr bytes.Buffer - cmd.Stdout = &stdout - cmd.Stderr = &stderr - err := cmd.Run() - if err != nil { - return err - } - return nil -} diff --git a/features/cm/exec_windows.go b/features/cm/exec_windows.go deleted file mode 100644 index 9e151bf7..00000000 --- a/features/cm/exec_windows.go +++ /dev/null @@ -1,83 +0,0 @@ -//go:build windows -// +build windows - -package cm - -import ( - "bytes" - "context" - "os/exec" - "time" - - "be.ems/lib/log" -) - -func ExecCmd(command string) error { - log.Debug("Exec command:", command) - - cmd := exec.Command("cmd", "/C", command) - out, err := cmd.CombinedOutput() - log.Tracef("Exec output: %v", string(out)) - if err != nil { - log.Error("exe cmd error: ", err) - return err - } - /* - if err := cmd.Start(); err != nil { - log.Error("Start error: ", err) - return err - } - if err := cmd.Wait(); err != nil { - log.Error("Wait error: ", err) - return err - } - */ - return nil -} - -func ExecOsCmd(command, os string) error { - log.Debugf("Exec %s command:%s", os, command) - - var cmd *exec.Cmd - switch os { - case "Linux": - cmd = exec.Command(command) - case "Windows": - cmd = exec.Command("cmd", "/C", command) - } - - out, err := cmd.CombinedOutput() - log.Tracef("Exec output: %v", string(out)) - if err != nil { - log.Error("exe cmd error: ", err) - return err - } - return nil -} - -func StartSSHCmdWithTimeout(duration int, sshHost, cmdStr string) error { - timeout := time.Duration(duration) * time.Second - ctx, cancel := context.WithTimeout(context.Background(), timeout) // 设置超时 - defer cancel() - cmd := exec.CommandContext(ctx, "ssh", sshHost, cmdStr) - var stdout, stderr bytes.Buffer - cmd.Stdout = &stdout - cmd.Stderr = &stderr - err := cmd.Start() - if err != nil { - return err - } - return nil -} - -func RunSSHCmd(sshHost, cmdStr string) error { - cmd := exec.Command("ssh", sshHost, cmdStr) - var stdout, stderr bytes.Buffer - cmd.Stdout = &stdout - cmd.Stderr = &stderr - err := cmd.Run() - if err != nil { - return err - } - return nil -} diff --git a/features/cm/ne.go b/features/cm/ne.go deleted file mode 100644 index f9cc9670..00000000 --- a/features/cm/ne.go +++ /dev/null @@ -1,991 +0,0 @@ -package cm - -import ( - "encoding/json" - "fmt" - "io" - "net/http" - "os" - "os/exec" - "strings" - "time" - - "be.ems/lib/config" - "be.ems/lib/dborm" - "be.ems/lib/global" - "be.ems/lib/log" - "be.ems/lib/services" - "be.ems/src/framework/constants" - "be.ems/src/framework/database/db" - neService "be.ems/src/modules/network_element/service" - - "github.com/go-resty/resty/v2" - "github.com/gorilla/mux" -) - -var ( - // NE CM export/import - NeCmUri = config.DefaultUriPrefix + "/systemManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/cm" - // NE info - UriNeInfo = config.DefaultUriPrefix + "/systemManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/neInfo" - // NE backup file - UriNeCmFile = config.DefaultUriPrefix + "/systemManagement/{apiVersion}/{neType}/neBackup/{fileName}" - // service action uri, action: start/stop/restart - UriNeService = config.DefaultUriPrefix + "/systemManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/service/{action}" - // nf instance action uri, action: start/stop/restart - UriNeInstance = config.DefaultUriPrefix + "/systemManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/instance/{action}" - - CustomNeCmUri = config.UriPrefix + "/systemManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/cm" - CustomUriNeInfo = config.UriPrefix + "/systemManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/neInfo" - CustomUriNeCmFile = config.UriPrefix + "/systemManagement/{apiVersion}/{neType}/neBackup/{fileName}" - // service action uri, action: start/stop/restart - CustomUriNeService = config.UriPrefix + "/systemManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/service/{action}" - // nf instance action uri, action: start/stop/restart - CustomUriNeInstance = config.UriPrefix + "/systemManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/instance/{action}" -) - -const ( - NEStatusActive = 0 - NEStatusOffline = 1 - NEStatusStandby = 2 - NEStatusMaintain = 3 -) - -var client = resty.New() - -func init() { - /* - client. - SetTimeout(10 * time.Second). - SetRetryCount(1). - SetRetryWaitTime(1 * time.Second). - SetRetryMaxWaitTime(2 * time.Second). - SetRetryAfter(func(client *resty.Client, resp *resty.Response) (time.Duration, error) { - return 0, errors.New("quota exceeded") - }) - */ - client. - SetTimeout(time.Duration(1 * time.Second)) -} - -func GetNeInfo(w http.ResponseWriter, r *http.Request) { - log.Debug("GetNeInfo processing... ") - - // _, err := services.CheckFrontValidRequest(w, r) - // if err != nil { - // log.Error("Request error:", err) - // return - // } - - vars := mux.Vars(r) - neType := vars["elementTypeValue"] - if neType == "" { - log.Error("elementTypeValue is empty") - services.ResponseNotFound404UriNotExist(w, r) - return - } - neId := services.GetUriParamString(r, "ne_id", ",", false, false) - - // no, _ := strconv.ParseInt(neId, 10, 64) - neInfo, err := dborm.XormGetNeInfo(neType, neId) - if err != nil { - log.Error("dborm.XormGetNeInfo is failed:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - - var response services.DataResponse - response.Data = neInfo - services.ResponseWithJson(w, http.StatusOK, response) -} - -type OmcNeConfig struct { - NeId string `json:"neId" xorm:"ne_id"` // 网元标识(内部), - RmUID string `json:"rmUID" xorm:"rm_uid"` // rmUID 网元唯一标识 - NeName string `json:"neName" xorm:"ne_name"` // 网元名称(内部)/友好名称(北向资源/性能等使用) - PvFlag string `json:"pvFlag" xorm:"pv_flag"` // 网元虚实性标识 VNF/PNF: 虚拟/物理 - Province string `json:"province" xorm:"province"` // 网元所在省份 - VendorName string `json:"vendorName" xorm:"vendor_name"` // 厂商名称 - // ManagedBy string `json:"managedBy" xorm:"managed_by"` // 管理ManagedElement的ManagementNode对象类的DN值 - Dn string `json:"dn" xorm:"dn"` // 资源里边的ManagedBy,性能的Dn,网络唯一标识 -} - -func PostNeInfo(w http.ResponseWriter, r *http.Request) { - log.Debug("PostNeInfo processing... ") - - // _, err := services.CheckFrontValidRequest(w, r) - // if err != nil { - // log.Error("Request error:", err) - // return - // } - - vars := mux.Vars(r) - neType := vars["elementTypeValue"] - if neType == "" { - log.Error("elementTypeValue is empty") - services.ResponseNotFound404UriNotExist(w, r) - return - } - neTypeUpper := strings.ToUpper(neType) - syncFlag := services.GetUriParamString(r, "sync2ne", ",", false, false) - body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen)) - if err != nil { - log.Error("Failed to o.ReadAll:", err) - services.ResponseNotFound404UriNotExist(w, r) - return - } - log.Trace("Body:", string(body)) - - neInfo := new(dborm.NeInfo) - err = json.Unmarshal(body, neInfo) - if err != nil { - log.Error("Failed to json.Unmarshal:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - //neInfo.UpdateTime = time.Now().Format(time.DateTime) - neInfo.UpdateTime = time.Now() - log.Debug("NE info:", neInfo) - - //if !config.GetYamlConfig().OMC.Chk2Ne { - if syncFlag == "false" || neTypeUpper == config.GetYamlConfig().OMC.NeType { - neInfo.Status = NEStatusMaintain - affected, err := dborm.XormInsertNeInfo(neInfo) - if err != nil { - log.Error("Failed to insert Ne info:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - - // 刷新缓存,不存在结构体网元Id空字符串 - neService.NewNeInfo.RefreshByNeTypeAndNeID(neInfo.NeType, neInfo.NeId) - - mapRow := make(map[string]interface{}) - row := map[string]interface{}{"affectedRows": affected} - mapRow["data"] = row - services.ResponseWithJson(w, http.StatusOK, mapRow) - return - } else { - hostUri := global.CombineHostUri(neInfo.Ip, neInfo.Port) - //hostUri := fmt.Sprintf("http://%s:%v", neInfo.Ip, neInfo.Port) - apiUri := fmt.Sprintf("%s/systemManagement/v1/elementType/%s/objectType/config/omcNeConfig?ne_id=%s", config.DefaultUriPrefix, strings.ToLower(neInfo.NeType), neInfo.NeId) - requestURI2NF := fmt.Sprintf("%s%s", hostUri, apiUri) - log.Debug("requestURI2NF:", requestURI2NF) - - omcNeConfig := &OmcNeConfig{ - NeId: neInfo.NeId, - RmUID: neInfo.RmUID, - NeName: neInfo.NeName, - PvFlag: neInfo.PvFlag, - Province: neInfo.Province, - VendorName: neInfo.VendorName, - Dn: neInfo.Dn, - } - body, _ = json.Marshal(omcNeConfig) - response, err := client.R(). - EnableTrace(). - SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}). - SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). - SetBody(body). - Put(requestURI2NF) - if err != nil { - log.Error("Failed to Put:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - log.Info("StatusCode: ", response.StatusCode()) - - respMsg := make(map[string]interface{}) - switch response.StatusCode() { - case http.StatusOK, http.StatusCreated, http.StatusNoContent, http.StatusAccepted: - neInfo.Status = NEStatusActive - affected, err := dborm.XormInsertNeInfo(neInfo) - if err != nil { - log.Error("Failed to dborm.XormInsertNeInfo:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } else if affected <= 0 { - log.Infof("Not record affected to insert ne_info") - } - - // 刷新缓存,不存在结构体网元Id空字符串 - neService.NewNeInfo.RefreshByNeTypeAndNeID(neInfo.NeType, neInfo.NeId) - - services.ResponseStatusOK204NoContent(w) - return - default: - log.Info("response body:", string(response.Body())) - body := new(map[string]interface{}) - _ = json.Unmarshal(response.Body(), &body) - respMsg["error"] = body - } - - services.ResponseWithJson(w, response.StatusCode(), respMsg) - return - } -} - -func PutNeInfo(w http.ResponseWriter, r *http.Request) { - log.Debug("PutNeInfo processing... ") - - // _, err := services.CheckFrontValidRequest(w, r) - // if err != nil { - // log.Error("Request error:", err) - // return - // } - - vars := mux.Vars(r) - neType := vars["elementTypeValue"] - if neType == "" { - log.Error("elementTypeValue is empty") - services.ResponseNotFound404UriNotExist(w, r) - return - } - neTypeLower := strings.ToLower(neType) - neTypeUpper := strings.ToUpper(neType) - syncFlag := services.GetUriParamString(r, "sync2ne", ",", false, false) - body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen)) - if err != nil { - log.Error("Failed to io.ReadAll:", err) - services.ResponseNotFound404UriNotExist(w, r) - return - } - - neInfo := new(dborm.NeInfo) - _ = json.Unmarshal(body, neInfo) - neInfo.NeType = strings.ToUpper(neType) - neInfo.UpdateTime = time.Now() - log.Debug("NE info:", neInfo) - - //if !config.GetYamlConfig().OMC.Chk2Ne { - if syncFlag == "false" || neTypeUpper == config.GetYamlConfig().OMC.NeType { - neInfo.Status = NEStatusMaintain - affected, err := dborm.XormUpdateNeInfo(neInfo) - if err != nil { - log.Error("Failed to update Ne info:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - - // 刷新缓存,不存在结构体网元Id空字符串 - neService.NewNeInfo.RefreshByNeTypeAndNeID(neInfo.NeType, neInfo.NeId) - - mapRow := make(map[string]interface{}) - row := map[string]interface{}{"affectedRows": affected} - mapRow["data"] = row - services.ResponseWithJson(w, http.StatusOK, mapRow) - return - } else { - hostUri := global.CombineHostUri(neInfo.Ip, neInfo.Port) - //hostUri := fmt.Sprintf("http://%s:%v", neInfo.Ip, neInfo.Port) - apiUri := fmt.Sprintf("%s/systemManagement/v1/elementType/%s/objectType/config/omcNeConfig?ne_id=%s", config.DefaultUriPrefix, neTypeLower, neInfo.NeId) - requestURI2NF := fmt.Sprintf("%s%s", hostUri, apiUri) - log.Debug("requestURI2NF:", requestURI2NF) - - omcNeConfig := &OmcNeConfig{ - NeId: neInfo.NeId, - RmUID: neInfo.RmUID, - NeName: neInfo.NeName, - PvFlag: neInfo.PvFlag, - Province: neInfo.Province, - VendorName: neInfo.VendorName, - Dn: neInfo.Dn, - } - body, _ = json.Marshal(omcNeConfig) - response, err := client.R(). - EnableTrace(). - SetHeaders(map[string]string{constants.HEADER_KEY: r.Header.Get(constants.HEADER_KEY)}). - SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}). - SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). - SetBody(body). - Put(requestURI2NF) - if err != nil { - log.Error("Failed to Put:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - log.Info("StatusCode: ", response.StatusCode()) - - respMsg := make(map[string]interface{}) - switch response.StatusCode() { - case http.StatusOK, http.StatusCreated, http.StatusNoContent, http.StatusAccepted: - neInfo.Status = NEStatusActive - affected, err := dborm.XormUpdateNeInfo(neInfo) - if err != nil { - log.Error("Failed to dborm.XormUpdateNeInfo:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } else if affected <= 0 { - log.Infof("Not record affected to insert ne_info") - } - - // 刷新缓存,不存在结构体网元Id空字符串 - neService.NewNeInfo.RefreshByNeTypeAndNeID(neInfo.NeType, neInfo.NeId) - - services.ResponseStatusOK204NoContent(w) - return - default: - log.Info("response body:", string(response.Body())) - body := new(map[string]interface{}) - _ = json.Unmarshal(response.Body(), &body) - respMsg["error"] = body - } - - services.ResponseWithJson(w, response.StatusCode(), respMsg) - return - } -} - -func DeleteNeInfo(w http.ResponseWriter, r *http.Request) { - log.Debug("DeleteNeInfo processing... ") - - // _, err := services.CheckFrontValidRequest(w, r) - // if err != nil { - // log.Error("Request error:", err) - // return - // } - - vars := mux.Vars(r) - neType := vars["elementTypeValue"] - if neType == "" { - log.Error("elementTypeValue is empty") - services.ResponseNotFound404UriNotExist(w, r) - return - } - - body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen)) - if err != nil { - log.Error("io.ReadAll is failed:", err) - services.ResponseNotFound404UriNotExist(w, r) - return - } - - neInfo := new(dborm.NeInfo) - _ = json.Unmarshal(body, neInfo) - neInfo.NeType = strings.ToUpper(neType) - neInfo.NeId = services.GetUriParamString(r, "ne_id", ",", false, false) - neInfo, err = dborm.XormGetNeInfo(neInfo.NeType, neInfo.NeId) - if err != nil || neInfo == nil { - log.Error("Failed to delete Ne info:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - log.Debug("NE info:", neInfo) - - // if NE in active status, can't delete NE - if !IsActiveNF(neInfo) { - affected, err := dborm.XormDeleteNeInfo(neInfo) - if err != nil { - log.Error("Failed to delete Ne info:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - - // 刷新缓存,不存在结构体网元Id空字符串 - neService.NewNeInfo.RefreshByNeTypeAndNeID(neInfo.NeType, neInfo.NeId) - - mapRow := make(map[string]interface{}) - row := map[string]interface{}{"affectedRows": affected} - mapRow["data"] = row - services.ResponseWithJson(w, http.StatusOK, mapRow) - return - } - err = global.ErrCMCannotDeleteActiveNE - log.Error(err) - services.ResponseInternalServerError500ProcessError(w, err) -} - -func IsActiveNF(neInfo *dborm.NeInfo) bool { - log.Debug("IsActiveNF processing... ") - - hostUri := fmt.Sprintf("http://%s:%v", neInfo.Ip, neInfo.Port) - requestURI := fmt.Sprintf(config.UriPrefix+"/systemManagement/v1/elementType/%s/objectType/systemState", - strings.ToLower(neInfo.NeType)) - - response, err := client.R(). - EnableTrace(). - SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}). - SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). - Get(hostUri + requestURI) - if err != nil { - log.Error("Failed to Get:", err) - return false - } - - switch response.StatusCode() { - case http.StatusOK, http.StatusCreated, http.StatusNoContent, http.StatusAccepted: - return true - } - return false -} - -func ExportCmFromNF(w http.ResponseWriter, r *http.Request) { - log.Debug("ExportCmFromNF processing... ") - - // _, err := services.CheckFrontValidRequest(w, r) - // if err != nil { - // log.Error("Request error:", err) - // return - // } - - vars := mux.Vars(r) - neType := vars["elementTypeValue"] - if neType == "" { - log.Error("elementTypeValue is empty") - services.ResponseNotFound404UriNotExist(w, r) - return - } - neTypeUpper := strings.ToUpper(neType) - neTypeLower := strings.ToLower(neType) - - neId := services.GetUriParamString(r, "ne_id", ",", false, false) - - // neInfo := new(dborm.NeInfo) - neInfo, err := dborm.XormGetNeInfo(neType, neId) - if err != nil { - log.Errorf("Failed to get ne_info:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - log.Debug("neInfo:", neInfo) - nePath := fmt.Sprintf("%s/etc/%s", config.GetYamlConfig().OMC.Backup, neTypeLower) - isExist, err := global.PathExists(nePath) - if err != nil { - log.Errorf("Failed to stat:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - if isExist { - err = os.RemoveAll(nePath) - if err != nil { - log.Errorf("Failed to RemoveAll:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - } - err = os.MkdirAll(nePath, os.ModePerm) - if err != nil { - log.Errorf("Failed to MkdirAll:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - - var scpCmd string - ipType := global.ParseIPAddr(neInfo.Ip) - omcNetypeLower := strings.ToLower(config.GetYamlConfig().OMC.NeType) - etcListIMS := "{*.yaml,mmtel,vars.cfg}" - if config.GetYamlConfig().NE.EtcListIMS != "" { - etcListIMS = config.GetYamlConfig().NE.EtcListIMS - } - switch neTypeLower { - case omcNetypeLower: - if ipType == global.IsIPv4 { - scpCmd = fmt.Sprintf("scp -r %s@%s:%s/etc/*.yaml %s/etc/%s", config.GetYamlConfig().NE.User, - neInfo.Ip, config.GetYamlConfig().NE.OmcDir, config.GetYamlConfig().OMC.Backup, neTypeLower) - } else { - scpCmd = fmt.Sprintf("scp -r %s@[%s]:%s/etc/*.yaml %s/etc/%s", config.GetYamlConfig().NE.User, - neInfo.Ip, config.GetYamlConfig().NE.OmcDir, config.GetYamlConfig().OMC.Backup, neTypeLower) - } - - case "ims": - if ipType == global.IsIPv4 { - scpCmd = fmt.Sprintf("scp -r %s@%s:%s/%s/%s %s/etc/%s", config.GetYamlConfig().NE.User, - neInfo.Ip, config.GetYamlConfig().NE.EtcDir, neTypeLower, - etcListIMS, config.GetYamlConfig().OMC.Backup, neTypeLower) - } else { - scpCmd = fmt.Sprintf("scp -r %s@[%s]:%s/%s/%s %s/etc/%s", config.GetYamlConfig().NE.User, - neInfo.Ip, config.GetYamlConfig().NE.EtcDir, neTypeLower, - etcListIMS, config.GetYamlConfig().OMC.Backup, neTypeLower) - } - - case "mme": - if ipType == global.IsIPv4 { - scpCmd = fmt.Sprintf("scp -r %s@%s:%s/%s/*.conf %s/etc/%s", config.GetYamlConfig().NE.User, - neInfo.Ip, config.GetYamlConfig().NE.EtcDir, - neTypeLower, config.GetYamlConfig().OMC.Backup, neTypeLower) - } else { - scpCmd = fmt.Sprintf("scp -r %s@[%s]:%s/%s/*.conf %s/etc/%s", config.GetYamlConfig().NE.User, - neInfo.Ip, config.GetYamlConfig().NE.EtcDir, - neTypeLower, config.GetYamlConfig().OMC.Backup, neTypeLower) - } - - default: - if ipType == global.IsIPv4 { - scpCmd = fmt.Sprintf("scp -r %s@%s:%s/%s/*.yaml %s/etc/%s", config.GetYamlConfig().NE.User, - neInfo.Ip, config.GetYamlConfig().NE.EtcDir, - neTypeLower, config.GetYamlConfig().OMC.Backup, neTypeLower) - } else { - scpCmd = fmt.Sprintf("scp -r %s@[%s]:%s/%s/*.yaml %s/etc/%s", config.GetYamlConfig().NE.User, - neInfo.Ip, config.GetYamlConfig().NE.EtcDir, - neTypeLower, config.GetYamlConfig().OMC.Backup, neTypeLower) - } - - } - - zipFile := fmt.Sprintf("%s-%s-etc-%s.zip", neTypeLower, strings.ToLower(neInfo.NeId), time.Now().Format(global.DateData)) - zipFilePath := config.GetYamlConfig().OMC.Backup + "/" + zipFile - zipCmd := fmt.Sprintf("cd %s/etc && zip -r %s %s/*", config.GetYamlConfig().OMC.Backup, zipFilePath, neTypeLower) - - command := fmt.Sprintf("%s&&%s", scpCmd, zipCmd) - - log.Debug("command:", command) - err = ExecCmd(command) - if err != nil { - log.Error("Faile to exec command:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - - md5Sum, err := global.GetFileMD5Sum(zipFilePath) - if err != nil { - log.Error("Faile to md5sum:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - //log.Debug("md5Str:", md5Sum) - path := config.GetYamlConfig().OMC.Backup - neBackup := dborm.NeBackup{NeType: neTypeUpper, NeId: neId, FileName: zipFile, Path: path, Md5Sum: md5Sum} - _, err = dborm.XormInsertTableOne("ne_backup", neBackup) - if err != nil { - log.Error("Faile to XormInsertTableOne:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - - //services.ResponseFileWithNameAndMD5(w, http.StatusOK, zipFile, path, md5Sum) - services.ResponseStatusOK204NoContent(w) -} - -type ImportCMJson struct { - FileName string `json:"fileName"` -} - -func ImportCmToNF(w http.ResponseWriter, r *http.Request) { - log.Debug("ImportCmToNF processing... ") - - // _, err := services.CheckFrontValidRequest(w, r) - // if err != nil { - // log.Error("Request error:", err) - // return - // } - - vars := mux.Vars(r) - neType := vars["elementTypeValue"] - if neType == "" { - log.Error("elementTypeValue is empty") - services.ResponseNotFound404UriNotExist(w, r) - return - } - neTypeUpper := strings.ToUpper(neType) - neTypeLower := strings.ToLower(neType) - - neId := services.GetUriParamString(r, "ne_id", ",", false, false) - - var fileName, path string - if services.IsJsonContentType(r) { - body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen)) - if err != nil { - log.Error("io.ReadAll is failed:", err) - services.ResponseNotFound404UriNotExist(w, r) - return - } - log.Debug("Body:", string(body)) - - importCMJson := new(ImportCMJson) - _ = json.Unmarshal(body, importCMJson) - fileName = importCMJson.FileName - path = config.GetYamlConfig().OMC.Backup - } else { - path = config.GetYamlConfig().OMC.Upload - fileNamePath, err := services.HandleUploadFile(r, path, "") - if err != nil { - log.Error("Faile to HandleUploadFile:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - fileName = fileNamePath - } - filePath := fmt.Sprintf("%s/%s", path, fileName) - - // neInfo := new(dborm.NeInfo) - neInfo, err := dborm.XormGetNeInfo(neType, neId) - if err != nil { - log.Errorf("Failed to get ne_info:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - log.Debug("neInfo:", neInfo) - - md5Sum, err := global.GetFileMD5Sum(filePath) - if err != nil { - log.Error("Faile to GetFileMD5Sum:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - - //neBackup := dborm.NeBackup{NeType: neType, NeId: neId, Md5Sum: md5Sum} - //log.Debug("neBackup:", neBackup) - where := fmt.Sprintf("ne_type='%s' and ne_id='%s' and md5_sum='%s'", neTypeUpper, neId, md5Sum) - has, err := dborm.XormExistTableOne("ne_backup", where) - if err != nil { - log.Error("Faile to XormInsertTableOne:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } else if !has { - err = global.ErrCMInvalidBackupFile - log.Error(err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - - // nePath := fmt.Sprintf("%s/etc/%s", config.GetYamlConfig().OMC.Upload, neTypeLower) - // isExist, err := global.PathExists(nePath) - // if err != nil { - // log.Errorf("Failed to stat:", err) - // services.ResponseInternalServerError500ProcessError(w, err) - // return - // } - // if isExist { - // err = os.RemoveAll(nePath) - // if err != nil { - // log.Errorf("Failed to remove:", err) - // services.ResponseInternalServerError500ProcessError(w, err) - // return - // } - // } - // unzipCmd := fmt.Sprintf("unzip -o %s -d %s", filePath, config.GetYamlConfig().OMC.Upload) - - // var scpCmd string - // ipType := global.ParseIPAddr(neInfo.Ip) - // if ipType == global.IsIPv4 { - // scpCmd = fmt.Sprintf("scp -r %s/etc/%s %s@%s:%s", config.GetYamlConfig().OMC.Upload, - // neTypeLower, config.GetYamlConfig().NE.User, neInfo.Ip, config.GetYamlConfig().NE.EtcDir) - // } else { - // scpCmd = fmt.Sprintf("scp -r %s/etc/%s %s@[%s]:%s", config.GetYamlConfig().OMC.Upload, - // neTypeLower, config.GetYamlConfig().NE.User, neInfo.Ip, config.GetYamlConfig().NE.EtcDir) - // } - - // err = ExecCmd(fmt.Sprintf("%s && %s", unzipCmd, scpCmd)) - // if err != nil { - // log.Errorf("Faile to scp NF: neType=%s, neId=%s, ip=%s", neType, neId, neInfo.Ip) - // services.ResponseInternalServerError500ProcessError(w, err) - // return - // } - - // nePath := fmt.Sprintf("%s/etc/%s", config.GetYamlConfig().OMC.Upload, neTypeLower) - // isExist, err := global.PathExists(nePath) - // if err != nil { - // log.Errorf("Failed to stat:", err) - // services.ResponseInternalServerError500ProcessError(w, err) - // return - // } - // if isExist { - // err = os.RemoveAll(nePath) - // if err != nil { - // log.Errorf("Failed to remove:", err) - // services.ResponseInternalServerError500ProcessError(w, err) - // return - // } - // } - var scpZipCmd string - ipType := global.ParseIPAddr(neInfo.Ip) - if ipType == global.IsIPv4 { - scpZipCmd = fmt.Sprintf("scp -r %s %s@%s:%s", filePath, - config.GetYamlConfig().NE.User, neInfo.Ip, config.GetYamlConfig().NE.ScpDir) - } else { - scpZipCmd = fmt.Sprintf("scp -r %s %s@[%s]:%s", filePath, - config.GetYamlConfig().NE.User, neInfo.Ip, config.GetYamlConfig().NE.ScpDir) - } - err = ExecCmd(scpZipCmd) - if err != nil { - log.Errorf("Faile to scp NF: neType=%s, neId=%s, ip=%s", neType, neId, neInfo.Ip) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - neFilePath := config.GetYamlConfig().NE.ScpDir + "/" + fileName - var unzipCmd string - if neTypeLower != "omc" { - unzipCmd = fmt.Sprintf("sudo unzip -o %s -d %s", neFilePath, config.GetYamlConfig().NE.EtcDir) - } else { - unzipCmd = fmt.Sprintf("sudo unzip -oj %s -d %s/etc", neFilePath, config.GetYamlConfig().NE.OmcDir) - } - sshHost := fmt.Sprintf("%s@%s", config.GetYamlConfig().NE.User, neInfo.Ip) - cmd := exec.Command("ssh", sshHost, unzipCmd) - out, err := cmd.CombinedOutput() - log.Tracef("Exec output: %v", string(out)) - if err != nil { - log.Error("Faile to execute command:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - - services.ResponseStatusOK204NoContent(w) -} - -func DownloadNeBackupFile(w http.ResponseWriter, r *http.Request) { - log.Debug("DownloadNeBackupFile processing... ") - - // _, err := services.CheckFrontValidRequest(w, r) - // if err != nil { - // log.Error("Request error:", err) - // return - // } - - vars := mux.Vars(r) - neType := vars["neType"] - if neType == "" { - log.Error("neType is empty") - services.ResponseNotFound404UriNotExist(w, r) - return - } - neTypeUpper := strings.ToUpper(neType) - //neTypeLower := strings.ToLower(neType) - - fileName := vars["fileName"] - if fileName == "" { - log.Error("fileName is empty") - services.ResponseNotFound404UriNotExist(w, r) - return - } - - sql := fmt.Sprintf("select * from ne_backup where ne_type='%s' and file_name='%s'", neTypeUpper, fileName) - neBackup, err := db.RawDB("", sql, nil) - if err != nil { - log.Error("Faile to XormGetDataBySQL:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } else if len(neBackup) == 0 { - err := global.ErrCMNotFoundTargetBackupFile - log.Error(err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - - path := fmt.Sprint(neBackup[0]["path"]) - md5Sum := fmt.Sprint(neBackup[0]["md5_sum"]) - - services.ResponseFileWithNameAndMD5(w, http.StatusOK, fileName, path, md5Sum) -} - -func DeleteNeBackupFile(w http.ResponseWriter, r *http.Request) { - log.Debug("DeleteNeBackupFile processing... ") - - // _, err := services.CheckFrontValidRequest(w, r) - // if err != nil { - // log.Error("Request error:", err) - // return - // } - - vars := mux.Vars(r) - neType := vars["neType"] - if neType == "" { - log.Error("neType is empty") - services.ResponseNotFound404UriNotExist(w, r) - return - } - neTypeUpper := strings.ToUpper(neType) - //neTypeLower := strings.ToLower(neType) - - fileName := vars["fileName"] - if fileName == "" { - log.Error("fileName is empty") - services.ResponseNotFound404UriNotExist(w, r) - return - } - - sql := fmt.Sprintf("select * from ne_backup where ne_type='%s' and file_name='%s'", neTypeUpper, fileName) - neBackup, err := db.RawDB("", sql, nil) - if err != nil { - log.Error("Faile to XormGetDataBySQL:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } else if len(neBackup) == 0 { - err := global.ErrCMNotFoundTargetBackupFile - log.Error(err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - - where := fmt.Sprintf("ne_type='%s' and file_name='%s'", neTypeUpper, fileName) - affected, err := dborm.XormDeleteDataByWhere(where, "ne_backup") - if err != nil || affected == 0 { - log.Error("Faile to XormGetDataBySQL:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - - path := neBackup[0]["path"] - filePath := fmt.Sprintf("%s/%s", path, fileName) - err = os.Remove(filePath) - if err != nil { - log.Error("Faile to Remove:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - - services.ResponseStatusOK204NoContent(w) -} - -func PostNeServiceAction(w http.ResponseWriter, r *http.Request) { - log.Debug("PostNeServiceAction processing... ") - - // _, err := services.CheckFrontValidRequest(w, r) - // if err != nil { - // log.Error("Request error:", err) - // return - // } - - vars := mux.Vars(r) - neType := vars["elementTypeValue"] - if neType == "" { - log.Error("elementTypeValue is empty") - services.ResponseNotFound404UriNotExist(w, r) - return - } - //neTypeUpper := strings.ToUpper(neType) - neTypeLower := strings.ToLower(neType) - action := vars["action"] - - neId := services.GetUriParamString(r, "neId", ",", false, false) - - // neInfo := new(dborm.NeInfo) - neInfo, err := dborm.XormGetNeInfo(neType, neId) - if err != nil { - log.Error("Failed to get ne_info:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - log.Debug("neInfo:", neInfo) - - sshHost := fmt.Sprintf("%s@%s", config.GetYamlConfig().NE.User, neInfo.Ip) - switch neTypeLower { - case "omc": - // send 204 to fe firstly - services.ResponseStatusOK204NoContent(w) - //actionCmd := fmt.Sprintf("sudo %s/bin/omcsvc.sh %s", config.GetYamlConfig().NE.OmcDir, action) - actionCmd := fmt.Sprintf("sudo systemctl %s omc", action) - go RunSSHCmd(sshHost, actionCmd) - return - // cmd := exec.Command("ssh", sshHost, actionCmd) - // out, err := cmd.CombinedOutput() - // log.Debugf("Exec output: %v", string(out)) - // if err != nil { - // log.Errorf("Faile to execute ssh %s omc:%v", action, err) - // services.ResponseInternalServerError500ProcessError(w, err) - // return - // } - case "ims": - switch action { - case "start", "stop": - actionCmd := fmt.Sprintf("sudo ims-%s", action) - cmd := exec.Command("ssh", sshHost, actionCmd) - out, err := cmd.CombinedOutput() - log.Debugf("Exec output: %v", string(out)) - if err != nil { - log.Errorf("Faile to execute %s command:%v", actionCmd, err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - case "restart": - actionCmd := "sudo ims-stop && sudo ims-start" - cmd := exec.Command("ssh", sshHost, actionCmd) - out, err := cmd.CombinedOutput() - log.Debugf("Exec output: %v", string(out)) - if err != nil { - log.Errorf("Faile to execute %s command:%v", actionCmd, err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - default: - err = global.ErrCMUnknownServiceAction - log.Errorf("%v, action:%s", err, action) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - default: - actionCmd := fmt.Sprintf("sudo systemctl %s %s.service", action, neTypeLower) - cmd := exec.Command("ssh", sshHost, actionCmd) - out, err := cmd.CombinedOutput() - log.Debugf("Exec output: %v", string(out)) - if err != nil { - log.Error("Faile to execute command:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - } - - services.ResponseStatusOK204NoContent(w) -} - -func PostNeInstanceAction(w http.ResponseWriter, r *http.Request) { - log.Debug("PostNeInstanceAction processing... ") - - // _, err := services.CheckFrontValidRequest(w, r) - // if err != nil { - // log.Error("Request error:", err) - // return - // } - - vars := mux.Vars(r) - neType := vars["elementTypeValue"] - if neType == "" { - log.Error("elementTypeValue is empty") - services.ResponseNotFound404UriNotExist(w, r) - return - } - //neTypeUpper := strings.ToUpper(neType) - //neTypeLower := strings.ToLower(neType) - action := vars["action"] - - neId := services.GetUriParamString(r, "neId", ",", false, false) - - // neInfo := new(dborm.NeInfo) - neInfo, err := dborm.XormGetNeInfo(neType, neId) - if err != nil { - log.Errorf("Failed to get ne_info:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - log.Debug("neInfo:", neInfo) - - sshHost := fmt.Sprintf("%s@%s", config.GetYamlConfig().NE.User, neInfo.Ip) - switch action { - case "poweron": - actionCmd := "sudo poweron" - cmd := exec.Command("ssh", sshHost, actionCmd) - out, err := cmd.CombinedOutput() - log.Debugf("Exec output: %v", string(out)) - if err != nil { - log.Error("Faile to execute ssh %s omc:", action, err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - case "poweroff": - actionCmd := "sudo poweroff" - cmd := exec.Command("ssh", sshHost, actionCmd) - out, err := cmd.CombinedOutput() - log.Debugf("Exec output: %v", string(out)) - if err != nil { - log.Error("Faile to execute ssh sudo poweroff:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - case "reboot": - actionCmd := "sudo reboot" - cmd := exec.Command("ssh", sshHost, actionCmd) - out, err := cmd.CombinedOutput() - log.Debugf("Exec output: %v", string(out)) - if err != nil { - log.Error("Faile to execute ssh sudo reboot:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - default: - err = global.ErrCMUnknownInstanceAction - log.Errorf("%v, action:%s", err, action) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - - services.ResponseStatusOK204NoContent(w) -} diff --git a/features/cm/omc/controller.go b/features/cm/omc/controller.go deleted file mode 100644 index 888f182f..00000000 --- a/features/cm/omc/controller.go +++ /dev/null @@ -1,46 +0,0 @@ -package cm_omc - -import ( - "fmt" - "net/http" - - "be.ems/lib/services" - "github.com/gin-gonic/gin" -) - -func (o *ConfigOMC) Get(c *gin.Context) { - paramName := c.Param("paramName") - results, err := o.Query(paramName) - if err != nil { - c.JSON(http.StatusInternalServerError, services.ErrResp(err.Error())) - return - } - c.JSON(http.StatusOK, services.DataResp(results)) -} - -func (o *ConfigOMC) Post(c *gin.Context) { - err := fmt.Errorf("method not allowed") - c.JSON(http.StatusMethodNotAllowed, services.ErrResp(err.Error())) -} - -func (o *ConfigOMC) Put(c *gin.Context) { - paramName := c.Param("paramName") - var paramData map[string]any - - if err := c.ShouldBindJSON(¶mData); err != nil { - c.JSON(http.StatusBadRequest, services.ErrResp(err.Error())) - return - } - - result, err := o.Modify(paramName, paramData) - if err != nil { - c.JSON(http.StatusInternalServerError, services.ErrResp(err.Error())) - return - } - c.JSON(http.StatusOK, services.DataResp(result)) -} - -func (o *ConfigOMC) Delete(c *gin.Context) { - err := fmt.Errorf("method not allowed") - c.JSON(http.StatusMethodNotAllowed, services.ErrResp(err.Error())) -} diff --git a/features/cm/omc/implement.go b/features/cm/omc/implement.go deleted file mode 100644 index 9d7a4300..00000000 --- a/features/cm/omc/implement.go +++ /dev/null @@ -1,69 +0,0 @@ -package cm_omc - -import ( - "fmt" - - "be.ems/lib/config" -) - -const ( - PASSWORD_MASK = "********" -) - -func (o *ConfigOMC) Query(paramName string) (any, error) { - var results []any - - switch paramName { - case "alarmEmailForward": - result := config.GetYamlConfig().Alarm.EmailForward - result.Password = PASSWORD_MASK - results = append(results, result) - case "alarmSMSForward": - result := config.GetYamlConfig().Alarm.SMSCForward - result.Password = PASSWORD_MASK - results = append(results, result) - default: - return nil, fmt.Errorf("invalid source parameter") - } - - return results, nil -} - -func (o *ConfigOMC) Add() { - -} - -func (o *ConfigOMC) Modify(paramName string, paramData map[string]any) (any, error) { - var results []any - - switch paramName { - case "alarmEmailForward": - param := &(config.GetYamlConfig().Alarm.EmailForward) - config.UpdateStructFromMap(param, paramData) - result := *param - results = append(results, result) - err := config.WriteOrignalConfig(config.YamlConfigInfo.FilePath, paramName, paramData) - if err != nil { - fmt.Println("failed to write config yaml file:", err) - return results, err - } - case "alarmSMSForward": - param := &(config.GetYamlConfig().Alarm.SMSCForward) - config.UpdateStructFromMap(param, paramData) - result := *param - results = append(results, result) - err := config.WriteOrignalConfig(config.YamlConfigInfo.FilePath, paramName, paramData) - if err != nil { - fmt.Println("failed to write config yaml file:", err) - return results, err - } - default: - return nil, fmt.Errorf("invalid source parameter") - } - - return results, nil -} - -func (o *ConfigOMC) Remove() { - -} diff --git a/features/cm/omc/model.go b/features/cm/omc/model.go deleted file mode 100644 index 967c84c6..00000000 --- a/features/cm/omc/model.go +++ /dev/null @@ -1,26 +0,0 @@ -package cm_omc - -type ConfigOMC struct{} - -type SystemConfig struct { - ForwardFlag bool `json:"forwardFlag"` -} - -type AlarmEmailForward struct { - Enable bool `json:"enable"` - EmailList string `json:"emailList"` - SMTP string `json:"smtp"` - Port uint16 `json:"port"` - User string `json:"user"` - Password string `json:"password"` - TLSSkipVerify bool `json:"tlsSkipVerify"` -} - -type AlarmSMSForward struct { - Enable bool `json:"enable"` - MobileList string `json:"mobileList"` - SMSCAddr string `json:"smscAddr"` - SystemID string `json:"systemID"` - Password string `json:"password"` - SystemType string `json:"systemType"` -} diff --git a/features/cm/omc/route.go b/features/cm/omc/route.go deleted file mode 100644 index e97f7b5f..00000000 --- a/features/cm/omc/route.go +++ /dev/null @@ -1,30 +0,0 @@ -package cm_omc - -import ( - "be.ems/src/framework/middleware" - "github.com/gin-gonic/gin" -) - -// Register Routes for file_export -func Register(r *gin.RouterGroup) { - cmOMC := r.Group("/omc") - { - var o *ConfigOMC - cmOMC.GET("/config/:paramName", - middleware.AuthorizeUser(nil), - o.Get, - ) - cmOMC.POST("/config/:paramName", - middleware.AuthorizeUser(nil), - o.Post, - ) - cmOMC.PUT("/config/:paramName", - middleware.AuthorizeUser(nil), - o.Put, - ) - cmOMC.DELETE("/config/:paramName", - middleware.AuthorizeUser(nil), - o.Delete, - ) - } -} diff --git a/features/cm/param.go b/features/cm/param.go deleted file mode 100644 index 1b1266d0..00000000 --- a/features/cm/param.go +++ /dev/null @@ -1,208 +0,0 @@ -package cm - -import ( - "strings" - - "be.ems/lib/config" - "be.ems/lib/core/ctx" - "be.ems/lib/global" - "be.ems/lib/log" - "be.ems/lib/services" - - "encoding/json" - "fmt" - "io" - "net/http" - - neService "be.ems/src/modules/network_element/service" - - "github.com/go-resty/resty/v2" - "github.com/gorilla/mux" -) - -var ( - // parameter config management - ParamConfigUri = config.DefaultUriPrefix + "/systemManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/config/{paraName}" - - CustomParamConfigUri = config.UriPrefix + "/systemManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/config/{paraName}" -) - -func GetParamConfigFromNF(w http.ResponseWriter, r *http.Request) { - log.Debug("GetParamConfigFromNF processing... ") - - neId := ctx.GetQuery(r, "ne_id") - vars := mux.Vars(r) - neType := vars["elementTypeValue"] - if neType == "" || neId == "" { - log.Error("elementTypeValue is empty") - services.ResponseNotFound404UriNotExist(w, r) - return - } - - neInfo := neService.NewNeInfo.FindByNeTypeAndNeID(neType, neId) - - var response services.DataResponse - if neInfo.NeId == neId && neInfo.NeId != "" { - requestURI2NF := fmt.Sprintf("http://%s:%v%s", neInfo.IP, neInfo.Port, r.RequestURI) - log.Debug("requestURI2NF:", requestURI2NF) - - resp, err := client.R(). - EnableTrace(). - SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}). - SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). - Get(requestURI2NF) - if err != nil { - log.Error("Failed to Get from NF:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } else { - _ = json.Unmarshal(resp.Body(), &response) - } - log.Debug("response:", response) - } - - services.ResponseWithJson(w, http.StatusOK, response) -} - -func PostParamConfigToNF(w http.ResponseWriter, r *http.Request) { - log.Debug("PostParamConfigToNF processing... ") - - neId := ctx.GetQuery(r, "ne_id") - vars := mux.Vars(r) - neType := vars["elementTypeValue"] - if neType == "" || neId == "" { - log.Error("elementTypeValue is empty") - services.ResponseNotFound404UriNotExist(w, r) - return - } - - neInfo := neService.NewNeInfo.FindByNeTypeAndNeID(neType, neId) - - if neInfo.NeId != neId || neInfo.NeId == "" { - log.Error("neId is empty") - services.ResponseInternalServerError500DatabaseOperationFailed(w) - return - } - - requestURI2NF := fmt.Sprintf("http://%s:%v%s", neInfo.IP, neInfo.Port, r.RequestURI) - log.Debug("requestURI2NF: POST ", requestURI2NF) - - body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen)) //io.LimitReader限制大小 - if err != nil { - log.Error("io.ReadAll is failed:", err) - services.ResponseNotFound404UriNotExist(w, r) - return - } - - client := resty.New() - response, err := client.R(). - EnableTrace(). - SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}). - SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). - SetBody(body). - Post(requestURI2NF) - if err != nil { - log.Error("Failed to POST to NF:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - - services.ResponseWithJson(w, http.StatusNoContent, response) -} - -func PutParamConfigToNF(w http.ResponseWriter, r *http.Request) { - log.Debug("PutParamConfigToNF processing... ") - - vars := mux.Vars(r) - neType := vars["elementTypeValue"] - if neType == "" { - log.Error("elementTypeValue is empty") - services.ResponseNotFound404UriNotExist(w, r) - return - } - - // OMC配置接口 /api/rest/systemManagement/v1/elementType/omc/objectType/config/omcNeConfig - if v, ok := vars["paraName"]; ok && v == "omcNeConfig" && strings.ToLower(neType) == "omc" { - PutOMCNeConfig(w, r) - return - } - - neId := ctx.GetQuery(r, "ne_id") - neInfo := neService.NewNeInfo.FindByNeTypeAndNeID(neType, neId) - - if neInfo.NeId != neId || neInfo.NeId == "" { - log.Error("neId is empty") - services.ResponseInternalServerError500DatabaseOperationFailed(w) - return - } - - requestURI2NF := fmt.Sprintf("http://%s:%v%s", neInfo.IP, neInfo.Port, r.RequestURI) - log.Debug("requestURI2NF: PUT ", requestURI2NF) - - body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen)) //io.LimitReader限制大小 - if err != nil { - log.Error("io.ReadAll is failed:", err) - services.ResponseNotFound404UriNotExist(w, r) - return - } - - client := resty.New() - response, err := client.R(). - EnableTrace(). - SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}). - SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). - SetBody(body). - Put(requestURI2NF) - if err != nil { - log.Error("Failed to Put to NF:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - - services.ResponseWithJson(w, http.StatusNoContent, response) -} - -// PutOMCNeConfig 网元OMC配置 -// -// 目前没配置,返回204 -func PutOMCNeConfig(w http.ResponseWriter, r *http.Request) { - services.ResponseStatusOK204NoContent(w) -} - -func DeleteParamConfigToNF(w http.ResponseWriter, r *http.Request) { - log.Debug("DeleteParamConfigToNF processing... ") - - vars := mux.Vars(r) - neType := vars["elementTypeValue"] - if neType == "" { - log.Error("elementTypeValue is empty") - services.ResponseNotFound404UriNotExist(w, r) - return - } - - neId := ctx.GetQuery(r, "ne_id") - neInfo := neService.NewNeInfo.FindByNeTypeAndNeID(neType, neId) - - if neInfo.NeId != neId || neInfo.NeId == "" { - log.Error("neId is empty") - services.ResponseInternalServerError500DatabaseOperationFailed(w) - return - } - - requestURI2NF := fmt.Sprintf("http://%s:%v%s", neInfo.IP, neInfo.Port, r.RequestURI) - log.Debug("requestURI2NF: DELETE ", requestURI2NF) - - client := resty.New() - response, err := client.R(). - EnableTrace(). - SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}). - SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). - Delete(requestURI2NF) - if err != nil { - log.Error("Failed to delete parameter:", err) - services.ResponseInternalServerError500NFConnectRefused(w) - return - } - - services.ResponseWithJson(w, http.StatusNoContent, response) -} diff --git a/features/cm/service.go b/features/cm/service.go deleted file mode 100644 index f5d8b692..00000000 --- a/features/cm/service.go +++ /dev/null @@ -1,17 +0,0 @@ -package cm - -import ( - cm_omc "be.ems/features/cm/omc" - "be.ems/lib/log" - "github.com/gin-gonic/gin" -) - -func InitSubServiceRoute(r *gin.Engine) { - log.Info("======init PM group gin.Engine") - - cmGroup := r.Group("/cm") - // register sub modules routes - cm_omc.Register(cmGroup) - - // return featuresGroup -} diff --git a/features/cm/software.go b/features/cm/software.go deleted file mode 100644 index fd873702..00000000 --- a/features/cm/software.go +++ /dev/null @@ -1,1052 +0,0 @@ -package cm - -import ( - "bytes" - "fmt" - "io" - "net/http" - "os" - "os/exec" - "strconv" - "strings" - - "be.ems/lib/config" - "be.ems/lib/dborm" - "be.ems/lib/global" - "be.ems/lib/log" - "be.ems/lib/services" - - "github.com/gorilla/mux" -) - -const ( - SoftwareStatusUploaded = "3" - SoftwareStatusInactive = "3" - SoftwareStatusActive = "1" - DigestsSignOkString = "digests signatures OK" - SoftwareVerifiedOk = "Verified OK" -) - -var ( - UriSoftware = config.DefaultUriPrefix + "/systemManagement/{apiVersion}/{neType}/software/{version}" - UriSoftwareNE = config.DefaultUriPrefix + "/systemManagement/{apiVersion}/{neType}/software/{version}/{neId}" - - CustomUriSoftware = config.UriPrefix + "/systemManagement/{apiVersion}/{neType}/software/{version}" - CustomUriSoftwareNE = config.UriPrefix + "/systemManagement/{apiVersion}/{neType}/software/{version}/{neId}" -) - -// 验证签名 -func verify_signature(public_key_name string, source_cms_file string, source_file string) bytes.Buffer { - cmd := exec.Command("/usr/local/omc/run/iv", "verify_signature", public_key_name, source_cms_file, source_file) - var out bytes.Buffer - cmd.Stdout = &out - cmd.Env = append(os.Environ(), - "FOO=duplicate_value", // 重复被忽略 - "FOO=actual_value", // 实际被使用 - ) - err := cmd.Run() - if err != nil { - log.Error(err) - } - - return out -} - -func UploadSoftwareFile(w http.ResponseWriter, r *http.Request) { - log.Debug("UploadSoftwareFile processing... ") - - // _, err := services.CheckFrontValidRequest(w, r) - // if err != nil { - // log.Error("Http request error:", err) - // return - // } - - vars := mux.Vars(r) - neType := vars["neType"] - if neType == "" { - log.Error("neType is empty") - services.ResponseNotFound404UriNotExist(w, r) - return - } - neTypeUpper := strings.ToUpper(neType) - neTypeLower := strings.ToLower(neType) - - version := vars["version"] - if version == "" { - log.Error("version is empty") - services.ResponseNotFound404UriNotExist(w, r) - return - } - md5Param := services.GetUriParamString(r, "md5Sum", ",", false, false) - - // body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen)) - // if err != nil { - // log.Error("io.ReadAll is failed:", err) - // services.ResponseNotFound404UriNotExist(w, r) - // return - // } - // neSWBody := new(dborm.NeSoftware) - // _ = json.Unmarshal(body, neSWBody) - // log.Trace("neSoftware:", neSWBody) - - softwarePath := fmt.Sprintf("%s/%s", config.GetYamlConfig().OMC.Software, neTypeLower) - fileName, err := services.HandleUploadFile(r, softwarePath, "") - if err != nil { - log.Error("Faile to HandleUploadFile:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - - filePrefix := fileName[:strings.Index(fileName, ".zip")] - filePath := fmt.Sprintf("%s/%s", softwarePath, fileName) - log.Debugf("filePath:%s filePrefix:%s softwarePath:%s", filePath, filePrefix, softwarePath) - cmd := exec.Command("unzip", "-o", filePath) - cmd.Dir = softwarePath - out, err := cmd.CombinedOutput() - log.Debugf("Exec outpout:%s", string(out)) - if err != nil { - log.Error("Failed to unzip:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - md5File, err := global.GetFileMD5Sum(filePath) - if err != nil { - log.Error("Faile to GetFileMD5Sum:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - - if md5File != md5Param { - err = global.ErrCMNotMatchMD5File - log.Error(err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - - rpmFileName := filePrefix + ".rpm" - if config.GetYamlConfig().OMC.CheckSign { - rpmFilePath := softwarePath + "/" + rpmFileName - cmsFileName := rpmFileName + ".cms" - cmsFilePath := softwarePath + "/" + cmsFileName - log.Debugf("cmsFilePath:%s rpmFilePath:%s publicKey:%s", rpmFilePath, cmsFilePath, config.GetYamlConfig().Auth.PublicKey) - result := verify_signature(config.GetYamlConfig().Auth.PublicKey, cmsFilePath, rpmFilePath) - log.Debug("result:", result.String()) - if !strings.Contains(result.String(), SoftwareVerifiedOk) { - err = global.ErrCMNotMatchSignFile - log.Error(err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - // cmd := exec.Command("rpm", "-K", filePath) - // out, err := cmd.CombinedOutput() - // log.Debugf("Exec outpout:%s", string(out)) - // if err != nil { - // log.Error("Failed to execute rpm:", err) - // services.ResponseInternalServerError500ProcessError(w, err) - // return - // } - // if !strings.Contains(string(out), DigestsSignOkString) { - // err = global.ErrCMNotMatchSignFile - // log.Error(err) - // services.ResponseInternalServerError500ProcessError(w, err) - // return - // } - } - - //neBackup := dborm.NeBackup{NeType: neType, NeId: neId, Md5Sum: md5Sum} - //log.Debug("neBackup:", neBackup) - where := fmt.Sprintf("ne_type='%s' and version='%s'", neTypeUpper, version) - has, err := dborm.XormExistTableOne("ne_software", where) - if err != nil { - log.Error("Faile to XormInsertTableOne:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } else if has { - err = global.ErrCMExistSoftwareFile - log.Error(err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - - neSoftware := dborm.NeSoftware{ - NeType: neTypeUpper, - FileName: rpmFileName, - Path: softwarePath, - Version: version, - Md5Sum: md5Param, - Comment: neType + " 5GC " + version, - //Comment: neSWBody.Comment, - } - - _, err = dborm.XormInsertTableOne("ne_software", neSoftware) - if err != nil { - log.Error("Faile to XormInsertTableOne:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - - services.ResponseStatusOK204NoContent(w) -} - -func UploadSoftwareMultiFile(w http.ResponseWriter, r *http.Request) { - log.Info("UploadSoftwareMultiFile processing... ") - - // _, err := services.CheckFrontValidRequest(w, r) - // if err != nil { - // log.Error("Http request error:", err) - // return - // } - - vars := mux.Vars(r) - neType := vars["neType"] - if neType == "" { - log.Error("neType is empty") - services.ResponseNotFound404UriNotExist(w, r) - return - } - neTypeUpper := strings.ToUpper(neType) - neTypeLower := strings.ToLower(neType) - - version := vars["version"] - if version == "" { - log.Error("version is empty") - services.ResponseNotFound404UriNotExist(w, r) - return - } - - sql := fmt.Sprintf("select * from ne_software where ne_type='%s' and version='%s'", neTypeUpper, version) - neSoftwareInfo, _ := dborm.XormGetDataBySQL(sql) - if len(*neSoftwareInfo) >= 1 { - services.ResponseWithJson(w, 200, map[string]any{ - "code": 0, - "msg": "Software version already exists", - }) - return - } - - md5Param := services.GetUriParamString(r, "md5Sum", ",", false, false) - - softwarePath := fmt.Sprintf("%s/%s", config.GetYamlConfig().OMC.Software, neTypeLower) - err := os.MkdirAll(softwarePath, os.ModePerm) - if err != nil { - log.Error("Failed to Mkdir:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - //fileName, err := services.HandleUploadFile(r, softwarePath, "") - - // 解析multipart/form-data请求 - err = r.ParseMultipartForm(1000 << 20) // 1000MB - if err != nil { - log.Error("Faile to ParseMultipartForm:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - - // 获取文件和数据 - swFile := r.MultipartForm.File["file"] - cmsFile := r.MultipartForm.File["cms"] - data := r.MultipartForm.Value["comment"] - - var softwareFileName, cmsFileName, comment string - - // 处理软件rpm/deb文件 - if len(swFile) > 0 { - file := swFile[0] - // 打开文件 - f, err := file.Open() - if err != nil { - log.Error("Faile to Open:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - defer f.Close() - - // 创建本地文件 - dst, err := os.Create(softwarePath + "/" + file.Filename) - if err != nil { - log.Error("Faile to Create:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - defer dst.Close() - - softwareFileName = file.Filename - // 将文件内容拷贝到本地文件 - _, err = io.Copy(dst, f) - if err != nil { - log.Error("Faile to Copy:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - } - - // 处理cms文件 - if len(cmsFile) > 0 { - file := cmsFile[0] - // 打开文件 - f, err := file.Open() - if err != nil { - log.Error("Faile to Open:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - defer f.Close() - - // 创建本地文件 - dst, err := os.Create(softwarePath + "/" + file.Filename) - if err != nil { - log.Error("Faile to Create:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - defer dst.Close() - - cmsFileName = file.Filename - // 将文件内容拷贝到本地文件 - _, err = io.Copy(dst, f) - if err != nil { - log.Error("Faile to Copy:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - } - - // 处理数据 - if len(data) > 0 { - comment = data[0] - } - - if config.GetYamlConfig().OMC.CheckSign && cmsFileName != "" { - rpmFilePath := softwarePath + "/" + softwareFileName - cmsFileName := cmsFileName - cmsFilePath := softwarePath + "/" + cmsFileName - log.Debugf("cmsFilePath:%s rpmFilePath:%s publicKey:%s", rpmFilePath, cmsFilePath, config.GetYamlConfig().Auth.PublicKey) - result := verify_signature(config.GetYamlConfig().Auth.PublicKey, cmsFilePath, rpmFilePath) - log.Debug("result:", result.String()) - if !strings.Contains(result.String(), SoftwareVerifiedOk) { - err = global.ErrCMNotMatchSignFile - log.Error(err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - // cmd := exec.Command("rpm", "-K", filePath) - // out, err := cmd.CombinedOutput() - // log.Debugf("Exec outpout:%s", string(out)) - // if err != nil { - // log.Error("Failed to execute rpm:", err) - // services.ResponseInternalServerError500ProcessError(w, err) - // return - // } - // if !strings.Contains(string(out), DigestsSignOkString) { - // err = global.ErrCMNotMatchSignFile - // log.Error(err) - // services.ResponseInternalServerError500ProcessError(w, err) - // return - // } - } - - // //neBackup := dborm.NeBackup{NeType: neType, NeId: neId, Md5Sum: md5Sum} - // //log.Debug("neBackup:", neBackup) - // where := fmt.Sprintf("ne_type='%s' and version='%s'", neTypeUpper, version) - // has, err := dborm.XormExistTableOne("ne_software", where) - // if err != nil { - // log.Error("Faile to XormInsertTableOne:", err) - // services.ResponseInternalServerError500ProcessError(w, err) - // return - // } else if has == true { - // err = global.ErrCMExistSoftwareFile - // log.Error(err) - // services.ResponseInternalServerError500ProcessError(w, err) - // return - // } - - neSoftware := dborm.NeSoftware{ - NeType: neTypeUpper, - FileName: softwareFileName, - Path: softwarePath, - Version: version, - Md5Sum: md5Param, - Comment: comment, - } - - _, err = dborm.XormInsertTableOne("ne_software", neSoftware) - if err != nil { - log.Error("Faile to XormInsertTableOne:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - - services.ResponseStatusOK204NoContent(w) -} - -func DownloadSoftwareFile(w http.ResponseWriter, r *http.Request) { - log.Debug("DownloadSoftwareFile processing... ") - - // _, err := services.CheckFrontValidRequest(w, r) - // if err != nil { - // log.Error("Request error:", err) - // return - // } - - vars := mux.Vars(r) - neType := vars["neType"] - if neType == "" { - log.Error("neType is empty") - services.ResponseNotFound404UriNotExist(w, r) - return - } - neTypeUpper := strings.ToUpper(neType) - //neTypeLower := strings.ToLower(neType) - - version := vars["version"] - if version == "" { - log.Error("version is empty") - services.ResponseNotFound404UriNotExist(w, r) - return - } - - sql := fmt.Sprintf("select * from ne_software where ne_type='%s' and version='%s'", neTypeUpper, version) - neSoftware, err := dborm.XormGetDataBySQL(sql) - if err != nil { - log.Error("Faile to XormGetDataBySQL:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } else if len(*neSoftware) == 0 { - err := global.ErrCMNotFoundTargetSoftware - log.Error(err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - - fileName := (*neSoftware)[0]["name"] - path := (*neSoftware)[0]["path"] - md5Sum := (*neSoftware)[0]["md5_sum"] - - services.ResponseFileWithNameAndMD5(w, http.StatusOK, fileName, path, md5Sum) -} - -func DeleteSoftwareFile(w http.ResponseWriter, r *http.Request) { - log.Debug("DeleteSoftwareFile processing... ") - - // _, err := services.CheckFrontValidRequest(w, r) - // if err != nil { - // log.Error("Request error:", err) - // return - // } - - vars := mux.Vars(r) - neType := vars["neType"] - if neType == "" { - log.Error("neType is empty") - services.ResponseNotFound404UriNotExist(w, r) - return - } - neTypeUpper := strings.ToUpper(neType) - //neTypeLower := strings.ToLower(neType) - - version := vars["version"] - if version == "" { - log.Error("version is empty") - services.ResponseNotFound404UriNotExist(w, r) - return - } - - sql := fmt.Sprintf("select * from ne_software where ne_type='%s' and version='%s'", neTypeUpper, version) - neSoftware, err := dborm.XormGetDataBySQL(sql) - if err != nil { - log.Error("Faile to XormGetDataBySQL:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } else if len(*neSoftware) == 0 { - err := global.ErrCMNotFoundTargetSoftware - log.Error(err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - - where := fmt.Sprintf("ne_type='%s' and version='%s'", neTypeUpper, version) - affected, err := dborm.XormDeleteDataByWhere(where, "ne_software") - if err != nil || affected == 0 { - log.Error("Faile to XormGetDataBySQL:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - - fileName := (*neSoftware)[0]["name"] - path := (*neSoftware)[0]["path"] - filePath := fmt.Sprintf("%s/%s", path, fileName) - err = os.Remove(filePath) - if err != nil { - log.Error("Faile to Remove:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - - services.ResponseStatusOK204NoContent(w) -} - -func DistributeSoftwareToNF(w http.ResponseWriter, r *http.Request) { - log.Debug("DistributeSoftwareFile processing... ") - - // _, err := services.CheckFrontValidRequest(w, r) - // if err != nil { - // log.Error("Http request error:", err) - // return - // } - - vars := mux.Vars(r) - neType := vars["neType"] - if neType == "" { - log.Error("neType is empty") - services.ResponseNotFound404UriNotExist(w, r) - return - } - neTypeUpper := strings.ToUpper(neType) - neTypeLower := strings.ToLower(neType) - - version := vars["version"] - if version == "" { - log.Error("version is empty") - services.ResponseNotFound404UriNotExist(w, r) - return - } - - neId := vars["neId"] - if version == "" { - log.Error("neId is empty") - services.ResponseNotFound404UriNotExist(w, r) - return - } - - neInfo, err := dborm.XormGetNeInfo(neTypeUpper, neId) - if err != nil { - log.Error("dborm.XormGetNeInfo is failed:", err) - services.ResponseInternalServerError500DatabaseOperationFailed(w) - return - } - - sql := fmt.Sprintf("select * from ne_software where ne_type='%s' and version='%s'", neTypeUpper, version) - neSoftware, err := dborm.XormGetDataBySQL(sql) - if err != nil { - log.Error("Faile to XormGetDataBySQL:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } else if len(*neSoftware) == 0 { - err := global.ErrCMNotFoundTargetSoftware - log.Error(err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - log.Trace("neSoftware:", neSoftware) - - sql = fmt.Sprintf("select * from ne_version where ne_type='%s' and ne_id='%s'", neTypeUpper, neId) - neVersion, err := dborm.XormGetDataBySQL(sql) - if err != nil { - log.Error("Faile to XormGetDataBySQL:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - log.Trace("neVersion:", neVersion) - - sshHost := fmt.Sprintf("%s@%s", config.GetYamlConfig().NE.User, neInfo.Ip) - mkdirCmd := fmt.Sprintf("sudo mkdir -p %s/software/%s", config.GetYamlConfig().NE.OmcDir, neTypeLower) - cmd := exec.Command("ssh", sshHost, mkdirCmd) - out, err := cmd.CombinedOutput() - log.Tracef("Exec output: %v", string(out)) - if err != nil { - log.Error("Faile to mkdir:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - - fileName := (*neSoftware)[0]["name"] - path := (*neSoftware)[0]["path"] - srcFile := fmt.Sprintf("%s/%s", path, fileName) - - scpDir := fmt.Sprintf("%s@%s:%s", config.GetYamlConfig().NE.User, - neInfo.Ip, config.GetYamlConfig().NE.ScpDir) - cmd = exec.Command("scp", "-r", srcFile, scpDir) - out, err = cmd.CombinedOutput() - log.Tracef("Exec output: %v", string(out)) - if err != nil { - log.Errorf("Faile to scp NF: neType=%s, neId=%s, ip=%s", neType, neId, neInfo.Ip) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - neFilePath := config.GetYamlConfig().NE.ScpDir + "/" + fileName - cpCmd := fmt.Sprintf("sudo mv -f %s %s/software/%s", neFilePath, - config.GetYamlConfig().NE.OmcDir, neTypeLower) - cmd = exec.Command("ssh", sshHost, cpCmd) - out, err = cmd.CombinedOutput() - log.Tracef("Exec output: %v", string(out)) - if err != nil { - log.Error("Faile to execute cp command:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - - if len(*neVersion) == 0 { - neVersionData := dborm.NeVersion{ - NeType: neTypeUpper, - NeId: neInfo.NeId, - Version: (*neSoftware)[0]["version"], - FilePath: fmt.Sprintf("%s/software/%s/%s", config.GetYamlConfig().NE.OmcDir, neTypeLower, fileName), - PreVersion: "", - PreFile: "", - Status: SoftwareStatusInactive, - } - - _, err = dborm.XormInsertTableOne("ne_version", neVersionData) - if err != nil { - log.Error("Faile to XormInsertTableOne:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - } else { - idNeVersion, _ := strconv.Atoi((*neVersion)[0]["id"]) - neVersionData := dborm.NeVersion{ - NeType: neTypeUpper, - NeId: neInfo.NeId, - Version: (*neSoftware)[0]["version"], - FilePath: fmt.Sprintf("%s/software/%s/%s", config.GetYamlConfig().NE.OmcDir, neTypeLower, fileName), - PreVersion: (*neVersion)[0]["version"], - PreFile: (*neVersion)[0]["path"], - Status: SoftwareStatusInactive, - } - - _, err = dborm.XormUpdateTableById(idNeVersion, "ne_version", neVersionData) - if err != nil { - log.Error("Faile to UpdateTableById:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - } - - services.ResponseStatusOK204NoContent(w) -} - -func ActiveSoftwareToNF(w http.ResponseWriter, r *http.Request) { - log.Debug("ActiveSoftwareToNF processing... ") - - // _, err := services.CheckFrontValidRequest(w, r) - // if err != nil { - // log.Error("Http request error:", err) - // return - // } - - vars := mux.Vars(r) - neType := vars["neType"] - if neType == "" { - log.Error("neType is empty") - services.ResponseNotFound404UriNotExist(w, r) - return - } - neTypeUpper := strings.ToUpper(neType) - neTypeLower := strings.ToLower(neType) - - version := vars["version"] - if version == "" { - log.Error("version is empty") - services.ResponseNotFound404UriNotExist(w, r) - return - } - - neId := vars["neId"] - if version == "" { - log.Error("neId is empty") - services.ResponseNotFound404UriNotExist(w, r) - return - } - - neInfo, err := dborm.XormGetNeInfo(neTypeUpper, neId) - if err != nil { - log.Error("dborm.XormGetNeInfo is failed:", err) - services.ResponseInternalServerError500DatabaseOperationFailed(w) - return - } - - sql := fmt.Sprintf("select * from ne_software where ne_type='%s' and version='%s'", neTypeUpper, version) - neSoftware, err := dborm.XormGetDataBySQL(sql) - if err != nil { - log.Error("Faile to XormGetDataBySQL:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } else if len(*neSoftware) == 0 { - err := global.ErrCMNotFoundTargetSoftware - log.Error(err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - log.Trace("neSoftware:", neSoftware) - - sql = fmt.Sprintf("select * from ne_version where ne_type='%s' and ne_id='%s' and version='%s'", neTypeUpper, neId, version) - neVersion, err := dborm.XormGetDataBySQL(sql) - if err != nil { - log.Error("Faile to XormGetDataBySQL:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } else if len(*neVersion) == 0 { - err := global.ErrCMNotFoundTargetNeVersion - log.Error(err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - log.Trace("neVersion:", neVersion) - - if !config.GetYamlConfig().OMC.TestMode { - filePath := (*neVersion)[0]["path"] - sshHost := fmt.Sprintf("%s@%s", config.GetYamlConfig().NE.User, neInfo.Ip) - - runCmd := fmt.Sprintf("sudo rm -f %s/actpkg.sh", config.GetYamlConfig().NE.ScpDir) - err = RunSSHCmd(sshHost, runCmd) - if err != nil { - log.Errorf("Failed to run cmd: %s", runCmd) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - - srcFile := fmt.Sprintf("%s/actpkg.sh", config.GetYamlConfig().OMC.BinDir) - scpDir := fmt.Sprintf("%s@%s:%s", config.GetYamlConfig().NE.User, - neInfo.Ip, config.GetYamlConfig().NE.ScpDir) - cmd := exec.Command("scp", "-r", srcFile, scpDir) - _, err := cmd.CombinedOutput() - if err != nil { - log.Errorf("Failed to scp NF: neType=%s, neId=%s, ip=%s", neType, neId, neInfo.Ip) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - - runCmd = fmt.Sprintf("sudo %s/actpkg.sh '%s' %s", - config.GetYamlConfig().NE.ScpDir, filePath, neTypeUpper) - if neTypeLower == "omc" { - idNeVersion, _ := strconv.Atoi((*neVersion)[0]["id"]) - neVersionData := dborm.NeVersion{ - Status: SoftwareStatusActive, - } - - _, err = dborm.XormUpdateTableById(idNeVersion, "ne_version", neVersionData) - if err != nil { - log.Error("Faile to UpdateTableById:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - - services.ResponseStatusOK204NoContent(w) - go RunSSHCmd(sshHost, runCmd) - return - } - err = RunSSHCmd(sshHost, runCmd) - if err != nil { - log.Errorf("Faile to execute command: %s, error: %v", runCmd, err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - - // fileType := global.IsRpmOrDebPackage(filePath) - // if fileType == 1 { - // srcFile := fmt.Sprintf("%s/spawnrpm.sh", config.GetYamlConfig().OMC.BinDir) - - // scpDir := fmt.Sprintf("%s@%s:%s", config.GetYamlConfig().NE.User, - // neInfo.Ip, config.GetYamlConfig().NE.ScpDir) - // cmd := exec.Command("scp", "-r", srcFile, scpDir) - // _, err := cmd.CombinedOutput() - // if err != nil { - // log.Errorf("Faile to scp NF: neType=%s, neId=%s, ip=%s", neType, neId, neInfo.Ip) - // services.ResponseInternalServerError500ProcessError(w, err) - // return - // } - - // dpkgCmd := fmt.Sprintf("sudo %s/spawnrpm.sh '%s'", - // config.GetYamlConfig().NE.ScpDir, filePath) - // err = RunSSHCmd(sshHost, dpkgCmd) - // if err != nil { - // log.Errorf("Faile to execute dpkg command: %s, error: %v", dpkgCmd, err) - // services.ResponseInternalServerError500ProcessError(w, err) - // return - // } - // } else if fileType == 2 { - // srcFile := fmt.Sprintf("%s/spawndpkg.sh", config.GetYamlConfig().OMC.BinDir) - - // scpDir := fmt.Sprintf("%s@%s:%s", config.GetYamlConfig().NE.User, - // neInfo.Ip, config.GetYamlConfig().NE.ScpDir) - // cmd := exec.Command("scp", "-r", srcFile, scpDir) - // _, err := cmd.CombinedOutput() - // if err != nil { - // log.Errorf("Faile to scp NF: neType=%s, neId=%s, ip=%s", neType, neId, neInfo.Ip) - // services.ResponseInternalServerError500ProcessError(w, err) - // return - // } - - // dpkgCmd := fmt.Sprintf("sudo %s/spawndpkg.sh '%s'", - // config.GetYamlConfig().NE.ScpDir, filePath) - // err = RunSSHCmd(sshHost, dpkgCmd) - // if err != nil { - // log.Errorf("Faile to execute dpkg command: %s, error: %v", dpkgCmd, err) - // services.ResponseInternalServerError500ProcessError(w, err) - // return - // } - // } else { - // err := global.ErrCMUnknownSoftwareFormat - // log.Error(err) - // services.ResponseInternalServerError500ProcessError(w, err) - // return - // } - switch neTypeLower { - case "omc": - restartCmd := fmt.Sprintf("sudo %s/bin/omcsvc.sh restart", config.GetYamlConfig().NE.OmcDir) - cmd := exec.Command("ssh", sshHost, restartCmd) - out, err := cmd.CombinedOutput() - log.Tracef("Exec output: %v", string(out)) - if err != nil { - log.Error("Faile to execute ssh restart omc:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - case "ims": - restartCmd := "sudo ims-stop && sudo ims-start" - cmd := exec.Command("ssh", sshHost, restartCmd) - out, err := cmd.CombinedOutput() - log.Tracef("Exec output: %v", string(out)) - if err != nil { - log.Error("Faile to execute ssh command: %s, error: %v", restartCmd, err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - default: - restartCmd := fmt.Sprintf("sudo systemctl restart %s.service", neTypeLower) - cmd := exec.Command("ssh", sshHost, restartCmd) - out, err := cmd.CombinedOutput() - log.Tracef("Exec output: %v", string(out)) - if err != nil { - log.Error("Faile to execute ssh sudo systemctl command:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - } - } - - idNeVersion, _ := strconv.Atoi((*neVersion)[0]["id"]) - neVersionData := dborm.NeVersion{ - Status: SoftwareStatusActive, - } - - _, err = dborm.XormUpdateTableById(idNeVersion, "ne_version", neVersionData) - if err != nil { - log.Error("Faile to UpdateTableById:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - - services.ResponseStatusOK204NoContent(w) -} - -func RollBackSoftwareToNF(w http.ResponseWriter, r *http.Request) { - log.Debug("ActiveSoftwareToNF processing... ") - - // _, err := services.CheckFrontValidRequest(w, r) - // if err != nil { - // log.Error("Http request error:", err) - // return - // } - - vars := mux.Vars(r) - neType := vars["neType"] - if neType == "" { - log.Error("neType is empty") - services.ResponseNotFound404UriNotExist(w, r) - return - } - neTypeUpper := strings.ToUpper(neType) - neTypeLower := strings.ToLower(neType) - - version := vars["version"] - if version == "" { - log.Error("version is empty") - services.ResponseNotFound404UriNotExist(w, r) - return - } - - neId := vars["neId"] - if version == "" { - log.Error("neId is empty") - services.ResponseNotFound404UriNotExist(w, r) - return - } - - neInfo, err := dborm.XormGetNeInfo(neTypeUpper, neId) - if err != nil { - log.Error("dborm.XormGetNeInfo is failed:", err) - services.ResponseInternalServerError500DatabaseOperationFailed(w) - return - } - - sql := fmt.Sprintf("select * from ne_version where ne_type='%s' and ne_id='%s'", neTypeUpper, neId) - neVersion, err := dborm.XormGetDataBySQL(sql) - if err != nil { - log.Error("Faile to XormGetDataBySQL:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } else if len(*neVersion) == 0 { - err := global.ErrCMNotFoundTargetNeVersion - log.Error(err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - log.Debug("neVersion:", neVersion) - - filePath := (*neVersion)[0]["pre_file"] - if filePath == "" { - err := global.ErrCMNotFoundRollbackNeVersion - log.Error(err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - - if !config.GetYamlConfig().OMC.TestMode { - sshHost := fmt.Sprintf("%s@%s", config.GetYamlConfig().NE.User, neInfo.Ip) - runCmd := fmt.Sprintf("sudo rm -f %s/rbkpkg.sh", config.GetYamlConfig().NE.ScpDir) - err = RunSSHCmd(sshHost, runCmd) - if err != nil { - log.Errorf("Failed to run cmd: %s", runCmd) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - - srcFile := fmt.Sprintf("%s/rbkpkg.sh", config.GetYamlConfig().OMC.BinDir) - - scpDir := fmt.Sprintf("%s@%s:%s", config.GetYamlConfig().NE.User, - neInfo.Ip, config.GetYamlConfig().NE.ScpDir) - cmd := exec.Command("scp", "-r", srcFile, scpDir) - _, err := cmd.CombinedOutput() - if err != nil { - log.Errorf("Faile to scp NF: neType=%s, neId=%s, ip=%s", neType, neId, neInfo.Ip) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - - runCmd = fmt.Sprintf("sudo %s/rbkpkg.sh '%s' %s", - config.GetYamlConfig().NE.ScpDir, filePath, neTypeUpper) - if neTypeLower == "omc" { - idNeVersion, _ := strconv.Atoi((*neVersion)[0]["id"]) - neVersionData := dborm.NeVersion{ - Version: (*neVersion)[0]["pre_version"], - FilePath: (*neVersion)[0]["pre_file"], - PreVersion: "-", - PreFile: "-", - NewVersion: (*neVersion)[0]["version"], - NewFile: (*neVersion)[0]["path"], - Status: SoftwareStatusActive, - } - - _, err = dborm.XormUpdateTableById(idNeVersion, "ne_version", neVersionData) - if err != nil { - log.Error("Faile to UpdateTableById:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - services.ResponseStatusOK204NoContent(w) - go RunSSHCmd(sshHost, runCmd) - return - } - err = RunSSHCmd(sshHost, runCmd) - if err != nil { - log.Errorf("Faile to execute command: %s, error: %v", runCmd, err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - // fileType := global.IsRpmOrDebPackage(filePath) - // if fileType == 1 { - // rpmCmd := fmt.Sprintf("sudo rpm -Uvh --oldpackage '%s'", filePath) - // cmd := exec.Command("ssh", sshHost, rpmCmd) - // _, err := cmd.CombinedOutput() - // if err != nil { - // log.Error("Faile to execute rpm command:", err) - // services.ResponseInternalServerError500ProcessError(w, err) - // return - // } - // } else if fileType == 2 { - // srcFile := fmt.Sprintf("%s/spawndpkg.sh", config.GetYamlConfig().OMC.BinDir) - - // scpDir := fmt.Sprintf("%s@%s:%s", config.GetYamlConfig().NE.User, - // neInfo.Ip, config.GetYamlConfig().NE.ScpDir) - // cmd := exec.Command("scp", "-r", srcFile, scpDir) - // _, err := cmd.CombinedOutput() - // if err != nil { - // log.Errorf("Faile to scp NF: neType=%s, neId=%s, ip=%s", neType, neId, neInfo.Ip) - // services.ResponseInternalServerError500ProcessError(w, err) - // return - // } - // var inputStr string = "n" - // if config.GetYamlConfig().NE.DpkgOverwrite { - // inputStr = "y" - // } - // dpkgCmd := fmt.Sprintf("sudo %s/spawndpkg.sh %s '%s'", - // config.GetYamlConfig().NE.ScpDir, inputStr, filePath) - // err = RunSSHCmd(sshHost, dpkgCmd) - // if err != nil { - // log.Errorf("Faile to execute dpkg command: %s, error: %v", dpkgCmd, err) - // services.ResponseInternalServerError500ProcessError(w, err) - // return - // } - // } else { - // err := global.ErrCMUnknownSoftwareFormat - // log.Error(err) - // services.ResponseInternalServerError500ProcessError(w, err) - // return - // } - switch neTypeLower { - case "omc": - restartCmd := fmt.Sprintf("sudo %s/bin/omcsvc.sh restart", config.GetYamlConfig().NE.OmcDir) - cmd := exec.Command("ssh", sshHost, restartCmd) - out, err := cmd.CombinedOutput() - log.Tracef("Exec output: %v", string(out)) - if err != nil { - log.Error("Faile to execute ssh restart omc:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - case "ims": - restartCmd := "sudo ims-stop && sudo ims-start" - cmd := exec.Command("ssh", sshHost, restartCmd) - out, err := cmd.CombinedOutput() - log.Tracef("Exec output: %v", string(out)) - if err != nil { - log.Error("Faile to execute ssh command: %s, error: %v", restartCmd, err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - default: - restartCmd := fmt.Sprintf("sudo systemctl restart %s.service", neTypeLower) - cmd := exec.Command("ssh", sshHost, restartCmd) - out, err := cmd.CombinedOutput() - log.Tracef("Exec output: %v", string(out)) - if err != nil { - log.Error("Faile to execute ssh sudo systemctl command:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - - } - } - - idNeVersion, _ := strconv.Atoi((*neVersion)[0]["id"]) - neVersionData := dborm.NeVersion{ - Version: (*neVersion)[0]["pre_version"], - FilePath: (*neVersion)[0]["pre_file"], - PreVersion: "-", - PreFile: "-", - NewVersion: (*neVersion)[0]["version"], - NewFile: (*neVersion)[0]["path"], - Status: SoftwareStatusActive, - } - - _, err = dborm.XormUpdateTableById(idNeVersion, "ne_version", neVersionData) - if err != nil { - log.Error("Faile to UpdateTableById:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - - services.ResponseStatusOK204NoContent(w) -} diff --git a/features/dbrest/dbrest.go b/features/dbrest/dbrest.go deleted file mode 100644 index d11f981a..00000000 --- a/features/dbrest/dbrest.go +++ /dev/null @@ -1,859 +0,0 @@ -package dbrest - -import ( - "encoding/json" - "fmt" - "io" - "net/http" - "regexp" - "strings" - - "be.ems/lib/config" - "be.ems/lib/core/ctx" - "be.ems/lib/dborm" - "be.ems/lib/global" - "be.ems/lib/log" - "be.ems/lib/services" - "be.ems/src/framework/database/db" - - "github.com/gorilla/mux" -) - -type XormResponse struct { - Data interface{} `json:"data"` -} - -type XormInsertResponse struct { - Data interface{} `json:"data"` -} - -var ( - // database management rest pattern, discard - XormGetDataUri = config.DefaultUriPrefix + "/databaseManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/{objectTypeValue}" - XormSelectDataUri = config.DefaultUriPrefix + "/databaseManagement/{apiVersion}/select/{elementTypeValue}/{objectTypeValue}" - XormInsertDataUri = config.DefaultUriPrefix + "/databaseManagement/{apiVersion}/insert/{elementTypeValue}/{objectTypeValue}" - XormUpdateDataUri = config.DefaultUriPrefix + "/databaseManagement/{apiVersion}/update/{elementTypeValue}/{objectTypeValue}" - XormDeleteDataUri = config.DefaultUriPrefix + "/databaseManagement/{apiVersion}/delete/{elementTypeValue}/{objectTypeValue}" - - CustomXormGetDataUri = config.UriPrefix + "/databaseManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/{objectTypeValue}" - CustomXormSelectDataUri = config.UriPrefix + "/databaseManagement/{apiVersion}/select/{elementTypeValue}/{objectTypeValue}" - CustomXormInsertDataUri = config.UriPrefix + "/databaseManagement/{apiVersion}/insert/{elementTypeValue}/{objectTypeValue}" - CustomXormUpdateDataUri = config.UriPrefix + "/databaseManagement/{apiVersion}/update/{elementTypeValue}/{objectTypeValue}" - CustomXormDeleteDataUri = config.UriPrefix + "/databaseManagement/{apiVersion}/delete/{elementTypeValue}/{objectTypeValue}" - - XormCommonUri = config.DefaultUriPrefix + "/databaseManagement/{apiVersion}/{elementTypeValue}/{objectTypeValue}" // for internal - XormDatabaseUri = config.DefaultUriPrefix + "/database/{apiVersion}/{elementTypeValue}/{objectTypeValue}" // for crontask - XormDataRestUri = config.DefaultUriPrefix + "/dataManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/{objectTypeValue}" - XormExtDataUri = config.DefaultUriPrefix + "/dataManagement/{apiVersion}/{elementTypeValue}/{objectTypeValue}" // for external - XormDataSQLUri = config.DefaultUriPrefix + "/dataManagement/{apiVersion}/{elementTypeValue}/{objectTypeValue}" // for external - - CustomXormCommonUri = config.UriPrefix + "/databaseManagement/{apiVersion}/{elementTypeValue}/{objectTypeValue}" // for internal - CustomXormExtDataUri = config.UriPrefix + "/dataManagement/{apiVersion}/{elementTypeValue}/{objectTypeValue}" // for external - CustomXormDataSQLUri = config.UriPrefix + "/dataManagement/{apiVersion}/{elementTypeValue}/{objectTypeValue}" // for external - - // 查询数据库连接情况 - UriDbConnection = config.DefaultUriPrefix + "/dataManagement/{apiVersion}/dbConnection" - CustomUriDbConnection = config.UriPrefix + "/dataManagement/{apiVersion}/dbConnection" // for external - - // 终结非法的数据库连接 - UriDbStop = config.DefaultUriPrefix + "/dataManagement/{apiVersion}/dbStop" - CustomUriDbStop = config.UriPrefix + "/dataManagement/{apiVersion}/dbStop" // for external - -) - -func GetUriSQLArray(r *http.Request) []string { - var sa []string - vars := r.URL.Query() - - // 默认SQL - if s, ok := vars["SQL"]; ok { - for _, r := range s { - if r != "" { - sa = append(sa, r) - } - } - } - - // 查询总数 - if totalSQL, ok := vars["totalSQL"]; ok { - if totalSQL[0] != "" { - sa = append(sa, totalSQL[0]) - } - } - // 查询列表 - if rowsSQL, ok := vars["rowsSQL"]; ok { - if rowsSQL[0] != "" { - sa = append(sa, rowsSQL[0]) - } - } - - if len(sa) == 0 { - log.Info("SQL is not exist") - return nil - } - - log.Debug("SQL array:", sa) - return sa -} - -// Get table name from SQL -func GetTableNameFromSQL(s string) string { - ls := strings.ToLower(s) - i1 := strings.Index(ls, "from") - i2 := strings.Index(ls, "where") - - var ts string - if i1 > 0 { - if i2 > 0 && i2 > i1 { - ts = ls[i1+4 : i2] - } - if i2 < 0 { - ts = ls[i1+4:] - } - } - - tn := strings.Trim(ts, " ") - log.Debug("i1:", i1, "i2:", i2, "tn:", tn) - return tn -} - -func GetTableName(sql string) string { - ls := strings.ToLower(sql) - - re := regexp.MustCompile(`from\s+(\S+)`) - matches := re.FindStringSubmatch(ls) - if len(matches) < 2 { - return "" - } - return matches[1] -} - -func IsQuerySQL(s string) bool { - ts := strings.Trim(strings.ToLower(s), " ") - return strings.Index(ts, "select") == 0 -} - -// xorm Get data from database -func ExtDatabaseExecSQL(w http.ResponseWriter, r *http.Request) { - log.Debug("ExtDatabaseExecSQL processing... ") - - // var err error - - // _, err = services.CheckExtValidRequest(w, r) - // if err != nil { - // log.Error("Request error:", err) - // return - // } - - //vars := mux.Vars(r) - //tblName := vars["objectTypeValue"] - var sql = GetUriSQLArray(r) - // select as must, todo ... - - ls := services.ExtGetUriPageLimitString(r) - - // data := make([]map[string]interface{}, 0) - // xormResponse := make([]map[string]interface{}, len(sql)) - var xormResponse XormResponse - data := make([]map[string]interface{}, 0) - for i, s := range sql { - log.Tracef("SQL[%d]: %s", i, sql[i]) - - //rows := make([]map[string]interface{}, 0) - mapRows := make(map[string]interface{}) - - if s != "" { - // err = XEngine.SQL(s).Find(&rows) - // if IsQuerySQL(s) == false { - // services.ResponseNotAcceptable406QuerySQLError(w) - // return - // } - - querySQL := s - if i == (len(sql) - 1) { - querySQL = querySQL + " " + ls - } - log.Debug("querySQL:", querySQL) - rows, err := db.RawDB("", querySQL, nil) - if err != nil { - log.Error("SQL failed:", err) - services.ResponseInternalServerError500DatabaseOperationFailed(w) - return - } - tableName := GetTableName(s) - log.Debugf("s:%s tableName:%s", s, tableName) - mapRows[tableName] = rows - data = append(data, mapRows) - log.Trace("data:", data) - } - i++ - } - xormResponse.Data = data - - services.ResponseWithJson(w, http.StatusOK, xormResponse) -} - -// xorm Get data from database -func ExtDatabaseGetData(w http.ResponseWriter, r *http.Request) { - log.Debug("ExtDatabaseGetData processing... ") - - var sql []string - // token, err := services.CheckExtValidRequest(w, r) - // if err != nil { - // log.Error("Request error:", err) - // return - // } - - pack := "dbrest" - vars := mux.Vars(r) - module := "" - dbname := vars["elementTypeValue"] - tbname := vars["objectTypeValue"] - - log.Debugf("method:%s, module:%s, dbname:%s, tbname:%s, pack:%s", r.Method, module, dbname, tbname, pack) - - // exist, err := services.CheckUserPermission(token, strings.ToLower(r.Method), module, dbname, tbname, pack) - // if err != nil { - // log.Error("Failed to get permission:", err) - // services.ResponseForbidden403NotPermission(w) - // return - // } - // if !exist { - // log.Error("Not permission!") - // services.ResponseForbidden403NotPermission(w) - // return - // } - - sql = GetUriSQLArray(r) - // select as must, todo ... - if sql == nil { - wc := services.GetUriLocString(r) - if wc == "" { - sql = append(sql, fmt.Sprintf("select * from %s", tbname)) - } else { - sql = append(sql, fmt.Sprintf("select * from %s where %s", tbname, wc)) - } - } - - ls := services.ExtGetUriPageLimitString(r) - - // data := make([]map[string]interface{}, 0) - // xormResponse := make([]map[string]interface{}, len(sql)) - var xormResponse XormResponse - data := make([]map[string]interface{}, 0) - for i, s := range sql { - log.Tracef("SQL[%d]: %s", i, sql[i]) - - mapRows := make(map[string]interface{}) - - if s != "" { - // err = XEngine.SQL(s).Find(&rows) - if !IsQuerySQL(s) { - services.ResponseNotAcceptable406QuerySQLError(w) - return - } - - querySQL := s - if i == (len(sql) - 1) { - querySQL = querySQL + " " + ls - } - log.Debug("querySQL:", querySQL) - rows, err := db.RawDB("", querySQL, nil) - if err != nil { - log.Error("SQL failed:", err) - services.ResponseInternalServerError500DatabaseOperationFailed(w) - return - } - tableName := GetTableName(s) - log.Debugf("s:%s tableName:%s", s, tableName) - mapRows[tableName] = rows - data = append(data, mapRows) - log.Trace("data:", data) - } - i++ - } - xormResponse.Data = data - - services.ResponseWithJson(w, http.StatusOK, xormResponse) -} - -func ExtDatabaseInsertData(w http.ResponseWriter, r *http.Request) { - log.Debug("ExtDatabaseInsertData processing... ") - - // token, err := services.CheckExtValidRequest(w, r) - // if err != nil { - // log.Error("Request error:", err) - // return - // } - - body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen)) //io.LimitReader限制大小 - if err != nil { - log.Error("io.ReadAll failed:", err) - services.ResponseNotFound404UriNotExist(w, r) - return - } - - vars := mux.Vars(r) - module := "" - dbname := vars["elementTypeValue"] - tbname := vars["objectTypeValue"] - pack := "dbrest" - - log.Debugf("method:%s, module:%s, dbname:%s, tbname:%s, pack:%s", r.Method, module, dbname, tbname, pack) - - // exist, err := services.CheckUserPermission(token, strings.ToLower(r.Method), module, dbname, tbname, pack) - // if err != nil { - // log.Error("Failed to get permission:", err) - // services.ResponseForbidden403NotPermission(w) - // return - // } - // if !exist { - // log.Error("permission deny!") - // services.ResponseForbidden403NotPermission(w) - // return - // } - - log.Debug("Request body:", string(body), "dataObject:", tbname) - insertData := make(map[string]interface{}) - _ = json.Unmarshal(body, &insertData) - - tn, sql := dborm.ConstructInsertSQL(tbname, insertData) - log.Tracef("tn: %s sql :%s", tn, sql) - - var affected int64 - for _, s := range sql { - n, err := db.ExecDB("", s, nil) - if err != nil { - log.Error("Insert failed:", err) - services.ResponseInternalServerError500DatabaseOperationFailed(w) - return - } - affected = affected + n - } - - // affected, err := InsertDataWithJson(insertData) - mapRow := make(map[string]interface{}) - row := map[string]interface{}{"affectedRows": affected} - mapRow[tn] = row - // xormResponse.Data = mapRow - services.ResponseWithJson(w, http.StatusOK, mapRow) -} - -func ExtDatabaseUpdateData(w http.ResponseWriter, r *http.Request) { - log.Debug("ExtDatabaseUpdateData processing... ") - - // token, err := services.CheckExtValidRequest(w, r) - // if err != nil { - // log.Error("Request error:", err) - // return - // } - - vars := mux.Vars(r) - module := "" - dbname := vars["elementTypeValue"] - tbname := vars["objectTypeValue"] - pack := "dbrest" - - log.Debugf("method:%s, module:%s, dbname:%s, tbname:%s, pack:%s", r.Method, module, dbname, tbname, pack) - - // exist, err := services.CheckUserPermission(token, strings.ToLower(r.Method), module, dbname, tbname, pack) - // if err != nil { - // log.Error("Failed to get permission:", err) - // services.ResponseForbidden403NotPermission(w) - // return - // } - // if !exist { - // log.Error("Not permission!") - // services.ResponseForbidden403NotPermission(w) - // return - // } - - body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen)) - if err != nil { - log.Error("io.ReadAll is failed:", err) - services.ResponseNotFound404UriNotExist(w, r) - return - } - - wc := services.GetUriLocString(r) - - log.Debug("Request body:", string(body), "Tablename:", tbname, "wc:", wc) - updateData := make(map[string]interface{}) - _ = json.Unmarshal(body, &updateData) - - tn, sql := dborm.ConstructUpdateSQL(tbname, updateData, wc) - log.Tracef("tn: %s sql :%s", tn, sql) - - var affected int64 - for _, s := range sql { - n, err := db.ExecDB("", s, nil) - if err != nil { - log.Error("Update failed:", err) - services.ResponseInternalServerError500DatabaseOperationFailed(w) - return - } - affected = affected + n - } - - mapRow := make(map[string]interface{}) - row := map[string]interface{}{"affectedRows": affected} - mapRow[tn] = row - services.ResponseWithJson(w, http.StatusOK, mapRow) -} - -func ExtDatabaseDeleteData(w http.ResponseWriter, r *http.Request) { - log.Debug("ExtDatabaseDeleteData processing... ") - - // token, err := services.CheckExtValidRequest(w, r) - // if err != nil { - // log.Error("Request error:", err) - // return - // } - - vars := mux.Vars(r) - module := "" - dbname := vars["elementTypeValue"] - tbname := vars["objectTypeValue"] - pack := "dbreset" - - log.Debugf("method:%s, module:%, dbname:%s, tbname:%s pack:%s", r.Method, module, dbname, tbname, pack) - - // exist, err := services.CheckUserPermission(token, strings.ToLower(r.Method), module, dbname, tbname, pack) - // if err != nil { - // log.Error("Failed to get permission:", err) - // services.ResponseForbidden403NotPermission(w) - // return - // } - // if !exist { - // log.Error("Not permission!") - // services.ResponseForbidden403NotPermission(w) - // return - // } - - wc := services.GetUriLocString(r) - - log.Debug("Table name:", tbname, "wc:", wc) - - sql := dborm.ConstructDeleteSQL(tbname, wc) - - affected, err := db.ExecDB("", sql, nil) - if err != nil { - log.Error("Update failed, err:", err) - services.ResponseInternalServerError500DatabaseOperationFailed(w) - return - } - - mapRow := make(map[string]interface{}) - row := map[string]interface{}{"affectedRows": affected} - mapRow["data"] = row - services.ResponseWithJson(w, http.StatusOK, mapRow) -} - -// xorm Get data from database -func DatabaseGetData(w http.ResponseWriter, r *http.Request) { - log.Debug("DatabaseGetData processing... ") - - var sql []string - - // _, err = services.CheckFrontValidRequest(w, r) - // if err != nil { - // log.Error("Request error:", err) - // return - // } - - vars := mux.Vars(r) - tblName := vars["objectTypeValue"] - sql = GetUriSQLArray(r) - // select as must, todo ... - - if sql == nil { - wc := services.GetUriWhereString(r) - if wc == "" { - sql = append(sql, fmt.Sprintf("select * from %s", tblName)) - } else { - sql = append(sql, fmt.Sprintf("select * from %s where %s", tblName, wc)) - } - } - - ls := services.GetUriPageLimitString(r) - - // data := make([]map[string]interface{}, 0) - // xormResponse := make([]map[string]interface{}, len(sql)) - var xormResponse XormResponse - data := make([]map[string]interface{}, 0) - for i, s := range sql { - log.Tracef("SQL[%d]: %s", i, sql[i]) - - mapRows := make(map[string]interface{}) - - if s != "" { - // err = XEngine.SQL(s).Find(&rows) - if !IsQuerySQL(s) { - services.ResponseNotAcceptable406QuerySQLError(w) - return - } - - querySQL := s - if i == (len(sql) - 1) { - querySQL = querySQL + " " + ls - } - log.Debug("querySQL:", querySQL) - rows, err := db.RawDB("", querySQL, nil) - if err != nil { - log.Error("QueryInterface failed:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - tableName := GetTableName(s) - log.Debugf("s:%s tableName:%s", s, tableName) - mapRows[tableName] = rows - data = append(data, mapRows) - log.Trace("data:", data) - } - i++ - } - xormResponse.Data = data - - services.ResponseWithJson(w, http.StatusOK, xormResponse) -} - -func DatabaseInsertData(w http.ResponseWriter, r *http.Request) { - log.Debug("DatabaseInsertData processing... ") - - body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen)) //io.LimitReader限制大小 - if err != nil { - log.Error("io.ReadAll failed:", err) - services.ResponseNotFound404UriNotExist(w, r) - return - } - - vars := mux.Vars(r) - tableName := vars["objectTypeValue"] - log.Debug("Request body:", string(body), "tableName:", tableName) - insertData := make(map[string]interface{}) - _ = json.Unmarshal(body, &insertData) - - // 操作日志的IP - if tableName == "operation_log" || tableName == "security_log" { - ipAddr := strings.Split(r.RemoteAddr, ":")[0] - s := insertData["data"].([]any) - a := s[0].(map[string]any) - a["op_ip"] = ipAddr - } else if tableName == "mml_log" { - ipAddr := strings.Split(r.RemoteAddr, ":")[0] - s := insertData["data"].([]any) - a := s[0].(map[string]any) - a["ip"] = ipAddr - } - - tn, sql := dborm.ConstructInsertSQL(tableName, insertData) - log.Tracef("tn: %s sql :%s", tn, sql) - - var affected int64 - for _, s := range sql { - n, err := db.ExecDB("", s, nil) - if err != nil { - log.Error("Insert failed:", err) - services.ResponseInternalServerError500DatabaseOperationFailed(w) - return - } - affected = affected + n - } - - // affected, err := InsertDataWithJson(insertData) - mapRow := make(map[string]interface{}) - row := map[string]interface{}{"affectedRows": affected} - mapRow[tn] = row - // xormResponse.Data = mapRow - services.ResponseWithJson(w, http.StatusOK, mapRow) -} - -func DatabaseUpdateData(w http.ResponseWriter, r *http.Request) { - log.Debug("DatabaseUpdateData processing... ") - - body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen)) - if err != nil { - log.Error("io.ReadAll is failed:", err) - services.ResponseNotFound404UriNotExist(w, r) - return - } - - vars := mux.Vars(r) - tblName := vars["objectTypeValue"] - wc := services.GetUriWhereString(r) - - log.Debug("Request body:", string(body), "Table name:", tblName, "wc:", wc) - updateData := make(map[string]interface{}) - _ = json.Unmarshal(body, &updateData) - - tn, sql := dborm.ConstructUpdateSQL(tblName, updateData, wc) - log.Tracef("tn: %s sql :%s", tn, sql) - - var affected int64 - for _, s := range sql { - n, err := db.ExecDB("", s, nil) - if err != nil { - log.Error("Update failed:", err) - services.ResponseInternalServerError500DatabaseOperationFailed(w) - return - } - affected = affected + n - } - - mapRow := make(map[string]interface{}) - row := map[string]interface{}{"affectedRows": affected} - mapRow[tn] = row - services.ResponseWithJson(w, http.StatusOK, mapRow) -} - -func DatabaseDeleteData(w http.ResponseWriter, r *http.Request) { - log.Debug("DatabaseDeleteData processing... ") - - vars := mux.Vars(r) - tblName := vars["objectTypeValue"] - wc := services.GetUriWhereString(r) - - log.Debug("Table name:", tblName, "wc:", wc) - - sql := dborm.ConstructDeleteSQL(tblName, wc) - - affected, err := db.ExecDB("", sql, nil) - if err != nil { - log.Error("Update failed, err:", err) - services.ResponseInternalServerError500DatabaseOperationFailed(w) - return - } - - mapRow := make(map[string]interface{}) - row := map[string]interface{}{"affectedRows": affected} - mapRow["data"] = row - services.ResponseWithJson(w, http.StatusOK, mapRow) -} - -// 连接用户实例 -func DbConnection(w http.ResponseWriter, r *http.Request) { - // 获取底层 SQL 数据库连接 - sqlDB, err := db.DB("").DB() - if err != nil { - services.ResponseErrorWithJson(w, 400, "无连接") - return - } - // 测试数据库连接 - err = sqlDB.Ping() - if err != nil { - services.ResponseErrorWithJson(w, 400, "无连接") - return - } - - // 查询实例 - result, err := db.RawDB("", "SHOW PROCESSLIST;", nil) - if err != nil { - services.ResponseErrorWithJson(w, 500, err.Error()) - } - filterData := []map[string]any{} - for _, r := range result { - if r["User"] != "system user" { - filterData = append(filterData, r) - } - } - // Sleep:连接处于空闲状态,没有执行任何操作。 - // Query:连接正在执行一个查询语句。 - // Execute:连接正在执行一个准备好的 SQL 语句。 - // Connect:连接正在建立但尚未完成。 - services.ResponseWithJson(w, 200, filterData) -} - -// 关闭数据库连接 -func DbStop(w http.ResponseWriter, r *http.Request) { - // 获取底层 SQL 数据库连接 - sqlDB, err := db.DB("").DB() - if err != nil { - services.ResponseErrorWithJson(w, 400, "无连接") - return - } - // 测试数据库连接 - err = sqlDB.Ping() - if err != nil { - services.ResponseErrorWithJson(w, 400, "无连接") - return - } - - // json 請求參數獲取 - var bodyArgs struct { - ID string `json:"ID" validate:"required"` - } - err = ctx.ShouldBindJSON(r, &bodyArgs) - if err != nil { - log.Error("io.ReadAll is failed:", err) - services.ResponseErrorWithJson(w, 400, err.Error()) - return - } - - // 关闭 - rse, err := db.ExecDB("", "KILL ?;", []any{bodyArgs.ID}) - if err != nil { - services.ResponseErrorWithJson(w, 500, err.Error()) - return - } - services.ResponseWithJson(w, 200, rse) -} - -// xorm Get data from database -func TaskDatabaseGetData(w http.ResponseWriter, r *http.Request) { - log.Debug("DatabaseGetData processing... ") - - vars := mux.Vars(r) - tblName := vars["objectTypeValue"] - var sql = GetUriSQLArray(r) - // select as must, todo ... - - if sql == nil { - wc := services.GetUriWhereString(r) - if wc == "" { - sql = append(sql, fmt.Sprintf("select * from %s", tblName)) - } else { - sql = append(sql, fmt.Sprintf("select * from %s where %s", tblName, wc)) - } - } - - ls := services.GetUriPageLimitString(r) - - // data := make([]map[string]interface{}, 0) - // xormResponse := make([]map[string]interface{}, len(sql)) - var xormResponse XormResponse - data := make([]map[string]interface{}, 0) - for i, s := range sql { - log.Tracef("SQL[%d]: %s", i, sql[i]) - - mapRows := make(map[string]interface{}) - - if s != "" { - // err = XEngine.SQL(s).Find(&rows) - if !IsQuerySQL(s) { - services.ResponseNotAcceptable406QuerySQLError(w) - return - } - - querySQL := s - if i == (len(sql) - 1) { - querySQL = querySQL + " " + ls - } - log.Debug("querySQL:", querySQL) - rows, err := db.RawDB("", querySQL, nil) - if err != nil { - log.Error("SQL failed:", err) - services.ResponseInternalServerError500DatabaseOperationFailed(w) - return - } - tableName := GetTableName(s) - log.Debugf("s:%s tableName:%s", s, tableName) - mapRows[tableName] = rows - data = append(data, mapRows) - log.Trace("data:", data) - } - i++ - } - xormResponse.Data = data - - services.ResponseWithJson(w, http.StatusOK, xormResponse) -} - -func TaskDatabaseInsertData(w http.ResponseWriter, r *http.Request) { - log.Debug("DatabaseInsertData processing... ") - - body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen)) //io.LimitReader限制大小 - if err != nil { - log.Error("io.ReadAll failed:", err) - services.ResponseNotFound404UriNotExist(w, r) - return - } - - vars := mux.Vars(r) - tableName := vars["objectTypeValue"] - log.Debug("Request body:", string(body), "tableName:", tableName) - insertData := make(map[string]interface{}) - _ = json.Unmarshal(body, &insertData) - - tn, sql := dborm.ConstructInsertSQL(tableName, insertData) - log.Tracef("tn: %s sql :%s", tn, sql) - - var affected int64 - for _, s := range sql { - n, err := db.ExecDB("", s, nil) - if err != nil { - log.Error("Insert failed:", err) - services.ResponseInternalServerError500DatabaseOperationFailed(w) - return - } - affected = affected + n - } - - // affected, err := InsertDataWithJson(insertData) - mapRow := make(map[string]interface{}) - row := map[string]interface{}{"affectedRows": affected} - mapRow[tn] = row - // xormResponse.Data = mapRow - services.ResponseWithJson(w, http.StatusOK, mapRow) -} - -func TaskDatabaseUpdateData(w http.ResponseWriter, r *http.Request) { - log.Debug("DatabaseUpdateData processing... ") - - body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen)) - if err != nil { - log.Error("io.ReadAll is failed:", err) - services.ResponseNotFound404UriNotExist(w, r) - return - } - - vars := mux.Vars(r) - tblName := vars["objectTypeValue"] - wc := services.GetUriWhereString(r) - - log.Debug("Request body:", string(body), "Table name:", tblName, "wc:", wc) - updateData := make(map[string]interface{}) - _ = json.Unmarshal(body, &updateData) - - tn, sql := dborm.ConstructUpdateSQL(tblName, updateData, wc) - log.Tracef("tn: %s sql :%s", tn, sql) - - var affected int64 - for _, s := range sql { - n, err := db.ExecDB("", s, nil) - if err != nil { - log.Error("Update failed:", err) - services.ResponseInternalServerError500DatabaseOperationFailed(w) - return - } - affected = affected + n - } - - mapRow := make(map[string]interface{}) - row := map[string]interface{}{"affectedRows": affected} - mapRow[tn] = row - services.ResponseWithJson(w, http.StatusOK, mapRow) -} - -func TaskDatabaseDeleteData(w http.ResponseWriter, r *http.Request) { - log.Debug("DatabaseDeleteData processing... ") - - vars := mux.Vars(r) - tblName := vars["objectTypeValue"] - wc := services.GetUriWhereString(r) - - log.Debug("Table name:", tblName, "wc:", wc) - - sql := dborm.ConstructDeleteSQL(tblName, wc) - - affected, err := db.ExecDB("", sql, nil) - if err != nil { - log.Error("Update failed, err:", err) - services.ResponseInternalServerError500DatabaseOperationFailed(w) - return - } - - mapRow := make(map[string]interface{}) - row := map[string]interface{}{"affectedRows": affected} - mapRow["data"] = row - services.ResponseWithJson(w, http.StatusOK, mapRow) -} diff --git a/features/event/event.go b/features/event/event.go deleted file mode 100644 index 5e3853f1..00000000 --- a/features/event/event.go +++ /dev/null @@ -1,248 +0,0 @@ -package event - -import ( - "encoding/json" - "fmt" - "net/http" - "strings" - "time" - - "be.ems/lib/config" - "be.ems/lib/core/ctx" - "be.ems/lib/log" - "be.ems/lib/services" - - "be.ems/src/framework/database/db" - "be.ems/src/framework/utils/date" - "be.ems/src/framework/utils/parse" - neService "be.ems/src/modules/network_element/service" - wsService "be.ems/src/modules/ws/service" - - "github.com/gin-gonic/gin" -) - -var ( - // 走Gin - UriUEEventAMF = "/upload-ue/v1/:eventType" - // 走Mux - UriUEEvent = config.DefaultUriPrefix + "/logManagement/v1/elementType/{elementTypeValue}/objectType/ueEvent" - CustomUriUEEvent = config.UriPrefix + "/logManagement/v1/elementType/{elementTypeValue}/objectType/ueEvent" -) - -// 旧AMF上报处理 -func PostUEEventFromAMF(c *gin.Context) { - log.Info("PostUEEventFromAMF processing... ") - eventType := c.Param("eventType") - if eventType == "" { - log.Error("eventType is empty") - services.ResponseNotFound404UriNotExist(c.Writer, c.Request) - return - } - var body map[string]any - if err := c.ShouldBindBodyWithJSON(&body); err != nil { - log.Error("Failed to Unmarshal ueEvent:", err) - services.ResponseInternalServerError500ProcessError(c.Writer, err) - return - } - - // 执行插入表 - type UEEvent struct { - ID string `json:"id" gorm:"column:id;primaryKey;autoIncrement"` - NeType string `json:"neType" gorm:"column:ne_type"` - NeName string `json:"neName" gorm:"column:ne_name"` - RmUID string `json:"rmUID" gorm:"column:rm_uid"` // 可能没有 - Timestamp int64 `json:"timestamp" gorm:"column:timestamp"` // 接收到的timestamp秒级存储毫秒时间戳 - EventType string `json:"eventType" gorm:"column:event_type"` // 事件类型 auth-result detach cm-state - EventJSONStr string `json:"eventJSON" gorm:"column:event_json"` // data JSON String - CreatedAt int64 `json:"createdAt" gorm:"column:created_at"` // 记录创建存储毫秒 - } - timestamp := time.Now().UnixMilli() - data := UEEvent{ - NeType: "AMF", - NeName: "", - RmUID: "", - Timestamp: timestamp, - EventType: eventType, - EventJSONStr: "", - CreatedAt: timestamp, - } - - // 从eventJson中获取rmUID - if v, ok := body["rmUID"]; ok { - data.RmUID = fmt.Sprint(v) - } else { - data.RmUID = "4400HXAMF001" - } - if v, ok := body["neName"]; ok { - data.NeName = fmt.Sprint(v) - } else { - data.NeName = "AMF_001" - } - - // 是否存在网元 - neInfo := neService.NewNeInfo.FindByRmuid(data.RmUID) - if neInfo.NeType != "AMF" || neInfo.RmUID != data.RmUID { - services.ResponseInternalServerError500ProcessError(c.Writer, fmt.Errorf("network element does not exist")) - return - } - - // 统一格式 - eventJson := map[string]any{"cellID": 0, "gNBID": "", "imsi": "", "onlineNumber": 0, "result": "", "tacID": 0, "timestamp": 0, "time": 0, "type": eventType} - switch eventType { - case "auth-result": - // {"authCode":"200","authMessage":"成功","authTime":"2024-12-07 16:48:37","cellID":"3","gNBID":"1","imsi":"460002082100000","onlineNumber":1,"tacID":"81"} - if v, ok := body["imsi"]; ok { - eventJson["imsi"] = fmt.Sprint(v) - } - if v, ok := body["cellID"]; ok { - eventJson["cellID"] = fmt.Sprint(v) - } - if v, ok := body["gNBID"]; ok { - eventJson["gNBID"] = fmt.Sprint(v) - } - if v, ok := body["tacID"]; ok { - eventJson["tacID"] = fmt.Sprint(v) - } - if v, ok := body["onlineNumber"]; ok { - eventJson["onlineNumber"] = parse.Number(v) - } - if v, ok := body["authCode"]; ok { - eventJson["result"] = fmt.Sprint(v) - } - if v, ok := body["authTime"]; ok { - authTime := date.ParseStrToDate(fmt.Sprint(v), date.YYYY_MM_DD_HH_MM_SS) - eventJson["timestamp"] = authTime.Unix() - eventJson["time"] = fmt.Sprint(v) - } - case "detach": - // {"detachResult":0,"detachTime":"2024-12-07 18:00:47","imsi":"460002082100000"} - if v, ok := body["imsi"]; ok { - eventJson["imsi"] = fmt.Sprint(v) - } - if v, ok := body["detachResult"]; ok { - if fmt.Sprint(v) == "0" { - eventJson["result"] = "200" - } else { - eventJson["result"] = "500" - } - } - if v, ok := body["detachTime"]; ok { - detachTime := date.ParseStrToDate(fmt.Sprint(v), date.YYYY_MM_DD_HH_MM_SS) - eventJson["timestamp"] = detachTime.Unix() - eventJson["time"] = fmt.Sprint(v) - } - case "cm-state": - // {"changeTime":"2024-12-07 17:07:52","imsi":"460002082100000","onlineNumber":1,"status":2} - if v, ok := body["imsi"]; ok { - eventJson["imsi"] = fmt.Sprint(v) - } - if v, ok := body["onlineNumber"]; ok { - eventJson["onlineNumber"] = parse.Number(v) - } - if v, ok := body["status"]; ok { - eventJson["result"] = fmt.Sprint(v) - } - if v, ok := body["changeTime"]; ok { - changeTime := date.ParseStrToDate(fmt.Sprint(v), date.YYYY_MM_DD_HH_MM_SS) - eventJson["timestamp"] = changeTime.Unix() - eventJson["time"] = fmt.Sprint(v) - } - } - - ueByte, err := json.Marshal(eventJson) - if err != nil { - services.ResponseInternalServerError500ProcessError(c.Writer, err) - return - } - data.EventJSONStr = string(ueByte) - - if err := db.DB("").Table("ue_event_amf").Create(&data).Error; err != nil { - log.Error("Failed to insert ue_event_amf", err) - services.ResponseInternalServerError500ProcessError(c.Writer, err) - return - } - - // 推送到ws订阅组 - if data.NeType == "AMF" { - wsService.NewWSSend.ByGroupID(wsService.GROUP_AMF_UE, data) - wsService.NewWSSend.ByGroupID(wsService.GROUP_AMF_UE+"_"+neInfo.NeId, data) - } - - services.ResponseStatusOK204NoContent(c.Writer) -} - -// UE上报处理 -func PostUEEvent(w http.ResponseWriter, r *http.Request) { - log.Info("PostUEEvent processing... ") - neType := ctx.GetParam(r, "elementTypeValue") - var body struct { - NeType string `json:"neType" ` - NeName string `json:"neName" ` - RmUID string `json:"rmUID" ` - Timestamp int64 `json:"timestamp" ` - EventType string `json:"eventType" ` - EventJson map[string]any `json:"eventJSON" ` - } - if err := ctx.ShouldBindJSON(r, &body); err != nil { - services.ResponseInternalServerError500ProcessError(w, err) - return - } - - neTypeLower := strings.ToLower(body.NeType) - if neType == "" || neType != neTypeLower { - services.ResponseInternalServerError500ProcessError(w, fmt.Errorf("inconsistent network element types")) - return - } - - // 是否存在网元 - neInfo := neService.NewNeInfo.FindByRmuid(body.RmUID) - if neInfo.NeType != body.NeType || neInfo.RmUID != body.RmUID { - services.ResponseInternalServerError500ProcessError(w, fmt.Errorf("network element does not exist")) - return - } - - ueByte, err := json.Marshal(body.EventJson) - if err != nil { - services.ResponseInternalServerError500ProcessError(w, err) - return - } - - // 执行插入表 - type UEEvent struct { - ID string `json:"-" gorm:"column:id;primaryKey;autoIncrement"` - NeType string `json:"neType" gorm:"column:ne_type"` - NeName string `json:"neName" gorm:"column:ne_name"` - RmUID string `json:"rmUID" gorm:"column:rm_uid"` // 可能没有 - Timestamp int64 `json:"timestamp" gorm:"column:timestamp"` // 接收到的timestamp秒级存储毫秒时间戳 - EventType string `json:"eventType" gorm:"column:event_type"` // 事件类型 auth-result detach cm-state - EventJSONStr string `json:"eventJSON" gorm:"column:event_json"` // data JSON String - CreatedAt int64 `json:"-" gorm:"column:created_at"` // 记录创建存储毫秒 - } - data := UEEvent{ - NeType: body.NeType, - NeName: body.NeName, - RmUID: body.RmUID, - Timestamp: int64(body.Timestamp) * 1000, - EventType: body.EventType, - EventJSONStr: string(ueByte), - CreatedAt: time.Now().UnixMilli(), - } - tableName := fmt.Sprintf("ue_event_%s", neTypeLower) - if err := db.DB("").Table(tableName).Create(&data).Error; err != nil { - log.Error("Failed to insert "+tableName, err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - - // 推送到ws订阅组 - if body.NeType == "MME" { - wsService.NewWSSend.ByGroupID(wsService.GROUP_MME_UE, data) - wsService.NewWSSend.ByGroupID(wsService.GROUP_MME_UE+"_"+neInfo.NeId, data) - } - if body.NeType == "AMF" { - wsService.NewWSSend.ByGroupID(wsService.GROUP_AMF_UE, data) - wsService.NewWSSend.ByGroupID(wsService.GROUP_AMF_UE+"_"+neInfo.NeId, data) - } - - services.ResponseStatusOK204NoContent(w) -} diff --git a/features/features.go b/features/features.go deleted file mode 100644 index e4f68c75..00000000 --- a/features/features.go +++ /dev/null @@ -1,22 +0,0 @@ -package features - -import ( - "be.ems/features/cm" - "be.ems/features/lm" - "be.ems/features/nbi" - "be.ems/features/pm" - "be.ems/lib/log" - "github.com/gin-gonic/gin" -) - -func InitServiceEngine(r *gin.Engine) { - log.Info("======init feature group gin.Engine") - - // featuresGroup := r.Group("/") - // register features routers - pm.InitSubServiceRoute(r) - lm.InitSubServiceRoute(r) - cm.InitSubServiceRoute(r) - nbi.InitSubServiceRoute(r) - // return featuresGroup -} diff --git a/features/file/file.go b/features/file/file.go deleted file mode 100644 index bdd971f8..00000000 --- a/features/file/file.go +++ /dev/null @@ -1,141 +0,0 @@ -package file - -import ( - "net/http" - "path/filepath" - - "be.ems/lib/config" - "be.ems/lib/log" - "be.ems/lib/services" - "github.com/gorilla/mux" -) - -var ( - // parameter config management - UriFile = config.DefaultUriPrefix + "/fileManagement/{apiVersion}/{location}/file" - CustomUriFile = config.UriPrefix + "/fileManagement/{apiVersion}/{location}/file" -) - -// func init() { -// routes.Register("POST", UriFile, UploadFile, nil) -// routes.Register("GET", UriFile, DownloadFile, nil) -// routes.Register("DELETE", UriFile, DeleteFile, nil) -// } - -func UploadFile(w http.ResponseWriter, r *http.Request) { - log.Debug("UploadFile processing... ") - - // _, err := services.CheckFrontValidRequest(w, r) - // if err != nil { - // log.Error("Http request error:", err) - // return - // } - - vars := mux.Vars(r) - location := vars["location"] - if location == "" { - log.Error("location is empty") - services.ResponseNotFound404UriNotExist(w, r) - return - } - params := r.URL.Query() - rename, ok := params["rename"] - if !ok { - log.Info("rename parameter is not exist") - } - log.Debug("rename:", rename) - - var path, fileName string - if len(rename) > 0 { - fileName = rename[0] - } - if location == "upload" { - path = config.GetYamlConfig().OMC.Upload - fileNamePath, err := services.HandleUploadFile(r, path, fileName) - if err != nil { - log.Error("Faile to HandleUploadFile:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - fileName = fileNamePath - } else { - path = config.GetYamlConfig().OMC.FrontUpload - fileNamePath, err := services.HandleUploadFile(r, path, fileName) - if err != nil { - log.Error("Faile to HandleUploadFile:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - fileName = fileNamePath - } - log.Debugf("upload file=%s to path=%s", fileName, path) - - services.ResponseStatusOK204NoContent(w) - return -} - -func DownloadFile(w http.ResponseWriter, r *http.Request) { - log.Debug("DownloadFile processing... ") - - // _, err := services.CheckFrontValidRequest(w, r) - // if err != nil { - // log.Error("Request error:", err) - // return - // } - - vars := mux.Vars(r) - location := vars["location"] - if location == "" { - log.Error("location is empty") - services.ResponseNotFound404UriNotExist(w, r) - return - } - - // 全路径文件下载 - filePath := r.URL.Query().Get("path") - if location == "path" && filePath != "" { - // 截取文件路径 - dir := filepath.Dir(filePath) - // 截取文件名 - fileName := filepath.Base(filePath) - services.ResponseFileWithNameAndMD5(w, http.StatusOK, fileName, dir, "") - return - } - - params := r.URL.Query() - fileNames, ok := params["loc"] - if !ok { - log.Info("loc parameter is not exist") - } - var path string - if location == "upload" { - path = config.GetYamlConfig().OMC.Upload - } else { - path = config.GetYamlConfig().OMC.FrontUpload - } - for _, fileName := range fileNames { - services.ResponseFileWithNameAndMD5(w, http.StatusOK, fileName, path, "") - } - return -} - -func DeleteFile(w http.ResponseWriter, r *http.Request) { - log.Debug("DeleteFile processing... ") - - // _, err := services.CheckFrontValidRequest(w, r) - // if err != nil { - // log.Error("Request error:", err) - // return - // } - - vars := mux.Vars(r) - neType := vars["neType"] - if neType == "" { - log.Error("neType is empty") - services.ResponseNotFound404UriNotExist(w, r) - return - } - - services.ResponseStatusOK204NoContent(w) - return -} diff --git a/features/fm/alarm.go b/features/fm/alarm.go deleted file mode 100644 index e5f624fe..00000000 --- a/features/fm/alarm.go +++ /dev/null @@ -1,567 +0,0 @@ -package fm - -import ( - "database/sql" - "encoding/json" - "fmt" - "net/http" - "strings" - - "be.ems/lib/config" - "be.ems/lib/core/ctx" - "be.ems/lib/global" - "be.ems/lib/log" - "be.ems/lib/services" - - "be.ems/src/framework/constants" - "be.ems/src/framework/resp" - "be.ems/src/framework/utils/date" - neDataModel "be.ems/src/modules/network_data/model" - neDataService "be.ems/src/modules/network_data/service" - neFetchlink "be.ems/src/modules/network_element/fetch_link" - neModel "be.ems/src/modules/network_element/model" - neService "be.ems/src/modules/network_element/service" - traceService "be.ems/src/modules/trace/service" - wsService "be.ems/src/modules/ws/service" -) - -const ( - AlarmStatusClear = 0 - AlarmStatusActive = 1 - AlarmStatusClearString = "0" - AlarmStatusActiveString = "1" -) - -const ( - ClearTypeUnclear = 0 - ClearTypeAutoClear = 1 - ClearTypeManualClear = 2 -) - -const ( - AckStateUnacked = 0 - AckStateAcked = 1 -) - -const ( - AlarmTypeCommunicationAlarm = 1 - AlarmTypeEquipmentAlarm = 2 - AlarmTypeProcessingFailure = 3 - AlarmTypeEnvironmentalAlarm = 4 - AlarmTypeQualityOfServiceAlarm = 5 -) - -const ( - AlarmPerceivedSeverityCritical = 1 - AlarmPerceivedSeverityMajor = 2 - AlarmPerceivedSeverityMinor = 3 - AlarmPerceivedSeverityWarning = 4 - AlarmPerceivedSeverityEvent = 5 -) - -const ( - AlarmSeqBeginNumber = 1 -) - -type Alarm struct { - AlarmSeq int `json:"alarmSeq"` - AlarmId string `json:"alarmId" xorm:"alarm_id"` - NeId string `json:"neId"` // 收到实际是rmUID - AlarmCode int `json:"alarmCode"` - AlarmTitle string `json:"alarmTitle"` - EventTime string `json:"eventTime"` - AlarmType string `json:"alarmType"` - OrigSeverity string `json:"origSeverity"` - PerceivedSeverity string `json:"perceivedSeverity"` - PVFlag string `json:"pvFlag" xorm:"pv_flag"` - NeName string `json:"neName"` - NeType string `json:"neType"` - ObjectUid string `json:"objectUid" xorm:"object_uid"` - ObjectName string `json:"objectName" xorm:"object_name"` - ObjectType string `json:"objectType" xorm:"object_type"` - LocationInfo string `json:"locationInfo"` - Province string `json:"province"` - AlarmStatus int `json:"alarmStatus"` - SpecificProblem string `json:"specificProblem"` - SpecificProblemID string `json:"specificProblemID" xorm:"specific_problem_id"` - AddInfo string `json:"addInfo"` - - AckState int `json:"ackState"` - AckTime sql.NullTime `json:"ackTime"` - AckUser string `json:"ackUser"` - ClearType int `json:"clearType"` // 0: Unclear, 1: Auto clear, 2: Manual clear - ClearTime sql.NullTime `json:"clearTime"` -} - -var ( - // alarm management - UriAlarms = config.DefaultUriPrefix + "/faultManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/alarms" - UriAlarmsFmt = config.DefaultUriPrefix + "/faultManagement/v1/elementType/%s/objectType/alarms" - - CustomUriAlarms = config.UriPrefix + "/faultManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/alarms" - CustomUriAlarmsFmt = config.UriPrefix + "/faultManagement/v1/elementType/%s/objectType/alarms" -) - -// PostAlarmFromNF 网元告警数据上报接收 -func PostAlarmFromNF(w http.ResponseWriter, r *http.Request) { - log.Debug("PostAlarmFromNF processing... ") - apiVer := ctx.GetParam(r, "apiVersion") - if apiVer != global.ApiVersionV1 { - log.Error("Uri api version is invalid. apiVersion:", apiVer) - services.ResponseWithJson(w, 422, resp.CodeMsg(40422, "api version is invalid")) - return - } - - var body []Alarm - if err := ctx.ShouldBindJSON(r, &body); err != nil { - services.ResponseWithJson(w, 422, resp.ErrMsg(err.Error())) - return - } - - // service object - neService := neService.NewNeInfo - - for _, v := range body { - log.Debug("alarmData:", v) - - // 是否存在网元 neId实际是rmUID - neInfo := neService.FindByRmuid(v.NeId) - if neInfo.NeType != v.NeType { - msg := fmt.Sprintf("network element does not exist %s", v.NeId) - services.ResponseWithJson(w, 400, resp.ErrMsg(msg)) - return - } - - // 记录日志 - alarmSaveLog(neInfo, v) - - // 补充默认信息 - if v.LocationInfo == "" { - v.LocationInfo = fmt.Sprintf("Remote Host:%s", r.RemoteAddr) - } - if v.AddInfo == "" { - v.AddInfo = fmt.Sprintf("NeInfo:%s", v.NeType) - } - if v.ObjectUid == "" { - v.ObjectUid = neInfo.RmUID - } - if v.ObjectName == "" { - v.ObjectName = neInfo.NeName - } - if v.ObjectType == "" { - v.ObjectType = neInfo.NeType - } - - // 告警事件 - if v.OrigSeverity == "Event" || v.OrigSeverity == "5" { - if v.AlarmStatus == AlarmStatusClear { - // 进行清除 - clearAlarmEvent, err := alarmEventClear(neInfo, v) - if err != nil { - services.ResponseWithJson(w, 400, resp.ErrMsg(err.Error())) - return - } - groupID := fmt.Sprintf("%s_%s_%s", wsService.GROUP_ALARM_EVENT, neInfo.NeType, neInfo.NeId) - wsService.NewWSSend.ByGroupID(groupID, clearAlarmEvent) - } - if v.AlarmStatus == AlarmStatusActive { - // 进行新增 - newAlarmEvent, err := alarmEventNew(neInfo, v) - if err != nil { - services.ResponseWithJson(w, 400, resp.ErrMsg(err.Error())) - return - } - groupID := fmt.Sprintf("%s_%s_%s", wsService.GROUP_ALARM_EVENT, neInfo.NeType, neInfo.NeId) - wsService.NewWSSend.ByGroupID(groupID, newAlarmEvent) - } - continue - } - - if v.AlarmStatus == AlarmStatusClear { - // 进行清除 - clearAlarm, err := alarmClear(neInfo, v) - if err != nil { - services.ResponseWithJson(w, 400, resp.ErrMsg(err.Error())) - return - } - groupID := fmt.Sprintf("%s_%s_%s", wsService.GROUP_ALARM, neInfo.NeType, neInfo.NeId) - wsService.NewWSSend.ByGroupID(groupID, clearAlarm) - } - if v.AlarmStatus == AlarmStatusActive { - // 进行新增 - newAlarm, err := alarmNew(neInfo, v) - if err != nil { - services.ResponseWithJson(w, 400, resp.ErrMsg(err.Error())) - return - } - groupID := fmt.Sprintf("%s_%s_%s", wsService.GROUP_ALARM, neInfo.NeType, neInfo.NeId) - wsService.NewWSSend.ByGroupID(groupID, newAlarm) - } - - // for alarm forward 告警转发 - alarmForward(v) - } - - services.ResponseStatusOK204NoContent(w) -} - -// alarmTypeValue 映射值 -func alarmTypeValue(str string) string { - arr := []string{"CommunicationAlarm", "EquipmentAlarm", "ProcessingFailure", "EnvironmentalAlarm", "QualityOfServiceAlarm"} - for k, v := range arr { - if v == str { - return fmt.Sprint(k + 1) - } - } - return str -} - -// origSeverityValue 映射值 -func origSeverityValue(str string) string { - arr := []string{"Critical", "Major", "Minor", "Warning", "Event"} - for k, v := range arr { - if v == str { - return fmt.Sprint(k + 1) - } - } - return str -} - -// alarmClear 清除告警 -func alarmClear(neInfo neModel.NeInfo, v Alarm) (neDataModel.Alarm, error) { - alarmService := neDataService.NewAlarm - // 检查网元告警ID是否唯一 - alarmIdArr := alarmService.Find(neDataModel.Alarm{ - NeType: neInfo.NeType, - NeId: neInfo.NeId, - AlarmId: v.AlarmId, - }) - if len(alarmIdArr) != 1 { - return neDataModel.Alarm{}, fmt.Errorf("[%s %s] clear alarm not exists alarmId:%s", neInfo.NeType, neInfo.NeId, v.AlarmId) - } - - // 产生时间 - eventTime := date.ParseStrToDate(v.EventTime, date.YYYY_MM_DDTHH_MM_SSZ) - - alarm := neDataModel.Alarm{ - ID: alarmIdArr[0].ID, - NeType: neInfo.NeType, - NeId: neInfo.NeId, - NeName: neInfo.NeName, - Province: neInfo.Province, - PvFlag: neInfo.PvFlag, - AlarmSeq: alarmIdArr[0].AlarmSeq, // seq 告警序号 - AlarmId: v.AlarmId, - AlarmTitle: v.AlarmTitle, - AlarmCode: int64(v.AlarmCode), - EventTime: eventTime.UnixMilli(), - AlarmType: alarmTypeValue(v.AlarmType), - OrigSeverity: origSeverityValue(v.OrigSeverity), - PerceivedSeverity: origSeverityValue(v.PerceivedSeverity), - ObjectUid: v.ObjectUid, - ObjectName: v.ObjectName, - ObjectType: v.ObjectType, - LocationInfo: v.LocationInfo, - AlarmStatus: fmt.Sprint(v.AlarmStatus), - SpecificProblem: v.SpecificProblem, - SpecificProblemId: v.SpecificProblemID, - AddInfo: v.AddInfo, - } - - // 告警清除 - alarm.ClearType = ClearTypeAutoClear - alarm.ClearTime = eventTime.UnixMilli() - alarm.ClearUser = neInfo.NeName - rows := alarmService.Update(alarm) - if rows > 0 { - return alarm, nil - } - return neDataModel.Alarm{}, fmt.Errorf("[%s %s] clear alarm fail", neInfo.NeType, neInfo.NeId) -} - -// alarmNew 新增告警 -func alarmNew(neInfo neModel.NeInfo, v Alarm) (neDataModel.Alarm, error) { - alarmService := neDataService.NewAlarm - // 检查网元告警ID是否唯一 - alarmIdArr := alarmService.Find(neDataModel.Alarm{ - NeType: neInfo.NeType, - NeId: neInfo.NeId, - AlarmId: v.AlarmId, - }) - if len(alarmIdArr) > 0 { - return neDataModel.Alarm{}, fmt.Errorf("[%s %s] new alarm already exists alarmId:%s", neInfo.NeType, neInfo.NeId, v.AlarmId) - } - // seq 告警序号 - lastSeq := alarmService.FindAlarmSeqLast(neInfo.NeType, neInfo.NeId) - // 产生时间 - eventTime := date.ParseStrToDate(v.EventTime, date.YYYY_MM_DDTHH_MM_SSZ) - - alarm := neDataModel.Alarm{ - NeType: neInfo.NeType, - NeId: neInfo.NeId, - NeName: neInfo.NeName, - Province: neInfo.Province, - PvFlag: neInfo.PvFlag, - AlarmSeq: lastSeq + 1, - AlarmId: v.AlarmId, - AlarmTitle: v.AlarmTitle, - AlarmCode: int64(v.AlarmCode), - EventTime: eventTime.UnixMilli(), - AlarmType: alarmTypeValue(v.AlarmType), - OrigSeverity: origSeverityValue(v.OrigSeverity), - PerceivedSeverity: origSeverityValue(v.PerceivedSeverity), - ObjectUid: v.ObjectUid, - ObjectName: v.ObjectName, - ObjectType: v.ObjectType, - LocationInfo: v.LocationInfo, - AlarmStatus: fmt.Sprint(v.AlarmStatus), - SpecificProblem: v.SpecificProblem, - SpecificProblemId: v.SpecificProblemID, - AddInfo: v.AddInfo, - } - insertId := alarmService.Insert(alarm) - if insertId > 0 { - alarm.ID = insertId - return alarm, nil - } - return neDataModel.Alarm{}, fmt.Errorf("[%s %s] new alarm fail", neInfo.NeType, neInfo.NeId) -} - -// alarmSaveLog 保存告警日志 -func alarmSaveLog(neInfo neModel.NeInfo, v Alarm) int64 { - alarmLogService := neDataService.NewAlarmLog - eventTime := date.ParseStrToDate(v.EventTime, date.YYYY_MM_DDTHH_MM_SSZ) - alarmLog := neDataModel.AlarmLog{ - NeType: neInfo.NeType, - NeId: neInfo.NeId, - AlarmSeq: int64(v.AlarmSeq), - AlarmId: v.AlarmId, - AlarmTitle: v.AlarmTitle, - AlarmCode: int64(v.AlarmCode), - AlarmStatus: fmt.Sprint(v.AlarmStatus), - AlarmType: alarmTypeValue(v.AlarmType), - OrigSeverity: origSeverityValue(v.OrigSeverity), - EventTime: eventTime.UnixMilli(), - } - return alarmLogService.Insert(alarmLog) -} - -// alarmForward 告警转发 -func alarmForward(v Alarm) { - if config.GetYamlConfig().Alarm.EmailForward.Enable { - if err := AlarmEmailForward(&v); err != nil { - log.Error("Failed to AlarmEmailForward:", err) - } - } - if config.GetYamlConfig().Alarm.SMSCForward.Enable { - if err := AlarmSMSForward(&v); err != nil { - log.Error("Failed to AlarmSMSForward:", err) - } - } -} - -// alarmEventClear 清除告警事件 -func alarmEventClear(neInfo neModel.NeInfo, v Alarm) (neDataModel.AlarmEvent, error) { - alarmEventService := neDataService.NewAlarmEvent - // 检查网元告警ID是否唯一 - alarmIdArr := alarmEventService.Find(neDataModel.AlarmEvent{ - NeType: neInfo.NeType, - NeId: neInfo.NeId, - AlarmId: v.AlarmId, - }) - if len(alarmIdArr) != 1 { - return neDataModel.AlarmEvent{}, fmt.Errorf("[%s %s] clear alarm event not exists alarmId:%s", neInfo.NeType, neInfo.NeId, v.AlarmId) - } - - // 产生时间 - eventTime := date.ParseStrToDate(v.EventTime, date.YYYY_MM_DDTHH_MM_SSZ) - - alarmEvent := neDataModel.AlarmEvent{ - ID: alarmIdArr[0].ID, - NeType: neInfo.NeType, - NeId: neInfo.NeId, - AlarmSeq: alarmIdArr[0].AlarmSeq, // seq 告警序号 - AlarmId: v.AlarmId, - AlarmTitle: v.AlarmTitle, - AlarmCode: int64(v.AlarmCode), - EventTime: eventTime.UnixMilli(), - ObjectUid: v.ObjectUid, - ObjectName: v.ObjectName, - ObjectType: v.ObjectType, - LocationInfo: v.LocationInfo, - AlarmStatus: fmt.Sprint(v.AlarmStatus), - SpecificProblem: v.SpecificProblem, - SpecificProblemId: v.SpecificProblemID, - AddInfo: v.AddInfo, - } - - // 告警清除 - alarmEvent.ClearType = ClearTypeAutoClear - alarmEvent.ClearTime = eventTime.UnixMilli() - alarmEvent.ClearUser = neInfo.NeName - rows := alarmEventService.Update(alarmEvent) - if rows > 0 { - return alarmEvent, nil - } - return neDataModel.AlarmEvent{}, fmt.Errorf("[%s %s] clear alarm event fail", neInfo.NeType, neInfo.NeId) -} - -// alarmEventNew 新增告警事件 -func alarmEventNew(neInfo neModel.NeInfo, v Alarm) (neDataModel.AlarmEvent, error) { - alarmEventService := neDataService.NewAlarmEvent - // 检查网元告警ID是否唯一 - alarmIdArr := alarmEventService.Find(neDataModel.AlarmEvent{ - NeType: neInfo.NeType, - NeId: neInfo.NeId, - AlarmId: v.AlarmId, - }) - if len(alarmIdArr) > 0 { - return neDataModel.AlarmEvent{}, fmt.Errorf("[%s %s] new alarm event already exists alarmId:%s", neInfo.NeType, neInfo.NeId, v.AlarmId) - } - // seq 告警序号 - lastSeq := alarmEventService.FindAlarmEventSeqLast(neInfo.NeType, neInfo.NeId) - // 产生时间 - eventTime := date.ParseStrToDate(v.EventTime, date.YYYY_MM_DDTHH_MM_SSZ) - - alarmEvent := neDataModel.AlarmEvent{ - NeType: neInfo.NeType, - NeId: neInfo.NeId, - AlarmSeq: lastSeq + 1, - AlarmId: v.AlarmId, - AlarmTitle: v.AlarmTitle, - AlarmCode: int64(v.AlarmCode), - EventTime: eventTime.UnixMilli(), - ObjectUid: v.ObjectUid, - ObjectName: v.ObjectName, - ObjectType: v.ObjectType, - LocationInfo: v.LocationInfo, - AlarmStatus: fmt.Sprint(v.AlarmStatus), - SpecificProblem: v.SpecificProblem, - SpecificProblemId: v.SpecificProblemID, - AddInfo: v.AddInfo, - } - insertId := alarmEventService.Insert(alarmEvent) - if insertId > 0 { - alarmEvent.ID = insertId - // 网元重启后,清除活动告警 - if v.AlarmCode == constants.ALARM_EVENT_REBOOT { - alarmService := neDataService.NewAlarm - rows := alarmService.Find(neDataModel.Alarm{ - NeType: neInfo.NeType, - NeId: neInfo.NeId, - AlarmStatus: "1", - }) - for _, v := range rows { - alarmService.AlarmClearByIds([]int64{v.ID}, "system") - } - } - // 网元重启后,有跟踪任务的需要重新补发启动任务 - if v.AlarmCode == constants.ALARM_EVENT_REBOOT { - traceService.NewTraceTask.RunUnstopped(neInfo.NeType, neInfo.NeId) - } - return alarmEvent, nil - } - return neDataModel.AlarmEvent{}, fmt.Errorf("[%s %s] new alarm event fail", neInfo.NeType, neInfo.NeId) -} - -// mapToAlarm 将 []map[string]any 转换为 []Alarm -func mapToAlarm(data []map[string]any) []Alarm { - var result []Alarm - - // 将 []map[string]any 序列化为 JSON 字符串 - jsonData, err := json.Marshal(data) - if err != nil { - log.Error("Error marshaling data:", err) - return result - } - - // 反序列化到结构体 - err = json.Unmarshal(jsonData, &result) - if err != nil { - log.Error("Error unmarshaling data:", err) - return result - } - return result -} - -// GetAlarmFromNF 告警历史数据,从网元获取 -func GetAlarmFromNF(w http.ResponseWriter, r *http.Request) { - log.Debug("GetAlarmFromNF processing... ") - neType := ctx.GetParam(r, "elementTypeValue") - neTypeLower := strings.ToLower(neType) - - // Get alarms from OMC return 204 - if neTypeLower == strings.ToLower(config.GetYamlConfig().OMC.NeType) { - log.Infof("Return no content alarms from %s", neType) - services.ResponseWithJson(w, 200, resp.ErrMsg("omc alarms no content")) - return - } - - neInfos := neService.NewNeInfo.Find(neModel.NeInfo{}, false, false) - for _, neInfo := range neInfos { - data, err := neFetchlink.AlarmHistory(neInfo) - if err != nil { - log.Error("Failed to fetch alarm history:", err) - continue - } - if len(data) == 0 { - log.Infof("Not found sync alarms, neType=%s, neId=%s", neInfo.NeType, neInfo.NeId) - continue - } - - alarms := mapToAlarm(data) - for _, v := range alarms { - // 补充默认信息 - if v.LocationInfo == "" { - v.LocationInfo = fmt.Sprintf("Remote Host:%s", r.RemoteAddr) - } - if v.AddInfo == "" { - v.AddInfo = fmt.Sprintf("NeInfo:%s", v.NeType) - } - if v.ObjectUid == "" { - v.ObjectUid = neInfo.RmUID - } - if v.ObjectName == "" { - v.ObjectName = neInfo.NeName - } - if v.ObjectType == "" { - v.ObjectType = neInfo.NeType - } - - // 告警事件 - if v.OrigSeverity == "Event" || v.OrigSeverity == "5" { - if v.AlarmStatus == AlarmStatusClear { - // 进行清除 - if _, err := alarmEventClear(neInfo, v); err != nil { - log.Error("Failed to alarmEventClear:", err) - continue - } - } - if v.AlarmStatus == AlarmStatusActive { - // 进行新增 - if _, err := alarmEventNew(neInfo, v); err != nil { - log.Error("Failed to alarmEventNew:", err) - continue - } - } - continue - } - - if v.AlarmStatus == AlarmStatusClear { - // 进行清除 - if _, err := alarmClear(neInfo, v); err != nil { - log.Error("Failed to alarmClear:", err) - continue - } - } - if v.AlarmStatus == AlarmStatusActive { - // 进行新增 - if _, err := alarmNew(neInfo, v); err != nil { - log.Error("Failed to alarmNew:", err) - continue - } - } - } - } - services.ResponseWithJson(w, 200, resp.OkMsg("sync alarms success")) -} diff --git a/features/fm/email.go b/features/fm/email.go deleted file mode 100644 index eacca7d1..00000000 --- a/features/fm/email.go +++ /dev/null @@ -1,129 +0,0 @@ -package fm - -import ( - "crypto/tls" - "fmt" - "strings" - - "be.ems/lib/config" - neService "be.ems/src/modules/network_element/service" - systemService "be.ems/src/modules/system/service" - - "gopkg.in/gomail.v2" -) - -func AlarmEmailForward(alarmData *Alarm) error { - neInfo := neService.NewNeInfo.FindByRmuid(alarmData.NeId) - - alarmStatus := "Clear" - if alarmData.AlarmStatus == 1 { - alarmStatus = "Active" - } - severity := origSeverityValue(alarmData.OrigSeverity) - dictAlarmSeverity := systemService.NewSysDictData.FindByType("active_alarm_severity") - for _, v := range dictAlarmSeverity { - if v.DataValue == severity { - severity = v.DataLabel - } - } - subjectTitle := config.GetYamlConfig().Alarm.EmailForward.Title - if subjectTitle == "" { - subjectTitle = fmt.Sprintf("%s-%s-%s", alarmData.OrigSeverity, alarmData.NeName, alarmData.AlarmTitle) - } - message := fmt.Sprintf(` -
Alarm information
-Sequence: %d
-NE Name: %s
-NE IP: %s
-Title: %s
-Severity: %s
-Event Time: %s
-Alarm Status: %s
-Automatic sent by OMC, please do not reply!
- `, - alarmData.AlarmSeq, - alarmData.NeName, - neInfo.IP, - alarmData.AlarmTitle, - severity, - alarmData.EventTime, - alarmStatus, - ) - - // message := fmt.Sprintf(` - // Alarm information - - // Sequence: %d - // NE name: %s - // Title: %s - // Severity: %s - // Event Time: %s - - // Automatic send by OMC, don't reply! - // `, alarmData.AlarmSeq, alarmData.NeName, alarmData.AlarmTitle, alarmData.OrigSeverity, alarmData.EventTime) - - // QQ 邮箱: - // SMTP 服务器地址:smtp.qq.com(SSL协议端口:465/994 | 非SSL协议端口:25) - // 163 邮箱: - // SMTP 服务器地址:smtp.163.com(端口:25) - // host := "mail.agrandtech.com" - // port := 25 - // userName := "smtpext@agrandtech.com" - // password := "1000smtp@omc!" - - host := config.GetYamlConfig().Alarm.EmailForward.SMTP - port := int(config.GetYamlConfig().Alarm.EmailForward.Port) - userName := config.GetYamlConfig().Alarm.EmailForward.User - password := config.GetYamlConfig().Alarm.EmailForward.Password - - m := gomail.NewMessage() - m.SetHeader("From", userName) // 发件人 - //m.SetHeader("From", "alias"+"<"+"aliastest"+">") // 增加发件人别名 - - // emails, err := dborm.XormGetAlarmForward("Email") - // if err != nil { - // log.Error("Failed to XormGetAlarmForward:", err) - // return err - // } else if emails == nil || len(*emails) == 0 { - // err := errors.New("not found forward email list") - // log.Error(err) - // return err - // } - emails := strings.Split(config.GetYamlConfig().Alarm.EmailForward.EmailList, ",") - if len(emails) == 0 { - return fmt.Errorf("not found forward email list") - } - m.SetHeader("To", emails...) // 收件人,可以多个收件人,但必须使用相同的 SMTP 连接 - //m.SetHeader("To", strings.Join(*emails, " ")) // 收件人,可以多个收件人,但必须使用相同的 SMTP 连接 - //m.SetHeader("To", "zhangshuzhong@agrandtech.com", "simonzhangsz@outlook.com") // 收件人,可以多个收件人,但必须使用相同的 SMTP 连接 - //m.SetHeader("Cc", "******@qq.com") // 抄送,可以多个 - //m.SetHeader("Bcc", "******@qq.com") // 暗送,可以多个 - m.SetHeader("Subject", subjectTitle) // 邮件主题 - - // text/html 的意思是将文件的 content-type 设置为 text/html 的形式,浏览器在获取到这种文件时会自动调用html的解析器对文件进行相应的处理。 - // 可以通过 text/html 处理文本格式进行特殊处理,如换行、缩进、加粗等等 - //m.SetBody("text/html", fmt.Sprintf(message, *alarm)) - m.SetBody("text/html", message) - - // text/plain的意思是将文件设置为纯文本的形式,浏览器在获取到这种文件时并不会对其进行处理 - //m.SetBody("text/plain", message) - // m.Attach("test.sh") // 附件文件,可以是文件,照片,视频等等 - // m.Attach("lolcatVideo.mp4") // 视频 - // m.Attach("lolcat.jpg") // 照片 - - d := gomail.NewDialer( - host, - port, - userName, - password, - ) - // 关闭SSL协议认证 - d.TLSConfig = &tls.Config{InsecureSkipVerify: true} - if !config.GetYamlConfig().Alarm.EmailForward.TLSSkipVerify { - // 打开SSL协议认证 - d.TLSConfig = &tls.Config{InsecureSkipVerify: false} - } - - err := d.DialAndSend(m) - return writeLog(alarmData, config.GetYamlConfig().Alarm.EmailForward.EmailList, "EMAIL", err) -} diff --git a/features/fm/smsforward.go b/features/fm/smsforward.go deleted file mode 100644 index 642e0ed3..00000000 --- a/features/fm/smsforward.go +++ /dev/null @@ -1,271 +0,0 @@ -package fm - -import ( - "errors" - "fmt" - "net/http" - "net/url" - "strings" - "time" - - "be.ems/lib/config" - "be.ems/lib/dborm" - "be.ems/lib/log" - "be.ems/src/framework/utils/date" - neDataModel "be.ems/src/modules/network_data/model" - neDataService "be.ems/src/modules/network_data/service" - neService "be.ems/src/modules/network_element/service" - "github.com/linxGnu/gosmpp" - "github.com/linxGnu/gosmpp/data" - "github.com/linxGnu/gosmpp/pdu" -) - -func AlarmSMSForward(alarmData *Alarm) error { - switch config.GetYamlConfig().Alarm.SMProxy { - case "sms": - users, err := AlarmForwardBySMS(alarmData) - writeLog(alarmData, users, "SMS", err) - return err - case "smsc": - users, err := AlarmForwardBySMPP(alarmData) - writeLog(alarmData, users, "SMS", err) - return err - default: - users, err := AlarmForwardBySMPP(alarmData) - writeLog(alarmData, users, "SMS", err) - return err - } -} - -func AlarmForwardBySMS(alarmData *Alarm) (string, error) { - log.Info("AlarmForwardBySMS processing... ") - - SMSFforwardconfig := config.GetYamlConfig().Alarm.SMS - // 阿里云短信API的请求地址 - apiURL := SMSFforwardconfig.ApiURL - - // 阿里云短信API的AccessKey ID和AccessKey Secret - //accessKeyID := SMSFforwardconfig.AccessKeyID - accessKeySecret := SMSFforwardconfig.AccessKeySecret - - toUsers, err := dborm.XormGetAlarmForward("SMS") - if err != nil { - log.Error("Failed to XormGetAlarmForward:", err) - return "", err - } - if toUsers == nil { - err := errors.New("not found forward phone number") - log.Error(err) - return "", err - } - userList := strings.Join(*toUsers, ",") - if len(userList) == 0 { - err := errors.New("not found forward phone number") - log.Error(err) - return "", err - } - // 短信相关参数 - params := url.Values{} - params.Set("PhoneNumbers", userList) - params.Set("SignName", SMSFforwardconfig.SignName) - params.Set("TemplateCode", SMSFforwardconfig.TemplateCode) - params.Set("TemplateParam", `{"message":"alarm"}`) - - // 构建请求URL - reqURL := apiURL + "?Action=SendSms&" + params.Encode() - - // 创建HTTP请求 - req, err := http.NewRequest("GET", reqURL, nil) - if err != nil { - log.Error("Failed to create request:", err) - return userList, err - } - - // 添加请求头部 - req.Header.Set("Content-Type", "application/x-www-form-urlencoded") - req.Header.Set("Authorization", "APPCODE "+accessKeySecret) - - // 发送请求 - client := &http.Client{} - resp, err := client.Do(req) - if err != nil { - log.Error("Failed to send request:%v", err) - return userList, err - } - defer resp.Body.Close() - - // 解析响应 - switch resp.StatusCode { - case http.StatusOK, http.StatusAccepted, http.StatusNoContent, http.StatusCreated: - return userList, nil - default: - log.Error(fmt.Errorf("failed to send SMS: %s(Code=%d)", resp.Status, resp.StatusCode)) - return userList, err - } -} - -var smsForward = &(config.GetYamlConfig().Alarm.SMSCForward) - -func AlarmForwardBySMPP(alarmData *Alarm) (string, error) { - log.Info("AlarmForwardBySMPP processing... ") - - if smsForward == nil { - err := errors.New("smsForward configuration is nil") - log.Error(err) - return "", err - } - userList := smsForward.MobileList - if len(userList) == 0 { - err := errors.New("not found forward phone number") - log.Error(err) - return "", err - } - auth := gosmpp.Auth{ - SMSC: smsForward.SMSCAddr, - SystemID: smsForward.SystemID, - Password: smsForward.Password, - SystemType: smsForward.SystemType, - } - - trans, err := gosmpp.NewSession( - gosmpp.TXConnector(gosmpp.NonTLSDialer, auth), - gosmpp.Settings{ - ReadTimeout: 2 * time.Second, - - OnPDU: func(p pdu.PDU, _ bool) { - log.Debug("%+v", p) - }, - - OnSubmitError: func(_ pdu.PDU, err error) { - log.Error(err) - }, - - OnRebindingError: func(err error) { - log.Error(err) - }, - - OnClosed: func(state gosmpp.State) { - log.Error(state) - }, - }, -1) - if err != nil { - log.Error("Failed to create SMPP new session:", err) - return "", err - } - defer func() { - if err := trans.Close(); err != nil { - log.Error(err) - } - }() - - message := "Alarm Notification: " + alarmData.AlarmTitle + - " from " + alarmData.NeType + "_" + alarmData.NeId + - " at " + alarmData.EventTime - users := strings.Split(userList, ",") - for _, user := range users { - if user == "" { - continue - } - sm, err := newSubmitSM(user, message) - if err != nil { - log.Errorf("Failed to newSubmitSM %s short message: %v", user, err) - writeLog(alarmData, user, "SMS", err) - continue - } - if err = trans.Transceiver().Submit(sm); err != nil { - log.Errorf("Failed to Submit %s short message: %v", user, err) - writeLog(alarmData, user, "SMS", err) - continue - } - writeLog(alarmData, user, "SMS", nil) - } - - return userList, nil -} - -func writeLog(alarmData *Alarm, toUser, forwardBy string, err error) error { - var result string = fmt.Sprintf("%s Sent Successfully!", forwardBy) - if err != nil { - result = err.Error() - } - neInfo := neService.NewNeInfo.FindByRmuid(alarmData.NeId) - eventTime := date.ParseStrToDate(alarmData.EventTime, date.YYYY_MM_DDTHH_MM_SSZ) - alarmForwardLog := neDataModel.AlarmForwardLog{ - NeType: neInfo.NeType, - NeId: neInfo.NeId, - AlarmSeq: int64(alarmData.AlarmSeq), - AlarmId: alarmData.AlarmId, - AlarmTitle: alarmData.AlarmTitle, - AlarmCode: int64(alarmData.AlarmCode), - AlarmStatus: fmt.Sprint(alarmData.AlarmStatus), - AlarmType: alarmTypeValue(alarmData.AlarmType), - OrigSeverity: origSeverityValue(alarmData.OrigSeverity), - EventTime: eventTime.UnixMilli(), - Type: forwardBy, - Target: toUser, - Result: result, - } - - // 记录日志 - insertId := neDataService.NewAlarmForwardLog.Insert(alarmForwardLog) - if insertId <= 0 { - return fmt.Errorf("failed to insert data") - } - return nil -} - -func newSubmitSM(phoneNumber string, message string) (*pdu.SubmitSM, error) { - // build up submitSM - srcAddr := pdu.NewAddress() - srcAddr.SetTon(5) - srcAddr.SetNpi(0) - err := srcAddr.SetAddress(smsForward.ServiceNumber) - if err != nil { - return nil, err - } - destAddr := pdu.NewAddress() - destAddr.SetTon(1) - destAddr.SetNpi(1) - err = destAddr.SetAddress(phoneNumber) - if err != nil { - return nil, err - } - submitSM := pdu.NewSubmitSM().(*pdu.SubmitSM) - submitSM.SourceAddr = srcAddr - submitSM.DestAddr = destAddr - dataCoding := data.FromDataCoding(smsForward.DataCoding) - err = submitSM.Message.SetMessageWithEncoding(message, dataCoding) - if err != nil { - return nil, err - } - submitSM.ProtocolID = 0 - submitSM.RegisteredDelivery = 1 - submitSM.ReplaceIfPresentFlag = 0 - submitSM.EsmClass = 0 - - return submitSM, nil -} - -// const ( -// // Short message data coding type -// SMS_CODING_GSM7BIT byte = iota -// SMS_CODING_ASCII -// SMS_CODING_BINARY8BIT1 -// SMS_CODING_LATIN1 -// SMS_CODING_BINARY8BIT2 -// SMS_CODING_NODEF -// SMS_CODING_CYRILLIC -// SMS_CODING_HEBREW -// SMS_CODING_UCS2 -// ) - -// var codingMap = map[byte]data.Encoding{ -// SMS_CODING_GSM7BIT: data.GSM7BIT, -// SMS_CODING_ASCII: data.ASCII, -// SMS_CODING_BINARY8BIT1: data.BINARY8BIT1, -// SMS_CODING_LATIN1: data.LATIN1, -// SMS_CODING_BINARY8BIT2: data.BINARY8BIT2, -// SMS_CODING_CYRILLIC: data.CYRILLIC, -// SMS_CODING_HEBREW: data.HEBREW, -// SMS_CODING_UCS2: data.UCS2, -// } diff --git a/features/handle/handle.go b/features/handle/handle.go deleted file mode 100644 index daeaf726..00000000 --- a/features/handle/handle.go +++ /dev/null @@ -1,565 +0,0 @@ -package handle - -import ( - "bytes" - "encoding/json" - "io" - "net/http" - "strconv" - "strings" - - "github.com/gorilla/mux" - g "github.com/gosnmp/gosnmp" - - "be.ems/lib/config" - "be.ems/lib/global" - "be.ems/lib/log" - "be.ems/lib/oauth" - "be.ems/lib/services" - "be.ems/lib/session" -) - -var TodoList []stTodo - -type stTodo struct { - No string - Item string - Value string -} - -type ErrorOAuthResponse struct { - Error map[string]interface{} -} - -type FailOAuthResponse struct { - Error struct { - ErrorCode string - ErrorInfo string - } -} - -type ApiResponse struct { - ResultCode string - ResultMessage interface{} -} - -var globalSession = session.NewSessManager("restagent") - -func init() { - conf := config.GetYamlConfig() - // Default is a pointer to a GoSNMP struct that contains sensible defaults - // eg port 161, community public, etc - g.Default.Target = conf.NE.Addr - g.Default.Port = conf.NE.Port - err := g.Default.Connect() - if err != nil { - log.Fatalf("Connect() err: %v", err) - } - //defer g.Default.Conn.Close() -} - -/* -func IsValidOAuthInfo(oAuthBody OAuthBody) bool { - log.Debug("IsValidOAuthInfo processing... ") - - conf := config.GetYamlConfig() - for _, o := range conf.Auth { - if oAuthBody.GrantType == o.Type && oAuthBody.UserName == o.User && oAuthBody.Value == o.Password { - return true - } - } - - return false -} - -func IsWrongOAuthInfo(oAuthBody OAuthBody) bool { - log.Debug("IsWrongOAuthInfo processing... ") - - if oAuthBody.GrantType == "" || strings.ToLower(oAuthBody.GrantType) != "password" || oAuthBody.UserName == "" || oAuthBody.Value == "" { - return true - } - - return false -} -*/ - -func IsValidOAuthUri(r *http.Request) bool { - vars := mux.Vars(r) - Uri := vars["apiCategory"] + "/" + vars["apiVersion"] // 获取Uri - return Uri == "securityManagement/v1" -} - -func IsVallidContentType(r *http.Request) bool { - log.Debug("IsVallidContentType processing ...") - - ctype := r.Header["Content-Type"] - if len(ctype) != 0 && !strings.Contains(ctype[0], "application/json") { - return false - } - - return true -} - -func LoginFromOMC(w http.ResponseWriter, r *http.Request) { - log.Debug("LoginFromOMC processing... ") - - body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen)) //io.LimitReader限制大小 - if err != nil { - log.Debug(err) - services.ResponseNotFound404UriNotExist(w, r) - return - } - - // check media type(content type) only support "application/json" - /* if !IsVallidContentType(r) { - log.Debug("Invalid Content-Type") - services.ResponseUnsupportedMediaType415(w) - return - } - - // check extend uri, response 404 - if !IsValidOAuthUri(r) { - log.Debug("Uri is invalid") - services.ResponseNotFound404UriNotExist(w, r) - return - } - - */ - // Error process .... - // response 400-7 - if !json.Valid([]byte(body)) { - log.Debug("Invalid Json Format") - services.ResponseBadRequest400InvalidJson(w) - return - } - - var oAuthBody oauth.OAuthBody - _ = json.Unmarshal(body, &oAuthBody) //转为json - log.Debug("body:", string(body), "oAuthBody:", oAuthBody) - - defer r.Body.Close() - // response 400-5 - if oauth.IsWrongOAuthInfo(oAuthBody) { - log.Debug("Wrong parameter value") - services.ResponseBadRequest400WrongParamValue(w) - return - } - /* - if oauth.IsValidOAuthInfo(oAuthBody) { - plist := config.GetPermissionFromConfig(oAuthBody.UserName, oAuthBody.GrantType) - log.Debug("Permission list:", plist) - - token := globalSession.NewSession(w, r, plist) - services.ResponseStatusOK200Login(w, token) - } else { - // response 400-4 - log.Debug("Authentication failed, mismatch user or password") - - services.ResponseBadRequest400IncorrectLogin(w) - } - */ - // response 400-4 - log.Error("Authentication failed, mismatch user or password") - - services.ResponseBadRequest400IncorrectLogin(w) -} - -func LogoutFromOMC(w http.ResponseWriter, r *http.Request) { - - // check media type(content type) only support "application/json" - if !IsVallidContentType(r) { - log.Debug("Invalid Content-Type") - services.ResponseUnsupportedMediaType415(w) - return - } - - // check extend uri, response 404 - if !IsValidOAuthUri(r) { - log.Debug("Uri is invalid") - services.ResponseNotFound404UriNotExist(w, r) - return - } - - // error processing ... - // 401-1 response - token, ret := globalSession.IsCarriedToken(r) - if ret { - log.Debug("AccessToken is not carried") - services.ResponseUnauthorized401AccessTokenNotCarried(w) - return - } - - // 401-2 response - if globalSession.IsValidToken(token) { - log.Debug("AccessToken fails or does not exist") - services.ResponseUnauthorized401AccessTokenNotExist(w) - return - } - - globalSession.EndSession(w, r) - services.ResponseStatusOK200Null(w) -} - -func HandshakeFromOMC(w http.ResponseWriter, r *http.Request) { - log.Debug("HandshakeFromOMC processing... ") - - // check media type(content type) only support "application/json" - if !IsVallidContentType(r) { - log.Debug("Invalid Content-Type") - services.ResponseUnsupportedMediaType415(w) - return - } - - // check extend uri, response 404 - if !IsValidOAuthUri(r) { - log.Debug("Uri is invalid") - services.ResponseNotFound404UriNotExist(w, r) - return - } - - // error processing ... - // 401-1 response - token, ret := globalSession.IsCarriedToken(r) - if !ret { - log.Debug("AccessToken is not carried") - services.ResponseUnauthorized401AccessTokenNotCarried(w) - return - } - - if !globalSession.ShakeSession(token) { - // 401-2 response - log.Debug("AccessToken fails or does not exist") - services.ResponseUnauthorized401AccessTokenNotExist(w) - return - } - - // 200 response - services.ResponseStatusOK200Null(w) -} - -var ( - MAX_RMUID_NUM = config.GetRmUIDMaxNumFromConfig() - MAX_ALARMID_NUM = config.GetAlarmIDMaxNumFromConfig() - MAX_PMUID_NUM = config.GetPmIDMaxNumFromConfig() - MAX_SUBID_NUM = config.GetSubIDMaxNumFromConfig() - MAX_URI_LEN = config.GetUriMaxLenFromConfig() - RMUID_REGEXP = config.GetRmUIDRegexpFromConfig() -) - -func CheckParameterName(r *http.Request) []string { - var errorParams []string - vars := r.URL.Query() - for k, v := range vars { - log.Debug("vars:", k, v) - if k != "rmUIDs" && k != "fields" { - errorParams = append(errorParams, k) - } - } - - return errorParams -} - -func GetRmUIDArr(r *http.Request) []string { - vars := r.URL.Query() - rmUIDs, ok := vars["rmUIDs"] - if !ok { - log.Debug("rmUIDs is not exist") - return nil - } - - var rmUIDValues []string - for _, r := range rmUIDs { - if r != "" { - rmUIDValues = global.MergeStringArr(rmUIDValues, strings.Split(r, `,`)) - } - } - - return rmUIDValues -} - -func GetAttrNameArr(r *http.Request) []string { - vars := r.URL.Query() - fields, ok := vars["fields"] - if !ok { - log.Debug("attributeNames does not exist") - return nil - } - var attrNames []string - for _, a := range fields { - if a != "" { - attrNames = global.MergeStringArr(attrNames, strings.Split(a, `,`)) - } - } - - return attrNames -} - -func CheckValidRmUID(rmUIDs []string) []string { - log.Debug("GetLocalRmUID processing... ") - - var invalidRmUIDs []string - for _, r := range rmUIDs { - if !global.MatchRmUID(RMUID_REGEXP, r) { - invalidRmUIDs = append(invalidRmUIDs, r) - } - } - - return invalidRmUIDs -} - -func CheckLocalRmUID(rmUIDs []string) string { - log.Debug("GetLocalRmUID processing... ") - - rmUID := config.GetRmUIDFromConfig() - for _, r := range rmUIDs { - if r == rmUID { - return rmUID - } - } - - return "" -} - -func GetNRMByUri(w http.ResponseWriter, r *http.Request) { - log.Debug("GetNRMByUri processing... ") - - // response 414-4 uri too long ? (optional) - // todo ... ? - if bytes.Count([]byte(r.RequestURI), nil) > MAX_URI_LEN { - log.Debug("Request Uri too long:", bytes.Count([]byte(r.RequestURI), nil)) - services.ResponseRequestURITooLong414UriTooLong(w) - return - } - - // check media type(content type) only support "application/json" - // response 415-1 - if !IsVallidContentType(r) { - log.Debug("Invalid Content-Type") - services.ResponseUnsupportedMediaType415(w) - return - } - - // error processing ... - // 401-1 response - token, ret := globalSession.IsCarriedToken(r) - if !ret { - log.Debug("AccessToken is not carried") - services.ResponseUnauthorized401AccessTokenNotCarried(w) - return - } - - // 401-2 response - if globalSession.IsValidToken(token) { - log.Debug("AccessToken fails or does not exist") - services.ResponseUnauthorized401AccessTokenNotExist(w) - return - } - // response 403 Forbidden, permissions deny - // todo... - plist := globalSession.GetPermissionFromSession(token) - log.Debug("permission list:", plist) - if len(plist) == 0 || !plist[0] { - log.Debug("User permission deny") - services.ResponseForbidden403NotPermission(w) - return - } - - vars := mux.Vars(r) - qeuryUri := vars["apiCategory"] + "/" + vars["elementTypeValue"] + "/" + vars["objectTypeValue"] - log.Debug("Get by Uri: ", qeuryUri) - - apiVer := vars["apiVersion"] - if apiVer != "v1" { - log.Debug("Uri is invalid") - services.ResponseNotFound404UriNotExist(w, r) - return - } - - // response 406-1 - rmUIDValues := GetRmUIDArr(r) - if rmUIDValues == nil { - log.Debug("missing parameter: rmUIDs") - services.ResponseNotAcceptable406MissingParam(w) - return - } - - // response 406-2 - errorParams := CheckParameterName(r) - if errorParams != nil { - log.Debug("parameter name error: ", errorParams) - services.ResponseNotAcceptable406ParamError(w, errorParams) - return - } - - // response 400-5 - if len(rmUIDValues) == 0 { - log.Debug("rmUIDs is wrong or NULL") - services.ResponseBadRequest400WrongParamValue(w) - return - } - - // response 414-1 - if len(rmUIDValues) > MAX_RMUID_NUM { - log.Debug("rmUID greater than", MAX_RMUID_NUM) - services.ResponseRequestURITooLong414NRMNumExceed(w, MAX_RMUID_NUM) - return - } - - // response 400-1 - // check rmUID is valid - // todo ... - invalidRmUIDs := CheckValidRmUID(rmUIDValues) - if len(invalidRmUIDs) != 0 { - log.Debug("rmUID is invalid") - services.ResponseBadRequest400RmUIDsIsInvalid(w, invalidRmUIDs) - return - } - - // response 404-2 - rmUID := CheckLocalRmUID(rmUIDValues) - if rmUID == "" { - log.Debug("rmUID does not exist") - services.ResponseNotFound404NRMNotExist(w, rmUIDValues) - return - } - - // response 404-1, uri is not exist in map - attrNames := GetAttrNameArr(r) - var Oids []string - Oids = *config.GetOidByFileds(qeuryUri, attrNames, &Oids) - if len(Oids) == 0 { - log.Debug("Nothing of config map") - services.ResponseNotFound404UriNotExist(w, r) - return - } - - // response 404-1, uri is not exist in map - var nameOids []config.NameOid - nameOids = *config.GetDataOidByFields(qeuryUri, attrNames, &nameOids) - if len(nameOids) == 0 { - log.Debug("Nothing of config map") - services.ResponseNotFound404UriNotExist(w, r) - return - } - - result, err2 := g.Default.Get(Oids) // Get() accepts up to g.MAX_OIDS - if err2 != nil { - log.Fatalf("Get() err: %v", err2) - - } - - // var nameValues []config.NameValue - var nameValue config.NameValue - - nameValues := make(map[string]interface{}) - nameValues["rmUID"] = rmUID - for i, variable := range result.Variables { - nameValue.Name = nameOids[i].Name - log.Debugf("%d: oid: %s name: %s\n", i, variable.Name, nameValue.Name) - // if nameOids[i].Oid == variable.Name && global.IsContain(attributeNames, nameValue.Name) { - if nameOids[i].Oid == variable.Name { - // the Value of each variable returned by Get() implements - // interface{}. You could do a type switch... - switch variable.Type { - case g.OctetString: - bytes := variable.Value.([]byte) - log.Debugf("string: %s\n", string(bytes)) - nameValue.Value = string(bytes) - nameValues[nameValue.Name] = nameValue.Value - case g.Integer: - value := variable.Value.(int) - log.Debugf("integer: %d\n", value) - nameValue.Value = strconv.Itoa(value) - nameValues[nameValue.Name] = nameValue.Value - case g.IPAddress: - value := variable.Value.(string) - log.Debugf("IPAddress: %s\n", variable.Value) - nameValue.Value = value - nameValues[nameValue.Name] = nameValue.Value - default: - // ... or often you're just interested in numeric values. - // ToBigInt() will return the Value as a BigInt, for plugging - // into your calculations. - log.Debugf("number: %d\n", g.ToBigInt(variable.Value)) - } - } - } - - getResponse := services.DataResponse{Data: nameValues} - services.ResponseWithJson(w, http.StatusOK, getResponse) -} - -func RestfulPut(w http.ResponseWriter, r *http.Request) { - vars := mux.Vars(r) - queryNo := vars["no"] - var targetTodo stTodo - for _, Todo := range TodoList { - if Todo.No == queryNo { - targetTodo = Todo - } - } - response := ApiResponse{"200", targetTodo} - services.ResponseWithJson(w, http.StatusOK, response) -} - -func RestfulHead(w http.ResponseWriter, r *http.Request) { - var targetTodo stTodo - - response := ApiResponse{"200", targetTodo} - services.ResponseWithJson(w, http.StatusOK, response) - -} - -func RemoveElement(TodoList []stTodo, No string) stTodo { - // var targetTodo stTodo - j := 0 - if len(TodoList) == 0 { - return TodoList[j] - } - - for i := 0; i < len(TodoList); i++ { - if TodoList[i].No != No { - if i != j { - TodoList[i], TodoList[j] = TodoList[j], TodoList[i] - } - j++ - } - } - log.Debug(TodoList[j].No, TodoList[j].Item) - return TodoList[j] -} - -func RestfulDelete(w http.ResponseWriter, r *http.Request) { - vars := mux.Vars(r) - queryNo := vars["no"] //获取No - - log.Debug("RestfulDelete processing... ") - - targetTodo := RemoveElement(TodoList, queryNo) - response := ApiResponse{"200", targetTodo} - services.ResponseWithJson(w, http.StatusOK, response) -} - -func RestfulOptions(w http.ResponseWriter, r *http.Request) { - var targetTodo stTodo - - response := ApiResponse{"200", targetTodo} - services.ResponseWithJson(w, http.StatusOK, response) - -} - -func RestfulTrace(w http.ResponseWriter, r *http.Request) { - var targetTodo stTodo - - response := ApiResponse{"200", targetTodo} - services.ResponseWithJson(w, http.StatusOK, response) - -} - -func RestfulPatch(w http.ResponseWriter, r *http.Request) { - var targetTodo stTodo - - response := ApiResponse{"200", targetTodo} - services.ResponseWithJson(w, http.StatusOK, response) - -} diff --git a/features/lm/file_export/controller.go b/features/lm/file_export/controller.go deleted file mode 100644 index 54eeed7c..00000000 --- a/features/lm/file_export/controller.go +++ /dev/null @@ -1,138 +0,0 @@ -package file_export - -import ( - "encoding/json" - "net/http" - "os" - "path/filepath" - - "be.ems/lib/file" - "be.ems/lib/log" - "be.ems/lib/services" - "be.ems/src/framework/database/db" - "be.ems/src/framework/i18n" - "be.ems/src/framework/reqctx" - "github.com/gin-gonic/gin" -) - -type SysJobResponse struct { - SysJob - TableName string `json:"tableName"` - TableDisplay string `json:"tableDisplay"` - FilePath string `json:"filePath"` -} - -type TargetParams struct { - Hour int `json:"hour"` // hour - TableName string `json:"tableName"` - Columns []string `json:"columns"` - FilePath string `json:"filePath"` // file path -} - -func (m *SysJob) GetFileExportTable(c *gin.Context) { - var results []SysJob - - tx := db.DB("").Table("sys_job").Where("invoke_target=?", INVOKE_FILE_EXPORT) - if err := tx.Find(&results).Error; err != nil { - c.JSON(http.StatusOK, services.ErrResp(err.Error())) - return - } - language := reqctx.AcceptLanguage(c) - var response []SysJobResponse - for _, job := range results { - var params TargetParams - if err := json.Unmarshal([]byte(job.TargetParams), ¶ms); err != nil { - c.JSON(http.StatusOK, services.ErrResp(err.Error())) - return - } - TableDisplay := i18n.TKey(language, "table."+params.TableName) - if TableDisplay == "" { - TableDisplay = params.TableName - } - response = append(response, SysJobResponse{ - SysJob: job, - TableName: params.TableName, - TableDisplay: TableDisplay, - FilePath: params.FilePath, - }) - } - c.JSON(http.StatusOK, services.DataResp(response)) -} - -func (m *FileExport) GetFileList(c *gin.Context) { - var querys FileExportQuery - - if err := c.ShouldBindQuery(&querys); err != nil { - c.JSON(http.StatusOK, services.ErrResp(err.Error())) - return - } - - files, err := file.GetFileInfo(querys.Path, querys.Suffix) - if err != nil { - log.Error("failed to GetFileInfo:", err) - c.JSON(http.StatusOK, services.ErrResp(err.Error())) - return - } - - // split files list - lenNum := int64(len(files)) - start := (querys.PageNum - 1) * querys.PageSize - end := start + querys.PageSize - var splitList []file.FileInfo - if start >= lenNum { - splitList = []file.FileInfo{} - } else if end >= lenNum { - splitList = files[start:] - } else { - splitList = files[start:end] - } - total := len(files) - c.JSON(http.StatusOK, services.TotalDataResp(splitList, total)) -} - -func (m *FileExport) Total(c *gin.Context) { - dir := c.Query("path") - - fileCount, dirCount, err := file.GetFileAndDirCount(dir) - if err != nil { - log.Error("failed to GetFileAndDirCount:", err) - c.JSON(http.StatusOK, services.ErrResp(err.Error())) - return - } - total := fileCount + dirCount - c.JSON(http.StatusOK, services.TotalResp(int64(total))) -} - -func (m *FileExport) DownloadHandler(c *gin.Context) { - dir := c.Query("path") - fileName := c.Param("fileName") - filePath := filepath.Join(dir, fileName) - - file, err := os.Open(filePath) - if err != nil { - c.JSON(http.StatusOK, services.ErrResp(err.Error())) - return - } - defer file.Close() - - if _, err := os.Stat(filePath); os.IsNotExist(err) { - c.JSON(http.StatusOK, services.ErrResp(err.Error())) - return - } - - c.Header("Content-Disposition", "attachment; filename="+fileName) - c.Header("Content-Type", "application/octet-stream") - c.File(filePath) -} - -func (m *FileExport) Delete(c *gin.Context) { - fileName := c.Param("fileName") - dir := c.Query("path") - filePath := filepath.Join(dir, fileName) - - if err := os.Remove(filePath); err != nil { - c.JSON(http.StatusOK, services.ErrResp(err.Error())) - return - } - c.JSON(http.StatusNoContent, nil) // 204 No Content -} diff --git a/features/lm/file_export/model.go b/features/lm/file_export/model.go deleted file mode 100644 index 33a611f9..00000000 --- a/features/lm/file_export/model.go +++ /dev/null @@ -1,30 +0,0 @@ -package file_export - -import ( - "be.ems/lib/file" -) - -const ( - INVOKE_FILE_EXPORT = "exportTable" -) - -type SysJob struct { - JobID int64 `gorm:"column:job_id;primary_key;auto_increment" json:"job_id"` //任务ID - InvokeTarget string `gorm:"column:invoke_target" json:"invoke_target"` //调用目标字符串 - TargetParams string `gorm:"column:target_params;type:json" json:"target_params,omitempty"` //调用目标传入参数 -} - -func (m *SysJob) TableName() string { - return "sys_job" -} - -type FileExport struct { - file.FileInfo -} - -type FileExportQuery struct { - Path string `form:"path" binding:"required"` - Suffix string `form:"suffix"` - PageNum int64 `form:"pageNum" binding:"required"` - PageSize int64 `form:"pageSize" binding:"required"` -} diff --git a/features/lm/file_export/route.go b/features/lm/file_export/route.go deleted file mode 100644 index de9a05e6..00000000 --- a/features/lm/file_export/route.go +++ /dev/null @@ -1,39 +0,0 @@ -package file_export - -import ( - "be.ems/src/framework/middleware" - "github.com/gin-gonic/gin" -) - -// Register Routes for file_export -func Register(r *gin.RouterGroup) { - - lmTable := r.Group("/table") - { - var m *SysJob - lmTable.GET("/list", - middleware.AuthorizeUser(nil), - m.GetFileExportTable, - ) - } - lmFile := r.Group("/file") - { - var f *FileExport - lmFile.GET("/list", - middleware.AuthorizeUser(nil), - f.GetFileList, - ) - lmFile.GET("/total", - middleware.AuthorizeUser(nil), - f.Total, - ) - lmFile.GET("/:fileName", - middleware.AuthorizeUser(nil), - f.DownloadHandler, - ) - lmFile.DELETE("/:fileName", - middleware.AuthorizeUser(nil), - f.Delete, - ) - } -} diff --git a/features/lm/logbak.go b/features/lm/logbak.go deleted file mode 100644 index 99a36ae6..00000000 --- a/features/lm/logbak.go +++ /dev/null @@ -1,103 +0,0 @@ -package lm - -import ( - "fmt" - "net/http" - "os/exec" - "time" - - "be.ems/lib/config" - "be.ems/lib/global" - "be.ems/lib/log" - "be.ems/lib/services" - "be.ems/src/framework/database/db" - - "github.com/gorilla/mux" -) - -type XormResponse struct { - Data interface{} `json:"data"` -} - -type XormInsertResponse struct { - Data interface{} `json:"data"` -} - -var ( - ExtBackupDataUri = config.DefaultUriPrefix + "/dataManagement/{apiVersion}/{dataStorage}/{dataObject}/backup" // for external - - CustomExtBackupDataUri = config.UriPrefix + "/dataManagement/{apiVersion}/{dataStorage}/{dataObject}/backup" // for external -) - -// func init() { -// conf := config.GetYamlConfig() -// InitDbClient(conf.Database.Type, conf.Database.User, conf.Database.Password, -// conf.Database.Host, conf.Database.Port, conf.Database.Name) -// } - -func ExtDatabaseBackupData(w http.ResponseWriter, r *http.Request) { - log.Debug("ExtDatabaseBackupData processing... ") - - // token, err := services.CheckExtValidRequest(w, r) - // if err != nil { - // log.Error("Request error:", err) - // return - // } - - vars := mux.Vars(r) - module := vars["managementModule"] - dbname := vars["dataStorage"] - tbname := vars["dataObject"] - pack := "lm" - log.Debugf("method:%s, module:%s dbname:%s, tbname:%s pack:%s", r.Method, module, dbname, tbname, pack) - // exist, err := services.CheckUserPermission(token, strings.ToLower(r.Method), module, dbname, tbname, pack) - // if err != nil { - // log.Error("Failed to get permission:", err) - // services.ResponseForbidden403NotPermission(w) - // return - // } - // if !exist { - // log.Error("permission deny!") - // services.ResponseForbidden403NotPermission(w) - // return - // } - - var sql string - var filePath string - switch tbname { - case "operation_log": - filePath = fmt.Sprintf("/tmp/%s-%s.csv", tbname, time.Now().Local().Format(global.DateData)) - sql = fmt.Sprintf("select * into outfile '%s' fields terminated by ',' escaped by '' optionally enclosed by '' lines terminated by '\n' from (select 'op_id','account_name','op_ip','subsys_tag','op_type','op_content','op_result','begin_time','end_time','vnf_flag','log_time' union select op_id,account_name,op_ip,subsys_tag,op_type,op_content,op_result,begin_time,end_time,vnf_flag,log_time from operation_log) b", filePath) - case "security_log": - filePath = fmt.Sprintf("/tmp/%s-%s.csv", tbname, time.Now().Local().Format(global.DateData)) - sql = fmt.Sprintf("select * into outfile '%s' fields terminated by ',' escaped by '' optionally enclosed by '' lines terminated by '\n' from (select 'id','account_name','account_type','op_ip','op_type','op_content','op_result','op_time' union select id,account_name,account_type,op_ip,op_type,op_content,op_result,op_time from security_log) b", filePath) - case "alarm_log": - filePath = fmt.Sprintf("/tmp/%s-%s.csv", tbname, time.Now().Local().Format(global.DateData)) - sql = fmt.Sprintf("select * into outfile '%s' fields terminated by ',' escaped by '' optionally enclosed by '' lines terminated by '\n' from (select 'id','ne_type','ne_id','alarm_seq','alarm_id','alarm_code','alarm_status','event_time','log_time' union select id,ne_type,ne_id,alarm_seq,alarm_id,alarm_code,alarm_status,event_time,log_time from alarm_log) b", filePath) - default: - log.Error("error target table") - services.ResponseInternalServerError500DatabaseOperationFailed(w) - return - } - - affected, err := db.ExecDB("", sql, nil) - if err != nil { - log.Error("Failed to exec SQL:", err) - services.ResponseInternalServerError500DatabaseOperationFailed(w) - return - } - - log.Debugf("filePath:%s backup dir:%s", filePath, config.GetYamlConfig().OMC.Backup) - cmd := exec.Command("cp", "-rf", filePath, config.GetYamlConfig().OMC.Backup) - out, err := cmd.CombinedOutput() - log.Debugf("Exec output: %v", string(out)) - if err != nil { - log.Error("Faile to exec:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - mapRow := make(map[string]interface{}) - row := map[string]interface{}{"affectedRows": affected} - mapRow[tbname] = row - services.ResponseWithJson(w, http.StatusOK, mapRow) -} diff --git a/features/lm/service.go b/features/lm/service.go deleted file mode 100644 index 5cdaa943..00000000 --- a/features/lm/service.go +++ /dev/null @@ -1,17 +0,0 @@ -// log management package - -package lm - -import ( - "be.ems/features/lm/file_export" - "be.ems/lib/log" - "github.com/gin-gonic/gin" -) - -func InitSubServiceRoute(r *gin.Engine) { - log.Info("======init Log management group gin.Engine") - - lmGroup := r.Group("/lm") - // register sub modules routes - file_export.Register(lmGroup) -} diff --git a/features/mml/mml.go b/features/mml/mml.go deleted file mode 100644 index 867c41e6..00000000 --- a/features/mml/mml.go +++ /dev/null @@ -1,705 +0,0 @@ -package mml - -import ( - "encoding/json" - "fmt" - "io" - "net" - "net/http" - "regexp" - "strings" - "time" - - "be.ems/lib/config" - "be.ems/lib/core/ctx" - "be.ems/lib/global" - "be.ems/lib/log" - "be.ems/lib/mmlp" - "be.ems/lib/services" - "be.ems/src/framework/constants" - neModel "be.ems/src/modules/network_element/model" - neService "be.ems/src/modules/network_element/service" -) - -// const ( -// //经过测试,linux下,延时需要大于100ms -// TIME_DELAY_AFTER_WRITE = 200 -// TIME_DEAD_LINE = 10 -// ) - -type Response struct { - Data []string `json:"data"` -} - -type MMLRequest struct { - MML []string `json:"mml"` -} - -var ( - // MML interface - UriMML = config.DefaultUriPrefix + "/operationManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/mml" - UriMML2 = config.DefaultUriPrefix + "/operationManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/mml2" - UriMMLDiscard = config.DefaultUriPrefix + "/opeartionManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/mml" - UriNeOmMml = config.DefaultUriPrefix + "/omManagement/{apiVersion}/mml/{netype}/{neid}" - UriOmMmlExt = config.DefaultUriPrefix + "/{managedType}/{apiVersion}/elementType/OMC/objectType/mml" - UriOmMmlInt = config.DefaultUriPrefix + "/omManagement/{apiVersion}/mml/{neType}/{neId}" - - CustomUriMML = config.UriPrefix + "/operationManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/mml" - CustomUriMML2 = config.UriPrefix + "/operationManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/mml2" - CustomUriNeOmMml = config.UriPrefix + "/omManagement/{apiVersion}/mml/{netype}/{neid}" - CustomUriOmMmlExt = config.UriPrefix + "/opeartionManagement/{apiVersion}/elementType/OMC/objectType/mml" - CustomUriOmMmlInt = config.UriPrefix + "/omManagement/{apiVersion}/mml/{neType}/{neId}" -) - -var ( - TIME_DELAY_AFTER_WRITE time.Duration = 200 - TIME_DEAD_LINE time.Duration = 10 - WIN_ROW_SIZE int16 = 200 - WIN_COL_SIZE int16 = 120 - BUFFER_SIZE int = 65535 -) - -func InitMML() { - if config.GetYamlConfig().MML.Sleep != 0 { - TIME_DELAY_AFTER_WRITE = time.Duration(config.GetYamlConfig().MML.Sleep) - } - if config.GetYamlConfig().MML.DeadLine != 0 { - TIME_DEAD_LINE = time.Duration(config.GetYamlConfig().MML.DeadLine) - } - WIN_ROW_SIZE = config.GetYamlConfig().MML.SizeRow - WIN_COL_SIZE = config.GetYamlConfig().MML.SizeCol - BUFFER_SIZE = config.GetYamlConfig().MML.BufferSize -} - -func PostMML2ToNF(w http.ResponseWriter, r *http.Request) { - log.Info("PostMML2ToNF processing... ") - - neType := ctx.GetParam(r, "elementTypeValue") - neId := ctx.GetQuery(r, "ne_id") - if neId == "" { - log.Error("NOT FOUND ne_id") - services.ResponseBadRequest400WrongParamValue(w) - return - } - log.Debug("neType:", neType, "neId", neId) - - neInfoArr := neService.NewNeInfo.Find(neModel.NeInfo{NeType: neType, NeId: neId}, false, true) - if len(neInfoArr) < 1 { - services.ResponseInternalServerError500DatabaseOperationFailed(w) - return - } - neInfo := neInfoArr[0] - if neInfo.NeId != neId || neInfo.IP == "" || len(neInfo.Hosts) < 2 { - services.ResponseWithJson(w, 200, map[string]any{ - "code": 0, - "msg": "neInfo not found", - }) - return - } - telnetHost := neInfo.Hosts[1] - - buf := make([]byte, BUFFER_SIZE) - var n int - var mmlResult []string - hostMML := net.JoinHostPort(telnetHost.Addr, fmt.Sprintf("%d", telnetHost.Port)) - conn, err := net.Dial("tcp", hostMML) - if err != nil { - errMsg := fmt.Sprintf("Failed to dial %s: %v", hostMML, err) - log.Error(errMsg) - mmlResult = append(mmlResult, errMsg) - response := Response{mmlResult} - services.ResponseWithJson(w, http.StatusOK, response) - return - } - defer conn.Close() - - // localAddr := conn.LocalAddr() - // remoteAddr := conn.RemoteAddr() - // if localAddr == nil || remoteAddr == nil { - // errMsg := fmt.Sprintf("connect invalid: localAddr=%v, remoteAddr=%v", localAddr, remoteAddr) - // log.Error(errMsg) - // mmlResult = append(mmlResult, errMsg) - // response := Response{mmlResult} - // services.ResponseWithJson(w, http.StatusOK, response) - // return - // } - - // 发送窗口大小设置命令 - conn.Write([]byte{255, 251, 31}) // 发送WILL WINDOW SIZE - conn.Write([]byte{ - 255, 250, 31, - byte(WIN_COL_SIZE >> 8), byte(WIN_COL_SIZE & 0xFF), - byte(WIN_ROW_SIZE >> 8), byte(WIN_ROW_SIZE & 0xFF), - 255, 240, - }) // 发送设置 WINDOW SIZE - - conn.SetDeadline(time.Now().Add(TIME_DEAD_LINE * time.Second)) - loginStr := fmt.Sprintf("%s\n%s\n", telnetHost.User, telnetHost.Password) - _, err = conn.Write([]byte(loginStr)) - if err != nil { - log.Error("Failed to write:", err) - mmlResult = append(mmlResult, err.Error()) - response := Response{mmlResult} - services.ResponseWithJson(w, http.StatusOK, response) - return - } - - time.Sleep(time.Millisecond * TIME_DELAY_AFTER_WRITE) - - n, err = conn.Read(buf[0:]) - if err != nil { - log.Error("Failed to read:", err) - mmlResult = append(mmlResult, err.Error()) - response := Response{mmlResult} - services.ResponseWithJson(w, http.StatusOK, response) - return - } - log.Trace(string(buf[0:n])) - - body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen)) - if err != nil { - log.Error("Failed to ReadAll:", err) - services.ResponseNotFound404UriNotExist(w, r) - return - } - log.Trace("Body:", string(body)) - - mmlRequest := new(MMLRequest) - _ = json.Unmarshal(body, mmlRequest) - - for _, mml := range mmlRequest.MML { - mmlCommand := fmt.Sprintf("%s\n", mml) - _, err = conn.Write([]byte(mmlCommand)) - if err != nil { - log.Error("Failed to write:", err) - mmlResult = append(mmlResult, err.Error()) - // response := Response{mmlResult} - // services.ResponseWithJson(w, http.StatusOK, response) - // return - continue - } - time.Sleep(time.Millisecond * TIME_DELAY_AFTER_WRITE) - - n, err = conn.Read(buf[0:]) - if err != nil { - log.Error("Failed to read:", err) - mmlResult = append(mmlResult, err.Error()) - // response := Response{mmlResult} - // services.ResponseWithJson(w, http.StatusOK, response) - // return - continue - } - log.Trace(string(buf[0 : n-len(neType)-2])) - re1 := regexp.MustCompile(`\x1B\[[0-9;]*[a-zA-Z]`) // 匹配包含␛的控制字符 - //re2 := regexp.MustCompile(`\x00`) // 匹配空字符 - re2 := regexp.MustCompile(`[\x00-\x08\x0B\x0C\x0E-\x1F\x7F\x1B]`) // 匹配空字符和包含␛的控制字符 - //re := regexp.MustCompile(`[\x00-\x1F\x7F]`) - result := re1.ReplaceAllString(string(buf[0:n]), "") - result = re2.ReplaceAllString(result, "") - mmlResult = append(mmlResult, result) - } - - response := Response{mmlResult} - services.ResponseWithJson(w, http.StatusOK, response) -} - -func PostMMLToNF(w http.ResponseWriter, r *http.Request) { - log.Debug("PostMMLToNF processing... ") - - // token, err := services.CheckExtValidRequest(w, r) - // if err != nil { - // log.Error("Request error:", err) - // return - // } - // 经过测试,linux下,延时需要大于100ms - // var TIME_DELAY_AFTER_WRITE time.Duration = 200 - // var TIME_DEAD_LINE time.Duration = 10 - // if config.GetYamlConfig().MML.Sleep != 0 { - // TIME_DELAY_AFTER_WRITE = time.Duration(config.GetYamlConfig().MML.Sleep) - // } - // if config.GetYamlConfig().MML.DeadLine != 0 { - // TIME_DEAD_LINE = time.Duration(config.GetYamlConfig().MML.DeadLine) - // } - - neType := ctx.GetParam(r, "elementTypeValue") - neId := ctx.GetQuery(r, "ne_id") - if neId == "" { - log.Error("NOT FOUND ne_id") - services.ResponseBadRequest400WrongParamValue(w) - return - } - log.Debug("neType:", neType, "neId", neId) - - if strings.ToLower(neType) == "omc" { - PostMMLToOMC(w, r) - return - } - - neInfoArr := neService.NewNeInfo.Find(neModel.NeInfo{NeType: neType, NeId: neId}, false, true) - if len(neInfoArr) < 1 { - services.ResponseInternalServerError500DatabaseOperationFailed(w) - return - } - neInfo := neInfoArr[0] - if neInfo.NeId != neId || neInfo.IP == "" || len(neInfo.Hosts) < 2 { - services.ResponseWithJson(w, 200, map[string]any{ - "code": 0, - "msg": "neInfo not found", - }) - return - } - telnetHost := neInfo.Hosts[1] - - var buf [20 * 1024]byte - //buf := make([]byte, 0) - var n int - var mmlResult []string - switch strings.ToLower(neType) { - case "xxx": - body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen)) - if err != nil { - log.Error("io.ReadAll is failed:", err) - services.ResponseNotFound404UriNotExist(w, r) - return - } - log.Trace("Body:", string(body)) - - mmlRequest := new(MMLRequest) - _ = json.Unmarshal(body, mmlRequest) - - // n, err = conn.Read(buf[0:]) - // if err != nil { - // log.Error("Failed to read:", err) - // mmlResult = append(mmlResult, err.Error()) - // response := Response{mmlResult} - // services.ResponseWithJson(w, http.StatusOK, response) - // return - // } - // log.Debug(string(buf[0:n])) - - // hostMML := fmt.Sprintf("%s:%d", neInfo.Ip, config.GetYamlConfig().MML.Port) - // conn, err := net.Dial("tcp", hostMML) - // if err != nil { - // errMsg := fmt.Sprintf("Failed to dial %s: %v", hostMML, err) - // log.Error(errMsg) - // mmlResult = append(mmlResult, errMsg) - // response := Response{mmlResult} - // services.ResponseWithJson(w, http.StatusOK, response) - // return - // } - // defer conn.Close() - - // conn.SetDeadline(time.Now().Add(10 * time.Second)) - // loginStr := fmt.Sprintf("%s\n%s\n", config.GetYamlConfig().MML.User, config.GetYamlConfig().MML.Password) - // _, err = conn.Write([]byte(loginStr)) - // if err != nil { - // log.Error("Failed to write:", err) - // mmlResult = append(mmlResult, err.Error()) - // response := Response{mmlResult} - // services.ResponseWithJson(w, http.StatusOK, response) - // return - // } - // time.Sleep(time.Millisecond * TIME_DELAY_AFTER_WRITE) - - // n, err = conn.Write([]byte(config.GetYamlConfig().MML.User + "\n")) - // if err != nil { - // log.Error("Failed to write:", err) - // mmlResult = append(mmlResult, err.Error()) - // response := Response{mmlResult} - // services.ResponseWithJson(w, http.StatusOK, response) - // return - // } - // log.Debug(string(buf[0:n])) - // time.Sleep(time.Millisecond * TIME_DELAY_AFTER_WRITE) - - // n, err = conn.Read(buf[0:]) - // if err != nil { - // log.Error("Failed to read:", err) - // mmlResult = append(mmlResult, err.Error()) - // response := Response{mmlResult} - // services.ResponseWithJson(w, http.StatusOK, response) - // return - // } - // log.Debug(string(buf[0:n])) - - // n, err = conn.Write([]byte(config.GetYamlConfig().MML.Password + "\n")) - // if err != nil { - // log.Error("Failed to write:", err) - // mmlResult = append(mmlResult, err.Error()) - // response := Response{mmlResult} - // services.ResponseWithJson(w, http.StatusOK, response) - // return - // } - // log.Debug(string(buf[0:n])) - - // time.Sleep(time.Millisecond * TIME_DELAY_AFTER_WRITE) - - // n, err = conn.Read(buf[0:]) - // if err != nil { - // log.Error("Failed to read:", err) - // mmlResult = append(mmlResult, err.Error()) - // response := Response{mmlResult} - // services.ResponseWithJson(w, http.StatusOK, response) - // return - // } - // log.Debug(string(buf[0:n])) - - for _, mml := range mmlRequest.MML { - hostMML := net.JoinHostPort(telnetHost.Addr, fmt.Sprintf("%d", telnetHost.Port)) - conn, err := net.Dial("tcp", hostMML) - if err != nil { - errMsg := fmt.Sprintf("Failed to dial %s: %v", hostMML, err) - log.Error(errMsg) - mmlResult = append(mmlResult, errMsg) - response := Response{mmlResult} - services.ResponseWithJson(w, http.StatusOK, response) - return - } - defer conn.Close() - - conn.SetDeadline(time.Now().Add(TIME_DEAD_LINE * time.Second)) - - loginStr := fmt.Sprintf("%s\n%s\n", telnetHost.User, telnetHost.Password) - _, err = conn.Write([]byte(loginStr)) - if err != nil { - log.Error("Failed to write:", err) - mmlResult = append(mmlResult, err.Error()) - //response := Response{mmlResult} - //services.ResponseWithJson(w, http.StatusOK, response) - //return - continue - } - time.Sleep(time.Millisecond * TIME_DELAY_AFTER_WRITE) - mmlCommand := fmt.Sprintf("%s\n", mml) - log.Debug("mml command:", mmlCommand) - _, err = conn.Write([]byte(mmlCommand)) - if err != nil { - log.Error("Failed to write:", err) - mmlResult = append(mmlResult, err.Error()) - //response := Response{mmlResult} - //services.ResponseWithJson(w, http.StatusOK, response) - //return - continue - } - time.Sleep(time.Millisecond * TIME_DELAY_AFTER_WRITE) - - n, err = conn.Read(buf[0:]) - if err != nil { - log.Error("Failed to read:", err) - mmlResult = append(mmlResult, err.Error()) - //response := Response{mmlResult} - //services.ResponseWithJson(w, http.StatusOK, response) - //return - continue - } - log.Trace(string(buf[0 : n-len(neType)-2])) - - re1 := regexp.MustCompile(`\x1B\[[0-9;]*[a-zA-Z]`) // 匹配包含␛的控制字符 - //re2 := regexp.MustCompile(`\x00`) // 匹配空字符 - re2 := regexp.MustCompile(`[\x00-\x08\x0B\x0C\x0E-\x1F\x7F\x1B]`) // 匹配空字符和包含␛的控制字符 - //re := regexp.MustCompile(`[\x00-\x1F\x7F]`) - // upf telnet buffer只能读取一次,需要去掉前面的多余字符 - //result := re1.ReplaceAllString(string(buf[config.GetYamlConfig().MML.UpfHeaderLength:n-len(neType)-2]), "") - result := re1.ReplaceAllString(string(buf[0:n-len(neType)-2]), "") - result = re2.ReplaceAllString(result, "") - mmlResult = append(mmlResult, result) - conn.Close() - //mmlResult = append(mmlResult, string(buf[0:n-len(neType)-2])) - - // can't read buffer from upf telnet server, so return ok always - // mmlResult = append(mmlResult, "COMMAND OK\n") - } - case "ims": - hostMML := net.JoinHostPort(telnetHost.Addr, fmt.Sprintf("%d", telnetHost.Port)) - conn, err := net.Dial("tcp", hostMML) - if err != nil { - errMsg := fmt.Sprintf("Failed to dial %s: %v", hostMML, err) - log.Error(errMsg) - mmlResult = append(mmlResult, errMsg) - response := Response{mmlResult} - services.ResponseWithJson(w, http.StatusOK, response) - return - } - defer conn.Close() - - // localAddr := conn.LocalAddr() - // remoteAddr := conn.RemoteAddr() - // if localAddr == nil || remoteAddr == nil { - // errMsg := fmt.Sprintf("connect invalid: localAddr=%v, remoteAddr=%v", localAddr, remoteAddr) - // log.Error(errMsg) - // mmlResult = append(mmlResult, errMsg) - // response := Response{mmlResult} - // services.ResponseWithJson(w, http.StatusOK, response) - // return - // } - conn.SetDeadline(time.Now().Add(TIME_DEAD_LINE * time.Second)) - - _, err = conn.Write([]byte(telnetHost.User + "\r\n")) - if err != nil { - log.Error("Failed to write:", err) - mmlResult = append(mmlResult, err.Error()) - response := Response{mmlResult} - services.ResponseWithJson(w, http.StatusOK, response) - return - } - time.Sleep(time.Millisecond * TIME_DELAY_AFTER_WRITE) - - n, err = conn.Read(buf[0:]) - if err != nil { - log.Error("Failed to read:", err) - mmlResult = append(mmlResult, err.Error()) - response := Response{mmlResult} - services.ResponseWithJson(w, http.StatusOK, response) - return - } - log.Trace(string(buf[0:n])) - - _, err = conn.Write([]byte(telnetHost.Password + "\r\n")) - if err != nil { - log.Error("Failed to write:", err) - mmlResult = append(mmlResult, err.Error()) - response := Response{mmlResult} - services.ResponseWithJson(w, http.StatusOK, response) - return - } - time.Sleep(time.Millisecond * TIME_DELAY_AFTER_WRITE) - - // loginStr := fmt.Sprintf("%s\r\n%s\r\n", config.GetYamlConfig().MML.User, config.GetYamlConfig().MML.Password) - // _, err = conn.Write([]byte(loginStr)) - // if err != nil { - // log.Error("Failed to write:", err) - // mmlResult = append(mmlResult, err.Error()) - // response := Response{mmlResult} - // services.ResponseWithJson(w, http.StatusOK, response) - // return - // } - // time.Sleep(time.Millisecond * TIME_DELAY_AFTER_WRITE) - - n, err = conn.Read(buf[0:]) - if err != nil { - log.Error("Failed to read:", err) - mmlResult = append(mmlResult, err.Error()) - response := Response{mmlResult} - services.ResponseWithJson(w, http.StatusOK, response) - return - } - log.Trace(string(buf[0 : n-len(neType)-2])) - body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen)) - if err != nil { - log.Error("io.ReadAll is failed:", err) - services.ResponseNotFound404UriNotExist(w, r) - return - } - log.Trace("Body:", string(body)) - - mmlRequest := new(MMLRequest) - _ = json.Unmarshal(body, mmlRequest) - - for _, mml := range mmlRequest.MML { - mmlCommand := fmt.Sprintf("%s\r\n", mml) - log.Debug("mml command:", mmlCommand) - _, err = conn.Write([]byte(mmlCommand)) - if err != nil { - log.Error("Failed to write:", err) - mmlResult = append(mmlResult, err.Error()) - // response := Response{mmlResult} - // services.ResponseWithJson(w, http.StatusOK, response) - // return - continue - } - time.Sleep(time.Millisecond * TIME_DELAY_AFTER_WRITE) - - n, err = conn.Read(buf[0:]) - if err != nil { - log.Error("Failed to read:", err) - mmlResult = append(mmlResult, err.Error()) - // response := Response{mmlResult} - // services.ResponseWithJson(w, http.StatusOK, response) - // return - continue - } - log.Trace(string(buf[0 : n-len(neType)-2])) - - re1 := regexp.MustCompile(`\x1B\[[0-9;]*[a-zA-Z]`) // 匹配包含␛的控制字符 - //re2 := regexp.MustCompile(`\x00`) // 匹配空字符 - re2 := regexp.MustCompile(`[\x00-\x08\x0B\x0C\x0E-\x1F\x7F\x1B]`) // 匹配空字符和包含␛的控制字符 - //re := regexp.MustCompile(`[\x00-\x1F\x7F]`) - result := re1.ReplaceAllString(string(buf[0:n-len(neType)-2]), "") - result = re2.ReplaceAllString(result, "") - mmlResult = append(mmlResult, result) - } - default: - hostMML := net.JoinHostPort(telnetHost.Addr, fmt.Sprintf("%d", telnetHost.Port)) - conn, err := net.Dial("tcp", hostMML) - if err != nil { - errMsg := fmt.Sprintf("Failed to dial %s: %v", hostMML, err) - log.Error(errMsg) - mmlResult = append(mmlResult, errMsg) - response := Response{mmlResult} - services.ResponseWithJson(w, http.StatusOK, response) - return - } - defer conn.Close() - - // localAddr := conn.LocalAddr() - // remoteAddr := conn.RemoteAddr() - // if localAddr == nil || remoteAddr == nil { - // errMsg := fmt.Sprintf("connect invalid: localAddr=%v, remoteAddr=%v", localAddr, remoteAddr) - // log.Error(errMsg) - // mmlResult = append(mmlResult, errMsg) - // response := Response{mmlResult} - // services.ResponseWithJson(w, http.StatusOK, response) - // return - // } - - conn.SetDeadline(time.Now().Add(TIME_DEAD_LINE * time.Second)) - loginStr := fmt.Sprintf("%s\n%s\n", telnetHost.User, telnetHost.Password) - _, err = conn.Write([]byte(loginStr)) - if err != nil { - log.Error("Failed to write:", err) - mmlResult = append(mmlResult, err.Error()) - response := Response{mmlResult} - services.ResponseWithJson(w, http.StatusOK, response) - return - } - - time.Sleep(time.Millisecond * TIME_DELAY_AFTER_WRITE) - - n, err = conn.Read(buf[0:]) - if err != nil { - log.Error("Failed to read:", err) - mmlResult = append(mmlResult, err.Error()) - response := Response{mmlResult} - services.ResponseWithJson(w, http.StatusOK, response) - return - } - log.Trace(string(buf[0:n])) - - body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen)) - if err != nil { - log.Error("Failed to ReadAll:", err) - services.ResponseNotFound404UriNotExist(w, r) - return - } - log.Trace("Body:", string(body)) - - mmlRequest := new(MMLRequest) - _ = json.Unmarshal(body, mmlRequest) - - for _, mml := range mmlRequest.MML { - mmlCommand := fmt.Sprintf("%s\n", mml) - _, err = conn.Write([]byte(mmlCommand)) - if err != nil { - log.Error("Failed to write:", err) - mmlResult = append(mmlResult, err.Error()) - // response := Response{mmlResult} - // services.ResponseWithJson(w, http.StatusOK, response) - // return - continue - } - time.Sleep(time.Millisecond * TIME_DELAY_AFTER_WRITE) - - n, err = conn.Read(buf[0:]) - if err != nil { - log.Error("Failed to read:", err) - mmlResult = append(mmlResult, err.Error()) - // response := Response{mmlResult} - // services.ResponseWithJson(w, http.StatusOK, response) - // return - continue - } - log.Trace(string(buf[0 : n-len(neType)-2])) - re1 := regexp.MustCompile(`\x1B\[[0-9;]*[a-zA-Z]`) // 匹配包含␛的控制字符 - //re2 := regexp.MustCompile(`\x00`) // 匹配空字符 - re2 := regexp.MustCompile(`[\x00-\x08\x0B\x0C\x0E-\x1F\x7F\x1B]`) // 匹配空字符和包含␛的控制字符 - //re := regexp.MustCompile(`[\x00-\x1F\x7F]`) - result := re1.ReplaceAllString(string(buf[0:n-len(neType)-2]), "") - result = re2.ReplaceAllString(result, "") - mmlResult = append(mmlResult, result) - - // UDM 特殊命令处理 - if neType == "UDM" && mml == "dec key" { - output, err := neService.NewNeInfo.NeRunSSHCmd(neInfo.NeType, neInfo.NeId, "cat /usr/local/etc/udm/ueKeyProfile.tmp") - if err != nil { - mmlResult = append(mmlResult, err.Error()) - } else { - mmlResult = append(mmlResult, output) - } - } - } - } - - response := Response{mmlResult} - services.ResponseWithJson(w, http.StatusOK, response) -} - -func PostMMLToOMC(w http.ResponseWriter, r *http.Request) { - log.Debug("PostMMLToOMC processing... ") - - neType := "OMC" //ctx.GetParam(r, "elementTypeValue") - neId := ctx.GetQuery(r, "ne_id") - if neId == "" { - log.Error("NOT FOUND ne_id") - services.ResponseBadRequest400WrongParamValue(w) - return - } - log.Debug("neType:", neType, "neId", neId) - - neInfoArr := neService.NewNeInfo.Find(neModel.NeInfo{NeType: neType, NeId: neId}, false, false) - if len(neInfoArr) < 1 { - services.ResponseInternalServerError500DatabaseOperationFailed(w) - return - } - neInfo := neInfoArr[0] - if neInfo.NeId != neId || neInfo.IP == "" { - services.ResponseWithJson(w, 200, map[string]any{ - "code": 0, - "msg": "neInfo not found", - }) - return - } - - body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen)) - if err != nil { - log.Error("io.ReadAll is failed:", err) - services.ResponseNotFound404UriNotExist(w, r) - return - } - log.Trace("Body:", string(body)) - - hostUri := fmt.Sprintf("http://%s:%d", neInfo.IP, neInfo.Port) - omcMmlVar := &mmlp.MmlVar{ - Version: global.Version, - Output: mmlp.DefaultFormatType, - MmlHome: config.GetYamlConfig().MML.MmlHome, - Limit: 50, - User: "", - SessionToken: "", // 旧token - Authorization: r.Header.Get(constants.HEADER_KEY), // 请求Token - HttpUri: hostUri, - UserAgent: config.GetDefaultUserAgent(), - } - mmlRequest := new(MMLRequest) - _ = json.Unmarshal(body, mmlRequest) - - var mmlResult []string - mmlLine := strings.Join(mmlRequest.MML, ";") - - var mmlCmds []mmlp.MmlCommand - if err = mmlp.ParseMMLCommand(mmlLine, &mmlCmds); err != nil { - response := fmt.Sprintf("parse command error: %v\n", err) - mmlResult = append(mmlResult, response) - } - - for _, mmlCmd := range mmlCmds { - output, err := mmlp.TransMml2HttpReq(omcMmlVar, &mmlCmd) - if err != nil { - response := fmt.Sprintf("translate MML command error: %v]\n", err) - mmlResult = append(mmlResult, response) - } - mmlResult = append(mmlResult, string(*output)) - } - - response := Response{mmlResult} - services.ResponseWithJson(w, http.StatusOK, response) -} diff --git a/features/nbi/file/controller.go b/features/nbi/file/controller.go deleted file mode 100644 index cc5edc88..00000000 --- a/features/nbi/file/controller.go +++ /dev/null @@ -1,257 +0,0 @@ -package nbi_file - -import ( - "archive/zip" - "fmt" - "io" - "net/http" - "os" - "path/filepath" - "time" - - "be.ems/lib/dborm" - "be.ems/lib/file" - "be.ems/lib/global" - "be.ems/lib/log" - "be.ems/lib/services" - "github.com/gin-gonic/gin" -) - -type SysJobResponse struct { - SysJob - TableName string `json:"tableName"` - TableDisplay string `json:"tableDisplay"` - FilePath string `json:"filePath"` -} - -type TargetParams struct { - Duration int `json:"duration"` - TableName string `json:"tableName"` - Columns string `json:"columns"` // exported column name of time string - TimeCol string `json:"timeCol"` // time stamp of column name - TimeUnit string `json:"timeUnit"` // timestamp unit: second/micro/milli - Extras string `json:"extras"` // extras condition for where - FilePath string `json:"filePath"` // file path -} - -func (m *FileNBI) GetFileList(c *gin.Context) { - var querys FileNBIQuery - - querys.Category = c.Param("category") - querys.Type = c.Param("type") - if err := c.ShouldBindQuery(&querys); err != nil { - c.JSON(http.StatusOK, services.ErrResp(err.Error())) - return - } - - if querys.Path == "" { - tableName := "" - ok := false - switch querys.Category { - case "cdr": - tableName, ok = CDRTableMapper[querys.Type] - if tableName == "" || !ok { - c.JSON(http.StatusOK, services.ErrResp(fmt.Sprintf("invalid CDR file type: %s", querys.Type))) - return - } - case "log": - tableName, ok = LogTableMapper[querys.Type] - if tableName == "" || !ok { - c.JSON(http.StatusOK, services.ErrResp(fmt.Sprintf("invalid log file type: %s", querys.Type))) - return - } - default: - c.JSON(http.StatusOK, services.ErrResp(fmt.Sprintf("invalid log file category: %s", querys.Category))) - return - } - - s := SysJob{} - where := fmt.Sprintf("invoke_target='%s' and status=1 and JSON_UNQUOTE(JSON_EXTRACT(target_params,'$.tableName'))='%s'", INVOKE_FILE_EXPORT, tableName) - _, err := dborm.XEngDB().Table(s.TableName()). - Select("JSON_UNQUOTE(JSON_EXTRACT(target_params, '$.filePath')) as file_path"). - Where(where). - Get(&querys.Path) - if err != nil { - c.JSON(http.StatusOK, services.ErrResp(err.Error())) - return - } - - } - - files, err := file.GetFileInfo(querys.Path, querys.Suffix) - if err != nil { - log.Error("failed to GetFileInfo:", err) - c.JSON(http.StatusOK, services.ErrResp(err.Error())) - return - } - - // split files list - lenNum := int64(len(files)) - start := (querys.PageNum - 1) * querys.PageSize - end := start + querys.PageSize - var splitList []file.FileInfo - if start >= lenNum { - splitList = []file.FileInfo{} - } else if end >= lenNum { - splitList = files[start:] - } else { - splitList = files[start:end] - } - total := len(files) - c.JSON(http.StatusOK, services.TotalDataResp(splitList, total)) -} - -func (m *FileNBI) Total(c *gin.Context) { - dir := c.Query("path") - - fileCount, dirCount, err := file.GetFileAndDirCount(dir) - if err != nil { - log.Error("failed to GetFileAndDirCount:", err) - c.JSON(http.StatusOK, services.ErrResp(err.Error())) - return - } - total := fileCount + dirCount - c.JSON(http.StatusOK, services.TotalResp(int64(total))) -} - -func (m *FileNBI) GetSingleFileHandler(c *gin.Context) { - var querys FileNBIQuery - - querys.Category = c.Param("category") - querys.Type = c.Param("type") - querys.DateIndex = c.Param("dateIndex") - if err := c.ShouldBindQuery(&querys); err != nil { - c.JSON(http.StatusOK, services.ErrResp(err.Error())) - return - } - - tableName := "" - if querys.Path == "" { - ok := false - switch querys.Category { - case "cdr": - tableName, ok = CDRTableMapper[querys.Type] - if tableName == "" || !ok { - c.JSON(http.StatusOK, services.ErrResp(fmt.Sprintf("invalid CDR file type: %s", querys.Type))) - return - } - case "log": - tableName, ok = LogTableMapper[querys.Type] - if tableName == "" || !ok { - c.JSON(http.StatusOK, services.ErrResp(fmt.Sprintf("invalid log file type: %s", querys.Type))) - return - } - default: - c.JSON(http.StatusOK, services.ErrResp(fmt.Sprintf("invalid log file category: %s", querys.Category))) - return - } - - s := SysJob{} - where := fmt.Sprintf("invoke_target='%s' and status=1 and JSON_UNQUOTE(JSON_EXTRACT(target_params,'$.tableName'))='%s'", INVOKE_FILE_EXPORT, tableName) - _, err := dborm.XEngDB().Table(s.TableName()). - Select("JSON_UNQUOTE(JSON_EXTRACT(target_params, '$.filePath')) as file_path"). - Where(where). - Get(&querys.Path) - if err != nil { - c.JSON(http.StatusOK, services.ErrResp(err.Error())) - return - } - } - - fileName := tableName + "_export_" + querys.DateIndex + "0000" + ".csv" - filePath := filepath.Join(querys.Path, fileName) - - file, err := os.Open(filePath) - if err != nil { - c.JSON(http.StatusOK, services.ErrResp(err.Error())) - return - } - defer file.Close() - - if _, err := os.Stat(filePath); os.IsNotExist(err) { - c.JSON(http.StatusOK, services.ErrResp(err.Error())) - return - } - - c.Header("Content-Disposition", "attachment; filename="+fileName) - c.Header("Content-Type", "application/octet-stream") - c.File(filePath) -} - -func (m *FileNBI) GetMultiFileHandler(c *gin.Context) { - var querys FileNBIQuery - - querys.Category = c.Param("category") - querys.Type = c.Param("type") - if err := c.ShouldBindQuery(&querys); err != nil { - c.JSON(http.StatusOK, services.ErrResp(err.Error())) - return - } - - tableName := "" - if querys.Path == "" { - ok := false - switch querys.Category { - case "cdr": - tableName, ok = CDRTableMapper[querys.Type] - if tableName == "" || !ok { - c.JSON(http.StatusOK, services.ErrResp(fmt.Sprintf("invalid CDR file type: %s", querys.Type))) - return - } - case "log": - tableName, ok = LogTableMapper[querys.Type] - if tableName == "" || !ok { - c.JSON(http.StatusOK, services.ErrResp(fmt.Sprintf("invalid log file type: %s", querys.Type))) - return - } - default: - c.JSON(http.StatusOK, services.ErrResp(fmt.Sprintf("invalid log file category: %s", querys.Category))) - return - } - - s := SysJob{} - where := fmt.Sprintf("invoke_target='%s' and status=1 and JSON_UNQUOTE(JSON_EXTRACT(target_params,'$.tableName'))='%s'", INVOKE_FILE_EXPORT, tableName) - _, err := dborm.XEngDB().Table(s.TableName()). - Select("JSON_UNQUOTE(JSON_EXTRACT(target_params, '$.filePath')) as file_path"). - Where(where). - Get(&querys.Path) - if err != nil { - c.JSON(http.StatusOK, services.ErrResp(err.Error())) - return - } - } - - zipWriter := zip.NewWriter(c.Writer) - defer zipWriter.Close() - - for _, fileName := range querys.FileNames { - filePath := filepath.Join(querys.Path, fileName) - - file, err := os.Open(filePath) - if err != nil { - c.JSON(http.StatusOK, services.ErrResp(err.Error())) - return - } - defer file.Close() - - if _, err := os.Stat(filePath); os.IsNotExist(err) { - c.JSON(http.StatusOK, services.ErrResp(err.Error())) - return - } - writer, err := zipWriter.Create(filepath.Base(fileName)) - if err != nil { - c.JSON(http.StatusOK, services.ErrResp(err.Error())) - return - } - - if _, err := io.Copy(writer, file); err != nil { - c.JSON(http.StatusOK, services.ErrResp(err.Error())) - return - } - - } - zipFile := tableName + "_export_" + time.Now().Local().Format(global.DateData) + ".zip" - c.Header("Content-Disposition", "attachment; filename="+zipFile) - c.Header("Content-Type", "application/zip") - //c.File(filePath) -} diff --git a/features/nbi/file/model.go b/features/nbi/file/model.go deleted file mode 100644 index 5dcdd9fa..00000000 --- a/features/nbi/file/model.go +++ /dev/null @@ -1,47 +0,0 @@ -package nbi_file - -import ( - "be.ems/lib/file" -) - -const ( - INVOKE_FILE_EXPORT = "exportTable" -) - -var CDRTableMapper map[string]string = map[string]string{ - "ims": "cdr_event_ims", - "smf": "cdr_event_smf", - "smsc": "cdr_event_smsc", - "sms": "cdr_event_smsc", -} - -var LogTableMapper map[string]string = map[string]string{ - "operate": "sys_log_operate", - "security": "sys_log_login", - "alarm": "alarm_log", -} - -type SysJob struct { - JobID int64 `gorm:"column:job_id;primary_key;auto_increment" json:"job_id"` //任务ID - InvokeTarget string `gorm:"column:invoke_target" json:"invoke_target"` //调用目标字符串 - TargetParams string `gorm:"column:target_params;type:json" json:"target_params,omitempty"` //调用目标传入参数 -} - -func (s *SysJob) TableName() string { - return "sys_job" -} - -type FileNBI struct { - file.FileInfo -} - -type FileNBIQuery struct { - Category string `form:"category" binding:"required"` - Type string `form:"type" binding:"required"` - DateIndex string `form:"dateIndex"` - Path string `json:"path" form:"path"` - FileNames []string `json:"fileName" form:"fileName"` - Suffix string `form:"suffix"` - PageNum int64 `form:"pageNum"` - PageSize int64 `form:"pageSize"` -} diff --git a/features/nbi/file/route.go b/features/nbi/file/route.go deleted file mode 100644 index 45c87e62..00000000 --- a/features/nbi/file/route.go +++ /dev/null @@ -1,26 +0,0 @@ -package nbi_file - -import ( - "be.ems/src/framework/middleware" - "github.com/gin-gonic/gin" -) - -// Register Routes for file_export -func Register(r *gin.RouterGroup) { - fileNBI := r.Group("/file") - { - var f *FileNBI - fileNBI.GET("/:category/:type/list", - middleware.AuthorizeUser(nil), - f.GetFileList, - ) - fileNBI.GET("/:category/:type/:dateIndex", - middleware.AuthorizeUser(nil), - f.GetSingleFileHandler, - ) - fileNBI.GET("/:category/:type", - middleware.AuthorizeUser(nil), - f.GetMultiFileHandler, - ) - } -} diff --git a/features/nbi/nbi.go b/features/nbi/nbi.go deleted file mode 100644 index 44ce90dd..00000000 --- a/features/nbi/nbi.go +++ /dev/null @@ -1,258 +0,0 @@ -package nbi - -import ( - "bytes" - "fmt" - "net/http" - "strings" - - "be.ems/lib/dborm" - "github.com/go-resty/resty/v2" - - "github.com/gorilla/mux" - - "be.ems/lib/config" - "be.ems/lib/global" - "be.ems/lib/log" - "be.ems/lib/oauth" - "be.ems/lib/services" -) - -type ErrorOAuthResponse struct { - Error map[string]interface{} -} - -type FailOAuthResponse struct { - Error struct { - ErrorCode string - ErrorInfo string - } -} - -type ApiResponse struct { - ResultCode string - ResultMessage interface{} -} - -//var globalSession = session.NewSessManager("restagent") - -var ( - MAX_RMUID_NUM int - MAX_ALARMID_NUM int - MAX_PMUID_NUM int - MAX_SUBID_NUM int - MAX_URI_LEN int - RMUID_REGEXP string -) - -var ( - // Northbound interface - GetNRMUri = config.DefaultUriPrefix + "/resourceManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/{objectTypeValue}" - NorthboundGetAlarmUri = config.DefaultUriPrefix + "/faultManagement/{apiVersion}/alarms" // ?alarmIds={alarmIdValues} - - CustomGetNRMUri = config.UriPrefix + "/resourceManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/{objectTypeValue}" -) - -func CheckParameterName(r *http.Request) []string { - var errorParams []string - vars := r.URL.Query() - for k, v := range vars { - log.Debug("vars:", k, v) - if k != "rmUIDs" && k != "fields" { - errorParams = append(errorParams, k) - } - } - - return errorParams -} - -func GetRmUIDArr(r *http.Request) []string { - vars := r.URL.Query() - rmUIDs, ok := vars["rmUIDs"] - if !ok { - log.Debug("rmUIDs is not exist") - return nil - } - - var rmUIDValues []string - for _, r := range rmUIDs { - if r != "" { - rmUIDValues = global.MergeStringArr(rmUIDValues, strings.Split(r, `,`)) - } - } - - return rmUIDValues -} - -func GetAttrNameArr(r *http.Request) []string { - vars := r.URL.Query() - fields, ok := vars["fields"] - if !ok { - log.Debug("attributeNames does not exist") - return nil - } - var attrNames []string - for _, a := range fields { - if a != "" { - attrNames = global.MergeStringArr(attrNames, strings.Split(a, `,`)) - } - } - - return attrNames -} - -func CheckValidRmUID(rmUIDs []string) []string { - log.Debug("CheckValidRmUID processing... ") - - var invalidRmUIDs []string - for _, r := range rmUIDs { - if !global.MatchRmUID(RMUID_REGEXP, r) { - invalidRmUIDs = append(invalidRmUIDs, r) - } - } - - return invalidRmUIDs -} - -func CheckLocalRmUID(rmUIDs []string) string { - log.Debug("GetLocalRmUID processing... ") - - rmUID := config.GetRmUIDFromConfig() - for _, r := range rmUIDs { - if r == rmUID { - return rmUID - } - } - - return "" -} - -func NBIGetNRMFromNF(w http.ResponseWriter, r *http.Request) { - log.Debug("NBIGetNRMFromNF processing... ") - - // response 414-4 uri too long ? (optional) - // todo ... ? - if bytes.Count([]byte(r.RequestURI), nil) > config.GetUriMaxLenFromConfig() { - log.Error("Request Uri too long:", bytes.Count([]byte(r.RequestURI), nil), config.GetUriMaxLenFromConfig()) - services.ResponseRequestURITooLong414UriTooLong(w) - return - } - - // check media type(content type) only support "application/json" - // response 415-1 - if !services.IsVallidContentType(r, config.GetYamlConfig().OMC.CheckContentType) { - log.Debug("Invalid Content-Type") - services.ResponseUnsupportedMediaType415(w) - return - } - - // error processing ... - // 401-1 response - token, ret := oauth.IsCarriedToken(r) - if ret == false { - log.Error("AccessToken is not carried") - services.ResponseUnauthorized401AccessTokenNotCarried(w) - return - } - - // 401-2 response - if dborm.XormExistValidToken(token, config.GetExpiresFromConfig()) == false { - log.Error("AccessToken fails or does not exist") - services.ResponseUnauthorized401AccessTokenNotExist(w) - return - } - - _, err := dborm.XormUpdateSessionShakeTime(token) - if err != nil { - log.Error("Failed to update session table:", err) - services.ResponseUnauthorized401AccessTokenNotExist(w) - return - } - - /* - // response 403 Forbidden, permissions deny - // todo... - plist := globalSession.GetPermissionFromSession(token) - log.Debug("permission list:", plist) - if len(plist) == 0 || plist[0] == false { - log.Debug("User permission deny") - services.ResponseForbidden403NotPermission(w) - return - } - */ - vars := mux.Vars(r) - neType := vars["elementTypeValue"] - - apiVer := vars["apiVersion"] - if apiVer != "v1" { - log.Error("Uri is invalid") - services.ResponseNotFound404UriNotExist(w, r) - return - } - - // response 406-1 - rmUIDValues := GetRmUIDArr(r) - if rmUIDValues == nil { - log.Error("missing parameter: rmUIDs") - services.ResponseNotAcceptable406MissingParam(w) - return - } - - // response 406-2 - errorParams := CheckParameterName(r) - if errorParams != nil { - log.Error("parameter name error: ", errorParams) - services.ResponseNotAcceptable406ParamError(w, errorParams) - return - } - - // response 400-5 - if len(rmUIDValues) == 0 { - log.Error("rmUIDs is wrong or NULL") - services.ResponseBadRequest400WrongParamValue(w) - return - } - - // response 414-1 - if len(rmUIDValues) > config.GetYamlConfig().Params.RmUIDMaxNum { - log.Error("rmUID greater than", config.GetYamlConfig().Params.RmUIDMaxNum) - services.ResponseRequestURITooLong414NRMNumExceed(w, config.GetYamlConfig().Params.RmUIDMaxNum) - return - } - - var response *resty.Response - respMsg := make(map[string]interface{}) - for _, rmUID := range rmUIDValues { - neInfo, err := dborm.XormGetNeInfoByRmUID(neType, rmUID) - if err != nil { - log.Error("dborm.XormGetNeInfo is failed:", err) - services.ResponseInternalServerError500DatabaseOperationFailed(w) - return - } - - requestURI2NF := fmt.Sprintf("http://%s:%v%s", neInfo.Ip, neInfo.Port, r.RequestURI) - log.Debug("requestURI2NF: GET ", requestURI2NF) - - client := resty.New() - response, err = client.R(). - EnableTrace(). - SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}). - SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). - Get(requestURI2NF) - if err != nil { - log.Error("Failed to Get from NF:", err) - services.ResponseInternalServerError500NFConnectRefused(w) - return - } - switch response.StatusCode() { - case http.StatusOK, http.StatusAccepted, http.StatusNoContent, http.StatusCreated: - respMsg["data"] = response - default: - if response != nil { - services.TransportResponse(w, response.StatusCode(), response.Body()) - } - } - } - - services.TransportResponse(w, response.StatusCode(), response.Body()) -} diff --git a/features/nbi/service.go b/features/nbi/service.go deleted file mode 100644 index 7b913d5c..00000000 --- a/features/nbi/service.go +++ /dev/null @@ -1,16 +0,0 @@ -// log management package - -package nbi - -import ( - nbi_file "be.ems/features/nbi/file" - "be.ems/lib/log" - "github.com/gin-gonic/gin" -) - -func InitSubServiceRoute(r *gin.Engine) { - log.Info("======init North-Bound Interface group gin.Engine") - - nbiGroup := r.Group("/nbi") - nbi_file.Register(nbiGroup) -} diff --git a/features/nbi/snmp.go b/features/nbi/snmp.go deleted file mode 100644 index 9e5e727b..00000000 --- a/features/nbi/snmp.go +++ /dev/null @@ -1,203 +0,0 @@ -package nbi - -import ( - "bytes" - "fmt" - "net/http" - "strconv" - - "github.com/gorilla/mux" - g "github.com/gosnmp/gosnmp" - - "be.ems/lib/config" - "be.ems/lib/log" - "be.ems/lib/services" -) - -func init() { - conf := config.GetYamlConfig() - // Default is a pointer to a GoSNMP struct that contains sensible defaults - // eg port 161, community public, etc - g.Default.Target = conf.NE.Addr - g.Default.Port = conf.NE.Port - err := g.Default.Connect() - if err != nil { - fmt.Printf("Connect() err: %v", err) - } - //defer g.Default.Conn.Close() - MAX_RMUID_NUM = config.GetRmUIDMaxNumFromConfig() - MAX_ALARMID_NUM = config.GetAlarmIDMaxNumFromConfig() - MAX_PMUID_NUM = config.GetPmIDMaxNumFromConfig() - MAX_SUBID_NUM = config.GetSubIDMaxNumFromConfig() - MAX_URI_LEN = config.GetUriMaxLenFromConfig() - RMUID_REGEXP = config.GetRmUIDRegexpFromConfig() -} - -func GetNRMByUri(w http.ResponseWriter, r *http.Request) { - log.Debug("GetNRMByUri processing... ") - - // response 414-4 uri too long ? (optional) - // todo ... ? - if bytes.Count([]byte(r.RequestURI), nil) > MAX_URI_LEN { - log.Error("Request Uri too long:", bytes.Count([]byte(r.RequestURI), nil)) - services.ResponseRequestURITooLong414UriTooLong(w) - return - } - - // check media type(content type) only support "application/json" - // response 415-1 - if !services.IsVallidContentType(r, config.GetYamlConfig().OMC.CheckContentType) { - log.Debug("Invalid Content-Type") - services.ResponseUnsupportedMediaType415(w) - return - } - - // error processing ... - // 401-1 response - // token, ret := globalSession.IsCarriedToken(r) - // if ret == false { - // log.Error("AccessToken is not carried") - // services.ResponseUnauthorized401AccessTokenNotCarried(w) - // return - // } - - // 401-2 response - // if globalSession.IsValidToken(token) == false { - // log.Error("AccessToken fails or does not exist") - // services.ResponseUnauthorized401AccessTokenNotExist(w) - // return - // } - // response 403 Forbidden, permissions deny - // todo... - // plist := globalSession.GetPermissionFromSession(token) - // log.Debug("permission list:", plist) - // if len(plist) == 0 || plist[0] == false { - // log.Error("User permission deny") - // services.ResponseForbidden403NotPermission(w) - // return - // } - - vars := mux.Vars(r) - qeuryUri := vars["apiCategory"] + "/" + vars["elementTypeValue"] + "/" + vars["objectTypeValue"] - log.Debug("Get by Uri: ", qeuryUri) - - apiVer := vars["apiVersion"] - if apiVer != "v1" { - log.Error("Uri is invalid") - services.ResponseNotFound404UriNotExist(w, r) - return - } - - // response 406-1 - rmUIDValues := GetRmUIDArr(r) - if rmUIDValues == nil { - log.Error("missing parameter: rmUIDs") - services.ResponseNotAcceptable406MissingParam(w) - return - } - - // response 406-2 - errorParams := CheckParameterName(r) - if errorParams != nil { - log.Error("parameter name error: ", errorParams) - services.ResponseNotAcceptable406ParamError(w, errorParams) - return - } - - // response 400-5 - if len(rmUIDValues) == 0 { - log.Error("rmUIDs is wrong or NULL") - services.ResponseBadRequest400WrongParamValue(w) - return - } - - // response 414-1 - if len(rmUIDValues) > MAX_RMUID_NUM { - log.Error("rmUID greater than", MAX_RMUID_NUM) - services.ResponseRequestURITooLong414NRMNumExceed(w, MAX_RMUID_NUM) - return - } - - // response 400-1 - // check rmUID is valid - // todo ... - invalidRmUIDs := CheckValidRmUID(rmUIDValues) - if len(invalidRmUIDs) != 0 { - log.Error("rmUID is invalid") - services.ResponseBadRequest400RmUIDsIsInvalid(w, invalidRmUIDs) - return - } - - // response 404-2 - rmUID := CheckLocalRmUID(rmUIDValues) - if rmUID == "" { - log.Error("rmUID does not exist") - services.ResponseNotFound404NRMNotExist(w, rmUIDValues) - return - } - - // response 404-1, uri is not exist in map - attrNames := GetAttrNameArr(r) - var Oids []string - Oids = *config.GetOidByFileds(qeuryUri, attrNames, &Oids) - if len(Oids) == 0 { - log.Error("Nothing of config map") - services.ResponseNotFound404UriNotExist(w, r) - return - } - - // response 404-1, uri is not exist in map - var nameOids []config.NameOid - nameOids = *config.GetDataOidByFields(qeuryUri, attrNames, &nameOids) - if len(nameOids) == 0 { - log.Error("Nothing of config map") - services.ResponseNotFound404UriNotExist(w, r) - return - } - - result, err2 := g.Default.Get(Oids) // Get() accepts up to g.MAX_OIDS - if err2 != nil { - log.Fatalf("Get() err: %v", err2) - - } - - // var nameValues []config.NameValue - var nameValue config.NameValue - - nameValues := make(map[string]interface{}) - nameValues["rmUID"] = rmUID - for i, variable := range result.Variables { - nameValue.Name = nameOids[i].Name - log.Debugf("%d: oid: %s name: %s\n", i, variable.Name, nameValue.Name) - // if nameOids[i].Oid == variable.Name && global.IsContain(attributeNames, nameValue.Name) { - if nameOids[i].Oid == variable.Name { - // the Value of each variable returned by Get() implements - // interface{}. You could do a type switch... - switch variable.Type { - case g.OctetString: - bytes := variable.Value.([]byte) - log.Debugf("string: %s\n", string(bytes)) - nameValue.Value = string(bytes) - nameValues[nameValue.Name] = nameValue.Value - case g.Integer: - value := variable.Value.(int) - log.Debugf("integer: %d\n", value) - nameValue.Value = strconv.Itoa(value) - nameValues[nameValue.Name] = nameValue.Value - case g.IPAddress: - value := variable.Value.(string) - log.Debugf("IPAddress: %s\n", variable.Value) - nameValue.Value = value - nameValues[nameValue.Name] = nameValue.Value - default: - // ... or often you're just interested in numeric values. - // ToBigInt() will return the Value as a BigInt, for plugging - // into your calculations. - log.Debugf("number: %d\n", g.ToBigInt(variable.Value)) - } - } - } - - getResponse := services.DataResponse{nameValues} - services.ResponseWithJson(w, http.StatusOK, getResponse) -} diff --git a/features/pm/kpi_c_report/controller.go b/features/pm/kpi_c_report/controller.go deleted file mode 100644 index 63350aa9..00000000 --- a/features/pm/kpi_c_report/controller.go +++ /dev/null @@ -1,349 +0,0 @@ -package kpi_c_report - -import ( - "encoding/json" - "fmt" - "net/http" - "strconv" - "strings" - - "be.ems/lib/services" - "be.ems/src/framework/database/db" - "be.ems/src/framework/utils/parse" - "github.com/gin-gonic/gin" -) - -func (k *KpiCReport) Get(c *gin.Context) { - var reports []KpiCReport - var conditions []string - var params []any - - var querys KpiCReportQuery - if err := c.ShouldBindQuery(&querys); err != nil { - c.JSON(http.StatusBadRequest, services.ErrResp(err.Error())) - return - } - - // construct condition to get - if querys.NeType != "" { - conditions = append(conditions, "ne_type = ?") - params = append(params, strings.ToUpper(querys.NeType)) - } else { - c.JSON(http.StatusBadRequest, services.ErrResp("Not found NE type")) - return - } - tableName := TableName() + "_" + strings.ToLower(querys.NeType) - dbg := db.DB("").Model(&KpiCReport{}).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=?)") - params = append(params, strings.ToUpper(querys.NeType), querys.NeID) - } else { - c.JSON(http.StatusBadRequest, services.ErrResp("Not found required parameter NE ID")) - return - } - if querys.StartTime != "" { - conditions = append(conditions, "(UNIX_TIMESTAMP(created_at) * 1000) >= ?") - params = append(params, querys.StartTime) - } - if querys.EndTime != "" { - conditions = append(conditions, "(UNIX_TIMESTAMP(created_at) * 1000) <= ?") - params = append(params, querys.EndTime) - } - conditions = append(conditions, "kpi_values != 'null'") - - whereSql := "" - if len(conditions) > 0 { - whereSql += strings.Join(conditions, " and ") - dbg = dbg.Where(whereSql, params...) - } - // page number and size - if pageSize := querys.PageSize; pageSize > 0 { - dbg = dbg.Limit(pageSize) - if pageNum := querys.PageNum; pageNum > 0 { - dbg = dbg.Offset((pageNum - 1) * pageSize) - } - } - - // order by - if sortField, sortOrder := querys.SortField, querys.SortOrder; sortField != "" && sortOrder != "" { - orderBy := fmt.Sprintf("%s %s", sortField, sortOrder) - dbg = dbg.Order(orderBy) - } - - //err := db.DB("").Table(tableName).Where(whereSql, params...).Find(&reports).Error - err := dbg.Find(&reports).Error - if err != nil { - c.JSON(http.StatusOK, services.ErrResp(err.Error())) - return - } - c.JSON(http.StatusOK, services.DataResp(reports)) -} - -func (k *KpiCReport) GetReport2FE(c *gin.Context) { - var results []KpiCReport - var conditions []string - var params []any - - var querys KpiCReportQuery - if err := c.ShouldBindQuery(&querys); err != nil { - c.JSON(http.StatusOK, services.ErrResp(err.Error())) - return - } - - // construct condition to get - if querys.NeType != "" { - conditions = append(conditions, "ne_type = ?") - params = append(params, strings.ToUpper(querys.NeType)) - } else { - c.JSON(http.StatusOK, services.ErrResp("Not found required parameter NE type")) - return - } - tableName := TableName() + "_" + strings.ToLower(querys.NeType) - dbg := db.DB("").Model(&KpiCReport{}).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=?)") - params = append(params, querys.NeType, querys.NeID) - } else { - c.JSON(http.StatusBadRequest, services.ErrResp("Not found required parameter NE ID")) - return - } - if querys.StartTime != "" { - conditions = append(conditions, "created_at >= ?") - params = append(params, querys.StartTime) - } - if querys.EndTime != "" { - conditions = append(conditions, "created_at <= ?") - params = append(params, querys.EndTime) - } - conditions = append(conditions, "kpi_values != 'null'") - - whereSql := "" - if len(conditions) > 0 { - whereSql += strings.Join(conditions, " and ") - dbg = dbg.Where(whereSql, params...) - } - // page number and size - if pageSize := querys.PageSize; pageSize > 0 { - dbg = dbg.Limit(pageSize) - if pageNum := querys.PageNum; pageNum > 0 { - dbg = dbg.Offset((pageNum - 1) * pageSize) - } - } - - // order by - if sortField, sortOrder := querys.SortField, querys.SortOrder; sortField != "" && sortOrder != "" { - orderBy := fmt.Sprintf("%s %s", sortField, sortOrder) - dbg = dbg.Order(orderBy) - } - - //err := db.DB("").Table(tableName).Where(whereSql, params...).Find(&reports).Error - err := dbg.Find(&results).Error - if err != nil { - c.JSON(http.StatusOK, services.ErrResp(err.Error())) - return - } - - reports := []map[string]any{} - for _, r := range results { - report := map[string]any{ - // kip_id ... - "neType": *r.NeType, - "neId": querys.NeID, - "neName": *r.NeName, - "rmUID": *r.RmUID, - "startIndex": r.Index, - "timeGroup": r.Date[:10] + " " + *r.EndTime, - "createdAt": r.CreatedAt, - "granularity": r.Granularity, - } - // 解析 JSON 字符串为 map - var kpiValues []map[string]any - err := json.Unmarshal([]byte(r.KpiValues), &kpiValues) - if err != nil { - continue - } - - // 遍历 kpiValues 数组 - for _, k := range kpiValues { - kpiId := fmt.Sprint(k["kpiId"]) - value := parse.Number(k["value"]) - - formatted := fmt.Sprintf("%.3d", value) - formattedFloat, err := strconv.ParseFloat(formatted, 64) - if err != nil { - formattedFloat = 0 - } - report[kpiId] = formattedFloat - } - reports = append(reports, report) - } - c.JSON(http.StatusOK, services.DataResp(reports)) -} - -func (k *KpiCReport) GetTotalList(c *gin.Context) { - var reports []KpiCReport - var conditions []string - var params []any - - var querys KpiCReportQuery - if err := c.ShouldBindQuery(&querys); err != nil { - c.JSON(http.StatusOK, services.ErrResp(err.Error())) - return - } - - // construct condition to get - if querys.NeType != "" { - conditions = append(conditions, "ne_type = ?") - params = append(params, strings.ToUpper(querys.NeType)) - } else { - c.JSON(http.StatusOK, services.ErrResp("Not found NE type")) - return - } - tableName := TableName() + "_" + strings.ToLower(querys.NeType) - dbg := db.DB("").Model(&KpiCReport{}).Table(tableName) - - if querys.StartTime != "" { - conditions = append(conditions, "created_at >= ?") - params = append(params, querys.StartTime) - } - if querys.EndTime != "" { - conditions = append(conditions, "created_at <= ?") - params = append(params, querys.EndTime) - } - conditions = append(conditions, "kpi_values != 'null'") - - whereSql := "" - if len(conditions) > 0 { - whereSql += strings.Join(conditions, " and ") - dbg = dbg.Where(whereSql, params...) - } - - // get total number - var total int64 = 0 - err := dbg.Count(&total).Error - if err != nil { - c.JSON(http.StatusOK, services.ErrResp(err.Error())) - return - } - - // page number and size - if pageSize := querys.PageSize; pageSize > 0 { - dbg = dbg.Limit(pageSize) - if pageNum := querys.PageNum; pageNum > 0 { - dbg = dbg.Offset((pageNum - 1) * pageSize) - } - } - - // order by - if sortField, sortOrder := querys.SortField, querys.SortOrder; sortField != "" && sortOrder != "" { - orderBy := fmt.Sprintf("%s %s", sortField, sortOrder) - dbg = dbg.Order(orderBy) - } - - //err := db.DB("").Table(tableName).Where(whereSql, params...).Find(&reports).Error - err = dbg.Find(&reports).Error - if err != nil { - c.JSON(http.StatusOK, services.ErrResp(err.Error())) - return - } - - c.JSON(http.StatusOK, services.TotalDataResp(reports, total)) -} - -func (k *KpiCReport) Total(c *gin.Context) { - var conditions []string - var params []any - - var querys KpiCReportQuery - if err := c.ShouldBindQuery(&querys); err != nil { - c.JSON(http.StatusOK, services.ErrResp(err.Error())) - return - } - - // construct condition to get - if querys.NeType != "" { - conditions = append(conditions, "ne_type = ?") - params = append(params, strings.ToUpper(querys.NeType)) - } else { - c.JSON(http.StatusOK, services.ErrResp("Not found NE type")) - return - } - tableName := TableName() + "_" + strings.ToLower(querys.NeType) - dbg := db.DB("").Model(&KpiCReport{}).Table(tableName) - if querys.StartTime != "" { - conditions = append(conditions, "(UNIX_TIMESTAMP(created_at) * 1000) >= ?") - params = append(params, querys.StartTime) - } - if querys.EndTime != "" { - conditions = append(conditions, "(UNIX_TIMESTAMP(created_at) * 1000) <= ?") - params = append(params, querys.EndTime) - } - conditions = append(conditions, "kpi_values != 'null'") - - whereSql := "" - if len(conditions) > 0 { - whereSql += strings.Join(conditions, " and ") - dbg = dbg.Where(whereSql, params...) - } - var total int64 = 0 - err := dbg.Count(&total).Error - if err != nil { - c.JSON(http.StatusOK, services.ErrResp(err.Error())) - return - } - - c.JSON(http.StatusOK, services.TotalResp(total)) -} - -func (k *KpiCReport) Post(c *gin.Context) { - var report KpiCReport - - if err := c.ShouldBindJSON(&report); err != nil { - c.JSON(http.StatusOK, services.ErrResp(err.Error())) - return - } - dbg := db.DB("").Model(&KpiCReport{}) - if err := dbg.Create(&report).Error; err != nil { - c.JSON(http.StatusOK, services.ErrResp(err.Error())) - return - } - c.JSON(http.StatusCreated, services.DataResp(report)) -} - -func (k *KpiCReport) Put(c *gin.Context) { - var report KpiCReport - id := c.Param("id") - dbg := db.DB("").Model(&KpiCReport{}) - if err := dbg.First(&report, id).Error; err != nil { - c.JSON(http.StatusOK, services.ErrResp("custom indicator report not found")) - return - } - - if err := c.ShouldBindJSON(&report); err != nil { - c.JSON(http.StatusOK, services.ErrResp(err.Error())) - return - } - db.DB("").Model(&KpiCReport{}).Save(&report) - c.JSON(http.StatusOK, services.DataResp(report)) -} - -func (k *KpiCReport) Delete(c *gin.Context) { - id := c.Param("id") - - if err := db.DB("").Delete(&KpiCReport{}, id).Error; err != nil { - c.JSON(http.StatusOK, services.ErrResp("custom indicator report not found")) - return - } - - c.JSON(http.StatusNoContent, nil) // 204 No Content -} - -func InsertKpiCReport(neType string, report KpiCReport) { - tableName := TableName() + "_" + strings.ToLower(neType) - dbg := db.DB("").Model(&KpiCReport{}) - if err := dbg.Table(tableName).Create(&report).Error; err != nil { - return - } -} diff --git a/features/pm/kpi_c_report/model.go b/features/pm/kpi_c_report/model.go deleted file mode 100644 index 82a3c505..00000000 --- a/features/pm/kpi_c_report/model.go +++ /dev/null @@ -1,42 +0,0 @@ -package kpi_c_report - -type KpiCReport struct { - ID int `gorm:"column:id;primary_key;auto_increment" json:"id"` - NeType *string `gorm:"column:ne_type;default:NULL" json:"neType,omitempty"` - NeName *string `gorm:"column:ne_name;default:" json:"neName,omitempty"` - RmUID *string `gorm:"column:rm_uid;" json:"rmUid,omitempty"` - Date string `gorm:"column:date" json:"date"` // time.Time `gorm:"column:date" json:"date"` - StartTime *string `gorm:"column:start_time" json:"startTime,omitempty"` - EndTime *string `gorm:"column:end_time" json:"endTime,omitempty"` - Index int64 `gorm:"column:index" json:"index"` - Granularity *int64 `gorm:"column:granularity" json:"granularity,omitempty"` //Time granualarity: 5/10/.../60/300 (second) - KpiValues string `gorm:"column:kpi_values" json:"kpiValues,omitempty"` - CreatedAt *int64 `gorm:"column:created_at" json:"createdAt,omitempty"` -} - -type KpiCReportQuery struct { - NeType string `json:"neType" form:"neType" binding:"required"` - NeID string `json:"neId" form:"neId" binding:"required"` - RmUID string `json:"rmUID" form:"rmUID"` - StartTime string `json:"startTime" form:"startTime"` - EndTime string `json:"endTime" form:"endTime"` - UserName string `json:"userName" form:"userName"` - SortField string `json:"sortField" form:"sortField" binding:"omitempty,oneof=created_at"` // 排序字段,填写结果字段 - SortOrder string `json:"sortOrder" form:"sortOrder" binding:"omitempty,oneof=asc desc"` // 排序升降序,asc desc - PageNum int `json:"pageNum" form:"pageNum"` - PageSize int `json:"pageSize" form:"pageSize"` -} - -type KpiCReport2FE struct { - NeType string `json:"neType" gorm:"column:ne_type"` - NeId string `json:"neId"` - NeName string `json:"neName" gorm:"column:ne_name"` - RmUID string `json:"rmUid" gorm:"column:rm_uid"` - TimeGroup string `json:"timeGroup"` - StartIndex int16 `json:"startIndex" gorm:"column:index"` - Granularity int8 `json:"granularity" gorm:"column:granularity"` -} - -func TableName() string { - return "kpi_c_report" -} diff --git a/features/pm/kpi_c_report/route.go b/features/pm/kpi_c_report/route.go deleted file mode 100644 index 037d936c..00000000 --- a/features/pm/kpi_c_report/route.go +++ /dev/null @@ -1,43 +0,0 @@ -package kpi_c_report - -import ( - "be.ems/src/framework/middleware" - "github.com/gin-gonic/gin" -) - -// Register Routes for kpi_c_report -func Register(r *gin.RouterGroup) { - - pmKPIC := r.Group("/kpiC") - { - var k *KpiCReport - pmKPIC.GET("/report", - middleware.AuthorizeUser(nil), - k.GetReport2FE, - ) - pmKPIC.GET("/report/list", - middleware.AuthorizeUser(nil), - k.Get, - ) - pmKPIC.GET("/report/totalList", - middleware.AuthorizeUser(nil), - k.Total, - ) - pmKPIC.GET("/report/total", - middleware.AuthorizeUser(nil), - k.Total, - ) - pmKPIC.POST("/report", - middleware.AuthorizeUser(nil), - k.Post, - ) - pmKPIC.PUT("/report/:id", - middleware.AuthorizeUser(nil), - k.Put, - ) - pmKPIC.DELETE("/report/:id", - middleware.AuthorizeUser(nil), - k.Delete, - ) - } -} diff --git a/features/pm/kpi_c_title/controller.go b/features/pm/kpi_c_title/controller.go deleted file mode 100644 index 50c2b685..00000000 --- a/features/pm/kpi_c_title/controller.go +++ /dev/null @@ -1,312 +0,0 @@ -package kpi_c_title - -import ( - "fmt" - "net/http" - "regexp" - "sort" - "strconv" - "strings" - "time" - - "be.ems/lib/log" - "be.ems/lib/services" - "be.ems/src/framework/database/db" - "be.ems/src/framework/reqctx" - - "github.com/gin-gonic/gin" -) - -// get customize kpi total and list -func (k *KpiCTitle) GetToalList(c *gin.Context) { - var titles []KpiCTitle - var conditions []string - var params []any - i18n := reqctx.AcceptLanguage(c) - - var querys KpiCTitleQuery - if err := c.ShouldBindQuery(&querys); err != nil { - c.JSON(http.StatusOK, services.ErrResp(err.Error())) - return - } - - dbg := db.DB("").Model(&KpiCTitle{}) - // construct condition to get - if neType := querys.NeType; neType != "" { - conditions = append(conditions, "ne_type = ?") - params = append(params, strings.ToUpper(neType)) - } - if status := querys.Status; status != "" { - conditions = append(conditions, "status = ?") - params = append(params, status) - } else { - conditions = append(conditions, "status != '2'") - } - - whereSql := "" - if len(conditions) > 0 { - whereSql += strings.Join(conditions, " and ") - dbg = dbg.Where(whereSql, params...) - } - - // Get total number - var total int64 = 0 - if err := dbg.Count(&total).Error; err != nil { - c.JSON(http.StatusOK, services.ErrResp(err.Error())) - return - } - - // page number and size - if pageSize := querys.PageSize; pageSize > 0 { - dbg = dbg.Limit(pageSize) - if pageNum := querys.PageNum; pageNum > 0 { - dbg = dbg.Offset((pageNum - 1) * pageSize) - } - } - - // order by - if sortField, sortOrder := querys.SortField, querys.SortOrder; sortField != "" && sortOrder != "" { - orderBy := fmt.Sprintf("%s %s", sortField, sortOrder) - dbg = dbg.Order(orderBy) - } - if err := dbg.Find(&titles).Error; err != nil { - c.JSON(http.StatusOK, services.ErrResp(err.Error())) - return - } - - k.expressionAlias(titles, i18n) - - c.JSON(http.StatusOK, services.TotalDataResp(titles, total)) - //c.JSON(http.StatusOK, titles) -} - -func (k *KpiCTitle) Get(c *gin.Context) { - var titles []KpiCTitle - var conditions []string - var params []any - i18n := reqctx.AcceptLanguage(c) - - // construct condition to get - if neType := c.Query("neType"); neType != "" { - conditions = append(conditions, "ne_type = ?") - params = append(params, strings.ToUpper(neType)) - } - if status := c.Query("status"); status != "" { - conditions = append(conditions, "status = ?") - params = append(params, status) - } else { - conditions = append(conditions, "status != '2'") - } - - whereSql := "" - if len(conditions) > 0 { - whereSql += strings.Join(conditions, " and ") - } - if err := db.DB("").Where(whereSql, params...).Find(&titles).Error; err != nil { - c.JSON(http.StatusOK, services.ErrResp(err.Error())) - return - } - - k.expressionAlias(titles, i18n) - - c.JSON(http.StatusOK, services.DataResp(titles)) - //c.JSON(http.StatusOK, titles) -} - -// alias customized kpi expression with cn/en title -func (k *KpiCTitle) expressionAlias(titles []KpiCTitle, i18n string) { - var title *KpiCTitle - for i := 0; i < len(titles); i++ { - title = &titles[i] - title.ExprAlias = *title.Expression - re := regexp.MustCompile(`'([^']+)'`) - matches := re.FindAllStringSubmatch(title.ExprAlias, -1) - - for _, match := range matches { - var alias, sql string - if i18n == "zh" { - sql = fmt.Sprintf("SELECT cn_title FROM kpi_title WHERE kpi_id='%s'", match[1]) - } else { - sql = fmt.Sprintf("SELECT en_title FROM kpi_title WHERE kpi_id='%s'", match[1]) - } - m, err := db.RawDB("", sql, nil) - if err != nil { - log.Warn("Failed to QueryRow:", err) - continue - } - if len(m) > 0 { - if i18n == "zh" { - alias = fmt.Sprintf("%v", m[0]["cn_title"]) - } else { - alias = fmt.Sprintf("%v", m[0]["en_title"]) - } - } - title.ExprAlias = regexp.MustCompile(match[1]).ReplaceAllString(title.ExprAlias, alias) - } - } -} - -func (k *KpiCTitle) Total(c *gin.Context) { - var conditions []string - var params []any - - // construct condition to get - if neType := c.Query("neType"); neType != "" { - conditions = append(conditions, "ne_type = ?") - params = append(params, strings.ToUpper(neType)) - } - if status := c.Query("status"); status != "" { - conditions = append(conditions, "status = ?") - params = append(params, status) - } else { - conditions = append(conditions, "status != '2'") - } - - whereSql := "" - if len(conditions) > 0 { - whereSql += strings.Join(conditions, " and ") - } - var total int64 = 0 - if err := db.DB("").Table(k.TableName()).Where(whereSql, params...).Count(&total).Error; err != nil { - c.JSON(http.StatusOK, services.ErrResp(err.Error())) - return - } - - c.JSON(http.StatusOK, services.TotalResp(total)) -} - -func (k *KpiCTitle) Post(c *gin.Context) { - var title KpiCTitle - if err := c.ShouldBindJSON(&title); err != nil { - c.JSON(http.StatusOK, services.ErrResp(err.Error())) - return - } - userName := reqctx.LoginUserToUserName(c) - title.CreatedBy = &userName - tx := db.DB("").Model(&KpiCTitle{}) - result := tx.Where("ne_type=? and (kpi_id=? or title=?) and status!='2'", title.NeType, title.KpiID, title.Title).First(&title) - if result.RowsAffected > 0 { - c.JSON(http.StatusOK, services.ErrResp("custom indicator already exist")) - return - } - - // Regexp match like AMF.C.01 - // kpiIDRegexp := "^" + *title.NeType + "\\.C\\.[0-9]{2}$" - // ret := db.DB("").Table("kpi_c_title"). - // Where("ne_type=? and kpi_id REGEXP ? ORDER BY kpi_id DESC LIMIT 1", title.NeType, kpiIDRegexp).Scan(&res) - // if err := ret.Error; err != nil { - // c.JSON(http.StatusOK, services.ErrResp(err.Error())) - // return - // } - - titles := []KpiCTitle{} - ret := db.DB("").Model(&KpiCTitle{}) - ret = ret.Select("kpi_id").Where("ne_type=?", title.NeType).Find(&titles) - - newKpiID := *title.NeType + ".C" + ".01" - if ret.RowsAffected != 0 { - suffixInt := 1 - prefixStr := fmt.Sprintf("%s.C.", *title.NeType) - sort.SliceStable(titles, func(i, j int) bool { - vi := *titles[i].KpiID - vj := *titles[j].KpiID - if strings.HasPrefix(vi, prefixStr) && strings.HasPrefix(vj, prefixStr) { - vvi := strings.Replace(vi, prefixStr, "", 1) - vvii, err := strconv.Atoi(vvi) - if err != nil { - return false - } - vvj := strings.Replace(vj, prefixStr, "", 1) - vvjj, err := strconv.Atoi(vvj) - if err != nil { - return false - } - return vvii > vvjj // desc - } - return false - }) - maxKpiID := *titles[0].KpiID - prefix := maxKpiID[:len(maxKpiID)-2] - suffix := maxKpiID[len(maxKpiID)-2:] - suffixInt, err := strconv.Atoi(suffix) - if err != nil { - c.JSON(http.StatusOK, services.ErrResp(err.Error())) - return - } - if suffixInt >= MAX_KPI_C_ID { - err := fmt.Errorf("exceed the max customized KPI ID") - c.JSON(http.StatusOK, services.ErrResp(err.Error())) - return - } - - suffixInt++ - newSuffix := fmt.Sprintf("%02d", suffixInt) - newKpiID = prefix + newSuffix - } - title.KpiID = &newKpiID - txx := db.DB("").Model(&KpiCTitle{}) - if err := txx.Create(&title).Error; err != nil { - c.JSON(http.StatusOK, services.ErrResp(err.Error())) - return - } - kpiCReportTable := "kpi_c_report_" + strings.ToLower(*title.NeType) - if !db.DB("").Migrator().HasTable(kpiCReportTable) { - // clone table "kpi_c_report" to "kpi_c_report_{neType}" - sql := fmt.Sprintf("CREATE TABLE IF NOT EXISTS %s AS SELECT * FROM %s WHERE 1=0", kpiCReportTable, "kpi_c_report") - if _, err := db.ExecDB("", sql, nil); err != nil { - c.JSON(http.StatusOK, services.ErrResp(err.Error())) - return - } - sql = fmt.Sprintf("ALTER TABLE %s MODIFY COLUMN `id` int(11) NOT NULL AUTO_INCREMENT FIRST,ADD PRIMARY KEY IF NOT EXISTS (`id`)", kpiCReportTable) - if _, err := db.ExecDB("", sql, nil); err != nil { - c.JSON(http.StatusOK, services.ErrResp(err.Error())) - return - } - sql = fmt.Sprintf("ALTER TABLE %s ADD INDEX IF NOT EXISTS `idx_timestamp`(`created_at`) USING BTREE, ADD INDEX IF NOT EXISTS `idx_uid_datetime`(`rm_uid`, `date`, `start_time`) USING BTREE", kpiCReportTable) - if _, err := db.ExecDB("", sql, nil); err != nil { - c.JSON(http.StatusOK, services.ErrResp(err.Error())) - return - } - } - c.JSON(http.StatusCreated, services.DataResp(title)) -} - -func (k *KpiCTitle) Put(c *gin.Context) { - var title KpiCTitle - id := c.Param("id") - - if err := db.DB("").First(&title, id).Error; err != nil { - c.JSON(http.StatusOK, services.ErrResp("custom indicator not found")) - return - } - - if err := c.ShouldBindJSON(&title); err != nil { - c.JSON(http.StatusOK, services.ErrResp(err.Error())) - return - } - title.UpdatedAt = time.Now().UnixMilli() - db.DB("").Save(&title) - - c.JSON(http.StatusOK, services.DataResp(title)) -} - -func (k *KpiCTitle) Delete(c *gin.Context) { - id := c.Param("id") - - if err := db.DB("").Table(k.TableName()).Where("id=?", id).Update("status", "2").Error; err != nil { - c.JSON(http.StatusOK, services.ErrResp(err.Error())) - return - } - - c.JSON(http.StatusNoContent, nil) // 204 No Content -} - -func GetActiveKPICList(neType string) []KpiCTitle { - k := new([]KpiCTitle) - - err := db.DB("").Where("`ne_type` = ? and `status` = '1'", neType).Find(&k).Error - if err != nil { - return nil - } - return *k -} diff --git a/features/pm/kpi_c_title/model.go b/features/pm/kpi_c_title/model.go deleted file mode 100644 index 05170c4b..00000000 --- a/features/pm/kpi_c_title/model.go +++ /dev/null @@ -1,33 +0,0 @@ -package kpi_c_title - -const ( - MAX_KPI_C_ID = 99 -) - -type KpiCTitle struct { - ID int `gorm:"column:id;primary_key;auto_increment" json:"id"` - NeType *string `gorm:"column:ne_type" json:"neType,omitempty"` - KpiID *string `gorm:"column:kpi_id" json:"kpiId,omitempty"` - Title *string `gorm:"column:title" json:"title,omitempty"` - Expression *string `gorm:"column:expression" json:"expression,omitempty"` - ExprAlias string `gorm:"-" json:"exprAlias"` - Status string `gorm:"column:status" json:"status"` // 0-Inactive/1-Active/2-Deleted - Unit *string `gorm:"column:unit" json:"unit,omitempty"` - Description *string `gorm:"column:description" json:"description,omitempty"` - CreatedBy *string `gorm:"column:created_by" json:"createdBy,omitempty"` - UpdatedAt int64 `gorm:"column:updated_at" json:"updatedAt,omitempty"` -} - -type KpiCTitleQuery struct { - ID int `json:"id" form:"id"` - NeType string `json:"neType" form:"neType"` - Status string `json:"status" form:"status"` - SortField string `json:"sortField" form:"sortField" binding:"omitempty,oneof=created_at"` // 排序字段,填写结果字段 - SortOrder string `json:"sortOrder" form:"sortOrder" binding:"omitempty,oneof=asc desc"` // 排序升降序,asc desc - PageNum int `json:"pageNum" form:"pageNum"` - PageSize int `json:"pageSize" form:"pageSize"` -} - -func (k *KpiCTitle) TableName() string { - return "kpi_c_title" -} diff --git a/features/pm/kpi_c_title/route.go b/features/pm/kpi_c_title/route.go deleted file mode 100644 index 485f3f93..00000000 --- a/features/pm/kpi_c_title/route.go +++ /dev/null @@ -1,39 +0,0 @@ -package kpi_c_title - -import ( - "be.ems/src/framework/middleware" - "github.com/gin-gonic/gin" -) - -// Register Routes for kpi_c_title -func Register(r *gin.RouterGroup) { - - pmKPIC := r.Group("/kpiC") - { - var k *KpiCTitle - pmKPIC.GET("/title", - middleware.AuthorizeUser(nil), - k.Get, - ) - pmKPIC.GET("/title/total", - middleware.AuthorizeUser(nil), - k.Total, - ) - pmKPIC.GET("/title/totalList", - middleware.AuthorizeUser(nil), - k.GetToalList, - ) - pmKPIC.POST("/title", - middleware.AuthorizeUser(nil), - k.Post, - ) - pmKPIC.PUT("/title/:id", - middleware.AuthorizeUser(nil), - k.Put, - ) - pmKPIC.DELETE("/title/:id", - middleware.AuthorizeUser(nil), - k.Delete, - ) - } -} diff --git a/features/pm/performance.go b/features/pm/performance.go deleted file mode 100644 index 0a779084..00000000 --- a/features/pm/performance.go +++ /dev/null @@ -1,1227 +0,0 @@ -package pm - -import ( - "encoding/json" - "fmt" - "io" - "math" - "net/http" - "strconv" - "strings" - "time" - - "be.ems/features/pm/kpi_c_report" - "be.ems/features/pm/kpi_c_title" - "be.ems/lib/config" - "be.ems/lib/core/ctx" - "be.ems/lib/dborm" - evaluate "be.ems/lib/eval" - "be.ems/lib/global" - "be.ems/lib/log" - "be.ems/lib/services" - "be.ems/src/framework/database/db" - "be.ems/src/framework/utils/date" - "be.ems/src/framework/utils/parse" - neDataModel "be.ems/src/modules/network_data/model" - 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" - "github.com/gorilla/mux" -) - -type Response struct { - Data interface{} `json:"data"` -} - -type KpiReport struct { - Timestamp string `json:"TimeStamp"` - Task struct { - Period struct { - StartTime string `json:"StartTime"` - EndTime string `json:"EndTime"` - } `json:"Period"` - NE struct { - NEName string `json:"NEName"` - RmUID string `json:"rmUID"` - NeType string `json:"NeType"` - KPIs []struct { - KPIID string `json:"KPIID"` - Value int64 `json:"Value"` - Err string `json:"Err"` - } `json:"KPIs"` - } `json:"NE"` - } `json:"Task"` -} - -type GoldKpi struct { - // Id int `json:"-" xorm:"pk 'id' autoincr"` - Date string `json:"date" xorm:"date"` - Index int `json:"index"` - Granularity int8 `json:"granularity"` - StartTime string `json:"startTime"` - EndTime string `json:"endTime"` - NEName string `json:"neName" xorm:"ne_name"` - RmUid string `json:"rmUid" xorm:"rm_uid"` - NEType string `json:"neType" xorm:"ne_type"` - KpiId string `json:"kpiId" xorm:"kpi_id"` - Value int64 `json:"value"` - Error string `json:"error"` - Timestamp string `json:"timestamp"` -} - -type KpiData struct { - ID int `json:"id" xorm:"pk 'id' '<-' autoincr"` - NEType string `json:"neType" xorm:"ne_type"` - NEName string `json:"neName" xorm:"ne_name"` - RmUid string `json:"rmUid" xorm:"rm_uid"` - Date string `json:"date" xorm:"date"` - StartTime string `json:"startTime" xorm:"start_time"` - EndTime string `json:"endTime" xorm:"end_time"` - Index int `json:"index" xorm:"index"` - Granularity int64 `json:"granularity" xorm:"granularity"` - KPIValues []KPIVal `json:"kpiValues" xorm:"json 'kpi_values'"` - //CreatedAt int64 `json:"createdAt" xorm:"created 'created_at'"` - CreatedAt int64 `json:"createdAt" xorm:"'created_at'"` -} -type KPIVal struct { - KPIID string `json:"kpi_id" xorm:"kpi_id"` - Value int64 `json:"value" xorm:"value"` - Err string `json:"err" xorm:"err"` -} - -var ( - // performance management - PerformanceUri = config.DefaultUriPrefix + "/performanceManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/kpiReport/{index}" - MeasureTaskUri = config.DefaultUriPrefix + "/performanceManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/measureTask" - MeasureReportUri = config.DefaultUriPrefix + "/performanceManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/measureReport" - MeasureReportFmt = config.DefaultUriPrefix + "/performanceManagement/v1/elementType/%s/objectType/measureReport" - MeasurementUri = config.DefaultUriPrefix + "/performanceManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/measurement/{index}" - UriMeasureTask = config.DefaultUriPrefix + "/performanceManagement/{apiVersion}/measureTask/{netype}" - - // performance management - CustomPerformanceUri = config.UriPrefix + "/performanceManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/kpiReport/{index}" - CustomMeasureTaskUri = config.UriPrefix + "/performanceManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/measureTask" - CustomMeasureReportUri = config.UriPrefix + "/performanceManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/measureReport" - CustomMeasureReportFmt = config.UriPrefix + "/performanceManagement/v1/elementType/%s/objectType/measureReport" - CustomMeasurementUri = config.UriPrefix + "/performanceManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/measurement/{index}" - CustomUriMeasureTask = config.UriPrefix + "/performanceManagement/{apiVersion}/measureTask/{netype}" -) - -func GetDateFromTimeString(fmtString string, timeString string) string { - t, _ := time.ParseInLocation(fmtString, timeString, time.Local) - return t.Format("2006-01-02") -} - -func GetDateTimeFromTimeString(fmtString string, timeString string) string { - t, _ := time.ParseInLocation(fmtString, timeString, time.Local) - return t.Format(global.DateTime) -} - -// process KPI report post message from NFs -func PostKPIReportFromNF(w http.ResponseWriter, r *http.Request) { - log.Debug("PostKPIReportFromNF processing... ") - - apiVer := ctx.GetParam(r, "apiVersion") - if apiVer != global.ApiVersionV1 { - log.Error("Uri api version is invalid. apiVersion:", apiVer) - services.ResponseNotFound404UriNotExist(w, r) - return - } - - var kpiReport KpiReport - if err := ctx.ShouldBindJSON(r, &kpiReport); err != nil { - services.ResponseInternalServerError500ProcessError(w, err) - return - } - - kpiIndexStr := ctx.GetParam(r, "index") - - // insert kpi_report table, no session - saveKPIData(kpiReport, parse.Number(kpiIndexStr)) - saveKPIDataC(kpiReport, parse.Number(kpiIndexStr)) - - services.ResponseStatusOK204NoContent(w) -} - -// saveKPIData 存储KPI数据并推送到ws订阅组 -func saveKPIData(kpiReport KpiReport, index int64) int64 { - timestamp := kpiReport.Timestamp - taskPeriod := kpiReport.Task.Period - taskNe := kpiReport.Task.NE - taskNeKPIs := kpiReport.Task.NE.KPIs - // 时间数据处理 - receiverTime := date.ParseStrToDate(timestamp, date.YYYY_MM_DDTHH_MM_SSZ) - startTime := date.ParseStrToDate(taskPeriod.StartTime, date.YYYY_MM_DDTHH_MM_SSZ) - endTime := date.ParseStrToDate(taskPeriod.EndTime, date.YYYY_MM_DDTHH_MM_SSZ) - granularity := parse.Number(endTime.Sub(startTime).Seconds()) - // kpi data数据json - KpiValues := make([]map[string]any, 0) - for _, v := range taskNeKPIs { - KpiValues = append(KpiValues, map[string]any{ - "kpiId": v.KPIID, - "value": v.Value, - "err": v.Err, - }) - } - KpiValuesByte, _ := json.Marshal(KpiValues) - kpiData := neDataModel.KpiReport{ - NeType: taskNe.NeType, - NeName: taskNe.NEName, - RmUid: taskNe.RmUID, - Date: date.ParseDateToStr(receiverTime, "2006-01-02"), - StartTime: date.ParseDateToStr(startTime, "15:04:05"), - EndTime: date.ParseDateToStr(endTime, "15:04:05"), - Index: index, - Granularity: granularity, - KpiValues: string(KpiValuesByte), - CreatedAt: receiverTime.UnixMilli(), // 时间戳毫秒实际记录到秒 - } - insertId := neDataService.NewKpiReport.Insert(kpiData) - if insertId > 0 { - // 指标事件对象 - kpiEvent := map[string]any{ - "neType": kpiData.NeType, - "neName": kpiData.NeName, - "rmUID": kpiData.RmUid, - "startIndex": kpiData.Index, - "timeGroup": kpiData.CreatedAt, - // kip_id ... - } - for _, v := range taskNeKPIs { - kpiEvent[v.KPIID] = v.Value - } - - // 发送到匹配的网元 - neInfo := neService.NewNeInfo.FindByRmuid(kpiData.RmUid) - if neInfo.RmUID == kpiData.RmUid { - // 推送到ws订阅组 - wsService.NewWSSend.ByGroupID(fmt.Sprintf("%s_%s_%s", wsService.GROUP_KPI, neInfo.NeType, neInfo.NeId), kpiEvent) - if neInfo.NeType == "UPF" { - // 更新UPF总流量 - upValue := parse.Number(kpiEvent["UPF.03"]) - downValue := parse.Number(kpiEvent["UPF.06"]) - neDataService.NewKpiReport.UPFTodayFlowUpdate(neInfo.RmUID, upValue, downValue) - } - } - } - return insertId -} - -// saveKPIDataC 存储自定义KPI数据并推送到ws订阅组 -func saveKPIDataC(kpiReport KpiReport, index int64) int64 { - timestamp := kpiReport.Timestamp - taskPeriod := kpiReport.Task.Period - taskNe := kpiReport.Task.NE - taskNeKPIs := kpiReport.Task.NE.KPIs - // 时间数据处理 - receiverTime := date.ParseStrToDate(timestamp, date.YYYY_MM_DDTHH_MM_SSZ) - startTime := date.ParseStrToDate(taskPeriod.StartTime, date.YYYY_MM_DDTHH_MM_SSZ) - endTime := date.ParseStrToDate(taskPeriod.EndTime, date.YYYY_MM_DDTHH_MM_SSZ) - granularity := parse.Number(endTime.Sub(startTime).Seconds()) - // kpi data数据 - KpiValues := make([]map[string]any, 0) - kpiValMap := map[string]any{} - for _, v := range taskNeKPIs { - kpiValMap[v.KPIID] = v.Value - } - // 自定义kpiId数据 - cTitles := kpi_c_title.GetActiveKPICList(taskNe.NeType) - for _, v := range cTitles { - item := map[string]any{ - "kpiId": *v.KpiID, - "value": 0, - "err": "", - } - // 计算结果 - result, err := evaluate.CalcExpr(*v.Expression, kpiValMap) - if err != nil { - item["value"] = 0 - item["err"] = err.Error() - } else { - if *v.Unit == "%" && result > 100 { - result = 100 - } - if *v.Unit == "%" && result < 0 { - result = 0 - } - item["value"] = result - } - KpiValues = append(KpiValues, item) - } - - KpiValuesByte, _ := json.Marshal(KpiValues) - kpiData := neDataModel.KpiCReport{ - NeType: taskNe.NeType, - NeName: taskNe.NEName, - RmUid: taskNe.RmUID, - Date: date.ParseDateToStr(receiverTime, "2006-01-02"), - StartTime: date.ParseDateToStr(startTime, "15:04:05"), - EndTime: date.ParseDateToStr(endTime, "15:04:05"), - Index: index, - Granularity: granularity, - KpiValues: string(KpiValuesByte), - CreatedAt: receiverTime.UnixMilli(), // 时间戳毫秒实际记录到秒 - } - insertId := neDataService.NewKpiCReport.Insert(kpiData) - if insertId > 0 { - // 指标事件对象 - kpiEvent := map[string]any{ - "neType": kpiData.NeType, - "neName": kpiData.NeName, - "rmUID": kpiData.RmUid, - "startIndex": kpiData.Index, - "timeGroup": kpiData.CreatedAt, - // kip_id ... - } - for _, v := range KpiValues { - kpiEvent[fmt.Sprint(v["kpiId"])] = v["value"] - } - - // 发送到匹配的网元 - neInfo := neService.NewNeInfo.FindByRmuid(kpiData.RmUid) - if neInfo.RmUID == kpiData.RmUid { - // 推送自定义KPI到ws订阅组 - wsService.NewWSSend.ByGroupID(fmt.Sprintf("%s_%s_%s", wsService.GROUP_KPI_C, neInfo.NeType, neInfo.NeId), kpiEvent) - } - } - return insertId -} - -// process KPI report post message from NFs 旧版 -func PostKPIReportFromNFOld(w http.ResponseWriter, r *http.Request) { - log.Debug("PostKPIReportFromNF processing... ") - - vars := mux.Vars(r) - apiVer := vars["apiVersion"] - if apiVer != global.ApiVersionV1 { - log.Error("Uri api version is invalid. apiVersion:", apiVer) - services.ResponseNotFound404UriNotExist(w, r) - return - } - - // body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen)) - body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen)) - if err != nil { - log.Error("Faile to io.ReadAll: ", err) - services.ResponseNotFound404UriNotExist(w, r) - return - } - //log.Trace("Request body:", string(body)) - kpiReport := new(KpiReport) - _ = json.Unmarshal(body, &kpiReport) - //log.Trace("kpiReport:", kpiReport) - - layout := time.RFC3339Nano - //kpiDate := GetDateFromTimeString(layout, kpiReport.Task.Period.StartTime) - kpiIndex, _ := strconv.Atoi(vars["index"]) - startTime := global.GetFmtTimeString(layout, kpiReport.Task.Period.StartTime, time.DateTime) - endTime := global.GetFmtTimeString(layout, kpiReport.Task.Period.EndTime, time.DateTime) - // get time granularity from startTime and endTime - seconds, _ := global.GetSecondDuration(startTime, endTime) - var granularity int64 = 60 - if seconds != 0 && seconds <= math.MaxInt8 && seconds >= math.MinInt8 { - granularity = int64(seconds) - } - - // insert into new kpi_report_xxx table - kpiData := new(KpiData) - kpiData.Date = startTime - kpiData.Index = kpiIndex - //stime, _ := time.ParseInLocation(time.RFC3339Nano, kpiReport.Task.Period.StartTime, time.Local) - //etime, _ := time.ParseInLocation(time.RFC3339Nano, kpiReport.Task.Period.EndTime, time.Local) - kpiData.StartTime = startTime - kpiData.EndTime = endTime - kpiData.Granularity = granularity - kpiData.NEName = kpiReport.Task.NE.NEName - kpiData.NEType = kpiReport.Task.NE.NeType - kpiData.RmUid = kpiReport.Task.NE.RmUID - kpiVal := new(KPIVal) - kpiData.CreatedAt = time.Now().UnixMilli() - - // 黄金指标事件对象 - kpiEvent := map[string]any{ - // kip_id ... - "neType": kpiReport.Task.NE.NeType, - "neName": kpiReport.Task.NE.NEName, - "rmUID": kpiReport.Task.NE.RmUID, - "startIndex": kpiIndex, - "timeGroup": kpiData.CreatedAt, - } - - // for custom kpi - kpiValMap := map[string]any{} - for _, k := range kpiReport.Task.NE.KPIs { - kpiEvent[k.KPIID] = k.Value // kip_id - - kpiVal.KPIID = k.KPIID - kpiVal.Value = int64(k.Value) - kpiVal.Err = k.Err - kpiData.KPIValues = append(kpiData.KPIValues, *kpiVal) - kpiValMap[k.KPIID] = k.Value - } - kpiValMap["granularity"] = kpiData.Granularity - - // insert kpi_report table, no session - tableName := "kpi_report_" + strings.ToLower(kpiReport.Task.NE.NeType) - // affected, err := xEngine.Table(tableName).Insert(kpiData) - tx := db.DB("").Table(tableName).Create(kpiData) - if tx.Error != nil && tx.RowsAffected <= 0 { - log.Errorf("Failed to insert %s:%v", tableName, err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - - report := kpi_c_report.KpiCReport{ - NeType: &kpiData.NEType, - NeName: &kpiData.NEName, - RmUID: &kpiData.RmUid, - Date: kpiData.Date, - StartTime: &kpiData.StartTime, - EndTime: &kpiData.EndTime, - Index: int64(kpiData.Index), - Granularity: &kpiData.Granularity, - } - - // 发送到匹配的网元 - neInfo := neService.NewNeInfo.FindByRmuid(kpiData.RmUid) - // custom kpi report to FE - kpiCEvent := map[string]any{ - // kip_id ... - "neType": kpiData.NEType, - "neId": neInfo.NeId, - "neName": kpiData.NEName, - "rmUID": kpiData.RmUid, - "startIndex": kpiData.Index, - "timeGroup": kpiData.Date[:10] + " " + kpiData.EndTime, - "createdAt": kpiData.CreatedAt, - "granularity": kpiData.Granularity, - } - // kpiCList := kpi_c_title.GetActiveKPICList(kpiData.NEType) - // for _, k := range kpiCList { - // result, err := evaluate.CalcExpr(*k.Expression, kpiValMap) - // kpiCVal := new(kpi_c_report.KpiCVal) - // kpiCVal.KPIID = *k.KpiID - // if err != nil { - // kpiCVal.Value = 0.0 - // kpiCVal.Err = err.Error() - // } else { - // kpiCVal.Value = result - // } - - // report.KpiValues = append(report.KpiValues, *kpiCVal) - - // // set KPIC event kpiid and value - // kpiCEvent[kpiCVal.KPIID] = kpiCVal.Value - // } - - // KPI自定义指标入库 - kpi_c_report.InsertKpiCReport(kpiData.NEType, report) - - if neInfo.RmUID == kpiData.RmUid { - // 推送到ws订阅组 - 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) - } - - services.ResponseStatusOK204NoContent(w) -} - -// type MeasureTask struct { -// Tasks []Task `json:"Tasks"` -// NotifyUrl string `json:"NotifyUrl"` /* "http://xEngine.xEngine.xEngine.x:xxxx/api/rest/performanceManagement/v1/elementType/smf/objectType/measureReport */ -// } -type ScheduleJ struct { - Type string `json:"Type"` - Days []int `json:"Days"` -} - -type Period struct { - Start string `json:"Start"` - End string `json:"End"` -} -type Task struct { - Id int `json:"Id"` - - StartTime string `json:"StartTime"` - EndTime string `json:"EndTime"` - - Schedule struct { - Type string `json:"Type"` // 计划类型:Weekly/Monthly, 如果type为"", 则任务以StartTime和EndTime为条件进行统计, 否则以Shedule方式进行 - Days []int `json:"Days"` // Weekly: [0,1,...,5,6] 星期日为0, Monthly: [1,2,3,...,30,31] - Periods []Period `json:"Periods"` - /* - Periods []struct { - Start string `json:"Start"` // 零点或者零点加测量粒度的整数倍 - End string `json:"End"` //零点加测量粒度的整数倍 - } `json:"Periods"` - */ - } `json:"Schedule"` - - GranulOption string `json:"GranulOption"` // 测量粒度选项:15M/30M/60M/24H - KPISet []KpiSetJ `json:"KPISet"` - /* - KPISet []struct { - Code string `json:"Code"` // 统计编码 如:SMFHA01 - KPIs []string `json:"KPIs` // 指标项集合 ["SMF.AttCreatePduSession", "SMF.AttCreatePduSession._Dnn"] - } `json:"KPISet"` - */ -} -type KpiSetJ struct { - Code string `json:"Code"` // 统计编码 如:SMFHA01 - KPIs []string `json:"KPIs"` // 指标项集合 ["SMF.AttCreatePduSession", "SMF.AttCreatePduSession._Dnn"] -} - -type MeasureTask struct { - Id int `json:"id" xorm:"pk 'id' autoincr"` - NeType string `json:"neType" xorm:"ne_type"` - NeIds []string `json:"neIds" xorm:"ne_ids"` - KpiSet []KpiSetJ `json:"KPISet" xorm:"kpi_set"` - StartTime string `json:"startTime" xorm:"start_time"` - EndTime string `json:"endTime" xorm:"end_time"` - Periods []Period `json:"Periods" xorm:"periods"` - Schedule []ScheduleJ `json:"Schedule" xorm:"schedule"` - GranulOption string `json:"granulOption" xorm:"granul_option"` - Status string `json:"status" xorm:"status"` - AccountID string `json:"accountId" xorm:"account_id"` - Comment string `json:"comment" xorm:"comment"` - CreateTime string `json:"createTime" xorm:"create_time"` - UpdateTime string `json:"updateTime" xorm:"update_time"` - DeleteTime string `json:"deleteTime" xorm:"delete_time"` - - Tasks []Task `json:"Tasks"` - NotifyUrl string `json:"NotifyUrl"` /* "http://xEngine.xEngine.xEngine.x:xxxx/api/rest/performanceManagement/v1/elementType/smf/objectType/measureReport */ -} -type MeasureReport struct { - Id int `json:"Id"` - TimeStamp string `json:"TimeStamp"` - NeName string `json:"NeName"` - RmUID string `json:"rmUID"` - NeType string `json:"NeType"` - - Report struct { - Period struct { - StartTime string `json:"StartTime"` - EndTime string `json:"EndTime"` - } `json:"Period"` - - Datas []struct { - Code string `json:"Code"` // 统计编码 如:SMFHA01 - KPIs []struct { - KPIID string `json:"KPIID"` // 指标项, 如: SMF.AttCreatePduSession._Dnn - KPIValues []struct { - Name string `json:"Name"` // 单个的写"Total", 或者指标项有多个测量项,如Dnn的名称写对应的Dnn"cmnet"/"ims" - Value int64 `json:"Value"` - } `json:"KPIValues"` - } `json:"KPIs"` - } `json:"Datas"` - } `json:"Report"` -} - -func GetMeasureTask(taskId int) (*MeasureTask, error) { - log.Debug("GetMeasureTask processing... ") - - measureTask := new(MeasureTask) - tx := db.DB("").Table("measure_task").Where("id=?", taskId).Find(measureTask) - if tx.Error != nil { - log.Error("Failed to get table measure_task from database:", tx.Error) - - return nil, tx.Error - } - - log.Debug("Measure Task:", measureTask) - return measureTask, nil -} - -func XormGetActiveMeasureTask(measureTasks *[]MeasureTask) (*[]MeasureTask, error) { - log.Debug("XormGetActiveMeasureTask processing... ") - tx := db.DB("").Table("measure_task").Where("status='Active'").Find(measureTasks) - if tx.Error != nil { - log.Error("Failed to get table measure_task:", tx.Error) - return nil, tx.Error - } - - log.Debug("measureTasks:", measureTasks) - return measureTasks, nil -} - -type MeasureData struct { - // Id int `json:"id" xorm:"pk 'id' autoincr"` - Id int `json:"id" xorm:"-"` - Date string `json:"date" xorm:"date"` - TaskId int `json:"taskId"` - NeType string `json:"neType" xorm:"ne_type"` - NeName string `json:"neName" xorm:"ne_name"` - RmUid string `json:"rmUid" xorm:"rm_uid"` - GranulOption string `json:"granulOption" xorm:"granul_option"` - StartTime string `json:"startTime"` - EndTime string `json:"endTime"` - KpiCode string `json:"kpiCode" xorm:"kpi_code"` - KpiId string `json:"kpiId" xorm:"kpi_id"` - KpiExt string `json:"kpiExt" xorm:"kpi_ext"` - Value int64 `json:"value"` - Timestamp string `json:"timestamp"` -} - -// process measure report from NFs -func PostMeasureReportFromNF(w http.ResponseWriter, r *http.Request) { - log.Debug("PostMeasureReportFromNF processing... ") - - // vars := mux.Vars(r) - // neType := vars["elementTypeValue"] - vars := mux.Vars(r) - apiVer := vars["apiVersion"] - if apiVer != global.ApiVersionV1 { - log.Error("Uri api version is invalid. apiVersion:", apiVer) - services.ResponseNotFound404UriNotExist(w, r) - return - } - - // body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen)) - body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen)) - if err != nil { - log.Error("Faile to io.ReadAll: ", err) - services.ResponseNotFound404UriNotExist(w, r) - return - } - log.Debug("Request body:", string(body)) - measureReport := new(MeasureReport) - _ = json.Unmarshal(body, &measureReport) - log.Debug("measureReport:", measureReport) - - measureData := new(MeasureData) - layout := global.DateTime - measureData.Date = GetDateFromTimeString(layout, measureReport.Report.Period.StartTime) - measureData.TaskId = measureReport.Id - measureData.StartTime = measureReport.Report.Period.StartTime - measureData.EndTime = measureReport.Report.Period.EndTime - measureData.NeType = measureReport.NeType - measureData.NeName = measureReport.NeName - measureData.RmUid = measureReport.RmUID - measureData.GranulOption, _ = dborm.XormGetSingleCol("measure_task", "granul_option", fmt.Sprintf("id=%d", measureReport.Id)) - t, _ := strconv.ParseInt(measureReport.TimeStamp, 10, 64) - timestamp := time.Unix(t, 0) - log.Debug("timestamp:", timestamp.Format(layout)) - measureData.Timestamp = timestamp.Format(layout) - log.Debug("Datas:", measureReport.Report.Datas) - for _, d := range measureReport.Report.Datas { - measureData.KpiCode = d.Code - - log.Debug("KPIs:", d.KPIs) - for _, k := range d.KPIs { - measureData.KpiId = k.KPIID - - log.Debug("KPIValues:", k.KPIValues) - if len(k.KPIValues) != 0 { - for _, v := range k.KPIValues { - measureData.KpiExt = v.Name - measureData.Value = v.Value - log.Debug("measureData:", measureData) - - err := db.DB("").Create(measureData).Error - if err != nil { - log.Error("Failed to insert measure_data:", err) - services.ResponseInternalServerError500DatabaseOperationFailed(w) - return - } - } - } else { - measureData.Value = 0 - log.Debug("measureData:", measureData) - - err := db.DB("").Create(measureData).Error - if err != nil { - log.Error("Failed to insert measure_data:", err) - services.ResponseInternalServerError500DatabaseOperationFailed(w) - return - } - } - } - } - - services.ResponseStatusOK204NoContent(w) -} - -func PostMeasureTaskToNF(w http.ResponseWriter, r *http.Request) { - log.Debug("PostMeasureTaskToNF processing... ") - - // _, err := services.CheckFrontValidRequest(w, r) - // if err != nil { - // log.Error("Request error:", err) - // return - // } - - vars := mux.Vars(r) - neType := vars["elementTypeValue"] - params := r.URL.Query() - taskIds := params["id"] - log.Debug("taskIds:", taskIds) - - var response *resty.Response - client := resty.New() - measureTask := new(MeasureTask) - measureTask.Tasks = make([]Task, 1) - for _, taskId := range taskIds { - id, _ := strconv.Atoi(taskId) - task, err := GetMeasureTask(id) - if err != nil { - log.Error("Failed to connect database: ", err) - services.ResponseInternalServerError500DatabaseOperationFailed(w) - return - } - log.Debug("Table Task:", task) - - measureTask.Tasks[0].Id = task.Id - measureTask.Tasks[0].StartTime = task.StartTime - measureTask.Tasks[0].EndTime = task.EndTime - // v := new(dborm.ScheduleJson) - // _ = json.Unmarshal(task.Schedule, v) - // measureTask.Task[0].Schedule.Type = v.Type - // measureTask.Task[0].Schedule.Days = v.Days - if len(task.Schedule) >= 1 { - measureTask.Tasks[0].Schedule.Type = task.Schedule[0].Type - measureTask.Tasks[0].Schedule.Days = task.Schedule[0].Days - } - //v := new(dborm.ScheduleJ) - //_ = json.Unmarshal(task.Schedule, v) - measureTask.Tasks[0].Schedule.Periods = task.Periods - measureTask.Tasks[0].GranulOption = task.GranulOption - - measureTask.Tasks[0].KPISet = task.KpiSet - ips, err := global.GetIps() - if err != nil { - log.Error("Failed to get local IP:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - log.Debug("ips:", ips) - - measureTask.NotifyUrl = global.SetNotifyUrl(ips[0], 33030, fmt.Sprintf(MeasureReportFmt, neType)) - log.Debug("Measure Task to NF:", measureTask) - - if len(task.NeIds) == 0 { - var neInfos []dborm.NeInfo - err := dborm.XormGetNeInfoByNeType(neType, &neInfos) - if err != nil { - log.Error("Failed to dborm.XormGetNeInfoByNeType:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - for _, neInfo := range neInfos { - task.NeIds = append(task.NeIds, neInfo.NeId) - } - } - - for _, neId := range task.NeIds { - var err error - neInfo, err := dborm.XormGetNeInfo(neType, neId) - if err != nil { - log.Error("Failed to dborm.XormGetNeInfo:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - if neInfo == nil { - err := fmt.Errorf("not found target NE neType=%s, neId=%s", neType, neId) - log.Error(err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - - requestURI2NF := fmt.Sprintf("http://%s:%v%s", neInfo.Ip, neInfo.Port, r.RequestURI) - log.Debug("requestURI2NF: POST ", requestURI2NF) - - switch task.Status { - case dborm.MeasureTaskStatusInactive: - body, _ := json.Marshal(measureTask) - log.Debug("body: ", string(body)) - - log.Debug("User-Agent: ", config.GetDefaultUserAgent()) - response, err = client.R(). - EnableTrace(). - SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}). - SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). - SetBody(body). - SetContentLength(true). - Post(requestURI2NF) - - if err != nil { - log.Error("Post to NF failed:", err) - services.ResponseInternalServerError500NFConnectRefused(w) - return - } - log.Debug("response info: ") - log.Debug("Status Code:", response.StatusCode()) - log.Debug("Status:", response.Status()) - log.Debug("Proto:", response.Proto()) - log.Debug("Time:", response.Time()) - log.Debug("Received At:", response.ReceivedAt()) - log.Debug("Size:", response.Size()) - - case dborm.MeasureTaskStatusSuspend: - body, _ := json.Marshal(measureTask) - log.Debug("body: ", string(body)) - response, err = client.R(). - EnableTrace(). - SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}). - SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). - SetBody(body). - SetContentLength(true). - Put(requestURI2NF) - - if err != nil { - log.Error("Put to NF failed:", err) - services.ResponseInternalServerError500NFConnectRefused(w) - return - } - default: - err = fmt.Errorf("measure task status must be inactive id=%d", id) - log.Error("Unable to active measure task:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - - log.Debug("StatusCode: ", response.StatusCode()) - switch response.StatusCode() { - case http.StatusOK, http.StatusCreated, http.StatusNoContent, http.StatusAccepted: - taskInfo := new(MeasureTask) - taskInfo.Status = dborm.MeasureTaskStatusActive - taskInfo.CreateTime = time.Now().Format(time.DateTime) - affected, err := dborm.XormUpdateTableById(id, dborm.TableNameMeasureTask, taskInfo) - if err != nil { - log.Error("dborm.XormUpdateTableById is failed:", err) - services.ResponseInternalServerError500DatabaseOperationFailed(w) - return - } else if affected <= 0 { - log.Info("Not record affected in measure_task") - } - default: - log.Error("NF return failure to active measure task") - if response != nil { - log.Info("response body:", string(response.Body())) - services.TransportResponse(w, response.StatusCode(), response.Body()) - return - } else { - err = fmt.Errorf("failed to active measure task, NF return error status=%v", response.Status()) - log.Error("Unable to active measure task:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - } - } - } - - services.ResponseStatusOK204NoContent(w) -} - -func PutMeasureTaskToNF(w http.ResponseWriter, r *http.Request) { - - services.ResponseStatusOK200Null(w) -} - -func DeleteMeasureTaskToNF(w http.ResponseWriter, r *http.Request) { - log.Debug("DeleteMeasureTaskToNF processing... ") - - // _, err := services.CheckFrontValidRequest(w, r) - // if err != nil { - // log.Error("Request error:", err) - // return - // } - - vars := mux.Vars(r) - neType := vars["elementTypeValue"] - params := r.URL.Query() - taskIds := params["id"] - log.Debug("taskIds:", taskIds) - - var response *resty.Response - respMsg := make(map[string]interface{}) - for _, taskId := range taskIds { - id, _ := strconv.Atoi(taskId) - task, err := GetMeasureTask(id) - if err != nil { - log.Error("Failed to connect database: ", err) - services.ResponseInternalServerError500DatabaseOperationFailed(w) - return - } - log.Debug("Measure Task:", task) - - if len(task.NeIds) == 0 { - var neInfos []dborm.NeInfo - err := dborm.XormGetNeInfoByNeType(neType, &neInfos) - if err != nil { - log.Error("Failed to dborm.XormGetNeInfoByNeType:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - for _, neInfo := range neInfos { - task.NeIds = append(task.NeIds, neInfo.NeId) - } - } - log.Debug("neIds:", task.NeIds) - if len(task.NeIds) == 0 { - log.Warn("Not found target NE in the measure task") - taskInfo := new(MeasureTask) - taskInfo.Status = dborm.MeasureTaskStatusDeleted - affected, err := dborm.XormUpdateTableById(id, dborm.TableNameMeasureTask, taskInfo) - if err != nil { - log.Error("dborm.XormUpdateTableById is failed:", err) - services.ResponseInternalServerError500DatabaseOperationFailed(w) - return - } else if affected <= 0 { - log.Info("Not record affected in measure_task") - } - services.ResponseStatusOK204NoContent(w) - return - } - - for _, neId := range task.NeIds { - var err error - neInfo, err := dborm.XormGetNeInfo(neType, neId) - if err != nil { - log.Error("dborm.XormGetNeInfo is failed:", err) - services.ResponseInternalServerError500DatabaseOperationFailed(w) - return - } - if neInfo != nil { - requestURI2NF := fmt.Sprintf("http://%s:%v%s", neInfo.Ip, neInfo.Port, r.RequestURI) - log.Debug("requestURI2NF: DELETE ", requestURI2NF) - client := resty.New() - response, err = client.R(). - EnableTrace(). - SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}). - SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). - Delete(requestURI2NF) - if err != nil { - // to avoid can't delete the task for abnormal NF - log.Error("Failed to resty delete:", err) - taskInfo := new(MeasureTask) - taskInfo.Status = dborm.MeasureTaskStatusDeleted - affected, err := dborm.XormUpdateTableById(id, dborm.TableNameMeasureTask, taskInfo) - if err != nil { - log.Error("dborm.XormUpdateTableById is failed:", err) - services.ResponseInternalServerError500DatabaseOperationFailed(w) - return - } else if affected <= 0 { - log.Info("Not record affected in measure_task") - } - services.ResponseStatusOK204NoContent(w) - return - } - - log.Info("StatusCode: ", response.StatusCode()) - switch response.StatusCode() { - case http.StatusOK, http.StatusCreated, http.StatusNoContent, http.StatusAccepted: - taskInfo := new(MeasureTask) - taskInfo.Status = dborm.MeasureTaskStatusDeleted - affected, err := dborm.XormUpdateTableById(id, dborm.TableNameMeasureTask, taskInfo) - if err != nil { - log.Error("dborm.XormUpdateTableById is failed:", err) - services.ResponseInternalServerError500DatabaseOperationFailed(w) - return - } else if affected <= 0 { - log.Infof("Not record affected in measure_task") - } - services.ResponseStatusOK204NoContent(w) - return - default: - log.Info("response body:", string(response.Body())) - body := new(map[string]interface{}) - _ = json.Unmarshal(response.Body(), &body) - respMsg["error"] = body - } - } else { - taskInfo := new(MeasureTask) - taskInfo.Status = dborm.MeasureTaskStatusDeleted - affected, err := dborm.XormUpdateTableById(id, dborm.TableNameMeasureTask, taskInfo) - if err != nil { - log.Error("dborm.XormUpdateTableById is failed:", err) - services.ResponseInternalServerError500DatabaseOperationFailed(w) - return - } else if affected <= 0 { - log.Info("Not record affected in measure_task") - } - services.ResponseStatusOK204NoContent(w) - return - } - } - } - - services.ResponseWithJson(w, response.StatusCode(), respMsg) -} - -func PatchMeasureTaskToNF(w http.ResponseWriter, r *http.Request) { - log.Debug("PatchMeasureTaskToNF processing... ") - - // _, err := services.CheckFrontValidRequest(w, r) - // if err != nil { - // log.Error("Request error:", err) - // return - // } - - vars := mux.Vars(r) - neType := vars["elementTypeValue"] - params := r.URL.Query() - taskIds := params["id"] - log.Debug("taskIds:", taskIds) - - var response *resty.Response - respMsg := make(map[string]interface{}) - for _, taskId := range taskIds { - id, _ := strconv.Atoi(taskId) - task, err := GetMeasureTask(id) - if err != nil { - log.Error("Failed to connect database: ", err) - services.ResponseInternalServerError500DatabaseOperationFailed(w) - return - } - log.Debug("Measure Task:", task) - - // for neType - if len(task.NeIds) == 0 { - var neInfos []dborm.NeInfo - err := dborm.XormGetNeInfoByNeType(neType, &neInfos) - if err != nil { - log.Error("Failed to dborm.XormGetNeInfoByNeType:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - for _, neInfo := range neInfos { - task.NeIds = append(task.NeIds, neInfo.NeId) - } - } - - if len(task.NeIds) == 0 { - taskInfo := new(MeasureTask) - taskInfo.Status = dborm.MeasureTaskStatusInactive - affected, err := dborm.XormUpdateTableById(id, dborm.TableNameMeasureTask, taskInfo) - if err != nil { - log.Error("dborm.XormUpdateTableById is failed:", err) - services.ResponseInternalServerError500DatabaseOperationFailed(w) - return - } else if affected <= 0 { - log.Info("Not record affected in measure_task") - } - services.ResponseStatusOK204NoContent(w) - return - } - - for _, neId := range task.NeIds { - var err error - neInfo, err := dborm.XormGetNeInfo(neType, neId) - if err != nil { - log.Error("dborm.XormGetNeInfo is failed:", err) - services.ResponseInternalServerError500DatabaseOperationFailed(w) - return - } - if neInfo == nil { - taskInfo := new(MeasureTask) - taskInfo.Status = dborm.MeasureTaskStatusInactive - affected, err := dborm.XormUpdateTableById(id, dborm.TableNameMeasureTask, taskInfo) - if err != nil { - log.Error("dborm.XormUpdateTableById is failed:", err) - services.ResponseInternalServerError500DatabaseOperationFailed(w) - return - } else if affected <= 0 { - log.Info("Not record affected in measure_task") - } - services.ResponseStatusOK204NoContent(w) - //services.ResponseInternalServerError500ProcessError(w, em) - return - } - - requestURI2NF := fmt.Sprintf("http://%s:%v%s", neInfo.Ip, neInfo.Port, r.RequestURI) - log.Debug("requestURI2NF: PATCH ", requestURI2NF) - client := resty.New() - response, err = client.R(). - EnableTrace(). - SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}). - SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). - Patch(requestURI2NF) - if err != nil { - log.Error("Patch to NF failed:", err) - services.ResponseInternalServerError500NFConnectRefused(w) - return - } - - log.Debug("StatusCode: ", response.StatusCode()) - switch response.StatusCode() { - case http.StatusOK, http.StatusCreated, http.StatusNoContent, http.StatusAccepted: - taskInfo := new(MeasureTask) - taskInfo.Status = dborm.MeasureTaskStatusInactive - affected, err := dborm.XormUpdateTableById(id, dborm.TableNameMeasureTask, taskInfo) - if err != nil { - log.Error("dborm.XormUpdateTableById is failed:", err) - services.ResponseInternalServerError500DatabaseOperationFailed(w) - return - } else if affected <= 0 { - log.Info("Not record affected in measure_task") - } - default: - log.Debug("response body:", string(response.Body())) - body := new(map[string]interface{}) - _ = json.Unmarshal(response.Body(), &body) - respMsg["error"] = body - } - } - } - - services.ResponseWithJson(w, response.StatusCode(), respMsg) -} - -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 - TimeZone string `json:"TimeZone"` - StartTime string `json:"StartTime"` - - Datas []Data `json:"Datas"` -} - -type KPIValue struct { - Name string `json:"Name"` // 单个的写"Total", 或者指标项有多个测量项,如Dnn的名称写对应的Dnn"cmnet"/"ims" - Value int64 `json:"Value"` -} - -type KPI struct { - KPIID string `json:"KPIID"` // 指标项, 如: SMF.AttCreatePduSession._Dnn - KPIValues []KPIValue `json:"KPIValues"` -} - -type Data struct { - ObjectType string `json:"ObjectType"` // 网络资源类别名称, Pm指标项列表中为空间粒度 如:SmfFunction - KPIs []KPI `json:"KPIs"` // 指标项, 如: SMF.AttCreatePduSession._Dnn -} - -// process measurement post message from NFs -func PostMeasurementFromNF(w http.ResponseWriter, r *http.Request) { - log.Debug("PostMeasurementFromNF processing... ") - - vars := mux.Vars(r) - apiVer := vars["apiVersion"] - if apiVer != global.ApiVersionV1 { - log.Error("Uri api version is invalid. apiVersion:", apiVer) - services.ResponseNotFound404UriNotExist(w, r) - return - } - - body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen)) - if err != nil { - log.Error("Faile to io.ReadAll: ", err) - services.ResponseNotFound404UriNotExist(w, r) - return - } - log.Debug("Request body:", string(body)) - // measurement := new(dborm.NorthboundPm) - measurement := new(dborm.NorthboundPm) - _ = json.Unmarshal(body, &measurement) - log.Debug("measurement:", measurement) - - // layout := global.DateTime - layout := time.RFC3339 - measurement.Date = GetDateFromTimeString(layout, measurement.StartTime) - measurement.StartTime = GetDateTimeFromTimeString(layout, measurement.StartTime) - // tx := db.DB("").Table("nbi_pm").Create(measurement) - // if tx.Error != nil && tx.RowsAffected <= 0 { - // log.Error("Failed to insert nbi_pm:", err) - // services.ResponseInternalServerError500DatabaseOperationFailed(w) - // return - // } - - services.ResponseStatusOK204NoContent(w) -} - -// get measurement message from NFs -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 { - log.Error("Uri api version is invalid. apiVersion:", apiVer) - services.ResponseNotFound404UriNotExist(w, r) - return - } - - neType := vars["elementTypeValue"] - if neType == "" { - log.Error("elementTypeValue is null.") - services.ResponseNotFound404UriNotExist(w, r) - return - } - params := r.URL.Query() - neIds := params["ne_id"] - if len(neIds) == 0 { - log.Error("ne_id NOT FOUND") - services.ResponseBadRequest400WrongParamValue(w) - return - } - 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) - services.ResponseInternalServerError500DatabaseOperationFailed(w) - return - } - - requestURI2NF := fmt.Sprintf("http://%s:%v%s", neInfo.Ip, neInfo.Port, r.RequestURI) - log.Debug("requestURI2NF: GET ", requestURI2NF) - - client := resty.New() - response, err := client.R(). - EnableTrace(). - SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}). - SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). - Get(requestURI2NF) - if err != nil { - log.Error("Failed to Get from NF:", err) - services.ResponseInternalServerError500NFConnectRefused(w) - return - } - - respMsg := make(map[string]interface{}) - 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) - - layout := time.RFC3339 - measurement.Date = GetDateFromTimeString(layout, measurement.StartTime) - measurement.StartTime = GetDateTimeFromTimeString(layout, measurement.StartTime) - // tx := db.DB("").Table("nbi_pm").Create(measurement) - // if tx.Error != nil && tx.RowsAffected <= 0 { - // log.Error("Failed to insert nbi_pm:", err) - // services.ResponseInternalServerError500DatabaseOperationFailed(w) - // return - // } - default: - log.Debug("response body:", string(response.Body())) - body := new(map[string]interface{}) - _ = json.Unmarshal(response.Body(), &body) - respMsg["error"] = body - } - - services.ResponseWithJson(w, response.StatusCode(), respMsg) -} diff --git a/features/pm/service.go b/features/pm/service.go deleted file mode 100644 index ff2a6539..00000000 --- a/features/pm/service.go +++ /dev/null @@ -1,19 +0,0 @@ -package pm - -import ( - "be.ems/features/pm/kpi_c_report" - "be.ems/features/pm/kpi_c_title" - "be.ems/lib/log" - "github.com/gin-gonic/gin" -) - -func InitSubServiceRoute(r *gin.Engine) { - log.Info("======init PM group gin.Engine") - - pmGroup := r.Group("/pm") - // register sub modules routes - kpi_c_title.Register(pmGroup) - kpi_c_report.Register(pmGroup) - - // return featuresGroup -} diff --git a/features/security/account.go b/features/security/account.go deleted file mode 100644 index 919b2bc7..00000000 --- a/features/security/account.go +++ /dev/null @@ -1,176 +0,0 @@ -package security - -import ( - "encoding/json" - "io" - "net/http" - "strings" - - "be.ems/lib/config" - "be.ems/lib/dborm" - "be.ems/lib/global" - "be.ems/lib/log" - "be.ems/lib/oauth" - "be.ems/lib/services" -) - -var ( - UriOauthToken = config.DefaultUriPrefix + "/securityManagement/{apiVersion}/{elementTypeValue}/token" - UriOauthHandshake = config.DefaultUriPrefix + "/securityManagement/{apiVersion}/{elementTypeValue}/handshake" - - CustomUriOauthToken = config.UriPrefix + "/securityManagement/{apiVersion}/{elementTypeValue}/token" - CustomUriOauthHandshake = config.UriPrefix + "/securityManagement/{apiVersion}/{elementTypeValue}/handshake" -) - -func LoginFromOMC(w http.ResponseWriter, r *http.Request) { - log.Info("LoginFromOMC processing... ") - - body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen)) //io.LimitReader限制大小 - if err != nil { - log.Error("Failed to ReadAll:", err) - services.ResponseNotFound404UriNotExist(w, r) - return - } - - // check media type(content type) only support "application/json" - if !services.IsVallidContentType(r, config.GetYamlConfig().OMC.CheckContentType) { - log.Debug("Invalid Content-Type") - services.ResponseUnsupportedMediaType415(w) - return - } - - // // check extend uri, response 404 - // if !IsValidOAuthUri(r) { - // log.Debug("Uri is invalid") - // services.ResponseNotFound404UriNotExist(w, r) - // return - // } - - // Error process .... - // response 400-7 - if !json.Valid([]byte(body)) { - log.Error("Invalid Json Format") - services.ResponseBadRequest400InvalidJson(w) - return - } - - var oAuthBody oauth.OAuthBody - _ = json.Unmarshal(body, &oAuthBody) //转为json - //log.Debug("body:", string(body), "oAuthBody:", oAuthBody) - - defer r.Body.Close() - // response 400-5 - if oauth.IsWrongOAuthInfo(oAuthBody) { - log.Error("Wrong parameter value") - services.ResponseBadRequest400WrongParamValue(w) - return - } - /* - if oauth.IsValidOAuthInfo(oAuthBody) { - plist := config.GetPermissionFromConfig(oAuthBody.UserName, oAuthBody.GrantType) - log.Debug("Permission list:", plist) - - token := globalSession.NewSession(w, r, plist) - services.ResponseStatusOK200Login(w, token) - } else { - // response 400-4 - log.Debug("Authentication failed, mismatch user or password") - - services.ResponseBadRequest400IncorrectLogin(w) - } - */ - - token := oauth.GenRandToken("omc") // Generate new token to session ID - sourceAddr := r.RemoteAddr[:strings.Index(r.RemoteAddr, ":")] - affected, err := dborm.XormInsertSession(oAuthBody.UserName, sourceAddr, token, - config.GetExpiresFromConfig(), config.GetYamlConfig().Auth.Session) - if err != nil { - log.Error("Failed to XormInsertSession:", err) - if affected == -1 { - services.ResponseForbidden403MultiLoginNotAllowed(w) - } else { - services.ResponseBadRequest400IncorrectLogin(w) - } - - return - } - - services.ResponseBadRequest400IncorrectLogin(w) -} - -func LogoutFromOMC(w http.ResponseWriter, r *http.Request) { - log.Info("LogoutFromOMC processing... ") - - // token, err := services.CheckFrontValidRequest(w, r) - // if err != nil { - // log.Error("Request error:", err) - // return - // } - // // check media type(content type) only support "application/json" - // if services.IsVallidContentType(r, config.GetYamlConfig().OMC.CheckContentType) == false { - // log.Error("Invalid Content-Type") - // services.ResponseUnsupportedMediaType415(w) - // return - // } - - // // check extend uri, response 404 - // if !services.IsValidOAuthUri(r) { - // log.Error("Uri is invalid") - // services.ResponseNotFound404UriNotExist(w, r) - // return - // } - - // // error processing ... - // // 401-1 response - // token, ret := oauth.IsCarriedToken(r) - // if ret == false { - // log.Error("AccessToken is not carried") - // services.ResponseUnauthorized401AccessTokenNotCarried(w) - // return - // } - - // se, err := dborm.XormLogoutUpdateSession(token) - // if err != nil { - // log.Error("Uri is invalid") - // services.ResponseNotFound404UriNotExist(w, r) - // return - // } - // 清除缓存用户信息 - // account.ClearLoginUser(se.AccountId) - services.ResponseStatusOK200Null(w) -} - -func HandshakeFromOMC(w http.ResponseWriter, r *http.Request) { - log.Info("HandshakeFromOMC processing... ") - - // check media type(content type) only support "application/json" - if !services.IsVallidContentType(r, config.GetYamlConfig().OMC.CheckContentType) { - log.Debug("Invalid Content-Type") - services.ResponseUnsupportedMediaType415(w) - return - } - - // check extend uri, response 404 - if !services.IsValidOAuthUri(r) { - log.Error("Uri is invalid") - services.ResponseNotFound404UriNotExist(w, r) - return - } - - // error processing ... - // 401-1 response - token, ret := oauth.IsCarriedToken(r) - if !ret { - log.Error("AccessToken is not carried") - services.ResponseUnauthorized401AccessTokenNotCarried(w) - return - } - - _, err := dborm.XormUpdateSessionShakeTime(token) - if err != nil { - log.Error("Uri is invalid") - services.ResponseNotFound404UriNotExist(w, r) - return - } - services.ResponseStatusOK200Null(w) -} diff --git a/features/sm/backup.go b/features/sm/backup.go deleted file mode 100644 index 6795c10c..00000000 --- a/features/sm/backup.go +++ /dev/null @@ -1,45 +0,0 @@ -package sm - -import ( - "net/http" - "time" - - "be.ems/lib/config" - "be.ems/lib/log" - "be.ems/lib/services" - _ "github.com/go-sql-driver/mysql" -) - -var ( - // Get OMC local time - UriOMCLocalTime = config.DefaultUriPrefix + "/systemManagement/{apiVersion}/elementType/OMC/objectType/time" - - CustomUriOMCLocalTime = config.UriPrefix + "/systemManagement/{apiVersion}/elementType/OMC/objectType/time" -) - -type OMCLocalTime struct { - Timestamp int64 `json:"timestamp"` // 时间戳 (单位:毫秒) - TimeZone int `json:"timeZone"` // 本地时区偏移(单位:秒) -} - -func GetOMCLocalTime(w http.ResponseWriter, r *http.Request) { - log.Debug("GetOMCLocalTime processing... ") - - // _, err := services.CheckFrontValidRequest(w, r) - // if err != nil { - // log.Error("Http request error:", err) - // return - // } - - t := time.Now() - _, offset := t.Zone() - - localTime := OMCLocalTime{ - Timestamp: t.UnixMilli(), - TimeZone: offset, - } - response := services.DataResponse{ - Data: localTime, - } - services.ResponseWithJson(w, http.StatusOK, response) -} diff --git a/features/state/getstate.go b/features/state/getstate.go deleted file mode 100644 index 9e7519e3..00000000 --- a/features/state/getstate.go +++ /dev/null @@ -1,1012 +0,0 @@ -package state - -import ( - "encoding/json" - "fmt" - "net/http" - "os" - "strconv" - "strings" - "time" - - "github.com/go-resty/resty/v2" - "github.com/gorilla/mux" - "github.com/shirou/gopsutil/v4/net" - - "be.ems/lib/config" - "be.ems/lib/dborm" - "be.ems/lib/global" - "be.ems/lib/log" - "be.ems/lib/services" - cfg "be.ems/src/framework/config" - "be.ems/src/framework/constants" - "be.ems/src/framework/database/db" - "be.ems/src/framework/utils/parse" -) - -type CpuUsage struct { - NfCpuUsage uint16 `json:"nfCpuUsage"` - SysCpuUsage uint16 `json:"sysCpuUsage"` -} - -type MemUsage struct { - TotalMem uint32 `json:"totalMem"` - NfUsedMem uint32 `json:"nfUsedMem"` - SysMemUsage uint16 `json:"sysMemUsage"` -} - -type PartitionInfo struct { - Total uint32 `json:"total"` // MB - Used uint32 `json:"used"` // MB -} - -type DiskSpace struct { - PartitionNum uint8 `json:"partitionNum"` - PartitionInfo []PartitionInfo `json:"partitionInfo"` -} - -type HardwareInfo struct { - CPUs int `json:"cpus"` - Memory int `json:"memory"` -} - -type SysState struct { - HostName string `json:"hostName"` // linux命令: hostname - OsInfo string `json:"osInfo"` // linux命令: uname -a - DbInfo string `json:"dbInfo"` // 网元如果有db, 显示数据库名和版本信息, OMC: mysql --version - Version string `json:"version"` // 软件版本信息: 16.1.1 - IpAddr []string `json:"ipAddr"` // 网管的ipv4和ipv6列表 - Port uint16 `json:"port"` // 用于网管的port - Capability uint32 `json:"capability"` - SerialNum string `json:"serialNum"` - ExpiryDate string `json:"expiryDate"` - HardwareInfo HardwareInfo `json:"hardwareInfo"` - CpuUsage CpuUsage `json:"cpuUsage"` - MemUsage MemUsage `json:"memUsage"` - DiskSpace DiskSpace `json:"diskSpace"` - //Timestamp string `json:"timestamp"` -} - -type SystemState struct { - HostName string `json:"hostName"` // linux命令: hostname - OsInfo string `json:"osInfo"` // linux命令: uname -a - DbInfo string `json:"dbInfo"` // 网元如果有db, 显示数据库名和版本信息, OMC: mysql --version - Version string `json:"version"` // 软件版本信息: 16.1.1 - IpAddr []string `json:"ipAddr"` // 网管的ipv4和ipv6列表 - Port uint16 `json:"port"` // 用于网管的port - Capability uint32 `json:"capability"` - SerialNum string `json:"serialNum"` - ExpiryDate string `json:"expiryDate"` - HardwareInfo struct { - CPUs int `json:"cpus"` // 主机(裸机/虚拟机)的cpu个数 - Memory int `json:"memory"` // 主机(裸机/虚拟机): 配置的内存 - } `json:"hardwareInfo"` - CpuUsage struct { - NfCpuUsage uint16 `json:"nfCpuUsage"` - SysCpuUsage uint16 `json:"sysCpuUsage"` - } `json:"cpuUsage"` - MemUsage struct { - TotalMem uint32 `json:"totalMem"` - NfUsedMem uint32 `json:"nfUsedMem"` - SysMemUsage uint16 `json:"sysMemUsage"` - } `json:"memUsage"` - DiskSpace struct { - PartitionNum uint8 `json:"partitionNum"` - PartitionInfo []struct { - Total uint32 `json:"total"` // MB - Used uint32 `json:"used"` // MB - } `json:"partitionInfo"` - } `json:"diskSpace"` - //Timestamp string `json:"timestamp"` -} - -type SystemInfo struct { - NeType string `json:"neType" map:"neType, omitempty"` - NeId string `json:"neId" map:"neId, omitempty"` - HostName string `json:"hostName" map:"hostName, omitempty"` // linux命令: hostname - OsInfo string `json:"osInfo" map:"osInfo, omitempty"` // linux命令: uname -a - DbInfo string `json:"dbInfo" map:"dbInfo, omitempty"` // 网元如果有db, 显示数据库名和版本信息, OMC: mysql --version - Version string `json:"version" map:"version, omitempty"` // 软件版本信息: 16.1.1 - IpAddr string `json:"ipAddr" map:"ipAddr, omitempty"` // 网管的ipv4和ipv6列表 - Port uint16 `json:"port" map:"port, omitempty"` // 用于网管的port - CPUs int `json:"cpus" map:"cpus, omitempty"` - TotalMem int `json:"totalMem" map:"totalMem, omitempty"` - PvFlag string `json:"pvFlag" map:"pvFlag, omitempty"` - Status string `json:"status" map:"status, omitempty"` -} - -type LicenseInfo struct { - NeType string `json:"neType"` - NeId string `json:"neId"` - SerialNum string `json:"serialNum"` - Capability uint32 `json:"capability"` - CapUsed uint32 `json:"capUsed"` - FeatureEnabled []string `json:"featureEnabled"` - ExpiryDate string `json:"expiryDate"` -} - -type Response struct { - Data interface{} `json:"data"` -} - -var ( - UriSysState = config.DefaultUriPrefix + "/systemManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/systemState" - UriSysState2 = config.DefaultUriPrefix + "/systemManagement/{apiVersion}/{elementTypeValue}/systemState" - UriSysInfoAll = config.DefaultUriPrefix + "/systemManagement/{apiVersion}/sysInfo" - UriSysInfoOne = config.DefaultUriPrefix + "/systemManagement/{apiVersion}/sysInfo/{neType}/{neId}" - UriLicenseInfoAll = config.DefaultUriPrefix + "/systemManagement/{apiVersion}/licenseInfo" - UriLicenseInfoOne = config.DefaultUriPrefix + "/systemManagement/{apiVersion}/licenseInfo/{neType}/{neId}" - - CustomUriSysState = config.UriPrefix + "/systemManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/systemState" - CustomUriSysState2 = config.UriPrefix + "/systemManagement/{apiVersion}/{elementTypeValue}/systemState" - CustomUriSysInfoAll = config.UriPrefix + "/systemManagement/{apiVersion}/sysInfo" - CustomUriSysInfoOne = config.UriPrefix + "/systemManagement/{apiVersion}/sysInfo/{neType}/{neId}" - CustomUriLicenseInfoAll = config.UriPrefix + "/systemManagement/{apiVersion}/licenseInfo" - CustomUriLicenseInfoOne = config.UriPrefix + "/systemManagement/{apiVersion}/licenseInfo/{neType}/{neId}" -) - -var client = resty.New() - -func init() { - /* - client. - SetTimeout(10 * time.Second). - SetRetryCount(1). - SetRetryWaitTime(1 * time.Second). - SetRetryMaxWaitTime(2 * time.Second). - SetRetryAfter(func(client *resty.Client, resp *resty.Response) (time.Duration, error) { - return 0, errors.New("quota exceeded") - }) - */ - client. - SetTimeout(time.Duration(400 * time.Millisecond)) - // SetRetryCount(1). - // SetRetryWaitTime(time.Duration(1 * time.Second)). - // SetRetryMaxWaitTime(time.Duration(2 * time.Second)) - //client.SetTimeout(2 * time.Second) -} - -func NeStatusEnumToStr(intStatus int) string { - switch intStatus { - case 0: - return "active" - case 1: - return "offline" - case 2: - return "standby" - case 3: - return "maintain" - default: - return "unkown" - } -} - -// Get system state from NF/NFs -func GetOneLicenseInfoFromNF(w http.ResponseWriter, r *http.Request) { - log.Debug("GetOneLicenseInfoFromNF processing... ") - - data := make([]map[string]interface{}, 0) - - vars := mux.Vars(r) - neType := vars["neType"] - neId := vars["neId"] - if neType == "" || neId == "" { - services.ResponseNotFound404UriNotExist(w, r) - return - } - // token, err := services.CheckFrontValidRequest(w, r) - // if err != nil { - // log.Error("Request error:", err) - // return - // } - // log.Debug("AccessToken:", token) - - neInfo, err := dborm.XormGetNeInfo(neType, neId) - if err != nil { - log.Error("Failed to XormGetNeInfo:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } else if neInfo == nil { - err := global.ErrCMNotFoundTargetNE - log.Error(global.ErrCMNotFoundTargetNE) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - log.Trace("neInfo:", neInfo) - - //systemState := make(map[string]interface{}) - systemState := &SysState{} - var result map[string]interface{} - //sysInfo := &SystemInfo{} - omcNeTypeLower := "omc" - if config.GetYamlConfig().OMC.NeType != "" { - omcNeTypeLower = strings.ToLower(config.GetYamlConfig().OMC.NeType) - } - if neType != omcNeTypeLower { - log.Debugf("r.RemoteAddr: %s omcNeTypeLower: %s", r.RemoteAddr, omcNeTypeLower) - var requestURI2NF string - if config.GetYamlConfig().OMC.TestMode && strings.ToLower(neType) != "udm" { - var udmNEs []dborm.NeInfo - err := dborm.XormGetNeInfoByNeType("UDM", &udmNEs) - if err != nil { - log.Error("Get system state from NF is failed:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - if len(udmNEs) > 0 { - udmNe := udmNEs[0] - hostUri := fmt.Sprintf("http://%s:%v", udmNe.Ip, udmNe.Port) - requestURI2NF = fmt.Sprintf("%s/api/rest/systemManagement/v1/elementType/%s/objectType/systemState", - hostUri, strings.ToLower(udmNe.NeType)) - } - } else { - hostUri := fmt.Sprintf("http://%s:%v", neInfo.Ip, neInfo.Port) - requestURI2NF = fmt.Sprintf("%s/api/rest/systemManagement/v1/elementType/%s/objectType/systemState", - hostUri, strings.ToLower(neInfo.NeType)) - } - log.Debug("requestURI2NF:", requestURI2NF) - - resp, err := client.R(). - EnableTrace(). - SetHeaders(map[string]string{constants.HEADER_KEY: r.Header.Get(constants.HEADER_KEY)}). - // SetHeaders(map[string]string{"accessToken": token}). - SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}). - SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). - Get(requestURI2NF) - if err != nil { - log.Error("Failed to get system state:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } else { - log.Trace("resp.Body():", string(resp.Body())) - _ = json.Unmarshal(resp.Body(), &systemState) - - log.Trace("systemState:", systemState) - capUsed := config.TDatas[neInfo.NeType].CapUsed - log.Tracef("neInfo.NeType:%s capUsed: %v", capUsed) - licenseInfo := &LicenseInfo{ - NeType: neInfo.NeType, - NeId: neInfo.NeId, - SerialNum: systemState.SerialNum, - Capability: systemState.Capability, - CapUsed: capUsed, - FeatureEnabled: config.TDatas[neInfo.NeType].FeatureEnabled, - ExpiryDate: systemState.ExpiryDate, - } - //neItem := strings.ToUpper(neType) + "/" + neId - result, err = global.ToMap(*licenseInfo, "json") - if err != nil { - log.Warn("Failed to map:", err) - } - } - } else { - systemState := GetEMSState(neInfo.Ip) - licenseInfo := &LicenseInfo{ - NeType: neInfo.NeType, - NeId: neInfo.NeId, - SerialNum: systemState.SerialNum, - Capability: systemState.Capability, - CapUsed: config.TDatas[neInfo.NeType].CapUsed, - FeatureEnabled: config.TDatas[neInfo.NeType].FeatureEnabled, - ExpiryDate: systemState.ExpiryDate, - } - result, err = global.ToMap(*licenseInfo, "json") - if err != nil { - log.Warn("Failed to map:", err) - } - // neItem := strings.ToUpper(neType) + "/" + neId - // result[neItem] = sysInfo - } - - data = append(data, result) - log.Trace("data:", data) - - var response Response - response.Data = data - services.ResponseWithJson(w, http.StatusOK, response) -} - -// Get system state from NF/NFs -func GetAllLicenseInfoFromNF(w http.ResponseWriter, r *http.Request) { - log.Debug("GetAllLicenseInfoFromNF processing... ") - - data := make([]map[string]interface{}, 0) - - // token, err := services.CheckFrontValidRequest(w, r) - // if err != nil { - // log.Error("Request error:", err) - // return - // } - // log.Debug("AccessToken:", token) - - var neList []dborm.NeInfo - _, err := dborm.XormGetAllNeInfo(&neList) - if err != nil { - log.Error("Failed to XormGetAllNeInfo:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - omcNeTypeLower := "omc" - if config.GetYamlConfig().OMC.NeType != "" { - omcNeTypeLower = strings.ToLower(config.GetYamlConfig().OMC.NeType) - } - - for _, ne := range neList { - var result map[string]interface{} - log.Debugf("r.RemoteAddr: %s omcNeTypeLower: %s", r.RemoteAddr, omcNeTypeLower) - log.Debug("ne: ", ne) - //if strings.ToLower(ne.NeType) != omcNeTypeLower || !strings.Contains(r.RemoteAddr, ne.Ip) { - if strings.ToLower(ne.NeType) != omcNeTypeLower { - // hostUri := fmt.Sprintf("http://%s:%v", ne.Ip, ne.Port) - // requestURI2NF := fmt.Sprintf("%s/api/rest/systemManagement/v1/elementType/%s/objectType/systemState", - // hostUri, strings.ToLower(ne.NeType)) - var requestURI2NF string - if config.GetYamlConfig().OMC.TestMode && strings.ToLower(ne.NeType) != "udm" { - var udmNEs []dborm.NeInfo - err := dborm.XormGetNeInfoByNeType("UDM", &udmNEs) - if err != nil { - log.Error("Get system state from NF is failed:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - if len(udmNEs) > 0 { - udmNe := udmNEs[0] - hostUri := fmt.Sprintf("http://%s:%v", udmNe.Ip, udmNe.Port) - requestURI2NF = fmt.Sprintf("%s/api/rest/systemManagement/v1/elementType/%s/objectType/systemState", - hostUri, strings.ToLower(udmNe.NeType)) - } - } else { - hostUri := fmt.Sprintf("http://%s:%v", ne.Ip, ne.Port) - requestURI2NF = fmt.Sprintf("%s/api/rest/systemManagement/v1/elementType/%s/objectType/systemState", - hostUri, strings.ToLower(ne.NeType)) - } - log.Debug("requestURI2NF:", requestURI2NF) - - resp, err := client.SetTimeout(time.Duration(1 * time.Second)).R(). - EnableTrace(). - SetHeaders(map[string]string{constants.HEADER_KEY: r.Header.Get(constants.HEADER_KEY)}). - // SetHeaders(map[string]string{"accessToken": token}). - SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}). - SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). - Get(requestURI2NF) - if err != nil { - log.Error("Get system state from NF is failed:", err) - // errorMessage := services.ErrorMessage{ - // ErrorCode: "1", ErrorInfo: "Internal server error, NF connnect refused", - // } - // //result["error"] = errorMessage - continue - } else { - systemState := &SysState{} - _ = json.Unmarshal(resp.Body(), &systemState) - licenseInfo := &LicenseInfo{ - NeType: ne.NeType, - NeId: ne.NeId, - SerialNum: systemState.SerialNum, - Capability: systemState.Capability, - CapUsed: config.TDatas[ne.NeType].CapUsed, - FeatureEnabled: config.TDatas[ne.NeType].FeatureEnabled, - ExpiryDate: systemState.ExpiryDate, - } - result, err = global.ToMap(*licenseInfo, "json") - if err != nil { - log.Warn("Failed to map:", err) - } - // neItem := strings.ToUpper(ne.NeType) + "/" + ne.NeId - // result[neItem] = sysInfo - } - } else { - systemState := GetEMSState(ne.Ip) - licenseInfo := &LicenseInfo{ - NeType: ne.NeType, - NeId: ne.NeId, - SerialNum: systemState.SerialNum, - Capability: systemState.Capability, - CapUsed: config.TDatas[ne.NeType].CapUsed, - FeatureEnabled: config.TDatas[ne.NeType].FeatureEnabled, - ExpiryDate: systemState.ExpiryDate, - } - result, err = global.ToMap(*licenseInfo, "json") - if err != nil { - log.Warn("Failed to map:", err) - } - // neItem := strings.ToUpper(ne.NeType) + "/" + ne.NeId - // result[neItem] = sysInfo - } - - data = append(data, result) - log.Trace("data:", data) - } - - var response Response - response.Data = data - services.ResponseWithJson(w, http.StatusOK, response) -} - -// Get system state from NF/NFs -func GetOneSysinfoFromNF(w http.ResponseWriter, r *http.Request) { - log.Debug("GetOneSysinfoFromNF processing... ") - - data := make([]map[string]interface{}, 0) - - vars := mux.Vars(r) - neType := vars["neType"] - neId := vars["neId"] - if neType == "" || neId == "" { - services.ResponseNotFound404UriNotExist(w, r) - return - } - // token, err := services.CheckFrontValidRequest(w, r) - // if err != nil { - // log.Error("Request error:", err) - // return - // } - // log.Debug("AccessToken:", token) - - neInfo, err := dborm.XormGetNeInfo(neType, neId) - if err != nil { - log.Error("Failed to XormGetNeInfo:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } else if neInfo == nil { - err := global.ErrCMNotFoundTargetNE - log.Error(global.ErrCMNotFoundTargetNE) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - log.Trace("neInfo:", neInfo) - - //systemState := make(map[string]interface{}) - systemState := &SysState{} - var result map[string]interface{} - //sysInfo := &SystemInfo{} - omcNeTypeLower := "omc" - if config.GetYamlConfig().OMC.NeType != "" { - omcNeTypeLower = strings.ToLower(config.GetYamlConfig().OMC.NeType) - } - if neType != omcNeTypeLower { - log.Debugf("r.RemoteAddr: %s omcNeTypeLower: %s", r.RemoteAddr, omcNeTypeLower) - var requestURI2NF string - if config.GetYamlConfig().OMC.TestMode && strings.ToLower(neType) != "udm" { - var udmNEs []dborm.NeInfo - err := dborm.XormGetNeInfoByNeType("UDM", &udmNEs) - if err != nil { - log.Error("Get system state from NF is failed:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - if len(udmNEs) > 0 { - udmNe := udmNEs[0] - hostUri := fmt.Sprintf("http://%s:%v", udmNe.Ip, udmNe.Port) - requestURI2NF = fmt.Sprintf("%s/api/rest/systemManagement/v1/elementType/%s/objectType/systemState", - hostUri, strings.ToLower(udmNe.NeType)) - } - } else { - hostUri := fmt.Sprintf("http://%s:%v", neInfo.Ip, neInfo.Port) - requestURI2NF = fmt.Sprintf("%s/api/rest/systemManagement/v1/elementType/%s/objectType/systemState", - hostUri, strings.ToLower(neInfo.NeType)) - } - log.Debug("requestURI2NF:", requestURI2NF) - - resp, err := client.R(). - EnableTrace(). - SetHeaders(map[string]string{constants.HEADER_KEY: r.Header.Get(constants.HEADER_KEY)}). - // SetHeaders(map[string]string{"accessToken": token}). - SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}). - SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). - Get(requestURI2NF) - if err != nil { - log.Error("Get system state from NF is failed:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } else { - log.Trace("resp.Body():", string(resp.Body())) - _ = json.Unmarshal(resp.Body(), &systemState) - - log.Trace("systemState:", systemState) - hostName := "5gc" - if systemState.HostName != "" { - hostName = systemState.HostName - } - osInfo := "Linux 5gc 4.15.0-29-generic SMP Tue Jul 17 15:39:52 UTC 2018 x86_64 GNU/Linux" - if systemState.OsInfo != "" { - osInfo = systemState.OsInfo - } - dbInfo := "db v1.4.15" - if systemState.OsInfo != "" { - dbInfo = systemState.DbInfo - } - port, _ := strconv.Atoi(neInfo.Port) - cpus := 4 - if systemState.HardwareInfo.CPUs != 0 { - cpus = systemState.HardwareInfo.CPUs - } - totalMem := 34029125632 - if systemState.HardwareInfo.Memory != 0 { - totalMem = systemState.HardwareInfo.Memory - } - sysInfo := &SystemInfo{ - NeType: neInfo.NeType, - NeId: neInfo.NeId, - HostName: hostName, - OsInfo: osInfo, - DbInfo: dbInfo, - Version: systemState.Version, - IpAddr: neInfo.Ip, - Port: uint16(port), - CPUs: cpus, - TotalMem: totalMem, - PvFlag: neInfo.PvFlag, - Status: NeStatusEnumToStr(neInfo.Status), - } - //neItem := strings.ToUpper(neType) + "/" + neId - result, err = global.ToMap(*sysInfo, "json") - if err != nil { - log.Warn("Failed to map:", err) - } - } - } else { - systemState := GetEMSState(neInfo.Ip) - sysInfo := &SystemInfo{ - NeType: neInfo.NeType, - NeId: neInfo.NeId, - HostName: systemState.HostName, - OsInfo: systemState.OsInfo, - DbInfo: systemState.DbInfo, - Version: systemState.Version, - IpAddr: neInfo.Ip, - Port: systemState.Port, - CPUs: systemState.HardwareInfo.CPUs, - TotalMem: systemState.HardwareInfo.Memory, - PvFlag: neInfo.PvFlag, - Status: NeStatusEnumToStr(neInfo.Status), - } - result, err = global.ToMap(*sysInfo, "json") - if err != nil { - log.Warn("Failed to map:", err) - } - // neItem := strings.ToUpper(neType) + "/" + neId - // result[neItem] = sysInfo - } - - data = append(data, result) - log.Trace("data:", data) - - var response Response - response.Data = data - services.ResponseWithJson(w, http.StatusOK, response) -} - -// Get system state from NF/NFs -func GetAllSysinfoFromNF(w http.ResponseWriter, r *http.Request) { - log.Debug("GetAllSysinfoFromNF processing... ") - - data := make([]map[string]interface{}, 0) - - // token, err := services.CheckFrontValidRequest(w, r) - // if err != nil { - // log.Error("Request error:", err) - // return - // } - // log.Debug("AccessToken:", token) - - var neList []dborm.NeInfo - _, err := dborm.XormGetAllNeInfo(&neList) - if err != nil { - log.Error("Failed to XormGetAllNeInfo:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - omcNeTypeLower := "omc" - if config.GetYamlConfig().OMC.NeType != "" { - omcNeTypeLower = strings.ToLower(config.GetYamlConfig().OMC.NeType) - } - - for _, ne := range neList { - var result map[string]interface{} - log.Debugf("r.RemoteAddr: %s omcNeTypeLower: %s", r.RemoteAddr, omcNeTypeLower) - log.Debug("ne: ", ne) - //if strings.ToLower(ne.NeType) != omcNeTypeLower || !strings.Contains(r.RemoteAddr, ne.Ip) { - if strings.ToLower(ne.NeType) != omcNeTypeLower { - // hostUri := fmt.Sprintf("http://%s:%v", ne.Ip, ne.Port) - // requestURI2NF := fmt.Sprintf("%s/api/rest/systemManagement/v1/elementType/%s/objectType/systemState", - // hostUri, strings.ToLower(ne.NeType)) - var requestURI2NF string - if config.GetYamlConfig().OMC.TestMode && strings.ToLower(ne.NeType) != "udm" { - var udmNEs []dborm.NeInfo - err := dborm.XormGetNeInfoByNeType("UDM", &udmNEs) - if err != nil { - log.Error("Get system state from NF is failed:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - if len(udmNEs) > 0 { - udmNe := udmNEs[0] - hostUri := fmt.Sprintf("http://%s:%v", udmNe.Ip, udmNe.Port) - requestURI2NF = fmt.Sprintf("%s/api/rest/systemManagement/v1/elementType/%s/objectType/systemState", - hostUri, strings.ToLower(udmNe.NeType)) - } - } else { - hostUri := fmt.Sprintf("http://%s:%v", ne.Ip, ne.Port) - requestURI2NF = fmt.Sprintf("%s/api/rest/systemManagement/v1/elementType/%s/objectType/systemState", - hostUri, strings.ToLower(ne.NeType)) - } - log.Debug("requestURI2NF:", requestURI2NF) - - resp, err := client.SetTimeout(time.Duration(1 * time.Second)).R(). - EnableTrace(). - SetHeaders(map[string]string{constants.HEADER_KEY: r.Header.Get(constants.HEADER_KEY)}). - // SetHeaders(map[string]string{"accessToken": token}). - SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}). - SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). - Get(requestURI2NF) - if err != nil { - log.Error("Get system state from NF is failed:", err) - // errorMessage := services.ErrorMessage{ - // ErrorCode: "1", ErrorInfo: "Internal server error, NF connnect refused", - // } - // //result["error"] = errorMessage - continue - } else { - systemState := &SysState{} - _ = json.Unmarshal(resp.Body(), &systemState) - hostName := "5gc" - if systemState.HostName != "" { - hostName = systemState.HostName - } - osInfo := "Linux 5gc 4.15.0-29-generic SMP Tue Jul 17 15:39:52 UTC 2018 x86_64 GNU/Linux" - if systemState.OsInfo != "" { - osInfo = systemState.OsInfo - } - dbInfo := "db v1.4.15" - if systemState.OsInfo != "" { - dbInfo = systemState.DbInfo - } - port, _ := strconv.Atoi(ne.Port) - cpus := 4 - if systemState.HardwareInfo.CPUs != 0 { - cpus = systemState.HardwareInfo.CPUs - } - totalMem := 34029125632 - if systemState.HardwareInfo.Memory != 0 { - totalMem = systemState.HardwareInfo.Memory - } - sysInfo := &SystemInfo{ - NeType: ne.NeType, - NeId: ne.NeId, - HostName: hostName, - OsInfo: osInfo, - DbInfo: dbInfo, - Version: systemState.Version, - IpAddr: ne.Ip, - Port: uint16(port), - CPUs: cpus, - TotalMem: totalMem, - PvFlag: ne.PvFlag, - Status: NeStatusEnumToStr(ne.Status), - } - // neItem := strings.ToUpper(ne.NeType) + "/" + ne.NeId - // result[neItem] = sysInfo - result, err = global.ToMap(*sysInfo, "json") - if err != nil { - log.Warn("Failed to map:", err) - } - } - } else { - port, _ := strconv.Atoi(ne.Port) - systemState := GetEMSState(ne.Ip) - sysInfo := &SystemInfo{ - NeType: ne.NeType, - NeId: ne.NeId, - HostName: systemState.HostName, - OsInfo: systemState.OsInfo, - DbInfo: systemState.DbInfo, - Version: systemState.Version, - IpAddr: ne.Ip, - Port: (uint16(port)), - CPUs: systemState.HardwareInfo.CPUs, - TotalMem: systemState.HardwareInfo.Memory, - PvFlag: ne.PvFlag, - Status: NeStatusEnumToStr(ne.Status), - } - // neItem := strings.ToUpper(ne.NeType) + "/" + ne.NeId - // result[neItem] = sysInfo - result, err = global.ToMap(*sysInfo, "json") - if err != nil { - log.Warn("Failed to map:", err) - } - } - - data = append(data, result) - log.Trace("data:", data) - } - - var response Response - response.Data = data - services.ResponseWithJson(w, http.StatusOK, response) -} - -// Get system state from NF/NFs -func GetStateFromNF(w http.ResponseWriter, r *http.Request) { - log.Debug("GetStateFromNF processing... ") - - vars := mux.Vars(r) - neType := vars["elementTypeValue"] - neType = strings.ToLower(neType) - - if neType == "" { - services.ResponseNotFound404UriNotExist(w, r) - return - } - - if neType == "all" { - var neList []dborm.NeInfo - _, err := dborm.XormGetAllNeInfo(&neList) - if err != nil { - log.Error("Failed to get all ne info:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - data := make([]map[string]interface{}, 0) - for _, ne := range neList { - result := make(map[string]interface{}) - hostUri := fmt.Sprintf("http://%s:%v", ne.Ip, ne.Port) - requestURI2NF := fmt.Sprintf("%s/api/rest/systemManagement/v1/elementType/%s/objectType/systemState", - hostUri, strings.ToLower(ne.NeType)) - log.Debug("requestURI2NF:", requestURI2NF) - - result["ipAddress"] = ne.Ip - resp, err := client.R(). - EnableTrace(). - SetHeaders(map[string]string{constants.HEADER_KEY: r.Header.Get(constants.HEADER_KEY)}). - //SetHeaders(map[string]string{"accessToken": token}). - SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}). - SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). - Get(requestURI2NF) - if err != nil { - log.Error("Fail to get state:", err) - - errorMessage := services.ErrorMessage{ - ErrorCode: "1", ErrorInfo: "Internal server error, NF connnect refused", - } - systemState := make(map[string]interface{}) - systemState["error"] = errorMessage - result["systemState"] = systemState - } else { - systemState := make(map[string]interface{}) - _ = json.Unmarshal(resp.Body(), &systemState) - result["systemState"] = systemState - } - - neItem := strings.ToUpper(ne.NeType) + "/" + ne.NeId - mapState := make(map[string]interface{}) - mapState[neItem] = result - data = append(data, mapState) - log.Trace("data:", data) - } - var response Response - response.Data = data - services.ResponseWithJson(w, http.StatusOK, response) - return - } - - if neType == "omc" { - emsState := GetEMSState("127.0.0.1") - services.ResponseWithJson(w, http.StatusOK, emsState) - return - } - - // only support omc and all elementType - err := fmt.Errorf("only support omc or all elementTypeValue") - log.Error("Fail to get state:", err) - services.ResponseInternalServerError500ProcessError(w, err) - - // var neList []dborm.NeInfo - // err := dborm.XormGetNeInfoByNeType(neType, &neList) - // if err != nil { - // log.Error("Failed to dborm.XormGetNeInfoByNeType:", err) - // services.ResponseInternalServerError500ProcessError(w, err) - // return - // } - // var omcList []dborm.NeInfo - // err = dborm.XormGetNeInfoByNeType("omc", &omcList) - // if err != nil { - // log.Error("Failed to omc ne list:", err) - // services.ResponseInternalServerError500ProcessError(w, err) - // return - // } - // for i, ne := range neList { - - // } - // data := make([]map[string]interface{}, 0) - // for _, ne := range neList { - // hostUri := fmt.Sprintf("http://%s:%v", ne.Ip, ne.Port) - // requestURI2NF := fmt.Sprintf("%s/api/rest/systemManagement/v1/elementType/%s/objectType/systemState", - // hostUri, strings.ToLower(ne.NeType)) - // log.Debug("requestURI2NF:", requestURI2NF) - - // resp, err := client.R(). - // EnableTrace(). - // SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}). - // SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). - // Get(requestURI2NF) - // if err != nil { - // log.Error("Get system state from NF is failed:", err) - // } else { - // systemState := make(map[string]interface{}) - // _ = json.Unmarshal(resp.Body(), &systemState) - // data = append(data, systemState) - // } - // } - - // if len(data) == 1 { - // services.ResponseWithJson(w, http.StatusOK, data[0]) - // return - // } - // var response Response - // response.Data = data - // services.ResponseWithJson(w, http.StatusOK, response) -} - -func GetEMSState(ip string) *SysState { - log.Debug("GetEMSState processing... ") - - sysInfo := new(SysInfo) - err := GetSysInfo(sysInfo) - if err != nil { - log.Error("Failed to GetSysInfo:", err) - return nil - } - - cpuUsage := &CpuUsage{ - NfCpuUsage: sysInfo.MyCpuPercent, - SysCpuUsage: sysInfo.SysCpuPercent, - } - - memUsage := &MemUsage{ - TotalMem: sysInfo.SysTotalRam, - NfUsedMem: sysInfo.MyUsedRam, - SysMemUsage: sysInfo.SysRamUsedPercent, - } - - diskSpace := &DiskSpace{ - PartitionNum: sysInfo.PartitionNum, - PartitionInfo: sysInfo.PartitionInfo, - } - - // 获取主机的 IP 地址列表 - ipAddrs := []string{ip} - if ip == "" || ip == "127.0.0.1" { - ipAddrs = []string{} - interfaces, err := net.Interfaces() - if err == nil { - for _, iface := range interfaces { - for _, v := range iface.Addrs { - name := iface.Name - if name[len(name)-1] == '0' { - name = name[0 : len(name)-1] - name = strings.Trim(name, "") - } - // ignore localhost - if name == "lo" { - continue - } - prefix := strings.Split(v.Addr, "/")[0] - if strings.Contains(prefix, "::") { - ipAddrs = append(ipAddrs, prefix) - } - if strings.Contains(prefix, ".") { - ipAddrs = append(ipAddrs, prefix) - } - } - } - } - } - - CapabilityInt := config.GetYamlConfig().OMC.Capability - if CapabilityInt == 0 { - CapabilityInt = 5000 - } - snStr := config.GetYamlConfig().OMC.Sn - if snStr == "" { - snStr = "-" - } - expiryDateStr := config.GetYamlConfig().OMC.ExpiryDate - if expiryDateStr == "" { - expiryDateStr = "-" - } - var port uint16 = 33030 - httpArr := cfg.Get("server") - if httpArr != nil { - arr := httpArr.([]any) - if len(arr) > 1 { - rest := arr[0].(map[string]any) - port = uint16(parse.Number(rest["port"])) - } - } - hostName, _ := os.Hostname() - dbInfo := getDbInfo() - emsState := &SysState{ - HostName: hostName, - OsInfo: getUnameStr(), - DbInfo: dbInfo, - IpAddr: ipAddrs, - Port: port, - Version: cfg.Version, - Capability: CapabilityInt, - SerialNum: snStr, - ExpiryDate: expiryDateStr, - HardwareInfo: HardwareInfo{CPUs: getCpuNumber(), Memory: getTotalMemory()}, - CpuUsage: *cpuUsage, - MemUsage: *memUsage, - DiskSpace: *diskSpace, - } - - //getSystemInfo() - return emsState -} - -func getDbInfo() string { - var dbConfig map[string]any - defSource := cfg.Get("database.defaultDataSourceName").(string) - datasource := cfg.Get("database.datasource").(map[string]any) - for key, value := range datasource { - item := value.(map[string]any) - if key == defSource { - dbConfig = item - break - } - } - - if dbConfig["type"] == "mysql" { - return getMySQLVersion() - } - if dbConfig["type"] == "sqlite" { - return "3.35.5 SQLite3" - } - return "" -} - -func getMySQLVersion() string { - var info string = "" - - var ver, verComment, verCompileOS, verCompile string - - // 版本 - m, err := db.RawDB("", "SHOW VARIABLES LIKE 'version'", nil) - if err != nil || len(m) != 1 { - return info - } - if v, ok := m[0]["Value"]; ok { - ver = v.(string) - } - - // 详细版本 - m, err = db.RawDB("", "SHOW VARIABLES LIKE 'version_comment'", nil) - if err != nil || len(m) != 1 { - return info - } - if v, ok := m[0]["Value"]; ok { - verComment = v.(string) - } - - // 编译操作系统 - m, err = db.RawDB("", "SHOW VARIABLES LIKE 'version_compile_os'", nil) - if err != nil || len(m) != 1 { - return info - } - if v, ok := m[0]["Value"]; ok { - verCompileOS = v.(string) - } - - // 编译机器 - m, err = db.RawDB("", "SHOW VARIABLES LIKE 'version_compile_machine'", nil) - if err != nil || len(m) != 1 { - return info - } - if v, ok := m[0]["Value"]; ok { - verCompileOS = v.(string) - } - - return fmt.Sprintf("%s %s, for %s (%s)", ver, verComment, verCompileOS, verCompile) -} diff --git a/features/state/state_linux.go b/features/state/state_linux.go deleted file mode 100644 index 30ed20d8..00000000 --- a/features/state/state_linux.go +++ /dev/null @@ -1,243 +0,0 @@ -//go:build linux -// +build linux - -package state - -import ( - "encoding/binary" - "fmt" - "os" - "runtime" - "syscall" - "time" - - "be.ems/lib/log" - "github.com/shirou/gopsutil/v4/cpu" - "github.com/shirou/gopsutil/v4/disk" - "github.com/shirou/gopsutil/v4/mem" - "github.com/shirou/gopsutil/v4/process" -) - -type SysInfo struct { - SysCpuPercent uint16 // x% - MyCpuPercent uint16 // x%, CPU percent of current proccess - - SysTotalRam uint32 // KB - MyUsedRam uint32 // RAM usage of current proccess, KB - SysRamUsedPercent uint16 // x% - - PartitionNum byte - PartitionInfo []PartitionInfo // usage of each partition -} - -const MAX_PARTITION_NUM byte = 32 - -func GetSysStat() ([]byte, int) { - // Get sys info - var sysInfo SysInfo - err := GetSysInfo(&sysInfo) - if err != nil { - return nil, 0 - } - - //log.Tracef("current sys info: %v", sysInfo) - - // build ems buffer - var data []byte = make([]byte, 1024) - var len int - var i byte - binary.BigEndian.PutUint16(data[0:], sysInfo.MyCpuPercent) //x% * 100 - binary.BigEndian.PutUint16(data[2:], sysInfo.SysCpuPercent) //x% * 100 - binary.BigEndian.PutUint32(data[4:], sysInfo.SysTotalRam) // KB - binary.BigEndian.PutUint32(data[8:], sysInfo.MyUsedRam) // KB - binary.BigEndian.PutUint16(data[12:], sysInfo.SysRamUsedPercent) //x% * 100 - data[14] = sysInfo.PartitionNum - for i = 0; i < sysInfo.PartitionNum; i++ { - binary.BigEndian.PutUint32(data[15+8*(i):], sysInfo.PartitionInfo[i].Total) // MB - binary.BigEndian.PutUint32(data[15+8*(i)+4:], sysInfo.PartitionInfo[i].Used) // MB - } - len = int(15 + 8*sysInfo.PartitionNum) - - //log.Tracef("current sys stat buf: %v, len: %d", data, len) - - return data, len -} - -var pProc *process.Process = nil - -func GetSYsCpuPercent() float64 { - totalPercent, err := cpu.Percent(0, false) //(2*time.Second, false) - if err != nil { - return 0.0 - } else { - return totalPercent[0] - } -} - -func GetSysInfo(sysInfo *SysInfo) error { - // sys cpu percent - totalPercent, err := cpu.Percent(0, false) //(2*time.Second, false) - if err != nil { - sysInfo.SysCpuPercent = 0 - } else { - sysInfo.SysCpuPercent = uint16(totalPercent[0] * 100) - } - - if pProc == nil { - checkPid := os.Getpid() - pProc, err = process.NewProcess(int32(checkPid)) - if err != nil { - log.Tracef("get process info error %v", err) - return err - } - } - - // self cpu percent - percent, err := pProc.Percent(0) //(2*time.Second) - if err != nil { - log.Tracef("get process cpu percent error %v", err) - sysInfo.MyCpuPercent = 0 - } else { - sysInfo.MyCpuPercent = uint16(percent * 100) - } - - // self RAM(KB) - myRam, err := pProc.MemoryInfo() - if err != nil { - log.Tracef("get self memory info error %v", err) - sysInfo.MyUsedRam = 0 - } else { - sysInfo.MyUsedRam = uint32(myRam.RSS / 1024) - } - - // system RAM(KB) - sysRam, err := mem.VirtualMemory() - if err != nil { - log.Tracef("gett sys memory info error %v", err) - sysInfo.SysTotalRam = 0 - sysInfo.SysRamUsedPercent = 0 - } else { - sysInfo.SysTotalRam = uint32(sysRam.Total / 1024) - sysInfo.SysRamUsedPercent = uint16(sysRam.UsedPercent * 100) - } - - // partition usage - GetPartitions(sysInfo) - return nil -} - -func getProcess() *process.Process { - checkPid := os.Getpid() - ret, _ := process.NewProcess(int32(checkPid)) - return ret -} - -func GetSystemCpuInfo() { - physicalCnt, _ := cpu.Counts(false) - logicalCnt, _ := cpu.Counts(true) - log.Tracef("physical count:%d logical count:%d", physicalCnt, logicalCnt) - - totalPercent, _ := cpu.Percent(3*time.Second, false) // per cpu is false - perPercents, _ := cpu.Percent(3*time.Second, true) // per cpu is true - log.Tracef("total percent:%v per percents:%v", totalPercent, perPercents) -} - -func GetProcessCpuPercent() { - p := getProcess() - percent, err := p.Percent(0) - if err != nil { - log.Tracef("error %v", err) - } - - numcpu := runtime.NumCPU() - // if percent < 0.0 || percent > 100.0*float64(numcpu) { // TODO - if percent < 0.0 { - log.Tracef("Err CPU Percent of Process: %f, CPU num: %d", percent, numcpu) - } else { - log.Tracef("get process CPU percent: %f, CPU num: %d", percent, numcpu) - } -} - -func GetProcessMemoryInfo() { - p := getProcess() - - v, err := p.MemoryInfo() - if err != nil { - log.Tracef("getting memory info error %v", err) - } - - log.Tracef("get process memory info %v", v) - - info, _ := mem.VirtualMemory() - fmt.Println(info) -} - -func GetPartitions(sysInfo *SysInfo) { - sysInfo.PartitionNum = 0 - //sysInfo.PartitionInfo = make([]PartitionInfo, MAX_PARTITION_NUM, MAX_PARTITION_NUM) - infos, _ := disk.Partitions(true) - for _, info := range infos { - GetOnePartitionUsage(info.Mountpoint, sysInfo) - if sysInfo.PartitionNum >= MAX_PARTITION_NUM { - break - } - } -} - -func GetOnePartitionUsage(path string, sysInfo *SysInfo) int { - info, err := disk.Usage(path) - if err != nil { - return -1 - } - - if info.Total <= 0 { // info.Used/(1024 * 1024)MB - return 0 - } - var partition PartitionInfo - partition.Total = uint32(info.Total / 1024 / 1024) - partition.Used = uint32(info.Used / 1024 / 1024) - sysInfo.PartitionInfo = append(sysInfo.PartitionInfo, partition) - sysInfo.PartitionNum++ - - /*data, err := json.MarshalIndent(info, "", " ") - if err != nil { - return -1 - } - - fmt.Println(string(data))*/ - return 1 -} - -func getOS() string { - var osname string - if runtime.GOOS == "linux" { - osname = "GNU/Linux" - } - return osname -} - -func utsnameToString(unameArray [65]int8) string { - var byteString [65]byte - var indexLength int - for ; unameArray[indexLength] != 0 && indexLength < 65; indexLength++ { - byteString[indexLength] = uint8(unameArray[indexLength]) - } - return string(byteString[:indexLength]) -} - -func getUnameStr() string { - var utsname = syscall.Utsname{} - err := syscall.Uname(&utsname) - if err == nil { - name := utsnameToString(utsname.Sysname) - node := utsnameToString(utsname.Nodename) - release := utsnameToString(utsname.Release) - version := utsnameToString(utsname.Version) - machine := utsnameToString(utsname.Machine) - //domain:= utsnameToString(utsname.Domainname) - osName := getOS() - return fmt.Sprintf("%s %s %s %s %s %s", name, node, - release, version, machine, osName) - } - return "" -} diff --git a/features/state/state_windows.go b/features/state/state_windows.go deleted file mode 100644 index cbb027ee..00000000 --- a/features/state/state_windows.go +++ /dev/null @@ -1,231 +0,0 @@ -//go:build windows -// +build windows - -package state - -import ( - "encoding/binary" - "fmt" - "os" - "runtime" - "syscall" - "time" - - "github.com/shirou/gopsutil/v4/cpu" - "github.com/shirou/gopsutil/v4/disk" - "github.com/shirou/gopsutil/v4/mem" - "github.com/shirou/gopsutil/v4/process" -) - -type SysInfo struct { - SysCpuPercent uint16 // x% - MyCpuPercent uint16 // x%, CPU percent of current proccess - - SysTotalRam uint32 // KB - MyUsedRam uint32 // RAM usage of current proccess, KB - SysRamUsedPercent uint16 // x% - - PartitionNum byte - PartitionInfo []PartitionInfo // usage of each partition -} - -const MAX_PARTITION_NUM byte = 32 - -func GetSysStat() ([]byte, int) { - // Get sys info - var sysInfo SysInfo - err := GetSysInfo(&sysInfo) - if err != nil { - return nil, 0 - } - - //fmt.Printf("current sys info: %v", sysInfo) - - // build ems buffer - var data []byte = make([]byte, 1024) - var len int - var i byte - binary.BigEndian.PutUint16(data[0:], sysInfo.MyCpuPercent) //x% * 100 - binary.BigEndian.PutUint16(data[2:], sysInfo.SysCpuPercent) //x% * 100 - binary.BigEndian.PutUint32(data[4:], sysInfo.SysTotalRam) // KB - binary.BigEndian.PutUint32(data[8:], sysInfo.MyUsedRam) // KB - binary.BigEndian.PutUint16(data[12:], sysInfo.SysRamUsedPercent) //x% * 100 - data[14] = sysInfo.PartitionNum - for i = 0; i < sysInfo.PartitionNum; i++ { - binary.BigEndian.PutUint32(data[15+8*(i):], sysInfo.PartitionInfo[i].Total) // MB - binary.BigEndian.PutUint32(data[15+8*(i)+4:], sysInfo.PartitionInfo[i].Used) // MB - } - len = int(15 + 8*sysInfo.PartitionNum) - - //fmt.Printf("current sys stat buf: %v, len: %d", data, len) - - return data, len -} - -var pProc *process.Process = nil - -func GetSYsCpuPercent() float64 { - totalPercent, err := cpu.Percent(0, false) //(2*time.Second, false) - if err != nil { - return 0.0 - } else { - return totalPercent[0] - } -} - -func GetSysInfo(sysInfo *SysInfo) error { - // sys cpu percent - totalPercent, err := cpu.Percent(0, false) //(2*time.Second, false) - if err != nil { - sysInfo.SysCpuPercent = 0 - } else { - sysInfo.SysCpuPercent = uint16(totalPercent[0] * 100) - } - - if pProc == nil { - checkPid := os.Getpid() - pProc, err = process.NewProcess(int32(checkPid)) - if err != nil { - fmt.Printf("get process info error %v", err) - return err - } - } - - // self cpu percent - percent, err := pProc.Percent(0) //(2*time.Second) - if err != nil { - fmt.Printf("get process cpu percent error %v", err) - sysInfo.MyCpuPercent = 0 - } else { - sysInfo.MyCpuPercent = uint16(percent * 100) - } - - // self RAM(KB) - myRam, err := pProc.MemoryInfo() - if err != nil { - fmt.Printf("get self memory info error %v", err) - sysInfo.MyUsedRam = 0 - } else { - sysInfo.MyUsedRam = uint32(myRam.RSS / 1024) - } - - // system RAM(KB) - sysRam, err := mem.VirtualMemory() - if err != nil { - fmt.Printf("gett sys memory info error %v", err) - sysInfo.SysTotalRam = 0 - sysInfo.SysRamUsedPercent = 0 - } else { - sysInfo.SysTotalRam = uint32(sysRam.Total / 1024) - sysInfo.SysRamUsedPercent = uint16(sysRam.UsedPercent * 100) - } - - // partition usage - GetPartitions(sysInfo) - return nil -} - -func getProcess() *process.Process { - checkPid := os.Getpid() - ret, _ := process.NewProcess(int32(checkPid)) - return ret -} - -func GetSystemCpuInfo() { - physicalCnt, _ := cpu.Counts(false) - logicalCnt, _ := cpu.Counts(true) - fmt.Printf("physical count:%d logical count:%d\n", physicalCnt, logicalCnt) - - totalPercent, _ := cpu.Percent(3*time.Second, false) // per cpu is false - perPercents, _ := cpu.Percent(3*time.Second, true) // per cpu is true - fmt.Printf("total percent:%v per percents:%v\n", totalPercent, perPercents) -} - -func GetProcessCpuPercent() { - p := getProcess() - percent, err := p.Percent(0) - if err != nil { - fmt.Printf("error %v", err) - } - - numcpu := runtime.NumCPU() - // if percent < 0.0 || percent > 100.0*float64(numcpu) { // TODO - if percent < 0.0 { - fmt.Printf("Err CPU Percent of Process: %f, CPU num: %d", percent, numcpu) - } else { - fmt.Printf("get process CPU percent: %f, CPU num: %d", percent, numcpu) - } -} - -func GetProcessMemoryInfo() { - p := getProcess() - - v, err := p.MemoryInfo() - if err != nil { - fmt.Printf("getting memory info error %v", err) - } - - fmt.Printf("get process memory info %v\n", v) - - info, _ := mem.VirtualMemory() - fmt.Println(info) -} - -func GetPartitions(sysInfo *SysInfo) { - sysInfo.PartitionNum = 0 - //sysInfo.PartitionInfo = make([]PartitionInfo, MAX_PARTITION_NUM, MAX_PARTITION_NUM) - infos, _ := disk.Partitions(true) - for _, info := range infos { - GetOnePartitionUsage(info.Mountpoint, sysInfo) - if sysInfo.PartitionNum >= MAX_PARTITION_NUM { - break - } - } -} - -func GetOnePartitionUsage(path string, sysInfo *SysInfo) int { - info, err := disk.Usage(path) - if err != nil { - return -1 - } - - if info.Total <= 0 { // info.Used/(1024 * 1024)MB - return 0 - } - var partition PartitionInfo - partition.Total = uint32(info.Total / 1024 / 1024) - partition.Used = uint32(info.Used / 1024 / 1024) - sysInfo.PartitionInfo = append(sysInfo.PartitionInfo, partition) - sysInfo.PartitionNum++ - - /*data, err := json.MarshalIndent(info, "", " ") - if err != nil { - return -1 - } - - fmt.Println(string(data))*/ - return 1 -} - -func getOS() string { - var osname string - if runtime.GOOS == "linux" { - osname = "GNU/Linux" - } - return osname -} - -func utsnameToString(unameArray [65]int8) string { - var byteString [65]byte - var indexLength int - for ; unameArray[indexLength] != 0 && indexLength < 65; indexLength++ { - byteString[indexLength] = uint8(unameArray[indexLength]) - } - return string(byteString[:indexLength]) -} - -func getUnameStr() string { - osInfo, _ := syscall.GetVersion() - - return fmt.Sprintf("Widnows %d", osInfo) -} diff --git a/features/state/sysinfo.go b/features/state/sysinfo.go deleted file mode 100644 index f6f25b1c..00000000 --- a/features/state/sysinfo.go +++ /dev/null @@ -1,29 +0,0 @@ -package state - -import ( - "be.ems/lib/log" - "github.com/shirou/gopsutil/v4/cpu" - "github.com/shirou/gopsutil/v4/mem" -) - -func getCpuNumber() int { - // 获取CPU信息 - cpuInfo, err := cpu.Info() - if err != nil { - log.Errorf("Failed to get CPU info: %v", err) - return 0 - } - log.Tracef("CPU info: %+v", cpuInfo) - return len(cpuInfo) -} - -func getTotalMemory() int { - // 获取内存信息 - memInfo, err := mem.VirtualMemory() - if err != nil { - log.Errorf("Failed to get memory info: %v", err) - return 0 - } - log.Tracef("Memory info: %+v", memInfo) - return int(memInfo.Total) -} diff --git a/features/ue/ue.go b/features/ue/ue.go deleted file mode 100644 index 4c4ebb9a..00000000 --- a/features/ue/ue.go +++ /dev/null @@ -1,833 +0,0 @@ -package ue - -import ( - "encoding/json" - "fmt" - "io" - "net/http" - "strings" - "time" - - "be.ems/lib/config" - "be.ems/lib/core/ctx" - "be.ems/lib/dborm" - "be.ems/lib/global" - "be.ems/lib/log" - "be.ems/lib/services" - "be.ems/src/framework/constants" - neDataModel "be.ems/src/modules/network_data/model" - neDataService "be.ems/src/modules/network_data/service" - neService "be.ems/src/modules/network_element/service" - - "github.com/go-resty/resty/v2" - "github.com/gorilla/mux" -) - -// AmfNBInfo AMF的NodeB信息 -type AmfNBInfo struct { - ID string `json:"id"` //NodeB ID - Name string `json:"name"` // NodeB name - Address string `json:"address"` // 基站地址 - UENum int `jons:"ueNum"` // UE数量 -} - -// SmfUENum SMF在线用户数 -type SmfUENum struct { - UENum int `json:"ueNum"` // 当前在线用户数 -} - -// SmfUEInfo SMF在线用户信息 -type SmfUEInfo struct { - IMSI string `json:"imsi"` - MSISDN string `json:"msisdn"` - RatType string `json:"ratType"` - PduSessionInfo []struct { - PduSessionID int `json:"pduSessionID"` - IPv4 string `json:"ipv4"` - IPv6 string `json:"ipv6"` - Dnn string `json:"dnn"` - Tai string `json:"tai"` - SstSD string `json:"sstSD"` - UpfN3IP string `json:"upfN3IP"` - RanN3IP string `json:"ranN3IP"` - Activetime string `json:"activeTime"` - UpState string `json:"upState"` - } `json:"pduSessionInfo"` -} - -// ImsUEInfo IMS在线用户信息 -type ImsUEInfo struct { - IMSI string `json:"imsi"` - MSISDN string `json:"msisdn"` - IMPU string `json:"impu"` - Barring int `json:"barring"` - RegState int `json:"regState"` - Activetime string `json:"activeTime"` -} - -// N3iwfUEInfo N3IWF在线用户信息 -type N3iwfUEInfo struct { - IMSI string `json:"imsi"` - - NAI string `json:"nai"` - RegState int `json:"regState"` - Activetime string `json:"activeTime"` -} - -type N3iwfUEData struct { - Data []N3iwfUEInfo `json:"data"` -} - -var ( - UriNBState = config.DefaultUriPrefix + "/ueManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/nbState" - UriNBInfo = config.DefaultUriPrefix + "/ueManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/nbInfo" - UriUEInfo = config.DefaultUriPrefix + "/ueManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/ueInfo" - UriUENum = config.DefaultUriPrefix + "/ueManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/ueNum" - UriPCFUser = config.DefaultUriPrefix + "/ueManagement/{apiVersion}/elementType/pcf/objectType/ueInfo" - UriPCFUserM = config.DefaultUriPrefix + "/ueManagement/{apiVersion}/elementType/pcf/objectType/ueInfo/batch/{number}" - UriPCFUserFileImport = config.DefaultUriPrefix + "/ueManagement/{apiVersion}/elementType/pcf/objectType/ueInfo/file/import" - UriPCFUserFileExport = config.DefaultUriPrefix + "/ueManagement/{apiVersion}/elementType/pcf/objectType/ueInfo/file/export" - UriNSSFAvailableAMFs = config.DefaultUriPrefix + "/ueManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/availableAMFs" - UriNSSFSubscriptions = config.DefaultUriPrefix + "/ueManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/subscriptions" - - CustomUriNBState = config.UriPrefix + "/ueManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/nbState" - CustomUriNBInfo = config.UriPrefix + "/ueManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/nbInfo" - CustomUriUEInfo = config.UriPrefix + "/ueManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/ueInfo" - CustomUriUENum = config.UriPrefix + "/ueManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/ueNum" - CustomUriPCFUser = config.UriPrefix + "/ueManagement/{apiVersion}/elementType/pcf/objectType/ueInfo" - CustomUriPCFUserM = config.UriPrefix + "/ueManagement/{apiVersion}/elementType/pcf/objectType/ueInfo/batch/{number}" - CustomUriPCFUserFileImport = config.UriPrefix + "/ueManagement/{apiVersion}/elementType/pcf/objectType/ueInfo/file/import" - CustomUriPCFUserFileExport = config.UriPrefix + "/ueManagement/{apiVersion}/elementType/pcf/objectType/ueInfo/file/export" - CustomUriNSSFAvailableAMFs = config.UriPrefix + "/ueManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/availableAMFs" - CustomUriNSSFSubscriptions = config.UriPrefix + "/ueManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/subscriptions" -) - -var client = resty.New() - -func init() { - /* - client. - SetTimeout(10 * time.Second). - SetRetryCount(1). - SetRetryWaitTime(1 * time.Second). - SetRetryMaxWaitTime(2 * time.Second). - SetRetryAfter(func(client *resty.Client, resp *resty.Response) (time.Duration, error) { - return 0, errors.New("quota exceeded") - }) - */ - client.SetTimeout(500 * time.Millisecond) -} - -// Get AvailableAMFs from NSSF -func GetAvailableAMFsFromNSSF(w http.ResponseWriter, r *http.Request) { - log.Info("GetAvailableAMFsFromNSSF processing... ") - - vars := mux.Vars(r) - neType := vars["elementTypeValue"] - if strings.ToLower(neType) != "nssf" { - services.ResponseNotFound404UriNotExist(w, r) - return - } - //neTypeLower := strings.ToLower(neType) - var neId string - neIds := services.GetParamsArrByName("neId", r) - if len(neIds) == 1 { - neId = neIds[0] - } else { - services.ResponseNotFound404UriNotExist(w, r) - return - } - - // token, err := services.CheckFrontValidRequest(w, r) - // if err != nil { - // log.Error("Request error:", err) - // return - // } - // log.Debug("token:", token) - - neInfo, err := dborm.XormGetNeInfo(neType, neId) - if err != nil { - log.Error("Failed to XormGetNeInfo:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } else if neInfo == nil { - err := global.ErrCMNotFoundTargetNE - log.Error(global.ErrCMNotFoundTargetNE) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - log.Trace("neInfo:", neInfo) - - hostUri := fmt.Sprintf("http://%s:%v", neInfo.Ip, neInfo.Port) - requestURI2NF := fmt.Sprintf("%s%s", hostUri, r.RequestURI) - - log.Debug("requestURI2NF:", requestURI2NF) - - resp, err := client.R(). - EnableTrace(). - SetHeaders(map[string]string{constants.HEADER_KEY: r.Header.Get(constants.HEADER_KEY)}). - // SetHeaders(map[string]string{"accessToken": token}). - SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}). - SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). - Get(requestURI2NF) - if err != nil { - log.Error("Get system state from NF is failed:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } else { - var response services.MapResponse - _ = json.Unmarshal(resp.Body(), &response) - services.ResponseWithJson(w, resp.StatusCode(), response) - return - } -} - -// Get Subscriptions from NSSF -func GetSubscriptionsFromNSSF(w http.ResponseWriter, r *http.Request) { - log.Info("GetSubscriptionsFromNSSF processing... ") - - vars := mux.Vars(r) - neType := vars["elementTypeValue"] - if strings.ToLower(neType) != "nssf" { - services.ResponseNotFound404UriNotExist(w, r) - return - } - //neTypeLower := strings.ToLower(neType) - var neId string - neIds := services.GetParamsArrByName("neId", r) - if len(neIds) == 1 { - neId = neIds[0] - } else { - services.ResponseNotFound404UriNotExist(w, r) - return - } - - // token, err := services.CheckFrontValidRequest(w, r) - // if err != nil { - // log.Error("Request error:", err) - // return - // } - // log.Debug("token:", token) - - neInfo, err := dborm.XormGetNeInfo(neType, neId) - if err != nil { - log.Error("Failed to XormGetNeInfo:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } else if neInfo == nil { - err := global.ErrCMNotFoundTargetNE - log.Error(global.ErrCMNotFoundTargetNE) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - log.Trace("neInfo:", neInfo) - - hostUri := fmt.Sprintf("http://%s:%v", neInfo.Ip, neInfo.Port) - requestURI2NF := fmt.Sprintf("%s%s", hostUri, r.RequestURI) - - log.Debug("requestURI2NF:", requestURI2NF) - - resp, err := client.R(). - EnableTrace(). - SetHeaders(map[string]string{constants.HEADER_KEY: r.Header.Get(constants.HEADER_KEY)}). - // SetHeaders(map[string]string{"accessToken": token}). - SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}). - SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). - Get(requestURI2NF) - if err != nil { - log.Error("Get system state from NF is failed:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } else { - var response services.MapResponse - _ = json.Unmarshal(resp.Body(), &response) - services.ResponseWithJson(w, resp.StatusCode(), response) - return - } -} - -// Get UEInfo from NF/NFs -func GetUEInfoFromNF(w http.ResponseWriter, r *http.Request) { - log.Debug("GetUEInfoFromNF processing... ") - - neId := ctx.GetQuery(r, "neId") - neType := ctx.GetParam(r, "elementTypeValue") - if neType == "" || neId == "" { - log.Error("elementTypeValue/neId is empty") - services.ResponseNotFound404UriNotExist(w, r) - return - } - - neInfo := neService.NewNeInfo.FindByNeTypeAndNeID(neType, neId) - - var response services.MapResponse - if neInfo.NeId == neId && neInfo.NeId != "" { - requestURI2NF := fmt.Sprintf("http://%s:%v%s", neInfo.IP, neInfo.Port, r.RequestURI) - log.Debug("requestURI2NF:", requestURI2NF) - resp, err := client.R(). - EnableTrace(). - SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}). - SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). - Get(requestURI2NF) - if err != nil { - log.Error("Failed to Get from NF:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } else { - _ = json.Unmarshal(resp.Body(), &response) - } - log.Debug("response:", response) - } - - services.ResponseWithJson(w, http.StatusOK, response) -} - -// POST User Info from NF/NFs -func PostPCFUserInfo(w http.ResponseWriter, r *http.Request) { - log.Info("PostPCFUserInfo processing... ") - - // vars := mux.Vars(r) - // neType := vars["elementTypeValue"] - // if neType == "" { - // services.ResponseNotFound404UriNotExist(w, r) - // return - // } - //neTypeLower := strings.ToLower(neType) - neType := "PCF" - var neId string - neIds := services.GetParamsArrByName("neId", r) - if len(neIds) == 1 { - neId = neIds[0] - } else { - services.ResponseNotFound404UriNotExist(w, r) - return - } - - // token, err := services.CheckFrontValidRequest(w, r) - // if err != nil { - // log.Error("Request error:", err) - // return - // } - // log.Debug("token:", token) - - neInfo, err := dborm.XormGetNeInfo(neType, neId) - if err != nil { - log.Error("Failed to XormGetNeInfo:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } else if neInfo == nil { - err := global.ErrCMNotFoundTargetNE - log.Error(global.ErrCMNotFoundTargetNE) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - log.Trace("neInfo:", neInfo) - - hostUri := fmt.Sprintf("http://%s:%v", neInfo.Ip, neInfo.Port) - requestURI2NF := fmt.Sprintf("%s%s", hostUri, r.RequestURI) - - log.Debug("requestURI2NF:", requestURI2NF) - - body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen)) //io.LimitReader限制大小 - if err != nil { - log.Error("io.ReadAll is failed:", err) - services.ResponseNotFound404UriNotExist(w, r) - return - } - client.SetTimeout(1 * time.Minute) - resp, err := client.R(). - EnableTrace(). - SetHeaders(map[string]string{constants.HEADER_KEY: r.Header.Get(constants.HEADER_KEY)}). - //SetHeaders(map[string]string{"accessToken": token}). - SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}). - SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). - SetBody(body). - Post(requestURI2NF) - if err != nil { - log.Error("Failed to post:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } else { - var response services.MapResponse - _ = json.Unmarshal(resp.Body(), &response) - services.ResponseWithJson(w, resp.StatusCode(), response) - return - } -} - -// PUT PCF User Info from NF/NFs -func PutPCFUserInfo(w http.ResponseWriter, r *http.Request) { - log.Info("PutPCFUserInfo processing... ") - - // vars := mux.Vars(r) - // neType := vars["elementTypeValue"] - // if neType == "" { - // services.ResponseNotFound404UriNotExist(w, r) - // return - // } - //neTypeLower := strings.ToLower(neType) - neType := "PCF" - var neId string - neIds := services.GetParamsArrByName("neId", r) - if len(neIds) == 1 { - neId = neIds[0] - } else { - services.ResponseNotFound404UriNotExist(w, r) - return - } - - // token, err := services.CheckFrontValidRequest(w, r) - // if err != nil { - // log.Error("Request error:", err) - // return - // } - // log.Debug("token:", token) - - neInfo, err := dborm.XormGetNeInfo(neType, neId) - if err != nil { - log.Error("Failed to XormGetNeInfo:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } else if neInfo == nil { - err := global.ErrCMNotFoundTargetNE - log.Error(global.ErrCMNotFoundTargetNE) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - log.Trace("neInfo:", neInfo) - - hostUri := fmt.Sprintf("http://%s:%v", neInfo.Ip, neInfo.Port) - requestURI2NF := fmt.Sprintf("%s%s", hostUri, r.RequestURI) - - log.Debug("requestURI2NF:", requestURI2NF) - - body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen)) //io.LimitReader限制大小 - if err != nil { - log.Error("io.ReadAll is failed:", err) - services.ResponseNotFound404UriNotExist(w, r) - return - } - client.SetTimeout(1 * time.Minute) - resp, err := client.R(). - EnableTrace(). - SetHeaders(map[string]string{constants.HEADER_KEY: r.Header.Get(constants.HEADER_KEY)}). - //SetHeaders(map[string]string{"accessToken": token}). - SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}). - SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). - SetBody(body). - Put(requestURI2NF) - if err != nil { - log.Error("Failed to put:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } else { - var response services.MapResponse - _ = json.Unmarshal(resp.Body(), &response) - services.ResponseWithJson(w, resp.StatusCode(), response) - return - } -} - -// Get UEInfo from NF/NFs -func DeletePCFUserInfo(w http.ResponseWriter, r *http.Request) { - log.Info("DeletePCFUserInfo processing... ") - - // vars := mux.Vars(r) - // neType := vars["elementTypeValue"] - // if neType == "" { - // services.ResponseNotFound404UriNotExist(w, r) - // return - // } - //neTypeLower := strings.ToLower(neType) - neType := "PCF" - var neId string - neIds := services.GetParamsArrByName("neId", r) - if len(neIds) == 1 { - neId = neIds[0] - } else { - services.ResponseNotFound404UriNotExist(w, r) - return - } - - // token, err := services.CheckFrontValidRequest(w, r) - // if err != nil { - // log.Error("Request error:", err) - // return - // } - // log.Debug("token:", token) - - neInfo, err := dborm.XormGetNeInfo(neType, neId) - if err != nil { - log.Error("Failed to XormGetNeInfo:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } else if neInfo == nil { - err := global.ErrCMNotFoundTargetNE - log.Error(global.ErrCMNotFoundTargetNE) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - log.Trace("neInfo:", neInfo) - - hostUri := fmt.Sprintf("http://%s:%v", neInfo.Ip, neInfo.Port) - requestURI2NF := fmt.Sprintf("%s%s", hostUri, r.RequestURI) - - log.Debug("requestURI2NF:", requestURI2NF) - - resp, err := client.R(). - EnableTrace(). - SetHeaders(map[string]string{constants.HEADER_KEY: r.Header.Get(constants.HEADER_KEY)}). - //SetHeaders(map[string]string{"accessToken": token}). - SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}). - SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). - Delete(requestURI2NF) - if err != nil { - log.Error("Failed to delete:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } else { - w.WriteHeader(resp.StatusCode()) - w.Write(resp.Body()) - // var response services.MapResponse - // _ = json.Unmarshal(resp.Body(), &response) - // services.ResponseWithJson(w, resp.StatusCode(), response) - return - } -} - -// Get UEInfo from SMF -func GetUENumFromNF(w http.ResponseWriter, r *http.Request) { - log.Info("GetUENumFromNF processing... ") - - vars := mux.Vars(r) - neType := vars["elementTypeValue"] - if neType == "" { - services.ResponseNotFound404UriNotExist(w, r) - return - } - //neTypeLower := strings.ToLower(neType) - var neId string - neIds := services.GetParamsArrByName("neId", r) - if len(neIds) == 1 { - neId = neIds[0] - } else { - services.ResponseNotFound404UriNotExist(w, r) - return - } - - // token, err := services.CheckFrontValidRequest(w, r) - // if err != nil { - // log.Error("Request error:", err) - // return - // } - // log.Debug("token:", token) - - neInfo, err := dborm.XormGetNeInfo(neType, neId) - if err != nil { - log.Error("Failed to XormGetNeInfo:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } else if neInfo == nil { - err := global.ErrCMNotFoundTargetNE - log.Error(global.ErrCMNotFoundTargetNE) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - log.Trace("neInfo:", neInfo) - - hostUri := fmt.Sprintf("http://%s:%v", neInfo.Ip, neInfo.Port) - requestURI2NF := fmt.Sprintf("%s%s", hostUri, r.RequestURI) - - log.Debug("requestURI2NF:", requestURI2NF) - - resp, err := client.R(). - EnableTrace(). - SetHeaders(map[string]string{constants.HEADER_KEY: r.Header.Get(constants.HEADER_KEY)}). - // SetHeaders(map[string]string{"accessToken": token}). - SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}). - SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). - Get(requestURI2NF) - if err != nil { - log.Error("Get system state from NF is failed:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } else { - var response services.MapResponse - _ = json.Unmarshal(resp.Body(), &response) - services.ResponseWithJson(w, resp.StatusCode(), response) - return - } -} - -// Get Radio Info from NF/NFs -func GetNBInfoFromNF(w http.ResponseWriter, r *http.Request) { - log.Info("GetNBInfoFromNF processing... ") - - vars := mux.Vars(r) - neType := vars["elementTypeValue"] - if neType == "" { - services.ResponseNotFound404UriNotExist(w, r) - return - } - //neTypeLower := strings.ToLower(neType) - var neId string - neIds := services.GetParamsArrByName("neId", r) - if len(neIds) == 1 { - neId = neIds[0] - } else { - services.ResponseNotFound404UriNotExist(w, r) - return - } - - // token, err := services.CheckFrontValidRequest(w, r) - // if err != nil { - // log.Error("Request error:", err) - // return - // } - // log.Debug("token:", token) - - neInfo, err := dborm.XormGetNeInfo(neType, neId) - if err != nil { - log.Error("Failed to XormGetNeInfo:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } else if neInfo == nil { - err := global.ErrCMNotFoundTargetNE - log.Error(global.ErrCMNotFoundTargetNE) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - log.Trace("neInfo:", neInfo) - - hostUri := fmt.Sprintf("http://%s:%v", neInfo.Ip, neInfo.Port) - requestURI2NF := fmt.Sprintf("%s%s", hostUri, r.RequestURI) - - log.Debug("requestURI2NF:", requestURI2NF) - - resp, err := client.R(). - EnableTrace(). - SetHeaders(map[string]string{constants.HEADER_KEY: r.Header.Get(constants.HEADER_KEY)}). - // SetHeaders(map[string]string{"accessToken": token}). - SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}). - SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). - Get(requestURI2NF) - if err != nil { - log.Error("Get system state from NF is failed:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } else { - var response services.MapResponse - _ = json.Unmarshal(resp.Body(), &response) - services.ResponseWithJson(w, resp.StatusCode(), response) - return - } -} - -// PostNBInfoFromNF 接收Radio数据请求 -func PostNBInfoFromNF(w http.ResponseWriter, r *http.Request) { - log.Info("PostNBInfoFromNF processing... ") - neType := ctx.GetParam(r, "elementTypeValue") - var body struct { - NeType string `json:"neType" ` - NeName string `json:"neName" ` - RmUID string `json:"rmUID"` - StateList []struct { - Address string `json:"address" ` - Name string `json:"name" ` - Position string `json:"position" ` - NbName string `json:"nbName" ` - State string `json:"state" ` // "OFF" or "ON" - OffTime string `json:"offTime" ` //if State=OFF, will set it - OnTime string `json:"onTime" ` //if State=ON , will set it - } - } - if err := ctx.ShouldBindJSON(r, &body); err != nil { - services.ResponseInternalServerError500ProcessError(w, err) - return - } - - neTypeLower := strings.ToLower(body.NeType) - if neType == "" || neType != neTypeLower { - services.ResponseInternalServerError500ProcessError(w, fmt.Errorf("inconsistent network element types")) - return - } - - neInfo := neService.NewNeInfo.FindByRmuid(body.RmUID) - if neInfo.RmUID != body.RmUID { - services.ResponseInternalServerError500ProcessError(w, fmt.Errorf("inconsistent network element rmUID")) - return - } - - if len(body.StateList) == 0 { - services.ResponseInternalServerError500ProcessError(w, fmt.Errorf("no stateList")) - return - } - - nbStateService := neDataService.NewNBState - for _, v := range body.StateList { - if v.Address == "" || v.State == "" { - continue - } - timeStr := v.OffTime - if v.State == "ON" { - timeStr = v.OnTime - } - nbStateService.Insert(neDataModel.NBState{ - NeType: neInfo.NeType, - NeId: neInfo.NeId, - RmUid: neInfo.RmUID, - Address: v.Address, - Name: v.Name, - Position: v.Position, - NbName: v.NbName, - State: v.State, - Time: timeStr, - }) - } - - services.ResponseStatusOK204NoContent(w) -} - -// Get Radio Info from NF/NFs -func GetNBInfoAllFromNF(w http.ResponseWriter, r *http.Request) { - log.Info("GetNBInfoAllFromNF processing... ") - - vars := mux.Vars(r) - neType := vars["elementTypeValue"] - if neType == "" { - services.ResponseNotFound404UriNotExist(w, r) - return - } - //neTypeLower := strings.ToLower(neType) - // var neID string - neIDs := services.GetParamsArrByName("neId", r) - // if len(neIDs) == 1 { - // neID = neIDs[0] - // } else { - // services.ResponseNotFound404UriNotExist(w, r) - // return - // } - - // token, err := services.CheckFrontValidRequest(w, r) - // if err != nil { - // log.Error("Request error:", err) - // return - // } - // log.Debug("token:", token) - - //var ret error - var statusCode int = 500 - var dataResponse []services.MapResponse - var neInfos []dborm.NeInfo - dborm.XormGetNeInfo2(neType, neIDs, &neInfos) - for _, neInfo := range neInfos { - // neInfo, err := dborm.XormGetNeInfo(neType, neID) - // if err != nil { - // log.Error("Failed to XormGetNeInfo:", err) - // services.ResponseInternalServerError500ProcessError(w, err) - // return - // } else if neInfo == nil { - // err := global.ErrCMNotFoundTargetNE - // log.Error(global.ErrCMNotFoundTargetNE) - // services.ResponseInternalServerError500ProcessError(w, err) - // return - // } - - hostUri := fmt.Sprintf("http://%s:%v", neInfo.Ip, neInfo.Port) - requestURI2NF := fmt.Sprintf("%s%s", hostUri, r.RequestURI) - - log.Debug("requestURI2NF:", requestURI2NF) - - resp, err := client.R(). - EnableTrace(). - SetHeaders(map[string]string{constants.HEADER_KEY: r.Header.Get(constants.HEADER_KEY)}). - //SetHeaders(map[string]string{"accessToken": token}). - SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}). - SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). - Get(requestURI2NF) - if err != nil { - log.Error("Failed to GET:", err) - continue - // services.ResponseInternalServerError500ProcessError(w, err) - // return - } else { - switch resp.StatusCode() { - case http.StatusOK, http.StatusCreated, http.StatusNoContent, http.StatusAccepted: - var response services.MapResponse - _ = json.Unmarshal(resp.Body(), &response) - dataResponse = append(dataResponse, response) - statusCode = http.StatusOK - } - } - } - var response services.DataResponse - response.Data = dataResponse - services.ResponseWithJson(w, statusCode, response) -} - -// Get GetUEInfoFileExportNF from NF/NFs -func GetUEInfoFileExportNF(w http.ResponseWriter, r *http.Request) { - log.Info("GetUEInfoFromNF processing... ") - - // vars := mux.Vars(r) - // neType := vars["elementTypeValue"] - // if neType == "" { - // services.ResponseNotFound404UriNotExist(w, r) - // return - // } - //neTypeLower := strings.ToLower(neType) - var neId string - neIds := services.GetParamsArrByName("neId", r) - if len(neIds) == 1 { - neId = neIds[0] - } else { - services.ResponseNotFound404UriNotExist(w, r) - return - } - - // token, err := services.CheckFrontValidRequest(w, r) - // if err != nil { - // log.Error("Request error:", err) - // return - // } - // log.Debug("token:", token) - - neInfo, err := dborm.XormGetNeInfo("PCF", neId) - if err != nil { - log.Error("Failed to XormGetNeInfo:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } else if neInfo == nil { - err := global.ErrCMNotFoundTargetNE - log.Error(global.ErrCMNotFoundTargetNE) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - log.Trace("neInfo:", neInfo) - - hostUri := fmt.Sprintf("http://%s:%v", neInfo.Ip, neInfo.Port) - requestURI2NF := fmt.Sprintf("%s%s", hostUri, r.RequestURI) - - log.Debug("requestURI2NF:", requestURI2NF) - - client.SetTimeout(3 * time.Minute) - resp, err := client.R(). - EnableTrace(). - SetHeaders(map[string]string{constants.HEADER_KEY: r.Header.Get(constants.HEADER_KEY)}). - // SetHeaders(map[string]string{"accessToken": token}). - SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}). - SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). - Get(requestURI2NF) - if err != nil { - log.Error("Get system state from NF is failed:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } else { - w.WriteHeader(resp.StatusCode()) - w.Write(resp.Body()) - // var response services.MapResponse - // _ = json.Unmarshal(resp.Body(), &response) - // services.ResponseWithJson(w, resp.StatusCode(), response) - return - } -} diff --git a/go.mod b/go.mod index 36b10023..de6fd42b 100644 --- a/go.mod +++ b/go.mod @@ -1,21 +1,18 @@ module be.ems -go 1.24.0 +go 1.24 require ( github.com/creack/pty v1.1.24 github.com/dlclark/regexp2 v1.11.5 - github.com/gin-gonic/gin v1.10.0 + github.com/expr-lang/expr v1.17.5 + github.com/gin-gonic/gin v1.10.1 github.com/glebarez/sqlite v1.11.0 - github.com/go-resty/resty/v2 v2.16.5 - github.com/go-sql-driver/mysql v1.9.2 + github.com/go-ldap/ldap/v3 v3.4.11 github.com/godoes/ginprom v0.3.7 - github.com/golang-jwt/jwt/v5 v5.2.2 - github.com/gopacket/gopacket v1.3.1 - github.com/gorilla/mux v1.8.1 + github.com/golang-jwt/jwt/v5 v5.3.0 + github.com/gopacket/gopacket v1.4.0 github.com/gorilla/websocket v1.5.3 - github.com/gosnmp/gosnmp v1.40.0 - github.com/lestrrat/go-file-rotatelogs v0.0.0-20180223000712-d3151e2a480f github.com/linxGnu/gosmpp v0.3.1 github.com/matoous/go-nanoid/v2 v2.1.0 github.com/mojocn/base64Captcha v1.3.8 @@ -23,28 +20,28 @@ require ( github.com/penglongli/gin-metrics v0.1.13 github.com/pkg/sftp v1.13.9 github.com/prometheus-community/pro-bing v0.7.0 - github.com/redis/go-redis/v9 v9.8.0 + github.com/redis/go-redis/v9 v9.11.0 github.com/robfig/cron/v3 v3.0.1 - github.com/shirou/gopsutil/v4 v4.25.4 - github.com/slayercat/GoSNMPServer v0.5.2 - github.com/spf13/pflag v1.0.6 + github.com/shirou/gopsutil/v4 v4.25.7 + github.com/spf13/pflag v1.0.7 github.com/spf13/viper v1.20.1 github.com/swaggo/files v1.0.1 github.com/swaggo/gin-swagger v1.6.0 - github.com/swaggo/swag v1.16.4 + github.com/swaggo/swag v1.16.6 + github.com/tsmask/go-oam v1.0.7 + github.com/wneessen/go-mail v0.6.2 github.com/xuri/excelize/v2 v2.9.0 - golang.org/x/crypto v0.38.0 - golang.org/x/term v0.32.0 - golang.org/x/text v0.25.0 - gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df + golang.org/x/crypto v0.40.0 + golang.org/x/oauth2 v0.30.0 + golang.org/x/text v0.28.0 gopkg.in/yaml.v3 v3.0.1 - gorm.io/driver/mysql v1.5.7 - gorm.io/gorm v1.26.1 - xorm.io/xorm v1.3.9 + gorm.io/driver/mysql v1.6.0 + gorm.io/gorm v1.30.0 ) require ( filippo.io/edwards25519 v1.1.0 // indirect + github.com/Azure/go-ntlmssp v0.0.0-20221128193559-754e69321358 // indirect github.com/KyleBanks/depth v1.2.1 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bits-and-blooms/bitset v1.2.0 // indirect @@ -54,12 +51,12 @@ require ( github.com/cloudwego/base64x v0.1.5 // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect github.com/dustin/go-humanize v1.0.1 // indirect - github.com/ebitengine/purego v0.8.2 // indirect - github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239 // indirect + github.com/ebitengine/purego v0.8.4 // indirect github.com/fsnotify/fsnotify v1.9.0 // indirect github.com/gabriel-vasile/mimetype v1.4.8 // indirect github.com/gin-contrib/sse v1.1.0 // indirect github.com/glebarez/go-sqlite v1.22.0 // indirect + github.com/go-asn1-ber/asn1-ber v1.5.8-0.20250403174932-29230038a667 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/go-openapi/jsonpointer v0.21.1 // indirect github.com/go-openapi/jsonreference v0.21.0 // indirect @@ -68,33 +65,26 @@ require ( 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.26.0 - github.com/go-viper/mapstructure/v2 v2.2.1 // indirect + github.com/go-sql-driver/mysql v1.8.1 // indirect + github.com/go-viper/mapstructure/v2 v2.4.0 // indirect github.com/goccy/go-json v0.10.5 // indirect github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect - github.com/golang/snappy v1.0.0 // indirect github.com/google/uuid v1.6.0 // indirect - github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869 // indirect github.com/jinzhu/inflection v1.0.0 // indirect github.com/jinzhu/now v1.1.5 // indirect - github.com/jonboulle/clockwork v0.5.0 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/klauspost/cpuid/v2 v2.2.10 // indirect github.com/kr/fs v0.1.0 // indirect github.com/leodido/go-urn v1.4.0 // indirect - github.com/lestrrat/go-envload v0.0.0-20180220120943-6ed08b54a570 // indirect - github.com/lestrrat/go-strftime v0.0.0-20180220042222-ba3bf9c1d042 // indirect github.com/lufia/plan9stats v0.0.0-20250317134145-8bc96cf8fc35 // indirect github.com/mailru/easyjson v0.9.0 // indirect github.com/mattn/go-isatty v0.0.20 // indirect - github.com/mattn/go-sqlite3 v1.14.27 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/ncruces/go-strftime v0.1.9 // indirect - github.com/onsi/ginkgo v1.16.5 // indirect - github.com/onsi/gomega v1.37.0 // indirect github.com/orcaman/concurrent-map/v2 v2.0.1 // indirect github.com/pelletier/go-toml/v2 v2.2.4 // indirect github.com/pkg/errors v0.9.1 // indirect @@ -107,15 +97,10 @@ require ( github.com/richardlehane/mscfb v1.0.4 // indirect github.com/richardlehane/msoleps v1.0.4 // indirect github.com/sagikazarmark/locafero v0.9.0 // indirect - github.com/shirou/gopsutil/v3 v3.24.5 // indirect - github.com/shoenig/go-m1cpu v0.1.6 // indirect - github.com/sirupsen/logrus v1.9.3 // indirect github.com/sourcegraph/conc v0.3.0 // indirect github.com/spf13/afero v1.14.0 // indirect github.com/spf13/cast v1.7.1 // indirect github.com/subosito/gotenv v1.6.0 // indirect - github.com/syndtr/goleveldb v1.0.0 // indirect - github.com/tebeka/strftime v0.1.5 // indirect github.com/tklauser/go-sysconf v0.3.15 // indirect github.com/tklauser/numcpus v0.10.0 // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // indirect @@ -127,15 +112,14 @@ require ( golang.org/x/arch v0.16.0 // indirect golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0 // indirect golang.org/x/image v0.26.0 // indirect - golang.org/x/net v0.39.0 // indirect - golang.org/x/sync v0.14.0 // indirect - golang.org/x/sys v0.33.0 // indirect - golang.org/x/tools v0.32.0 // indirect + golang.org/x/mod v0.26.0 // indirect + golang.org/x/net v0.42.0 // indirect + golang.org/x/sync v0.16.0 // indirect + golang.org/x/sys v0.34.0 // indirect + golang.org/x/tools v0.35.0 // indirect google.golang.org/protobuf v1.36.6 // indirect - gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect modernc.org/libc v1.62.1 // indirect modernc.org/mathutil v1.7.1 // indirect modernc.org/memory v1.9.1 // indirect modernc.org/sqlite v1.37.0 // indirect - xorm.io/builder v0.3.13 // indirect ) diff --git a/go.sum b/go.sum index 67d7925c..1292a6bd 100644 --- a/go.sum +++ b/go.sum @@ -1,10 +1,11 @@ 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= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/Azure/go-ntlmssp v0.0.0-20221128193559-754e69321358 h1:mFRzDkZVAjdal+s7s0MwaRv9igoPqLRdzOLzw/8Xvq8= +github.com/Azure/go-ntlmssp v0.0.0-20221128193559-754e69321358/go.mod h1:chxPXzSsl7ZWRAuOIE23GDNzjWuZquvFlgA8xmpunjU= github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc= github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE= +github.com/alexbrainman/sspi v0.0.0-20231016080023-1a75b4708caa h1:LHTHcTQiSGT7VVbI0o4wBRNQIgn917usHWOd6VAffYI= +github.com/alexbrainman/sspi v0.0.0-20231016080023-1a75b4708caa/go.mod h1:cEWa1LVoE5KvSD9ONXsZrj0z6KqySlCCNKHlLzbqAt4= 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/bits-and-blooms/bitset v1.2.0 h1:Kn4yilvwNtMACtf1eYDlG8H77R07mZSPbMjLyS07ChA= @@ -23,7 +24,6 @@ github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XL github.com/cloudwego/base64x v0.1.5 h1:XPciSp1xaq2VCSt6lF0phncD4koWyULpl5bUxbfCyP4= github.com/cloudwego/base64x v0.1.5/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w= github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/creack/pty v1.1.24 h1:bJrF4RRfyJnbTJqzRLHzcGaZK1NeM5kTC9jGgovnR1s= github.com/creack/pty v1.1.24/go.mod h1:08sCNb52WyoAwi2QDyzUCTgcvVFhUzewun7wtTfvcwE= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -35,14 +35,12 @@ github.com/dlclark/regexp2 v1.11.5 h1:Q/sSnsKerHeCkc/jSTNq1oCm7KiVgUMZRDUoRu0JQZ github.com/dlclark/regexp2 v1.11.5/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= -github.com/ebitengine/purego v0.8.2 h1:jPPGWs2sZ1UgOSgD2bClL0MJIqu58nOmIcBuXr62z1I= -github.com/ebitengine/purego v0.8.2/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/ebitengine/purego v0.8.4 h1:CF7LEKg5FFOsASUj0+QwaXf8Ht6TlFxg09+S9wz0omw= +github.com/ebitengine/purego v0.8.4/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= +github.com/expr-lang/expr v1.17.5 h1:i1WrMvcdLF249nSNlpQZN1S6NXuW9WaOfF5tPi3aw3k= +github.com/expr-lang/expr v1.17.5/go.mod h1:8/vRC7+7HBzESEqt5kKpYXxrxkr31SaO8r40VO/1IT4= 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= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k= github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= github.com/gabriel-vasile/mimetype v1.4.8 h1:FfZ3gj38NjllZIeJAmMhr+qKL8Wu+nOoI3GqacKw1NM= @@ -51,12 +49,16 @@ github.com/gin-contrib/gzip v0.0.6 h1:NjcunTcGAj5CO1gn4N8jHOSIeRFHIbn51z6K+xaN4d github.com/gin-contrib/gzip v0.0.6/go.mod h1:QOJlmV2xmayAjkNS2Y8NQsMneuRShOU/kjovCXNuzzk= github.com/gin-contrib/sse v1.1.0 h1:n0w2GMuUpWDVp7qSpvze6fAu9iRxJY4Hmj6AmBOU05w= github.com/gin-contrib/sse v1.1.0/go.mod h1:hxRZ5gVpWMT7Z0B0gSNYqqsSCNIJMjzvm6fqCz9vjwM= -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/gin-gonic/gin v1.10.1 h1:T0ujvqyCSqRopADpgPgiTT63DUQVSfojyME59Ei63pQ= +github.com/gin-gonic/gin v1.10.1/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y= github.com/glebarez/go-sqlite v1.22.0 h1:uAcMJhaA6r3LHMTFgP0SifzgXg46yJkgxqyuyec+ruQ= github.com/glebarez/go-sqlite v1.22.0/go.mod h1:PlBIdHe0+aUEFn+r2/uthrWq4FxbzugL0L8Li6yQJbc= github.com/glebarez/sqlite v1.11.0 h1:wSG0irqzP6VurnMEpFGer5Li19RpIRi2qvQz++w0GMw= github.com/glebarez/sqlite v1.11.0/go.mod h1:h8/o8j5wiAsqSPoWELDUdJXhjAhsVliSn7bWZjOhrgQ= +github.com/go-asn1-ber/asn1-ber v1.5.8-0.20250403174932-29230038a667 h1:BP4M0CvQ4S3TGls2FvczZtj5Re/2ZzkV9VwqPHH/3Bo= +github.com/go-asn1-ber/asn1-ber v1.5.8-0.20250403174932-29230038a667/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0= +github.com/go-ldap/ldap/v3 v3.4.11 h1:4k0Yxweg+a3OyBLjdYn5OKglv18JNvfDykSoI8bW0gU= +github.com/go-ldap/ldap/v3 v3.4.11/go.mod h1:bY7t0FLK8OAVpp/vV6sSlpz3EQDGcQwc8pF0ujLgKvM= 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= @@ -76,65 +78,48 @@ github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJn github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= github.com/go-playground/validator/v10 v10.26.0 h1:SP05Nqhjcvz81uJaRfEV0YBSSSGMc/iMaVtFbr3Sw2k= github.com/go-playground/validator/v10 v10.26.0/go.mod h1:I5QpIEbmr8On7W0TktmJAumgzX4CA1XNl4ZmDuVHKKo= -github.com/go-resty/resty/v2 v2.16.5 h1:hBKqmWrr7uRc3euHVqmh1HTHcKn99Smr7o5spptdhTM= -github.com/go-resty/resty/v2 v2.16.5/go.mod h1:hkJtXbA2iKHzJheXYvQ8snQES5ZLGKMwQ07xAwp/fiA= -github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI= -github.com/go-sql-driver/mysql v1.9.2 h1:4cNKDYQ1I84SXslGddlsrMhc8k4LeDVj6Ad6WRjiHuU= -github.com/go-sql-driver/mysql v1.9.2/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= -github.com/go-viper/mapstructure/v2 v2.2.1 h1:ZAaOCxANMuZx5RCeg0mBdEZk7DZasvvZIxtHqx8aGss= -github.com/go-viper/mapstructure/v2 v2.2.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= +github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y= +github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg= +github.com/go-viper/mapstructure/v2 v2.4.0 h1:EBsztssimR/CONLSZZ04E8qAkxNYq4Qp9LvH92wZUgs= +github.com/go-viper/mapstructure/v2 v2.4.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= github.com/goccy/go-json v0.10.5 h1:Fq85nIqj+gXn/S5ahsiTlK3TmC85qgirsdTP/+DeaC4= github.com/goccy/go-json v0.10.5/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= github.com/godoes/ginprom v0.3.7 h1:HlKZhp2qS23YPpBWrP1K1+XZQFVruC6leUqkm/1ImFE= github.com/godoes/ginprom v0.3.7/go.mod h1:U6qRPc3I1sFtgbMDrnea4sDNYcc47b5e/ZHtCW3KFtY= -github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8= -github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= +github.com/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo= +github.com/golang-jwt/jwt/v5 v5.3.0/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE= 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/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= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -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/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v1.0.0 h1:Oy607GVXHs7RtbggtPBnr2RmDArIsAefDwvrdWvRhGs= -github.com/golang/snappy v1.0.0/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= 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/pprof v0.0.0-20250317173921-a4b03ec1a45e h1:ijClszYn+mADRFY17kjQEVQ1XRhq2/JR1M3sGqeJoxs= github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e/go.mod h1:boTsfXsheKC2y+lKOCMpSfarhxDeIzfZG1jqGcPl3cA= 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/gopacket/gopacket v1.3.1 h1:ZppWyLrOJNZPe5XkdjLbtuTkfQoxQ0xyMJzQCqtqaPU= -github.com/gopacket/gopacket v1.3.1/go.mod h1:3I13qcqSpB2R9fFQg866OOgzylYkZxLTmkvcXhvf6qg= -github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= -github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= +github.com/gopacket/gopacket v1.4.0 h1:cr1OlFpzksCkZHNO0eLjaSSOrMQnpPXg0j6qHIY3y2U= +github.com/gopacket/gopacket v1.4.0/go.mod h1:EpvsxINeehp5qj4YMKMLf2/dekdhKn2IIAO/ZOifS7o= github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gosnmp/gosnmp v1.36.2-0.20231009064202-d306ed5aa998/go.mod h1:O938QjIS4vpSag1UTcnnBq9MfNmimuOGtvQsT1NbErc= -github.com/gosnmp/gosnmp v1.40.0 h1:MvSqHZaNnhMKdn5IVhyYzCsVfXV1lgg6ZgLRku7FVcM= -github.com/gosnmp/gosnmp v1.40.0/go.mod h1:CxVS6bXqmWZlafUj9pZUnQX5e4fAltqPcijxWpCitDo= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -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/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8= +github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/jcmturner/aescts/v2 v2.0.0 h1:9YKLH6ey7H4eDBXW8khjYslgyqG2xZikXP0EQFKrle8= +github.com/jcmturner/aescts/v2 v2.0.0/go.mod h1:AiaICIRyfYg35RUkr8yESTqvSy7csK90qZ5xfvvsoNs= +github.com/jcmturner/dnsutils/v2 v2.0.0 h1:lltnkeZGL0wILNvrNiVCR6Ro5PGU/SeBvVO/8c/iPbo= +github.com/jcmturner/dnsutils/v2 v2.0.0/go.mod h1:b0TnjGOvI/n42bZa+hmXL+kFJZsFT7G4t3HTlQ184QM= +github.com/jcmturner/gofork v1.7.6 h1:QH0l3hzAU1tfT3rZCnW5zXl+orbkNMMRGJfdJjHVETg= +github.com/jcmturner/gofork v1.7.6/go.mod h1:1622LH6i/EZqLloHfE7IeZ0uEJwMSUyQ/nDd82IeqRo= +github.com/jcmturner/goidentity/v6 v6.0.1 h1:VKnZd2oEIMorCTsFBnJWbExfNN7yZr3EhJAxwOkZg6o= +github.com/jcmturner/goidentity/v6 v6.0.1/go.mod h1:X1YW3bgtvwAXju7V3LCIMpY0Gbxyjn/mY9zx4tFonSg= +github.com/jcmturner/gokrb5/v8 v8.4.4 h1:x1Sv4HaTpepFkXbt2IkL29DXRf8sOfZXo8eRKh687T8= +github.com/jcmturner/gokrb5/v8 v8.4.4/go.mod h1:1btQEpgT6k+unzCwX1KdWMEwPPkkgBtP+F6aCACiMrs= +github.com/jcmturner/rpc/v2 v2.0.3 h1:7FXXj8Ti1IaVFpSAziCZWNzbNuZmnvw/i6CqLNdWfZY= +github.com/jcmturner/rpc/v2 v2.0.3/go.mod h1:VUJYCIDm3PVOEHw8sgt091/20OJjskO/YJki3ELg/Hc= 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/jonboulle/clockwork v0.5.0 h1:Hyh9A8u51kptdkR+cqRpT1EebBwTn1oK9YfGYbdFz6I= -github.com/jonboulle/clockwork v0.5.0/go.mod h1:3mZlmanh0g2NDKO5TWZVJAfofYk64M7XN3SzBPjZF60= 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/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= @@ -145,7 +130,6 @@ github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa02 github.com/klauspost/cpuid/v2 v2.2.10 h1:tBs3QSyvjDyFTq3uoc/9xFpCuOsJQFNPiAhYdw2skhE= github.com/klauspost/cpuid/v2 v2.2.10/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= @@ -156,15 +140,8 @@ github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0 github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= -github.com/lestrrat/go-envload v0.0.0-20180220120943-6ed08b54a570 h1:0iQektZGS248WXmGIYOwRXSQhD4qn3icjMpuxwO7qlo= -github.com/lestrrat/go-envload v0.0.0-20180220120943-6ed08b54a570/go.mod h1:BLt8L9ld7wVsvEWQbuLrUZnCMnUmLZ+CGDzKtclrTlE= -github.com/lestrrat/go-file-rotatelogs v0.0.0-20180223000712-d3151e2a480f h1:sgUSP4zdTUZYZgAGGtN5Lxk92rK+JUFOwf+FT99EEI4= -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/linxGnu/gosmpp v0.3.1 h1:8weIv03SG8+k/vI3bO7SnZ6URjqpXy2B8EJQkPzwmjI= github.com/linxGnu/gosmpp v0.3.1/go.mod h1:H5Ca2UBCIYast4KRjc3hwgOkjzpghr4CB77jueWGQmc= -github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= github.com/lufia/plan9stats v0.0.0-20250317134145-8bc96cf8fc35 h1:PpXWgLPs+Fqr325bN2FD2ISlRRztXibcX6e8f5FR5Dc= github.com/lufia/plan9stats v0.0.0-20250317134145-8bc96cf8fc35/go.mod h1:autxFIvghDt3jPTLoqZ9OZ7s9qTGNAWmYCjVFWPX/zg= github.com/mailru/easyjson v0.9.0 h1:PrnmzHw7262yW8sTBwxi1PdJA3Iw/EKBa8psRf7d9a4= @@ -173,8 +150,6 @@ github.com/matoous/go-nanoid/v2 v2.1.0 h1:P64+dmq21hhWdtvZfEAofnvJULaRR1Yib0+PnU github.com/matoous/go-nanoid/v2 v2.1.0/go.mod h1:KlbGNQ+FhrUNIHUxZdL63t7tl4LaPkZNpUULS8H4uVM= 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.27 h1:drZCnuvf37yPfs95E5jd9s3XhdVWLal+6BOK6qrv6IU= -github.com/mattn/go-sqlite3 v1.14.27/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -190,19 +165,6 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdhx/f4= github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= -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= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -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/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= -github.com/onsi/gomega v1.37.0 h1:CdEG8g0S133B4OswTDC/5XPSzE1OeP29QOioj2PID2Y= -github.com/onsi/gomega v1.37.0/go.mod h1:8D9+Txp43QWKhM24yyOBEdpkzN8FvJyAwecBgsU4KU0= github.com/orcaman/concurrent-map/v2 v2.0.1 h1:jOJ5Pg2w1oeB6PeDurIYf6k9PQ+aTITr/6lP/L/zp6c= github.com/orcaman/concurrent-map/v2 v2.0.1/go.mod h1:9Eq3TG2oBe5FirmYWQfYO5iH1q0Jv47PLaNK++uCdOM= github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4= @@ -215,7 +177,6 @@ github.com/pkg/sftp v1.13.9 h1:4NGkvGudBL7GteO3m6qnaQ4pC0Kvf0onSVc9gR3EWBw= github.com/pkg/sftp v1.13.9/go.mod h1:OBN7bVXdstkFFN/gdnHPUb5TE8eb8G1Rp9wCItqjkkA= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 h1:o4JXh1EVt9k/+g42oCprj/FisM4qX9L3sZB3upGN2ZU= github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= github.com/prometheus-community/pro-bing v0.7.0 h1:KFYFbxC2f2Fp6c+TyxbCOEarf7rbnzr9Gw8eIb0RfZA= @@ -226,11 +187,10 @@ github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNw github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE= github.com/prometheus/common v0.63.0 h1:YR/EIY1o3mEFP/kZCD7iDMnLPlGyuU2Gb3HIcXnA98k= github.com/prometheus/common v0.63.0/go.mod h1:VVFF/fBIoToEnWRVkYoXEkq3R3paCoxG9PXP74SnV18= -github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.16.0 h1:xh6oHhKwnOJKMYiYBDWmkHqQPyiY40sny36Cmx2bbsM= github.com/prometheus/procfs v0.16.0/go.mod h1:8veyXUu3nGP7oaCxhX6yeaM5u4stL2FeMXnCqhDthZg= -github.com/redis/go-redis/v9 v9.8.0 h1:q3nRvjrlge/6UD7eTu/DSg2uYiU2mCL0G/uzBWqhicI= -github.com/redis/go-redis/v9 v9.8.0/go.mod h1:huWgSWd8mW6+m0VPhJjSSQ+d6Nh1VICQ6Q5lHuCH/Iw= +github.com/redis/go-redis/v9 v9.11.0 h1:E3S08Gl/nJNn5vkxd2i78wZxWAPNZgUNTp8WIJUAiIs= +github.com/redis/go-redis/v9 v9.11.0/go.mod h1:huWgSWd8mW6+m0VPhJjSSQ+d6Nh1VICQ6Q5lHuCH/Iw= github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/richardlehane/mscfb v1.0.4 h1:WULscsljNPConisD5hR0+OyZjwK46Pfyr6mPu5ZawpM= @@ -242,46 +202,28 @@ github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= 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/locafero v0.9.0 h1:GbgQGNtTrEmddYDSAH9QLRyfAHY12md+8YFTqyMTC9k= github.com/sagikazarmark/locafero v0.9.0/go.mod h1:UBUyz37V+EdMS3hDF3QWIiVr/2dPrx49OMO0Bn0hJqk= -github.com/shirou/gopsutil/v3 v3.23.11/go.mod h1:1FrWgea594Jp7qmjHUUPlJDTPgcsb9mGnXDxavtikzM= -github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= -github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= -github.com/shirou/gopsutil/v4 v4.25.4 h1:cdtFO363VEOOFrUCjZRh4XVJkb548lyF0q0uTeMqYPw= -github.com/shirou/gopsutil/v4 v4.25.4/go.mod h1:xbuxyoZj+UsgnZrENu3lQivsngRR5BdjbJwf2fv4szA= -github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= -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/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= -github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= -github.com/slayercat/GoSNMPServer v0.5.2 h1:IK2d3kz6JoiYHbAZT5H7hrQQRzAD7rxF0iJZxWrV7Ns= -github.com/slayercat/GoSNMPServer v0.5.2/go.mod h1:6taMSIwudR+7pKRO6dz2U+xoNccZds8eiMVlEN66fXY= +github.com/shirou/gopsutil/v4 v4.25.7 h1:bNb2JuqKuAu3tRlPv5piSmBZyMfecwQ+t/ILq+1JqVM= +github.com/shirou/gopsutil/v4 v4.25.7/go.mod h1:XV/egmwJtd3ZQjBpJVY5kndsiOO4IRqy9TQnmm6VP7U= github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= github.com/spf13/afero v1.14.0 h1:9tH6MapGnn/j0eb0yIXiLjERO8RB6xIVZRDCX7PtqWA= github.com/spf13/afero v1.14.0/go.mod h1:acJQ8t0ohCGuMN3O+Pv0V0hgMxNYDlvdk+VTfyZmbYo= github.com/spf13/cast v1.7.1 h1:cuNEagBQEHWN1FnbGEjCXL2szYEXqfJPbP2HNUaca9Y= github.com/spf13/cast v1.7.1/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= -github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o= -github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/pflag v1.0.7 h1:vN6T9TfwStFPFM5XzjsvmzZkLuaLX+HS+0SeFLRgU6M= +github.com/spf13/pflag v1.0.7/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.20.1 h1:ZMi+z/lvLyPSCoNtFCpqjy0S4kPbirhpTMwl8BkW9X4= github.com/spf13/viper v1.20.1/go.mod h1:P9Mdzt1zoHIG8m2eZQinpiBjo6kCmZSKBClNNqjJvu4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= @@ -290,37 +232,31 @@ github.com/swaggo/files v1.0.1 h1:J1bVJ4XHZNq0I46UU90611i9/YzdrF7x92oX1ig5IdE= github.com/swaggo/files v1.0.1/go.mod h1:0qXmMNH6sXNf+73t65aKeB+ApmgxdnkQzVTAj2uaMUg= github.com/swaggo/gin-swagger v1.6.0 h1:y8sxvQ3E20/RCyrXeFfg60r6H0Z+SwpTjMYsMm+zy8M= github.com/swaggo/gin-swagger v1.6.0/go.mod h1:BG00cCEy294xtVpyIAHG6+e2Qzj/xKlRdOqDkvq0uzo= -github.com/swaggo/swag v1.16.4 h1:clWJtd9LStiG3VeijiCfOVODP6VpHtKdQy9ELFG3s1A= -github.com/swaggo/swag v1.16.4/go.mod h1:VBsHJRsDvfYvqoiMKnsdwhNV9LEMHgEDZcyVYX0sxPg= -github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE= -github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= -github.com/tebeka/strftime v0.1.5 h1:1NQKN1NiQgkqd/2moD6ySP/5CoZQsKa1d3ZhJ44Jpmg= -github.com/tebeka/strftime v0.1.5/go.mod h1:29/OidkoWHdEKZqzyDLUyC+LmgDgdHo4WAFCDT7D/Ig= -github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= +github.com/swaggo/swag v1.16.6 h1:qBNcx53ZaX+M5dxVyTrgQ0PJ/ACK+NzhwcbieTt+9yI= +github.com/swaggo/swag v1.16.6/go.mod h1:ngP2etMK5a0P3QBizic5MEwpRmluJZPHjXcMoj4Xesg= github.com/tklauser/go-sysconf v0.3.15 h1:VE89k0criAymJ/Os65CSn1IXaol+1wrsFHEB8Ol49K4= github.com/tklauser/go-sysconf v0.3.15/go.mod h1:Dmjwr6tYFIseJw7a3dRLJfsHAMXZ3nEnL/aZY+0IuI4= -github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= github.com/tklauser/numcpus v0.10.0 h1:18njr6LDBk1zuna922MgdjQuJFjrdppsZG60sHGfjso= github.com/tklauser/numcpus v0.10.0/go.mod h1:BiTKazU708GQTYF4mB+cmlpT2Is1gLk7XVuEeem8LsQ= +github.com/tsmask/go-oam v1.0.7 h1:muMa7oL3QKljCYf4aXbaIM9Qydn59TFSeswi4LqT24o= +github.com/tsmask/go-oam v1.0.7/go.mod h1:HqFtN0LA9BiR1HWyHO++DY0fyYTl2sKVnRrZzuWy9n4= github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= 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/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/wneessen/go-mail v0.6.2 h1:c6V7c8D2mz868z9WJ+8zDKtUyLfZ1++uAZmo2GRFji8= +github.com/wneessen/go-mail v0.6.2/go.mod h1:L/PYjPK3/2ZlNb2/FjEBIn9n1rUWjW+Toy531oVmeb4= github.com/xuri/efp v0.0.0-20250227110027-3491fafc2b79 h1:78nKszZqigiBRBVcoe/AuPzyLTWW5B+ltBaUX1rlIXA= github.com/xuri/efp v0.0.0-20250227110027-3491fafc2b79/go.mod h1:ybY/Jr0T0GTCnYjKqmdwxyxn2BQf2RcQIIvex5QldPI= github.com/xuri/excelize/v2 v2.9.0 h1:1tgOaEq92IOEumR1/JfYS/eR0KHOCsRv/rYXXh6YJQE= github.com/xuri/excelize/v2 v2.9.0/go.mod h1:uqey4QBZ9gdMeWApPLdhm9x+9o2lq4iVmjiLfBS5hdE= github.com/xuri/nfp v0.0.0-20250226145837-86d5fc24b2ba h1:DhIu6n3qU0joqG9f4IO6a/Gkerd+flXrmlJ+0yX2W8U= github.com/xuri/nfp v0.0.0-20250226145837-86d5fc24b2ba/go.mod h1:WwHg+CVyzlv/TX9xqBFXEZAuxOPxn2k1GNHwG41IIUQ= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -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= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= @@ -328,38 +264,28 @@ go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN8 golang.org/x/arch v0.16.0 h1:foMtLTdyOmIniqWCHjY6+JxuC54XP1fDwx4N0ASyW+U= golang.org/x/arch v0.16.0/go.mod h1:JmwW7aLIoRUKgaTzhkiEFxvcEiQGyOg9BMonBJUS7EE= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= -golang.org/x/crypto v0.38.0 h1:jt+WWG8IZlBnVbomuhg2Mdq0+BBQaHbtqHEFEigjUV8= -golang.org/x/crypto v0.38.0/go.mod h1:MvrbAqul58NNYPKnOra203SB9vpuZW0e+RRZV+Ggqjw= +golang.org/x/crypto v0.33.0/go.mod h1:bVdXmD7IV/4GdElGPozy6U7lWdRXA4qyRVGJV57uQ5M= +golang.org/x/crypto v0.40.0 h1:r4x+VvoG5Fm+eJcxMaY8CQM7Lb0l1lsmjGBQ6s8BfKM= +golang.org/x/crypto v0.40.0/go.mod h1:Qr1vMER5WyS2dfPHAlsOj01wgLbsyWtFn/aY+5+ZdxY= golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0 h1:R84qjqJb5nVJMxqWYb3np9L5ZsaDtB+a39EqjV0JSUM= golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0/go.mod h1:S9Xr4PYopiDyqSyp5NjCrhFrqg6A5zA2E/iPHPhqnS8= golang.org/x/image v0.23.0/go.mod h1:wJJBTdLfCCf3tiHa1fNxpZmUI4mmoZvwMCPP0ddoNKY= golang.org/x/image v0.26.0 h1:4XjIFEZWQmCZi6Wv8BoxsDhRU3RVnLX04dToTDAEPlY= golang.org/x/image v0.26.0/go.mod h1:lcxbMFAovzpnJxzXS3nyL83K27tmqtKzIJpctK8YO5c= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/mod v0.24.0 h1:ZfthKaKaT4NrhGVZHO1/WDTwGES4De8KtWO0SIbNJMU= -golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/mod v0.26.0 h1:EGMPT//Ezu+ylkCijjPc+f4Aih7sZvaAr+O3EHBxvZg= +golang.org/x/mod v0.26.0/go.mod h1:/j6NAhSk8iQ723BGAUyoAcn7SlD7s15Dp9Nd/SfeaFQ= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= @@ -367,53 +293,38 @@ golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= -golang.org/x/net v0.39.0 h1:ZCu7HMWDxpXpaiKdhzIfaltL9Lp31x/3fCP11bc6/fY= -golang.org/x/net v0.39.0/go.mod h1:X7NRbYVEA+ewNkCNyJ513WmMdQ3BineSwVtN2zD/d+E= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/net v0.42.0 h1:jzkYrhi3YQWD6MLBJcsklgQsoAcw89EcZbJw8Z614hs= +golang.org/x/net v0.42.0/go.mod h1:FF1RA5d3u7nAYA4z2TkclSCKh68eSXtiFwcWQpPXdt8= +golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI= +golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU= 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= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sync v0.14.0 h1:woo0S4Yywslg6hp4eUFjTVOyKt0RookbpAHG4c1HmhQ= -golang.org/x/sync v0.14.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw= +golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw= -golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.34.0 h1:H5Y5sJ2L2JRdyv7ROF1he/lPdvFsd0mJHFw2ThKHxLA= +golang.org/x/sys v0.34.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE= 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= @@ -423,8 +334,9 @@ golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= -golang.org/x/term v0.32.0 h1:DR4lr0TjUs3epypdhTOkMmuF5CDFJ/8pOnbzMZPQ7bg= -golang.org/x/term v0.32.0/go.mod h1:uZG1FhGx848Sqfsq4/DlJr3xGGsYMu/L5GW4abiaEPQ= +golang.org/x/term v0.29.0/go.mod h1:6bl4lRlvVuDgSf3179VpIxBF0o10JUpXWOnI7nErv7s= +golang.org/x/term v0.33.0 h1:NuFncQrRcaRvVmgRkvM3j/F00gWIAlcmlB8ACEKmGIg= +golang.org/x/term v0.33.0/go.mod h1:s18+ql9tYWp1IfpV9DmCtQDDSRBUjKaw9M1eAv5UeF0= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= @@ -434,55 +346,30 @@ golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= -golang.org/x/text v0.25.0 h1:qVyWApTSYLk/drJRO5mDlNYskwQznZmkpV2c8q9zls4= -golang.org/x/text v0.25.0/go.mod h1:WEdwpYrmk1qmdHvhkSTNPm3app7v4rsT8F2UD6+VHIA= -golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U= -golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= +golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= +golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= -golang.org/x/tools v0.32.0 h1:Q7N1vhpkQv7ybVzLFtTjvQya2ewbwNDZzUgfXGqtMWU= -golang.org/x/tools v0.32.0/go.mod h1:ZxrU41P/wAbZD8EDa6dDCa6XfpkhJ7HFMjHJXfBDu8s= +golang.org/x/tools v0.35.0 h1:mBffYraMEf7aa0sB+NuKnuCy8qI/9Bughn8dC2Gu5r0= +golang.org/x/tools v0.35.0/go.mod h1:NKdj5HkL/73byiZSJjqJgKn3ep7KjFkBOkR/Hps3VPw= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -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= -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= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY= google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY= -gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc h1:2gGKlE2+asNV9m7xrywl36YYNnBG5ZQ0r/BOOxqPpmk= -gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df h1:n7WqCuqOuCbNr617RXOY0AWRXxgwEyPp2z+p0+hgMuE= -gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df/go.mod h1:LRQQ+SO6ZHR7tOkpBDuZnXENFzX8qRjMDMyPD6BRkCw= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -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.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gorm.io/driver/mysql v1.5.7 h1:MndhOPYOfEp2rHKgkZIhJ16eVUIRf2HmzgoPmh7FCWo= -gorm.io/driver/mysql v1.5.7/go.mod h1:sEtPWMiqiN1N1cMXoXmBbd8C6/l+TESwriotuRRpkDM= -gorm.io/gorm v1.25.7/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8= -gorm.io/gorm v1.26.1 h1:ghB2gUI9FkS46luZtn6DLZ0f6ooBJ5IbVej2ENFDjRw= -gorm.io/gorm v1.26.1/go.mod h1:8Z33v652h4//uMA76KjeDH8mJXPm1QNCYrMeatR0DOE= +gorm.io/driver/mysql v1.6.0 h1:eNbLmNTpPpTOVZi8MMxCi2aaIm0ZpInbORNXDwyLGvg= +gorm.io/driver/mysql v1.6.0/go.mod h1:D/oCC2GWK3M/dqoLxnOlaNKmXz8WNTfcS9y5ovaSqKo= +gorm.io/gorm v1.30.0 h1:qbT5aPv1UH8gI99OsRlvDToLxW5zR7FzS9acZDOZcgs= +gorm.io/gorm v1.30.0/go.mod h1:8Z33v652h4//uMA76KjeDH8mJXPm1QNCYrMeatR0DOE= modernc.org/cc/v4 v4.25.2 h1:T2oH7sZdGvTaie0BRNFbIYsabzCxUQg8nLqCdQ2i0ic= modernc.org/cc/v4 v4.25.2/go.mod h1:uVtb5OGqUKpoLWhqwNQo/8LwvoiEBLvZXIQ/SmO6mL0= modernc.org/ccgo/v4 v4.25.1 h1:TFSzPrAGmDsdnhT9X2UrcPMI3N/mJ9/X9ykKXwLhDsU= @@ -508,7 +395,3 @@ modernc.org/strutil v1.2.1/go.mod h1:EHkiggD70koQxjVdSBM3JKM7k6L0FbGE5eymy9i3B9A modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y= modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50= -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= -xorm.io/xorm v1.3.9/go.mod h1:LsCCffeeYp63ssk0pKumP6l96WZcHix7ChpurcLNuMw= diff --git a/lib/aes/aes.go b/lib/aes/aes.go deleted file mode 100644 index 5ce2fb40..00000000 --- a/lib/aes/aes.go +++ /dev/null @@ -1,64 +0,0 @@ -package aes - -import ( - "bytes" - "crypto/aes" - "crypto/cipher" - "encoding/base64" -) - -func AesEncrypt(orig string, key string) string { - // 转成字节数组 - origData := []byte(orig) - k := []byte(key) - - // 分组秘钥 - block, _ := aes.NewCipher(k) - // 获取秘钥块的长度 - blockSize := block.BlockSize() - // 补全码 - origData = PKCS7Padding(origData, blockSize) - // 加密模式 - blockMode := cipher.NewCBCEncrypter(block, k[:blockSize]) - // 创建数组 - cryted := make([]byte, len(origData)) - // 加密 - blockMode.CryptBlocks(cryted, origData) - - return base64.StdEncoding.EncodeToString(cryted) - -} - -func AesDecrypt(cryted string, key string) string { - // 转成字节数组 - crytedByte, _ := base64.StdEncoding.DecodeString(cryted) - k := []byte(key) - - // 分组秘钥 - block, _ := aes.NewCipher(k) - // 获取秘钥块的长度 - blockSize := block.BlockSize() - // 加密模式 - blockMode := cipher.NewCBCDecrypter(block, k[:blockSize]) - // 创建数组 - orig := make([]byte, len(crytedByte)) - // 解密 - blockMode.CryptBlocks(orig, crytedByte) - // 去补全码 - orig = PKCS7UnPadding(orig) - return string(orig) -} - -// 补码 -func PKCS7Padding(ciphertext []byte, blocksize int) []byte { - padding := blocksize - len(ciphertext)%blocksize - padtext := bytes.Repeat([]byte{byte(padding)}, padding) - return append(ciphertext, padtext...) -} - -// 去码 -func PKCS7UnPadding(origData []byte) []byte { - length := len(origData) - unpadding := int(origData[length-1]) - return origData[:(length - unpadding)] -} diff --git a/lib/config/config.go b/lib/config/config.go deleted file mode 100644 index 2ba6afae..00000000 --- a/lib/config/config.go +++ /dev/null @@ -1,475 +0,0 @@ -package config - -import ( - "bufio" - "fmt" - "os" - "reflect" - "strings" - - "be.ems/lib/global" - "be.ems/lib/log" - - "gopkg.in/yaml.v3" -) - -// Yaml struct of config -type YamlConfig struct { - Logger struct { - File string `yaml:"file"` - Level string `yaml:"level"` - Duration int `yaml:"duration"` - Count int `yaml:"count"` - } `yaml:"logger"` - - OMC struct { - UriPrefix string `yaml:"uriPrefix"` - NeType string `yaml:"neType"` - NeId string `yaml:"neId"` - RmUID string `yaml:"rmUID"` - NeName string `yaml:"neName"` - Province string `yaml:"province"` - Vendor string `yaml:"vendor"` - Dn string `yaml:"dn"` - Chk2Ne bool `yaml:"chk2ne"` - Capability uint32 `yaml:"capability"` - Sn string `yaml:"sn"` - ExpiryDate string `yaml:"expiryDate"` - CheckSign bool `yaml:"checksign"` - RootDir string `yaml:"rootDir"` - BinDir string `yaml:"binDir"` - Backup string `yaml:"backup"` - Upload string `yaml:"upload"` - FrontUpload string `yaml:"frontUpload"` - FrontTraceDir string `yaml:"frontTraceDir"` - Software string `yaml:"software"` - License string `yaml:"license"` - GtpUri string `yaml:"gtpUri"` - CheckContentType bool `yaml:"checkContentType"` - TestMode bool `yaml:"testMode"` - RBACMode bool `yaml:"rbacMode"` - RunDir string `yaml:"runDir"` - CmdTimeout int `yaml:"cmdTimeout"` - } `yaml:"omc"` - - Alarm AlarmConfig `yaml:"alarm"` - - MML MMLParam `yaml:"mml"` - - NE struct { - Addr string `yaml:"addr"` - Port uint16 `yaml:"port"` - User string `yaml:"user"` - EtcDir string `yaml:"etcdir"` - BinDir string `yaml:"bindir"` - OmcDir string `yaml:"omcdir"` - ScpDir string `yaml:"scpdir"` - LicenseDir string `yaml:"licensedir"` - EtcListIMS string `yaml:"etcListIMS"` - EtcListDefault string `yaml:"etcListDefault"` - DpkgOverwrite bool `yaml:"dpkgOverwrite"` - DpkgTimeout int `yaml:"dpkgTimeout"` - } `yaml:"ne"` - - Auth struct { - Crypt string `yaml:"crypt"` - Token bool `yaml:"token"` - Expires uint32 `yaml:"expires"` - Session string `yaml:"session"` - PublicKey string `yaml:"publicKey"` - PrivateKey string `yaml:"privateKey"` - } `yaml:"auth"` - - Params struct { - RmUIDMaxNum int `yaml:"rmuidmaxnum"` - AlarmIDMaxNum int `yaml:"alarmidmaxnum"` - PmIDMaxNum int `yaml:"pmidmaxnum"` - SubIDMaxNum int `yaml:"subidmaxnum"` - UriMaxLen int `yaml:"urimaxlen"` - RmUIDRegexp string `yaml:"rmuidregexp"` - } `yaml:"params"` - - TestConfig struct { - Enabled bool `yaml:"enabled"` - File string `yaml:"file"` - } `yaml:"testConfig"` -} - -// type DbConfig struct { -// Type string `yaml:"type"` -// User string `yaml:"user"` -// Password string `yaml:"password"` -// Host string `yaml:"host"` -// Port string `yaml:"port"` -// Name string `yaml:"name"` -// ConnParam string `yaml:"connParam,omitempty"` -// Backup string `yaml:"backup"` -// } - -type AlarmConfig struct { - SplitEventAlarm bool `yaml:"splitEventAlarm"` - //ForwardAlarm bool `yaml:"forwardAlarm"` - - EmailForward struct { - Enable bool `yaml:"enable" json:"enable"` - EmailList string `yaml:"emailList" json:"emailList"` - Title string `yaml:"title" json:"title"` - SMTP string `yaml:"smtp" json:"smtp"` - Port uint16 `yaml:"port" json:"port"` - User string `yaml:"user" json:"user"` - Password string `yaml:"password" json:"password"` - TLSSkipVerify bool `yaml:"tlsSkipVerify" json:"tlsSkipVerify"` - } `yaml:"alarmEmailForward"` - SMSCForward struct { - Enable bool `yaml:"enable" json:"enable"` - MobileList string `yaml:"mobileList" json:"mobileList"` - SMSCAddr string `yaml:"smscAddr" json:"smscAddr"` - SystemID string `yaml:"systemID" json:"systemID"` - Password string `yaml:"password" json:"password"` - SystemType string `yaml:"systemType" json:"systemType"` - DataCoding byte `yaml:"dataCoding" json:"dataCoding"` - ServiceNumber string `yaml:"serviceNumber" json:"serviceNumber"` - } `yaml:"alarmSMSForward"` - SMS struct { - ApiURL string `yaml:"apiURL"` - AccessKeyID string `yaml:"AccessKeyID"` - AccessKeySecret string `yaml:"accessKeySecret"` - SignName string `yaml:"signName"` - TemplateCode string `yaml:"templateCode"` - } `yaml:"smsForward"` - SMProxy string `yaml:"smProxy"` -} - -type MMLParam struct { - Sleep int64 `yaml:"sleep"` - DeadLine int64 `yaml:"deadLine"` - SizeRow int16 `yaml:"sizeRow"` - SizeCol int16 `yaml:"sizeCol"` - BufferSize int `yaml:"bufferSize"` - MmlHome string `yaml:"mmlHome"` -} - -type TestDatas struct { - UDM struct { - CapUsed uint32 `yaml:"capUsed"` - FeatureEnabled []string `yaml:"featureEnabled"` - } `yaml:"udm"` - AUSF struct { - CapUsed uint32 `yaml:"capUsed"` - FeatureEnabled []string `yaml:"featureEnabled"` - } `yaml:"ausf"` - AMF struct { - CapUsed uint32 `yaml:"capUsed"` - FeatureEnabled []string `yaml:"featureEnabled"` - } `yaml:"amf"` - SMF struct { - CapUsed uint32 `yaml:"capUsed"` - FeatureEnabled []string `yaml:"featureEnabled"` - } `yaml:"smf"` - UPF struct { - CapUsed uint32 `yaml:"capUsed"` - FeatureEnabled []string `yaml:"featureEnabled"` - } `yaml:"upf"` -} - -type NeTestData struct { - CapUsed uint32 `yaml:"capUsed"` - FeatureEnabled []string `yaml:"featureEnabled"` -} -type TestDataMap struct { - NeTestDatas []map[string]NeTestData -} - -var yamlConfig YamlConfig = NewYamlConfig() - -type YamlConfigFile struct { - FilePath string `json:"filePath"` - ConfigLines YamlConfig `json:"configLines"` - OrignalLines []string `json:"orignalLines"` -} - -var YamlConfigInfo YamlConfigFile = YamlConfigFile{ - ConfigLines: NewYamlConfig(), -} - -// set default value for yaml config -func NewYamlConfig() YamlConfig { - return YamlConfig{ - // Database: DbConfig{ - // Type: "mysql", - // ConnParam: "charset=utf8mb4&collation=utf8mb4_general_ci&parseTime=True&interpolateParams=True", - // }, - MML: MMLParam{ - SizeRow: 200, - SizeCol: 120, - BufferSize: 65535, - }, - Alarm: AlarmConfig{ - SplitEventAlarm: true, - }, - } -} - -func ReadConfig(configFile string) { - YamlConfigInfo.FilePath = configFile - - yamlFile, err := os.ReadFile(configFile) - if err != nil { - fmt.Println("Read yaml config file error:", err) - os.Exit(2) - } - // fmt.Println("yamlfile:", string(yamlFile)) - - err = yaml.Unmarshal(yamlFile, &YamlConfigInfo.ConfigLines) - if err != nil { - fmt.Println("Unmarshal error:", err) - os.Exit(3) - } - yamlConfig = YamlConfigInfo.ConfigLines - - ReadOriginalConfig(configFile) -} - -func ReadOriginalConfig(configFile string) { - // 读取原始YAML文件 - inputFile, err := os.Open(configFile) - if err != nil { - fmt.Println("failed to open:", err) - os.Exit(3) - } - defer inputFile.Close() - - scanner := bufio.NewScanner(inputFile) - for scanner.Scan() { - YamlConfigInfo.OrignalLines = append(YamlConfigInfo.OrignalLines, scanner.Text()) - } - - if err := scanner.Err(); err != nil { - fmt.Println("failed to scanner:", err) - os.Exit(3) - } -} - -func WriteOrignalConfig(configFile string, paramName string, paramData map[string]any) error { - lines := YamlConfigInfo.OrignalLines - for i, line := range lines { - if strings.Contains(line, paramName) { - for k, v := range paramData { - // find the first line nearby the paramName - for j := i + 1; j < len(lines); j++ { - if strings.Contains(lines[j], k+":") { - index := strings.Index(lines[j], k) - // Determine the type of v - switch v := v.(type) { - case string: - lines[j] = lines[j][:index] + fmt.Sprintf("%s: \"%s\"", k, v) - // case int: - // lines[j] = lines[j][:index] + fmt.Sprintf("%s: %d", k, v) - // case float64: - // lines[j] = lines[j][:index] + fmt.Sprintf("%s: %f", k, v) - case bool: - lines[j] = lines[j][:index] + fmt.Sprintf("%s: %t", k, v) - default: - lines[j] = lines[j][:index] + fmt.Sprintf("%s: %v", k, v) - } - break - } - } - } - break - } - } - - // write back to yaml file - outputFile, err := os.Create(configFile) - if err != nil { - fmt.Println(err) - return err - } - defer outputFile.Close() - - writer := bufio.NewWriter(outputFile) - for _, line := range YamlConfigInfo.OrignalLines { - writer.WriteString(line + "\n") - } - writer.Flush() - return nil -} - -func WriteYamlConfig(newConfigData YamlConfig, configFile string) error { - // 将配置转换回YAML数据 - newYamlData, err := yaml.Marshal(&newConfigData) - if err != nil { - log.Errorf("Failed to marshal YAML: %v", err) - return err - } - - // 将新的YAML数据写入文件 - err = os.WriteFile(configFile, newYamlData, 0644) - if err != nil { - log.Errorf("Failed to write YAML file: %v", err) - return err - } - return nil -} - -var mapYaml map[string]interface{} - -func ReadParamConfig(fileName string) *map[string]interface{} { - file, err := os.ReadFile(fileName) - if err != nil { - fmt.Println("Read yaml file error:", err) - } - - mapYaml = make(map[string]interface{}) - - err = yaml.Unmarshal(file, &mapYaml) - if err != nil { - fmt.Printf("yaml.Unmarshal: %v when to struct", err) - } - // fmt.Println("mapYaml:", mapYaml) - - return &mapYaml -} - -func UpdateStructFromMap(s any, updates map[string]any) { - v := reflect.ValueOf(s).Elem() - t := v.Type() - - for key, value := range updates { - for i := 0; i < t.NumField(); i++ { - field := t.Field(i) - if field.Tag.Get("json") == key { - structField := v.FieldByName(field.Name) - if structField.IsValid() && structField.CanSet() { - // Convert value to the appropriate type if necessary - convertedValue := reflect.ValueOf(value).Convert(structField.Type()) - if structField.Type() == convertedValue.Type() { - structField.Set(convertedValue) - } - } - break - } - } - } -} - -func GetYamlConfig() *YamlConfig { - return &YamlConfigInfo.ConfigLines -} - -func GetAuthFromConfig() interface{} { - return yamlConfig.Auth -} - -func GetExpiresFromConfig() uint32 { - return yamlConfig.Auth.Expires -} - -func GetRmUIDFromConfig() string { - return yamlConfig.OMC.RmUID -} - -func GetRmUIDRegexpFromConfig() string { - return yamlConfig.Params.RmUIDRegexp -} - -func GetRmUIDMaxNumFromConfig() int { - return yamlConfig.Params.RmUIDMaxNum -} - -func GetAlarmIDMaxNumFromConfig() int { - return yamlConfig.Params.AlarmIDMaxNum -} - -func GetPmIDMaxNumFromConfig() int { - return yamlConfig.Params.PmIDMaxNum -} - -func GetSubIDMaxNumFromConfig() int { - return yamlConfig.Params.SubIDMaxNum -} - -func GetUriMaxLenFromConfig() int { - return yamlConfig.Params.UriMaxLen -} - -func GetLogLevel() log.LogLevel { - var logLevel log.LogLevel - switch strings.ToLower(yamlConfig.Logger.Level) { - case "trace": - logLevel = log.LOG_TRACE - case "info": - logLevel = log.LOG_INFO - case "debug": - logLevel = log.LOG_DEBUG - case "warn": - logLevel = log.LOG_WARN - case "error": - logLevel = log.LOG_ERROR - case "fatal": - logLevel = log.LOG_FATAL - case "off": - logLevel = log.LOG_OFF - default: - logLevel = log.LOG_DEBUG - } - return logLevel -} - -var ( - DefaultUriPrefix string = "/api/rest" - UriPrefix string = "/omc/rest" - //TestDataUDM []map[string]interface{} - TDatas map[string]NeTestData -) - -func ReadTestConfigYaml(pfile string) (ret error) { - file, err := os.ReadFile(pfile) - if err != nil { - return err - } - - err = yaml.Unmarshal(file, &TDatas) - if err != nil { - fmt.Println("Failed to Unmarshal:", err) - return err - } - - return nil -} - -func GetDefaultUserAgent() string { - return "OMC/" + global.Version -} - -// const defaultConfigFile = "./etc/restconf.yaml" - -// func init() { -// cfile := flag.String("c", defaultConfigFile, "config file") -// pv := flag.Bool("version", false, "print version") -// ph := flag.Bool("help", false, "print help") - -// //global.BuildTime = "Wed May 31 18:24:04 CST 2023" -// //global.GoVer = "go version go1.15.7 linux/arm64" -// flag.Parse() -// if *pv { -// fmt.Printf("OMC restagent version: %s\n%s\n%s\n\n", global.Version, global.BuildTime, global.GoVer) -// os.Exit(0) -// } -// if *ph { -// flag.Usage() -// os.Exit(0) -// } - -// // 使用viper读取配置 -// conf.InitConfig(*cfile) - -// ReadConfig(*cfile) -// if GetYamlConfig().OMC.UriPrefix != "" { -// UriPrefix = GetYamlConfig().OMC.UriPrefix -// } -// if GetYamlConfig().TestConfig.Enabled { -// ReadTestConfigYaml(GetYamlConfig().TestConfig.File) -// } -// } diff --git a/lib/config/map.go b/lib/config/map.go deleted file mode 100644 index 4c012791..00000000 --- a/lib/config/map.go +++ /dev/null @@ -1,111 +0,0 @@ -package config - -import ( - "io/ioutil" - "log" - - "gopkg.in/yaml.v3" - - "be.ems/lib/global" -) - -type Uri2Object struct { - Uri string `yaml:"uri"` - Object []Object `yaml:"object"` -} - -type Object struct { - Name string `yaml:"name"` - Syntax string `yaml:"syntax"` - Oid string `yaml:"oid"` -} - -var uri2Object []Uri2Object - -func ReadMap(pfile string) (ret error) { - file, err := ioutil.ReadFile(pfile) - if err != nil { - log.Println(err) - return err - } - - err = yaml.Unmarshal(file, &uri2Object) - if err != nil { - log.Println(err) - return err - } - /* - for _, v := range uri2Object { - log.Println(v) - } - */ - return nil -} - -func GetOid(uri string, oids *[]string) *[]string { - for _, v := range uri2Object { - if uri == v.Uri { - for _, o := range v.Object { - *oids = append(*oids, o.Oid) - } - } - } - - return oids -} - -func GetOidByFileds(uri string, fields []string, oids *[]string) *[]string { - for _, v := range uri2Object { - if uri == v.Uri { - for _, o := range v.Object { - if global.IsContain(o.Name, fields) || len(fields) == 0 { - *oids = append(*oids, o.Oid) - } - } - } - } - - return oids -} - -type NameOid struct { - Name string - Oid string -} - -type NameValue struct { - Name string - Value string -} - -func GetDataOid(Uri string, nameOids *[]NameOid) *[]NameOid { - var nameOid NameOid - for _, v := range uri2Object { - if Uri == v.Uri { - for _, o := range v.Object { - nameOid.Name = o.Name - nameOid.Oid = o.Oid - *nameOids = append(*nameOids, nameOid) - } - } - } - - return nameOids -} - -func GetDataOidByFields(uri string, fields []string, nameOids *[]NameOid) *[]NameOid { - var nameOid NameOid - for _, v := range uri2Object { - if uri == v.Uri { - for _, o := range v.Object { - nameOid.Name = o.Name - nameOid.Oid = o.Oid - if len(fields) == 0 || global.IsContainP(nameOid.Name, &fields, len(fields)) { - *nameOids = append(*nameOids, nameOid) - } - } - } - } - - return nameOids -} diff --git a/lib/core/ctx/ctx.go b/lib/core/ctx/ctx.go deleted file mode 100644 index 57cda575..00000000 --- a/lib/core/ctx/ctx.go +++ /dev/null @@ -1,185 +0,0 @@ -package ctx - -import ( - "encoding/json" - "fmt" - "io" - "net/http" - "net/url" - "os" - "path/filepath" - "strings" - - "be.ems/src/framework/constants" - "be.ems/src/framework/token" - "github.com/gorilla/mux" -) - -// GetParam 地址栏参数{id} -func GetParam(r *http.Request, key string) string { - vars := mux.Vars(r) - v, ok := vars[key] - if ok { - return v - } - return "" -} - -// GetQuery 查询参数 -func GetQuery(r *http.Request, key string) string { - return r.URL.Query().Get(key) -} - -// GetHeader 请求头参数 -func GetHeader(r *http.Request, key string) string { - return r.Header.Get(key) -} - -// QueryMap 查询参数转换Map -func QueryMap(r *http.Request) map[string]any { - queryValues := r.URL.Query() - queryParams := make(map[string]any) - for key, values := range queryValues { - queryParams[key] = values[0] - } - return queryParams -} - -// ShouldBindQuery 查询参数读取json请求结构团体 &xxx -func ShouldBindQuery(r *http.Request, args any) error { - queryParams := QueryMap(r) - body, err := json.Marshal(queryParams) - if err != nil { - return err - } - return json.Unmarshal(body, args) -} - -// ShouldBindJSON 读取json请求结构团体 &xxx -func ShouldBindJSON(r *http.Request, args any) error { - body, err := io.ReadAll(io.LimitReader(r.Body, 1<<20)) // 设置较大的长度,例如 1<<20 (1MB) - if err != nil { - return err - } - err = json.Unmarshal(body, args) - return err -} - -// JSON 相应json数据 -func JSON(w http.ResponseWriter, code int, data any) { - w.Header().Set("Content-Type", "application/json;charset=UTF-8") - - response, err := json.Marshal(data) - if err != nil { - w.WriteHeader(500) - w.Write([]byte(err.Error())) - } else { - w.WriteHeader(code) - w.Write(response) - } -} - -// 将文件导出到外部下载 -func FileAttachment(w http.ResponseWriter, r *http.Request, filepath, filename string) { - w.Header().Set("Content-Disposition", `attachment; filename=`+url.QueryEscape(filename)) - w.Header().Set("Content-Type", "application/octet-stream") - http.ServeFile(w, r, filepath) -} - -// 将文件上传保存到指定目录 -// file, handler, err := r.FormFile("file") -// SaveUploadedFile uploads the form file to specific dst. -func SaveUploadedFile(r *http.Request, dst string) error { - // 解析请求中的文件 - _, handler, err := r.FormFile("file") - if err != nil { - return err - } - - src, err := handler.Open() - if err != nil { - return err - } - defer src.Close() - - if err = os.MkdirAll(filepath.Dir(dst), 0750); err != nil { - return err - } - - out, err := os.Create(dst) - if err != nil { - return err - } - defer out.Close() - - _, err = io.Copy(out, src) - return err -} - -/// ==== 登录用户信息, 通过中间件后预置入 - -// Authorization 解析请求头 -func Authorization(r *http.Request) string { - // Query请求查询 - if authQuery := r.URL.Query().Get(constants.ACCESS_TOKEN); authQuery != "" { - return authQuery - } - // Header请求头 - if authHeader := r.Header.Get(constants.ACCESS_TOKEN); authHeader != "" { - return authHeader - } - - // Query请求查询 - if authQuery := r.URL.Query().Get(constants.ACCESS_TOKEN_QUERY); authQuery != "" { - return authQuery - } - // Header请求头 - authHeader := r.Header.Get(constants.HEADER_KEY) - if authHeader == "" { - return "" - } - // 拆分 Authorization 请求头,提取 JWT 令牌部分 - tokenStr := strings.Replace(authHeader, constants.HEADER_PREFIX, "", 1) - if len(tokenStr) > 64 { - return strings.TrimSpace(tokenStr) // 去除可能存在的空格 - } - return "" -} - -// ContextKey 定义自定义类型作为键 -type ContextKey string - -// LoginUser 登录用户信息需要Authorize中间件 -func LoginUser(r *http.Request) (token.UserInfo, error) { - // 获取请求头标识信息 - tokenStr := Authorization(r) - if tokenStr == "" { - return token.UserInfo{}, fmt.Errorf("not token info") - } - if tokenStr == "" { - return token.UserInfo{}, fmt.Errorf("authorization token is empty") - } - - // 验证令牌 - claims, err := token.UserTokenVerify(tokenStr, "access") - if err != nil { - return token.UserInfo{}, err - } - - // 获取缓存的用户信息 - info := token.UserInfoGet(claims) - if info.UserId <= 0 { - return token.UserInfo{}, fmt.Errorf("invalid login user information") - } - - return info, nil -} - -// LoginUserToUserName 登录用户信息-用户名称 -func LoginUserToUserName(r *http.Request) string { - loginUser, err := LoginUser(r) - if err != nil { - return "" - } - return loginUser.User.UserName -} diff --git a/lib/dborm/dborm.go b/lib/dborm/dborm.go deleted file mode 100644 index cfe12f29..00000000 --- a/lib/dborm/dborm.go +++ /dev/null @@ -1,1561 +0,0 @@ -package dborm - -import ( - "database/sql" - "encoding/json" - "errors" - "fmt" - "strconv" - "time" - - "strings" - - "be.ems/lib/log" - neService "be.ems/src/modules/network_element/service" - - _ "github.com/go-sql-driver/mysql" - "xorm.io/xorm" - "xorm.io/xorm/core" -) - -const ( - TableNameMeasureTask = "measure_task" - TableNameNeInfo = "ne_info" -) - -type Menu struct { - Id int `json:"id"` - Title string `json:"title"` - Icon string `json:"icon"` - Href string `json:"href"` - ParentId int `json:"parent_id"` - Remark int `json:"remark"` -} - -type DatabaseClient struct { - dbType string - dbUrl string - dbConnMaxLifetime time.Duration - dbMaxIdleConns int - dbMaxOpenConns int - IsShowSQL bool - - XEngine *xorm.Engine -} - -var DbClient DatabaseClient - -func InitDbClient(dbType, dbUser, dbPassword, dbHost, dbPort, dbName, dbParam string) error { - DbClient.dbUrl = fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?%s", - dbUser, dbPassword, dbHost, dbPort, dbName, dbParam) - DbClient.dbType = dbType - DbClient.dbConnMaxLifetime = 0 - DbClient.dbMaxIdleConns = 0 - DbClient.dbMaxOpenConns = 0 - if log.GetLevel() == log.LOG_TRACE { - DbClient.IsShowSQL = true - } - log.Debugf("dbType:%s dbUrl:%s:", dbType, DbClient.dbUrl) - - var err error - DbClient.XEngine, err = xorm.NewEngine(DbClient.dbType, DbClient.dbUrl) - if err != nil { - log.Error("Failed to connet database:", err) - return err - } - DbClient.XEngine.SetConnMaxLifetime(DbClient.dbConnMaxLifetime) - DbClient.XEngine.SetMaxIdleConns(DbClient.dbMaxIdleConns) - DbClient.XEngine.SetMaxOpenConns(DbClient.dbMaxOpenConns) - DbClient.XEngine.DatabaseTZ = time.Local // 必须 - DbClient.XEngine.TZLocation = time.Local // 必须 - if DbClient.IsShowSQL { - DbClient.XEngine.ShowSQL(true) - } - - xEngine = DbClient.XEngine - - return nil -} - -// func InitDbClient() error { -// db := config.GetYamlConfig().Database -// DbClient.dbUrl = fmt.Sprintf("%s:%s@tcp(%s:%s)/%s", db.User, db.Password, db.Host, db.Port, db.Name) -// DbClient.dbType = db.Type -// DbClient.dbConnMaxLifetime = 0 -// DbClient.dbMaxIdleConns = 0 -// DbClient.dbMaxOpenConns = 0 -// if log.GetLevel() == log.LOG_TRACE { -// DbClient.IsShowSQL = true -// } -// log.Debugf("dbType:%s dbUrl:%s:******@tcp(%s:%s)/%s", DbClient.dbType, db.User, db.Host, db.Port, db.Name) -// var err error -// DbClient.XEngine, err = xorm.NewEngine(DbClient.dbType, DbClient.dbUrl) -// if err != nil { -// log.Error("Failed to connet database:", err) -// return err -// } -// DbClient.XEngine.SetConnMaxLifetime(DbClient.dbConnMaxLifetime) -// DbClient.XEngine.SetMaxIdleConns(DbClient.dbMaxIdleConns) -// DbClient.XEngine.SetMaxOpenConns(DbClient.dbMaxOpenConns) -// if DbClient.IsShowSQL { -// DbClient.XEngine.ShowSQL(true) -// } -// xEngine = DbClient.XEngine - -// return nil -// } - -var xEngine *xorm.Engine - -func XormConnectDatabase(dbType, dbUser, dbPassword, dbHost, dbPort, dbName string) (*xorm.Engine, error) { - sqlStr := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&collation=utf8mb4_general_ci&parseTime=true&loc=Local", - dbUser, dbPassword, dbHost, dbPort, dbName) - log.Debugf("dbType:%s Connect to:%s:******@tcp(%s:%s)/%s?charset=utf8mb4&collation=utf8mb4_general_ci&parseTime=true&loc=Local", - dbType, dbUser, dbHost, dbPort, dbName) - var err error - xEngine, err = xorm.NewEngine(dbType, sqlStr) //1、Create xorm engine - if err != nil { - log.Error("Failed to connect database:", err) - return nil, err - } - if log.GetLevel() == log.LOG_TRACE { - xEngine.ShowSQL(true) - } - return xEngine, nil -} - -func XCoreDB() *core.DB { - return xEngine.DB() -} - -func XEngDB() *xorm.Engine { - return xEngine -} - -func ConstructInsertSQL(tableName string, insertData interface{}) (string, []string) { - log.Debug("ConstructInsertSQL processing... ") - log.Debug("Request insertData:", insertData) - - var sql []string - var dataTag string - for t, d := range insertData.(map[string]interface{}) { - log.Tracef("t: %v d: %v", t, d) - dataTag = t - - for i, r := range d.([]interface{}) { - var cl, vl string - log.Tracef("i: %v r: %v", i, r) - for c, v := range r.(map[string]interface{}) { - log.Tracef("c: %v v: %v", c, v) - if cl == "" { - cl = fmt.Sprint(c) - } else { - cl = fmt.Sprintf("%s, %s", cl, c) - } - if vl == "" { - vl = fmt.Sprintf("'%v'", v) - } else { - vl = fmt.Sprintf("%s, '%v'", vl, v) - } - - log.Tracef("cl: %s vl: %s", cl, vl) - } - sql = append(sql, "insert into "+tableName+"("+cl+")"+" values("+vl+")") - } - - log.Debug("sql:", sql) - } - - return dataTag, sql -} - -func InsertDataWithJson(insertData interface{}) (int64, error) { - log.Debug("InsertDataWithJson processing... ") - - var data map[string]interface{} - var tableName string - for k, v := range insertData.(map[string]interface{}) { - log.Tracef("k: %v v: %v", k, v) - tableName = k - data = v.(map[string]interface{}) - } - - log.Tracef("data: %v", data) - xSession := xEngine.NewSession() - defer xSession.Close() - affected, err := xSession.Insert(data, tableName) - xSession.Commit() - - return affected, err -} - -type NeInfo struct { - Id int `json:"id" xorm:"pk 'id' autoincr"` - NeType string `json:"neType" xorm:"ne_type"` - NeId string `json:"neId" xorm:"ne_id"` // neUID/rmUID 网元唯一标识 - RmUID string `json:"rmUid" xorm:"rm_uid"` // neUID/rmUID网元UID - NeName string `json:"neName" xorm:"ne_name"` // NeName/UserLabel 网元名称/网元设备友好名称 - Ip string `json:"ip" xorm:"ip"` - Port string `json:"port" xorm:"port"` - PvFlag string `json:"pvFlag" xorm:"pv_flag"` // 网元虚实性标识 VNF/PNF: 虚拟/物理 - NeAddress string `json:"neAddress" xorm:"ne_address"` // 只对PNF - Province string `json:"province" xorm:"province"` // 网元所在省份 - VendorName string `json:"vendorName" xorm:"vendor_name"` // 厂商名称 - Dn string `json:"dn" xorm:"dn"` // 网络标识 - Status int `json:"status" xorm:"status"` - UpdateTime time.Time `json:"updateTime" xorm:"<-"` -} - -func XormGetNeInfo(neType string, neId string) (*NeInfo, error) { - log.Debug("XormGetNeInfo processing... ") - neInfox := neService.NewNeInfo.FindByNeTypeAndNeID(neType, neId) - - neInfo := new(NeInfo) - neInfo.NeType = neType - neInfo.NeId = neId - neInfo.RmUID = neInfox.RmUID - neInfo.NeName = neInfox.NeName - neInfo.Ip = neInfox.IP - neInfo.Port = fmt.Sprint(neInfox.Port) - neInfo.PvFlag = neInfox.PvFlag - neInfo.NeAddress = neInfox.NeAddress - neInfo.Province = neInfox.Province - neInfo.VendorName = neInfox.VendorName - neInfo.Dn = neInfox.Dn - neInfo.Status = int(neInfox.Status) - neInfo.UpdateTime = time.UnixMilli(neInfox.UpdateTime) - - return neInfo, nil -} - -func XormGetNeInfoByRmUID(neType string, rmUID string) (*NeInfo, error) { - log.Debug("XormGetNeInfoByRmUID processing... ") - - neInfo := new(NeInfo) - has, err := xEngine.Where("ne_type=? and rm_uid=?", strings.ToUpper(neType), rmUID).Get(neInfo) - if err != nil { - log.Error("Failed to get table ne_info from database:", err) - return nil, err - } else if !has { - log.Infof("Not found ne_info from database, neType=%s, neId=%s", neType, rmUID) - return nil, nil - } - - log.Debug("NE Info:", neInfo) - return neInfo, nil -} - -func XormGetAllNeInfo(nes *[]NeInfo) (*[]NeInfo, error) { - log.Debug("XormGetAllNeInfo processing... ") - - ne := new(NeInfo) - rows, err := xEngine.Table("ne_info").Rows(ne) - if err != nil { - log.Error("Failed to get table ne_info from database:", err) - return nil, err - } - defer rows.Close() - for rows.Next() { - err := rows.Scan(ne) - if err != nil { - log.Error("Failed to get table ne_info from database:", err) - return nil, err - } - *nes = append(*nes, *ne) - } - log.Trace("nes:", nes) - return nes, nil -} - -func XormGetNeInfoByNeType(neType string, nes *[]NeInfo) error { - log.Debug("XormGetNeInfoByNeType processing... ") - - ne := new(NeInfo) - rows, err := xEngine.Table("ne_info").Where("ne_type=?", neType).Rows(ne) - if err != nil { - log.Error("Failed to get table ne_info from database:", err) - return err - } - defer rows.Close() - for rows.Next() { - err := rows.Scan(ne) - if err != nil { - log.Error("Failed to get table ne_info from database:", err) - return err - } - *nes = append(*nes, *ne) - } - - return nil -} - -func XormGetNeInfo2(neType string, neIDs []string, nes *[]NeInfo) error { - log.Info("XormGetNeInfo2 processing... ") - - ne := new(NeInfo) - var rows *xorm.Rows - var err error - if len(neIDs) == 0 { - rows, err = xEngine.Table("ne_info"). - Where("ne_type=?", neType). - Rows(ne) - } else { - rows, err = xEngine.Table("ne_info"). - In("ne_id", neIDs). - And("ne_type=?", neType). - Rows(ne) - } - if err != nil { - log.Error("Failed to get table ne_info from database:", err) - return err - } - defer rows.Close() - for rows.Next() { - err := rows.Scan(ne) - if err != nil { - log.Error("Failed to get table ne_info from database:", err) - return err - } - *nes = append(*nes, *ne) - } - - return nil -} - -func XormInsertNeInfo(neInfo *NeInfo) (int64, error) { - log.Debug("XormInsertNeInfo processing... ") - - var affected int64 = 0 - var err error = nil - - xSession := xEngine.NewSession() - defer xSession.Close() - ex, _ := xEngine.Table("ne_info").Where("status = '1' and ne_type = ? and ne_id = ?", neInfo.NeType, neInfo.NeId).Exist() - if ex { - neInfo.Status = 0 - affected, err = xSession.Where("ne_type = ? and ne_id = ?", neInfo.NeType, neInfo.NeId).Update(neInfo) - } else { - affected, err = xSession.InsertOne(neInfo) - } - xSession.Commit() - return affected, err -} - -func XormUpdateNeInfo(neInfo *NeInfo) (int64, error) { - log.Debug("XormUpdateNeInfo processing... ") - - xSession := xEngine.NewSession() - defer xSession.Close() - affected, err := xSession.ID(neInfo.Id).MustCols("status").Update(neInfo) - xSession.Commit() - return affected, err -} - -func XormDeleteNeInfo(neInfo *NeInfo) (int64, error) { - log.Debug("XormDeleteNeInfo processing... ") - - xSession := xEngine.NewSession() - defer xSession.Close() - affected, err := xSession.Where("ne_type = ? and ne_id = ?", neInfo.NeType, neInfo.NeId).Delete(neInfo) - xSession.Commit() - return affected, err -} - -func XormParseResult(body []byte) ([]NeInfo, error) { - log.Debug("XormParseResult processing... ") - - data := make(map[string]interface{}) - err := json.Unmarshal(body, &data) - if err != nil { - return nil, err - } - var neInfo []NeInfo - var re interface{} - if data["data"] == nil { - return nil, errors.New("the data is not found") - } - for _, d := range data["data"].([]interface{}) { - if d == nil { - return nil, errors.New("the data is Not found") - } - for _, re = range d.(map[string]interface{}) { - if re == nil { - return nil, errors.New("the data is Not found") - } - for _, rc := range re.([]interface{}) { - if rc == nil { - return nil, errors.New("the data is Not found") - } - var s NeInfo - record := rc.(map[string]interface{}) - s.NeName = fmt.Sprintf("%v", record["ne_name"]) - s.NeId = fmt.Sprintf("%v", record["ne_id"]) - s.NeType = fmt.Sprintf("%v", strings.ToLower(record["ne_type"].(string))) - s.Ip = fmt.Sprintf("%v", record["ip"]) - s.Port = fmt.Sprintf("%v", record["port"]) - s.PvFlag = fmt.Sprintf("%v", record["pv_flag"]) - - neInfo = append(neInfo, s) - } - } - } - - log.Debug("neInfo:", neInfo) - return neInfo, nil -} - -func ConstructUpdateSQLArray(tableName string, updateData interface{}, whereCondition string) (string, []string) { - log.Debug("ConstructUpdateSQL processing... ") - log.Debug("Request updateData:", updateData) - - var sql []string - var tblName string - for t, d := range updateData.(map[string]interface{}) { - log.Tracef("t: %v d: %v", t, d) - tblName = t - - for i, r := range d.([]interface{}) { - var cv string - log.Tracef("i: %v r: %v", i, r) - for c, v := range r.(map[string]interface{}) { - log.Tracef("c: %v v: %v", c, v) - if cv == "" { - cv = fmt.Sprintf("`%s`='%s'", c, v) - } else { - cv = fmt.Sprintf("%s,`%s`='%s'", cv, c, v) - } - - log.Tracef("cv: %s", cv) - } - sql = append(sql, "UPDATE "+tableName+" SET "+cv+" WHERE "+whereCondition) - } - - log.Debug("sql:", sql) - } - - return tblName, sql -} - -func ConstructUpdateSQL(tableName string, updateData interface{}, whereCondition string) (string, []string) { - log.Debug("ConstructUpdateSQL processing... ") - log.Debug("Request updateData:", updateData) - - var sql []string - var tblName string - for t, d := range updateData.(map[string]interface{}) { - log.Tracef("t: %v d: %v", t, d) - tblName = t - - var cv string - for c, v := range d.(map[string]interface{}) { - log.Tracef("c: %v v: %v", c, v) - if cv == "" { - //cv = fmt.Sprintf("`%s`=%s", c, v) - cv = fmt.Sprintf("`%s`='%s'", c, v) - } else { - //cv = fmt.Sprintf("%s,`%s`=%s", cv, c, v) - cv = fmt.Sprintf("%s,`%s`='%s'", cv, c, v) - } - - log.Tracef("cv: %s", cv) - } - sql = append(sql, "UPDATE "+tableName+" SET "+cv+" WHERE "+whereCondition) - - log.Debug("sql:", sql) - } - - return tblName, sql -} - -func ConstructDeleteSQL(tableName string, whereCondition string) string { - log.Debug("ConstructDeleteSQL processing... ") - - var sql string = "DELETE from " + tableName + " WHERE " + whereCondition - log.Debug("sql:", sql) - return sql -} - -type TaskStatus string - -const ( - MeasureTaskStatusInactive = "Inactive" - MeasureTaskStatusActive = "Active" - MeasureTaskStatusSuspend = "Suspend" - MeasureTaskStatusDeleted = "Deleted" -) - -type ScheduleJ struct { - Type string `json:"Type"` - Days []int `json:"Days"` -} - -type Period struct { - Start string `json:"Start"` - End string `json:"End"` -} - -func GetTableByWhere(whereCondition string, tableName string) (*[]interface{}, error) { - log.Debug("GetTableByWhere processing... ") - - rows := new([]interface{}) - has, err := xEngine.Table(tableName).Where(whereCondition).Get(rows) - if err != nil { - log.Errorf("Failed to get table %s from database:%v", tableName, err) - return nil, err - } else if !has { - log.Infof("Not found table %s from database:where=%d", tableName, whereCondition) - return nil, nil - } - - log.Debugf("%s:%v", tableName, rows) - return rows, nil -} - -func GetTableById(id int, tableName string) (*[]interface{}, error) { - log.Debug("GetTableById processing... ") - - rows := new([]interface{}) - has, err := xEngine.Table(tableName).ID(id).Get(rows) - if err != nil { - log.Errorf("Failed to get table %s from database:id=%d, %v", tableName, id, err) - return nil, err - } else if !has { - log.Infof("Not found table %s from database:id=%d", tableName, id) - return nil, nil - } - - log.Debugf("%s:%v", tableName, rows) - return rows, nil -} - -func XormUpdateTableById(id int, tableName string, tbInfo interface{}) (int64, error) { - log.Debug("XormUpdateTableById processing...id: ", id) - - affected, err := xEngine.Table(tableName).ID(id).Update(tbInfo) - if err != nil { - log.Errorf("Failed to update table %s from database:%v", tableName, err) - return 0, err - } - - return affected, nil -} - -func XormUpdateTableByWhere(whereCondition string, tableName string, tbInfo interface{}) (int64, error) { - log.Debug("UpdateTableByWhere processing... ") - - affected, err := xEngine.Table(tableName).Where(whereCondition).Update(tbInfo) - if err != nil { - log.Errorf("Failed to update table %s from database:%v", tableName, err) - return 0, err - } - - return affected, nil -} - -func XormIsExistUser(accid string) (bool, error) { - log.Info("xormIsExistUser processing... ") - - exist, err := xEngine.Table("user"). - Where("account_id=?", accid). - Exist() - if err != nil { - log.Error("Failed to exist user:", err) - - return false, err - } - - return exist, nil -} - -func XormGetConfig(moduleName, configTag string) (map[string]any, error) { - result, err := DbClient.XEngine.QueryInterface("select * from config where module_name=? and config_tag=?", moduleName, configTag) - if err != nil { - log.Error("Failed to get config:", err) - return nil, err - } - if len(result) > 0 { - return result[0], nil - } - return map[string]any{}, nil -} - -func XormGetConfigValue(moduleName, configTag string) (string, error) { - var value string - _, err := xEngine.Table("config"). - Where("module_name=? and config_tag=?", moduleName, configTag). - Cols("value"). - Get(&value) - if err != nil { - log.Error("Failed to get config:", err) - return "", err - } - return value, nil -} - -type Session struct { - Id int `json:"id" xorm:"pk 'id' autoincr"` - AccountId string `json:"accountId" xorm:"account_id"` - Name string `json:"name" xorm:"name"` - Host string `json:"host" xorm:"host"` - AccessToken string `json:"accessToken" xorm:"access_token"` - Expires uint32 `json:"expires" xorm:"expires"` - Status string `json:"status" xorm:"status"` - LoginTime string `json:"loginTime" xorm:"-"` - ShakeTime sql.NullTime `son:"shakeTime" xorm:"shake_time"` - LogoutTime sql.NullTime `json:"logoutTime" xorm:"logout_time"` -} - -// XormInsertSession create session -func XormInsertSession(name, host, token string, expires uint32, sessionFlag string) (int64, error) { - log.Info("XormInsertSession processing... ") - - var affected int64 = 0 - var err error = nil - currentTime := time.Now() - timeValue := currentTime.Local() - nullTime := sql.NullTime{Valid: true, Time: timeValue} - value, err := XormGetConfigValue("Security", "sessionExpires") - if err != nil { - return affected, err - } - if value != "" { - intValue, _ := strconv.Atoi(value) - expires = uint32(intValue) - log.Debugf("intValue=%d, expires=%d", intValue, expires) - } - - session := Session{AccountId: name, - Name: name, Host: host, AccessToken: token, - Status: "online", Expires: expires, - ShakeTime: nullTime, - } - - //session.ShakeTime.Time - xSession := xEngine.NewSession() - defer xSession.Close() - if strings.ToLower(sessionFlag) == "multiple" { - exist, err := xEngine.Table("session").Where("status = 'online' and account_id = ? and host = ?", name, host).Exist() - if err != nil { - return affected, err - } - if exist { - affected, _ = xSession.Table("session").Where("account_id = ? and host = ?", name, host).Update(session) - } else { - affected, _ = xSession.InsertOne(session) - } - } else { // single session for a user - exist, err := xEngine.Table("session").Where("status = 'online' and account_id = ?", name).Exist() - if err != nil { - return affected, err - } - if exist { - // todo... - err := errors.New("user is logged in") - return -1, err - } else { - affected, _ = xSession.InsertOne(session) - } - } - xSession.Commit() - return affected, err -} - -// XormUpdateSession update session -func XormLogoutUpdateSession(token string) (Session, error) { - log.Info("XormLogoutUpdateSession processing... ") - - session := Session{Status: "offline", AccessToken: token} - session.LogoutTime.Valid = true - session.LogoutTime.Time = time.Now() - - xSession := xEngine.NewSession() - defer xSession.Close() - _, err := xSession.Table("session").Where("access_token = ?", token).Update(session) - xSession.Commit() - // 查询记录返回 - if err == nil { - session := Session{} - _, err = xSession.Table("session").Where("access_token = ?", token).Get(&session) - return session, err - } - return session, err -} - -// XormUpdateSessionShakeTime create session -func XormUpdateSessionShakeTime(token string) (Session, error) { - log.Debug("XormUpdateSessionShakeTime processing... ") - - session := Session{AccessToken: token} - session.ShakeTime.Valid = true - session.ShakeTime.Time = time.Now() - xSession := xEngine.NewSession() - defer xSession.Close() - _, err := xSession.Table("session").Where("access_token = ?", token).Update(session) - xSession.Commit() - // 查询记录返回 - if err == nil { - session := Session{} - _, err = xSession.Table("session").Where("access_token = ?", token).Get(&session) - return session, err - } - return session, err -} - -func XormExistValidToken(token string, expires uint32) bool { - log.Info("XormExistValidToken processing... ") - - exist, err := xEngine.Table("session"). - Where("status = 'online' and access_token = ? and DATE_ADD(shake_time, INTERVAL expires SECOND) > NOW()", token). - Exist() - if err != nil { - return false - } - - return exist -} - -/* - type NorthboundPm struct { - Id int `json:"id" xorm:"pk 'id' autoincr"` - Date string `json:"date" xorm:"date"` - Index int `json:"index"` - StartTime string `json:"startTime" xorm:"start_time"` - TimeZone string `json:"timeZone" xorm:"time_zone"` - NEName string `json:"neName" xorm:"ne_name"` - PmVersion string `json:"pmVersion" xorm:"pm_version"` - Period string `json:"period" xorm:"pevalue" - RmUid string `json:"rmUid" xorm:"rm_uid"` - NEType string `json:"neType" xorm:"ne_type"` - Dn string `json:"neType" xorm:"ne_type"` - ObjectType string `json:"objectType" xorm:"object_type"` - PmName string `json:"pmName" xorm:"pm_name"` - PmExt string `json:"pmExt" xorm:"pm_ext"` - Value int `json:"value" xorm:"value"` - Timestamp string `json:"timestamp" xorm:"timestamp"` - } -*/ -type NorthboundPm struct { - Id int `json:"-" xorm:"pk 'id' autoincr"` - Date string `json:"Date" xorm:"date"` - Index int `json:"Index" xorm:"index"` // 1天中测量时间粒度(如15分钟)的切片索引: 0~95 - Timestamp string `json:"-" xorm:"-"` - NeName string `json:"NeName" xorm:"ne_name"` // UserLabel - RmUID string `json:"RmUID" xorm:"rm_uid"` - NeType string `json:"NeType" xorm:"ne_type"` // 网元类型 - PmVersion string `json:"PmVersion" xorm:"pm_version"` // 性能数据版本号 - Dn string `json:"Dn" xorm:"dn"` // (???)网元标识, 如:RJN-CMZJ-TZ,SubNetwork=5GC88,ManagedElement=SMF53456,SmfFunction=53456 - Period string `json:"Period" xorm:"period"` // 测量时间粒度选项:5/15/30/60 - TimeZone string `json:"TimeZone" xorm:"time_zone"` - StartTime string `json:"StartTime" xorm:"start_time"` - - Datas []struct { - ObjectType string `json:"ObjectType" xorm:"object_type"` // 网络资源类别名称, Pm指标项列表中为空间粒度 如:SmfFunction - PmDatas []struct { - PmName string `json:"KPIID" xorm:"pm_name"` // 指标项, 如: SMF.AttCreatePduSession._Dnn - SubDatas []struct { - SN string `json:"Name" xorm:"sn"` // 单个的写"Total", 或者指标项有多个测量项,如Dnn的名称写对应的Dnn"cmnet"/"ims" - SV int64 `json:"Value" xorm:"sv"` - } `json:"KPIValues" xorm:"sub_datas"` - } `json:"KPIs" xorm:"pm_datas"` - } `json:"Datas" xorm:"datas"` -} - -type Alarm struct { - AlarmSeq int `json:"alarmSeq"` - AlarmId string `json:"alarmId" xorm:"alarm_id"` - NeId string `json:"neId"` - AlarmCode int `json:"alarmCode"` - AlarmTitle string `json:"alarmTitle"` - EventTime string `json:"eventTime"` - AlarmType string `json:"alarmType"` - OrigSeverity string `json:"origSeverity"` - PVFlag string `json:"pvFlag" xorm:"pv_flag"` - NeName string `json:"neName"` - NeType string `json:"neType"` - ObjectUid string `json:"objectUid" xorm:"object_uid"` - ObjectName string `json:"objectName" xorm:"object_name"` - ObjectType string `json:"objectType" xorm:"object_type"` - LocationInfo string `json:"locationInfo"` - Province string `json:"province"` - AlarmStatus int `json:"alarmStatus"` - SpecificProblem string `json:"specificProblem"` - SpecificProblemID string `json:"specificProblemID" xorm:"specific_problem_id"` - AddInfo string `json:"addInfo"` - - // AckState int `json:"ackState" xorm:"-"` - // AckTime string `json:"ackTime" xorm:"-"` - ClearType int `json:"clearType" xorm:"-"` // 0: Unclear, 1: Auto clear, 2: Manual clear - ClearTime string `json:"clearTime" xorm:"-"` -} - -func XormGetAlarmByAlarmId(alarmId string, alarms *[]Alarm) (*[]Alarm, error) { - log.Debug("XormGetAlarmByAlarmId processing... ") - - alarm := new(Alarm) - rows, err := xEngine.Table("alarm").Where("alarm_id=?", alarmId).Rows(alarm) - if err != nil { - log.Error("Failed to get table alarm from database:", err) - return nil, err - } - - defer rows.Close() - for rows.Next() { - err := rows.Scan(alarm) - if err != nil { - log.Error("Failed to get table alarm from database:", err) - return nil, err - } - *alarms = append(*alarms, *alarm) - } - - log.Trace("alarms:", alarms) - return alarms, nil -} - -func XormSQLGetStringValue(querySQL string) (string, error) { - log.Debug("XormSQLGetStringValue processing... ") - - row := make(map[string]interface{}) - _, err := xEngine.SQL(querySQL).Get(&row) - if err != nil { - log.Errorf("Failed to get by SQL=%s:%v", querySQL, err) - return "", err - } - - for _, v := range row { - return fmt.Sprintf("%v", v), nil - } - - return "", nil -} - -func XormGetSingleCol(table, col, where string) (string, error) { - log.Debug("XormGetSingleCol processing... ") - - row := make(map[string]interface{}) - _, err := xEngine.Table(table).Where(where).Cols(col).Get(&row) - if err != nil { - log.Errorf("Failed to get %s from table %s:%v", col, table, err) - return "", err - } - - for _, v := range row { - return fmt.Sprintf("%v", v), nil - } - - return "", nil -} - -func XormGetSingleColStringArrayByIn(table, col, incol string, conditions []string, cols *[]string) error { - log.Debug("XormGetSingleColStringArrayByIn processing... ") - - err := xEngine.Table(table).In(incol, conditions).Cols(col).Distinct().Find(cols) - if err != nil { - log.Errorf("Failed to get %s from table %s:%v", col, table, err) - return err - } - return nil -} - -func XormGetColStringArrayByWhere(table, coln, where string, colv *[]string) error { - log.Debug("XormGetColStringArrayByWhere processing... ") - - _, err := xEngine.Table(table).Where(where).Cols(coln).Get(colv) - if err != nil { - log.Errorf("Failed to Get %s from table %s:%v", coln, table, err) - return err - } - return nil -} - -func XormFindColStringArrayByWhere(table, col, where string, cols *[]string) error { - log.Debug("XormFindColStringArrayByWhere processing... ") - - err := xEngine.Table(table).Where(where).Cols(col).Distinct().Find(cols) - if err != nil { - log.Errorf("Failed to Find %s from table %s:%v", col, table, err) - return err - } - return nil -} - -func XormGetSingleColStringByWhere(table, col, where string) (string, error) { - log.Info("XormFindSingleColStringByWhere processing... ") - - var colv string - _, err := xEngine.Table(table).Where(where).Cols(col).Get(&colv) - if err != nil { - log.Errorf("Failed to Find %s from table %s:%v", col, table, err) - return colv, err - } - return colv, nil -} - -func XormGetSingleColStringArrayByID(table, col string, id int, cols *[]string) error { - log.Debug("XormGetSingleColStringArrayByID processing... ") - - err := xEngine.Table(table).ID(id).Cols(col).Find(cols) - if err != nil { - log.Errorf("Failed to Find %s from table %s:%v", col, table, err) - return err - } - return nil -} - -func XormGetStringValue(table, col string, id int) (string, error) { - log.Debug("XormGetStringValue processing... ") - - row := make(map[string]interface{}) - _, err := xEngine.ID(id).Table(table).Cols(col).Get(&row) - if err != nil { - log.Errorf("Failed to get %s from table %s:%v", col, table, err) - return "", err - } - - for _, v := range row { - return fmt.Sprintf("%v", v), nil - } - - return "", nil -} - -type NeBackup struct { - Id int `json:"id" xorm:"pk 'id' autoincr"` - NeType string `json:"neType" xorm:"ne_type"` - NeId string `json:"neId" xorm:"ne_id"` - FileName string `json:"neName" xorm:"file_name"` - Path string `json:"path"` - Md5Sum string `json:"md5Sum" xorm:"md5_sum"` - CreateTime string `json:"createTime" xorm:"-" ` -} - -// XormInsertSession create session -func XormInsertTableOne(tableName string, tbInfo interface{}) (int64, error) { - log.Debug("XormInsertTableOne processing... ") - - var affected int64 = 0 - var err error = nil - - xSession := xEngine.NewSession() - defer xSession.Close() - affected, err = xSession.Table(tableName).InsertOne(tbInfo) - xSession.Commit() - return affected, err -} - -// XormExistTableOne create session -func XormExistTableOne(tableName string, where string) (bool, error) { - log.Debug("XormExistTableOne processing... ") - - has, err := xEngine.Table(tableName).Where(where).Exist() - - return has, err -} - -func XormGetTableRows(tableName string, where string, tbInfo *[]interface{}) (*[]interface{}, error) { - log.Debug("XormGetTableRows processing... ") - - row := make(map[string]interface{}) - rows, err := xEngine.Table(tableName).Where(where).Rows(row) - if err != nil { - log.Errorf("Failed to Rows table %s from database: %v", tableName, err) - return nil, err - } - defer rows.Close() - for rows.Next() { - err := rows.Scan(row) - if err != nil { - log.Errorf("Failed to Scan table %s from database: %v", tableName, err) - return nil, err - } - *tbInfo = append(*tbInfo, row) - } - log.Trace("tbInfo:", tbInfo) - return tbInfo, nil -} - -type MeasureThreshold struct { - Id int `json:"id" xorm:"pk 'id' autoincr"` - NeType string `json:"neType" xorm:"ne_type"` - KpiSet []string `json:"kpiSet" xorm:"kpi_set"` - Threshold int64 `json:"threshold"` - Status string `json:"md5Sum" xorm:"md5_sum"` - OrigSeverity string `json:"createTime" xorm:"orig_severity"` - AlarmId string `json:"alarmId" xorm:"alarm_id"` -} - -type NeSoftware struct { - Id int `json:"id" xorm:"pk 'id' autoincr"` - NeType string `json:"neType" xorm:"ne_type"` - FileName string `json:"fileName" xorm:"name"` - Path string `json:"path" xorm:"path"` - Version string `json:"version" ` - Md5Sum string `json:"md5Sum" xorm:"-"` - Comment string `json:"comment" xorm:"description"` - // Status string `json:"status"` - UpdateTime string `json:"createTime" xorm:"-" ` -} - -type NeVersion struct { - Id int `json:"id" xorm:"pk 'id' autoincr"` - NeType string `json:"neType" xorm:"ne_type"` - NeId string `json:"neId" xorm:"ne_id"` - Version string `json:"version" ` - FilePath string `json:"filePath" xorm:"path"` - NewVersion string `json:"newVersion" xorm:"new_version"` - NewFile string `json:"newFile" xorm:"new_path"` - PreVersion string `json:"preVersion" xorm:"pre_version"` - PreFile string `json:"preFile" xorm:"pre_path"` - Status string `json:"status" xorm:"status"` - UpdateTime string `json:"createTime" xorm:"-" ` -} - -func XormGetDataBySQL(sql string) (*[]map[string]string, error) { - log.Debug("XormGetDataBySQL processing... ") - - rows := make([]map[string]string, 0) - rows, err := DbClient.XEngine.QueryString(sql) - if err != nil { - log.Error("Failed to QueryString:", err) - return nil, err - } - - return &rows, nil -} - -func XormDeleteDataByWhere(where, table string) (int64, error) { - log.Debug("XormDeleteDataByWhere processing... ") - - xSession := DbClient.XEngine.NewSession() - defer xSession.Close() - affected, err := xSession.Table(table).Where(where).Delete() - if err != nil { - log.Error("Failed to Delete:", err) - return 0, err - } - xSession.Commit() - - return affected, nil -} - -func XormDeleteDataByWhereNoSession(where, table string) (int64, error) { - affected, err := DbClient.XEngine.Table(table).Where(where).Delete() - if err != nil { - log.Error("Failed to Delete:", err) - return 0, err - } - return affected, nil -} - -func XormDeleteDataById(id int, table string) (int64, error) { - log.Debug("XormDeleteDataByWhere processing... ") - - xSession := DbClient.XEngine.NewSession() - defer xSession.Close() - affected, err := xSession.Table(table).ID(id).Delete() - if err != nil { - log.Error("Failed to Delete:", err) - return 0, err - } - xSession.Commit() - - return affected, nil -} - -type ColOutput struct { - Name string `json:"name"` - Display string `json:"display"` - Length int `json:"length"` - Alias []string `json:"Alias"` -} - -type ColInput struct { - Name string `json:"name"` - Alias string `json:"Alias"` - Type string `json:"type"` - Length int `json:"length"` - Value any `json:"value"` -} - -type MmlInput struct { - BodyFmt string `json:"bodyFmt"` - BodyKey string `json:"bodyKey"` - CallFunc string `json:"callFunc"` - Cols []ColInput `json:"cols"` -} - -type MmlOutput struct { - RetFmt string `json:"retFmt"` - RetMsg string `json:"retMsg"` - ErrMsg string `json:"errMsg"` - Title string `json:"title"` - SingleList bool `json:"singleList"` - SepSpaceNum int `json:"sepSpaceNum"` - AlignmentM string `json:"alignmentM"` - AlignmentSN string `json:"alignmentSN"` - AlignmentSV string `json:"alignmentSV"` - Cols []ColOutput `json:"cols"` - End string `json:"end"` -} - -type MmlHttpMap struct { - ID int `json:"-" xorm:"id"` - NeType string `json:"neType" xorm:"ne_type"` - Operation string `json:"operation"` - Object string `json:"object"` - Method string `json:"method"` - URI string `json:"uri" xorm:"uri"` - ExtUri string `json:"extUri"` - ParamTag string `json:"paramTag"` - Params string `json:"params"` - Input string `json:"input"` - Output string `json:"output"` -} - -func XormGetMmlHttpMap(table, where string) (*MmlHttpMap, error) { - mmlMap := new(MmlHttpMap) - _, err := DbClient.XEngine.Table(table).Where(where).Get(mmlMap) - if err != nil { - log.Error("Failed to Get:", err) - return nil, err - } - return mmlMap, nil -} - -type MmlCommand struct { - ID int `json:"-" xorm:"id"` - NeType string `json:"neType" xorm:"ne_type"` - Category string `json:"category"` - CatDisplay string `json:"catDisplay"` - Operation string `json:"operation"` - Object string `json:"object" xorm:"object"` - MmlDisplay string `json:"mmlDisplay"` - ParamJson []struct { - Name string `json:"name"` - Alias string `json:"alias"` - Type string `json:"type"` - Optional string `json:"optional"` - Apostr string `json:"apostr"` - Loc string `json:"loc"` - Filter string `json:"filter"` - Display string `json:"display"` - Comment string `json:"comment"` - } `json:"paramJson"` -} - -func XormGetMmlCommand(table, where string) (*MmlCommand, error) { - mmlCmd := new(MmlCommand) - _, err := DbClient.XEngine.Table(table).Where(where).Get(mmlCmd) - if err != nil { - log.Error("Failed to Get:", err) - return nil, err - } - return mmlCmd, nil -} - -type AlarmOMCConfig struct { - ID int `json:"-" xorm:"id"` - ModuleName string `json:"moduleName"` - ConfigTag string `json:"configTag"` - Value string `json:"value"` - ValueJson string `json:"valueJson"` -} - -type ValueJson struct { - AlarmStatus string `json:"alarm_status"` - AlarmType string `json:"alarm_type"` - OrigSeverity string `json:"orig_severity"` - AckUser string `json:"ack_user"` -} - -type AlarmForwardToUsers struct { - Interface string `json:"interface"` - ToUser []string `json:"to_user"` -} - -func XormGetAAConfig() (*ValueJson, error) { - aaConfig := new(AlarmOMCConfig) - _, err := DbClient.XEngine.Table("config"). - Where("module_name=? and config_tag=?", "Alarm", "autoAlarmAck"). - Cols("value", "value_json"). - Get(aaConfig) - if err != nil { - log.Error("Failed to Get:", err) - return nil, err - } - log.Debug("aaConfig:", aaConfig) - valueJson := new(ValueJson) - err = json.Unmarshal([]byte(aaConfig.ValueJson), valueJson) - if err != nil { - log.Error("Failed to Unmarshal:", err) - return nil, err - } - log.Debug("valueJson:", valueJson) - return valueJson, nil -} - -func XormGetAlarmForward(interfaceName string) (*[]string, error) { - alarmForwardConfig := new(AlarmOMCConfig) - _, err := DbClient.XEngine.Table("config"). - Where("module_name=? and config_tag=?", "Alarm", "forwardAlarm"). - Cols("value", "value_json"). - Get(alarmForwardConfig) - if err != nil { - log.Error("Failed to Get:", err) - return nil, err - } - log.Debug("alarmForwardConfig:", alarmForwardConfig) - alarmForwardToUsers := new([]AlarmForwardToUsers) - err = json.Unmarshal([]byte(alarmForwardConfig.ValueJson), alarmForwardToUsers) - if err != nil { - log.Error("Failed to Unmarshal:", err) - return nil, err - } - log.Debug("alarmForwardToUsers:", alarmForwardToUsers) - for _, a := range *alarmForwardToUsers { - if a.Interface == interfaceName { - return &(a.ToUser), nil - } - } - return nil, nil -} - -type AlarmForwardLog struct { - ID int `json:"-" xorm:"pk 'id' autoincr"` - NeType string `json:"neType" xorm:"ne_type"` - NeID string `json:"neID" xorm:"ne_id"` - AlarmID string `json:"alarmID" xorm:"alarm_id"` - AlarmTitle string `json:"alarmTitle" xorm:"alarm_title"` - AlarmSeq int `json:"alarmSeq" xorm:"alarm_seq"` - EventTime string `json:"eventTime" xorm:"event_time"` - Interface string `json:"interface" xorm:"interface"` - ToUser string `json:"toUser" xorm:"to_user"` - OperResult string `json:"operResult" xorm:"oper_result"` - LogTime string `json:"logTime" xorm:"<-"` -} - -func XormInsertAlarmForwardLog(logData *AlarmForwardLog) (int64, error) { - log.Debug("XormInsertAlarmForwardLog processing... ") - - xSession := xEngine.NewSession() - defer xSession.Close() - affected, err := xSession.Insert(logData) - xSession.Commit() - - return affected, err -} - -type SystemLog struct { - ID int `json:"-" xorm:"pk 'id' autoincr"` - UserName string `json:"user_name" xorm:"user_name"` - ProcessName string `json:"process_name" xorm:"process_name"` - ProcessID int32 `json:"process_id" xorm:"process_id"` - Operation string `json:"operation" xorm:"operation"` - StartTime string `json:"start_time" ` - LogTime string `json:"-" xorm:"-"` -} - -func XormInsertSystemLog(logData *SystemLog) (int64, error) { - log.Info("XormInsertSystemLog processing... ") - - xSession := xEngine.NewSession() - defer xSession.Close() - affected, err := xSession.Insert(logData) - xSession.Commit() - - return affected, err -} - -type Permission struct { - ID int `json:"-" xorm:"pk 'id' autoincr"` - PermissionName string `json:"permissionName"` - Method string `json:"method"` - Element string `json:"element"` - Object string `json:"object"` -} - -func IsPermissionAllowed(token, method, module, dbname, tbname, pack string) (bool, error) { - log.Info("IsPermissionAllowed processing... ") - - exist, err := xEngine.Table("permission"). - Join("INNER", "role_permission", "permission.permission_name = role_permission.p_name"). - Join("INNER", "user_role", "role_permission.r_name = user_role.r_name"). - Join("INNER", "session", "user_role.u_name = session.account_id and session.access_token=?", token). - Where("method in ('*',?) and module in ('*',?) and management in ('*',?) and element in ('*',?) and object in ('*',?)", method, pack, module, dbname, tbname). - Exist() - if err != nil { - return false, err - } - - return exist, nil -} - -type NeLicense struct { - NeType string `json:"neType" xorm:"ne_type"` - NeID string `json:"neID" xorm:"ne_id"` - SerialNo string `json:"serialNo" xorm:"serial_num"` - Capcity int `json:"capcity" xorm:"-"` - Used int `json:"used" xorm:"-"` - FeatureEnabled string `json:"featureEnabled" xorm:"-"` - ExpirationDate string `json:"expirationDate" xorm:"expiry_date"` - Status string `json:"status" xorm:"status"` - Path string `json:"path" xorm:"license_path"` - FileName string `json:"file_name" xorm:"-"` - Comment string `json:"comment" xorm:"remark"` - CreatedAt string `json:"createdAt" xorm:"-"` - UpdatedAt string `json:"updatedAt" xorm:"-"` - DeletedAt string `json:"deletedAt" xorm:"-"` -} - -func XormAdjustmentNeLicense(neType, neID string, value int) (int64, error) { - return 1, nil - //neLicense := NeLicense{NeType: neType, NeID: neID, Capability: value} - // session.LogoutTime.Valid = true - // session.LogoutTime.Time = time.Now() - // res, err := xEngine.Exec("update ne_license set capcity=capcity+? where IFNULL(ne_type, '')=? and IFNULL(ne_id, '')=?", value, neType, neID) - // defer xSession.Close() - - //affected, err := xSession.Table("ne_license").Where("ne_type=? and ne_id=?", neType, neID).Update(&neLicense) - - // //affected, err := xSession.Table("ne_license").SQL("ne_tye=? and ne_id=?", neType, neID).Update(session) - // err := xSession.SQL("update ne_license set capability=capability+? where ne_type=? and ne_id=?", value, neType, neID) - //xSession.Commit() - // affected, err := res.RowsAffected() - // return affected, err -} - -func XormUpdateNeLicense(neType, neID string, capcity int) (int64, error) { - return 1, nil - // var err error - // var res sql.Result - // if neType != "" && neID != "" { - // res, err = xEngine.Exec("update ne_license set capcity=? where ne_type=? and ne_id=?", capcity, neType, neID) - // } else if neType != "" && neID == "" { - // res, err = xEngine.Exec("update ne_license set capcity=? where ne_type=?", capcity, neType) - // } else if neType == "" && neID != "" { - // res, err = xEngine.Exec("update ne_license set capcity=? where ne_id=?", capcity, neID) - // } else { - // res, err = xEngine.Exec("update ne_license set capcity=?", capcity) - // } - - // affected, err := res.RowsAffected() - // return affected, err -} - -type NorthboundCm struct { - ID int `json:"-" xorm:"pk '-' autoincr"` - Timestamp string `json:"timestamp" xorm:"timestamp"` - TimeZone string `json:"timeZone" xorm:"time_zone"` - VendorName string `json:"vendorName" xorm:"vendor_name"` - NeType string `json:"neType" xorm:"ne_type"` - CmVersion string `json:"cmVersion" xorm:"cm_version"` - RmUID string `json:"rmUID" xorm:"rm_uid"` - NeID string `json:"neID" xorm:"ne_id"` - UserLabel string `json:"userLabel" xorm:"user_label"` - ObjectType string `json:"objectType" xorm:"object_type"` - PvFlag string `json:"pvFlag" xorm:"pv_flag"` - VMID string `json:"vmID" xorm:"vm_id"` - VnfInstanceID string `json:"vnf_instance_id"` - ValueJSON string `json:"valueJson" xorm:"value_json"` - Status string `json:"status" xorm:"status"` -} - -func XormGetNorthboundCm(neType string, cmResults *[]NorthboundCm) error { - log.Info("XormGetNorthboundCm processing... ") - - cmResult := new(NorthboundCm) - rows, err := xEngine.Table("nbi_cm"). - Distinct("object_type"). - Where("`ne_type` = ?", neType). - Desc("timestamp"). - Cols("*"). - Rows(cmResult) - if err != nil { - log.Error("Failed to get table nbi_cm:", err) - return err - } - defer rows.Close() - for rows.Next() { - err := rows.Scan(cmResult) - if err != nil { - log.Error("Failed to get table nbi_cm:", err) - return err - } - *cmResults = append(*cmResults, *cmResult) - } - return nil -} - -func XormGetNorthboundCmLatestObject(neType, neID, objectType string) (*NorthboundCm, error) { - log.Info("XormGetNorthboundCmLatestObject processing... ") - - cmResult := new(NorthboundCm) - _, err := xEngine.Table("nbi_cm"). - Where("`ne_type`=? and `ne_id`=? and `object_type`=?", neType, neID, objectType). - Desc("timestamp"). - Cols("*"). - Limit(1). - Get(cmResult) - if err != nil { - log.Error("Failed to get table nbi_cm:", err) - return nil, err - } - - return cmResult, nil -} - -type TraceData struct { - ID int `json:"-" xorm:"pk 'id' autoincr"` - TaskID int `json:"taskID" xorm:"task_id"` - Imsi string `json:"imsi" xorm:"imsi"` - Msisdn string `json:"msisdn" xorm:"msisdn"` - SrcAddr string `json:"srcAddr" xorm:"src_addr"` - DstAddr string `json:"dstAddr" xorm:"dst_addr"` - IfType int `json:"ifType" xorm:"if_type"` - MsgType int `json:"msgType" xorm:"msg_type"` - MsgDirect int `json:"msgDirect" xorm:"msg_direct"` - Length int `json:"length" xorm:"length"` - Timestamp int64 `json:"timestamp" xorm:"timestamp"` - RawMsg []byte `json:"rawMsg" xorm:"raw_msg"` - DecMsg string `json:"decMsg" xorm:"dec_msg"` -} - -func XormGetTraceData(id int) (*TraceData, error) { - result := new(TraceData) - _, err := xEngine.Table("trace_data"). - Where("id=?", id). - Get(result) - if err != nil { - log.Error("Failed to get table trace_data:", err) - return nil, err - } - - return result, nil -} - -func XormUpdateTraceData(id int, data *TraceData) (int64, error) { - affected, err := xEngine.Table("trace_data"). - Where("id=?", id). - Update(data) - if err != nil { - log.Error("Failed to update table trace_data:", err) - return 0, err - } - - return affected, nil -} - -func XormInsertTraceData(data *TraceData) (int64, error) { - affected, err := xEngine.Table("trace_data"). - InsertOne(data) - if err != nil { - log.Error("Failed to insert table trace_data:", err) - return 0, err - } - - return affected, nil -} - -func XormDeleteTraceData(id int) (int64, error) { - affected, err := xEngine.Table("trace_data"). - Where("id=?", id). - Delete() - if err != nil { - log.Error("Failed to delete table trace_data:", err) - return 0, err - } - - return affected, nil -} - -func XormGetTraceRawMsg(id int) (int64, []byte, error) { - var rawMsg []byte - var timestamp int64 - _, err := xEngine.Table("trace_data"). - Where("id=?", id). - Cols("timestamp", "raw_msg"). - Get(×tamp, &rawMsg) - if err != nil { - log.Error("Failed to get table trace_data:", err) - return timestamp, rawMsg, err - } - - return timestamp, rawMsg, nil -} - -func XormGetNEStateInfo(neType, neID string) (string, string, error) { - SN := "-" - Version := "-" - _, err := xEngine.Table("ne_state"). - Where("ne_type=? and ne_id=?", neType, neID). - Desc("timestamp"). - Cols("serial_num", "version"). - Limit(1). - Get(&SN, &Version) - return SN, Version, err -} - -type NeState struct { - Id int `json:"id" xorm:"pk 'id' autoincr"` - NeType string `json:"neType" xorm:"ne_type"` - NeId string `json:"neId" xorm:"ne_id"` - Version string `json:"version" xorm:"column 'version' VARCHAR(16)"` - Capability uint32 `json:"capability" xorm:"capability"` - SerialNum string `json:"serialNum" xorm:"serial_num"` - ExpiryDate string `json:"expiryDate" xorm:"expiry_date"` - CpuUsage string `json:"cpuUsage" xorm:"cpu_usage"` - MemUsage string `json:"memUsage" xorm:"mem_usage"` - DiskSpace string `json:"diskSpace" xorm:"disk_space"` - Timestamp string `json:"timestamp" xorm:"-" ` -} - -func XormInsertNeState(neState *NeState) (int64, error) { - log.Debug("XormInsertNeState processing... ") - - var affected int64 = 0 - - session := xEngine.NewSession() - defer session.Close() - affected, err := session.InsertOne(neState) - if err != nil { - return 0, err - } - err = session.Commit() - if err != nil { - return 0, err - } - return affected, err -} - -type AlarmDefine struct { - AlarmId string `json:"alarmId" xorm:"alarm_id"` - AlarmCode int `json:"alarmCode" xorm:"alarm_code"` - AlarmTitle string `json:"alarmTitle" xorm:"alarm_title"` - NeType string `json:"neType" xorm:"ne_type"` - AlarmType string `json:"alarmType" xorm:"alarm_type"` - OrigSeverity string `json:"origSeverity" xorm:"orig_severity"` - ObjectUid string `json:"objectUid" xorm:"object_uid"` - ObjectName string `json:"objectName" xorm:"object_name"` - ObjectType string `json:"objectType" xorm:"object_type"` - LocationInfo string `json:"locationInfo"` - SpecificProblem string `json:"specificProblem"` - SpecificProblemId string `json:"specificProblemId" xorm:"specific_problem_id"` - AddInfo string `json:"addInfo" xorm:"add_info"` - Threshold int64 `json:"threshold" xorm:"threshold"` - Status string `json:"status" xorm:"status"` -} - -func XormGetAlarmDefine(alarmCode string) (*AlarmDefine, error) { - log.Debug("XormGetAlarmDefine processing... ") - - alarmDefine := new(AlarmDefine) - _, err := xEngine. - Where("alarm_code=? and status='Active'", alarmCode). - Get(alarmDefine) - if err != nil { - log.Error("Failed to get table alarm_define from database:", err) - return nil, err - } - - return alarmDefine, nil -} diff --git a/lib/eval/evaluate.go b/lib/eval/evaluate.go deleted file mode 100644 index 664d7176..00000000 --- a/lib/eval/evaluate.go +++ /dev/null @@ -1,119 +0,0 @@ -package evaluate - -import ( - "fmt" - "go/ast" - "go/parser" - "go/token" - "math" - "regexp" - "strconv" - "strings" -) - -// Parse and caculate expression -func CalcExpr(expr string, paramValues map[string]any) (float64, error) { - // match parameter with '' - re := regexp.MustCompile(`'([^']+)'`) - matches := re.FindAllStringSubmatch(expr, -1) - - // replace to value - for _, match := range matches { - paramName := match[1] - value, exists := paramValues[paramName] - if !exists { - return 0, fmt.Errorf("parameter '%s' not found", paramName) - } - - expr = strings.Replace(expr, match[0], fmt.Sprintf("%v", value), 1) - } - - // expression to evaluate - result, err := evalExpr(expr) - if math.IsNaN(result) { - return 0.0, err - } - return result, err -} - -// eval 解析和计算表达式 -func evalExpr(expr string) (float64, error) { - //fset := token.NewFileSet() - node, err := parser.ParseExpr(expr) - if err != nil { - return 0, err - } - return evalNode(node) -} - -// EvaluateExpr 解析并计算给定的表达式 -func EvalExpr(expr string, values map[string]any) (float64, error) { - // 解析表达式 - node, err := parser.ParseExpr(expr) - if err != nil { - return 0, err - } - - // 遍历 AST 并替换变量 - ast.Inspect(node, func(n ast.Node) bool { - if ident, ok := n.(*ast.Ident); ok { - if val, ok := values[ident.Name]; ok { - // 替换标识符为对应值 - ident.Name = fmt.Sprintf("%v", val) - } - } - return true - }) - - // 计算表达式 - return evalNode(node) -} - -// eval 递归计算 AST 节点 -func evalNode(node ast.Node) (float64, error) { - var result float64 - - switch n := node.(type) { - case *ast.BinaryExpr: - left, err := evalNode(n.X) - if err != nil { - return 0, err - } - right, err := evalNode(n.Y) - if err != nil { - return 0, err - } - switch n.Op { - case token.ADD: - result = left + right - case token.SUB: - result = left - right - case token.MUL: - result = left * right - case token.QUO: - if right == 0 { - return math.NaN(), fmt.Errorf("divisor cannot be zero") - } - - result = left / right - } - case *ast.BasicLit: - var err error - result, err = strconv.ParseFloat(n.Value, 64) - if err != nil { - return 0, err - } - case *ast.Ident: - val, err := strconv.ParseFloat(n.Name, 64) - if err != nil { - return 0, fmt.Errorf("unsupported expression: %s", n.Name) - } - result = val - case *ast.ParenExpr: - return evalNode(n.X) // 递归评估括号中的表达式 - default: - return 0, fmt.Errorf("unsupported expression: %T", n) - } - - return result, nil -} diff --git a/lib/file/file.go b/lib/file/file.go deleted file mode 100644 index 7bc2a57e..00000000 --- a/lib/file/file.go +++ /dev/null @@ -1,27 +0,0 @@ -package file - -import ( - "os" - "path/filepath" -) - -func GetFileAndDirCount(dir string) (int, int, error) { - var fileCount, dirCount int - - err := filepath.Walk(dir, func(path string, info os.FileInfo, err error) error { - if err != nil { - return err - } - if path == dir { - return nil // 跳过当前目录 - } - if info.IsDir() { - dirCount++ - } else { - fileCount++ - } - return nil - }) - - return fileCount, dirCount, err -} diff --git a/lib/file/file_linux.go b/lib/file/file_linux.go deleted file mode 100644 index e8936bb9..00000000 --- a/lib/file/file_linux.go +++ /dev/null @@ -1,78 +0,0 @@ -//go:build linux -// +build linux - -package file - -import ( - "fmt" - "os" - "os/user" - "path/filepath" - "syscall" -) - -type FileInfo struct { - 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) { - var files []FileInfo - - err := filepath.Walk(dir, func(path string, info os.FileInfo, err error) error { - if err != nil { - return err - } - - if path == dir { - return nil // 跳过当前目录 - } - - fileType := "file" - if info.IsDir() { - fileType = "directory" - } else if info.Mode()&os.ModeSymlink != 0 { - fileType = "symlink" - } - - // check if match suffix - if (suffix != "" && filepath.Ext(path) == suffix) || suffix == "" { - stat, ok := info.Sys().(*syscall.Stat_t) - if !ok { - return fmt.Errorf("not a syscall.Stat_t") - } - userInfo, err := user.LookupId(fmt.Sprint(stat.Uid)) - if err != nil { - return err - } - groupInfo, err := user.LookupGroupId(fmt.Sprint(stat.Gid)) - if err != nil { - return err - } - fileInfo := FileInfo{ - FileType: fileType, - FileMode: info.Mode().String(), - LinkCount: int64(info.Sys().(*syscall.Stat_t).Nlink), - Owner: userInfo.Username, - Group: groupInfo.Name, - Size: info.Size(), - ModifiedTime: info.ModTime().Unix(), - FilePath: dir, - FileName: info.Name(), - } - files = append(files, fileInfo) - } - return nil - }) - if err != nil { - return nil, err - } - return files, nil -} diff --git a/lib/file/file_windows.go b/lib/file/file_windows.go deleted file mode 100644 index 7c97f111..00000000 --- a/lib/file/file_windows.go +++ /dev/null @@ -1,63 +0,0 @@ -//go:build windows -// +build windows - -package file - -import ( - "os" - "path/filepath" -) - -type FileInfo struct { - 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) { - var files []FileInfo - - err := filepath.Walk(dir, func(path string, info os.FileInfo, err error) error { - if err != nil { - return err - } - - if path == dir { - return nil // 跳过当前目录 - } - - fileType := "file" - if info.IsDir() { - fileType = "directory" - } else if info.Mode()&os.ModeSymlink != 0 { - fileType = "symlink" - } - - // check if match suffix - if (suffix != "" && filepath.Ext(path) == suffix) || suffix == "" { - fileInfo := FileInfo{ - FileType: fileType, - FileMode: info.Mode().String(), - LinkCount: 0, - Owner: "-", - Group: "-", - Size: info.Size(), - ModifiedTime: info.ModTime().Unix(), - FilePath: dir, - FileName: info.Name(), - } - files = append(files, fileInfo) - } - return nil - }) - if err != nil { - return nil, err - } - return files, nil -} diff --git a/lib/global/exec_linux.go b/lib/global/exec_linux.go deleted file mode 100644 index e4aa8584..00000000 --- a/lib/global/exec_linux.go +++ /dev/null @@ -1,47 +0,0 @@ -//go:build linux -// +build linux - -package global - -import ( - "bytes" - "os/exec" -) - -func ExecCmd(command string) ([]byte, error) { - cmd := exec.Command("/bin/bash", "-c", command) - out, err := cmd.CombinedOutput() - if err != nil { - return nil, err - } - - return out, nil -} - -func ExecShell(command string) error { - in := bytes.NewBuffer(nil) - cmd := exec.Command("sh") - cmd.Stdin = in - in.WriteString(command) - in.WriteString("exit\n") - if err := cmd.Start(); err != nil { - return err - } - return nil -} - -func ExecOsCmd(command, os string) ([]byte, error) { - var cmd *exec.Cmd - switch os { - case "Linux": - cmd = exec.Command(command) - case "Windows": - cmd = exec.Command("cmd", "/C", command) - } - - out, err := cmd.CombinedOutput() - if err != nil { - return nil, err - } - return out, nil -} diff --git a/lib/global/exec_windows.go b/lib/global/exec_windows.go deleted file mode 100644 index 285005c2..00000000 --- a/lib/global/exec_windows.go +++ /dev/null @@ -1,34 +0,0 @@ -//go:build windows -// +build windows - -package global - -import ( - "os/exec" -) - -func ExecCmd(command string) ([]byte, error) { - cmd := exec.Command("cmd", "/C", command) - out, err := cmd.CombinedOutput() - if err != nil { - return nil, err - } - - return out, nil -} - -func ExecOsCmd(command, os string) ([]byte, error) { - var cmd *exec.Cmd - switch os { - case "Linux": - cmd = exec.Command(command) - case "Windows": - cmd = exec.Command("cmd", "/C", command) - } - - out, err := cmd.CombinedOutput() - if err != nil { - return nil, err - } - return out, nil -} diff --git a/lib/global/global.go b/lib/global/global.go deleted file mode 100644 index 228fdf20..00000000 --- a/lib/global/global.go +++ /dev/null @@ -1,65 +0,0 @@ -package global - -import "errors" - -// 跨package引用的首字母大写 -const ( - RequestBodyMaxLen = 2000000 - ApiVersionV1 = "v1" - ApiVersionV2 = "v2" - LineBreak = "\n" -) - -const ( - DateTime = "2006-01-02 15:04:05" - DateData = "20060102150405" - DateHour = "2006010215" - DateZone = "2006-01-02 15:04:05 +0000 UTC" -) - -const ( - MaxInt32Number = 2147483647 -) - -const ( - MaxLimitData = 1000 -) - -var ( - Version string = "-" - BuildTime string = "-" - GoVer string = "-" -) - -var ( - DefaultUriPrefix = "/api/rest" -) -var ( - ErrParamsNotAdapted = errors.New("the number of params is not adapted") - - // PM module error message - ErrPMNotFoundData = errors.New("not found PM data") - - // CM module error message - ErrCMNotFoundTargetNE = errors.New("not found target NE") - ErrCMCannotDeleteActiveNE = errors.New("can not delete an active NE") - ErrCMInvalidBackupFile = errors.New("invalid backup file") - ErrCMNotMatchMD5File = errors.New("md5 not match between file and url") - ErrCMNotMatchSignFile = errors.New("digests signatures not match in the file") - ErrCMExistSoftwareFile = errors.New("exist the same software package file") - ErrCMNotFoundTargetSoftware = errors.New("not found the target software package") - ErrCMNotFoundTargetNeVersion = errors.New("not found the target NE version") - ErrCMNotFoundRollbackNeVersion = errors.New("not found the rollback NE version") - ErrCMUnknownServiceAction = errors.New("unknown service action") - ErrCMUnknownInstanceAction = errors.New("unknown instance action") - - ErrCMNotFoundTargetBackupFile = errors.New("not found the target NE backup") - ErrCMUnknownSoftwareFormat = errors.New("unknown software package format") // 未知软件包格式 - - // TRACE module error message - ErrTraceFailedDistributeToNEs = errors.New("failed to distribute trace task to target NEs") - ErrTraceNotCarriedTaskID = errors.New("not carried task id in request url") - - // MML module error define - ErrMmlInvalidCommandFormat = errors.New("invalid mml command format") -) diff --git a/lib/global/kits.go b/lib/global/kits.go deleted file mode 100644 index 22091f08..00000000 --- a/lib/global/kits.go +++ /dev/null @@ -1,728 +0,0 @@ -package global - -import ( - "archive/zip" - "bytes" - "crypto/md5" - "encoding/hex" - "encoding/json" - "fmt" - "io" - "net" - "net/http" - "os" - "path/filepath" - "reflect" - "regexp" - "sort" - "strings" - "time" -) - -const ( - IsIPv4 = "IPv4" - IsIPv6 = "IPv6" - NonIP = "NonIp" -) - -type em struct{} - -func GetPkgName() string { - return reflect.TypeOf(em{}).PkgPath() -} - -// interface{} change to map[string]interface{} -// interface{} data is []interface{} -func ListToMap(list interface{}, key string) map[string]interface{} { - res := make(map[string]interface{}) - arr := ToSlice(list) - for _, row := range arr { - immutable := reflect.ValueOf(row) - val := immutable.FieldByName(key).String() - res[val] = row - } - return res -} - -// interface{} change to []interface{} -func ToSlice(arr interface{}) []interface{} { - ret := make([]interface{}, 0) - v := reflect.ValueOf(arr) - if v.Kind() != reflect.Slice { - ret = append(ret, arr) - return ret - } - l := v.Len() - for i := 0; i < l; i++ { - ret = append(ret, v.Index(i).Interface()) - } - return ret -} - -var TodoList []Todo - -type Todo struct { - Id int64 - Item string -} - -// JSON序列化方式 -func jsonStructToMap(TodoList Todo) (map[string]interface{}, error) { - // 结构体转json - strRet, err := json.Marshal(TodoList) - if err != nil { - return nil, err - } - // json转map - var mRet map[string]interface{} - err1 := json.Unmarshal(strRet, &mRet) - if err1 != nil { - return nil, err1 - } - return mRet, nil -} - -func IsContain(item string, items []string) bool { - for _, e := range items { - if e == item { - return true - } - } - return false -} - -func IsContainP(item string, items *[]string, size int) bool { - for i := 0; i < size; i++ { - if (*items)[i] == item { - return true - } - } - return false -} - -// 将字符串 分割成 字符串数组 -// @s:分割符 -func SplitString(str string, s string) []string { - sa := strings.Split(str, s) - return sa -} - -// 合并字符串数组 -func MergeStringArr(a, b []string) []string { - var arr []string - for _, i := range a { - arr = append(arr, i) - } - for _, j := range b { - arr = append(arr, j) - } - return arr -} - -// 数组去重 -func UniqueStringArr(m []string) []string { - d := make([]string, 0) - tempMap := make(map[string]bool, len(m)) - for _, v := range m { // 以值作为键名 - if tempMap[v] == false { - tempMap[v] = true - d = append(d, v) - } - } - return d -} - -// 合并整型数组 -func MergeArr(a, b []int) []int { - var arr []int - for _, i := range a { - arr = append(arr, i) - } - for _, j := range b { - arr = append(arr, j) - } - return arr -} - -// 数组去重 -func UniqueArr(m []int) []int { - d := make([]int, 0) - tempMap := make(map[int]bool, len(m)) - for _, v := range m { // 以值作为键名 - if tempMap[v] == false { - tempMap[v] = true - d = append(d, v) - } - } - return d -} - -// 升序 -func AscArr(e []int) []int { - sort.Ints(e[:]) - return e -} - -// 降序 -func DescArr(e []int) []int { - sort.Sort(sort.Reverse(sort.IntSlice(e))) - return e -} - -func MatchRmUID(p string, s string) bool { - match, _ := regexp.MatchString(p, s) - return match -} - -type OrderedMap struct { - Order []string - Map map[string]interface{} -} - -func (om *OrderedMap) UnmarshalJson(b []byte) error { - json.Unmarshal(b, &om.Map) - - index := make(map[string]int) - for key := range om.Map { - om.Order = append(om.Order, key) - esc, _ := json.Marshal(key) //Escape the key - index[key] = bytes.Index(b, esc) - } - - sort.Slice(om.Order, func(i, j int) bool { return index[om.Order[i]] < index[om.Order[j]] }) - return nil -} - -func (om OrderedMap) MarshalJson() ([]byte, error) { - var b []byte - buf := bytes.NewBuffer(b) - buf.WriteRune('{') - l := len(om.Order) - for i, key := range om.Order { - km, err := json.Marshal(key) - if err != nil { - return nil, err - } - buf.Write(km) - buf.WriteRune(':') - vm, err := json.Marshal(om.Map[key]) - if err != nil { - return nil, err - } - buf.Write(vm) - if i != l-1 { - buf.WriteRune(',') - } - fmt.Println(buf.String()) - } - buf.WriteRune('}') - fmt.Println(buf.String()) - return buf.Bytes(), nil -} - -func GetBodyCopy(r *http.Request) (*bytes.Buffer, error) { - // If r.bodyBuf present, return the copy - // if r.bodyBuf != nil { - // return bytes.NewBuffer(r.bodyBuf.Bytes()), nil - // } - - // Maybe body is `io.Reader`. - // Note: Resty user have to watchout for large body size of `io.Reader` - if r.Body != nil { - b, err := io.ReadAll(r.Body) - if err != nil { - return nil, err - } - - // Restore the Body - // close(r.Body) - r.Body = io.NopCloser(bytes.NewReader(b)) - - // Return the Body bytes - return bytes.NewBuffer(b), nil - } - return nil, nil -} - -func UnmarshalBody(r *http.Request, v *interface{}, maxLen int64) error { - body, err := io.ReadAll(io.LimitReader(r.Body, maxLen)) - if err != nil { - return err - } - - return json.Unmarshal(body, v) -} - -func SetNotifyUrl(ip string, port uint16, uri string) string { - return fmt.Sprintf("http://%s:%d%s", ip, port, uri) -} - -func GetIps() (ips []string, err error) { - interfaceAddr, err := net.InterfaceAddrs() - if err != nil { - return ips, err - } - - for _, address := range interfaceAddr { - ipNet, isVailIpNet := address.(*net.IPNet) - // 检查ip地址判断是否回环地址 - if isVailIpNet && !ipNet.IP.IsLoopback() { - if ipNet.IP.To4() != nil { - ips = append(ips, ipNet.IP.String()) - } - } - } - return ips, nil -} - -func GetCurrentTimeSliceIndexByPeriod(t time.Time, period int) int { - index := int((t.Hour()*60+t.Minute())/period) - 1 - if index < 0 { - return int(24*60/period) - 1 - } - return index -} - -var ( - cst *time.Location -) - -// RFC3339ToDateTime convert rfc3339 value to china standard time layout -func RFC3339ToDateTime(value string) (string, error) { - ts, err := time.Parse(time.RFC3339, value) - if err != nil { - return "", err - } - - return ts.In(cst).Format("2006-01-02 15:04:05"), nil -} - -// CreateTimeDir 根据当前时间格式来创建文件夹 -func CreateTimeDir(fmt string, path string) string { - folderName := time.Now().Format(fmt) - folderPath := filepath.Join(path, folderName) - if _, err := os.Stat(folderPath); os.IsNotExist(err) { - // 必须分成两步:先创建文件夹、再修改权限 - os.Mkdir(folderPath, 0664) //0644也可以os.ModePerm - os.Chmod(folderPath, 0664) - } - return folderPath -} - -// CreateDir 根据传入的目录名和路径来创建文件夹 -func CreateDir(folderName string, path string) string { - folderPath := filepath.Join(path, folderName) - if _, err := os.Stat(folderPath); os.IsNotExist(err) { - // 必须分成两步:先创建文件夹、再修改权限 - os.MkdirAll(folderPath, 0664) //0644也可以os.ModePerm - os.Chmod(folderPath, 0664) - } - return folderPath -} - -func GetFmtTimeString(srcFmt string, timeString string, dstFmt string) string { - t, _ := time.ParseInLocation(srcFmt, timeString, time.Local) - return t.Format(dstFmt) -} - -func GetFileMD5Sum(filePath string) (string, error) { - file, err := os.Open(filePath) - if err != nil { - return "", err - } - defer file.Close() - md5 := md5.New() - _, err = io.Copy(md5, file) - if err != nil { - return "", err - } - - md5str := hex.EncodeToString(md5.Sum(nil)) - - return md5str, nil -} - -// PathExists check path is exist or no -func PathExists(path string) (bool, error) { - _, err := os.Stat(path) - if err == nil { //文件或者目录存在 - return true, nil - } - if os.IsNotExist(err) { - return false, nil - } - return false, err -} - -// PathExists check path is exist or no -func FilePathExists(filePath string) (bool, error) { - _, err := os.Stat(filePath) - if err == nil { //文件或者目录存在 - return true, nil - } - if os.IsNotExist(err) { - return false, nil - } - return false, err -} - -func GetDayDuration(d1, d2 string) int64 { - a, _ := time.Parse("2006-01-02", d1) - b, _ := time.Parse("2006-01-02", d2) - d := a.Sub(b) - - return (int64)(d.Hours() / 24) -} - -func GetSecondsSinceDatetime(datetimeStr string) (int64, error) { - loc1, _ := time.LoadLocation("Local") - // 解析日期时间字符串为时间对象 - datetime, err := time.ParseInLocation(time.DateTime, datetimeStr, loc1) - if err != nil { - return 0, err - } - - // 计算时间差 - duration := time.Since(datetime) - - // 获取时间差的秒数 - seconds := int64(duration.Seconds()) - - return seconds, nil -} - -func GetSecondDuration(time1, time2 string) (int64, error) { - loc1, _ := time.LoadLocation("Local") - // 解析日期时间字符串为时间对象 - t1, err := time.ParseInLocation(time.DateTime, time1, loc1) - if err != nil { - return 0, err - } - t2, err := time.ParseInLocation(time.DateTime, time2, loc1) - if err != nil { - return 0, err - } - - // 计算时间差 - duration := t2.Sub(t1) - - // 获取时间差的秒数 - seconds := int64(duration.Seconds()) - - return seconds, nil -} - -// 0: invalid ip -// 4: IPv4 -// 6: IPv6 -func ParseIP(s string) (net.IP, int) { - ip := net.ParseIP(s) - if ip == nil { - return nil, 0 - } - for i := 0; i < len(s); i++ { - switch s[i] { - case '.': - return ip, 4 - case ':': - return ip, 6 - } - } - return nil, 0 -} - -func BytesCombine1(pBytes ...[]byte) []byte { - return bytes.Join(pBytes, []byte("")) -} - -func BytesCombine(pBytes ...[]byte) []byte { - length := len(pBytes) - s := make([][]byte, length) - for index := 0; index < length; index++ { - s[index] = pBytes[index] - } - sep := []byte("") - return bytes.Join(s, sep) -} - -func ParseIPAddr(ip string) string { - ipAddr := net.ParseIP(ip) - - if ipAddr != nil { - if ipAddr.To4() != nil { - return IsIPv4 - } else { - return IsIPv6 - } - } - - return NonIP -} - -func CombineHostUri(ip string, port string) string { - var hostUri string = "" - ipType := ParseIPAddr(ip) - if ipType == IsIPv4 { - hostUri = fmt.Sprintf("http://%s:%v", ip, port) - } else { - hostUri = fmt.Sprintf("http://[%s]:%v", ip, port) - } - - return hostUri -} - -func StructToMap(obj interface{}) map[string]interface{} { - objValue := reflect.ValueOf(obj) - objType := objValue.Type() - - m := make(map[string]interface{}) - - for i := 0; i < objValue.NumField(); i++ { - field := objValue.Field(i) - fieldName := objType.Field(i).Name - - m[fieldName] = field.Interface() - } - - return m -} - -// ToMap 结构体转为Map[string]interface{} -func ToMap(in interface{}, tagName string) (map[string]interface{}, error) { - out := make(map[string]interface{}) - - v := reflect.ValueOf(in) - if v.Kind() == reflect.Ptr { - v = v.Elem() - } - - if v.Kind() != reflect.Struct { // 非结构体返回错误提示 - return nil, fmt.Errorf("ToMap only accepts struct or struct pointer; got %T", v) - } - - t := v.Type() - // 遍历结构体字段 - // 指定tagName值为map中key;字段值为map中value - for i := 0; i < v.NumField(); i++ { - fi := t.Field(i) - if tagValue := fi.Tag.Get(tagName); tagValue != "" { - out[tagValue] = v.Field(i).Interface() - } - } - return out, nil -} - -func ZipOneFile(srcFile, dstZip string, pathFlag bool) error { - zipFile, err := os.Create(dstZip) - if err != nil { - return err - } - defer zipFile.Close() - - zipWriter := zip.NewWriter(zipFile) - defer zipWriter.Close() - - fileToCompress, err := os.Open(srcFile) - if err != nil { - return err - } - defer fileToCompress.Close() - - var fileInZip io.Writer - if pathFlag { - fileInZip, err = zipWriter.Create(srcFile) - if err != nil { - return err - } - } else { - // 获取文件的基本名称 - fileName := filepath.Base(fileToCompress.Name()) - fileInZip, err = zipWriter.Create(fileName) - if err != nil { - return err - } - } - - _, err = io.Copy(fileInZip, fileToCompress) - if err != nil { - return err - } - return nil -} - -func ZipDirectoryFile(srcDir, dstZip string) error { - // Create a new zip file - zipfileWriter, err := os.Create(dstZip) - if err != nil { - return err - } - defer zipfileWriter.Close() - - // Create a new zip archive - zipWriter := zip.NewWriter(zipfileWriter) - defer zipWriter.Close() - - // Walk through the directory and add files to the zip archive - err = filepath.Walk(srcDir, func(path string, info os.FileInfo, err error) error { - if err != nil { - return err - } - - // Create a new file header for the current file - header, err := zip.FileInfoHeader(info) - if err != nil { - return err - } - - // Set the name of the file within the zip archive - header.Name = filepath.Join(filepath.Base(srcDir), path[len(srcDir):]) - - // If the current file is a directory, skip it - if info.IsDir() { - return nil - } - - // Create a new file in the zip archive - fileWriter, err := zipWriter.CreateHeader(header) - if err != nil { - return err - } - - // Open the current file - file, err := os.Open(path) - if err != nil { - return err - } - defer file.Close() - - // Copy the contents of the current file to the zip archive - _, err = io.Copy(fileWriter, file) - if err != nil { - return err - } - - return nil - }) - - return err -} - -// 判断软件包是rpm或者deb, 1:rpm, 2:deb, 0:unknown format -func JudgeRpmOrDebPackage(filePath string) (int, error) { - var fileType int = 0 - file, err := os.Open(filePath) - if err != nil { - return fileType, err - } - defer file.Close() - - // Read the first 6 bytes of the file - header := make([]byte, 6) - _, err = file.Read(header) - if err != nil { - return fileType, err - } - - // Check the magic numbers to determine the package format - if string(header) == "!Sequence: {{.AlarmSeq}}
+NE Name: {{.NeName}}
+NE IP: {{.NeIp}}
+Title: {{.AlarmTitle}}
+Severity: {{.OrigSeverity}}
+Event Time: {{.AlarmTime}}
+Alarm Status: {{.AlarmStatus}}
+ Automatic sent by OMC, please do not reply! + ` + htmlTpl, err := ht.New("htmltpl").Parse(htmlBodyTemplate) + if err != nil { + return fmt.Errorf("EmailAlarm Parse alarmId:%s fail %s", a.AlarmId, err.Error()) + } + // 参数值 + data := map[string]any{ + "AlarmSeq": a.AlarmSeq, + "NeName": a.NeName, + "NeIp": neIP, + "AlarmTitle": a.AlarmTitle, + "OrigSeverity": a.OrigSeverity, + "AlarmTime": date.ParseDateToStr(a.EventTime, time.RFC3339), + "AlarmStatus": a.AlarmStatus, + } + buffer := bytes.NewBuffer(nil) + if err := htmlTpl.Execute(buffer, data); err != nil { + return fmt.Errorf("EmailAlarm Execute alarmId:%s fail %s", a.AlarmId, err.Error()) + } + htmlStr := buffer.String() + + // 发送邮件 + err = EmailSendHTML(htmlStr, strings.Split(emailList, ",")) + if err != nil { + return fmt.Errorf("EmailAlarm alarmId:%s fail %s", a.AlarmId, err.Error()) + } + return err +} + +// EmailSendHTML 发送HTML邮件 +func EmailSendHTML(htmlStr string, toEmailArr []string) error { + // QQ 邮箱: + // SMTP 服务器地址:smtp.qq.com(SSL协议端口:465/994 | 非SSL协议端口:25) + // 163 邮箱: + // SMTP 服务器地址:smtp.163.com(端口:25) + // host := "mail.agrandtech.com" + // port := 25 + // userName := "smtpext@agrandtech.com" + // password := "1000smtp@omc!" + + emailConf := config.Get("notification.email").(map[string]any) + enable := parse.Boolean(emailConf["enable"]) + if !enable { + return fmt.Errorf("email notification not enable") + } + title := fmt.Sprint(emailConf["title"]) + smtp := fmt.Sprint(emailConf["smtp"]) + port := parse.Number(emailConf["port"]) + user := fmt.Sprint(emailConf["user"]) + password := fmt.Sprint(emailConf["password"]) + + message := mail.NewMsg() + // 发件人 + if err := message.From(user); err != nil { + return fmt.Errorf("failed to set From address: %s", err) + } + // 收件人 + hasTo := false + for _, v := range toEmailArr { + if err := message.AddTo(v); err != nil { + logger.Errorf("failed to set To address: %v %s", v, err) + continue + } + hasTo = true + } + if !hasTo { + return fmt.Errorf("failed to set To address not has") + } + // 邮件主题 + message.Subject(title) + // 邮件HTML内容 + message.SetBodyString(mail.TypeTextHTML, htmlStr) + // 连接到邮件SMTP服务器 + client, err := mail.NewClient(smtp, + mail.WithSMTPAuth(mail.SMTPAuthAutoDiscover), + mail.WithUsername(user), + mail.WithPort(int(port)), + mail.WithPassword(password), + mail.WithTLSConfig(&tls.Config{InsecureSkipVerify: true}), + ) + if err != nil { + return fmt.Errorf("failed to create mail client: %s", err) + } + // 发送 + if err := client.DialAndSend(message); err != nil { + return fmt.Errorf("failed to send mail: %s", err) + } + return nil +} diff --git a/src/modules/notification/service/smsc.go b/src/modules/notification/service/smsc.go new file mode 100644 index 00000000..be039b31 --- /dev/null +++ b/src/modules/notification/service/smsc.go @@ -0,0 +1,164 @@ +package service + +import ( + "bytes" + "fmt" + "strings" + tt "text/template" + "time" + + "github.com/linxGnu/gosmpp" + "github.com/linxGnu/gosmpp/data" + "github.com/linxGnu/gosmpp/pdu" + + "be.ems/src/framework/config" + "be.ems/src/framework/logger" + "be.ems/src/framework/utils/date" + "be.ems/src/framework/utils/parse" + neDataModel "be.ems/src/modules/network_data/model" +) + +var smscSession *gosmpp.Session + +// connSM 连接smsc +func connSM() *gosmpp.Session { + if smscSession != nil { + return smscSession + } + smscAddr := fmt.Sprint(config.Get("notification.smsc.addr")) + systemType := fmt.Sprint(config.Get("notification.smsc.systemtype")) + systemID := fmt.Sprint(config.Get("notification.smsc.systemid")) + password := fmt.Sprint(config.Get("notification.smsc.password")) + // 建立连接 + session, err := gosmpp.NewSession( + gosmpp.TXConnector(gosmpp.NonTLSDialer, gosmpp.Auth{ + SMSC: smscAddr, + SystemID: systemID, + Password: password, + SystemType: systemType, + }), + gosmpp.Settings{ + ReadTimeout: 2 * time.Second, + OnSubmitError: func(_ pdu.PDU, err error) { + logger.Errorf("failed to smpp submit error: %s", err.Error()) + }, + OnRebindingError: func(err error) { + logger.Errorf("failed to smpp rebinding error: %s", err.Error()) + }, + }, -1) + if err != nil { + logger.Errorf("failed to create smpp new session error: %s", err.Error()) + return nil + } + // defer session.Close() + smscSession = session + return smscSession +} + +// newSubmitSM 构建短信提交 +func newSubmitSM(destSM string, message string) (*pdu.SubmitSM, error) { + dataCoding := parse.Number(config.Get("notification.smsc.coding")) + enc := data.FromDataCoding(byte(dataCoding)) + srcSM := fmt.Sprint(config.Get("notification.smsc.servicenumber")) + // 源地址 + srcAddr := pdu.NewAddress() + srcAddr.SetTon(5) + srcAddr.SetNpi(0) + err := srcAddr.SetAddress(srcSM) + if err != nil { + return nil, err + } + destAddr := pdu.NewAddress() + destAddr.SetTon(1) + destAddr.SetNpi(1) + err = destAddr.SetAddress(destSM) + if err != nil { + return nil, err + } + // build up submitSM + submitSM := pdu.NewSubmitSM().(*pdu.SubmitSM) + submitSM.SourceAddr = srcAddr + submitSM.DestAddr = destAddr + if err = submitSM.Message.SetMessageWithEncoding(message, enc); err != nil { + return nil, err + } + submitSM.ProtocolID = 0 + submitSM.RegisteredDelivery = 1 + submitSM.ReplaceIfPresentFlag = 0 + submitSM.EsmClass = 0 + return submitSM, nil +} + +// SMSCAlarm 发告警短信 +func SMSCAlarm(a neDataModel.Alarm, neIP string) error { + mobileList := fmt.Sprint(config.Get("notification.smsc.list")) + if len(mobileList) == 0 { + return fmt.Errorf("smsc list is empty") + } + + // 模板 + textBodyTemplate := `Alarm Notification + Sequence: {{.AlarmSeq}}, + NE Name: {{.NeName}} + NE IP: {{.NeIp}} + Title: {{.AlarmTitle}} + Severity: {{.OrigSeverity}} + Event Time: {{.AlarmTime}} + Alarm Status: {{.AlarmStatus}} + Automatic sent by OMC, please do not reply!` + textTpl, err := tt.New("texttpl").Parse(textBodyTemplate) + if err != nil { + return fmt.Errorf("SMSCAlarm alarmId:%s fail %s", a.AlarmId, err.Error()) + } + // 参数值 + data := map[string]any{ + "AlarmSeq": a.AlarmSeq, + "NeName": a.NeName, + "NeIp": neIP, + "AlarmTitle": a.AlarmTitle, + "OrigSeverity": a.OrigSeverity, + "AlarmTime": date.ParseDateToStr(a.EventTime, time.RFC3339), + "AlarmStatus": a.AlarmStatus, + } + buffer := bytes.NewBuffer(nil) + if err := textTpl.Execute(buffer, data); err != nil { + return fmt.Errorf("EmailAlarm Execute alarmId:%s fail %s", a.AlarmId, err.Error()) + } + textStr := buffer.String() + + // 发送短信 + err = SMSCSendText(textStr, strings.Split(mobileList, ",")) + if err != nil { + return fmt.Errorf("EmailAlarm alarmId:%s fail %s", a.AlarmId, err.Error()) + } + return err +} + +// SMSCSendText 发送文本短信 +func SMSCSendText(textStr string, toMobileArr []string) error { + enable := parse.Boolean(config.Get("notification.smsc.enable")) + if !enable { + return fmt.Errorf("smsc notification not enable") + } + sm := connSM() + if sm == nil { + return fmt.Errorf("smpp new session create failed") + } + + errArr := []string{} + for _, v := range toMobileArr { + submitSM, err := newSubmitSM(v, textStr) + if err != nil { + errArr = append(errArr, err.Error()) + continue + } + if err = sm.Transceiver().Submit(submitSM); err != nil { + errArr = append(errArr, err.Error()) + continue + } + } + if len(errArr) > 0 { + return fmt.Errorf("%s", strings.Join(errArr, ",")) + } + return nil +} diff --git a/src/modules/oam/controller/api_rest.go b/src/modules/oam/controller/api_rest.go new file mode 100644 index 00000000..cfcd2822 --- /dev/null +++ b/src/modules/oam/controller/api_rest.go @@ -0,0 +1,722 @@ +package controller + +import ( + "encoding/json" + "fmt" + "strings" + "time" + + "github.com/gin-gonic/gin" + "github.com/tsmask/go-oam" + goOamState "github.com/tsmask/go-oam/modules/state/service" + + "be.ems/src/framework/config" + "be.ems/src/framework/logger" + "be.ems/src/framework/resp" + "be.ems/src/framework/utils/date" + "be.ems/src/framework/utils/parse" + neFetchlink "be.ems/src/modules/network_element/fetch_link" + neModel "be.ems/src/modules/network_element/model" + neService "be.ems/src/modules/network_element/service" + oamService "be.ems/src/modules/oam/service" +) + +// NewAPIRest 实例化控制层 +var NewAPIRest = &APIRestController{} + +// APIRestController 北向定义 控制层处理 +// +// PATH /api/rest +type APIRestController struct{} + +// ResolveAlarm 接收告警 +// +// POST /faultManagement/v1/elementType/:elementTypeValue/objectType/alarms +func (s APIRestController) ResolveAlarm(c *gin.Context) { + var body []struct { + AlarmSeq int `json:"alarmSeq"` + AlarmId string `json:"alarmId"` + NeId string `json:"neId"` // 收到实际是rmUID + AlarmCode int `json:"alarmCode"` + AlarmTitle string `json:"alarmTitle"` + EventTime string `json:"eventTime"` + AlarmType string `json:"alarmType"` + OrigSeverity string `json:"origSeverity"` + PerceivedSeverity string `json:"perceivedSeverity"` + PVFlag string `json:"pvFlag"` + NeName string `json:"neName"` + NeType string `json:"neType"` + ObjectUid string `json:"objectUid"` + ObjectName string `json:"objectName"` + ObjectType string `json:"objectType"` + LocationInfo string `json:"locationInfo"` + Province string `json:"province"` + AlarmStatus int `json:"alarmStatus"` + SpecificProblem string `json:"specificProblem"` + SpecificProblemID string `json:"specificProblemID"` + AddInfo string `json:"addInfo"` + } + if err := c.ShouldBindBodyWithJSON(&body); err != nil { + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_PARSER, errMsgs)) + return + } + elementTypeValue := c.Param("elementTypeValue") + + // alarmTypeValue 映射值 + alarmTypeValue := func(str string) string { + arr := []string{ + oam.ALARM_TYPE_COMMUNICATION_ALARM, + oam.ALARM_TYPE_EQUIPMENT_ALARM, + oam.ALARM_TYPE_PROCESSING_FAILURE, + oam.ALARM_TYPE_ENVIRONMENTAL_ALARM, + oam.ALARM_TYPE_QUALITY_OF_SERVICE_ALARM, + } + for k, v := range arr { + if v == str { + return v + } + if fmt.Sprint(k+1) == str { + return v + } + } + return str + } + + // origSeverityValue 映射值 + origSeverityValue := func(str string) string { + arr := []string{ + oam.ALARM_SEVERITY_CRITICAL, + oam.ALARM_SEVERITY_MAJOR, + oam.ALARM_SEVERITY_MINOR, + oam.ALARM_SEVERITY_WARNING, + oam.ALARM_SEVERITY_EVENT, + } + for k, v := range arr { + if v == str { + return v + } + if fmt.Sprint(k+1) == str { + return v + } + } + return str + } + + // alarmStatusValue 映射值 + alarmStatusValue := func(value int) string { + arr := []string{ + oam.ALARM_STATUS_CLEAR, + oam.ALARM_STATUS_ACTIVE, + } + for k, v := range arr { + if k == value { + return v + } + } + return oam.ALARM_STATUS_ACTIVE + } + + alarmArr := make([]oam.Alarm, 0) + for _, v := range body { + if !strings.EqualFold(v.NeType, elementTypeValue) { + c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "elementType is inconsistent with neType")) + return + } + // 产生时间 + eventTime := date.ParseStrToDate(v.EventTime, time.RFC3339) + // 创建告警 + alarm := oam.Alarm{ + NeUid: v.NeId, // 网元唯一标识 + AlarmTime: eventTime.UnixMilli(), // 事件产生时间 + AlarmId: v.AlarmId, // 告警ID 唯一,清除时对应 + AlarmCode: v.AlarmCode, // 告警状态码 + AlarmType: alarmTypeValue(v.AlarmType), // 告警类型 + AlarmTitle: v.AlarmTitle, // 告警标题 + PerceivedSeverity: origSeverityValue(v.OrigSeverity), // 告警级别 + AlarmStatus: alarmStatusValue(v.AlarmStatus), // 告警状态 + SpecificProblem: v.SpecificProblem, // 告警问题原因 + SpecificProblemID: v.SpecificProblemID, // 告警问题原因ID + AddInfo: v.AddInfo, // 告警辅助信息 + LocationInfo: v.LocationInfo, // 告警定位信息 + } + alarmArr = append(alarmArr, alarm) + } + + errArr := make([]string, 0) + for _, alarm := range alarmArr { + if err := oamService.NewAlarm.Resolve(alarm); err != nil { + errArr = append(errArr, err.Error()) + } + } + + if len(errArr) > 0 { + c.JSON(200, resp.ErrData(errArr)) + return + } + c.JSON(200, resp.Ok(nil)) +} + +// ResolveCDR 接收话单 +// +// POST /cdrManagement/v1/elementType/:elementTypeValue/objectType/cdrEvent +func (s APIRestController) ResolveCDR(c *gin.Context) { + var body struct { + NeType string `json:"neType" ` + NeName string `json:"neName" ` + RmUID string `json:"rmUID" ` + Timestamp int `json:"timestamp" ` + CDR map[string]any `json:"CDR" ` + } + if err := c.ShouldBindBodyWithJSON(&body); err != nil { + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_PARSER, errMsgs)) + return + } + elementTypeValue := c.Param("elementTypeValue") + if !strings.EqualFold(body.NeType, elementTypeValue) { + c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "elementType is inconsistent with neType")) + return + } + + recordTime := time.Now() + if body.Timestamp > 1e12 { + recordTime = time.UnixMilli(int64(body.Timestamp)) + } else if body.Timestamp > 1e9 { + recordTime = time.Unix(int64(body.Timestamp), 0) + } + // 创建CDR + cdr := oam.CDR{ + NeUid: body.RmUID, // 网元唯一标识 + RecordTime: recordTime.UnixMilli(), // 记录时间 时间戳毫秒,Push时自动填充 + Data: body.CDR, // 话单信息 + } + if err := oamService.NewCDR.Resolve(cdr); err != nil { + c.JSON(200, resp.ErrMsg(err.Error())) + return + } + c.JSON(200, resp.Ok(nil)) +} + +// ResolveKPI 接收KPI +// +// POST /performanceManagement/v1/elementType/:elementTypeValue/objectType/kpiReport/:index +func (s APIRestController) ResolveKPI(c *gin.Context) { + var body struct { + Timestamp string `json:"TimeStamp" binding:"required"` + Task struct { + Period struct { + StartTime string `json:"StartTime"` + EndTime string `json:"EndTime"` + } `json:"Period" binding:"required"` + NE struct { + NEName string `json:"NEName"` + RmUID string `json:"rmUID"` + NeType string `json:"NeType"` + KPIs []struct { + KPIID string `json:"KPIID"` + Value int64 `json:"Value"` + Err string `json:"Err"` + } `json:"KPIs" binding:"required"` + } `json:"NE" binding:"required"` + } `json:"Task" binding:"required"` + } + if err := c.ShouldBindBodyWithJSON(&body); err != nil { + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_PARSER, errMsgs)) + return + } + elementTypeValue := c.Param("elementTypeValue") + if !strings.EqualFold(body.Task.NE.NeType, elementTypeValue) { + c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "elementType is inconsistent with neType")) + return + } + // index := c.Param("index") + + timestamp := body.Timestamp + taskPeriod := body.Task.Period + taskNeKPIs := body.Task.NE.KPIs + // 时间数据处理 + receiverTime := date.ParseStrToDate(timestamp, date.YYYY_MM_DDTHH_MM_SSZ) + startTime := date.ParseStrToDate(taskPeriod.StartTime, date.YYYY_MM_DDTHH_MM_SSZ) + endTime := date.ParseStrToDate(taskPeriod.EndTime, date.YYYY_MM_DDTHH_MM_SSZ) + granularity := parse.Number(endTime.Sub(startTime).Seconds()) + // kpi data数据 + KpiValues := make(map[string]float64, 0) + for _, v := range taskNeKPIs { + KpiValues[v.KPIID] = float64(v.Value) + } + + // 创建KPI + kpi := oam.KPI{ + NeUid: body.Task.NE.RmUID, // 网元唯一标识 + RecordTime: receiverTime.UnixMilli(), // 记录时间 时间戳毫秒,Push时自动填充 + Granularity: granularity, // 时间间隔 5/10/.../60/300 (秒) + Data: KpiValues, // 指标信息 + } + if err := oamService.NewKPI.Resolve(kpi); err != nil { + c.JSON(200, resp.ErrMsg(err.Error())) + return + } + c.JSON(200, resp.Ok(nil)) +} + +// ResolveNBState 接收基站状态变更 +// +// POST /ueManagement/v1/elementType/:elementTypeValue/objectType/nbState +func (s APIRestController) ResolveNBState(c *gin.Context) { + var body struct { + NeType string `json:"neType" ` + NeName string `json:"neName" ` + RmUID string `json:"rmUID"` + StateList []struct { + Address string `json:"address" ` + Name string `json:"name" ` + Position string `json:"position" ` + NbName string `json:"nbName" ` + State string `json:"state" ` // "OFF" or "ON" + OffTime string `json:"offTime" ` //if State=OFF, will set it + OnTime string `json:"onTime" ` //if State=ON , will set it + } + } + if err := c.ShouldBindBodyWithJSON(&body); err != nil { + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_PARSER, errMsgs)) + return + } + elementTypeValue := c.Param("elementTypeValue") + if !strings.EqualFold(body.NeType, elementTypeValue) { + c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "elementType is inconsistent with neType")) + return + } + + if len(body.StateList) == 0 { + c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "no stateList")) + return + } + + nbStateArr := make([]oam.NBState, 0) + for _, v := range body.StateList { + if v.Address == "" || v.State == "" { + continue + } + stateTime := date.ParseStrToDate(v.OffTime, time.RFC3339) + stateStr := oam.NB_STATE_OFF + if v.State == "ON" { + stateTime = date.ParseStrToDate(v.OnTime, time.RFC3339) + stateStr = oam.NB_STATE_ON + } + + // 创建NbState + nbState := oam.NBState{ + NeUid: body.RmUID, // 网元唯一标识 + RecordTime: time.Now().UnixMilli(), // 记录时间 时间戳毫秒,Push时自动填充 + Address: v.Address, // 基站地址 + DeviceName: v.NbName, // 基站设备名称 + State: stateStr, // 基站状态 ON/OFF + StateTime: stateTime.UnixMilli(), // 基站状态时间 时间戳毫秒 + Name: v.Name, // 基站名称 网元标记 + Position: v.Position, // 基站位置 网元标记 + } + nbStateArr = append(nbStateArr, nbState) + } + + errArr := make([]string, 0) + for _, nbState := range nbStateArr { + if err := oamService.NewNBState.Resolve(nbState); err != nil { + errArr = append(errArr, err.Error()) + } + } + + if len(errArr) > 0 { + c.JSON(200, resp.ErrData(errArr)) + return + } + c.JSON(200, resp.Ok(nil)) +} + +// ResolveUENB 接收终端接入基站 +// +// POST /logManagement/v1/elementType/:elementTypeValue/objectType/ueEvent +func (s APIRestController) ResolveUENB(c *gin.Context) { + var body struct { + NeType string `json:"neType" ` + NeName string `json:"neName" ` + RmUID string `json:"rmUID" ` + Timestamp int64 `json:"timestamp" ` + EventType string `json:"eventType" ` + EventJson map[string]any `json:"eventJSON" ` + } + if err := c.ShouldBindBodyWithJSON(&body); err != nil { + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_PARSER, errMsgs)) + return + } + elementTypeValue := c.Param("elementTypeValue") + if !strings.EqualFold(body.NeType, elementTypeValue) { + c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "elementType is inconsistent with neType")) + return + } + + // 记录时间 + recordTime := time.Now() + if body.Timestamp > 1e12 { + recordTime = time.UnixMilli(int64(body.Timestamp)) + } else if body.Timestamp > 1e9 { + recordTime = time.Unix(int64(body.Timestamp), 0) + } + + // 创建UENB + uenb := oam.UENB{ + NeUid: body.RmUID, // 网元唯一标识 + RecordTime: recordTime.UnixMilli(), // 记录时间 + NBId: "0", // 基站ID + CellId: "0", // 小区ID + TAC: "", // TAC + IMSI: "", // IMSI + Result: oam.UENB_RESULT_AUTH_SUCCESS, // 结果值 + Type: oam.UENB_TYPE_DETACH, // 终端接入基站类型 + } + + // 基站ID + if v, ok := body.EventJson["eNBID"]; ok && v != nil { + uenb.NBId = fmt.Sprint(v) + } + if v, ok := body.EventJson["gNBID"]; ok && v != nil { + uenb.NBId = fmt.Sprint(v) + } + // 小区ID + if v, ok := body.EventJson["cellID"]; ok && v != nil { + uenb.CellId = fmt.Sprint(v) + } + // TAC + if v, ok := body.EventJson["tacID"]; ok && v != nil { + uenb.TAC = fmt.Sprint(v) + } + // IMSI + if v, ok := body.EventJson["imsi"]; ok && v != nil { + uenb.IMSI = fmt.Sprint(v) + } + // 结果值 + if v, ok := body.EventJson["result"]; ok && v != nil { + uenb.Result = fmt.Sprint(v) + } + // 终端接入基站类型 + if v, ok := body.EventJson["type"]; ok && v != nil { + switch v := fmt.Sprint(v); v { + case "detach": + uenb.Type = oam.UENB_TYPE_DETACH + case "auth-result": + uenb.Type = oam.UENB_TYPE_AUTH + case "cm-state": + uenb.Type = oam.UENB_TYPE_CM + } + } + + if err := oamService.NewUENB.Resolve(uenb); err != nil { + c.JSON(200, resp.ErrMsg(err.Error())) + return + } + c.JSON(200, resp.Ok(nil)) +} + +// ResolveUENBByAMF 接收终端接入基站-AMF +// +// POST /upload-ue/v1/:eventType +func (s APIRestController) ResolveUENBByAMF(c *gin.Context) { + var body map[string]any + if err := c.ShouldBindBodyWithJSON(&body); err != nil { + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_PARSER, errMsgs)) + return + } + + // 创建UENB + uenb := oam.UENB{ + NeUid: "4400HXAMF001", // 网元唯一标识 + RecordTime: 0, // 记录时间 + NBId: "0", // 基站ID + CellId: "0", // 小区ID + TAC: "", // TAC + IMSI: "", // IMSI + Result: oam.UENB_RESULT_AUTH_SUCCESS, // 结果值 + Type: oam.UENB_TYPE_DETACH, // 终端接入基站类型 + } + + // 从eventJson中获取rmUID + if v, ok := body["rmUID"]; ok { + uenb.NeUid = fmt.Sprint(v) + } + + // 统一格式 + eventType := c.Param("eventType") + switch eventType { + case "auth-result": + // {"authCode":"200","authMessage":"成功","authTime":"2024-12-07 16:48:37","cellID":"3","gNBID":"1","imsi":"460002082100000","onlineNumber":1,"tacID":"81"} + if v, ok := body["imsi"]; ok { + uenb.IMSI = fmt.Sprint(v) + } + if v, ok := body["cellID"]; ok { + uenb.CellId = fmt.Sprint(v) + } + if v, ok := body["gNBID"]; ok { + uenb.NBId = fmt.Sprint(v) + } + if v, ok := body["tacID"]; ok { + uenb.TAC = fmt.Sprint(v) + } + + if v, ok := body["authCode"]; ok { + uenb.Result = fmt.Sprint(v) + } + if v, ok := body["authTime"]; ok { + authTime := date.ParseStrToDate(fmt.Sprint(v), date.YYYY_MM_DD_HH_MM_SS) + uenb.RecordTime = authTime.UnixMilli() + } + uenb.Type = oam.UENB_TYPE_AUTH + case "detach": + // {"detachResult":0,"detachTime":"2024-12-07 18:00:47","imsi":"460002082100000"} + if v, ok := body["imsi"]; ok { + uenb.IMSI = fmt.Sprint(v) + } + if v, ok := body["detachResult"]; ok { + if v == "0" { + uenb.Result = oam.UENB_RESULT_AUTH_SUCCESS + } else { + uenb.Result = fmt.Sprint(v) + } + } + if v, ok := body["detachTime"]; ok { + detachTime := date.ParseStrToDate(fmt.Sprint(v), date.YYYY_MM_DD_HH_MM_SS) + uenb.RecordTime = detachTime.UnixMilli() + } + uenb.Type = oam.UENB_TYPE_DETACH + case "cm-state": + // {"changeTime":"2024-12-07 17:07:52","imsi":"460002082100000","onlineNumber":1,"status":2} + if v, ok := body["imsi"]; ok { + uenb.IMSI = fmt.Sprint(v) + } + if v, ok := body["status"]; ok { + uenb.Result = fmt.Sprint(v) + } + if v, ok := body["changeTime"]; ok { + changeTime := date.ParseStrToDate(fmt.Sprint(v), date.YYYY_MM_DD_HH_MM_SS) + uenb.RecordTime = changeTime.UnixMilli() + } + uenb.Type = oam.UENB_TYPE_CM + } + + if err := oamService.NewUENB.Resolve(uenb); err != nil { + c.JSON(200, resp.ErrMsg(err.Error())) + return + } + c.JSON(200, resp.Ok(nil)) +} + +// ResolveAlarmHistory 拉取告警历史 +// +// GET /faultManagement/v1/elementType/:elementTypeValue/objectType/alarms +func (s APIRestController) ResolveAlarmHistory(c *gin.Context) { + elementTypeValue := c.Param("elementTypeValue") + + // Get alarms from OMC return 204 + if strings.ToLower(elementTypeValue) == "omc" { + c.JSON(200, resp.OkMsg("omc alarms no content")) + return + } + + // alarmTypeValue 映射值 + alarmTypeValue := func(str string) string { + arr := []string{ + oam.ALARM_TYPE_COMMUNICATION_ALARM, + oam.ALARM_TYPE_EQUIPMENT_ALARM, + oam.ALARM_TYPE_PROCESSING_FAILURE, + oam.ALARM_TYPE_ENVIRONMENTAL_ALARM, + oam.ALARM_TYPE_QUALITY_OF_SERVICE_ALARM, + } + for k, v := range arr { + if v == str { + return v + } + if fmt.Sprint(k+1) == str { + return v + } + } + return str + } + + // origSeverityValue 映射值 + origSeverityValue := func(str string) string { + arr := []string{ + oam.ALARM_SEVERITY_CRITICAL, + oam.ALARM_SEVERITY_MAJOR, + oam.ALARM_SEVERITY_MINOR, + oam.ALARM_SEVERITY_WARNING, + oam.ALARM_SEVERITY_EVENT, + } + for k, v := range arr { + if v == str { + return v + } + if fmt.Sprint(k+1) == str { + return v + } + } + return str + } + + // alarmStatusValue 映射值 + alarmStatusValue := func(value int) string { + arr := []string{ + oam.ALARM_STATUS_CLEAR, + oam.ALARM_STATUS_ACTIVE, + } + for k, v := range arr { + if k == value { + return v + } + } + return oam.ALARM_STATUS_ACTIVE + } + + alarmArr := make([]oam.Alarm, 0) + type body struct { + AlarmSeq int `json:"alarmSeq"` + AlarmId string `json:"alarmId"` + NeId string `json:"neId"` // 收到实际是rmUID + AlarmCode int `json:"alarmCode"` + AlarmTitle string `json:"alarmTitle"` + EventTime string `json:"eventTime"` + AlarmType string `json:"alarmType"` + OrigSeverity string `json:"origSeverity"` + PerceivedSeverity string `json:"perceivedSeverity"` + PVFlag string `json:"pvFlag"` + NeName string `json:"neName"` + NeType string `json:"neType"` + ObjectUid string `json:"objectUid"` + ObjectName string `json:"objectName"` + ObjectType string `json:"objectType"` + LocationInfo string `json:"locationInfo"` + Province string `json:"province"` + AlarmStatus int `json:"alarmStatus"` + SpecificProblem string `json:"specificProblem"` + SpecificProblemID string `json:"specificProblemID"` + AddInfo string `json:"addInfo"` + } + parseItem := func(v body) oam.Alarm { + // 产生时间 + eventTime := date.ParseStrToDate(v.EventTime, time.RFC3339) + // 创建告警 + alarm := oam.Alarm{ + NeUid: v.NeId, // 网元唯一标识 + AlarmTime: eventTime.UnixMilli(), // 事件产生时间 + AlarmId: v.AlarmId, // 告警ID 唯一,清除时对应 + AlarmCode: v.AlarmCode, // 告警状态码 + AlarmType: alarmTypeValue(v.AlarmType), // 告警类型 + AlarmTitle: v.AlarmTitle, // 告警标题 + PerceivedSeverity: origSeverityValue(v.OrigSeverity), // 告警级别 + AlarmStatus: alarmStatusValue(v.AlarmStatus), // 告警状态 + SpecificProblem: v.SpecificProblem, // 告警问题原因 + SpecificProblemID: v.SpecificProblemID, // 告警问题原因ID + AddInfo: v.AddInfo, // 告警辅助信息 + LocationInfo: v.LocationInfo, // 告警定位信息 + } + return alarm + } + var neInfos []neModel.NeInfo + if elementTypeValue == "all" { + neInfos = neService.NewNeInfo.Find(neModel.NeInfo{}, false, false) + } else { + neInfos = neService.NewNeInfo.FindByNeType(strings.ToUpper(elementTypeValue)) + } + for _, neInfo := range neInfos { + data, err := neFetchlink.AlarmHistory(neInfo) + if err != nil { + logger.Errorf("failed to fetch alarm history:%s", err.Error()) + continue + } + if len(data) == 0 { + logger.Warnf("not found sync alarms %s", neInfo.RmUID) + continue + } + + bodyArr := make([]body, 0) + // 将 []map[string]any 序列化为 JSON 字符串 + jsonData, err := json.Marshal(data) + if err != nil { + logger.Errorf("marshal error: %s", err.Error()) + continue + } + // 反序列化到结构体 + err = json.Unmarshal(jsonData, &bodyArr) + if err != nil { + logger.Errorf("Error unmarshal error: %s", err.Error()) + continue + } + + for _, v := range bodyArr { + alarmArr = append(alarmArr, parseItem(v)) + } + } + + errArr := make([]string, 0) + for _, alarm := range alarmArr { + if err := oamService.NewAlarm.Resolve(alarm); err != nil { + errArr = append(errArr, err.Error()) + } + } + + if len(errArr) > 0 { + c.JSON(200, resp.OkData(errArr)) + return + } + c.JSON(200, resp.Ok(nil)) +} + +// QuerySystemState 查询系统状态 +// +// GET /systemManagement/v1/elementType/:elementTypeValue/objectType/systemState +func (s APIRestController) QuerySystemState(c *gin.Context) { + elementTypeValue := c.Param("elementTypeValue") + if strings.ToLower(elementTypeValue) != "omc" { + c.JSON(200, resp.ErrMsg("elementType only omc")) + return + } + info := goOamState.NewState.Info() + info.SerialNum = "-" + info.ExpiryDate = "-" + info.Capability = 50 + info.Version = config.Version + c.JSON(200, info) +} + +// NeConfigOMC 网元配置对端网管信息 +// +// PUT /systemManagement/v1/elementType/:elementTypeValue/objectType/config/omcNeConfig +func (s APIRestController) NeConfigOMC(c *gin.Context) { + c.JSON(204, nil) +} + +// @Description CBSManagement CB消息 +type CBSState struct { + NeName string `json:"neName"` // 网元名称 + RmUID string `json:"rmUID"` // 网元唯一标识 + EventData []oamService.CBSEventData `json:"eventData"` // 事件数据 +} + +func (s APIRestController) ResolveCBSState(c *gin.Context) { + var state CBSState + if err := c.ShouldBindBodyWithJSON(&state); err != nil { + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_PARSER, errMsgs)) + return + } + + for _, eventData := range state.EventData { + if err := oamService.NewCBS.Resolve(eventData); err != nil { + c.JSON(200, resp.ErrMsg(err.Error())) + return + } + } + c.JSON(200, resp.Ok(nil)) +} diff --git a/src/modules/oam/oam.go b/src/modules/oam/oam.go new file mode 100644 index 00000000..54dd3a68 --- /dev/null +++ b/src/modules/oam/oam.go @@ -0,0 +1,43 @@ +package oam + +import ( + "github.com/gin-gonic/gin" + "github.com/tsmask/go-oam" + + "be.ems/src/framework/logger" + "be.ems/src/modules/oam/controller" + "be.ems/src/modules/oam/service" +) + +// Setup 模块路由注册 +func Setup(router *gin.Engine) { + logger.Infof("开始加载 ====> oam 模块路由") + + // 网管接收端收告警 + oam.AlarmReceiveRoute(router, service.NewAlarm.Resolve) + // 网管接收端收终端接入基站 + oam.UENBReceiveRoute(router, service.NewUENB.Resolve) + // 网管接收端收基站状态 + oam.NBStateReceiveRoute(router, service.NewNBState.Resolve) + // 网管接收端收话单 + oam.CDRReceiveRoute(router, service.NewCDR.Resolve) + // 网管接收端收KPI + oam.KPIReceiveRoute(router, service.NewKPI.Resolve) + + // APIRest 北向定义 + aprRest := controller.NewAPIRest + aprRestGroup := router.Group("/api/rest") + { + aprRestGroup.GET("/faultManagement/v1/elementType/:elementTypeValue/objectType/alarms", aprRest.ResolveAlarmHistory) + aprRestGroup.POST("/faultManagement/v1/elementType/:elementTypeValue/objectType/alarms", aprRest.ResolveAlarm) + aprRestGroup.POST("/cdrManagement/v1/elementType/:elementTypeValue/objectType/cdrEvent", aprRest.ResolveCDR) + aprRestGroup.POST("/performanceManagement/v1/elementType/:elementTypeValue/objectType/kpiReport/:index", aprRest.ResolveKPI) + aprRestGroup.POST("/ueManagement/v1/elementType/:elementTypeValue/objectType/nbState", aprRest.ResolveNBState) + aprRestGroup.POST("/ueManagement/v1/elementType/:elementTypeValue/objectType/cbsState", aprRest.ResolveCBSState) + aprRestGroup.POST("/logManagement/v1/elementType/:elementTypeValue/objectType/ueEvent", aprRest.ResolveUENB) + router.POST("/upload-ue/v1/:eventType", aprRest.ResolveUENBByAMF) // AMF特殊上报 + aprRestGroup.GET("/systemManagement/v1/elementType/:elementTypeValue/objectType/systemState", aprRest.QuerySystemState) + aprRestGroup.PUT("/systemManagement/v1/elementType/:elementTypeValue/objectType/config/omcNeConfig", aprRest.NeConfigOMC) + } + +} diff --git a/src/modules/oauth2/open_api.go b/src/modules/oam/oauth2_api.go similarity index 85% rename from src/modules/oauth2/open_api.go rename to src/modules/oam/oauth2_api.go index 84f96e03..f8022cff 100644 --- a/src/modules/oauth2/open_api.go +++ b/src/modules/oam/oauth2_api.go @@ -1,4 +1,4 @@ -package oauth2 +package oam import ( "github.com/gin-gonic/gin" @@ -8,8 +8,8 @@ import ( neController "be.ems/src/modules/network_element/controller" ) -// openAPI 客户端授权开放接口 -func openAPI(router *gin.Engine) { +// SetupOauth2 客户端授权开放接口 +func SetupOauth2(router *gin.Engine) { openApiGroup := router.Group("/open-api") // 监控 diff --git a/src/modules/oam/service/alarm.go b/src/modules/oam/service/alarm.go new file mode 100644 index 00000000..33d8cbe9 --- /dev/null +++ b/src/modules/oam/service/alarm.go @@ -0,0 +1,301 @@ +package service + +import ( + "fmt" + + "be.ems/src/framework/config" + "be.ems/src/framework/constants" + "be.ems/src/framework/utils/parse" + "github.com/tsmask/go-oam" + + neDataModel "be.ems/src/modules/network_data/model" + neDataService "be.ems/src/modules/network_data/service" + neService "be.ems/src/modules/network_element/service" + notificationService "be.ems/src/modules/notification/service" + traceService "be.ems/src/modules/trace/service" + wsService "be.ems/src/modules/ws/service" +) + +// 实例化服务层 Alarm 结构体 +var NewAlarm = &Alarm{ + neInfoService: neService.NewNeInfo, + wsService: wsService.NewWSSend, + alarmService: neDataService.NewAlarm, + alarmEventService: neDataService.NewAlarmEvent, + alarmLogService: neDataService.NewAlarmLog, + alarmForwardLogService: neDataService.NewAlarmForwardLog, +} + +// Alarm 消息处理 +type Alarm struct { + neInfoService *neService.NeInfo + wsService *wsService.WSSend + alarmService *neDataService.Alarm + alarmEventService *neDataService.AlarmEvent + alarmLogService *neDataService.AlarmLog + alarmForwardLogService *neDataService.AlarmForwardLog + + alarm neDataModel.Alarm +} + +// Resolve 接收处理 +func (s *Alarm) Resolve(a oam.Alarm) error { + // 是否存在网元 + neInfo := s.neInfoService.FindByRmuid(a.NeUid) + if neInfo.NeType == "" || neInfo.RmUID != a.NeUid { + return fmt.Errorf("resolve alarm network element does not exist %s", a.NeUid) + } + + // seq 告警序号 + lastSeq := neDataService.NewAlarm.FindAlarmSeqLast(neInfo.NeType, neInfo.NeId) + + // 告警信息 + s.alarm = neDataModel.Alarm{ + NeType: neInfo.NeType, + NeId: neInfo.NeId, + NeName: neInfo.NeName, + Province: neInfo.Province, + PvFlag: neInfo.PvFlag, + AlarmSeq: lastSeq + 1, + AlarmId: a.AlarmId, + AlarmTitle: a.AlarmTitle, + AlarmCode: int64(a.AlarmCode), + EventTime: a.AlarmTime, + AlarmType: a.AlarmType, + OrigSeverity: a.PerceivedSeverity, + PerceivedSeverity: a.PerceivedSeverity, + ObjectUid: neInfo.RmUID, + ObjectName: neInfo.NeName, + ObjectType: neInfo.NeType, + LocationInfo: a.LocationInfo, + AlarmStatus: a.AlarmStatus, + SpecificProblem: a.SpecificProblem, + SpecificProblemId: a.SpecificProblemID, + AddInfo: a.AddInfo, + } + + // 进行清除 + if a.AlarmStatus == oam.ALARM_STATUS_CLEAR { + if a.PerceivedSeverity == oam.ALARM_SEVERITY_EVENT { + if err := s.clearEvent(); err != nil { + return err + } + } else { + if err := s.clear(); err != nil { + return err + } + } + + } + // 进行新增 + if a.AlarmStatus == oam.ALARM_STATUS_ACTIVE { + if a.PerceivedSeverity == oam.ALARM_SEVERITY_EVENT { + if err := s.addEvent(); err != nil { + return err + } + } else { + if err := s.add(); err != nil { + return err + } + } + } + + // 记录日志 + if err := s.saveLog(); err != nil { + return err + } + // 推送 + s.wsService.ByGroupID(fmt.Sprintf("%s_%s_%s", wsService.GROUP_ALARM, neInfo.NeType, neInfo.NeId), s.alarm) + // 通知 + go s.notify(neInfo.IP) + return nil +} + +// saveLog 记录日志 +func (s *Alarm) saveLog() error { + alarmLog := neDataModel.AlarmLog{ + NeType: s.alarm.NeType, + NeId: s.alarm.NeId, + AlarmSeq: s.alarm.AlarmSeq, + AlarmId: s.alarm.AlarmId, + AlarmTitle: s.alarm.AlarmTitle, + AlarmCode: s.alarm.AlarmCode, + AlarmStatus: s.alarm.AlarmStatus, + AlarmType: s.alarm.AlarmType, + OrigSeverity: s.alarm.PerceivedSeverity, + EventTime: s.alarm.EventTime, + } + insertId := s.alarmLogService.Insert(alarmLog) + if insertId <= 0 { + return fmt.Errorf("save alarm log fail") + } + return nil +} + +// add 新增告警 +func (s *Alarm) add() error { + // 检查网元告警ID是否唯一 + alarmIdArr := s.alarmService.Find(neDataModel.Alarm{ + NeType: s.alarm.NeType, + NeId: s.alarm.NeId, + AlarmId: s.alarm.AlarmId, + }) + if len(alarmIdArr) > 0 { + return fmt.Errorf("already exists alarmId:%s", s.alarm.AlarmId) + } + insertId := s.alarmService.Insert(s.alarm) + if insertId > 0 { + s.alarm.ID = insertId + return nil + } + return fmt.Errorf("add alarm fail") +} + +// clear 清除告警 +func (s *Alarm) clear() error { + // 检查网元告警ID是否唯一 + alarmIdArr := s.alarmService.Find(neDataModel.Alarm{ + NeType: s.alarm.NeType, + NeId: s.alarm.NeId, + AlarmId: s.alarm.AlarmId, + }) + if len(alarmIdArr) != 1 { + return fmt.Errorf("not exists alarmId:%s", s.alarm.AlarmId) + } + + // 告警清除 + rows, _ := s.alarmService.ClearByIds([]int64{alarmIdArr[0].ID}, s.alarm.ObjectUid, constants.ALARM_CLEAR_TYPE_AUTO_CLEAR) + if rows > 0 { + return nil + } + return fmt.Errorf("clear fail alarmId:%s", s.alarm.AlarmId) +} + +// addEvent 新增告警事件 +func (s *Alarm) addEvent() error { + // 检查网元告警ID是否唯一 + alarmIdArr := s.alarmEventService.Find(neDataModel.AlarmEvent{ + NeType: s.alarm.NeType, + NeId: s.alarm.NeId, + AlarmId: s.alarm.AlarmId, + }) + if len(alarmIdArr) > 0 { + return fmt.Errorf("event already exists alarmId:%s", s.alarm.AlarmId) + } + // seq 告警序号 + lastSeq := s.alarmEventService.FindAlarmEventSeqLast(s.alarm.NeType, s.alarm.NeId) + + alarmEvent := neDataModel.AlarmEvent{ + NeType: s.alarm.NeType, + NeId: s.alarm.NeId, + AlarmSeq: lastSeq + 1, + AlarmId: s.alarm.AlarmId, + AlarmTitle: s.alarm.AlarmTitle, + AlarmCode: s.alarm.AlarmCode, + EventTime: s.alarm.EventTime, + ObjectUid: s.alarm.ObjectUid, + ObjectName: s.alarm.ObjectName, + ObjectType: s.alarm.ObjectType, + LocationInfo: s.alarm.LocationInfo, + AlarmStatus: s.alarm.AlarmStatus, + SpecificProblem: s.alarm.SpecificProblem, + SpecificProblemId: s.alarm.SpecificProblemId, + AddInfo: s.alarm.AddInfo, + } + insertId := s.alarmEventService.Insert(alarmEvent) + if insertId > 0 { + alarmEvent.ID = insertId + // 网元重启后,清除活动告警 + if s.alarm.AlarmCode == constants.ALARM_EVENT_REBOOT { + rows := s.alarmService.Find(neDataModel.Alarm{ + NeType: s.alarm.NeType, + NeId: s.alarm.NeId, + AlarmStatus: oam.ALARM_STATUS_ACTIVE, + }) + ids := make([]int64, 0) + for _, v := range rows { + ids = append(ids, v.ID) + } + s.alarmService.ClearByIds(ids, s.alarm.ObjectUid, constants.ALARM_CLEAR_TYPE_AUTO_CLEAR) + } + // 网元重启后,有跟踪任务的需要重新补发启动任务 + if s.alarm.AlarmCode == constants.ALARM_EVENT_REBOOT { + traceService.NewTraceTask.RunUnstopped(s.alarm.NeType, s.alarm.NeId) + } + return nil + } + return fmt.Errorf("event add fail") +} + +// clearEvent 清除告警事件 +func (s *Alarm) clearEvent() error { + alarmEventService := neDataService.NewAlarmEvent + // 检查网元告警ID是否唯一 + alarmIdArr := alarmEventService.Find(neDataModel.AlarmEvent{ + NeType: s.alarm.NeType, + NeId: s.alarm.NeId, + AlarmId: s.alarm.AlarmId, + }) + if len(alarmIdArr) != 1 { + return fmt.Errorf("event not exists alarmId:%s", s.alarm.AlarmId) + } + + // 告警清除 + rows, _ := s.alarmEventService.ClearByIds([]int64{alarmIdArr[0].ID}, s.alarm.ObjectUid, constants.ALARM_CLEAR_TYPE_AUTO_CLEAR) + if rows > 0 { + return nil + } + return fmt.Errorf("event clear fail alarmId:%s", s.alarm.AlarmId) +} + +// notify 通知 +func (s *Alarm) notify(neIp string) { + // 邮箱 + emailEnable := parse.Boolean(config.Get("notification.email.enable")) + if emailEnable { + emailList := fmt.Sprint(config.Get("notification.email.emailList")) + emailResult := "Sent Successfully!" + emailErr := notificationService.EmailAlarm(s.alarm, neIp) + if emailErr != nil { + emailResult = emailErr.Error() + } + s.notifyLog("EMAIL", emailList, emailResult) + } + + // 短信 + smscEnable := parse.Boolean(config.Get("notification.smsc.enable")) + if smscEnable { + mobileList := fmt.Sprint(config.Get("notification.smsc.mobileList")) + smscResult := "Sent Successfully!" + smscErr := notificationService.SMSCAlarm(s.alarm, neIp) + if smscErr != nil { + smscResult = smscErr.Error() + } + s.notifyLog("SMSC", mobileList, smscResult) + } +} + +// notifyLog 通知日志 +func (s *Alarm) notifyLog(forwardBy, toUser, result string) error { + alarmForwardLog := neDataModel.AlarmForwardLog{ + NeType: s.alarm.NeType, + NeId: s.alarm.NeId, + AlarmSeq: s.alarm.AlarmSeq, + AlarmId: s.alarm.AlarmId, + AlarmTitle: s.alarm.AlarmTitle, + AlarmCode: s.alarm.AlarmCode, + AlarmStatus: s.alarm.AlarmStatus, + AlarmType: s.alarm.AlarmType, + OrigSeverity: s.alarm.OrigSeverity, + EventTime: s.alarm.EventTime, + Type: forwardBy, + Target: toUser, + Result: result, + } + // 记录日志 + insertId := s.alarmForwardLogService.Insert(alarmForwardLog) + if insertId <= 0 { + return fmt.Errorf("notify alarm log fail") + } + return nil +} diff --git a/src/modules/oam/service/cbs_state.go b/src/modules/oam/service/cbs_state.go new file mode 100644 index 00000000..3b898621 --- /dev/null +++ b/src/modules/oam/service/cbs_state.go @@ -0,0 +1,29 @@ +package service + +import ( + neDataService "be.ems/src/modules/network_data/service" + neService "be.ems/src/modules/network_element/service" +) + +// 实例化服务层 CDR 结构体 +var NewCBS = &CBS{ + neInfoService: neService.NewNeInfo, + cbcMessageService: neDataService.NewCBCMessage, +} + +// CDR 消息处理 +type CBS struct { + neInfoService *neService.NeInfo + cbcMessageService *neDataService.CBCMessage // CDR会话事件服务 +} + +type CBSEventData struct { + EventName string `json:"eventName"` // 事件名称 + MessageId int64 `json:"messageId"` // 消息ID + Detail string `json:"detail"` // 详情 +} + +// Resolve 接收处理 +func (s *CBS) Resolve(c CBSEventData) error { + return s.cbcMessageService.UpdateDetail(c.EventName, c.Detail) +} diff --git a/src/modules/oam/service/cdr.go b/src/modules/oam/service/cdr.go new file mode 100644 index 00000000..8b1e2427 --- /dev/null +++ b/src/modules/oam/service/cdr.go @@ -0,0 +1,71 @@ +package service + +import ( + "encoding/json" + "fmt" + + "github.com/tsmask/go-oam" + + neDataModel "be.ems/src/modules/network_data/model" + neDataService "be.ems/src/modules/network_data/service" + neService "be.ems/src/modules/network_element/service" + wsService "be.ems/src/modules/ws/service" +) + +// 实例化服务层 CDR 结构体 +var NewCDR = &CDR{ + neInfoService: neService.NewNeInfo, + wsService: wsService.NewWSSend, + cdrEventService: neDataService.NewCDREvent, +} + +// CDR 消息处理 +type CDR struct { + neInfoService *neService.NeInfo + wsService *wsService.WSSend + cdrEventService *neDataService.CDREvent // CDR会话事件服务 +} + +// Resolve 接收处理 +func (s *CDR) Resolve(c oam.CDR) error { + if c.Data == nil { + return fmt.Errorf("cdr data is nil") + } + // 是否存在网元 + neInfo := s.neInfoService.FindByRmuid(c.NeUid) + if neInfo.NeType == "" || neInfo.RmUID != c.NeUid { + return fmt.Errorf("resolve cdr network element does not exist %s", c.NeUid) + } + + cdrByte, _ := json.Marshal(c.Data) + cdrEvent := neDataModel.CDREvent{ + NeType: neInfo.NeType, + NeName: neInfo.NeName, + RmUid: neInfo.RmUID, + Timestamp: c.RecordTime, + CdrJson: string(cdrByte), + CreatedAt: c.RecordTime, + } + insertId := s.cdrEventService.Insert(cdrEvent) + if insertId <= 0 { + return fmt.Errorf("add cdr data fail") + } + cdrEvent.ID = insertId + + // 推送到ws订阅组 + switch neInfo.NeType { + case "IMS": + dataMap := c.Data.(map[string]any) + v, ok := dataMap["recordType"] + if ok && (v == "MOC" || v == "MTSM") { + s.wsService.ByGroupID(fmt.Sprintf("%s_%s", wsService.GROUP_IMS_CDR, neInfo.NeId), cdrEvent) + } + case "SMF": + s.wsService.ByGroupID(fmt.Sprintf("%s_%s", wsService.GROUP_SMF_CDR, neInfo.NeId), cdrEvent) + case "SMSC": + s.wsService.ByGroupID(fmt.Sprintf("%s_%s", wsService.GROUP_SMSC_CDR, neInfo.NeId), cdrEvent) + case "SGWC": + s.wsService.ByGroupID(fmt.Sprintf("%s_%s", wsService.GROUP_SGWC_CDR, neInfo.NeId), cdrEvent) + } + return nil +} diff --git a/src/modules/oam/service/kpi.go b/src/modules/oam/service/kpi.go new file mode 100644 index 00000000..c9f567bb --- /dev/null +++ b/src/modules/oam/service/kpi.go @@ -0,0 +1,241 @@ +package service + +import ( + "encoding/json" + "fmt" + "math" + "time" + + "be.ems/src/framework/utils/date" + "be.ems/src/framework/utils/expr" + "be.ems/src/framework/utils/parse" + "github.com/tsmask/go-oam" + + neDataModel "be.ems/src/modules/network_data/model" + neDataService "be.ems/src/modules/network_data/service" + neModel "be.ems/src/modules/network_element/model" + neService "be.ems/src/modules/network_element/service" + wsService "be.ems/src/modules/ws/service" +) + +// 实例化服务层 KPI 结构体 +var NewKPI = &KPI{ + neInfoService: neService.NewNeInfo, + wsService: wsService.NewWSSend, + kpiReportService: neDataService.NewKpiReport, + kpiCReportService: neDataService.NewKpiCReport, +} + +// KPI 消息处理 +type KPI struct { + neInfoService *neService.NeInfo + wsService *wsService.WSSend + kpiReportService *neDataService.KpiReport + kpiCReportService *neDataService.KpiCReport +} + +// Resolve 接收处理 +func (s *KPI) Resolve(k oam.KPI) error { + if len(k.Data) == 0 { + return fmt.Errorf("kpi data is nil") + } + // 是否存在网元 + neInfo := s.neInfoService.FindByRmuid(k.NeUid) + if neInfo.NeType == "" || neInfo.RmUID != k.NeUid { + return fmt.Errorf("resolve kpi network element does not exist %s", k.NeUid) + } + + // 时间片 + curTime := time.Now() + curSeconds := curTime.Hour()*3600 + curTime.Minute()*60 + curTime.Second() + index := int64(curSeconds) / k.Granularity + + if err := s.saveKPIData(neInfo, k, index); err != nil { + return err + } + if err := s.saveKPIDataC(neInfo, k, index); err != nil { + return err + } + return nil +} + +// saveKPIData 存储KPI数据并推送到ws订阅组 +func (s KPI) saveKPIData(neInfo neModel.NeInfo, k oam.KPI, index int64) error { + // 时间数据处理 + recordTime := time.Now() + if k.RecordTime > 1e12 { + recordTime = time.UnixMilli(k.RecordTime) + } else if k.RecordTime > 1e9 { + recordTime = time.Unix(k.RecordTime, 0) + } + recordDate := date.ParseDateToStr(recordTime, "2006-01-02") + recordEndTime := date.ParseDateToStr(recordTime, "15:04:05") + startTime := recordTime.Add(-time.Duration(k.Granularity) * time.Second) + recordStartTime := date.ParseDateToStr(startTime, "15:04:05") + + // kpi data数据json + kpiTitles := s.kpiReportService.FindTitle(neInfo.NeType) + KpiValues := make([]map[string]any, 0) + for _, kt := range kpiTitles { + item := map[string]any{ + "kpiId": kt.KpiId, + "value": 0, + "err": "", + } + // 匹配指标记录 + for k, v := range k.Data { + if k == kt.KpiId { + item["value"] = v + } + } + KpiValues = append(KpiValues, item) + } + + KpiValuesByte, err := json.Marshal(KpiValues) + if err != nil { + return err + } + + // KPI 信息 + kpiData := neDataModel.KpiReport{ + NeType: neInfo.NeType, + NeName: neInfo.NeName, + RmUid: neInfo.RmUID, + Date: recordDate, + StartTime: recordStartTime, + EndTime: recordEndTime, + Index: index, + Granularity: k.Granularity, + KpiValues: string(KpiValuesByte), + CreatedAt: k.RecordTime, + } + insertId := s.kpiReportService.Insert(kpiData) + if insertId <= 0 { + return fmt.Errorf("add kpi data fail") + } + kpiData.ID = insertId + + // 指标事件对象 + data := map[string]any{ + "neType": kpiData.NeType, + "neName": kpiData.NeName, + "rmUID": kpiData.RmUid, + "startIndex": kpiData.Index, + "timeGroup": kpiData.CreatedAt, + // kip_id ... + } + for _, v := range KpiValues { + data[fmt.Sprint(v["kpiId"])] = v["value"] + } + + // 推送到ws订阅组 + s.wsService.ByGroupID(fmt.Sprintf("%s_%s_%s", wsService.GROUP_KPI, neInfo.NeType, neInfo.NeId), data) + // 更新UPF总流量 + if neInfo.NeType == "UPF" { + upValue := parse.Number(data["UPF.03"]) + downValue := parse.Number(data["UPF.06"]) + s.kpiReportService.UPFTodayFlowUpdate(neInfo.RmUID, upValue, downValue) + } + return nil +} + +// saveKPIDataC 存储自定义KPI数据并推送到ws订阅组 +func (s KPI) saveKPIDataC(neInfo neModel.NeInfo, k oam.KPI, index int64) error { + // 时间数据处理 + recordTime := time.Now() + if k.RecordTime > 1e12 { + recordTime = time.UnixMilli(k.RecordTime) + } else if k.RecordTime > 1e9 { + recordTime = time.Unix(k.RecordTime, 0) + } + recordDate := date.ParseDateToStr(recordTime, "2006-01-02") + recordEndTime := date.ParseDateToStr(recordTime, "15:04:05") + startTime := recordTime.Add(-time.Duration(k.Granularity) * time.Second) + recordStartTime := date.ParseDateToStr(startTime, "15:04:05") + + // kpi data数据json + kpiCTitles := s.kpiCReportService.FindTitle(neInfo.NeType) + KpiValues := make([]map[string]any, 0) + // 自定义指标的表达式环境变量 + KpiExprEnv := make(map[string]any, 0) + for k, v := range k.Data { + KpiExprEnv[k] = v + } + // 自定义指标的计算 + for _, v := range kpiCTitles { + item := map[string]any{ + "kpiId": v.KpiId, + "value": 0, + "err": "", + } + + // 匹配指标记录 + if envValue, envOk := KpiExprEnv[v.KpiId]; envOk { + item["value"] = envValue + } + + // 计算结果 + exprStr, exprEnv := expr.ParseExprEnv(v.Expression, KpiExprEnv) + result, err := expr.Eval(exprStr, exprEnv) + if err != nil { + item["value"] = 0 + item["err"] = err.Error() + } else { + if v.Unit == "%" { + resultV, ok := result.(float64) + if !ok || math.IsNaN(resultV) { + resultV = 0 + } + if resultV > 100 { + result = 100 + } + if resultV <= 0 { + result = 0 + } + } + + item["value"] = result + } + KpiValues = append(KpiValues, item) + } + KpiValuesByte, err := json.Marshal(KpiValues) + if err != nil { + return err + } + + // KPI 信息 + kpiCData := neDataModel.KpiCReport{ + NeType: neInfo.NeType, + NeName: neInfo.NeName, + RmUid: neInfo.RmUID, + Date: recordDate, + StartTime: recordStartTime, + EndTime: recordEndTime, + Index: index, + Granularity: k.Granularity, + KpiValues: string(KpiValuesByte), + CreatedAt: k.RecordTime, + } + insertId := s.kpiCReportService.Insert(kpiCData) + if insertId <= 0 { + return fmt.Errorf("add kpic data fail") + } + kpiCData.ID = insertId + + // 指标事件对象 + data := map[string]any{ + "neType": kpiCData.NeType, + "neName": kpiCData.NeName, + "rmUID": kpiCData.RmUid, + "startIndex": kpiCData.Index, + "timeGroup": kpiCData.CreatedAt, + // kip_id ... + } + for _, v := range KpiValues { + data[fmt.Sprint(v["kpiId"])] = v["value"] + } + + // 推送到ws订阅组 + s.wsService.ByGroupID(fmt.Sprintf("%s_%s_%s", wsService.GROUP_KPI_C, neInfo.NeType, neInfo.NeId), data) + return nil +} diff --git a/src/modules/oam/service/nb_state.go b/src/modules/oam/service/nb_state.go new file mode 100644 index 00000000..3f85a49f --- /dev/null +++ b/src/modules/oam/service/nb_state.go @@ -0,0 +1,65 @@ +package service + +import ( + "fmt" + "time" + + "be.ems/src/framework/utils/date" + "github.com/tsmask/go-oam" + + neDataModel "be.ems/src/modules/network_data/model" + neDataService "be.ems/src/modules/network_data/service" + neService "be.ems/src/modules/network_element/service" + wsService "be.ems/src/modules/ws/service" +) + +// 实例化服务层 NBState 结构体 +var NewNBState = &NBState{ + neInfoService: neService.NewNeInfo, + wsService: wsService.NewWSSend, + nbStateService: neDataService.NewNBState, +} + +// NBState 消息处理 +type NBState struct { + neInfoService *neService.NeInfo + wsService *wsService.WSSend + nbStateService *neDataService.NBState +} + +// Resolve 接收处理 +func (s *NBState) Resolve(n oam.NBState) error { + // 是否存在网元 + neInfo := s.neInfoService.FindByRmuid(n.NeUid) + if neInfo.NeType == "" || neInfo.RmUID != n.NeUid { + return fmt.Errorf("resolve nb_state network element does not exist %s", n.NeUid) + } + + nbState := neDataModel.NBState{ + NeType: neInfo.NeType, + NeId: neInfo.NeId, + RmUid: neInfo.RmUID, + Address: n.Address, + Name: n.Name, + Position: n.Position, + NbName: n.DeviceName, + State: n.State, + Time: date.ParseDateToStr(n.StateTime, time.RFC3339), + } + insertId := s.nbStateService.Insert(nbState) + if insertId <= 0 { + return fmt.Errorf("add nb_state data fail") + } + nbState.ID = insertId + + // 推送到ws订阅组 + switch neInfo.NeType { + case "AMF": + s.wsService.ByGroupID(wsService.GROUP_AMF_NB, nbState) + s.wsService.ByGroupID(fmt.Sprintf("%s_%s", wsService.GROUP_AMF_NB, neInfo.NeId), nbState) + case "MME": + s.wsService.ByGroupID(wsService.GROUP_MME_NB, nbState) + s.wsService.ByGroupID(fmt.Sprintf("%s_%s", wsService.GROUP_MME_NB, neInfo.NeId), nbState) + } + return nil +} diff --git a/src/modules/oam/service/ue_nb.go b/src/modules/oam/service/ue_nb.go new file mode 100644 index 00000000..55904013 --- /dev/null +++ b/src/modules/oam/service/ue_nb.go @@ -0,0 +1,62 @@ +package service + +import ( + "encoding/json" + "fmt" + + "github.com/tsmask/go-oam" + + neDataModel "be.ems/src/modules/network_data/model" + neDataService "be.ems/src/modules/network_data/service" + neService "be.ems/src/modules/network_element/service" + wsService "be.ems/src/modules/ws/service" +) + +// 实例化服务层 UENB 结构体 +var NewUENB = &UENB{ + neInfoService: neService.NewNeInfo, + wsService: wsService.NewWSSend, + ueEventService: neDataService.NewUEEvent, +} + +// UENB 消息处理 +type UENB struct { + neInfoService *neService.NeInfo + wsService *wsService.WSSend + ueEventService *neDataService.UEEvent // UE会话事件服务 +} + +// Resolve 接收处理 +func (s *UENB) Resolve(u oam.UENB) error { + // 是否存在网元 + neInfo := s.neInfoService.FindByRmuid(u.NeUid) + if neInfo.NeType == "" || neInfo.RmUID != u.NeUid { + return fmt.Errorf("resolve ue_nb network element does not exist %s", u.NeUid) + } + + uenbByte, _ := json.Marshal(u) + uenbEvent := neDataModel.UEEvent{ + NeType: neInfo.NeType, + NeName: neInfo.NeName, + RmUID: neInfo.RmUID, + Timestamp: u.RecordTime, + EventType: u.Type, + EventJSONStr: string(uenbByte), + } + insertId := s.ueEventService.Insert(uenbEvent) + if insertId <= 0 { + return fmt.Errorf("add ue_nb data fail") + } + uenbEvent.ID = insertId + + // 推送到ws订阅组 + switch neInfo.NeType { + case "AMF": + s.wsService.ByGroupID(wsService.GROUP_AMF_UE, uenbEvent) + s.wsService.ByGroupID(fmt.Sprintf("%s_%s", wsService.GROUP_AMF_UE, neInfo.NeId), uenbEvent) + case "MME": + s.wsService.ByGroupID(wsService.GROUP_MME_UE, uenbEvent) + s.wsService.ByGroupID(fmt.Sprintf("%s_%s", wsService.GROUP_MME_UE, neInfo.NeId), uenbEvent) + } + return nil +} diff --git a/src/modules/oauth2/model/code_query.go b/src/modules/oauth2/model/code_query.go deleted file mode 100644 index 9c32a195..00000000 --- a/src/modules/oauth2/model/code_query.go +++ /dev/null @@ -1,8 +0,0 @@ -package model - -// CodeQuery 重定向授权码参数 -type CodeQuery struct { - RedirectUrl string `form:"redirectUrl" binding:"required"` // 授权回调地址 - ClientId string `form:"clientId" binding:"required"` // 申请得到的客户端ID - State string `form:"state" binding:"required"` // 随机字符串,认证服务器会原封不动地返回这个值 -} diff --git a/src/modules/oauth2/oauth2.go b/src/modules/oauth2/oauth2.go deleted file mode 100644 index 7cc1cbac..00000000 --- a/src/modules/oauth2/oauth2.go +++ /dev/null @@ -1,74 +0,0 @@ -package oauth2 - -import ( - "github.com/gin-gonic/gin" - - "be.ems/src/framework/logger" - "be.ems/src/framework/middleware" - "be.ems/src/modules/oauth2/controller" -) - -// Setup 模块路由注册 -func Setup(router *gin.Engine) { - logger.Infof("开始加载 ====> oauth2 模块路由") - - // 客户端授权管理 - oauth2ClientGroup := router.Group("/oauth2/client") - { - oauth2ClientGroup.GET("/list", - middleware.AuthorizeUser(map[string][]string{"matchRoles": {"admin"}}), - controller.NewOauth2Client.List, - ) - oauth2ClientGroup.GET("/:clientId", - middleware.AuthorizeUser(map[string][]string{"matchRoles": {"admin"}}), - controller.NewOauth2Client.Info, - ) - oauth2ClientGroup.POST("", - middleware.AuthorizeUser(map[string][]string{"matchRoles": {"admin"}}), - middleware.OperateLog(middleware.OptionNew("log.operate.title.oauth2client", middleware.BUSINESS_TYPE_INSERT)), - controller.NewOauth2Client.Add, - ) - oauth2ClientGroup.PUT("", - middleware.AuthorizeUser(map[string][]string{"matchRoles": {"admin"}}), - middleware.OperateLog(middleware.OptionNew("log.operate.title.oauth2client", middleware.BUSINESS_TYPE_UPDATE)), - controller.NewOauth2Client.Edit, - ) - oauth2ClientGroup.DELETE("/:id", - middleware.AuthorizeUser(map[string][]string{"matchRoles": {"admin"}}), - middleware.OperateLog(middleware.OptionNew("log.operate.title.oauth2client", middleware.BUSINESS_TYPE_DELETE)), - controller.NewOauth2Client.Remove, - ) - } - - // 授权认证 - oauth2Group := router.Group("/oauth2") - { - oauth2Group.GET("/authorize", - middleware.RateLimit(middleware.LimitOption{ - Time: 60, - Count: 30, - Type: middleware.LIMIT_IP, - }), - controller.NewOauth2.Authorize, - ) - oauth2Group.POST("/token", - middleware.RateLimit(middleware.LimitOption{ - Time: 180, - Count: 15, - Type: middleware.LIMIT_IP, - }), - controller.NewOauth2.Token, - ) - oauth2Group.POST("/refresh-token", - middleware.RateLimit(middleware.LimitOption{ - Time: 60, - Count: 5, - Type: middleware.LIMIT_IP, - }), - controller.NewOauth2.RefreshToken, - ) - } - - // ==== 授权认证的开放接口 ==== - openAPI(router) -} diff --git a/src/modules/system/controller/sys_login_source.go b/src/modules/system/controller/sys_login_source.go new file mode 100644 index 00000000..2349af9b --- /dev/null +++ b/src/modules/system/controller/sys_login_source.go @@ -0,0 +1,163 @@ +package controller + +import ( + "encoding/json" + "fmt" + + "github.com/gin-gonic/gin" + + "be.ems/src/framework/i18n" + "be.ems/src/framework/reqctx" + "be.ems/src/framework/resp" + "be.ems/src/framework/utils/parse" + "be.ems/src/modules/system/model" + "be.ems/src/modules/system/service" +) + +// NewLoginSource 实例化控制层 +var NewSysLoginSource = &SysLoginSourceController{ + sysLoginSourceService: service.NewSysLoginSource, +} + +// SysLoginSourceController 认证源管理 控制层处理 +// +// PATH /sys/login-source +type SysLoginSourceController struct { + sysLoginSourceService *service.SysLoginSource // 认证源信息服务 +} + +// List 列表 +// +// GET /list +func (s SysLoginSourceController) List(c *gin.Context) { + query := reqctx.QueryMap(c) + rows, total := s.sysLoginSourceService.FindByPage(query) + c.JSON(200, resp.OkData(map[string]any{"rows": rows, "total": total})) +} + +// Info 信息 +// +// GET /:id +func (s SysLoginSourceController) Info(c *gin.Context) { + id := c.Param("id") + if id == "" { + c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "bind err: id is empty")) + return + } + + info := s.sysLoginSourceService.FindById(parse.Number(id)) + if info.Id == parse.Number(id) { + c.JSON(200, resp.OkData(info)) + return + } + c.JSON(200, resp.ErrMsg("id does not exist")) +} + +// Add 新增 +// +// POST / +func (s SysLoginSourceController) Add(c *gin.Context) { + var body model.SysLoginSource + if err := c.ShouldBindBodyWithJSON(&body); err != nil { + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_PARSER, errMsgs)) + return + } + if body.Id > 0 { + c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "bind err: id not is empty")) + return + } + if len(body.Config) < 7 || !json.Valid([]byte(body.Config)) { + c.JSON(200, resp.ErrMsg("config json format error")) + return + } + configStr, err := s.sysLoginSourceService.CheckConfigJSON(body.Type, body.Config) + if err != nil { + c.JSON(200, resp.ErrMsg(err.Error())) + return + } + body.Config = configStr + + body.CreateBy = reqctx.LoginUserToUserName(c) + insertId := s.sysLoginSourceService.Insert(body) + if insertId > 0 { + c.JSON(200, resp.OkData(insertId)) + return + } + c.JSON(200, resp.Err(nil)) +} + +// Edit 更新 +// +// PUT / +func (s SysLoginSourceController) Edit(c *gin.Context) { + var body model.SysLoginSource + if err := c.ShouldBindBodyWithJSON(&body); err != nil { + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_PARSER, errMsgs)) + return + } + if body.Id <= 0 { + c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "bind err: id is empty")) + return + } + if len(body.Config) < 7 || !json.Valid([]byte(body.Config)) { + c.JSON(200, resp.ErrMsg("config json format error")) + return + } + configStr, err := s.sysLoginSourceService.CheckConfigJSON(body.Type, body.Config) + if err != nil { + c.JSON(200, resp.ErrMsg(err.Error())) + return + } + body.Config = configStr + + // 查询信息 + info := s.sysLoginSourceService.FindById(body.Id) + if info.Id != body.Id { + c.JSON(200, resp.ErrMsg("modification failed, data not exist")) + return + } + + info.Type = body.Type + info.Name = body.Name + info.Icon = body.Icon + info.Config = body.Config + info.ActiveFlag = body.ActiveFlag + info.Remark = body.Remark + info.UpdateBy = reqctx.LoginUserToUserName(c) + rowsAffected := s.sysLoginSourceService.Update(info) + if rowsAffected > 0 { + c.JSON(200, resp.Ok(nil)) + return + } + c.JSON(200, resp.Err(nil)) +} + +// Remove 删除 +// +// DELETE /:id +func (s SysLoginSourceController) Remove(c *gin.Context) { + language := reqctx.AcceptLanguage(c) + id := c.Param("id") + if id == "" { + c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "bind err: id is empty")) + return + } + + // 处理字符转id数组后去重 + uniqueIDs := parse.RemoveDuplicatesToArray(id, ",") + // 转换成int64数组类型 + ids := make([]int64, 0) + for _, v := range uniqueIDs { + ids = append(ids, parse.Number(v)) + } + + rows, err := s.sysLoginSourceService.DeleteByIds(ids) + if err != nil { + c.JSON(200, resp.ErrMsg(err.Error())) + return + } + msg := i18n.TTemplate(language, "app.common.deleteSuccess", map[string]any{"num": rows}) + c.JSON(200, resp.OkMsg(msg)) +} diff --git a/src/modules/system/controller/sys_profile.go b/src/modules/system/controller/sys_profile.go index 659fcf08..6dfbd9b2 100644 --- a/src/modules/system/controller/sys_profile.go +++ b/src/modules/system/controller/sys_profile.go @@ -290,17 +290,17 @@ func (s *SysProfileController) PasswordForce(c *gin.Context) { return } - // 首次登录 - forcePasswdChange := userInfo.LoginCount <= 2 - // 非首次登录,判断密码是否过期 - if !forcePasswdChange { - alert, _ := s.sysUserService.ValidatePasswordExpireTime(userInfo.PasswordUpdateTime) - forcePasswdChange = alert - } - if !forcePasswdChange { - c.JSON(403, resp.ErrMsg("not matching the amendment")) - return - } + // // 首次登录 + // forcePasswdChange := userInfo.LoginCount <= 2 + // // 非首次登录,判断密码是否过期 + // if !forcePasswdChange { + // alert, _ := s.sysUserService.ValidatePasswordExpireTime(userInfo.PasswordUpdateTime) + // forcePasswdChange = alert + // } + // if !forcePasswdChange { + // c.JSON(403, resp.ErrMsg("not matching the amendment")) + // return + // } // 检查密码是否与历史密码一致 err = s.sysUserService.ValidatePasswordNotAllowedHistory(userInfo.UserId, body.Password) diff --git a/src/modules/system/controller/sys_user.go b/src/modules/system/controller/sys_user.go index 60758dc3..cd63404d 100644 --- a/src/modules/system/controller/sys_user.go +++ b/src/modules/system/controller/sys_user.go @@ -186,7 +186,7 @@ func (s *SysUserController) Add(c *gin.Context) { } if !regular.ValidUsername(body.UserName) { // msg := fmt.Sprintf("新增用户【%s】失败,登录账号用户账号只能包含大写小写字母,数字,且不少于4位", body.UserName) - msg := fmt.Sprintf("Add a new user [%s] failed to log in the account user account can only contain upper and lower case letters, numbers, and not less than 4 digits", body.UserName) + msg := fmt.Sprintf("Add a new user [%s] failed to log in the account user account not less than 4 digits", body.UserName) c.JSON(400, resp.ErrMsg(msg)) return } @@ -550,15 +550,19 @@ func (s *SysUserController) Export(c *gin.Context) { "C1": i18n.TKey(language, "user.export.nick"), "D1": i18n.TKey(language, "user.export.role"), "E1": i18n.TKey(language, "user.export.deptName"), - "F1": i18n.TKey(language, "user.export.loginIP"), - "G1": i18n.TKey(language, "user.export.loginDate"), - "H1": i18n.TKey(language, "user.export.status"), + "F1": i18n.TKey(language, "user.export.userType"), + "G1": i18n.TKey(language, "user.export.loginIP"), + "H1": i18n.TKey(language, "user.export.loginDate"), + "I1": i18n.TKey(language, "user.export.status"), // "F1": i18n.TKey(language, "user.export.sex"), // "E1": i18n.TKey(language, "user.export.phone"), // "D1": i18n.TKey(language, "user.export.email"), // "I1": i18n.TKey(language, "user.export.deptID"), // "K1": i18n.TKey(language, "user.export.deptLeader"), } + // 读取用户性别字典数据 + dictSysUserType := service.NewSysDictType.FindDataByType("sys_user_type") + // 读取用户性别字典数据 // dictSysUserSex := s.sysDictDataService.SelectDictDataByType("sys_user_sex") // 从第二行开始的数据 @@ -573,6 +577,14 @@ func (s *SysUserController) Export(c *gin.Context) { // break // } // } + // 用户类型 + userType := row.UserType + for _, v := range dictSysUserType { + if row.UserType == v.DataValue && row.UserSource != "#" { + userType = i18n.TKey(language, v.DataLabel) + " " + row.UserSource + break + } + } // 帐号状态 statusValue := i18n.TKey(language, "dictData.disable") if row.StatusFlag == "1" { @@ -581,7 +593,11 @@ func (s *SysUserController) Export(c *gin.Context) { // 用户角色, 默认导出首个 userRole := "" if len(row.Roles) > 0 { - userRole = i18n.TKey(language, row.Roles[0].RoleName) + arr := make([]string, 0) + for _, v := range row.Roles { + arr = append(arr, i18n.TKey(language, v.RoleName)) + } + userRole = strings.Join(arr, ",") } dataCells = append(dataCells, map[string]any{ "A" + idx: row.UserId, @@ -589,9 +605,10 @@ func (s *SysUserController) Export(c *gin.Context) { "C" + idx: row.NickName, "D" + idx: userRole, "E" + idx: row.Dept.DeptName, - "F" + idx: row.LoginIp, - "G" + idx: date.ParseDateToStr(row.LoginTime, date.YYYY_MM_DDTHH_MM_SSZ), - "H" + idx: statusValue, + "F" + idx: userType, + "G" + idx: row.LoginIp, + "H" + idx: date.ParseDateToStr(row.LoginTime, date.YYYY_MM_DDTHH_MM_SSZ), + "I" + idx: statusValue, // "E" + idx: row.PhoneNumber, // "F" + idx: sysUserSex, // "D" + idx: row.Email, @@ -725,7 +742,7 @@ func (s *SysUserController) Import(c *gin.Context) { } // 验证是否存在这个用户 - newSysUser := s.sysUserService.FindByUserName(row["B"]) + newSysUser := s.sysUserService.FindByUserName(row["B"], "System", "#") newSysUser.Password = initPassword newSysUser.UserName = row["B"] newSysUser.NickName = row["C"] diff --git a/src/modules/system/model/sys_login_source.go b/src/modules/system/model/sys_login_source.go new file mode 100644 index 00000000..6f62dedb --- /dev/null +++ b/src/modules/system/model/sys_login_source.go @@ -0,0 +1,22 @@ +package model + +// SysLoginSource 系统第三方认证源 sys_login_source +type SysLoginSource struct { + Id int64 `gorm:"column:id;primaryKey;autoIncrement" json:"id"` // ID + UID string `gorm:"column:uid" json:"uid"` // UID 16位长度字符串 + Type string `gorm:"column:type" json:"type" binding:"required,oneof=LDAP SMTP OAuth2"` // 认证类型 LDAP SMTP OAuth2 + Name string `gorm:"column:name" json:"name" binding:"required"` // 认证名称 + Icon string `gorm:"column:icon" json:"icon"` // 图标 + ActiveFlag string `gorm:"column:active_flag" json:"activeFlag"` // 激活标记(0未激活 1激活) + SyncFlag string `gorm:"column:sync_flag" json:"syncFlag"` // 同步标记(0未同步 1同步) + Config string `gorm:"column:config" json:"config" binding:"required"` // 配置JSON字符串 + CreateBy string `gorm:"column:create_by" json:"createBy"` // 创建者 + CreateTime int64 `gorm:"column:create_time" json:"createTime"` // 创建时间 + UpdateBy string `gorm:"column:update_by" json:"updateBy"` // 更新者 + UpdateTime int64 `gorm:"column:update_time" json:"updateTime"` // 更新时间 + Remark string `gorm:"column:remark" json:"remark"` // 备注 +} + +func (*SysLoginSource) TableName() string { + return "sys_login_source" +} diff --git a/src/modules/system/model/sys_user.go b/src/modules/system/model/sys_user.go index e2594b0f..e90b66a3 100644 --- a/src/modules/system/model/sys_user.go +++ b/src/modules/system/model/sys_user.go @@ -11,6 +11,8 @@ type SysUser struct { Sex string `json:"sex" gorm:"column:sex"` // 用户性别(0未选择 1男 2女) Avatar string `json:"avatar" gorm:"column:avatar"` // 头像地址 Password string `json:"-" gorm:"column:password"` // 密码 + UserType string `json:"userType" gorm:"column:user_type"` // 用户类型(System系统用户) + UserSource string `json:"userSource" gorm:"column:user_source"` // 用户来源UID (系统#)) StatusFlag string `json:"statusFlag" gorm:"column:status_flag"` // 账号状态(0停用 1正常) DelFlag string `json:"-" gorm:"column:del_flag"` // 删除标记(0存在 1删除) PasswordUpdateTime int64 `json:"passwordUpdateTime" gorm:"column:password_update_time"` // 密码更新时间 diff --git a/src/modules/system/model/vo/login_source.go b/src/modules/system/model/vo/login_source.go new file mode 100644 index 00000000..5f401d6e --- /dev/null +++ b/src/modules/system/model/vo/login_source.go @@ -0,0 +1,28 @@ +package vo + +// SysLoginSourceLDAP LDAP认证源 +type SysLoginSourceLDAP struct { + URL string `json:"url"` // LDAP 服务器(ldap://192.168.9.58:11389) + BaseDN string `json:"baseDN"` // base DN(dc=example,dc=org) + UserFilter string `json:"userFilter"` // 用户过滤规则((&(objectClass=organizationalPerson)(uid=%s))) + BindDN string `json:"bindDN"` // 绑定 DN(cn=admin,dc=example,dc=org) + BindPassword string `json:"bindPassword"` // 绑定密码(adminpassword) +} + +// SysLoginSourceSMTP SMTP认证源 +type SysLoginSourceSMTP struct { + Host string `json:"host"` // SMTP 服务器(smtp.gmail.com) + Port int `json:"port"` // SMTP 端口(587) +} + +// SysLoginSourceOAuth2 OAuth2认证源 +type SysLoginSourceOAuth2 struct { + ClientID string `json:"clientID"` // 客户端ID + ClientSecret string `json:"clientSecret"` // 客户端密钥 + AuthURL string `json:"authURL"` // 认证URL + TokenURL string `json:"tokenURL"` // 令牌URL + Scopes []string `json:"scopes"` // 授权范围 + RedirectURL string `json:"redirectURL"` // 重定向URL + UserURL string `json:"userURL"` // 用户信息URL + AccountField string `json:"accountField"` // 账号字段从用户信息中获取 +} diff --git a/src/modules/system/repository/sys_login_source.go b/src/modules/system/repository/sys_login_source.go new file mode 100644 index 00000000..3bde7b91 --- /dev/null +++ b/src/modules/system/repository/sys_login_source.go @@ -0,0 +1,164 @@ +package repository + +import ( + "fmt" + "time" + + "be.ems/src/framework/database/db" + "be.ems/src/framework/logger" + "be.ems/src/modules/system/model" +) + +// NewSysLoginSource 实例化数据层 +var NewSysLoginSource = &SysLoginSource{} + +// SysLoginSource 认证源数据层处理 +type SysLoginSource struct{} + +// SelectByPage 分页查询集合 +func (r SysLoginSource) SelectByPage(query map[string]string) ([]model.SysLoginSource, int64) { + tx := db.DB("").Model(&model.SysLoginSource{}) + // 查询条件拼接 + if v, ok := query["name"]; ok && v != "" { + tx = tx.Where("name like ?", v+"%") + } + if v, ok := query["type"]; ok && v != "" { + tx = tx.Where("type = ?", v) + } + if v, ok := query["beginTime"]; ok && v != "" { + if len(v) == 10 { + v = fmt.Sprintf("%s000", v) + } + tx = tx.Where("create_time >= ?", v) + } + if v, ok := query["endTime"]; ok && v != "" { + if len(v) == 10 { + v = fmt.Sprintf("%s999", v) + } + tx = tx.Where("create_time <= ?", v) + } + + // 查询结果 + var total int64 = 0 + rows := []model.SysLoginSource{} + + // 查询数量为0直接返回 + if err := tx.Count(&total).Error; err != nil || total <= 0 { + return rows, total + } + + // 查询数据分页 + pageNum, pageSize := db.PageNumSize(query["pageNum"], query["pageSize"]) + tx = tx.Limit(pageSize).Offset(pageSize * pageNum) + err := tx.Find(&rows).Error + if err != nil { + return rows, total + } + return rows, total +} + +// Select 查询集合 +func (r SysLoginSource) Select(param model.SysLoginSource) []model.SysLoginSource { + tx := db.DB("").Model(&model.SysLoginSource{}) + // 查询条件拼接 + if param.UID != "" { + tx = tx.Where("uid = ?", param.UID) + } + if param.Type != "" { + tx = tx.Where("type = ?", param.Type) + } + if param.Name != "" { + tx = tx.Where("name = ?", param.Name) + } + if param.ActiveFlag != "" { + tx = tx.Where("active_flag = ?", param.ActiveFlag) + } + + // 查询数据 + rows := []model.SysLoginSource{} + if err := tx.Find(&rows).Error; err != nil { + return rows + } + return rows +} + +// SelectByIds 通过ID查询信息 +func (r SysLoginSource) SelectByIds(ids []int64) []model.SysLoginSource { + rows := []model.SysLoginSource{} + if len(ids) <= 0 { + return rows + } + tx := db.DB("").Model(&model.SysLoginSource{}) + // 构建查询条件 + tx = tx.Where("id in ?", ids) + // 查询数据 + if err := tx.Find(&rows).Error; err != nil { + logger.Errorf("query find err => %v", err.Error()) + return rows + } + return rows +} + +// Insert 新增信息 返回新增数据ID +func (r SysLoginSource) Insert(param model.SysLoginSource) int64 { + if param.CreateBy != "" { + ms := time.Now().UnixMilli() + param.UpdateBy = param.CreateBy + param.UpdateTime = ms + param.CreateTime = ms + } + // 执行插入 + if err := db.DB("").Create(¶m).Error; err != nil { + logger.Errorf("insert err => %v", err.Error()) + return 0 + } + return param.Id +} + +// Update 修改信息 返回受影响行数 +func (r SysLoginSource) Update(param model.SysLoginSource) int64 { + if param.Id <= 0 { + return 0 + } + if param.UpdateBy != "" { + param.UpdateTime = time.Now().UnixMilli() + } + tx := db.DB("").Model(&model.SysLoginSource{}) + // 构建查询条件 + tx = tx.Where("id = ?", param.Id) + tx = tx.Omit("id", "create_by", "create_time") + // 执行更新 + if err := tx.Updates(param).Error; err != nil { + logger.Errorf("update err => %v", err.Error()) + return 0 + } + return tx.RowsAffected +} + +// DeleteByIds 批量删除信息 返回受影响行数 +func (r SysLoginSource) DeleteByIds(ids []int64) int64 { + if len(ids) <= 0 { + return 0 + } + tx := db.DB("").Where("id in ?", ids) + // 执行删除 + if err := tx.Delete(&model.SysLoginSource{}).Error; err != nil { + logger.Errorf("delete err => %v", err.Error()) + return 0 + } + return tx.RowsAffected +} + +// DeleteByUserSource 通过用户源删除用户 返回受影响行数 +func (r SysLoginSource) DeleteByUserSource(uid string) int64 { + if uid == "" || uid == "#" { + return 0 + } + tx := db.DB("").Where("user_source = ?", uid) + // 执行删除 + if err := tx.Delete(&model.SysUser{}).Error; err != nil { + logger.Errorf("delete err => %v", err.Error()) + return 0 + } + return tx.RowsAffected +} diff --git a/src/modules/system/repository/sys_menu.go b/src/modules/system/repository/sys_menu.go index 3b84a319..146655dc 100644 --- a/src/modules/system/repository/sys_menu.go +++ b/src/modules/system/repository/sys_menu.go @@ -83,14 +83,15 @@ func (r SysMenu) Insert(sysMenu model.SysMenu) int64 { } // 根据菜单类型重置参数 - if sysMenu.MenuType == constants.MENU_TYPE_BUTTON { + switch sysMenu.MenuType { + case constants.MENU_TYPE_BUTTON: sysMenu.Component = "" sysMenu.FrameFlag = "1" sysMenu.CacheFlag = "1" sysMenu.VisibleFlag = "1" sysMenu.MenuPath = "" sysMenu.Icon = "#" - } else if sysMenu.MenuType == constants.MENU_TYPE_DIR { + case constants.MENU_TYPE_DIR: sysMenu.Component = "" sysMenu.FrameFlag = "1" sysMenu.CacheFlag = "1" @@ -118,14 +119,15 @@ func (r SysMenu) Update(sysMenu model.SysMenu) int64 { } // 根据菜单类型重置参数 - if sysMenu.MenuType == constants.MENU_TYPE_BUTTON { + switch sysMenu.MenuType { + case constants.MENU_TYPE_BUTTON: sysMenu.Component = "" sysMenu.FrameFlag = "1" sysMenu.CacheFlag = "1" sysMenu.VisibleFlag = "1" sysMenu.MenuPath = "" sysMenu.Icon = "#" - } else if sysMenu.MenuType == constants.MENU_TYPE_DIR { + case constants.MENU_TYPE_DIR: sysMenu.Component = "" sysMenu.FrameFlag = "1" sysMenu.CacheFlag = "1" diff --git a/src/modules/system/repository/sys_user.go b/src/modules/system/repository/sys_user.go index 987e28ae..962df1b2 100644 --- a/src/modules/system/repository/sys_user.go +++ b/src/modules/system/repository/sys_user.go @@ -31,6 +31,12 @@ func (r SysUser) SelectByPage(query map[string]string, dataScopeSQL string) ([]m if v, ok := query["phone"]; ok && v != "" { tx = tx.Where("phone like ?", fmt.Sprintf("%s%%", v)) } + if v, ok := query["userType"]; ok && v != "" { + tx = tx.Where("user_type = ?", v) + } + if v, ok := query["userSource"]; ok && v != "" { + tx = tx.Where("user_source = ?", v) + } if v, ok := query["statusFlag"]; ok && v != "" { tx = tx.Where("status_flag = ?", v) } @@ -198,6 +204,12 @@ func (r SysUser) CheckUnique(sysUser model.SysUser) int64 { if sysUser.Email != "" { tx = tx.Where("email = ?", sysUser.Email) } + if sysUser.UserType != "" { + tx = tx.Where("user_type = ?", sysUser.UserType) + } + if sysUser.UserSource != "" { + tx = tx.Where("user_source = ?", sysUser.UserSource) + } // 查询数据 var id int64 = 0 @@ -209,14 +221,20 @@ func (r SysUser) CheckUnique(sysUser model.SysUser) int64 { } // SelectByUserName 通过登录账号查询信息 -func (r SysUser) SelectByUserName(userName string) model.SysUser { +func (r SysUser) SelectByUserName(userName, userType, userSource string) model.SysUser { item := model.SysUser{} if userName == "" { return item } + if userType == "" { + userType = "System" + } + if userSource == "" { + userSource = "#" + } tx := db.DB("").Model(&model.SysUser{}) // 构建查询条件 - tx = tx.Where("user_name = ? and del_flag = '0'", userName) + tx = tx.Where("user_name = ? and user_type = ? and user_source = ? and del_flag = '0'", userName, userType, userSource) // 查询数据 if err := tx.Limit(1).Find(&item).Error; err != nil { logger.Errorf("query find err => %v", err.Error()) diff --git a/src/modules/system/service/sys_login_source.go b/src/modules/system/service/sys_login_source.go new file mode 100644 index 00000000..61a28a4e --- /dev/null +++ b/src/modules/system/service/sys_login_source.go @@ -0,0 +1,98 @@ +package service + +import ( + "encoding/json" + "fmt" + + "be.ems/src/framework/utils/generate" + "be.ems/src/modules/system/model" + "be.ems/src/modules/system/model/vo" + "be.ems/src/modules/system/repository" +) + +// NewSysLoginSource 实例化服务层 +var NewSysLoginSource = &SysLoginSource{ + sysLoginSourceRepository: repository.NewSysLoginSource, +} + +// SysLoginSource 认证源 服务层处理 +type SysLoginSource struct { + sysLoginSourceRepository *repository.SysLoginSource // 认证源表 +} + +// FindByPage 分页查询 +func (s SysLoginSource) FindByPage(query map[string]string) ([]model.SysLoginSource, int64) { + return s.sysLoginSourceRepository.SelectByPage(query) +} + +// FindById 查询ID +func (s SysLoginSource) FindById(id int64) model.SysLoginSource { + rows := s.sysLoginSourceRepository.SelectByIds([]int64{id}) + if len(rows) > 0 { + return rows[0] + } + return model.SysLoginSource{} +} + +// Insert 新增 +func (s SysLoginSource) Insert(param model.SysLoginSource) int64 { + param.UID = generate.Code(8) + return s.sysLoginSourceRepository.Insert(param) +} + +// Update 更新 +func (s SysLoginSource) Update(param model.SysLoginSource) int64 { + return s.sysLoginSourceRepository.Update(param) +} + +// DeleteByIds 批量删除 +func (s SysLoginSource) DeleteByIds(ids []int64) (int64, error) { + // 检查是否存在 + arr := s.sysLoginSourceRepository.SelectByIds(ids) + if len(arr) <= 0 { + // return 0, fmt.Errorf("没有权限访问认证源数据!") + return 0, fmt.Errorf("no permission to access authentication source data") + } + if len(arr) == len(ids) { + for _, v := range arr { + s.sysLoginSourceRepository.DeleteByUserSource(v.UID) + } + return s.sysLoginSourceRepository.DeleteByIds(ids), nil + } + // return 0, fmt.Errorf("删除认证源信息失败!") + return 0, fmt.Errorf("failed to delete authentication source information") +} + +// FindByActive 查询激活 +func (s SysLoginSource) FindByActive(uid string) []model.SysLoginSource { + param := model.SysLoginSource{ + ActiveFlag: "1", + } + if uid != "" { + param.UID = uid + } + return s.sysLoginSourceRepository.Select(param) +} + +// CheckConfigJSON 检查配置JSON +func (s SysLoginSource) CheckConfigJSON(sType, sConfig string) (string, error) { + var source any + switch sType { + case "LDAP": + source = new(vo.SysLoginSourceLDAP) + case "SMTP": + source = new(vo.SysLoginSourceSMTP) + case "OAuth2": + source = new(vo.SysLoginSourceOAuth2) + default: + return "", fmt.Errorf("unsupported login source type: %s", sType) + } + if err := json.Unmarshal([]byte(sConfig), &source); err != nil { + return "", fmt.Errorf("config json format error for %s type: %s", sType, err.Error()) + } + configByte, err := json.Marshal(source) + if err != nil { + return "", fmt.Errorf("config json format error") + } + return string(configByte), nil +} diff --git a/src/modules/system/service/sys_user.go b/src/modules/system/service/sys_user.go index 1f734149..6cd2b33a 100644 --- a/src/modules/system/service/sys_user.go +++ b/src/modules/system/service/sys_user.go @@ -189,7 +189,9 @@ func (s SysUser) DeleteByIds(userIds []int64) (int64, error) { // CheckUniqueByUserName 检查用户名称是否唯一 func (s SysUser) CheckUniqueByUserName(userName string, userId int64) bool { uniqueId := s.sysUserRepository.CheckUnique(model.SysUser{ - UserName: userName, + UserName: userName, + UserType: "System", + UserSource: "#", }) if uniqueId == userId { return true @@ -200,7 +202,9 @@ func (s SysUser) CheckUniqueByUserName(userName string, userId int64) bool { // CheckUniqueByPhone 检查手机号码是否唯一 func (s SysUser) CheckUniqueByPhone(phone string, userId int64) bool { uniqueId := s.sysUserRepository.CheckUnique(model.SysUser{ - Phone: phone, + Phone: phone, + UserType: "System", + UserSource: "#", }) if uniqueId == userId { return true @@ -211,7 +215,9 @@ func (s SysUser) CheckUniqueByPhone(phone string, userId int64) bool { // CheckUniqueByEmail 检查Email是否唯一 func (s SysUser) CheckUniqueByEmail(email string, userId int64) bool { uniqueId := s.sysUserRepository.CheckUnique(model.SysUser{ - Email: email, + Email: email, + UserType: "System", + UserSource: "#", }) if uniqueId == userId { return true @@ -220,8 +226,10 @@ func (s SysUser) CheckUniqueByEmail(email string, userId int64) bool { } // FindByUserName 通过用户名查询用户信息 -func (s SysUser) FindByUserName(userName string) model.SysUser { - userinfo := s.sysUserRepository.SelectByUserName(userName) +// userType 系统sys +// userSource 系统# +func (s SysUser) FindByUserName(userName, userType, userSource string) model.SysUser { + userinfo := s.sysUserRepository.SelectByUserName(userName, userType, userSource) if userinfo.UserName != userName { return userinfo } diff --git a/src/modules/system/system.go b/src/modules/system/system.go index d4cca368..18e861c1 100644 --- a/src/modules/system/system.go +++ b/src/modules/system/system.go @@ -429,6 +429,35 @@ func Setup(router *gin.Engine) { controller.NewSysUser.Import, ) } + + // 第三方认证-配置认证源 + sysLoginSource := controller.NewSysLoginSource + sysLoginSourceGroup := router.Group("/system/login-source") + { + sysLoginSourceGroup.GET("/list", + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:loginSource:list"}}), + sysLoginSource.List, + ) + sysLoginSourceGroup.GET("/:id", + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:loginSource:query"}}), + sysLoginSource.Info, + ) + sysLoginSourceGroup.POST("", + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:loginSource:add"}}), + middleware.OperateLog(middleware.OptionNew("log.operate.title.sysLoginSource", middleware.BUSINESS_TYPE_INSERT)), + sysLoginSource.Add, + ) + sysLoginSourceGroup.PUT("", + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:loginSource:edit"}}), + middleware.OperateLog(middleware.OptionNew("log.operate.title.sysLoginSource", middleware.BUSINESS_TYPE_UPDATE)), + sysLoginSource.Edit, + ) + sysLoginSourceGroup.DELETE("/:id", + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:loginSource:remove"}}), + middleware.OperateLog(middleware.OptionNew("log.operate.title.sysLoginSource", middleware.BUSINESS_TYPE_DELETE)), + sysLoginSource.Remove, + ) + } } // InitLoad 初始参数 diff --git a/src/modules/tool/controller/mml.go b/src/modules/tool/controller/mml.go new file mode 100644 index 00000000..16dcda09 --- /dev/null +++ b/src/modules/tool/controller/mml.go @@ -0,0 +1,129 @@ +package controller + +import ( + "fmt" + "strings" + + "github.com/gin-gonic/gin" + + "be.ems/src/framework/i18n" + "be.ems/src/framework/reqctx" + "be.ems/src/framework/resp" + neService "be.ems/src/modules/network_element/service" + "be.ems/src/modules/tool/model" + "be.ems/src/modules/tool/service" +) + +// 实例化控制层 MMLController 结构体 +var NewMML = &MMLController{ + neInfoService: neService.NewNeInfo, + mmlSystemService: service.NewMMLSystem, + mmlSubscriberService: service.NewMMLSubscriber, + mmlLogService: service.NewMMLLog, +} + +// MML 网元MML +// +// PATH /tool/mml +type MMLController struct { + neInfoService *neService.NeInfo // 网元信息服务 + mmlSystemService *service.MMLSystem + mmlSubscriberService *service.MMLSubscriber + mmlLogService *service.MMLLog +} + +// SystemList MML网元列表 +// +// GET /system/list +func (s MMLController) SystemList(c *gin.Context) { + query := reqctx.QueryMap(c) + rows, total := s.mmlSystemService.FindByPage(query) + c.JSON(200, resp.OkData(map[string]any{"rows": rows, "total": total})) +} + +// SubscriberList MML网元UDM列表 +// +// GET /subscriber/list +func (s MMLController) SubscriberList(c *gin.Context) { + query := reqctx.QueryMap(c) + rows, total := s.mmlSubscriberService.FindByPage(query) + c.JSON(200, resp.OkData(map[string]any{"rows": rows, "total": total})) +} + +// LogList MML日志列表 +// +// GET /log/list +func (s MMLController) LogList(c *gin.Context) { + query := reqctx.QueryMap(c) + rows, total := s.mmlLogService.FindByPage(query) + c.JSON(200, resp.OkData(map[string]any{"rows": rows, "total": total})) +} + +// Command MML命令执行 +// +// POST /command +func (s MMLController) Command(c *gin.Context) { + language := reqctx.AcceptLanguage(c) + var body struct { + NeType string `json:"neType" binding:"required"` // 网元类型 + NeId string `json:"neId" binding:"required"` // 网元ID + Command []string `json:"command" binding:"required"` // 命令 + Type string `json:"type" binding:"required,oneof=General Standard"` // 类型UPF标准版 General Standard + } + if err := c.ShouldBindBodyWithJSON(&body); err != nil { + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_PARSER, errMsgs)) + return + } + + // 查询网元获取IP + neInfo := s.neInfoService.FindByNeTypeAndNeID(body.NeType, body.NeId) + if neInfo.NeId != body.NeId || neInfo.IP == "" { + c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo"))) + return + } + // 网元主机的Telnet客户端 + num := 1 + if body.NeType == "UPF" && body.Type == "Standard" { + num = 2 + } + telnetClient, err := s.neInfoService.NeRunTelnetClient(neInfo.NeType, neInfo.NeId, num) + if err != nil { + c.JSON(200, resp.ErrMsg(err.Error())) + return + } + defer telnetClient.Close() + if body.NeType != "IMS" { + telnetClient.RunCMD("\r\n") + } + if body.NeType == "UPF" && body.Type == "Standard" { + telnetClient.WindowChange(1024, 1024) + } + // 发送MML + result := []string{} + resultStr := "Success" + for _, v := range body.Command { + if v == "" { + continue + } + output, err := telnetClient.RunCMD(v + "\r\n") + if err != nil { + result = append(result, err.Error()) + resultStr = "there is an error" + continue + } + result = append(result, strings.TrimSpace(output)) + } + + // 记录日志 + mmlLog := model.MMLLog{ + NeType: body.NeType, + NeId: body.NeId, + User: reqctx.LoginUserToUserName(c), + Ip: c.ClientIP(), + Command: strings.Join(body.Command, ";"), + Result: resultStr, + } + s.mmlLogService.Insert(mmlLog) + c.JSON(200, resp.OkData(result)) +} diff --git a/src/modules/tool/model/mml_log.go b/src/modules/tool/model/mml_log.go new file mode 100644 index 00000000..383a0943 --- /dev/null +++ b/src/modules/tool/model/mml_log.go @@ -0,0 +1,18 @@ +package model + +// MMLLog MML网元命令 +type MMLLog struct { + ID int64 `json:"id" gorm:"column:id;primaryKey;autoIncrement"` + User string `json:"user" gorm:"column:user"` + Ip string `json:"ip" gorm:"column:ip"` + NeType string `json:"neType" gorm:"column:ne_type"` + NeId string `json:"neId" gorm:"column:ne_id"` + Command string `json:"command" gorm:"column:command"` // 命令 + Result string `json:"result" gorm:"column:result"` + LogTime int64 `json:"logTime" gorm:"column:log_time"` +} + +// TableName 表名称 +func (*MMLLog) TableName() string { + return "mml_log" +} diff --git a/src/modules/tool/model/mml_subscriber.go b/src/modules/tool/model/mml_subscriber.go new file mode 100644 index 00000000..a514c922 --- /dev/null +++ b/src/modules/tool/model/mml_subscriber.go @@ -0,0 +1,19 @@ +package model + +// MMLSubscriber MML网元UDM命令 +type MMLSubscriber struct { + ID int64 `json:"id" gorm:"column:id;primaryKey;autoIncrement"` + NeType string `json:"neType" gorm:"column:ne_type"` + Category string `json:"category" gorm:"column:category"` + CatDisplay string `json:"catDisplay" gorm:"column:cat_display"` + Operation string `json:"operation" gorm:"column:operation"` + Object string `json:"object" gorm:"column:object"` + MmlDisplay string `json:"mmlDisplay" gorm:"column:mml_display"` + ParamJson string `json:"paramJson" gorm:"column:param_json"` + Status string `json:"status" gorm:"column:status"` // 激活: Active 未激活: Inactive +} + +// TableName 表名称 +func (*MMLSubscriber) TableName() string { + return "mml_subscriber" +} diff --git a/src/modules/tool/model/mml_system.go b/src/modules/tool/model/mml_system.go new file mode 100644 index 00000000..7ad0a6d1 --- /dev/null +++ b/src/modules/tool/model/mml_system.go @@ -0,0 +1,20 @@ +package model + +// MMLSystem MML网元命令 +type MMLSystem struct { + ID int64 `json:"id" gorm:"column:id;primaryKey;autoIncrement"` + NeType string `json:"neType" gorm:"column:ne_type"` + Category string `json:"category" gorm:"column:category"` + CatDisplay string `json:"catDisplay" gorm:"column:cat_display"` + Operation string `json:"operation" gorm:"column:operation"` // 操作行为 + Object string `json:"object" gorm:"column:object"` // 操作对象 + MmlDisplay string `json:"mmlDisplay" gorm:"column:mml_display"` // 显示 + ObjectType string `json:"objectType" gorm:"column:object_type"` + ParamJson string `json:"paramJson" gorm:"column:param_json"` + Status string `json:"status" gorm:"column:status"` // 激活: Active 未激活: Inactive +} + +// TableName 表名称 +func (*MMLSystem) TableName() string { + return "mml_system" +} diff --git a/src/modules/tool/repository/mml_log.go b/src/modules/tool/repository/mml_log.go new file mode 100644 index 00000000..52422396 --- /dev/null +++ b/src/modules/tool/repository/mml_log.go @@ -0,0 +1,67 @@ +package repository + +import ( + "fmt" + "time" + + "be.ems/src/framework/database/db" + "be.ems/src/framework/logger" + "be.ems/src/modules/tool/model" +) + +// 实例化数据层 MMLLog 结构体 +var NewMMLLog = &MMLLog{} + +// MMLLog MML日志 数据层处理 +type MMLLog struct{} + +// SelectByPage 分页查询集合 +func (r MMLLog) SelectByPage(query map[string]string) ([]model.MMLLog, int64) { + tx := db.DB("").Model(&model.MMLLog{}) + // 查询条件拼接 + if v, ok := query["neType"]; ok && v != "" { + tx = tx.Where("ne_type = ?", v) + } + if v, ok := query["beginTime"]; ok && v != "" { + if len(v) == 10 { + v = fmt.Sprintf("%s000", v) + } + tx = tx.Where("log_time >= ?", v) + } + if v, ok := query["endTime"]; ok && v != "" { + if len(v) == 10 { + v = fmt.Sprintf("%s999", v) + } + tx = tx.Where("log_time <= ?", v) + } + + // 查询结果 + var total int64 = 0 + rows := []model.MMLLog{} + + // 查询数量为0直接返回 + if err := tx.Count(&total).Error; err != nil || total <= 0 { + return rows, total + } + + // 查询数据分页 + pageNum, pageSize := db.PageNumSize(query["pageNum"], query["pageSize"]) + tx = tx.Limit(pageSize).Offset(pageSize * pageNum) + err := tx.Find(&rows).Error + if err != nil { + logger.Errorf("query find err => %v", err.Error()) + return rows, total + } + return rows, total +} + +// Insert 新增信息 返回新增数据ID +func (r MMLLog) Insert(param model.MMLLog) int64 { + param.LogTime = time.Now().UnixMilli() + // 执行插入 + if err := db.DB("").Create(¶m).Error; err != nil { + logger.Errorf("insert err => %v", err.Error()) + return 0 + } + return param.ID +} diff --git a/src/modules/tool/repository/mml_subscriber.go b/src/modules/tool/repository/mml_subscriber.go new file mode 100644 index 00000000..a899c41f --- /dev/null +++ b/src/modules/tool/repository/mml_subscriber.go @@ -0,0 +1,44 @@ +package repository + +import ( + "be.ems/src/framework/database/db" + "be.ems/src/framework/logger" + "be.ems/src/modules/tool/model" +) + +// 实例化数据层 MMLSubscriber 结构体 +var NewMMLSubscriber = &MMLSubscriber{} + +// MMLSubscriber MML网元UDM命令 数据层处理 +type MMLSubscriber struct{} + +// SelectByPage 分页查询集合 +func (r MMLSubscriber) SelectByPage(query map[string]string) ([]model.MMLSubscriber, int64) { + tx := db.DB("").Model(&model.MMLSubscriber{}) + // 查询条件拼接 + if v, ok := query["neType"]; ok && v != "" { + tx = tx.Where("ne_type = ?", v) + } + if v, ok := query["status"]; ok && v != "" { + tx = tx.Where("status = ?", v) + } + + // 查询结果 + var total int64 = 0 + rows := []model.MMLSubscriber{} + + // 查询数量为0直接返回 + if err := tx.Count(&total).Error; err != nil || total <= 0 { + return rows, total + } + + // 查询数据分页 + pageNum, pageSize := db.PageNumSize(query["pageNum"], query["pageSize"]) + tx = tx.Limit(pageSize).Offset(pageSize * pageNum) + err := tx.Find(&rows).Error + if err != nil { + logger.Errorf("query find err => %v", err.Error()) + return rows, total + } + return rows, total +} diff --git a/src/modules/tool/repository/mml_system.go b/src/modules/tool/repository/mml_system.go new file mode 100644 index 00000000..834590b1 --- /dev/null +++ b/src/modules/tool/repository/mml_system.go @@ -0,0 +1,44 @@ +package repository + +import ( + "be.ems/src/framework/database/db" + "be.ems/src/framework/logger" + "be.ems/src/modules/tool/model" +) + +// 实例化数据层 MMLSystem 结构体 +var NewMMLSystem = &MMLSystem{} + +// MMLSystem MML网元命令 数据层处理 +type MMLSystem struct{} + +// SelectByPage 分页查询集合 +func (r MMLSystem) SelectByPage(query map[string]string) ([]model.MMLSystem, int64) { + tx := db.DB("").Model(&model.MMLSystem{}) + // 查询条件拼接 + if v, ok := query["neType"]; ok && v != "" { + tx = tx.Where("ne_type = ?", v) + } + if v, ok := query["status"]; ok && v != "" { + tx = tx.Where("status = ?", v) + } + + // 查询结果 + var total int64 = 0 + rows := []model.MMLSystem{} + + // 查询数量为0直接返回 + if err := tx.Count(&total).Error; err != nil || total <= 0 { + return rows, total + } + + // 查询数据分页 + pageNum, pageSize := db.PageNumSize(query["pageNum"], query["pageSize"]) + tx = tx.Limit(pageSize).Offset(pageSize * pageNum) + err := tx.Find(&rows).Error + if err != nil { + logger.Errorf("query find err => %v", err.Error()) + return rows, total + } + return rows, total +} diff --git a/src/modules/tool/service/mml_log.go b/src/modules/tool/service/mml_log.go new file mode 100644 index 00000000..f7d31cdd --- /dev/null +++ b/src/modules/tool/service/mml_log.go @@ -0,0 +1,26 @@ +package service + +import ( + "be.ems/src/modules/tool/model" + "be.ems/src/modules/tool/repository" +) + +// 实例化数据层 MMLLog 结构体 +var NewMMLLog = &MMLLog{ + mmlLogRepository: repository.NewMMLLog, +} + +// MMLLog MML网元日志 服务层处理 +type MMLLog struct { + mmlLogRepository *repository.MMLLog +} + +// FindByPage 分页查询列表数据 +func (s MMLLog) FindByPage(query map[string]string) ([]model.MMLLog, int64) { + return s.mmlLogRepository.SelectByPage(query) +} + +// Insert 新增日志 +func (s MMLLog) Insert(param model.MMLLog) int64 { + return s.mmlLogRepository.Insert(param) +} diff --git a/src/modules/tool/service/mml_subscriber.go b/src/modules/tool/service/mml_subscriber.go new file mode 100644 index 00000000..8b4c28b3 --- /dev/null +++ b/src/modules/tool/service/mml_subscriber.go @@ -0,0 +1,21 @@ +package service + +import ( + "be.ems/src/modules/tool/model" + "be.ems/src/modules/tool/repository" +) + +// 实例化数据层 MMLSubscriber 结构体 +var NewMMLSubscriber = &MMLSubscriber{ + mmlSubscriberRepository: repository.NewMMLSubscriber, +} + +// MMLSubscriber MML网元命令 服务层处理 +type MMLSubscriber struct { + mmlSubscriberRepository *repository.MMLSubscriber +} + +// FindByPage 分页查询列表数据 +func (s MMLSubscriber) FindByPage(query map[string]string) ([]model.MMLSubscriber, int64) { + return s.mmlSubscriberRepository.SelectByPage(query) +} diff --git a/src/modules/tool/service/mml_system.go b/src/modules/tool/service/mml_system.go new file mode 100644 index 00000000..021c0439 --- /dev/null +++ b/src/modules/tool/service/mml_system.go @@ -0,0 +1,21 @@ +package service + +import ( + "be.ems/src/modules/tool/model" + "be.ems/src/modules/tool/repository" +) + +// 实例化数据层 MMLSystem 结构体 +var NewMMLSystem = &MMLSystem{ + mmlSystemRepository: repository.NewMMLSystem, +} + +// MMLSystem MML网元命令 服务层处理 +type MMLSystem struct { + mmlSystemRepository *repository.MMLSystem +} + +// FindByPage 分页查询列表数据 +func (s MMLSystem) FindByPage(query map[string]string) ([]model.MMLSystem, int64) { + return s.mmlSystemRepository.SelectByPage(query) +} diff --git a/src/modules/tool/tool.go b/src/modules/tool/tool.go index ce37e8c1..355b238d 100644 --- a/src/modules/tool/tool.go +++ b/src/modules/tool/tool.go @@ -54,4 +54,27 @@ func Setup(router *gin.Engine) { controller.NewPing.Run, ) } + + // MML 网元MML + mml := controller.NewMML + mmlGroup := router.Group("/tool/mml") + { + mmlGroup.GET("/system/list", + middleware.AuthorizeUser(nil), + mml.SystemList, + ) + mmlGroup.GET("/subscriber/list", + middleware.AuthorizeUser(nil), + mml.SubscriberList, + ) + mmlGroup.GET("/log/list", + middleware.AuthorizeUser(nil), + mml.LogList, + ) + mmlGroup.POST("/command", + middleware.AuthorizeUser(nil), + mml.Command, + ) + } + } diff --git a/src/modules/trace/service/trace_task.go b/src/modules/trace/service/trace_task.go index 2085f282..d326ae06 100644 --- a/src/modules/trace/service/trace_task.go +++ b/src/modules/trace/service/trace_task.go @@ -6,9 +6,10 @@ import ( "net" "strings" + "github.com/tsmask/go-oam/framework/socket" + "be.ems/src/framework/config" "be.ems/src/framework/logger" - "be.ems/src/framework/socket" "be.ems/src/framework/utils/date" "be.ems/src/framework/utils/parse" neFetchlink "be.ems/src/modules/network_element/fetch_link" @@ -21,16 +22,14 @@ import ( // 实例化数据层 TraceTask 结构体 var NewTraceTask = &TraceTask{ - udpService: socket.SocketUDP{}, - tcpService: socket.SocketTCP{}, traceTaskRepository: repository.NewTraceTask, traceDataRepository: repository.NewTraceData, } // TraceTask 跟踪任务 服务层处理 type TraceTask struct { - udpService socket.SocketUDP // UDP服务对象 - tcpService socket.SocketTCP // 测试用,后续调整TODO + udpService socket.ServerUDP // UDP服务对象 + tcpService socket.ServerTCP // 测试用,后续调整TODO traceTaskRepository *repository.TraceTask // 跟踪_任务数据信息 traceDataRepository *repository.TraceData // 跟踪_数据信息 } @@ -48,8 +47,8 @@ func (r *TraceTask) CreateUDP(reload bool) error { } // 初始化UDP服务 - r.udpService = socket.SocketUDP{Addr: host, Port: port} - if _, err := r.udpService.New(); err != nil { + r.udpService = socket.ServerUDP{Addr: host, Port: fmt.Sprint(port)} + if err := r.udpService.Listen(); err != nil { return err } @@ -87,21 +86,20 @@ func (r *TraceTask) CreateUDP(reload bool) error { // ============ 本地测试接收网元UDP发过来的数据 后续调整TODO if config.Env() == "local" { // 初始化TCP服务 - r.tcpService = socket.SocketTCP{Addr: host, Port: port + 1} - if _, err := r.tcpService.New(); err != nil { + r.tcpService = socket.ServerTCP{Addr: host, Port: fmt.Sprint(port + 1)} + if err := r.tcpService.Listen(); err != nil { return err } // 接收处理TCP数据 - go r.tcpService.Resolve(func(conn *net.Conn, err error) { + go r.tcpService.Resolve(func(conn net.Conn, err error) { if err != nil { logger.Errorf("TCP Resolve %s", err.Error()) return } - c := (*conn) // 读取数据 buf := make([]byte, 2048) - n, err := c.Read(buf) + n, err := conn.Read(buf) if err != nil { logger.Errorf("TCP Resolve Read Error: %s", err.Error()) return @@ -117,7 +115,7 @@ func (r *TraceTask) CreateUDP(reload bool) error { } // 发送响应 - if _, err = c.Write([]byte("tcp>")); err != nil { + if _, err = conn.Write([]byte("tcp>")); err != nil { logger.Errorf("TCP Resolve Write Error: %s", err.Error()) } buf = nil diff --git a/src/modules/trace/service/trace_task_hlr.go b/src/modules/trace/service/trace_task_hlr.go index efd972f5..e5023ab7 100644 --- a/src/modules/trace/service/trace_task_hlr.go +++ b/src/modules/trace/service/trace_task_hlr.go @@ -60,7 +60,7 @@ func (r *TraceTaskHlr) DeleteByIds(ids []int64) (int64, error) { if len(rows) == len(ids) { // 停止任务 - neInfos := r.neInfoService.Find(neModel.NeInfo{NeType: "HLR"}, false, false) + neInfos := r.neInfoService.Find(neModel.NeInfo{NeType: "UDM"}, false, false) for _, r := range rows { if r.Status == "0" { continue @@ -98,7 +98,7 @@ func (r *TraceTaskHlr) Start(task model.TraceTaskHlr) (int64, error) { } // 发送创建任务 - neInfos := r.neInfoService.Find(neModel.NeInfo{NeType: "HLR"}, false, false) + neInfos := r.neInfoService.Find(neModel.NeInfo{NeType: "UDM"}, false, false) for _, neInfo := range neInfos { hlrItem := map[string]any{ "neType": neInfo.NeType, @@ -129,7 +129,7 @@ func (r *TraceTaskHlr) Start(task model.TraceTaskHlr) (int64, error) { func (r *TraceTaskHlr) Stop(task model.TraceTaskHlr) error { hlrList := []map[string]any{} // 发送停止任务 - neInfos := r.neInfoService.Find(neModel.NeInfo{NeType: "HLR"}, false, false) + neInfos := r.neInfoService.Find(neModel.NeInfo{NeType: "UDM"}, false, false) for _, neInfo := range neInfos { hlrItem := map[string]any{ "neType": neInfo.NeType, @@ -161,7 +161,7 @@ func (r *TraceTaskHlr) Stop(task model.TraceTaskHlr) error { func (r *TraceTaskHlr) File(traceId, dirPath string) ([]map[string]any, error) { hlrList := []map[string]any{} // 查询所有匹配的网元类型 - neInfos := r.neInfoService.Find(neModel.NeInfo{NeType: "HLR"}, false, false) + neInfos := r.neInfoService.Find(neModel.NeInfo{NeType: "UDM"}, false, false) if len(neInfos) == 0 { return nil, fmt.Errorf("not found network element") } diff --git a/src/modules/ws/processor/cdr_connect.go b/src/modules/ws/processor/cdr_connect.go index a3848860..884008c4 100644 --- a/src/modules/ws/processor/cdr_connect.go +++ b/src/modules/ws/processor/cdr_connect.go @@ -6,79 +6,29 @@ import ( "be.ems/src/framework/logger" "be.ems/src/framework/resp" - neDataModel "be.ems/src/modules/network_data/model" neDataService "be.ems/src/modules/network_data/service" neInfoService "be.ems/src/modules/network_element/service" ) -// GetCDRConnectByIMS 获取CDR会话事件-IMS -func GetCDRConnectByIMS(requestID string, data any) ([]byte, error) { - msgByte, _ := json.Marshal(data) - var query neDataModel.CDREventIMSQuery - err := json.Unmarshal(msgByte, &query) - if err != nil { - logger.Warnf("ws processor GetCDRConnect err: %s", err.Error()) - return nil, fmt.Errorf("query data structure error") +// GetCDRConnect 获取CDR会话事件 +func GetCDRConnect(requestID string, data any) ([]byte, error) { + if data == nil { + logger.Errorf("ws processor GetCDRConnect data is nil") + return nil, fmt.Errorf("query data error") + } + dataMap := data.(map[string]any) + query := make(map[string]string, 0) + for k, v := range dataMap { + query[k] = fmt.Sprintf("%v", v) } // 查询网元信息 rmUID - neInfo := neInfoService.NewNeInfo.FindByNeTypeAndNeID(query.NeType, query.NeID) - if neInfo.NeId != query.NeID || neInfo.IP == "" { + neInfo := neInfoService.NewNeInfo.FindByNeTypeAndNeID(query["neType"], query["neId"]) + if neInfo.NeType == "" { return nil, fmt.Errorf("query neinfo not found") } - query.RmUID = neInfo.RmUID - - rows, total := neDataService.NewCDREventIMS.FindByPage(query) - resultByte, err := json.Marshal(resp.Ok(map[string]any{ - "requestId": requestID, - "data": map[string]any{"rows": rows, "total": total}, - })) - return resultByte, err -} - -// GetCDRConnectBySMF 获取CDR会话事件-SMF -func GetCDRConnectBySMF(requestID string, data any) ([]byte, error) { - msgByte, _ := json.Marshal(data) - var query neDataModel.CDREventSMFQuery - err := json.Unmarshal(msgByte, &query) - if err != nil { - logger.Warnf("ws processor GetCDRConnect err: %s", err.Error()) - return nil, fmt.Errorf("query data structure error") - } - - // 查询网元信息 rmUID - neInfo := neInfoService.NewNeInfo.FindByNeTypeAndNeID(query.NeType, query.NeID) - if neInfo.NeId != query.NeID || neInfo.IP == "" { - return nil, fmt.Errorf("query neinfo not found") - } - query.RmUID = neInfo.RmUID - - rows, total := neDataService.NewCDREventSMF.FindByPage(query) - resultByte, err := json.Marshal(resp.Ok(map[string]any{ - "requestId": requestID, - "data": map[string]any{"rows": rows, "total": total}, - })) - return resultByte, err -} - -// GetCDRConnectBySMSC 获取CDR会话事件-SMSC -func GetCDRConnectBySMSC(requestID string, data any) ([]byte, error) { - msgByte, _ := json.Marshal(data) - var query neDataModel.CDREventSMSCQuery - err := json.Unmarshal(msgByte, &query) - if err != nil { - logger.Warnf("ws processor GetCDRConnect err: %s", err.Error()) - return nil, fmt.Errorf("query data structure error") - } - - // 查询网元信息 rmUID - neInfo := neInfoService.NewNeInfo.FindByNeTypeAndNeID(query.NeType, query.NeID) - if neInfo.NeId != query.NeID || neInfo.IP == "" { - return nil, fmt.Errorf("query neinfo not found") - } - query.RmUID = neInfo.RmUID - - rows, total := neDataService.NewCDREventSMSC.FindByPage(query) + query["rmUID"] = neInfo.RmUID + rows, total := neDataService.NewCDREvent.FindByPage(neInfo.NeType, query) resultByte, err := json.Marshal(resp.Ok(map[string]any{ "requestId": requestID, "data": map[string]any{"rows": rows, "total": total}, diff --git a/src/modules/ws/processor/ue_connect.go b/src/modules/ws/processor/ue_connect.go index 79d99952..20ebf461 100644 --- a/src/modules/ws/processor/ue_connect.go +++ b/src/modules/ws/processor/ue_connect.go @@ -6,54 +6,29 @@ import ( "be.ems/src/framework/logger" "be.ems/src/framework/resp" - neDataModel "be.ems/src/modules/network_data/model" neDataService "be.ems/src/modules/network_data/service" neService "be.ems/src/modules/network_element/service" ) -// GetUEConnectByAMF 获取UE会话事件-AMF -func GetUEConnectByAMF(requestID string, data any) ([]byte, error) { - msgByte, _ := json.Marshal(data) - var query neDataModel.UEEventAMFQuery - err := json.Unmarshal(msgByte, &query) - if err != nil { - logger.Warnf("ws processor GetUEConnectByAMF err: %s", err.Error()) - return nil, fmt.Errorf("query data structure error") +// GetUEConnect 获取UE会话事件 +func GetUEConnect(requestID string, data any) ([]byte, error) { + if data == nil { + logger.Errorf("ws processor GetUEConnect data is nil") + return nil, fmt.Errorf("query data error") + } + dataMap := data.(map[string]any) + query := make(map[string]string, 0) + for k, v := range dataMap { + query[k] = fmt.Sprintf("%v", v) } - // 查询网元获取IP - neInfo := neService.NewNeInfo.FindByNeTypeAndNeID("AMF", query.NeID) - if neInfo.NeId != query.NeID || neInfo.IP == "" { - return nil, fmt.Errorf("not fount neId info") + // 查询网元信息 rmUID + neInfo := neService.NewNeInfo.FindByNeTypeAndNeID(query["neType"], query["neId"]) + if neInfo.NeType == "" { + return nil, fmt.Errorf("query neinfo not found") } - query.RmUID = neInfo.RmUID - - rows, total := neDataService.NewUEEventAMF.FindByPage(query) - resultByte, err := json.Marshal(resp.Ok(map[string]any{ - "requestId": requestID, - "data": map[string]any{"rows": rows, "total": total}, - })) - return resultByte, err -} - -// GetUEConnectByMME 获取UE会话事件-MME -func GetUEConnectByMME(requestID string, data any) ([]byte, error) { - msgByte, _ := json.Marshal(data) - var query neDataModel.UEEventMMEQuery - err := json.Unmarshal(msgByte, &query) - if err != nil { - logger.Warnf("ws processor GetUEConnectByMME err: %s", err.Error()) - return nil, fmt.Errorf("query data structure error") - } - - // 查询网元获取IP - neInfo := neService.NewNeInfo.FindByNeTypeAndNeID("MME", query.NeID) - if neInfo.NeId != query.NeID || neInfo.IP == "" { - return nil, fmt.Errorf("not fount neId info") - } - query.RmUID = neInfo.RmUID - - rows, total := neDataService.NewUEEventMME.FindByPage(query) + query["rmUID"] = neInfo.RmUID + rows, total := neDataService.NewUEEvent.FindByPage(neInfo.NeType, query) resultByte, err := json.Marshal(resp.Ok(map[string]any{ "requestId": requestID, "data": map[string]any{"rows": rows, "total": total}, diff --git a/src/modules/ws/service/ws_receive.go b/src/modules/ws/service/ws_receive.go index 36791072..09e1a685 100644 --- a/src/modules/ws/service/ws_receive.go +++ b/src/modules/ws/service/ws_receive.go @@ -63,16 +63,10 @@ func (s *WSReceive) Commont(client *model.WSClient, reqMsg model.WSRequest) { resByte, err = processor.GetProcessData(reqMsg.RequestID, reqMsg.Data) case "net": resByte, err = processor.GetNetConnections(reqMsg.RequestID, reqMsg.Data) - case "ims_cdr": - resByte, err = processor.GetCDRConnectByIMS(reqMsg.RequestID, reqMsg.Data) - case "smf_cdr": - resByte, err = processor.GetCDRConnectBySMF(reqMsg.RequestID, reqMsg.Data) - case "smsc_cdr": - resByte, err = processor.GetCDRConnectBySMSC(reqMsg.RequestID, reqMsg.Data) - case "amf_ue": - resByte, err = processor.GetUEConnectByAMF(reqMsg.RequestID, reqMsg.Data) - case "mme_ue": - resByte, err = processor.GetUEConnectByMME(reqMsg.RequestID, reqMsg.Data) + case "ims_cdr", "smf_cdr", "smsc_cdr", "sgwc_cdr": + resByte, err = processor.GetCDRConnect(reqMsg.RequestID, reqMsg.Data) + case "amf_ue", "mme_ue": + resByte, err = processor.GetUEConnect(reqMsg.RequestID, reqMsg.Data) case "upf_tf": resByte, err = processor.GetUPFTotalFlow(reqMsg.RequestID, reqMsg.Data) case "ne_state": diff --git a/src/modules/ws/service/ws_send.go b/src/modules/ws/service/ws_send.go index adcccaef..b419e1fa 100644 --- a/src/modules/ws/service/ws_send.go +++ b/src/modules/ws/service/ws_send.go @@ -34,6 +34,10 @@ const ( GROUP_AMF_UE = "1010" // 组号-MME_UE会话事件 1011_neId GROUP_MME_UE = "1011" + // 组号-AMF_NB状态事件 1014_neId + GROUP_AMF_NB = "1014" + // 组号-MME_NB状态事件 1015_neId + GROUP_MME_NB = "1015" // 组号-告警 2000_neType_neId GROUP_ALARM = "2000" // 组号-告警事件 2002_neType_neId diff --git a/src/modules/ws/ws.go b/src/modules/ws/ws.go index af8147f4..8407c478 100644 --- a/src/modules/ws/ws.go +++ b/src/modules/ws/ws.go @@ -14,36 +14,33 @@ func Setup(router *gin.Engine) { logger.Infof("开始加载 ====> ws 模块路由") // WebSocket 协议 + ws := controller.NewWSController wsGroup := router.Group("/ws") { wsGroup.GET("", middleware.AuthorizeUser(nil), - collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.ws", collectlogs.BUSINESS_TYPE_OTHER)), - controller.NewWSController.WS, + ws.WS, ) wsGroup.GET("/test", middleware.AuthorizeUser(nil), - controller.NewWSController.Test, + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.ws", collectlogs.BUSINESS_TYPE_OTHER)), + ws.Test, ) wsGroup.GET("/ssh", middleware.AuthorizeUser(nil), - collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.ws", collectlogs.BUSINESS_TYPE_OTHER)), - controller.NewWSController.SSH, + ws.SSH, ) wsGroup.GET("/telnet", middleware.AuthorizeUser(nil), - collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.ws", collectlogs.BUSINESS_TYPE_OTHER)), - controller.NewWSController.Telnet, + ws.Telnet, ) wsGroup.GET("/redis", middleware.AuthorizeUser(nil), - collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.ws", collectlogs.BUSINESS_TYPE_OTHER)), - controller.NewWSController.Redis, + ws.Redis, ) wsGroup.GET("/view", middleware.AuthorizeUser(nil), - collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.ws", collectlogs.BUSINESS_TYPE_OTHER)), - controller.NewWSController.ShellView, + ws.ShellView, ) } } diff --git a/sshsvc/.ssh/id_rsa b/sshsvc/.ssh/id_rsa deleted file mode 100644 index b9e6a0e2..00000000 --- a/sshsvc/.ssh/id_rsa +++ /dev/null @@ -1,38 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn -NhAAAAAwEAAQAAAYEAo8xNDB8tD9rEJhtTirwK8CxM0e+wcMT6fuDfTSgc/JRMjXIeM6B7 -6Cw2lCSjwTME60nGZ8Yb0STXXuoc+WdEFcWaJVSlfeXzH4G/WCAsw3zxdwaYWnuavzwWFC -TX6wvUgI0Hh1eAgjusZOi1fDvzX8PLml8Lbjd8n6VFneZkVijHNxh1eL8Xq3yqCEGTenrS -4SBGImwIQidtT9LqFs2Ze3Hi5pBvuqq0Um8gtGwp6zd/sIzeG8LX5axBSZN10BrkW1bGC8 -7sfpjJvadtvgiz0ZfxVDxd8eP8CgrKq+yQ0scfNB0j4ZOIP9Zwk6Q0fYQHxegPcMNr2v5P -IzHmDwTvDsHu3qyxGc74OVkAEd1o9OXiaSQ/fQXgvdUuSlugBUA3wx8Vlqa0om3fyY/XbX -LdqStmcVtKYfTiePX7UYc09YlYuFJycJxuf6i38Jek58fqp0NSH//ZWP/fXqwkwE8xUzEi -Jiq0c+wp7j5XMPFpMwmKViintJCS5C9nEQ+UIuMpAAAFiMzUaEPM1GhDAAAAB3NzaC1yc2 -EAAAGBAKPMTQwfLQ/axCYbU4q8CvAsTNHvsHDE+n7g300oHPyUTI1yHjOge+gsNpQko8Ez -BOtJxmfGG9Ek117qHPlnRBXFmiVUpX3l8x+Bv1ggLMN88XcGmFp7mr88FhQk1+sL1ICNB4 -dXgII7rGTotXw781/Dy5pfC243fJ+lRZ3mZFYoxzcYdXi/F6t8qghBk3p60uEgRiJsCEIn -bU/S6hbNmXtx4uaQb7qqtFJvILRsKes3f7CM3hvC1+WsQUmTddAa5FtWxgvO7H6Yyb2nbb -4Is9GX8VQ8XfHj/AoKyqvskNLHHzQdI+GTiD/WcJOkNH2EB8XoD3DDa9r+TyMx5g8E7w7B -7t6ssRnO+DlZABHdaPTl4mkkP30F4L3VLkpboAVAN8MfFZamtKJt38mP121y3akrZnFbSm -H04nj1+1GHNPWJWLhScnCcbn+ot/CXpOfH6qdDUh//2Vj/316sJMBPMVMxIiYqtHPsKe4+ -VzDxaTMJilYop7SQkuQvZxEPlCLjKQAAAAMBAAEAAAGATRJTapG8zUn9o4SWIaBrcSkXGG -0000sMJuk+iPqH8R0CjEeXCGnKA6vSHpDC8KRF+0QidC/WZOl14XY9HelGMwxghJI4sG2j -oT6WvyuchHtkzsGurFyeqr7mEKJpanKNkdNKKJe2oxDbBDwvMP6wfG4PflqccUbwf9nvUO -XYbmYPntAGbkNUKt+kze+1Khti4IUkGwxEMoSEvdubRBGH13r17dEmkWnDIUqi0+JVMxVR -IsyVsfBTUAFmUu1ssPgFnD81z9G9OTic2A5zd+QDfXlJWbjJACtuM/4IotkZZ/M6rsVlYn -AY8Vqfs/8C53giSF5R4iiR29FIU3Luts9dJJQyQ94rXunK00iifyh18qisBKwh9rjxYn3J -wFeZeXzKRg/cLuY1Z74QBWjWzukadvu7dC9bWFZ2k3zKBPTodcpXr1QDwFT4mgEYAFXbQN -8RjFGZrhr2jbsnoM71QlcGv9RjxMPNep+BwnYvPSZ1Piu3nmQqNtysg6ur3ZEHJeLVAAAA -wHZ5m4TECDOgkL138faHQycfd9Yi/Yj1akSwVvtGpiPd35ir1bOp52H/Ea3ymDwh6PvOSk -NjpvwqCXSX5nIQWrQQiDHMKA4pCfAtzbJ68fhWmfzWUaWGIcrnhnoxXzMYgXS/Gp6fwqOf -5JH4jm3uM5knXLTz0E0WofYnLgDo6CAuANl9bSQDfPYh8tuNndoQd9190r+15uLhv/pIM7 -MsZzifBrE2cgSBIunIERdQbD9JwNCeDPIrV8aQbOJDyuJDbwAAAMEA1nYx8GVZM/0cSZqG -V9C4i6debJEep2k91z7XvjFRZJrTYYZavWJPEUmmqNjsJg0Bdad4g3SdK2iJ4W5CHzDm2S -Zn08j7on/ybcD2c1ZnXbwKrzPXRymc62xxwSDD95m/R5cSvN/Pmy57QfymQNPaNXMkhKq1 -nzF56bljW0FHVFnrgUHpbLUOEc0QHXO4d2PaUNptLVxquOJI/VDW2GKKQWaIsdYKPJEDO9 -GBe/LaUDzodd1s1isly86DLEgT2HwbAAAAwQDDhgO/kOI1N0jMOpE5gotcrhQc353jrP16 -mKOdcp9MVHiioRybsyRdnbDIYKXbQz2ZRwmz2RBh55uPQjLcfi82GlIm2rdTL8KzP9vLpc -WAbZ7dcbv1lLyIlr4Yf33LgAChxJQTGNad771cwYFrtwTYk16O0Mdv302L0DgDTJUvhzJb -0ZuIk2nmzumSH1pOYmZl8Oa+UM7YSZNCWEpM7/S5laNISQ6dF/yy6Del2sQk/1/JCMUK0d -GLCkyCiaW9igsAAAASc2ltb25Ac2ltb256aGFuZ3N6AQ== ------END OPENSSH PRIVATE KEY----- diff --git a/sshsvc/.ssh/id_rsa.pub b/sshsvc/.ssh/id_rsa.pub deleted file mode 100644 index 93e845fa..00000000 --- a/sshsvc/.ssh/id_rsa.pub +++ /dev/null @@ -1 +0,0 @@ -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCjzE0MHy0P2sQmG1OKvArwLEzR77BwxPp+4N9NKBz8lEyNch4zoHvoLDaUJKPBMwTrScZnxhvRJNde6hz5Z0QVxZolVKV95fMfgb9YICzDfPF3Bphae5q/PBYUJNfrC9SAjQeHV4CCO6xk6LV8O/Nfw8uaXwtuN3yfpUWd5mRWKMc3GHV4vxerfKoIQZN6etLhIEYibAhCJ21P0uoWzZl7ceLmkG+6qrRSbyC0bCnrN3+wjN4bwtflrEFJk3XQGuRbVsYLzux+mMm9p22+CLPRl/FUPF3x4/wKCsqr7JDSxx80HSPhk4g/1nCTpDR9hAfF6A9ww2va/k8jMeYPBO8Owe7erLEZzvg5WQAR3Wj05eJpJD99BeC91S5KW6AFQDfDHxWWprSibd/Jj9dtct2pK2ZxW0ph9OJ49ftRhzT1iVi4UnJwnG5/qLfwl6Tnx+qnQ1If/9lY/99erCTATzFTMSImKrRz7CnuPlcw8WkzCYpWKKe0kJLkL2cRD5Qi4yk= simon@simonzhangsz diff --git a/sshsvc/.ssh/private_key.pem b/sshsvc/.ssh/private_key.pem deleted file mode 100644 index b9e6a0e2..00000000 --- a/sshsvc/.ssh/private_key.pem +++ /dev/null @@ -1,38 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn -NhAAAAAwEAAQAAAYEAo8xNDB8tD9rEJhtTirwK8CxM0e+wcMT6fuDfTSgc/JRMjXIeM6B7 -6Cw2lCSjwTME60nGZ8Yb0STXXuoc+WdEFcWaJVSlfeXzH4G/WCAsw3zxdwaYWnuavzwWFC -TX6wvUgI0Hh1eAgjusZOi1fDvzX8PLml8Lbjd8n6VFneZkVijHNxh1eL8Xq3yqCEGTenrS -4SBGImwIQidtT9LqFs2Ze3Hi5pBvuqq0Um8gtGwp6zd/sIzeG8LX5axBSZN10BrkW1bGC8 -7sfpjJvadtvgiz0ZfxVDxd8eP8CgrKq+yQ0scfNB0j4ZOIP9Zwk6Q0fYQHxegPcMNr2v5P -IzHmDwTvDsHu3qyxGc74OVkAEd1o9OXiaSQ/fQXgvdUuSlugBUA3wx8Vlqa0om3fyY/XbX -LdqStmcVtKYfTiePX7UYc09YlYuFJycJxuf6i38Jek58fqp0NSH//ZWP/fXqwkwE8xUzEi -Jiq0c+wp7j5XMPFpMwmKViintJCS5C9nEQ+UIuMpAAAFiMzUaEPM1GhDAAAAB3NzaC1yc2 -EAAAGBAKPMTQwfLQ/axCYbU4q8CvAsTNHvsHDE+n7g300oHPyUTI1yHjOge+gsNpQko8Ez -BOtJxmfGG9Ek117qHPlnRBXFmiVUpX3l8x+Bv1ggLMN88XcGmFp7mr88FhQk1+sL1ICNB4 -dXgII7rGTotXw781/Dy5pfC243fJ+lRZ3mZFYoxzcYdXi/F6t8qghBk3p60uEgRiJsCEIn -bU/S6hbNmXtx4uaQb7qqtFJvILRsKes3f7CM3hvC1+WsQUmTddAa5FtWxgvO7H6Yyb2nbb -4Is9GX8VQ8XfHj/AoKyqvskNLHHzQdI+GTiD/WcJOkNH2EB8XoD3DDa9r+TyMx5g8E7w7B -7t6ssRnO+DlZABHdaPTl4mkkP30F4L3VLkpboAVAN8MfFZamtKJt38mP121y3akrZnFbSm -H04nj1+1GHNPWJWLhScnCcbn+ot/CXpOfH6qdDUh//2Vj/316sJMBPMVMxIiYqtHPsKe4+ -VzDxaTMJilYop7SQkuQvZxEPlCLjKQAAAAMBAAEAAAGATRJTapG8zUn9o4SWIaBrcSkXGG -0000sMJuk+iPqH8R0CjEeXCGnKA6vSHpDC8KRF+0QidC/WZOl14XY9HelGMwxghJI4sG2j -oT6WvyuchHtkzsGurFyeqr7mEKJpanKNkdNKKJe2oxDbBDwvMP6wfG4PflqccUbwf9nvUO -XYbmYPntAGbkNUKt+kze+1Khti4IUkGwxEMoSEvdubRBGH13r17dEmkWnDIUqi0+JVMxVR -IsyVsfBTUAFmUu1ssPgFnD81z9G9OTic2A5zd+QDfXlJWbjJACtuM/4IotkZZ/M6rsVlYn -AY8Vqfs/8C53giSF5R4iiR29FIU3Luts9dJJQyQ94rXunK00iifyh18qisBKwh9rjxYn3J -wFeZeXzKRg/cLuY1Z74QBWjWzukadvu7dC9bWFZ2k3zKBPTodcpXr1QDwFT4mgEYAFXbQN -8RjFGZrhr2jbsnoM71QlcGv9RjxMPNep+BwnYvPSZ1Piu3nmQqNtysg6ur3ZEHJeLVAAAA -wHZ5m4TECDOgkL138faHQycfd9Yi/Yj1akSwVvtGpiPd35ir1bOp52H/Ea3ymDwh6PvOSk -NjpvwqCXSX5nIQWrQQiDHMKA4pCfAtzbJ68fhWmfzWUaWGIcrnhnoxXzMYgXS/Gp6fwqOf -5JH4jm3uM5knXLTz0E0WofYnLgDo6CAuANl9bSQDfPYh8tuNndoQd9190r+15uLhv/pIM7 -MsZzifBrE2cgSBIunIERdQbD9JwNCeDPIrV8aQbOJDyuJDbwAAAMEA1nYx8GVZM/0cSZqG -V9C4i6debJEep2k91z7XvjFRZJrTYYZavWJPEUmmqNjsJg0Bdad4g3SdK2iJ4W5CHzDm2S -Zn08j7on/ybcD2c1ZnXbwKrzPXRymc62xxwSDD95m/R5cSvN/Pmy57QfymQNPaNXMkhKq1 -nzF56bljW0FHVFnrgUHpbLUOEc0QHXO4d2PaUNptLVxquOJI/VDW2GKKQWaIsdYKPJEDO9 -GBe/LaUDzodd1s1isly86DLEgT2HwbAAAAwQDDhgO/kOI1N0jMOpE5gotcrhQc353jrP16 -mKOdcp9MVHiioRybsyRdnbDIYKXbQz2ZRwmz2RBh55uPQjLcfi82GlIm2rdTL8KzP9vLpc -WAbZ7dcbv1lLyIlr4Yf33LgAChxJQTGNad771cwYFrtwTYk16O0Mdv302L0DgDTJUvhzJb -0ZuIk2nmzumSH1pOYmZl8Oa+UM7YSZNCWEpM7/S5laNISQ6dF/yy6Del2sQk/1/JCMUK0d -GLCkyCiaW9igsAAAASc2ltb25Ac2ltb256aGFuZ3N6AQ== ------END OPENSSH PRIVATE KEY----- diff --git a/sshsvc/config/config.go b/sshsvc/config/config.go deleted file mode 100644 index fcf978a4..00000000 --- a/sshsvc/config/config.go +++ /dev/null @@ -1,185 +0,0 @@ -package config - -import ( - "flag" - "fmt" - "os" - "strings" - - "be.ems/lib/global" - "be.ems/lib/log" - "be.ems/sshsvc/logmml" - - "gopkg.in/yaml.v3" -) - -type DbConfig struct { - Type string `yaml:"type"` - User string `yaml:"user"` - Password string `yaml:"password"` - Host string `yaml:"host"` - Port string `yaml:"port"` - Name string `yaml:"name"` - ConnParam string `yaml:"connParam,omitempty"` - Backup string `yaml:"backup"` -} - -// Yaml struct of config -type YamlConfig struct { - Logger struct { - File string `yaml:"file"` - Level string `yaml:"level"` - Duration int `yaml:"duration"` - Count int `yaml:"count"` - } `yaml:"logger"` - - Logmml struct { - File string `yaml:"file"` - Duration int `yaml:"duration"` - Count int `yaml:"count"` - Level string `yaml:"level"` - } `yaml:"logmml"` - - Sshd struct { - ListenAddr string `yaml:"listenAddr"` - ListenPort uint16 `yaml:"listenPort"` - PrivateKey string `yaml:"privateKey"` - MaxConnNum int `yaml:"maxConnNum"` - Timeout uint16 `yaml:"timeout"` - Session string `yaml:"session"` - MmlHome string `yaml:"mmlHome"` - UserName string `yaml:"userName"` - Password string `yaml:"password"` - AuthType string `yaml:"authType"` - TagNE string `yaml:"tagNE"` - } `yaml:"sshd"` - - TelnetServer struct { - ListenAddr string `yaml:"listenAddr"` - ListenPort uint16 `yaml:"listenPort"` - MaxConnNum int `yaml:"maxConnNum"` - Timeout uint16 `yaml:"timeout"` - Session string `yaml:"session"` - MmlHome string `yaml:"mmlHome"` - UserName string `yaml:"userName"` - Password string `yaml:"password"` - AuthType string `yaml:"authType"` - TagNE string `yaml:"tagNE"` - } `yaml:"telnetServer"` - - SNMPServer struct { - ListenAddr string `yaml:"listenAddr"` - ListenPort uint16 `yaml:"listenPort"` - UserName string `yaml:"userName"` - AuthPass string `yaml:"authPass"` - AuthProto string `yaml:"authProto"` - PrivPass string `yaml:"privPass"` - PrivProto string `yaml:"privProto"` - EngineID string `yaml:"engineID"` - TrapPort uint16 `yaml:"trapPort"` - TrapListen bool `yaml:"trapListen"` - TrapBool bool `yaml:"trapBool"` - TrapTick uint16 `yaml:"trapTick"` - TimeOut uint16 `yaml:"timeOut"` - TrapTarget string `yaml:"trapTarget"` - } `yaml:"snmpServer"` - - Database DbConfig `yaml:"database"` - - OMC struct { - HttpUri string `yaml:"httpUri"` - UserCrypt string `yaml:"userCrypt"` - } `yaml:"omc"` -} - -var yamlConfig YamlConfig = NewYamlConfig() - -// set default value for yaml config -func NewYamlConfig() YamlConfig { - return YamlConfig{ - Database: DbConfig{ - Type: "mysql", - ConnParam: "charset=utf8mb4&collation=utf8mb4_general_ci&parseTime=True&interpolateParams=True", - }, - } -} - -func ReadConfig(configFile string) { - yamlFile, err := os.ReadFile(configFile) - if err != nil { - fmt.Println("Read yaml config file error:", err) - os.Exit(2) - } - - err = yaml.Unmarshal(yamlFile, &yamlConfig) - if err != nil { - fmt.Println("Unmarshal error:", err) - os.Exit(3) - } -} - -func GetYamlConfig() *YamlConfig { - return &yamlConfig -} - -func GetLogLevel() log.LogLevel { - var logLevel log.LogLevel - switch strings.ToLower(yamlConfig.Logger.Level) { - case "trace": - logLevel = log.LOG_TRACE - case "info": - logLevel = log.LOG_INFO - case "debug": - logLevel = log.LOG_DEBUG - case "warn": - logLevel = log.LOG_WARN - case "error": - logLevel = log.LOG_ERROR - case "fatal": - logLevel = log.LOG_FATAL - case "off": - logLevel = log.LOG_OFF - default: - logLevel = log.LOG_DEBUG - } - return logLevel -} - -func GetLogMmlLevel() logmml.LogLevel { - var logLevel logmml.LogLevel - switch strings.ToLower(yamlConfig.Logmml.Level) { - case "cmd", "command": - logLevel = logmml.LOG_CMD - case "ret", "result": - logLevel = logmml.LOG_RET - default: - logLevel = logmml.LOG_CMD - } - return logLevel -} - -func GetDefaultUserAgent() string { - return "OMC-sshsvc/" + global.Version -} - -const DefaultConfigFile = "./etc/sshsvc.yaml" - -func init() { - cfile := flag.String("c", DefaultConfigFile, "config file") - pv := flag.Bool("v", false, "print version") - pversion := flag.Bool("version", false, "print version") - ph := flag.Bool("h", false, "print help") - phelp := flag.Bool("help", false, "print help") - - flag.Parse() - if *pv || *pversion { - fmt.Printf("OMC sshsvc version: %s\n%s\n%s\n\n", global.Version, global.BuildTime, global.GoVer) - os.Exit(0) - } - if *ph || *phelp { - flag.Usage() - os.Exit(0) - } - - ReadConfig(*cfile) -} diff --git a/sshsvc/dborm/dborm.go b/sshsvc/dborm/dborm.go deleted file mode 100644 index 45449317..00000000 --- a/sshsvc/dborm/dborm.go +++ /dev/null @@ -1,161 +0,0 @@ -package dborm - -import ( - "database/sql" - "fmt" - "time" - - "be.ems/lib/log" - - _ "github.com/go-sql-driver/mysql" - "xorm.io/xorm" - "xorm.io/xorm/core" -) - -const ( - TableNameMeasureTask = "measure_task" - TableNameNeInfo = "ne_info" -) - -type Menu struct { - Id int `json:"id"` - Title string `json:"title"` - Icon string `json:"icon"` - Href string `json:"href"` - ParentId int `json:"parent_id"` - Remark int `json:"remark"` -} - -type DatabaseClient struct { - dbType string - dbUrl string - dbConnMaxLifetime time.Duration - dbMaxIdleConns int - dbMaxOpenConns int - IsShowSQL bool - - XEngine *xorm.Engine -} - -var DbClient DatabaseClient - -func InitDbClient(dbType, dbUser, dbPassword, dbHost, dbPort, dbName, dbParam string) error { - DbClient.dbUrl = fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?%s", - dbUser, dbPassword, dbHost, dbPort, dbName, dbParam) - DbClient.dbType = dbType - DbClient.dbConnMaxLifetime = 0 - DbClient.dbMaxIdleConns = 0 - DbClient.dbMaxOpenConns = 0 - if log.GetLevel() == log.LOG_TRACE { - DbClient.IsShowSQL = true - } - log.Debugf("dbType:%s dbUrl:%s:", dbType, DbClient.dbUrl) - - var err error - DbClient.XEngine, err = xorm.NewEngine(DbClient.dbType, DbClient.dbUrl) - if err != nil { - log.Error("Failed to connet database:", err) - return err - } - DbClient.XEngine.SetConnMaxLifetime(DbClient.dbConnMaxLifetime) - DbClient.XEngine.SetMaxIdleConns(DbClient.dbMaxIdleConns) - DbClient.XEngine.SetMaxOpenConns(DbClient.dbMaxOpenConns) - DbClient.XEngine.DatabaseTZ = time.Local // 必须 - DbClient.XEngine.TZLocation = time.Local // 必须 - if DbClient.IsShowSQL { - DbClient.XEngine.ShowSQL(true) - } - - xEngine = DbClient.XEngine - - return nil -} - -// func InitDbClient() error { -// db := config.GetYamlConfig().Database -// DbClient.dbUrl = fmt.Sprintf("%s:%s@tcp(%s:%s)/%s", db.User, db.Password, db.Host, db.Port, db.Name) -// DbClient.dbType = db.Type -// DbClient.dbConnMaxLifetime = 0 -// DbClient.dbMaxIdleConns = 0 -// DbClient.dbMaxOpenConns = 0 -// if log.GetLevel() == log.LOG_TRACE { -// DbClient.IsShowSQL = true -// } -// log.Debugf("dbType:%s dbUrl:%s:******@tcp(%s:%s)/%s", DbClient.dbType, db.User, db.Host, db.Port, db.Name) -// var err error -// DbClient.XEngine, err = xorm.NewEngine(DbClient.dbType, DbClient.dbUrl) -// if err != nil { -// log.Error("Failed to connet database:", err) -// return err -// } -// DbClient.XEngine.SetConnMaxLifetime(DbClient.dbConnMaxLifetime) -// DbClient.XEngine.SetMaxIdleConns(DbClient.dbMaxIdleConns) -// DbClient.XEngine.SetMaxOpenConns(DbClient.dbMaxOpenConns) -// if DbClient.IsShowSQL { -// DbClient.XEngine.ShowSQL(true) -// } -// xEngine = DbClient.XEngine - -// return nil -// } - -var xEngine *xorm.Engine - -func XormConnectDatabase(dbType, dbUser, dbPassword, dbHost, dbPort, dbName string) (*xorm.Engine, error) { - sqlStr := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&collation=utf8mb4_general_ci&parseTime=true&loc=Local", - dbUser, dbPassword, dbHost, dbPort, dbName) - log.Debugf("dbType:%s Connect to:%s:******@tcp(%s:%s)/%s?charset=utf8mb4&collation=utf8mb4_general_ci&parseTime=true&loc=Local", - dbType, dbUser, dbHost, dbPort, dbName) - var err error - xEngine, err = xorm.NewEngine(dbType, sqlStr) //1、Create xorm engine - if err != nil { - log.Error("Failed to connect database:", err) - return nil, err - } - if log.GetLevel() == log.LOG_TRACE { - xEngine.ShowSQL(true) - } - return xEngine, nil -} - -func XCoreDB() *core.DB { - return xEngine.DB() -} - -func XEngDB() *xorm.Engine { - return xEngine -} - -type Session struct { - Id int `json:"id" xorm:"pk 'id' autoincr"` - AccountId string `json:"accountId" xorm:"account_id"` - Name string `json:"name" xorm:"name"` - Host string `json:"host" xorm:"host"` - AccessToken string `json:"accessToken" xorm:"access_token"` - Expires uint32 `json:"expires" xorm:"expires"` - Status string `json:"status" xorm:"status"` - LoginTime string `json:"loginTime" xorm:"-"` - ShakeTime sql.NullTime `son:"shakeTime" xorm:"shake_time"` - LogoutTime sql.NullTime `json:"logoutTime" xorm:"logout_time"` -} - -// XormUpdateSession update session -func XormLogoutUpdateSession(token string) (Session, error) { - log.Info("XormLogoutUpdateSession processing... ") - - session := Session{Status: "offline", AccessToken: token} - session.LogoutTime.Valid = true - session.LogoutTime.Time = time.Now() - - xSession := xEngine.NewSession() - defer xSession.Close() - _, err := xSession.Table("session").Where("access_token = ?", token).Update(session) - xSession.Commit() - // 查询记录返回 - if err == nil { - session := Session{} - _, err = xSession.Table("session").Where("access_token = ?", token).Get(&session) - return session, err - } - return session, err -} diff --git a/sshsvc/etc/sshsvc.yaml b/sshsvc/etc/sshsvc.yaml deleted file mode 100644 index e9019c4f..00000000 --- a/sshsvc/etc/sshsvc.yaml +++ /dev/null @@ -1,89 +0,0 @@ -# file: log file name -# level: /trace/debug/info/warn/error/fatal, default: debug -# duration: rotation time with xx hours, example: 1/12/24 hours -# count: rotation count of log, default is 30 rotation -logger: - file: d:/omc.git/be.ems/sshsvc/log/sshsvc.log - level: trace - duration: 24 - count: 30 - -# file: MML log file name -# duration: rotation time with xx hours, example: 1/12/24 hours -# count: rotation count of log, default is 30 rotation -# level: cmd/ret log cmd/log cmd & result -logmml: - file: d:/omc.git/be.ems/sshsvc/mmllog/omcmml.log - duration: 24 - count: 30 - level: ret - -# ssh service listen ipv4/v6 and port, support multiple routines -# ip: 0.0.0.0 or ::0, support IPv4/v6 -# session: single/multiple session for one user -# authType: local/radius -sshd: - listenAddr: 0.0.0.0 - listenPort: 32222 - privateKey: ./.ssh/id_rsa - maxConnNum: 2 - timeout: 1800 - session: multiple - mmlHome: ./mmlhome - userName: manager - password: pass123 - authType: local - tagNE: hlr - -# authType: local/omc -telnetServer: - listenAddr: 0.0.0.0 - listenPort: 32323 - maxConnNum: 2 - timeout: 1800 - session: multiple - mmlHome: ./mmlhome - userName: manager - password: pass123 - authType: local - tagNE: hlr - -# authproto: NoAuth/MD5/SHA -# privProto: NoPriv/DES/AES/AES192/AES256 -snmpServer: - listenAddr: '[::]' - listenPort: 34957 - userName: manager - authPass: pass123 - authproto: MD5 - privPass: "3F2A1B4C5D6E7F8A9B0C1D2E3F4A5B6C7D8E9F0A1B2C3D4E" - privProto: DES - #engineID: "800007db03360102101101" - engineID: "8000000004323030313a6462383a3a39313636" - trapPort: 34958 - trapListen: false - trapBool: false - trapTick: 60 - timeOut: 5 - trapTarget: "2001:db8::9219" - -database: - type: mysql - user: administrator - password: "*86#ROtartsinim" - host: 192.168.13.117 - port: 3306 - name: OMC_PUB - connParam: charset=utf8mb4&collation=utf8mb4_general_ci&parseTime=True&interpolateParams=True - -omc: - httpUri: http://127.0.0.1:3040 - userCrypt: bcrypt - -ne: - port: 4100 - sleep: 200 - user: admin - password: admin - - diff --git a/sshsvc/logmml/logmml.go b/sshsvc/logmml/logmml.go deleted file mode 100644 index 70fa5172..00000000 --- a/sshsvc/logmml/logmml.go +++ /dev/null @@ -1,187 +0,0 @@ -// logger for omc/ems - -package logmml - -import ( - "fmt" - "io" - "log" -) - -// LogLevel defines a log level -type LogLevel int - -// enum all LogLevels -const ( - // following level also match syslog.Priority value - LOG_RET LogLevel = iota - LOG_CMD - LOG_OFF - LOG_NODEF -) - -// default log options -const ( - DEFAULT_LOG_PREFIX = "omc:mml" - DEFAULT_LOG_FLAG = log.Ldate | log.Ltime | log.Lmsgprefix - DEFAULT_LOG_LEVEL = LOG_CMD - DEFAULT_CALL_DEPTH = 0 -) - -// Logger is a logger interface -type Logger interface { - Ret(v ...interface{}) - Retf(format string, v ...interface{}) - Cmd(v ...interface{}) - Cmdf(format string, v ...interface{}) - - Level() LogLevel - LevelString() string - SetLevel(l LogLevel) -} - -var _ Logger = DiscardLogger{} - -// DiscardLogger don't log implementation for ILogger -type DiscardLogger struct{} - -// Trace empty implementation -func (DiscardLogger) Ret(v ...interface{}) {} - -// Tracef empty implementation -func (DiscardLogger) Retf(format string, v ...interface{}) {} - -// Debug empty implementation -func (DiscardLogger) Cmd(v ...interface{}) {} - -// Debugf empty implementation -func (DiscardLogger) Cmdf(format string, v ...interface{}) {} - -// Level empty implementation -func (DiscardLogger) Level() LogLevel { - return LOG_NODEF -} - -// Level empty implementation -func (DiscardLogger) LevelString() string { - return "" -} - -// SetLevel empty implementation -func (DiscardLogger) SetLevel(l LogLevel) {} - -// EmsLogger is the default implment of ILogger -type MMLLogger struct { - RET *log.Logger - CMD *log.Logger - level LogLevel - levelString []string - //depth int -} - -var _ Logger = &MMLLogger{} - -// NewEmsLogger2 let you customrize your logger prefix and flag -func NewMmlLogger2(out io.Writer, prefix string, flag int) *MMLLogger { - return NewMmlLogger3(out, prefix, flag, DEFAULT_LOG_LEVEL) -} - -// NewEmsLogger3 let you customrize your logger prefix and flag and logLevel -func NewMmlLogger3(out io.Writer, prefix string, flag int, l LogLevel) *MMLLogger { - return &MMLLogger{ - RET: log.New(out, fmt.Sprintf("[%s] [ret]: ", prefix), flag), - CMD: log.New(out, fmt.Sprintf("[%s] [cmd]: ", prefix), flag), - level: l, - levelString: []string{"ret", "cmd"}, - //depth: DEFAULT_CALL_DEPTH, - } -} - -// Trace implement ILogger -func (s *MMLLogger) Ret(v ...interface{}) { - if s.level <= LOG_RET { - //_ = s.RET.Output(s.depth, fmt.Sprintln(v...)) - _ = s.RET.Output(0, fmt.Sprintln(v...)) - } -} - -// Tracef implement ILogger -func (s *MMLLogger) Retf(format string, v ...interface{}) { - if s.level <= LOG_RET { - _ = s.RET.Output(0, fmt.Sprintf(format, v...)) - } -} - -// Debug implement ILogger -func (s *MMLLogger) Cmd(v ...interface{}) { - if s.level <= LOG_CMD { - _ = s.CMD.Output(0, fmt.Sprintln(v...)) - } -} - -// Debugf implement ILogger -func (s *MMLLogger) Cmdf(format string, v ...interface{}) { - if s.level <= LOG_CMD { - _ = s.CMD.Output(0, fmt.Sprintf(format, v...)) - } -} - -// Info implement ILogger - -// Level implement ILogger -func (s *MMLLogger) Level() LogLevel { - return s.level -} - -// Level implement ILogger -func (s *MMLLogger) LevelString() string { - return s.levelString[s.level] -} - -// SetLevel implement ILogger -func (s *MMLLogger) SetLevel(l LogLevel) { - s.level = l -} - -var Elogger Logger - -func InitMmlLogger(logFile string, period int, count int, prefix string, logLevel LogLevel) { - logWriter := getLogWriter(logFile, period, count) - Elogger = NewMmlLogger3(logWriter, prefix, DEFAULT_LOG_FLAG, logLevel) - fmt.Printf("logFile=%s, period=%d, count=%d, prefix=%s, logLevel=%s\n", logFile, period, count, prefix, GetLevelString()) -} - -// Trace implement ILogger -func Ret(v ...interface{}) { - Elogger.Ret(v...) -} - -// Tracef implement ILogger -func Retf(format string, v ...interface{}) { - Elogger.Retf(format, v...) -} - -// Debug implement ILogger -func Cmd(v ...interface{}) { - Elogger.Cmd(v...) -} - -// Debugf implement ILogger -func Cmdf(format string, v ...interface{}) { - Elogger.Cmdf(format, v...) -} - -// Level implement ILogger -func GetLevel() LogLevel { - return Elogger.Level() -} - -// Level implement ILogger -func GetLevelString() string { - return Elogger.LevelString() -} - -// SetLevel implement ILogger -func SetLevel(l LogLevel) { - Elogger.SetLevel(l) -} diff --git a/sshsvc/logmml/partition.go b/sshsvc/logmml/partition.go deleted file mode 100644 index 23380dcb..00000000 --- a/sshsvc/logmml/partition.go +++ /dev/null @@ -1,71 +0,0 @@ -package logmml - -import ( - "io" - "time" - - rotatelogs "github.com/lestrrat/go-file-rotatelogs" -) - -type WriteSyncer interface { - io.Writer - Sync() error -} - -// 得到LogWriter -func getLogWriter(filePath string, period, count int) WriteSyncer { - warnIoWriter := getWriter(filePath, period, count) - return addSync(warnIoWriter) -} - -// 日志文件切割 -func getWriter(filename string, period, count int) io.Writer { - // 保存日志count天,每period小时分割一次日志 - duration := time.Hour * time.Duration(period) - var logfile string - if period >= 24 { - logfile = filename + "-%Y%m%d" - } else { - logfile = filename + "-%Y%m%d%H" - } - hook, err := rotatelogs.New( - - logfile, - rotatelogs.WithLinkName(filename), - // rotatelogs.WithMaxAge(duration), - rotatelogs.WithRotationCount(count), - rotatelogs.WithRotationTime(duration), - rotatelogs.WithLocation(time.Local), - ) - - //保存日志30天,每1分钟分割一次日志 - /* - hook, err := rotatelogs.New( - filename+"_%Y%m%d%H%M.log", - rotatelogs.WithLinkName(filename), - rotatelogs.WithMaxAge(time.Hour*24*30), - rotatelogs.WithRotationTime(time.Minute*1), - ) - */ - if err != nil { - panic(err) - } - return hook -} - -func addSync(w io.Writer) WriteSyncer { - switch w := w.(type) { - case WriteSyncer: - return w - default: - return writerWrapper{w} - } -} - -type writerWrapper struct { - io.Writer -} - -func (w writerWrapper) Sync() error { - return nil -} diff --git a/sshsvc/makefile b/sshsvc/makefile deleted file mode 100644 index b9386207..00000000 --- a/sshsvc/makefile +++ /dev/null @@ -1,18 +0,0 @@ -# Makefile for OMC-OMC-crontask project - -PROJECT = OMC -VERSION = 2.2503.9 -LIBDIR = be.ems/lib -BINNAME = sshsvc - -.PHONY: build $(BINNAME) -build $(BINNAME): - go build -o $(BINNAME) -v -ldflags "-s -w -X '$(LIBDIR)/global.Version=$(VERSION)' \ - -X '$(LIBDIR)/global.BuildTime=`date`' \ - -X '$(LIBDIR)/global.GoVer=`go version`'" - -run: $(BINNAME) - ./$(BINNAME) - -clean: - rm ./$(BINNAME) diff --git a/sshsvc/mibs/CINTEL-HLR-MIB.my b/sshsvc/mibs/CINTEL-HLR-MIB.my deleted file mode 100644 index 7fcb47e9..00000000 --- a/sshsvc/mibs/CINTEL-HLR-MIB.my +++ /dev/null @@ -1,7567 +0,0 @@ --- --- CINTEL-SS-HLR-MIB.my --- MIB generated by MG-SOFT Visual MIB Builder Version 7.0 Build 209 --- Monday, September 13, 2010 at 17:22:53 --- - - CINTEL-HLR-MIB DEFINITIONS ::= BEGIN - - IMPORTS - cintelSS, RowStatus - FROM CINTEL-MIB - Opaque, OBJECT-TYPE, MODULE-IDENTITY - FROM SNMPv2-SMI; - - - -- 1.3.6.1.4.1.1379.2.3.3.3 - hlr MODULE-IDENTITY - LAST-UPDATED "201706291606Z" -- June 29, 2007 at 16:06 GMT - ORGANIZATION - "CINTEL" - CONTACT-INFO - "cintel - support@cintel.com.cn" - DESCRIPTION - "Description." - REVISION "201706051219Z" -- June 05, 2007 at 12:19 GMT - DESCRIPTION - "This is the first release version of the HLR MIB" - ::= { application 3 } - - - --- --- Type definitions --- - - AvailStateChoices ::= INTEGER - { - inTest(0), - failed(1), - powerOff(2), - offLine(3), - onLine(4), - dependency(5), - degraded(6), - notInstalled(7) - } - - --- --- Node definitions --- - --- Node definitions --- --- The MIB module for ctcn. --- 1.3.6.1.4.1.1379.1.3 - -- 1.3.6.1.4.1.1379.2.3 - ctcn OBJECT IDENTIFIER ::= { cintelSS 3 } - - --- 1.3.6.1.4.1.1379.1.3.3 - -- 1.3.6.1.4.1.1379.2.3.3 - application OBJECT IDENTIFIER ::= { ctcn 3 } - - --- 1.3.6.1.4.1.1379.1.3.3.2.2 - -- 1.3.6.1.4.1.1379.2.3.3.3.1 - management OBJECT IDENTIFIER ::= { hlr 1 } - - -- 1.3.6.1.4.1.1379.2.3.3.3.1.1 - instance OBJECT IDENTIFIER ::= { management 1 } - - -- 1.3.6.1.4.1.1379.2.3.3.3.2.1.1 - instName OBJECT-TYPE - SYNTAX OCTET STRING (SIZE (0..4)) - MAX-ACCESS read-write - STATUS current - DESCRIPTION - "Name:instName - Remark:Instance Name" - ::= { instance 1 } - - -- 1.3.6.1.4.1.1379.2.3.3.3.2.1.2 - instStatus OBJECT-TYPE - SYNTAX OCTET STRING (SIZE (0..16)) - MAX-ACCESS read-write - STATUS current - DESCRIPTION - "Name:instStatus - Remark:System status: Normal, Abnormal" - ::= { instance 2 } - - -- 1.3.6.1.4.1.1379.2.3.3.3.2.1.3 - instDesc OBJECT-TYPE - SYNTAX OCTET STRING (SIZE (0..64)) - MAX-ACCESS read-write - STATUS current - DESCRIPTION - "Name:instDesc - Remark:Instance Description" - ::= { instance 3 } - - -- 1.3.6.1.4.1.1379.2.3.3.3.2.1.4 - instLocation OBJECT-TYPE - SYNTAX OCTET STRING (SIZE (0..12)) - MAX-ACCESS read-write - STATUS current - DESCRIPTION - "Name:instLocation - Remark: Instance location" - ::= { instance 4 } - - -- 1.3.6.1.4.1.1379.2.3.3.3.2.1.5 - instContact OBJECT-TYPE - SYNTAX OCTET STRING (SIZE (0..32)) - MAX-ACCESS read-write - STATUS current - DESCRIPTION - "Name:instContact - Remark:Instance contact." - ::= { instance 5 } - - -- 1.3.6.1.4.1.1379.2.3.3.3.2.1.7 - instOpTime OBJECT-TYPE - SYNTAX TimeStamp - MAX-ACCESS read-only - STATUS current - DESCRIPTION - "Name:instOpTime - The value of instOpTime at the time of the most recent - change in state." - ::= { instance 7 } - - -- 1.3.6.1.4.1.1379.2.3.3.3.2.1.9 - instService OBJECT-TYPE - SYNTAX INTEGER - MAX-ACCESS read-write - STATUS current - DESCRIPTION - "Name:instService - The instance service event state, 0: Normal, 1: Link Down, 2: Link Up, 3: Authentication Failure." - ::= { instance 9 } - - -- 1.3.6.1.4.1.1379.2.3.3.3.2 - parameter OBJECT IDENTIFIER ::= { hlr 2 } - - -- 1.3.6.1.4.1.1379.2.3.3.3.2.2 - system OBJECT IDENTIFIER ::= { parameter 1 } - - - -- 1.3.6.1.4.1.1379.2.3.3.3.2.2.1 - cC OBJECT-TYPE - SYNTAX OCTET STRING (SIZE (0..4)) - MAX-ACCESS read-write - STATUS current - DESCRIPTION - "Name:CC - Remark:Country Code" - ::= { system 1 } - - - -- 1.3.6.1.4.1.1379.2.3.3.3.2.2.2 - nDC OBJECT-TYPE - SYNTAX OCTET STRING (SIZE (0..6)) - MAX-ACCESS read-write - STATUS current - DESCRIPTION - "Name:NDC - Remark:National Destination Code" - ::= { system 2 } - - - -- 1.3.6.1.4.1.1379.2.3.3.3.2.2.3 - startSN OBJECT-TYPE - SYNTAX OCTET STRING (SIZE (0..12)) - MAX-ACCESS read-write - STATUS current - DESCRIPTION - "Name:SN Start - Remark:The beginning of the VLR SN range." - ::= { system 3 } - - - -- 1.3.6.1.4.1.1379.2.3.3.3.2.2.4 - endSN OBJECT-TYPE - SYNTAX OCTET STRING (SIZE (0..12)) - MAX-ACCESS read-write - STATUS current - DESCRIPTION - "Name:SN End - Remark:The end of the VLR SN range." - ::= { system 4 } - - - -- 1.3.6.1.4.1.1379.2.3.3.3.2.2.5 - maxLicenses OBJECT-TYPE - SYNTAX INTEGER - MAX-ACCESS read-only - STATUS current - DESCRIPTION - "Name:Max License - Remark:(Read Only) The maximum subscriber capacity of HLR determined by License Control." - ::= { system 5 } - - - -- 1.3.6.1.4.1.1379.2.3.3.3.2.2.6 - usedLicenses OBJECT-TYPE - SYNTAX INTEGER - MAX-ACCESS read-only - STATUS current - DESCRIPTION - "Name:Used License - Remark:(Read Only) The number of registered HLR subscribers." - ::= { system 6 } - - - -- 1.3.6.1.4.1.1379.2.3.3.3.2.2.7 - provisionedSubs OBJECT-TYPE - SYNTAX INTEGER - MAX-ACCESS read-only - STATUS current - DESCRIPTION - "Name:Provisioned Users - Remark:(Read Only) The number of service enabled HLR subscribers." - ::= { system 7 } - - - -- 1.3.6.1.4.1.1379.2.3.3.3.2.2.8 - registeredSubs OBJECT-TYPE - SYNTAX INTEGER - MAX-ACCESS read-only - STATUS current - DESCRIPTION - "Name:Registered Users - Remark:(Read Only) The number of registered (both service enabled and disabled) HLR subscribers." - ::= { system 8 } - - - -- 1.3.6.1.4.1.1379.2.3.3.3.2.2.9 - roamingSubs OBJECT-TYPE - SYNTAX INTEGER - MAX-ACCESS read-only - STATUS current - DESCRIPTION - "Name:Roaming Users - Remark:(Read Only) The number of provisioned HLR subscribers currently roaming to VPLMNs." - ::= { system 9 } - - - -- 1.3.6.1.4.1.1379.2.3.3.3.2.2.10 - softwareVersion OBJECT-TYPE - SYNTAX OCTET STRING (SIZE (0..16)) - MAX-ACCESS read-only - STATUS current - DESCRIPTION - "Name:Software Version - Remark:(Read Only) Version of HLR software." - ::= { system 10 } - - - -- 1.3.6.1.4.1.1379.2.3.3.3.2.2.11 - dataVersion OBJECT-TYPE - SYNTAX OCTET STRING (SIZE (0..16)) - MAX-ACCESS read-only - STATUS current - DESCRIPTION - "Name:Data Version - Remark:(Read Only) Version of HLR subscriber data structure." - ::= { system 11 } - - - -- 1.3.6.1.4.1.1379.2.3.3.3.2.2.12 - cDRFlag OBJECT-TYPE - SYNTAX INTEGER - { - off(0), - on(1) - } - MAX-ACCESS read-write - STATUS current - DESCRIPTION - "Name:CDR Flag - Remark:Enable or disable CDR generation of HLR." - ::= { system 12 } - - - -- 1.3.6.1.4.1.1379.2.3.3.3.2.2.13 - reloadState OBJECT-TYPE - SYNTAX INTEGER - { - idle(0), - reload(1) - } - MAX-ACCESS read-write - STATUS current - DESCRIPTION - "Name:Reload State - Remark:Select reload to load backup HLR subscriber data from HLR server hard disk." - ::= { system 13 } - - - -- 1.3.6.1.4.1.1379.2.3.3.3.2.2.14 - saveParamCommand OBJECT-TYPE - SYNTAX INTEGER { saveParameter(1) } - MAX-ACCESS not-accessible - STATUS current - DESCRIPTION - "Remark:Save the HLR parameters residing in memory to harddisk." - ::= { system 14 } - - - -- 1.3.6.1.4.1.1379.2.3.3.3.2.2.15 - saveDataCommand OBJECT-TYPE - SYNTAX INTEGER { saveData(1) } - MAX-ACCESS read-write - STATUS current - DESCRIPTION - "Remark:Save the HLR subscriber data to both HLR