diff --git a/.gitignore b/.gitignore index 29445ab2..d2c0666a 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,15 @@ .history/ .idea/ +# Built Visual Studio Code Extensions +*.vsix +*.log +*.log-* +*.bak +*.bak* +*.exe +local/omc_db.sqlite + # Run temp file and dir restagent/backup/ restagent/log/ @@ -22,18 +31,3 @@ sshsvc/sshsvc sshsvc/mmllog/ sshsvc/mmlhome/ sshsvc/log/ - -tools/loadmconf/loadmconf -tools/loadpconf/loadpconf - -reference -vendor - -# Built Visual Studio Code Extensions -*.vsix -*.log -*.log-* -*.bak -*.bak* -*.exe -local/omc_db.sqlite diff --git a/.vscode/launch.json b/.vscode/launch.json index 26559ec4..f549ed53 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -9,33 +9,17 @@ "type": "go", "request": "launch", "mode": "debug", - "program": "./restagent/restagent.go", + "program": "main.go", "console": "integratedTerminal", - "args": ["--env", "local"] // 走开发配置 - }, - { - "name": "DEBUG restagent", - "type": "go", - "request": "launch", - "mode": "debug", - "program": "d:/omc.git/be.ems/restagent/", - "console": "integratedTerminal" + "args": ["--env", "local", "-c", "./local/omc.yaml"] }, { "name": "debug sshsvc", "type": "go", "request": "launch", "mode": "debug", - "program": "d:/omc.git/be.ems/sshsvc/sshsvc.go", + "program": "sshsvc/sshsvc.go", "console": "integratedTerminal" - }, - { - "name": "debug encyaml", - "type": "go", - "request": "launch", - "mode": "debug", - "program": "d:/omc.git/be.ems/tools/encode", - "console": "integratedTerminal" - } + } ] } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 062cca47..9d7aae1b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,24 @@ # 版本发布日志 +## 2.2503.4-20250331 + +- 重构 项目目录结构 +- 重构 数据库多语言表结构变更 +- 新增 支持厂商自定定义目录 +- 重构 备份数据输出路径变更 +- 更新 SMF/UPF参数配置 +- 优化 数据源不强制连接状态 +- 修复 UPFTodayFlowUpdate函数的返回值 +- 重构 移除安装和升级命令中的 M_PARAM 参数, 标准版std 轻量版lite +- 重构 UPF流量总计7,30天累计数据查询 +- 优化 自定义指标公式计算 +- 更新 kpi_title_en名称为更准确的描述 +- 修复 KPI推送ws订阅缺失_x下划线标识 +- 修复 处理兼容旧网元查询函数 +- 新增 密码强度校验/密码过期时间功能 +- 新增 密码不允许使用最近修改的密码功能 +- 修复 网元巡检告警检查创建时间不为0的 + ## 2.2503.2-20250314 - 更新 SMSC CDR原因值字典翻译 diff --git a/README.md b/README.md index 57f49d40..f07f9396 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,7 @@ | --------------------- | -------------------------- | | /usr/local/omc/static | 网管静态资源文件路径 | | /usr/local/omc/upload | 网管上传文件资源路径 | +| /usr/local/omc/backup | 网管备份网元的数据路径 | | /usr/local/etc/omc | 网管与网元之间相关文件 | | /tmp/omc | 存放从网元拉取到本地的文件 | @@ -31,11 +32,11 @@ masterauth "helloearth" replica-read-only no ``` -## 一些服务器 +## 编译发布 -```txt +```bash # 版本发布空间 -\\192.168.1.205\share\release\omc +\\192.168.1.205\share_205\release\omc # 研发git 192.168.1.120 @@ -46,29 +47,26 @@ agtuser/admin123 manager/admin123 omcuser/a9tU53r -# 网管编译环境 -主线22.04:192.168.2.166 -simon/admin123 -makeomc.sh -m all -c ba -主线18.04:192.168.6.188 -simon/admin123 -makeomc.sh (前端复制166的,需要166先打包编译前端) -多租户22.04:192.168.2.211 -simon/admin123 -makeomc.sh -m all +# 软件包编译环境 密码:Admin123@pl +ssh -P 18522 root@192.168.9.58 # arm64 anolis:8 +ssh -P 18422 root@192.168.9.58 # amd64 ubuntu:22.04 +ssh -P 18322 root@192.168.9.58 # amd64 ubuntu:18.04 +ssh -P 18222 root@192.168.9.58 # amd64 openEuler:20.03 +ssh -P 18122 root@192.168.9.58 # arm64 ubuntu:18.04 + ``` # 系统工具依赖包 -[ubuntu-iperf3](https://launchpad.net/ubuntu/+source/iperf3) -[ubuntu-libsctp1](https://launchpad.net/ubuntu/jammy/amd64/libsctp1/1.0.19+dfsg-1build1) -[ky10-aarch64](https://update.cs2c.com.cn/NS/V10/V10SP3/os/adv/lic/base/aarch64/Packages/) +- [ubuntu-iperf3](https://launchpad.net/ubuntu/+source/iperf3) +- [ubuntu-libsctp1](https://launchpad.net/ubuntu/jammy/amd64/libsctp1/1.0.19+dfsg-1build1) +- [ky10-aarch64](https://update.cs2c.com.cn/NS/V10/V10SP3/os/adv/lic/base/aarch64/Packages/) -## 开发 +## 调试开发 ```sh # 安装 Go版本 1.21.6 后进入项目根目录 -cd ./restagent +cd /ems_backend # 下载依赖 go mod download @@ -77,49 +75,54 @@ apt install -y libpcap-dev go env -w CGO_ENABLED='1' # 调试启动 -go run restagent.go -c ./etc/restconf.yaml --env local +go run main.go --env local -c ./local/omc.yaml # 调试分析 # http://127.0.0.1:33060/debug/pprof/ go tool pprof -http=:9090 http://127.0.0.1:33060/debug/pprof/heap # 生成 swagger 文档 -swag init -d ./ -g ./restagent/restagent.go -o ./swagger2docs -swag fmt -d ./ -g ./restagent/restagent.go +swag init -d ./ -g main.go -o ./swagger_docs +swag fmt -d ./ -g main.go -# 打包命名 restagent -go build -ldflags="-s -w" -o restagent +# 打包命名 omc +go build -ldflags="-s -w" -o omc ``` -## 打包 +## 二进制打包 ```sh go env -w GOOS=linux go env -w GOOS=windows -cd ./restagent - -go build -o restagent -v -ldflags="-s -w -X 'be.ems/lib/global.Version=24.09.20' -X 'be.ems/lib/global.BuildTime=`date`' -X 'be.ems/lib/global.GoVer=`go version`'" +go build -o omc -v -ldflags="-s -w -X 'be.ems/src/framework/config.Version=2.2503.14' -X 'be.ems/src/framework/config.BuildTime=$(date)' -X 'be.ems/src/framework/config.GoVer=$(go version)'" ``` -## 安装 +## 软件包安装 ```sh -# BA初始安装 -/usr/local/omc/bin/setomc.sh -m install -c ba -/usr/local/omc/bin/setomc.sh -m upgrade -c ba -/usr/local/omc/bin/setomc.sh -m skip -c ba +# 脚本升级 +sudo bash /usr/local/etc/omc/script/setup.sh -u -# 安装包安装 -sudo M_PARAM=install C_PARAM=omc dpkg -i /usr/local/omc/bin/ems_2.240620.1_amd64.deb -sudo M_PARAM=upgrade C_PARAM=ba dpkg -i /usr/local/omc/bin/ems_2.240620.1_amd64.deb +# Deb +sudo dpkg -l omc +sudo dpkg -r omc +sudo M_PARAM=std C_PARAM=agt dpkg -i omc-r2.2503.2-20250320-ubuntu-amd64.deb +sudo M_PARAM=lite C_PARAM=agt dpkg -i omc-r2.2503.2-20250320-ubuntu-amd64.deb -# 麒麟 -sudo rpm -Uvh --nosignature --reinstall --force /home/omcuser/omc.git/build.ems/release/rpms/arm64/omc-r2.2412.2-20241213-ky10.rpm -sudo /usr/local/omc/bin/setomc.sh -m install -c agt +# Rpm +sudo rpm -qi omc +sudo rpm -e omc +sudo M_PARAM=lite C_PARAM=agt rpm -i omc-r2.2503.2-20250320-anolis-arm64.rpm +sudo rpm -Uvh --reinstall --nosignature --force omc-r2.2503.2-20250320-anolis-arm64.rpm +``` + +## 数据库相关 + +```sh # 数据库导入 mysql -uroot -p1000omc@kp! -P 33066 --protocol tcp -D omc_db < u_user_info.sql @@ -130,10 +133,14 @@ INSERT INTO cdr_event_smsc_bak SELECT * FROM cdr_event_smsc WHERE TIMESTAMP <= 1 DELETE FROM cdr_event_smsc WHERE TIMESTAMP <= 1739540000 # 执行数据库脚本 -cd ./restagent -./restagent.exe -c ./etc/restconf.yaml --sqlPath ../database/common --sqlSource default -./restagent.exe -c ./etc/restconf.yaml --sqlPath ../database/install --sqlSource default -./restagent.exe -c ./etc/restconf.yaml --sqlPath ../database/upgrade/upg_20250313.sql --sqlSource lite +./omc.exe -c ./local/omc.yaml --sqlPath ./build/database/std/common --sqlSource std +./omc.exe -c ./local/omc.yaml --sqlPath ./build/database/std/install --sqlSource std +./omc.exe -c ./local/omc.yaml --sqlPath ./build/database/std/upgrade/upg_sys_dict_data.sql --sqlSource std -/usr/local/omc/bin/restagent -c /usr/local/omc/etc/restconf.yaml --sqlPath /usr/local/omc/etc/db/upgrade/upg_20250313.sql --sqlSource lite +./omc.exe -c ./local/omc.yaml --sqlPath ./build/database/lite/common --sqlSource lite +./omc.exe -c ./local/omc.yaml --sqlPath ./build/database/lite/install --sqlSource lite +./omc.exe -c ./local/omc.yaml --sqlPath ./build/vendor/omc/database/lite/customized.sql --sqlSource lite + +sudo /usr/local/bin/omc -c /usr/local/etc/omc/omc.yaml --sqlPath /usr/local/etc/omc/database/lite/install --sqlSource lite +sudo /usr/local/bin/omc -c /usr/local/etc/omc/omc.yaml --sqlPath /usr/local/etc/omc/database/lite/upgrade/upg_sys_dict_data.sql --sqlSource lite ``` diff --git a/build/README.md b/build/README.md new file mode 100644 index 00000000..e3229640 --- /dev/null +++ b/build/README.md @@ -0,0 +1,28 @@ +# build + +打包添加到构建工具的 `/tmp/usr/local/etc/omc` 目录内 + +## 文件资源 + +| 路径 | 说明 | +| -------- | ---------------- | +| database | 数据库 | +| default | 默认配置文件 | +| vendor | 各厂商的定制修改 | + +## 编译发布 + +```bash +# =================== Vendor Database +echo +ApiDir=/root/omc.git/be.ems +BuildDir=/root/omc.git/build.ems + +dirs="database default vendor" +for v in ${dirs}; do + path=$BuildDir/tmp/usr/local/etc/omc + rm -rf ${path}/${v} + cp -rf ${ApiDir}/build/${v} ${path}/${v} +done + +``` diff --git a/build/database/lite/common/alarm_define.sql b/build/database/lite/common/alarm_define.sql new file mode 100644 index 00000000..dd5fb5c7 --- /dev/null +++ b/build/database/lite/common/alarm_define.sql @@ -0,0 +1,36 @@ +-- ---------------------------- +-- Table structure for alarm_define +-- ---------------------------- +DROP TABLE IF EXISTS "alarm_define"; +CREATE TABLE "alarm_define" ( + "alarm_id" text(32) NOT NULL, + "alarm_code" integer(11), + "alarm_title_cn" text(255), + "alarm_title" text(255), + "ne_type" text(32), + "alarm_type" text(64), + "orig_severity" text(255), + "object_uid" text(28), + "object_name" text(64), + "object_type" text(20), + "location_info" text(255), + "specific_problem" text(255), + "specific_problem_id" text(32), + "add_info" text(255), + "threshold" integer(20), + "status" text(255), + PRIMARY KEY ("alarm_id") +); + +-- ---------------------------- +-- Records of alarm_define +-- ---------------------------- +INSERT INTO "alarm_define" VALUES ('HXEMSCM10100', 10100, 'License即将过期', 'The license is about to expire', 'OMC', 'EnvironmentalAlarm', 'Warning', NULL, 'EMS;CM;License', 'CM', '', 'Alarm cause: the license expiration time is less than %d days', 'AC10100', '', 30, 'Active'); +INSERT INTO "alarm_define" VALUES ('HXEMSPM10200', 10200, '性能越限', 'Performance exceeds the threshold', 'OMC', 'QualityOfServiceAlarm', 'Warning', NULL, 'EMS;PM', 'PM', '', 'Alarm cause: performance exceed threshold, alarm generate from omc', 'AC10200', '', NULL, 'Active'); +INSERT INTO "alarm_define" VALUES ('HXEMSPM10201', 10201, '性能数据采集超时', 'Performance data report timed out', 'OMC', 'EquipmentAlarm', 'Minor', NULL, 'EMS;PM', 'PM', '', 'Alarm cause: performance data report timed out, period=%d(minutes), time delay=%d(minutes), alarm generate from omc', 'AC10201', '', NULL, 'Active'); +INSERT INTO "alarm_define" VALUES ('HXEMSSM10000', 10000, '系统状态异常', 'The system state is abnormal', 'OMC', 'EquipmentAlarm', 'Major', NULL, 'EMS;SystemManagement;Heartbeat', 'SystemState', '', 'Alarm cause: the system state of target NE has not been received for %d seconds', 'AC10000', '', 30, 'Active'); +INSERT INTO "alarm_define" VALUES ('HXEMSSM10001', 10001, 'CPU占用率越限', 'CPU usage exceeds the threshold', 'OMC', 'EnvironmentalAlarm', 'Minor', NULL, 'EMS;SystemManagement;Heartbeat', 'SystemState', '', 'Alarm cause: the CPU occupancy rate of the target NE exceeds %d', 'AC10001', '', 70, 'Active'); +INSERT INTO "alarm_define" VALUES ('HXEMSSM10002', 10002, 'NTP时间同步失败', 'NTP Sync failure', 'OMC', 'EnvironmentalAlarm', 'Minor', NULL, 'EMS;SystemManagement;Heartbeat', 'SystemState', '', 'Alarm cause: the CPU occupancy rate of the target NE exceeds %d', 'AC10001', '', 70, 'Active'); + + +-- Dump completed on 2024-03-06 17:27:01 diff --git a/build/database/lite/common/chart_graph.sql b/build/database/lite/common/chart_graph.sql new file mode 100644 index 00000000..40ff338c --- /dev/null +++ b/build/database/lite/common/chart_graph.sql @@ -0,0 +1,183 @@ +-- ---------------------------- +-- Table structure for chart_graph +-- ---------------------------- +DROP TABLE IF EXISTS "chart_graph"; +CREATE TABLE "chart_graph" ( + "row_id" integer NOT NULL, + "row_type" text(255) NOT NULL, + "row_group" text(32) NOT NULL, + "id" text(64) NOT NULL, + "type" text(64), + "depth" integer(11), + "x" integer, + "y" integer, + "size" text(64), + "icon" text(1024), + "img" text(255), + "clip_cfg" text(1024), + "direction" text(64), + "source" text(64), + "target" text(64), + "combo_id" text(64), + "padding" text(64), + "parent_id" text(64), + "children" text(1024), + "style" text(2048), + "label" text(64), + "label_cfg" text(1024), + PRIMARY KEY ("row_id") +); + +-- ---------------------------- +-- Indexes structure for table chart_graph +-- ---------------------------- +CREATE INDEX "idx_group" +ON "chart_graph" ( + "row_group" ASC +); + +-- ---------------------------- +-- Records of chart_graph +-- ---------------------------- +INSERT INTO "chart_graph" VALUES (1, 'node', 'hello', 'node-1', 'rect', 0, -218, -20, '[80,40]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '', '', '', '', '', '', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"#ff0000","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ff0000"}', 'Node-1', '{"offset":0,"position":"center","style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (2, 'node', 'hello', 'node-2', 'star', 0, 82, -15, '60', '{"height":25,"img":"","offset":20,"show":false,"width":25}', '', '', '', '', '', '', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"#2bff00","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#05ff16"}', 'Node-2', '{"offset":0,"position":"center","style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (3, 'edge', 'hello', 'node-1~1704427926706~node-2', 'polyline', 0, 0, 0, '', '', '', '', '', 'node-1', 'node-2', '', '', '', '', '{"active":{"lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"lineWidth":1,"stroke":"rgb(245, 245, 245)"},"endArrow":true,"highlight":{"lineWidth":2,"stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"inactive":{"lineWidth":1,"stroke":"rgb(234, 234, 234)"},"lineWidth":5,"offset":20,"radius":2,"selected":{"lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#0062ff"}', '1 to 2', '{"autoRotate":false,"position":"middle","refX":0,"refY":0,"style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (1177, 'node', 'demo', 'one', 'circle-animate-shape-r', 0, -123.911, 5, '60', '{"height":25,"img":"","offset":20,"show":false,"width":25}', '', '', '', '', '', '', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"#00ff91","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ff4d4d"}', 'One', '{"offset":0,"position":"center","style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (1178, 'node', 'demo', 'two', 'circle-animate-shape-stroke', 0, 228.652, 10.3481, '60', '{"height":25,"img":"","offset":20,"show":false,"width":25}', '', '', '', '', '', '', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"#fe5a01","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#9497ff"}', 'Two', '{"offset":0,"position":"center","style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (1179, 'node', 'demo', 'three', 'rect-animate-state', 0, 65, 127, '[80,40]', '{"height":25,"img":"","offset":20,"show":false,"width":25}', '', '', '', '', '', '', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"#ffffff","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', 'Three', '{"offset":0,"position":"center","style":{"fill":"#000000","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (1180, 'edge', 'demo', 'one~1704764271132~two', 'cubic-animate-line-dash', 0, 0, 0, '', '', '', '', '', 'one', 'two', '', '', '', '', '{"active":{"lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"lineWidth":1,"stroke":"rgb(245, 245, 245)"},"endArrow":true,"highlight":{"lineWidth":2,"stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"inactive":{"lineWidth":1,"stroke":"rgb(234, 234, 234)"},"lineWidth":1,"offset":20,"radius":2,"selected":{"lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#fbfe39"}', 'one-two', '{"autoRotate":false,"position":"middle","refX":0,"refY":0,"style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (1181, 'edge', 'demo', 'two~1704764297866~three', 'cubic-animate-circle-move', 0, 0, 0, '', '', '', '', '', 'two', 'three', '', '', '', '', '{"active":{"lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"lineWidth":1,"stroke":"rgb(245, 245, 245)"},"highlight":{"lineWidth":2,"stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"inactive":{"lineWidth":1,"stroke":"rgb(234, 234, 234)"},"lineWidth":1,"offset":20,"radius":2,"selected":{"lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#80f0ff"}', 'two-three', '{"autoRotate":false,"position":"middle","refX":0,"refY":0,"style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (1182, 'edge', 'demo', 'three~1704764353721~one', 'line-animate-state', 0, 0, 0, '', '', '', '', '', 'three', 'one', '', '', '', '', '{"cursor":"pointer","lineWidth":1,"offset":20,"radius":2,"stroke":"#ffffff"}', 'three-one', '{"autoRotate":false,"position":"middle","refX":0,"refY":0,"style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (1725, 'node', '5GC System Architecture1', 'Base', 'image-animate-state', 0, -530.671, -66.6639, '[64,64]', '{"height":25,"img":"","offset":20,"show":false,"width":25}', '/svg/base.svg', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '', '', '', '', '{"cursor":"pointer","fill":"transparent","lineWidth":1,"radius":4,"stroke":"#ffffff"}', '(R)AN', '{"offset":4,"position":"bottom","style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (1726, 'node', '5GC System Architecture1', 'DN', 'image-animate-state', 0, -529.46, 62.62, '[64,64]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '/svg/cloud.svg', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '', '', '', '', '{"cursor":"pointer","fill":"transparent","lineWidth":1,"radius":4,"stroke":"#ffffff"}', 'DN', '{"offset":0,"position":"bottom","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (1727, 'node', '5GC System Architecture1', 'OMC', 'image-animate-state', 0, -527.746, -346.76, '[64,64]', '{"height":25,"img":"","offset":20,"show":false,"width":25}', '/svg/service_db.svg', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '', '', '', '', '{"cursor":"pointer","fill":"transparent","lineWidth":1,"radius":4,"stroke":"#783636"}', 'OMC', '{"offset":4,"position":"bottom","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (1728, 'node', '5GC System Architecture1', 'IMS', 'rect-animate-state', 23, 22.4671, -231.155, '[80,40]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '', '', '', '', '', '5GC', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"#f5222d","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#f1212c"}', 'IMS', '{"offset":0,"position":"center","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (1729, 'node', '5GC System Architecture1', 'NSSF', 'rect-animate-state', 22, -116.316, -335.56, '[80,40]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '', '', '', '', '', '5GC', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"#f5222d","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#f5222d"}', 'NSSF', '{"offset":0,"position":"center","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (1730, 'node', '5GC System Architecture1', 'UPF', 'rect-animate-state', 21, -268.005, -52.6272, '[80,40]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '', '', '', '', '', '5GC', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"#f5222d","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#f5222d"}', 'UPF', '{"offset":0,"position":"center","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (1731, 'node', '5GC System Architecture1', 'UE', 'image', 14, -532.589, -231.622, '[64,64]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '/svg/mobile.svg', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"transparent","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', 'UE', '{"offset":4,"position":"bottom","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (1732, 'node', '5GC System Architecture1', 'PCF', 'rect-animate-state', 20, -267.905, -152.894, '[80,40]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '', '', '', '', '', '5GC', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"#f5222d","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#f5222d"}', 'PCF', '{"offset":0,"position":"center","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (1733, 'node', '5GC System Architecture1', 'SMF', 'rect-animate-state', 19, -117.66, -53.1161, '[80,40]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '', '', '', '', '', '5GC', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"#f5222d","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#f0212c"}', 'SMF', '{"offset":0,"position":"center","style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (1734, 'node', '5GC System Architecture1', 'AMF', 'rect-animate-state', 18, -268.316, -235.06, '[80,40]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '', '', '', '', '', '5GC', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"#f5222d","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#f5222d"}', 'AMF', '{"offset":0,"position":"center","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (1735, 'node', '5GC System Architecture1', 'UDM', 'rect-animate-state', 17, 19.8172, -333.371, '[80,40]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '', '', '', '', '', '5GC', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"#f5222d","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#f5222d"}', 'UDM', '{"offset":0,"position":"center","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (1736, 'node', '5GC System Architecture1', 'AUSF', 'rect-animate-state', 16, -269.316, -335.56, '[80,40]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '', '', '', '', '', '5GC', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"#f5222d","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#f5222d"}', 'AUSF', '{"offset":0,"position":"center","style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (1737, 'node', '5GC System Architecture1', 'NRF', 'rect', 15, 26.4865, -150.732, '[80,40]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '', '', '', '', '', '5GC', '', '', '', '{"cursor":"pointer","fill":"#f5222d","lineWidth":1,"radius":4,"stroke":"#f5222d"}', 'NRF', '{"offset":0,"position":"center","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (1738, 'node', '5GC System Architecture1', 'LMF', 'rect', 14, -266.158, 48.8341, '[80,40]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '', '', '', '', '', '5GC', '', '', '', '{"cursor":"pointer","fill":"#f5222d","lineWidth":1,"radius":4,"stroke":"#f5222d"}', 'LMF', '{"offset":0,"position":"center","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (1739, 'node', '5GC System Architecture1', 'NEF', 'rect', 13, -120.613, -149.621, '[80,40]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '', '', '', '', '', '5GC', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"#f5222d","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#f5222d"}', 'NEF', '{"offset":0,"position":"center","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (1740, 'node', '5GC System Architecture1', 'MME', 'rect', 12, -118.002, -233.655, '[80,40]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '', '', '', '', '', '5GC', '', '', '', '{"cursor":"pointer","fill":"#f5222d","lineWidth":1,"radius":4,"stroke":"#f5222d"}', 'MME', '{"offset":0,"position":"center","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (1741, 'node', '5GC System Architecture1', 'N3IWF', 'rect', 11, 20.4198, -58.2659, '[80,40]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '', '', '', '', '', '5GC', '', '', '', '{"cursor":"pointer","fill":"#f5222d","lineWidth":1,"radius":4,"stroke":"#f5222d"}', 'N3IWF', '{"offset":0,"position":"center","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (1742, 'edge', '5GC System Architecture1', '5GC~1704764825481~Base', 'cubic-animate-line-dash', 0, 0, 0, '', '', '', '', '', 'Base', '5GC', '', '', '', '', '{"active":{"lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"lineWidth":1,"stroke":"rgb(245, 245, 245)"},"highlight":{"lineWidth":2,"stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"inactive":{"lineWidth":1,"stroke":"rgb(234, 234, 234)"},"lineWidth":1,"offset":20,"radius":2,"selected":{"lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', 'N2', '{"autoRotate":false,"position":"middle","refX":0,"refY":0,"style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (1743, 'edge', '5GC System Architecture1', 'UE~1704534736553~AMF', 'cubic-animate-line-dash', 0, 0, 0, '', '', '', '', '', 'UE', 'Base', '', '', '', '', '{"active":{"lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"lineWidth":1,"stroke":"rgb(245, 245, 245)"},"highlight":{"lineWidth":2,"stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"inactive":{"lineWidth":1,"stroke":"rgb(234, 234, 234)"},"lineWidth":1,"offset":20,"radius":2,"selected":{"lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', '', '{"autoRotate":false,"position":"middle","refX":0,"refY":0,"style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (1744, 'edge', '5GC System Architecture1', 'RAN~1704534829539~UPF', 'line-animate-state', 0, 0, 0, '', '', '', '', '', 'Base', 'UPF', '', '', '', '', '{"active":{"lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"lineWidth":1,"stroke":"rgb(245, 245, 245)"},"highlight":{"lineWidth":2,"stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"inactive":{"lineWidth":1,"stroke":"rgb(234, 234, 234)"},"lineWidth":1,"offset":20,"radius":2,"selected":{"lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', 'N3', '{"autoRotate":false,"position":"middle","refX":0,"refY":0,"style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (1745, 'edge', '5GC System Architecture1', 'DN~1704534869360~UPF', 'cubic-animate-line-dash', 0, 0, 0, '', '', '', '', '', 'DN', 'UPF', '', '', '', '', '{"active":{"lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"lineWidth":1,"stroke":"rgb(245, 245, 245)"},"highlight":{"lineWidth":2,"stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"inactive":{"lineWidth":1,"stroke":"rgb(234, 234, 234)"},"lineWidth":1,"offset":20,"radius":2,"selected":{"lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', 'N6', '{"autoRotate":false,"position":"middle","refX":0,"refY":0,"style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (1746, 'edge', '5GC System Architecture1', 'OMC~1704535021073~5GC', 'line-animate-state', 0, 0, 0, '', '', '', '', '', 'OMC', '5GC', '', '', '', '', '{"active":{"lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"lineWidth":1,"stroke":"rgb(245, 245, 245)"},"highlight":{"lineWidth":2,"stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"inactive":{"lineWidth":1,"stroke":"rgb(234, 234, 234)"},"lineWidth":1,"offset":20,"radius":2,"selected":{"lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', '', '{"autoRotate":false,"position":"middle","refX":0,"refY":0,"style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (1747, 'edge', '5GC System Architecture1', 'SMF~1704765447548~UPF', 'line', 0, 0, 0, '', '', '', '', '', 'SMF', 'UPF', '', '', '', '', '{"active":{"lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"lineWidth":1,"stroke":"rgb(245, 245, 245)"},"highlight":{"lineWidth":2,"stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"inactive":{"lineWidth":1,"stroke":"rgb(234, 234, 234)"},"lineWidth":1,"offset":20,"radius":2,"selected":{"lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', 'N4', '{"autoRotate":true,"position":"end","refX":-12,"refY":0,"style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (1748, 'combo', '5GC System Architecture1', '5GC', 'rect', 10, -121.415, -143.363, '[40,40]', '', '', '', '', '', '', '', '[40,45,40,45]', '', '[{"comboId":"5GC","depth":12,"id":"IMS","itemType":"node"},{"comboId":"5GC","depth":12,"id":"NSSF","itemType":"node"},{"comboId":"5GC","depth":12,"id":"UPF","itemType":"node"},{"comboId":"5GC","depth":12,"id":"PCF","itemType":"node"},{"comboId":"5GC","depth":12,"id":"SMF","itemType":"node"},{"comboId":"5GC","depth":12,"id":"AMF","itemType":"node"},{"comboId":"5GC","depth":12,"id":"UDM","itemType":"node"},{"comboId":"5GC","depth":12,"id":"AUSF","itemType":"node"},{"comboId":"5GC","depth":12,"id":"NRF","itemType":"node"},{"comboId":"5GC","depth":12,"id":"LMF","itemType":"node"},{"comboId":"5GC","depth":12,"id":"NEF","itemType":"node"},{"comboId":"5GC","depth":12,"id":"MME","itemType":"node"},{"comboId":"5GC","depth":12,"id":"N3IWF","itemType":"node"}]', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"grab","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(234, 234, 234)"},"fill":"#ffffff","fillOpacity":0.1,"height":425.39430000000004,"highlight":{"fill":"rgb(253, 253, 253)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(253, 253, 253)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"lineWidth":1,"r":212.69715000000002,"radius":2,"selected":{"fill":"rgb(253, 253, 253)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff","width":376.8029}', 'Core Network', '{"position":"top","refX":10,"refY":10,"style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (1869, 'node', '5GC System Architecture2', 'Base', 'image-animate-state', 0, -530.671, -66.6639, '[64,64]', '{"height":25,"img":"","offset":20,"show":false,"width":25}', '/svg/base.svg', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '', '', '', '', '{"cursor":"pointer","fill":"transparent","lineWidth":1,"radius":4,"stroke":"#ffffff"}', '(R)AN', '{"offset":4,"position":"bottom","style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (1870, 'node', '5GC System Architecture2', 'DN', 'image-animate-state', 0, -544.46, 45.62, '[60,60]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '/svg/cloud6.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '', '', '', '', '{"cursor":"pointer","fill":"transparent","lineWidth":1,"radius":4,"stroke":"#ffffff"}', 'DN', '{"offset":0,"position":"bottom","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (1871, 'node', '5GC System Architecture2', 'OMC', 'image-animate-state', 0, -531.746, -291.76, '[64,64]', '{"height":25,"img":"","offset":20,"show":false,"width":25}', '/svg/omc6.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '', '', '', '', '{"cursor":"pointer","fill":"transparent","lineWidth":1,"radius":4,"stroke":"#783636"}', 'OMC', '{"offset":4,"position":"bottom","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (1872, 'node', '5GC System Architecture2', 'IMS', 'image-animate-state', 23, 32.8038, -208.015, '[60,50]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '/svg/ims6.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '5GC', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"transparent","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#f1212c"}', 'IMS', '{"offset":0,"position":"bottom","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (1873, 'node', '5GC System Architecture2', 'NSSF', 'image-animate-state', 22, -103.637, -294.34, '[60,50]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '/svg/nssf6.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '5GC', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"transparent","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#f5222d"}', 'NSSF', '{"offset":0,"position":"bottom","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (1874, 'node', '5GC System Architecture2', 'UPF', 'image-animate-state', 21, -251.745, -30.487, '[60,50]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '/svg/upf6.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '5GC', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"transparent","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#f5222d"}', 'UPF', '{"offset":0,"position":"bottom","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (1875, 'node', '5GC System Architecture2', 'UE', 'image', 14, -535.589, -178.622, '[64,64]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '/svg/mobile.svg', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"transparent","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', 'UE', '{"offset":4,"position":"bottom","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (1876, 'node', '5GC System Architecture2', 'PCF', 'image-animate-state', 20, -251.569, -121.754, '[60,50]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '/svg/pcf6.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '5GC', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"transparent","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#f5222d"}', 'PCF', '{"offset":0,"position":"bottom","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (1877, 'node', '5GC System Architecture2', 'SMF', 'image-animate-state', 19, -102.324, -30.9759, '[60,50]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '/svg/smf6.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '5GC', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"transparent","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#f0212c"}', 'SMF', '{"offset":0,"position":"bottom","style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (1878, 'node', '5GC System Architecture2', 'AMF', 'image-animate-state', 18, -252.824, -212.92, '[60,50]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '/svg/amf6.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '5GC', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"transparent","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#f5222d"}', 'AMF', '{"offset":0,"position":"bottom","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (1879, 'node', '5GC System Architecture2', 'UDM', 'image-animate-state', 17, 30.371, -283.065, '[60,50]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '/svg/udm6.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '5GC', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"transparent","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#f5222d"}', 'UDM', '{"offset":0,"position":"bottom","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (1880, 'node', '5GC System Architecture2', 'AUSF', 'image-animate-state', 16, -248.56, -291.872, '[60,50]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '/svg/ausf6.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '5GC', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"transparent","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#f5222d"}', 'AUSF', '{"offset":0,"position":"bottom","style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (1881, 'node', '5GC System Architecture2', 'NRF', 'image-animate-state', 15, 31.0121, -130.814, '[60,50]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '/svg/nrf6.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '5GC', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"transparent","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#f5222d"}', 'NRF', '{"offset":0,"position":"bottom","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (1882, 'node', '5GC System Architecture2', 'LMF', 'image-animate-state', 14, -247.573, 58.3507, '[60,50]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '/svg/lmf.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '5GC', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"transparent","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#f5222d"}', 'LMF', '{"offset":0,"position":"bottom","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (1883, 'node', '5GC System Architecture2', 'NEF', 'image-animate-state', 13, -102.277, -127.481, '[60,50]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '/svg/nef6.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '5GC', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"transparent","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#f5222d"}', 'NEF', '{"offset":0,"position":"bottom","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (1884, 'node', '5GC System Architecture2', 'MME', 'image-animate-state', 12, -102.666, -211.515, '[60,50]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '/svg/mme6.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '5GC', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"transparent","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#f5222d"}', 'MME', '{"offset":0,"position":"bottom","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (1885, 'node', '5GC System Architecture2', 'N3IWF', 'image-animate-state', 11, 32.0232, -36.1257, '[60,50]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '/svg/n3iwf61.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '5GC', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"transparent","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#f5222d"}', 'N3IWF', '{"offset":0,"position":"bottom","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (1886, 'edge', '5GC System Architecture2', 'RAN~1704534829539~UPF', 'line-animate-state', 0, 0, 0, '', '', '', '', '', 'Base', 'UPF', '', '', '', '', '{"active":{"lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"lineWidth":1,"stroke":"rgb(245, 245, 245)"},"highlight":{"lineWidth":2,"stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"inactive":{"lineWidth":1,"stroke":"rgb(234, 234, 234)"},"lineWidth":1,"offset":20,"radius":2,"selected":{"lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', 'N3', '{"autoRotate":false,"position":"middle","refX":0,"refY":0,"style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (1887, 'edge', '5GC System Architecture2', 'DN~1704534869360~UPF', 'cubic-animate-line-dash', 0, 0, 0, '', '', '', '', '', 'DN', 'UPF', '', '', '', '', '{"active":{"lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"lineWidth":1,"stroke":"rgb(245, 245, 245)"},"highlight":{"lineWidth":2,"stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"inactive":{"lineWidth":1,"stroke":"rgb(234, 234, 234)"},"lineWidth":1,"offset":20,"radius":2,"selected":{"lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', 'N6', '{"autoRotate":false,"position":"middle","refX":0,"refY":0,"style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (1888, 'edge', '5GC System Architecture2', 'OMC~1704535021073~5GC', 'line-animate-state', 0, 0, 0, '', '', '', '', '', 'OMC', '5GC', '', '', '', '', '{"active":{"lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"lineWidth":1,"stroke":"rgb(245, 245, 245)"},"highlight":{"lineWidth":2,"stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"inactive":{"lineWidth":1,"stroke":"rgb(234, 234, 234)"},"lineWidth":1,"offset":20,"radius":2,"selected":{"lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', '', '{"autoRotate":false,"position":"middle","refX":0,"refY":0,"style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (1889, 'edge', '5GC System Architecture2', 'SMF~1704765447548~UPF', 'line', 0, 0, 0, '', '', '', '', '', 'SMF', 'UPF', '', '', '', '', '{"active":{"lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"lineWidth":1,"stroke":"rgb(245, 245, 245)"},"highlight":{"lineWidth":2,"stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"inactive":{"lineWidth":1,"stroke":"rgb(234, 234, 234)"},"lineWidth":1,"offset":20,"radius":2,"selected":{"lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', 'N4', '{"autoRotate":true,"position":"end","refX":-12,"refY":0,"style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (1890, 'edge', '5GC System Architecture2', '5GC~1704764825481~Base', 'cubic-animate-line-dash', 0, 0, 0, '', '', '', '', '', 'Base', '5GC', '', '', '', '', '{"active":{"lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"lineWidth":1,"stroke":"rgb(245, 245, 245)"},"highlight":{"lineWidth":2,"stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"inactive":{"lineWidth":1,"stroke":"rgb(234, 234, 234)"},"lineWidth":1,"offset":20,"radius":2,"selected":{"lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', 'N2', '{"autoRotate":false,"position":"middle","refX":0,"refY":0,"style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (1891, 'edge', '5GC System Architecture2', 'UE~1704534736553~AMF', 'cubic-animate-line-dash', 0, 0, 0, '', '', '', '', '', 'UE', 'Base', '', '', '', '', '{"active":{"lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"lineWidth":1,"stroke":"rgb(245, 245, 245)"},"highlight":{"lineWidth":2,"stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"inactive":{"lineWidth":1,"stroke":"rgb(234, 234, 234)"},"lineWidth":1,"offset":20,"radius":2,"selected":{"lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', '', '{"autoRotate":false,"position":"middle","refX":0,"refY":0,"style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (1892, 'combo', '5GC System Architecture2', '5GC', 'rect', 10, -110.01, -117.995, '[40,40]', '', '', '', '', '', '', '', '[40,45,45,40]', '', '[{"comboId":"5GC","depth":12,"id":"IMS","itemType":"node"},{"comboId":"5GC","depth":12,"id":"NSSF","itemType":"node"},{"comboId":"5GC","depth":12,"id":"UPF","itemType":"node"},{"comboId":"5GC","depth":12,"id":"PCF","itemType":"node"},{"comboId":"5GC","depth":12,"id":"SMF","itemType":"node"},{"comboId":"5GC","depth":12,"id":"AMF","itemType":"node"},{"comboId":"5GC","depth":12,"id":"UDM","itemType":"node"},{"comboId":"5GC","depth":12,"id":"AUSF","itemType":"node"},{"comboId":"5GC","depth":12,"id":"NRF","itemType":"node"},{"comboId":"5GC","depth":12,"id":"LMF","itemType":"node"},{"comboId":"5GC","depth":12,"id":"NEF","itemType":"node"},{"comboId":"5GC","depth":12,"id":"MME","itemType":"node"},{"comboId":"5GC","depth":12,"id":"N3IWF","itemType":"node"}]', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"grab","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(234, 234, 234)"},"fill":"#318c7d","fillOpacity":0.1,"height":402.691157,"highlight":{"fill":"rgb(253, 253, 253)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(253, 253, 253)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"lineWidth":1,"r":201.3455785,"radius":2,"selected":{"fill":"rgb(253, 253, 253)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff","width":345.628003}', 'Core Network', '{"position":"top","refX":10,"refY":10,"style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (2304, 'node', '5GC System Architecture3', 'Base', 'image-animate-state', 0, -371.671, -129.664, '[64,64]', '{"height":25,"img":"","offset":20,"show":false,"width":25}', '/svg/base.svg', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '', '', '', '', '{"cursor":"pointer","fill":"transparent","lineWidth":1,"radius":4,"stroke":"#ffffff"}', '(R)AN', '{"offset":-4,"position":"bottom","style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (2305, 'node', '5GC System Architecture3', 'DN', 'image-animate-state', 0, 325.54, -71.38, '[80,80]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '/svg/earth3d-1.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '', '', '', '', '{"cursor":"pointer","fill":"transparent","lineWidth":1,"radius":4,"stroke":"#ffffff"}', 'DN', '{"offset":0,"position":"bottom","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (2306, 'node', '5GC System Architecture3', 'OMC', 'image-animate-state', 0, 327.254, -266.76, '[64,64]', '{"height":25,"img":"","offset":20,"show":false,"width":25}', '/svg/omc6.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '', '', '', '', '{"cursor":"pointer","fill":"transparent","lineWidth":1,"radius":4,"stroke":"#783636"}', 'OMC', '{"offset":4,"position":"bottom","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (2307, 'node', '5GC System Architecture3', 'IMS', 'image-animate-state', 24, 40.3237, -119.48, '[60,50]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '/svg/ims6.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '5GC', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"transparent","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#f1212c"}', 'IMS', '{"offset":0,"position":"bottom","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (2308, 'node', '5GC System Architecture3', 'NSSF', 'image-animate-state', 23, 49.2396, -291.854, '[60,50]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '/svg/nssf6.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '5GC', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"transparent","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#f5222d"}', 'NSSF', '{"offset":0,"position":"bottom","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (2309, 'node', '5GC System Architecture3', 'UPF', 'image-animate-state', 22, -31.0923, -18.3086, '[60,50]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '/svg/upf6.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '5GC', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"transparent","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#f5222d"}', 'UPF', '{"offset":0,"position":"bottom","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (2310, 'node', '5GC System Architecture3', 'UE', 'image', 14, -366.589, 0.378, '[64,64]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '/svg/mobile.svg', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"transparent","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', 'UE', '{"offset":-10,"position":"bottom","style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (2311, 'node', '5GC System Architecture3', 'PCF', 'image-animate-state', 21, 114.148, -293.478, '[60,50]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '/svg/pcf6.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '5GC', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"transparent","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#f5222d"}', 'PCF', '{"offset":0,"position":"bottom","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (2312, 'node', '5GC System Architecture3', 'SMF', 'image-animate-state', 20, -28.5624, -116.024, '[60,50]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '/svg/smf6.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '5GC', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"transparent","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#f0212c"}', 'SMF', '{"offset":0,"position":"bottom","style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (2313, 'node', '5GC System Architecture3', 'AMF', 'image-animate-state', 19, -166.037, -115.898, '[60,50]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '/svg/amf6.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '5GC', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"transparent","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#f5222d"}', 'AMF', '{"offset":0,"position":"bottom","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (2314, 'node', '5GC System Architecture3', 'UDM', 'image-animate-state', 18, -21.8787, -293.295, '[60,50]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '/svg/udm6.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '5GC', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"transparent","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#f5222d"}', 'UDM', '{"offset":0,"position":"bottom","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (2315, 'node', '5GC System Architecture3', 'AUSF', 'image-animate-state', 17, -89.9143, -291.872, '[60,50]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '/svg/ausf6.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '5GC', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"transparent","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#f5222d"}', 'AUSF', '{"offset":0,"position":"bottom","style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (2316, 'node', '5GC System Architecture3', 'NRF', 'image-animate-state', 16, 107.349, -117.955, '[60,50]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '/svg/nrf6.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '5GC', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"transparent","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#f5222d"}', 'NRF', '{"offset":0,"position":"bottom","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (2317, 'node', '5GC System Architecture3', 'LMF', 'image-animate-state', 15, 178.417, -292.559, '[60,50]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '/svg/lmf.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '5GC', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"transparent","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#f5222d"}', 'LMF', '{"offset":0,"position":"bottom","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (2318, 'node', '5GC System Architecture3', 'NEF', 'image-animate-state', 14, -89.82, -113.764, '[60,50]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '/svg/nef6.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '5GC', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"transparent","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#f5222d"}', 'NEF', '{"offset":0,"position":"bottom","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (2319, 'node', '5GC System Architecture3', 'MME', 'image-animate-state', 13, -169.465, -291.82, '[60,50]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '/svg/mme6.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '5GC', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"transparent","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#f5222d"}', 'MME', '{"offset":0,"position":"bottom","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (2320, 'node', '5GC System Architecture3', 'N3IWF', 'image-animate-state', 12, 178.037, -121.058, '[60,50]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '/svg/n3iwf6.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '5GC', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"transparent","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#f5222d"}', 'N3IWF', '{"offset":0,"position":"bottom","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (2321, 'node', '5GC System Architecture3', 'lan', 'image-animate-state', 11, 10, -193, '[300,30]', '{"height":25,"img":"","offset":20,"show":false,"width":25}', '/svg/router3d-3.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '5GC', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"transparent","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#fafafa"}', 'Router', '{"offset":0,"position":"center","style":{"fill":"#2e0b7f","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (2322, 'edge', '5GC System Architecture3', 'RAN~1704534829539~UPF', 'cubic-animate-line-dash', 0, 0, 0, '', '', '', '', '', 'Base', 'UPF', '', '', '', '', '{"active":{"lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"lineWidth":1,"stroke":"rgb(245, 245, 245)"},"highlight":{"lineWidth":2,"stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"inactive":{"lineWidth":1,"stroke":"rgb(234, 234, 234)"},"lineWidth":4,"offset":20,"radius":2,"selected":{"lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', 'N3', '{"autoRotate":false,"position":"middle","refX":0,"refY":-15,"style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (2323, 'edge', '5GC System Architecture3', 'DN~1704534869360~UPF', 'cubic-animate-line-dash', 0, 0, 0, '', '', '', '', '', 'UPF', 'DN', '', '', '', '', '{"active":{"lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"lineWidth":1,"stroke":"rgb(245, 245, 245)"},"highlight":{"lineWidth":2,"stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"inactive":{"lineWidth":1,"stroke":"rgb(234, 234, 234)"},"lineWidth":4,"offset":20,"radius":2,"selected":{"lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', 'N6', '{"autoRotate":false,"position":"middle","refX":0,"refY":-8,"style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (2324, 'edge', '5GC System Architecture3', 'OMC~1704535021073~5GC', 'line-animate-state', 0, 0, 0, '', '', '', '', '', 'OMC', '5GC', '', '', '', '', '{"active":{"lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"lineWidth":1,"stroke":"rgb(245, 245, 245)"},"highlight":{"lineWidth":2,"stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"inactive":{"lineWidth":1,"stroke":"rgb(234, 234, 234)"},"lineWidth":2,"offset":20,"radius":2,"selected":{"lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', '', '{"autoRotate":false,"position":"middle","refX":0,"refY":0,"style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (2325, 'edge', '5GC System Architecture3', 'SMF~1704765447548~UPF', 'line', 0, 0, 0, '', '', '', '', '', 'SMF', 'UPF', '', '', '', '', '{"active":{"lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"lineWidth":1,"stroke":"rgb(245, 245, 245)"},"highlight":{"lineWidth":2,"stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"inactive":{"lineWidth":1,"stroke":"rgb(234, 234, 234)"},"lineWidth":2,"offset":20,"radius":2,"selected":{"lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', 'N4', '{"autoRotate":false,"position":"middle","refX":5,"refY":-4,"style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (2326, 'edge', '5GC System Architecture3', '5GC~1704764825481~Base', 'cubic-animate-circle-move', 0, 0, 0, '', '', '', '', '', 'Base', 'AMF', '', '', '', '', '{"active":{"lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"lineWidth":1,"stroke":"rgb(245, 245, 245)"},"highlight":{"lineWidth":2,"stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"inactive":{"lineWidth":1,"stroke":"rgb(234, 234, 234)"},"lineWidth":2,"offset":20,"radius":2,"selected":{"lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', 'N2', '{"autoRotate":false,"position":"end","refX":-10,"refY":6,"style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (2327, 'edge', '5GC System Architecture3', 'UE~1704534736553~AMF', 'cubic-animate-circle-move', 0, 0, 0, '', '', '', '', '', 'UE', 'Base', '', '', '', '', '{"active":{"lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"lineWidth":1,"stroke":"rgb(245, 245, 245)"},"highlight":{"lineWidth":2,"stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"inactive":{"lineWidth":1,"stroke":"rgb(234, 234, 234)"},"lineWidth":2,"offset":20,"radius":2,"selected":{"lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', '', '{"autoRotate":false,"position":"middle","refX":0,"refY":0,"style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (2328, 'edge', '5GC System Architecture3', 'IMS~1706170983368~lan', 'line', 0, 0, 0, '', '', '', '', '', 'IMS', 'lan', '', '', '', '', '{"active":{"lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"lineWidth":1,"stroke":"rgb(245, 245, 245)"},"highlight":{"lineWidth":2,"stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"inactive":{"lineWidth":1,"stroke":"rgb(234, 234, 234)"},"lineWidth":2,"offset":20,"radius":2,"selected":{"lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', '', '{"autoRotate":false,"position":"middle","refX":0,"refY":0,"style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (2329, 'edge', '5GC System Architecture3', 'NSSF~1706171150530~lan', 'line', 0, 0, 0, '', '', '', '', '', 'NSSF', 'lan', '', '', '', '', '{"active":{"lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"lineWidth":1,"stroke":"rgb(245, 245, 245)"},"highlight":{"lineWidth":2,"stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"inactive":{"lineWidth":1,"stroke":"rgb(234, 234, 234)"},"lineWidth":2,"offset":20,"radius":2,"selected":{"lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', '', '{"autoRotate":false,"position":"middle","refX":0,"refY":0,"style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (2330, 'edge', '5GC System Architecture3', 'PCF~1706171215279~lan', 'line', 0, 0, 0, '', '', '', '', '', 'PCF', 'lan', '', '', '', '', '{"active":{"lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"lineWidth":1,"stroke":"rgb(245, 245, 245)"},"highlight":{"lineWidth":2,"stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"inactive":{"lineWidth":1,"stroke":"rgb(234, 234, 234)"},"lineWidth":2,"offset":20,"radius":2,"selected":{"lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', '', '{"autoRotate":false,"position":"middle","refX":0,"refY":0,"style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (2331, 'edge', '5GC System Architecture3', 'AMF~1706171248818~lan', 'line', 0, 0, 0, '', '', '', '', '', 'AMF', 'lan', '', '', '', '', '{"active":{"lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"lineWidth":1,"stroke":"rgb(245, 245, 245)"},"highlight":{"lineWidth":2,"stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"inactive":{"lineWidth":1,"stroke":"rgb(234, 234, 234)"},"lineWidth":2,"offset":20,"radius":2,"selected":{"lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', '', '{"autoRotate":false,"position":"middle","refX":0,"refY":0,"style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (2332, 'edge', '5GC System Architecture3', 'AUSF~1706171282723~lan', 'line', 0, 0, 0, '', '', '', '', '', 'AUSF', 'lan', '', '', '', '', '{"active":{"lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"lineWidth":1,"stroke":"rgb(245, 245, 245)"},"highlight":{"lineWidth":2,"stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"inactive":{"lineWidth":1,"stroke":"rgb(234, 234, 234)"},"lineWidth":2,"offset":20,"radius":2,"selected":{"lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', '', '{"autoRotate":false,"position":"middle","refX":0,"refY":0,"style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (2333, 'edge', '5GC System Architecture3', 'MME~1706173575994~lan', 'line', 0, 0, 0, '', '', '', '', '', 'MME', 'lan', '', '', '', '', '{"active":{"lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"lineWidth":1,"stroke":"rgb(245, 245, 245)"},"highlight":{"lineWidth":2,"stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"inactive":{"lineWidth":1,"stroke":"rgb(234, 234, 234)"},"lineWidth":2,"offset":20,"radius":2,"selected":{"lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', '', '{"autoRotate":false,"position":"middle","refX":0,"refY":0,"style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (2334, 'edge', '5GC System Architecture3', 'NEF~1706173617894~lan', 'line', 0, 0, 0, '', '', '', '', '', 'NEF', 'lan', '', '', '', '', '{"active":{"lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"lineWidth":1,"stroke":"rgb(245, 245, 245)"},"highlight":{"lineWidth":2,"stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"inactive":{"lineWidth":1,"stroke":"rgb(234, 234, 234)"},"lineWidth":2,"offset":20,"radius":2,"selected":{"lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', '', '{"autoRotate":false,"position":"middle","refX":0,"refY":0,"style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (2335, 'edge', '5GC System Architecture3', 'SMF~1706173671962~lan', 'line', 0, 0, 0, '', '', '', '', '', 'SMF', 'lan', '', '', '', '', '{"active":{"lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"lineWidth":1,"stroke":"rgb(245, 245, 245)"},"highlight":{"lineWidth":2,"stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"inactive":{"lineWidth":1,"stroke":"rgb(234, 234, 234)"},"lineWidth":2,"offset":20,"radius":2,"selected":{"lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', '', '{"autoRotate":false,"position":"middle","refX":0,"refY":0,"style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (2336, 'edge', '5GC System Architecture3', 'UDM~1706173695080~lan', 'line', 0, 0, 0, '', '', '', '', '', 'UDM', 'lan', '', '', '', '', '{"active":{"lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"lineWidth":1,"stroke":"rgb(245, 245, 245)"},"highlight":{"lineWidth":2,"stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"inactive":{"lineWidth":1,"stroke":"rgb(234, 234, 234)"},"lineWidth":2,"offset":20,"radius":2,"selected":{"lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', '', '{"autoRotate":false,"position":"middle","refX":0,"refY":0,"style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (2337, 'edge', '5GC System Architecture3', 'NRF~1706173798165~lan', 'line', 0, 0, 0, '', '', '', '', '', 'NRF', 'lan', '', '', '', '', '{"active":{"lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"lineWidth":1,"stroke":"rgb(245, 245, 245)"},"highlight":{"lineWidth":2,"stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"inactive":{"lineWidth":1,"stroke":"rgb(234, 234, 234)"},"lineWidth":2,"offset":20,"radius":2,"selected":{"lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', '', '{"autoRotate":false,"position":"middle","refX":0,"refY":0,"style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (2338, 'edge', '5GC System Architecture3', 'N3IWF~1706173823374~lan', 'line', 0, 0, 0, '', '', '', '', '', 'N3IWF', 'lan', '', '', '', '', '{"active":{"lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"lineWidth":1,"stroke":"rgb(245, 245, 245)"},"highlight":{"lineWidth":2,"stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"inactive":{"lineWidth":1,"stroke":"rgb(234, 234, 234)"},"lineWidth":2,"offset":20,"radius":2,"selected":{"lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', '', '{"autoRotate":false,"position":"middle","refX":0,"refY":0,"style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (2339, 'edge', '5GC System Architecture3', 'LMF~1706173845506~lan', 'line', 0, 0, 0, '', '', '', '', '', 'LMF', 'lan', '', '', '', '', '{"active":{"lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"lineWidth":1,"stroke":"rgb(245, 245, 245)"},"highlight":{"lineWidth":2,"stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"inactive":{"lineWidth":1,"stroke":"rgb(234, 234, 234)"},"lineWidth":2,"offset":20,"radius":2,"selected":{"lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', '', '{"autoRotate":false,"position":"middle","refX":0,"refY":0,"style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (2340, 'edge', '5GC System Architecture3', 'Base~1706176128676~MME', 'cubic-animate-circle-move', 0, 0, 0, '', '', '', '', '', 'Base', 'MME', '', '', '', '', '{"active":{"lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"lineWidth":1,"stroke":"rgb(245, 245, 245)"},"highlight":{"lineWidth":2,"stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"inactive":{"lineWidth":1,"stroke":"rgb(234, 234, 234)"},"lineWidth":2,"offset":20,"radius":2,"selected":{"lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', 'S1-MME', '{"autoRotate":false,"position":"end","refX":-15,"refY":-35,"style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (2341, 'combo', '5GC System Architecture3', '5GC', 'rect', 10, 4.47597, -155.893, '[40,40]', '', '', '', '', '', '', '', '[40,40,40,40]', '', '[{"comboId":"5GC","depth":12,"id":"IMS","itemType":"node"},{"comboId":"5GC","depth":12,"id":"NSSF","itemType":"node"},{"comboId":"5GC","depth":12,"id":"UPF","itemType":"node"},{"comboId":"5GC","depth":12,"id":"PCF","itemType":"node"},{"comboId":"5GC","depth":12,"id":"SMF","itemType":"node"},{"comboId":"5GC","depth":12,"id":"AMF","itemType":"node"},{"comboId":"5GC","depth":12,"id":"UDM","itemType":"node"},{"comboId":"5GC","depth":12,"id":"AUSF","itemType":"node"},{"comboId":"5GC","depth":12,"id":"NRF","itemType":"node"},{"comboId":"5GC","depth":12,"id":"LMF","itemType":"node"},{"comboId":"5GC","depth":12,"id":"NEF","itemType":"node"},{"comboId":"5GC","depth":12,"id":"MME","itemType":"node"},{"comboId":"5GC","depth":12,"id":"N3IWF","itemType":"node"},{"comboId":"5GC","depth":12,"id":"lan","itemType":"node"}]', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"grab","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(234, 234, 234)"},"fill":"#318c7d","fillOpacity":0.1,"height":325.169599,"highlight":{"fill":"rgb(253, 253, 253)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(253, 253, 253)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"lineWidth":1,"r":203.94142,"radius":2,"selected":{"fill":"rgb(253, 253, 253)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff","width":407.88284}', 'Core Network', '{"position":"top","refX":10,"refY":10,"style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (4366, 'node', '5GC System Architecture', 'Base', 'image-animate-state', 0, -110, -30, '[60,50]', '{"height":25,"img":"","offset":20,"show":false,"width":25}', '/svg/base.svg', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '', '', '', '', '{"cursor":"pointer","fill":"transparent","lineWidth":1,"radius":4,"stroke":"#ffffff"}', '(R)AN', '{"offset":-5,"position":"bottom","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (4367, 'node', '5GC System Architecture', 'DN', 'image-animate-state', 0, 240, -30, '[60,60]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '/svg/earth3d-1.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '', '', '', '', '{"cursor":"pointer","fill":"transparent","lineWidth":1,"radius":4,"stroke":"#ffffff"}', 'DN', '{"offset":-5,"position":"bottom","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (4368, 'node', '5GC System Architecture', 'OMC', 'image-animate-state', 0, 238.846, -329.519, '[60,60]', '{"height":25,"img":"","offset":20,"show":false,"width":25}', '/svg/omc62.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '', '', '', '', '{"cursor":"pointer","fill":"transparent","lineWidth":1,"radius":4,"stroke":"#783636"}', 'OMC', '{"offset":-15,"position":"bottom","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (4369, 'node', '5GC System Architecture', 'NR', 'image', 0, -153, -27, '[30,30]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '/svg/lightning1.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '', '', '', '', '{"cursor":"pointer","fill":"transparent","lineWidth":1,"radius":4,"stroke":"#ffffff"}', '', '{"offset":0,"position":"center","style":{"fill":"#000000","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (4370, 'node', '5GC System Architecture', 'IMS', 'image-animate-state', 11, 170, -130, '[60,50]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '/svg/ims62.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"transparent","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#f1212c"}', 'IMS', '{"offset":-15,"position":"bottom","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (4371, 'node', '5GC System Architecture', 'SMSC', 'image-animate-state', 11, 238.918, -139.149, '[50,40]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '/svg/smsc.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"transparent","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', 'SMSC', '{"offset":0,"position":"bottom","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (4372, 'node', '5GC System Architecture', 'NSSF', 'image-animate-state', 12, -110, -260, '[60,50]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '/svg/nssf62.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"transparent","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#f5222d"}', 'NSSF', '{"offset":-15,"position":"bottom","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (4373, 'node', '5GC System Architecture', 'UPF', 'image-animate-state', 13, 30, -30, '[60,50]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '/svg/upf6.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"transparent","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#f5222d"}', 'UPF', '{"offset":-5,"position":"bottom","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (4374, 'node', '5GC System Architecture', 'PCF', 'image-animate-state', 14, 100, -260, '[60,50]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '/svg/pcf62.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"transparent","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#f5222d"}', 'PCF', '{"offset":-15,"position":"bottom","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (4375, 'node', '5GC System Architecture', 'UE', 'image', 14, -201.589, -29.622, '[64,64]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '/svg/mobile.svg', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"transparent","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', 'UE', '{"offset":-10,"position":"bottom","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (4376, 'node', '5GC System Architecture', 'SMF', 'image-animate-state', 15, 30, -130, '[60,50]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '/svg/smf62.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"transparent","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#f0212c"}', 'SMF', '{"offset":-15,"position":"bottom","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (4377, 'node', '5GC System Architecture', 'AMF', 'image-animate-state', 16, -110, -130, '[60,50]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '/svg/amf62.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"transparent","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#f5222d"}', 'AMF', '{"offset":-15,"position":"bottom","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (4378, 'node', '5GC System Architecture', 'AUSF', 'image-animate-state', 16, -180, -260, '[60,50]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '/svg/ausf62.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"transparent","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', 'AUSF', '{"offset":-15,"position":"bottom","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (4379, 'node', '5GC System Architecture', 'UDM', 'image-animate-state', 17, -40, -260, '[60,50]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '/svg/udm62.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"transparent","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#f5222d"}', 'UDM', '{"offset":-15,"position":"bottom","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (4380, 'node', '5GC System Architecture', 'NRF', 'image-animate-state', 19, 100, -130, '[60,50]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '/svg/nrf62.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"transparent","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#f5222d"}', 'NRF', '{"offset":-15,"position":"bottom","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (4381, 'node', '5GC System Architecture', 'LMF', 'image-animate-state', 20, 170, -260, '[60,50]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '/svg/lmf62.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"transparent","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#f5222d"}', 'LMF', '{"offset":-15,"position":"bottom","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (4382, 'node', '5GC System Architecture', 'NEF', 'image-animate-state', 21, 30, -260, '[60,50]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '/svg/nef62.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"transparent","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#f5222d"}', 'NEF', '{"offset":-15,"position":"bottom","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (4383, 'node', '5GC System Architecture', 'MME', 'image-animate-state', 22, -180, -130, '[60,50]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '/svg/mme62.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"transparent","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#f5222d"}', 'MME', '{"offset":-15,"position":"bottom","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (4384, 'node', '5GC System Architecture', 'N3IWF', 'image-animate-state', 23, -40, -130, '[60,50]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '/svg/n3iwf62.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"transparent","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#f5222d"}', 'N3IWF', '{"offset":-15,"position":"bottom","style":{"fill":"#ffffff","fontSize":14,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (4385, 'node', '5GC System Architecture', 'lan7', 'image', 24, 238.892, -195.039, '[70,10]', '{"height":25,"img":"","offset":20,"show":false,"width":25}', '/svg/lan2.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '', '', '', '', '{"cursor":"pointer","fill":"transparent","lineWidth":1,"radius":4,"stroke":"#ffffff"}', 'LAN7', '{"offset":0,"position":"center","style":{"fill":"#ffffff","fontSize":10,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (4386, 'node', '5GC System Architecture', 'lan1', 'image', 24, -180, -195, '[70,10]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '/svg/lan2.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '', '', '', '', '{"cursor":"pointer","fill":"transparent","lineWidth":1,"radius":4,"stroke":"#ffffff"}', 'LAN1', '{"offset":0,"position":"center","style":{"fill":"#f6f4f4","fontSize":10,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (4387, 'node', '5GC System Architecture', 'lan2', 'image', 24, -110, -195, '[70,10]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '/svg/lan2.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"transparent","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', 'LAN2', '{"offset":0,"position":"center","style":{"fill":"#f8f7f7","fontSize":10,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (4388, 'node', '5GC System Architecture', 'lan3', 'image', 24, -40, -195, '[70,10]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '/svg/lan2.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '', '', '', '', '{"cursor":"pointer","fill":"transparent","lineWidth":1,"radius":4,"stroke":"#ffffff"}', 'LAN3', '{"offset":0,"position":"center","style":{"fill":"#ffffff","fontSize":10,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (4389, 'node', '5GC System Architecture', 'lan4', 'image', 24, 30, -195, '[70,10]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '/svg/lan2.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '', '', '', '', '{"cursor":"pointer","fill":"transparent","lineWidth":1,"radius":4,"stroke":"#ffffff"}', 'LAN4', '{"offset":0,"position":"center","style":{"fill":"#ffffff","fontSize":10,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (4390, 'node', '5GC System Architecture', 'lan5', 'image', 24, 100, -195, '[70,10]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '/svg/lan2.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '', '', '', '', '{"cursor":"pointer","fill":"transparent","lineWidth":1,"radius":4,"stroke":"#ffffff"}', 'LAN5', '{"offset":0,"position":"center","style":{"fill":"#ffffff","fontSize":10,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (4391, 'node', '5GC System Architecture', 'lan6', 'image', 24, 170, -195, '[70,10]', '{"height":25,"img":"","offset":20,"show":false,"width":25}', '/svg/lan2.png', '{"height":0,"show":false,"type":"circle","width":0}', '', '', '', '', '', '', '', '{"cursor":"pointer","fill":"transparent","lineWidth":1,"radius":4,"stroke":"#ffffff"}', 'LAN6', '{"offset":0,"position":"center","style":{"fill":"#ffffff","fontSize":10,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (4392, 'node', '5GC System Architecture', 'LAN', 'rect', 30, 30.0301, -195.517, '[500,10]', '{"height":25,"img":"/svg/service.svg","offset":20,"show":false,"width":25}', '', '', '', '', '', '', '', '', '', '{"active":{"fill":"rgb(247, 250, 255)","lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"fill":"rgb(250, 250, 250)","lineWidth":1,"stroke":"rgb(224, 224, 224)"},"fill":"#87cefa","highlight":{"fill":"rgb(223, 234, 255)","lineWidth":2,"stroke":"#4572d9","text-shape":{"fontWeight":500}},"inactive":{"fill":"rgb(247, 250, 255)","lineWidth":1,"stroke":"rgb(191, 213, 255)"},"lineWidth":1,"radius":4,"selected":{"fill":"rgb(255, 255, 255)","lineWidth":4,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#87cefa"}', '', '{"offset":0,"position":"center","style":{"fill":"#000000","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (4393, 'edge', '5GC System Architecture', 'RAN~1704534829539~UPF', 'line-animate-state', 0, 0, 0, '', '', '', '', '', 'Base', 'UPF', '', '', '', '', '{"active":{"lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"lineWidth":1,"stroke":"rgb(245, 245, 245)"},"highlight":{"lineWidth":2,"stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"inactive":{"lineWidth":1,"stroke":"rgb(234, 234, 234)"},"lineWidth":5,"offset":20,"radius":2,"selected":{"lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#7b68ee"}', 'N3', '{"autoRotate":false,"position":"middle","refX":0,"refY":-10,"style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (4394, 'edge', '5GC System Architecture', 'N3IWF~1706496082968~lan6', 'polyline', 0, 0, 0, '', '', '', '', '', 'N3IWF', 'lan3', '', '', '', '', '{"active":{"lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"lineWidth":1,"stroke":"rgb(245, 245, 245)"},"highlight":{"lineWidth":2,"stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"inactive":{"lineWidth":1,"stroke":"rgb(234, 234, 234)"},"lineWidth":2,"offset":20,"radius":2,"selected":{"lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', '', '{"autoRotate":false,"position":"middle","refX":0,"refY":0,"style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (4395, 'edge', '5GC System Architecture', 'NEF~1706494552592~lan5', 'line', 0, 0, 0, '', '', '', '', '', 'NEF', 'lan4', '', '', '', '', '{"active":{"lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"lineWidth":1,"stroke":"rgb(245, 245, 245)"},"highlight":{"lineWidth":2,"stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"inactive":{"lineWidth":1,"stroke":"rgb(234, 234, 234)"},"lineWidth":2,"offset":20,"radius":2,"selected":{"lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', '', '{"autoRotate":false,"position":"middle","refX":0,"refY":0,"style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (4396, 'edge', '5GC System Architecture', 'LMF~1706495015507~lan6', 'polyline', 0, 0, 0, '', '', '', '', '', 'LMF', 'lan6', '', '', '', '', '{"active":{"lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"lineWidth":1,"stroke":"rgb(245, 245, 245)"},"highlight":{"lineWidth":2,"stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"inactive":{"lineWidth":1,"stroke":"rgb(234, 234, 234)"},"lineWidth":2,"offset":20,"radius":2,"selected":{"lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', '', '{"autoRotate":false,"position":"middle","refX":0,"refY":0,"style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (4397, 'edge', '5GC System Architecture', 'OMC~1706495150020~lan7', 'polyline', 0, 0, 0, '', '', '', '', '', 'OMC', 'lan7', '', '', '', '', '{"active":{"lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"lineWidth":1,"stroke":"rgb(245, 245, 245)"},"highlight":{"lineWidth":2,"stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"inactive":{"lineWidth":1,"stroke":"rgb(234, 234, 234)"},"lineWidth":2,"offset":20,"radius":2,"selected":{"lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', '', '{"autoRotate":false,"position":"middle","refX":0,"refY":0,"style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (4398, 'edge', '5GC System Architecture', 'AUSF~1706495243932~lan1', 'polyline', 0, 0, 0, '', '', '', '', '', 'AUSF', 'lan1', '', '', '', '', '{"active":{"lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"lineWidth":1,"stroke":"rgb(245, 245, 245)"},"highlight":{"lineWidth":2,"stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"inactive":{"lineWidth":1,"stroke":"rgb(234, 234, 234)"},"lineWidth":2,"offset":20,"radius":2,"selected":{"lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', '', '{"autoRotate":false,"position":"middle","refX":0,"refY":0,"style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (4399, 'edge', '5GC System Architecture', 'AMF~1706495271064~lan2', 'polyline', 0, 0, 0, '', '', '', '', '', 'AMF', 'lan2', '', '', '', '', '{"active":{"lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"lineWidth":1,"stroke":"rgb(245, 245, 245)"},"highlight":{"lineWidth":2,"stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"inactive":{"lineWidth":1,"stroke":"rgb(234, 234, 234)"},"lineWidth":2,"offset":20,"radius":2,"selected":{"lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', '', '{"autoRotate":false,"position":"middle","refX":0,"refY":0,"style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (4400, 'edge', '5GC System Architecture', 'NRF~1706495715971~lan3', 'polyline', 0, 0, 0, '', '', '', '', '', 'NRF', 'lan5', '', '', '', '', '{"active":{"lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"lineWidth":1,"stroke":"rgb(245, 245, 245)"},"highlight":{"lineWidth":2,"stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"inactive":{"lineWidth":1,"stroke":"rgb(234, 234, 234)"},"lineWidth":2,"offset":20,"radius":2,"selected":{"lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', '', '{"autoRotate":false,"position":"middle","refX":0,"refY":0,"style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (4401, 'edge', '5GC System Architecture', 'SMF~1706495739277~lan4', 'polyline', 0, 0, 0, '', '', '', '', '', 'SMF', 'lan4', '', '', '', '', '{"active":{"lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"lineWidth":1,"stroke":"rgb(245, 245, 245)"},"highlight":{"lineWidth":2,"stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"inactive":{"lineWidth":1,"stroke":"rgb(234, 234, 234)"},"lineWidth":2,"offset":20,"radius":2,"selected":{"lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', '', '{"autoRotate":false,"position":"middle","refX":0,"refY":0,"style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (4402, 'edge', '5GC System Architecture', 'IMS~1706496047466~lan5', 'polyline', 0, 0, 0, '', '', '', '', '', 'IMS', 'lan6', '', '', '', '', '{"active":{"lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"lineWidth":1,"stroke":"rgb(245, 245, 245)"},"highlight":{"lineWidth":2,"stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"inactive":{"lineWidth":1,"stroke":"rgb(234, 234, 234)"},"lineWidth":2,"offset":20,"radius":2,"selected":{"lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', '', '{"autoRotate":false,"position":"middle","refX":0,"refY":0,"style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (4403, 'edge', '5GC System Architecture', 'DN~1704534869360~UPF', 'line-animate-state', 0, 0, 0, '', '', '', '', '', 'UPF', 'DN', '', '', '', '', '{"active":{"lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"lineWidth":1,"stroke":"rgb(245, 245, 245)"},"highlight":{"lineWidth":2,"stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"inactive":{"lineWidth":1,"stroke":"rgb(234, 234, 234)"},"lineWidth":5,"offset":20,"radius":2,"selected":{"lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#7b68ee"}', 'N6', '{"autoRotate":false,"position":"middle","refX":0,"refY":-10,"style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (4404, 'edge', '5GC System Architecture', 'SMF~1704765447548~UPF', 'line-animate-state', 0, 0, 0, '', '', '', '', '', 'SMF', 'UPF', '', '', '', '', '{"active":{"lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"lineWidth":1,"stroke":"rgb(245, 245, 245)"},"highlight":{"lineWidth":2,"stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"inactive":{"lineWidth":1,"stroke":"rgb(234, 234, 234)"},"lineWidth":2,"offset":20,"radius":2,"selected":{"lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', 'N4', '{"autoRotate":false,"position":"middle","refX":0,"refY":3,"style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (4405, 'edge', '5GC System Architecture', '5GC~1704764825481~Base', 'line-animate-state', 0, 0, 0, '', '', '', '', '', 'Base', 'AMF', '', '', '', '', '{"active":{"lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"lineWidth":1,"stroke":"rgb(245, 245, 245)"},"highlight":{"lineWidth":2,"stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"inactive":{"lineWidth":1,"stroke":"rgb(234, 234, 234)"},"lineWidth":2,"offset":20,"radius":2,"selected":{"lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', 'N2', '{"autoRotate":false,"position":"middle","refX":-5,"refY":-2,"style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (4406, 'edge', '5GC System Architecture', 'MME~1706492758830~lan1', 'polyline', 0, 0, 0, '', '', '', '', '', 'MME', 'lan1', '', '', '', '', '{"active":{"lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"lineWidth":1,"stroke":"rgb(245, 245, 245)"},"highlight":{"lineWidth":2,"stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"inactive":{"lineWidth":1,"stroke":"rgb(234, 234, 234)"},"lineWidth":2,"offset":20,"radius":2,"selected":{"lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', '', '{"autoRotate":false,"position":"middle","refX":0,"refY":0,"style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (4407, 'edge', '5GC System Architecture', 'UDM~1706493787944~lan2', 'line', 0, 0, 0, '', '', '', '', '', 'UDM', 'lan3', '', '', '', '', '{"active":{"lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"lineWidth":1,"stroke":"rgb(245, 245, 245)"},"highlight":{"lineWidth":2,"stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"inactive":{"lineWidth":1,"stroke":"rgb(234, 234, 234)"},"lineWidth":2,"offset":20,"radius":2,"selected":{"lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', '', '{"autoRotate":false,"position":"middle","refX":0,"refY":0,"style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (4408, 'edge', '5GC System Architecture', 'PCF~1706494120334~lan3', 'line', 0, 0, 0, '', '', '', '', '', 'PCF', 'lan5', '', '', '', '', '{"active":{"lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"lineWidth":1,"stroke":"rgb(245, 245, 245)"},"highlight":{"lineWidth":2,"stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"inactive":{"lineWidth":1,"stroke":"rgb(234, 234, 234)"},"lineWidth":2,"offset":20,"radius":2,"selected":{"lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', '', '{"autoRotate":false,"position":"middle","refX":0,"refY":0,"style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (4409, 'edge', '5GC System Architecture', 'NSSF~1706494145341~lan4', 'polyline', 0, 0, 0, '', '', '', '', '', 'NSSF', 'lan2', '', '', '', '', '{"active":{"lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"lineWidth":1,"stroke":"rgb(245, 245, 245)"},"highlight":{"lineWidth":2,"stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"inactive":{"lineWidth":1,"stroke":"rgb(234, 234, 234)"},"lineWidth":2,"offset":20,"radius":2,"selected":{"lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', '', '{"autoRotate":false,"position":"middle","refX":0,"refY":0,"style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); +INSERT INTO "chart_graph" VALUES (4410, 'edge', '5GC System Architecture', 'SMSC~1728441658350~LAN', 'polyline', 0, 0, 0, '', '', '', '', '', 'SMSC', 'lan7', '', '', '', '', '{"active":{"lineWidth":1,"stroke":"rgb(95, 149, 255)"},"cursor":"pointer","disable":{"lineWidth":1,"stroke":"rgb(245, 245, 245)"},"highlight":{"lineWidth":2,"stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"inactive":{"lineWidth":1,"stroke":"rgb(234, 234, 234)"},"lineWidth":2,"offset":20,"radius":2,"selected":{"lineWidth":2,"shadowBlur":10,"shadowColor":"rgb(95, 149, 255)","stroke":"rgb(95, 149, 255)","text-shape":{"fontWeight":500}},"stroke":"#ffffff"}', '', '{"autoRotate":false,"position":"middle","refX":0,"refY":0,"style":{"fill":"#ffffff","fontSize":12,"fontWeight":500}}'); + +-- Dump completed on 2024-03-06 17:27:01 diff --git a/build/database/lite/common/cm_title.sql b/build/database/lite/common/cm_title.sql new file mode 100644 index 00000000..4ced104e --- /dev/null +++ b/build/database/lite/common/cm_title.sql @@ -0,0 +1,340 @@ +-- ---------------------------- +-- Table structure for cm_title +-- ---------------------------- +DROP TABLE IF EXISTS "cm_title"; +CREATE TABLE "cm_title" ( + "id" integer NOT NULL, + "ne_type" text(16), + "object" text(32), + "code" text(32), + "cm_en" text(128), + "cm_cn" text(128), + "description" text(1024), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Records of cm_title +-- ---------------------------- +INSERT INTO "cm_title" VALUES (2800, 'AMF', 'ManagedElement', 'AMFAA01', 'Id', '标识符', '网元标识,只在OMC范围内有效'); +INSERT INTO "cm_title" VALUES (2801, 'AMF', 'ManagedElement', 'AMFAA02', 'UserLabel', '用户友好名', '网元名称,根据运营商的网元命名规则设定。'); +INSERT INTO "cm_title" VALUES (2802, 'AMF', 'ManagedElement', 'AMFAA03', 'VendorName', '厂商名称', '厂商名称'); +INSERT INTO "cm_title" VALUES (2803, 'AMF', 'ManagedElement', 'AMFAA04', 'ManagedBy', '管理节点', '管理ManagedElement的ManagementNode对象类的DN值'); +INSERT INTO "cm_title" VALUES (2804, 'AMF', 'ManagedElement', 'AMFAA05', 'ManagementIpAddress', '网管接口IP地址列表', '网管接口IP地址列表 +如支持IPV4V6,IPV4和IPV6都要呈现。'); +INSERT INTO "cm_title" VALUES (2805, 'AMF', 'ManagedElement', 'AMFAA06', 'SwVersion', '软件版本', '网元的软件版本'); +INSERT INTO "cm_title" VALUES (2806, 'AMF', 'ManagedElement', 'AMFAA07', 'PatchInfo', '补丁信息', '补丁信息,用于表示当前网元加载的补丁名称列表。'); +INSERT INTO "cm_title" VALUES (2807, 'AMF', 'ManagedElement', 'AMFAA08', 'AdministrativeState', '管理状态', '管理的状态,取值范围为{Locked,Unlocked,ShuttingDown}'); +INSERT INTO "cm_title" VALUES (2808, 'AMF', 'ManagedElement', 'AMFAA09', 'OperationalState', '运行状态', '运行的状态,取值范围为{Disabled, Enabled}'); +INSERT INTO "cm_title" VALUES (2809, 'AMF', 'AmfFunction', 'AMFAB01', 'Id', '标识符', '对象标识,只在OMC范围内有效'); +INSERT INTO "cm_title" VALUES (2810, 'AMF', 'AmfFunction', 'AMFAB02', 'UserLabel', '用户友好名', '对象名称'); +INSERT INTO "cm_title" VALUES (2811, 'AMF', 'AmfFunction', 'AMFAB03', 'AdministrativeState', '管理状态', '管理的状态,取值范围为{Locked,Unlocked,ShuttingDown}'); +INSERT INTO "cm_title" VALUES (2812, 'AMF', 'AmfFunction', 'AMFAB04', 'OperationalState', '运行状态', '运行的状态,取值范围为{Disabled, Enabled}'); +INSERT INTO "cm_title" VALUES (2813, 'AMF', 'AmfFunction', 'AMFAB05', 'VnfInstanceId', '虚拟化实例标识', '虚拟网元的InstanceId'); +INSERT INTO "cm_title" VALUES (2814, 'AMF', 'AmfFunction', 'AMFAB06', 'Fqdn', 'AmfFunction的FQDN', '基于服务化接口的AmfFunction的FQDN,FQDN结构请参见TS23.003.'); +INSERT INTO "cm_title" VALUES (2815, 'AMF', 'AmfFunction', 'AMFAB07', 'SbiServiceList', 'AmfFunction的服务列表', 'AmfFunction上所有注册到服务化接口的service列表,该列表由每个service的名称组成,其中ServiceName参见29.510 Table 6.1.6.3.11-1: Enumeration ServiceName定义'); +INSERT INTO "cm_title" VALUES (2816, 'AMF', 'AmfFunction', 'AMFAB08', 'AmfGuamiList', '全球AMF唯一标识列表', ' = + = '); +INSERT INTO "cm_title" VALUES (2817, 'AMF', 'AmfFunction', 'AMFAB09', 'SnssaiList', '网络切片列表', 'S-NSSAI的列表,S-NSSAI=SST-SD。S-NSSAI的格式按照3GPP规范要求,本身32bit,前8bit代表SST,后24bit代表SD。 +此变量为长度为10个字符字符,组成方式:3个字符标识SST + “-” + 6个字符标识SD +前3个字符为SST对应8bit十进制数直接变为字符串(比如数字133->”133”) +后6个字符位SD对应的24bit的十六进制数直接变为字符串(例如数字FEFA89->”FEFA89”)样例(供参考):133-FEFA89'); +INSERT INTO "cm_title" VALUES (2818, 'AMF', 'AmfFunction', 'AMFAB10', 'MaxUser', '最大注册用户数', '当前软硬件配置条件下(如licence限制),AMF最大能够支持的注册用户数。'); +INSERT INTO "cm_title" VALUES (2819, 'AMF', 'AmfFunction', 'AMFAB11', 'RelativeCapacity', '相对容量', 'AMF集合内该AMF的相对容量,代表了NG-RAN选择AMF的概率。取值为整数[0..255]。'); +INSERT INTO "cm_title" VALUES (2820, 'AMF', 'AmfFunction', 'AMFAB12', 'MaxGnbNum', '最大支持基站数', '当前软硬件配置条件下(如licence限制),AMF最大可以支持的5G基站数。'); +INSERT INTO "cm_title" VALUES (2821, 'AMF', 'EpRpDynN8Amf', 'AMFAC01', 'Id', '标识符', 'N8接口标识'); +INSERT INTO "cm_title" VALUES (2822, 'AMF', 'EpRpDynN8Amf', 'AMFAC02', 'UserLabel', '用户友好名', '对象名称'); +INSERT INTO "cm_title" VALUES (2823, 'AMF', 'EpRpDynN8Amf', 'AMFAC03', 'LocIpAddrList', '本端IP地址列表', '参考点所关联的本端网元的IP地址列表(Ipv4或Ipv6的地址格式)。'); +INSERT INTO "cm_title" VALUES (2824, 'AMF', 'EpRpDynN8Amf', 'AMFAC04', 'FarIpSubnetworkList', '远端IP子网列表', '参考点所关联的远端IP子网列表: +1.Ipv4:List of Struct{ + Subnetwork:string, + Mask:string } +若子网仅包含一个IP地址,则Subnetwork为该IP地址,Mask为255.255.255.255。 +若子网地址为0.0.0.0,Mask可为任意值(通常也取0.0.0.0),代表所有局向。 +2.Ipv6:子网+前缀方式,样例供参考: +{(2409:802F:0000:0207:0000:0000:1001:0502,128),(2409:802F:0000:0207:0000:0000:1001:0501,128)}或{(2409:802F:0000:0207::1001:0502,128),(2409:802F:0000:0207::1001:0501,128)}或{(2409:802F:0:207::1001:502,128),(2409:802F:0:207::1001:501,128)}'); +INSERT INTO "cm_title" VALUES (2825, 'AMF', 'EpRpDynN11Amf', 'AMFAD01', 'Id', '标识符', 'N11接口标识'); +INSERT INTO "cm_title" VALUES (2826, 'AMF', 'EpRpDynN11Amf', 'AMFAD02', 'UserLabel', '用户友好名', '对象名称'); +INSERT INTO "cm_title" VALUES (2827, 'AMF', 'EpRpDynN11Amf', 'AMFAD03', 'LocIpAddrList', '本端IP地址列表', '参考点所关联的本端网元的IP地址列表(Ipv4或Ipv6的地址格式)。'); +INSERT INTO "cm_title" VALUES (2828, 'AMF', 'EpRpDynN11Amf', 'AMFAD04', 'FarIpSubnetworkList', '远端IP子网列表', '参考点所关联的远端IP子网列表: +1.Ipv4:List of Struct{ + Subnetwork:string, + Mask:string } +若子网仅包含一个IP地址,则Subnetwork为该IP地址,Mask为255.255.255.255。 +若子网地址为0.0.0.0,Mask可为任意值(通常也取0.0.0.0),代表所有局向。 +2.Ipv6:子网+前缀方式,样例供参考: +{(2409:802F:0000:0207:0000:0000:1001:0502,128),(2409:802F:0000:0207:0000:0000:1001:0501,128)}或{(2409:802F:0000:0207::1001:0502,128),(2409:802F:0000:0207::1001:0501,128)}或{(2409:802F:0:207::1001:502,128),(2409:802F:0:207::1001:501,128)}'); +INSERT INTO "cm_title" VALUES (2829, 'AMF', 'EpRpDynN12Amf', 'AMFAE01', 'Id', '标识符', 'N12接口标识'); +INSERT INTO "cm_title" VALUES (2830, 'AMF', 'EpRpDynN12Amf', 'AMFAE02', 'UserLabel', '用户友好名', '对象名称'); +INSERT INTO "cm_title" VALUES (2831, 'AMF', 'EpRpDynN12Amf', 'AMFAE03', 'LocIpAddrList', '本端IP地址列表', '参考点所关联的本端网元的IP地址列表(Ipv4或Ipv6的地址格式)。'); +INSERT INTO "cm_title" VALUES (2832, 'AMF', 'EpRpDynN12Amf', 'AMFAE04', 'FarIpSubnetworkList', '远端IP子网列表', '参考点所关联的远端IP子网列表: +1.Ipv4:List of Struct{ + Subnetwork:string, + Mask:string } +若子网仅包含一个IP地址,则Subnetwork为该IP地址,Mask为255.255.255.255。 +若子网地址为0.0.0.0,Mask可为任意值(通常也取0.0.0.0),代表所有局向。 +2.Ipv6:子网+前缀方式,样例供参考: +{(2409:802F:0000:0207:0000:0000:1001:0502,128),(2409:802F:0000:0207:0000:0000:1001:0501,128)}或{(2409:802F:0000:0207::1001:0502,128),(2409:802F:0000:0207::1001:0501,128)}或{(2409:802F:0:207::1001:502,128),(2409:802F:0:207::1001:501,128)}'); +INSERT INTO "cm_title" VALUES (2833, 'AMF', 'IPResource', 'AMFAF01', 'Id', '标识符', '命名属性 '); +INSERT INTO "cm_title" VALUES (2834, 'AMF', 'IPResource', 'AMFAF02', 'UserLabel', '用户友好名', '用户友好名,由EMS厂商自己指定,做为其内部标识,并可被NMS修改。'); +INSERT INTO "cm_title" VALUES (2835, 'AMF', 'IPResource', 'AMFAF03', 'InterfaceType', '接口类型', '包含管理接口和业务接口。枚举值{Mgt,N2,NLs,NLg,N26,Nnrf,N12,N8,N15,N22,N14,N11,DnsQry},备注:管理接口为Mgt。'); +INSERT INTO "cm_title" VALUES (2836, 'AMF', 'IPResource', 'AMFAF04', 'LocIpV4AddrList', '本端IPV4地址列表', '参考点所关联的本端网元的IP地址列表(Ipv4地址格式),如无IPV4地址,填写{Default}。'); +INSERT INTO "cm_title" VALUES (2837, 'AMF', 'IPResource', 'AMFAF05', 'LocIpV6AddrList', '本端IPV6地址列表', '参考点所关联的本端网元的IP地址列表(Ipv6地址格式),如无IPV6地址,填写{Default}。'); +INSERT INTO "cm_title" VALUES (2838, 'PCF', 'ManagedElement', 'PCFAA01', 'Id', '标识符', '网元标识,只在OMC范围内有效'); +INSERT INTO "cm_title" VALUES (2839, 'PCF', 'ManagedElement', 'PCFAA02', 'UserLabel', '用户友好名', '网元名称,根据运营商的网元命名规则设定。'); +INSERT INTO "cm_title" VALUES (2840, 'PCF', 'ManagedElement', 'PCFAA03', 'VendorName', '厂商名称', '厂商名称'); +INSERT INTO "cm_title" VALUES (2841, 'PCF', 'ManagedElement', 'PCFAA04', 'ManagedBy', '管理节点', '管理ManagedElement的ManagementNode对象类的DN值'); +INSERT INTO "cm_title" VALUES (2842, 'PCF', 'ManagedElement', 'PCFAA05', 'ManagementIpAddress', '网管接口IP地址列表', '网管接口IP地址列表'); +INSERT INTO "cm_title" VALUES (2843, 'PCF', 'ManagedElement', 'PCFAA06', 'SwVersion', '软件版本', '网元的软件版本'); +INSERT INTO "cm_title" VALUES (2844, 'PCF', 'ManagedElement', 'PCFAA07', 'PatchInfo', '补丁信息', '补丁信息,用于表示当前网元加载的补丁名称列表。'); +INSERT INTO "cm_title" VALUES (2845, 'PCF', 'ManagedElement', 'PCFAA08', 'AdministrativeState', '管理状态', '管理的状态,取值范围为{Locked,Unlocked,ShuttingDown}'); +INSERT INTO "cm_title" VALUES (2846, 'PCF', 'ManagedElement', 'PCFAA09', 'OperationalState', '运行状态', '运行的状态,取值范围为{Disabled, Enabled}'); +INSERT INTO "cm_title" VALUES (2847, 'PCF', 'PcfFunction', 'PCFAB01', 'Id', '标识符', '命名属性 '); +INSERT INTO "cm_title" VALUES (2848, 'PCF', 'PcfFunction', 'PCFAB02', 'UserLabel', '用户友好名', '对象名称'); +INSERT INTO "cm_title" VALUES (2849, 'PCF', 'PcfFunction', 'PCFAB03', 'AdministrativeState', '管理状态', '管理的状态,取值范围为{Locked,Unlocked,ShuttingDown}'); +INSERT INTO "cm_title" VALUES (2850, 'PCF', 'PcfFunction', 'PCFAB04', 'OperationalState', '运行状态', '运行的状态,取值范围为{Disabled, Enabled}'); +INSERT INTO "cm_title" VALUES (2851, 'PCF', 'PcfFunction', 'PCFAB05', 'VnfInstanceId', '虚拟化实例标识', '虚拟网元的InstanceId'); +INSERT INTO "cm_title" VALUES (2852, 'PCF', 'PcfFunction', 'PCFAB05', 'Fqdn', 'PcfFunction的FQDN', '基于服务化接口PcfFunction的FQDN,FQDN结构请参见TS23.003.'); +INSERT INTO "cm_title" VALUES (2853, 'PCF', 'PcfFunction', 'PCFAB06', 'SbiServiceList', 'PcfFunction的服务列表', 'PcfFunction上所有注册到服务化接口的service列表,该列表由每个service的名称组成。其中ServiceName参见29.510 Table 6.1.6.3.11-1: Enumeration ServiceName定义'); +INSERT INTO "cm_title" VALUES (2854, 'PCF', 'UdrFunction', 'PCFAC01', 'Id', '标识符', '命名属性'); +INSERT INTO "cm_title" VALUES (2855, 'PCF', 'UdrFunction', 'PCFAC02', 'UserLabel', '用户友好名', '用户友好名,由EMS厂商自己指定,做为其内部标识,并可被NMS修改。 语音PCF不涉及Udr,语音PCF对应指标填写PCF的取值。'); +INSERT INTO "cm_title" VALUES (2856, 'PCF', 'UdrFunction', 'PCFAC03', 'AdministrativeState', '管理状态', '管理的状态,枚举型 {Locked, Unlocked, ShuttingDown}'); +INSERT INTO "cm_title" VALUES (2857, 'PCF', 'UdrFunction', 'PCFAC04', 'OperationalState', '运行状态', '运行的状态,枚举型{Disabled,Enabled}'); +INSERT INTO "cm_title" VALUES (2858, 'PCF', 'UdrFunction', 'PCFAC07', 'MaxSubNbr', '最大签约用户数', 'UDR最大能存储的签约用户的个数,该值受软硬件条件共同限制,如Licence。 +语音PCF不涉及Udr,语音PCF对应指标填0。'); +INSERT INTO "cm_title" VALUES (2859, 'PCF', 'IPResource', 'PCFAD01', 'Id', '标识符', '命名属性 '); +INSERT INTO "cm_title" VALUES (2860, 'PCF', 'IPResource', 'PCFAD02', 'UserLabel', '用户友好名', '用户友好名,由EMS厂商自己指定,做为其内部标识,并可被NMS修改。'); +INSERT INTO "cm_title" VALUES (2861, 'PCF', 'IPResource', 'PCFAD03', 'InterfaceType', '接口类型', '包含管理接口和业务接口(信令和媒体)。枚举型{Mgt,Rx,Gx,N5,N7,N15,N28},备注:管理接口为Mgt。'); +INSERT INTO "cm_title" VALUES (2862, 'PCF', 'IPResource', 'PCFAD04', 'LocIpV4AddrList', '本端IPV4地址列表', '参考点所关联的本端网元的IP地址列表(Ipv4地址格式),如无IPV4地址,填写{Default}。'); +INSERT INTO "cm_title" VALUES (2863, 'PCF', 'IPResource', 'PCFAD05', 'LocIpV6AddrList', '本端IPV6地址列表', '参考点所关联的本端网元的IP地址列表(Ipv6地址格式),如无IPV6地址,填写{Default}。'); +INSERT INTO "cm_title" VALUES (2864, 'SMF', 'ManagedElement', 'SMFAA01', 'Id', '标识符', '网元标识,只在OMC范围内有效'); +INSERT INTO "cm_title" VALUES (2865, 'SMF', 'ManagedElement', 'SMFAA02', 'UserLabel', '用户友好名', '网元名称,根据运营商的网元命名规则设定。'); +INSERT INTO "cm_title" VALUES (2866, 'SMF', 'ManagedElement', 'SMFAA03', 'VendorName', '厂商名称', '厂商名称'); +INSERT INTO "cm_title" VALUES (2867, 'SMF', 'ManagedElement', 'SMFAA04', 'ManagedBy', '管理节点', '管理ManagedElement的ManagementNode对象类的DN值'); +INSERT INTO "cm_title" VALUES (2868, 'SMF', 'ManagedElement', 'SMFAA05', 'ManagementIpAddress', '网管接口IP地址列表', '网管接口IP地址列表 +如支持IPV4V6,IPV4和IPV6都要呈现。'); +INSERT INTO "cm_title" VALUES (2869, 'SMF', 'ManagedElement', 'SMFAA06', 'SwVersion', '软件版本', '网元的软件版本'); +INSERT INTO "cm_title" VALUES (2870, 'SMF', 'ManagedElement', 'SMFAA07', 'PatchInfo', '补丁信息', '补丁信息,用于表示当前网元加载的补丁名称列表。'); +INSERT INTO "cm_title" VALUES (2871, 'SMF', 'ManagedElement', 'SMFAA08', 'AdministrativeState', '管理状态', '管理的状态,取值范围为{Locked,Unlocked,ShuttingDown}'); +INSERT INTO "cm_title" VALUES (2872, 'SMF', 'ManagedElement', 'SMFAA09', 'OperationalState', '运行状态', '运行的状态,取值范围为{Disabled, Enabled}'); +INSERT INTO "cm_title" VALUES (2873, 'SMF', 'SmfFunction', 'SMFAB01', 'Id', '标识符', '命名属性 '); +INSERT INTO "cm_title" VALUES (2874, 'SMF', 'SmfFunction', 'SMFAB02', 'UserLabel', '用户友好名', '对象名称'); +INSERT INTO "cm_title" VALUES (2875, 'SMF', 'SmfFunction', 'SMFAB03', 'AdministrativeState', '管理状态', '管理的状态,枚举型 {Locked, Unlocked, ShuttingDown}'); +INSERT INTO "cm_title" VALUES (2876, 'SMF', 'SmfFunction', 'SMFAB04', 'OperationalState', '运行状态', '运行的状态,枚举型{Disabled,Enabled}'); +INSERT INTO "cm_title" VALUES (2877, 'SMF', 'SmfFunction', 'SMFAB05', 'VnfInstanceId', '虚拟化实例标识', '虚拟网元的InstanceId'); +INSERT INTO "cm_title" VALUES (2878, 'SMF', 'SmfFunction', 'SMFAB06', 'Fqdn', 'SmfFunction的FQDN', '基于服务化接口的SmfFunction的FQDN,FQDN结构请参见TS23.003'); +INSERT INTO "cm_title" VALUES (2879, 'SMF', 'SmfFunction', 'SMFAB07', 'SbiServiceList', 'SmfFunction的服务列表', 'SmfFunction上所有注册到服务化接口的service列表,该列表由每个service的名称组成,服务名称参见29.510 Table 6.1.6.3.11-1: Enumeration ServiceName的定义'); +INSERT INTO "cm_title" VALUES (2880, 'SMF', 'SmfFunction', 'SMFAB08', 'MaxPduSessions', '最大PDU会话数', '当前软硬件配置条件下(如licence限制),SMF最大支持的并发PDU Session数。'); +INSERT INTO "cm_title" VALUES (2881, 'SMF', 'SmfFunction', 'SMFAB09', 'MaxQfi', '最大QFI数', '当前软硬件配置条件下(如licence限制),SMF最大支持的并发QFI数。'); +INSERT INTO "cm_title" VALUES (2882, 'SMF', 'SmfFunction', 'SMFAB10', 'UpfList', 'UPF列表', 'SMF管理的UPF的DN列表'); +INSERT INTO "cm_title" VALUES (2883, 'SMF', 'AddrPool', 'SMFAC01', 'Id', '标识符', '命名属性 '); +INSERT INTO "cm_title" VALUES (2884, 'SMF', 'AddrPool', 'SMFAC02', 'UserLabel', '用户友好名', '对象名称'); +INSERT INTO "cm_title" VALUES (2885, 'SMF', 'AddrPool', 'SMFAC03', 'AddrType', '地址类型', '表示地址的类型,枚举 {Dynamic, Static}'); +INSERT INTO "cm_title" VALUES (2886, 'SMF', 'AddrPool', 'SMFAC04', 'IpVersion', 'IP版本', '表示地址池的IP的版本,包括{IPv4,IPv6}'); +INSERT INTO "cm_title" VALUES (2887, 'SMF', 'AddrPool', 'SMFAC05', 'AddrSegList', 'IP地址分段列表', '指该地址对象中存储的地址段列表。其中每个地址段包含有一个起始地址IP地址(beginIp),和该段的IP地址数目来确定,List of Struct{ + StartIp: String //起始IP地址, + SegLen: Integer //地址段长度 +}'); +INSERT INTO "cm_title" VALUES (2888, 'SMF', 'EpRpDynN7Smf', 'SMFAD01', 'Id', '标识符', '命名属性 '); +INSERT INTO "cm_title" VALUES (2889, 'SMF', 'EpRpDynN7Smf', 'SMFAD02', 'UserLabel', '用户友好名', '对象名称'); +INSERT INTO "cm_title" VALUES (2890, 'SMF', 'EpRpDynN7Smf', 'SMFAD03', 'LocIpAddrList', '本端IP地址列表', '参考点所关联的本端网元的IP地址列表(Ipv4或Ipv6的地址格式)。'); +INSERT INTO "cm_title" VALUES (2891, 'SMF', 'EpRpDynN7Smf', 'SMFAD04', 'FarIpSubnetworkList', '远端IP子网列表', '参考点所关联的远端IP子网列表: +1.Ipv4:List of Struct{ + Subnetwork:string, + Mask:string } +若子网仅包含一个IP地址,则Subnetwork为该IP地址,Mask为255.255.255.255。 +若子网地址为0.0.0.0,Mask可为任意值(通常也取0.0.0.0),代表所有局向。 +2.Ipv6:子网+前缀方式,样例供参考: +{(2409:802F:0000:0207:0000:0000:1001:0502,128),(2409:802F:0000:0207:0000:0000:1001:0501,128)}或{(2409:802F:0000:0207::1001:0502,128),(2409:802F:0000:0207::1001:0501,128)}或{(2409:802F:0:207::1001:502,128),(2409:802F:0:207::1001:501,128)}'); +INSERT INTO "cm_title" VALUES (2892, 'SMF', 'EpRpDynN10Smf', 'SMFAE01', 'Id', '标识符', '命名属性 '); +INSERT INTO "cm_title" VALUES (2893, 'SMF', 'EpRpDynN10Smf', 'SMFAE02', 'UserLabel', '用户友好名', '对象名称'); +INSERT INTO "cm_title" VALUES (2894, 'SMF', 'EpRpDynN10Smf', 'SMFAE03', 'LocIpAddrList', '本端IP地址列表', '参考点所关联的本端网元的IP地址列表(Ipv4或Ipv6的地址格式)。'); +INSERT INTO "cm_title" VALUES (2895, 'SMF', 'EpRpDynN10Smf', 'SMFAE04', 'FarIpSubnetworkList', '远端IP子网列表', '参考点所关联的远端IP子网列表: +1.Ipv4:List of Struct{ + Subnetwork:string, + Mask:string } +若子网仅包含一个IP地址,则Subnetwork为该IP地址,Mask为255.255.255.255。 +若子网地址为0.0.0.0,Mask可为任意值(通常也取0.0.0.0),代表所有局向。 +2.Ipv6:子网+前缀方式,样例供参考: +{(2409:802F:0000:0207:0000:0000:1001:0502,128),(2409:802F:0000:0207:0000:0000:1001:0501,128)}或{(2409:802F:0000:0207::1001:0502,128),(2409:802F:0000:0207::1001:0501,128)}或{(2409:802F:0:207::1001:502,128),(2409:802F:0:207::1001:501,128)}'); +INSERT INTO "cm_title" VALUES (2896, 'SMF', 'IPResource', 'SMFAF01', 'Id', '标识符', '命名属性 '); +INSERT INTO "cm_title" VALUES (2897, 'SMF', 'IPResource', 'SMFAF02', 'UserLabel', '用户友好名', '用户友好名,由EMS厂商自己指定,做为其内部标识,并可被NMS修改。'); +INSERT INTO "cm_title" VALUES (2898, 'SMF', 'IPResource', 'SMFAF03', 'InterfaceType', '接口类型', '包含管理接口和业务接口。枚举值{Mgt,N4,Nnrf,N10,N7,N16a,Nbsf,N11,N40,Radius},备注:管理接口为Mgt。'); +INSERT INTO "cm_title" VALUES (2899, 'SMF', 'IPResource', 'SMFAF04', 'LocIpV4AddrList', '本端IPV4地址列表', '参考点所关联的本端网元的IP地址列表(Ipv4地址格式),如无IPV4地址,填写{Default}。'); +INSERT INTO "cm_title" VALUES (2900, 'SMF', 'IPResource', 'SMFAF05', 'LocIpV6AddrList', '本端IPV6地址列表', '参考点所关联的本端网元的IP地址列表(Ipv6地址格式),如无IPV6地址,填写{Default}。'); +INSERT INTO "cm_title" VALUES (2901, 'UDM', 'ManagedElement', 'UDMAA01', 'Id', '标识符', '网元标识,只在OMC范围内有效'); +INSERT INTO "cm_title" VALUES (2902, 'UDM', 'ManagedElement', 'UDMAA02', 'UserLabel', '用户友好名', '网元名称,根据运营商的网元命名规则设定。'); +INSERT INTO "cm_title" VALUES (2903, 'UDM', 'ManagedElement', 'UDMAA03', 'VendorName', '厂商名称', '厂商名称'); +INSERT INTO "cm_title" VALUES (2904, 'UDM', 'ManagedElement', 'UDMAA04', 'ManagedBy', '管理节点', '管理ManagedElement的ManagementNode对象类的DN值'); +INSERT INTO "cm_title" VALUES (2905, 'UDM', 'ManagedElement', 'UDMAA05', 'ManagementIpAddress', '网管接口IP地址列表', '网管接口IP地址列表 +如支持IPV4V6,IPV4和IPV6都要呈现'); +INSERT INTO "cm_title" VALUES (2906, 'UDM', 'ManagedElement', 'UDMAA06', 'SwVersion', '软件版本', '网元的软件版本'); +INSERT INTO "cm_title" VALUES (2907, 'UDM', 'ManagedElement', 'UDMAA07', 'PatchInfo', '补丁信息', '补丁信息,用于表示当前网元加载的补丁名称列表。'); +INSERT INTO "cm_title" VALUES (2908, 'UDM', 'ManagedElement', 'UDMAA08', 'AdministrativeState', '管理状态', '管理的状态,取值范围为{Locked,Unlocked,ShuttingDown}'); +INSERT INTO "cm_title" VALUES (2909, 'UDM', 'ManagedElement', 'UDMAA09', 'OperationalState', '运行状态', '运行的状态,取值范围为{Disabled, Enabled}'); +INSERT INTO "cm_title" VALUES (2910, 'UDM', 'UdmFunction', 'UDMAB01', 'Id', '标识符', '命名属性 '); +INSERT INTO "cm_title" VALUES (2911, 'UDM', 'UdmFunction', 'UDMAB02', 'UserLabel', '用户友好名', '对象名称'); +INSERT INTO "cm_title" VALUES (2912, 'UDM', 'UdmFunction', 'UDMAB03', 'AdministrativeState', '管理状态', '管理的状态,取值范围为{Locked,Unlocked,ShuttingDown}'); +INSERT INTO "cm_title" VALUES (2913, 'UDM', 'UdmFunction', 'UDMAB04', 'OperationalState', '运行状态', '运行的状态,取值范围为{Disabled, Enabled}'); +INSERT INTO "cm_title" VALUES (2914, 'UDM', 'UdmFunction', 'UDMAB05', 'VnfInstanceId', '虚拟化实例标识', '虚拟网元的InstanceId'); +INSERT INTO "cm_title" VALUES (2915, 'UDM', 'UdmFunction', 'UDMAB06', 'Fqdn', 'UdmFunction的FQDN', '基于服务化接口的UdmFunction的FQDN,FQDN结构请参见TS23.003.'); +INSERT INTO "cm_title" VALUES (2916, 'UDM', 'UdmFunction', 'UDMAB07', 'SbiServiceList', 'UdmFunction的服务列表', 'UdmFunction上所有注册到服务化接口的service列表,该列表由每个service的名称组成。其中ServiceName参见29.510 Table 6.1.6.3.11-1: Enumeration ServiceName定义'); +INSERT INTO "cm_title" VALUES (2917, 'UDM', 'UdrFunction', 'UDRAC01', 'Id', '标识符', '命名属性 '); +INSERT INTO "cm_title" VALUES (2918, 'UDM', 'UdrFunction', 'UDRAC02', 'UserLabel', '用户友好名', '对象名称'); +INSERT INTO "cm_title" VALUES (2919, 'UDM', 'UdrFunction', 'UDRAC03', 'AdministrativeState', '管理状态', '管理的状态,取值范围为{Locked,Unlocked,ShuttingDown}'); +INSERT INTO "cm_title" VALUES (2920, 'UDM', 'UdrFunction', 'UDRAC04', 'OperationalState', '运行状态', '运行的状态,取值范围为{Disabled, Enabled}'); +INSERT INTO "cm_title" VALUES (2921, 'UDM', 'UdrFunction', 'UDRAC05', 'VnfInstanceId', '虚拟化实例标识', '虚拟网元的InstanceId'); +INSERT INTO "cm_title" VALUES (2922, 'UDM', 'UdrFunction', 'UDRAC06', 'Fqdn', 'UdrFunction的FQDN', '基于服务化接口的UdrFunction的FQDN,FQDN结构请参见TS23.003。'); +INSERT INTO "cm_title" VALUES (2923, 'UDM', 'UdrFunction', 'UDRAC07', 'SbiServiceList', 'UdrFunction的服务列表', 'UdrFunction上所有注册到服务化接口的service列表,该列表由每个service的名称组成。其中ServiceName参见29.510 Table 6.1.6.3.11-1: Enumeration ServiceName定义。'); +INSERT INTO "cm_title" VALUES (2924, 'UDM', 'UdrFunction', 'UDRAC08', 'MaxNumSupi', '最大可存储的SUPI个数', '指UDR设计的可存储的最大SUPI数量'); +INSERT INTO "cm_title" VALUES (2925, 'UDM', 'UdrFunction', 'UDRAC09', 'MaxNumMsisdn', '最大可存储的MSISDN个数', '指UDR设计的最大可存储的MSISDN个数'); +INSERT INTO "cm_title" VALUES (2926, 'UDM', 'AusfFunction', 'UDMAD01', 'Id', '标识符', '命名属性 '); +INSERT INTO "cm_title" VALUES (2927, 'UDM', 'AusfFunction', 'UDMAD02', 'UserLabel', '用户友好名', '对象名称'); +INSERT INTO "cm_title" VALUES (2928, 'UDM', 'AusfFunction', 'UDMAD03', 'AdministrativeState', '管理状态', '管理的状态,取值范围为{Locked,Unlocked,ShuttingDown}'); +INSERT INTO "cm_title" VALUES (2929, 'UDM', 'AusfFunction', 'UDMAD04', 'OperationalState', '运行状态', '运行的状态,取值范围为{Disabled, Enabled}'); +INSERT INTO "cm_title" VALUES (2930, 'UDM', 'AusfFunction', 'UDMAD05', 'VnfInstanceId', '虚拟化实例标识', '虚拟网元的InstanceId'); +INSERT INTO "cm_title" VALUES (2931, 'UDM', 'AusfFunction', 'UDMAD06', 'Fqdn', 'AusfFunction的FQDN', '基于服务化接口的AusfFunction的FQDN,FQDN结构请参见TS23.003。'); +INSERT INTO "cm_title" VALUES (2932, 'UDM', 'AusfFunction', 'UDMAD07', 'SbiServiceList', 'AusfFunction的服务列表', 'AusfFunction上所有注册到服务化接口的service列表,该列表由每个service的名称组成。其中ServiceName参见29.510 Table 6.1.6.3.11-1: Enumeration ServiceName定义。'); +INSERT INTO "cm_title" VALUES (2933, 'UDM', 'IPResource', 'UDMAE01', 'Id', '标识符', '命名属性 '); +INSERT INTO "cm_title" VALUES (2934, 'UDM', 'IPResource', 'UDMAE02', 'UserLabel', '用户友好名', '用户友好名,由EMS厂商自己指定,做为其内部标识,并可被NMS修改。'); +INSERT INTO "cm_title" VALUES (2935, 'UDM', 'IPResource', 'UDMAE03', 'InterfaceType', '接口类型', '包含管理接口和业务接口。枚举型{Mgt,N8,N10,N12,N21},备注:管理接口为Mgt。'); +INSERT INTO "cm_title" VALUES (2936, 'UDM', 'IPResource', 'UDMAE04', 'LocIpV4AddrList', '本端IPV4地址列表', '参考点所关联的本端网元的IP地址列表(Ipv4地址格式),如无IPV4地址,填写{Default}。'); +INSERT INTO "cm_title" VALUES (2937, 'UDM', 'IPResource', 'UDMAE05', 'LocIpV6AddrList', '本端IPV6地址列表', '参考点所关联的本端网元的IP地址列表(Ipv6地址格式),如无IPV6地址,填写{Default}。'); +INSERT INTO "cm_title" VALUES (2938, 'UPF', 'ManagedElement', 'UPFAA01', 'Id', '标识符', '网元标识,只在OMC范围内有效'); +INSERT INTO "cm_title" VALUES (2939, 'UPF', 'ManagedElement', 'UPFAA02', 'UserLabel', '用户友好名', '网元名称,根据运营商的网元命名规则设定。'); +INSERT INTO "cm_title" VALUES (2940, 'UPF', 'ManagedElement', 'UPFAA03', 'VendorName', '厂商名称', '厂商名称'); +INSERT INTO "cm_title" VALUES (2941, 'UPF', 'ManagedElement', 'UPFAA04', 'ManagedBy', '管理节点', '管理ManagedElement的ManagementNode对象类的DN值'); +INSERT INTO "cm_title" VALUES (2942, 'UPF', 'ManagedElement', 'UPFAA05', 'ManagementIpAddress', '网管接口IP地址列表', '网管接口IP地址列表 +如支持IPV4V6,IPV4和IPV6都要呈现'); +INSERT INTO "cm_title" VALUES (2943, 'UPF', 'ManagedElement', 'UPFAA06', 'SwVersion', '软件版本', '网元的软件版本'); +INSERT INTO "cm_title" VALUES (2944, 'UPF', 'ManagedElement', 'UPFAA07', 'PatchInfo', '补丁信息', '补丁信息,用于表示当前网元加载的补丁名称列表。'); +INSERT INTO "cm_title" VALUES (2945, 'UPF', 'ManagedElement', 'UPFAA08', 'AdministrativeState', '管理状态', '管理的状态,取值范围为{Locked,Unlocked,ShuttingDown}'); +INSERT INTO "cm_title" VALUES (2946, 'UPF', 'ManagedElement', 'UPFAA09', 'OperationalState', '运行状态', '运行的状态,取值范围为{Disabled, Enabled}'); +INSERT INTO "cm_title" VALUES (2947, 'UPF', 'ManagedElement', 'UPFAA10', 'LocationName', '位置名称', '如指明该设备所处的具体房间'); +INSERT INTO "cm_title" VALUES (2948, 'UPF', 'ManagedElement', 'UPFAA11', 'HardwarePlatform', '硬件平台', '硬件平台'); +INSERT INTO "cm_title" VALUES (2949, 'UPF', 'InventoryUnitRack', 'UPFAB01', 'Id', '标识符', '命名属性 '); +INSERT INTO "cm_title" VALUES (2950, 'UPF', 'InventoryUnitRack', 'UPFAB02', 'UserLabel', '用户友好名', '用户友好名,由EMS厂商自己指定,做为其内部标识,并可被NMS修改。'); +INSERT INTO "cm_title" VALUES (2951, 'UPF', 'InventoryUnitRack', 'UPFAB03', 'VendorUnitFamilyType', '归属类型', '由供应商提供的便于记忆的资产单元的归属类型'); +INSERT INTO "cm_title" VALUES (2952, 'UPF', 'InventoryUnitRack', 'UPFAB04', 'VendorUnitTypeNumber', '资产单元类型版本号', '由供应商提供的可唯一识别资产单元类型及版本的号码'); +INSERT INTO "cm_title" VALUES (2953, 'UPF', 'InventoryUnitRack', 'UPFAB05', 'VendorName', '供应商名称', '供应商名称'); +INSERT INTO "cm_title" VALUES (2954, 'UPF', 'InventoryUnitRack', 'UPFAB06', 'SerialNumber', '资产序列号', '资产序列号'); +INSERT INTO "cm_title" VALUES (2955, 'UPF', 'InventoryUnitRack', 'UPFAB07', 'VersionNumber', '资产版本号', '与VendorUnitTypeNumber相关的版本信息'); +INSERT INTO "cm_title" VALUES (2956, 'UPF', 'InventoryUnitRack', 'UPFAB08', 'DateOfManufacture', '生产日期', '生产日期'); +INSERT INTO "cm_title" VALUES (2957, 'UPF', 'InventoryUnitRack', 'UPFAB09', 'DateOfLastService', '最近服务日期', '最近服务的日期(最近一次恢复工作正常状态的时间)'); +INSERT INTO "cm_title" VALUES (2958, 'UPF', 'InventoryUnitRack', 'UPFAB10', 'ManufacturerData', '特殊信息', '设备商填写的特殊信息'); +INSERT INTO "cm_title" VALUES (2959, 'UPF', 'InventoryUnitRack', 'UPFAB11', 'RackPosition', '机架位置', '机架编号,通常有两种表示方法: +(1) 行号-机架号:即该机架位于第几行的第几个。在这种情况下,机房内的机架先按行区分,机架号表示在行内的相对位置。 +(2) 机架号:即机房内的机架统一编号,不用行来区分。'); +INSERT INTO "cm_title" VALUES (2960, 'UPF', 'InventoryUnitShelf', 'UPFAC01', 'Id', '标识符', '命名属性 '); +INSERT INTO "cm_title" VALUES (2961, 'UPF', 'InventoryUnitShelf', 'UPFAC02', 'UserLabel', '用户友好名', '用户友好名,由EMS厂商自己指定,做为其内部标识,并可被NMS修改。'); +INSERT INTO "cm_title" VALUES (2962, 'UPF', 'InventoryUnitShelf', 'UPFAC03', 'VendorUnitFamilyType', '归属类型', '由供应商提供的便于记忆的资产单元的归属类型'); +INSERT INTO "cm_title" VALUES (2963, 'UPF', 'InventoryUnitShelf', 'UPFAC04', 'VendorUnitTypeNumber', '资产单元类型版本号', '由供应商提供的可唯一识别资产单元类型及版本的号码'); +INSERT INTO "cm_title" VALUES (2964, 'UPF', 'InventoryUnitShelf', 'UPFAC05', 'VendorName', '供应商名称', '供应商名称'); +INSERT INTO "cm_title" VALUES (2965, 'UPF', 'InventoryUnitShelf', 'UPFAC06', 'SerialNumber', '资产序列号', '资产序列号'); +INSERT INTO "cm_title" VALUES (2966, 'UPF', 'InventoryUnitShelf', 'UPFAC07', 'VersionNumber', '资产版本号', '与VendorUnitTypeNumber相关的版本信息'); +INSERT INTO "cm_title" VALUES (2967, 'UPF', 'InventoryUnitShelf', 'UPFAC08', 'DateOfManufacture', '生产日期', '生产日期'); +INSERT INTO "cm_title" VALUES (2968, 'UPF', 'InventoryUnitShelf', 'UPFAC09', 'DateOfLastService', '最近服务日期', '最近服务的日期(最近一次恢复工作正常状态的时间)'); +INSERT INTO "cm_title" VALUES (2969, 'UPF', 'InventoryUnitShelf', 'UPFAC10', 'ManufacturerData', '特殊信息', '设备商填写的特殊信息'); +INSERT INTO "cm_title" VALUES (2970, 'UPF', 'InventoryUnitShelf', 'UPFAC11', 'SlotsInformation', '插槽信息', '框内所有插槽、描述及占用状态。List of Struct{槽位号(字符串),描述(字符串),占用状态(枚举)}。其中其中描述信息由厂家自行决定,占用状态为枚举{Unused,Used}'); +INSERT INTO "cm_title" VALUES (2971, 'UPF', 'InventoryUnitShelf', 'UPFAC12', 'ShelfPosition', '机框位置', '1) 如果机框位于的机架也可以通过OMC进行管理,则“机框位置”的形式应为机框在机架内的相对位置 +2)如果机框位于第三方机架内,即机架不可以通过OMC管理,机框位置的形式应为“机架号-机框在机架内的相对位置”'); +INSERT INTO "cm_title" VALUES (2972, 'UPF', 'InventoryUnitPack', 'UPFAD01', 'Id', '标识符', '命名属性 '); +INSERT INTO "cm_title" VALUES (2973, 'UPF', 'InventoryUnitPack', 'UPFAD02', 'UserLabel', '用户友好名', '用户友好名,由EMS厂商自己指定,做为其内部标识,并可被NMS修改。'); +INSERT INTO "cm_title" VALUES (2974, 'UPF', 'InventoryUnitPack', 'UPFAD03', 'VendorUnitFamilyType', '归属类型', '由供应商提供的便于记忆的资产单元的归属类型'); +INSERT INTO "cm_title" VALUES (2975, 'UPF', 'InventoryUnitPack', 'UPFAD04', 'VendorUnitTypeNumber', '资产单元类型版本号', '由供应商提供的可唯一识别资产单元类型及版本的号码'); +INSERT INTO "cm_title" VALUES (2976, 'UPF', 'InventoryUnitPack', 'UPFAD05', 'VendorName', '供应商名称', '供应商名称'); +INSERT INTO "cm_title" VALUES (2977, 'UPF', 'InventoryUnitPack', 'UPFAD06', 'SerialNumber', '资产序列号', '资产序列号'); +INSERT INTO "cm_title" VALUES (2978, 'UPF', 'InventoryUnitPack', 'UPFAD07', 'VersionNumber', '资产版本号', '与VendorUnitTypeNumber相关的版本信息'); +INSERT INTO "cm_title" VALUES (2979, 'UPF', 'InventoryUnitPack', 'UPFAD08', 'DateOfManufacture', '生产日期', '生产日期'); +INSERT INTO "cm_title" VALUES (2980, 'UPF', 'InventoryUnitPack', 'UPFAD09', 'DateOfLastService', '最近服务日期', '最近服务的日期(最近一次恢复工作正常状态的时间)'); +INSERT INTO "cm_title" VALUES (2981, 'UPF', 'InventoryUnitPack', 'UPFAD10', 'ManufacturerData', '特殊信息', '设备商填写的特殊信息'); +INSERT INTO "cm_title" VALUES (2982, 'UPF', 'InventoryUnitPack', 'UPFAD11', 'PortsInformation', '端口信息', '单板包含的所有端口、描述及占用状态。List of Struct{ 端口Id(字符串),描述(字符串),占用状态(枚举)}。其中占用状态的取值为{Unused,Used},描述信息由设备厂家自行决定。'); +INSERT INTO "cm_title" VALUES (2983, 'UPF', 'InventoryUnitPack', 'UPFAD12', 'PackPosition', '板卡位置', '板卡在机框内的相对位置,通常用编号表示。'); +INSERT INTO "cm_title" VALUES (2984, 'UPF', 'InventoryUnitPack', 'UPFAD13', 'SlotsOccupied', '占用槽位', '应表示板卡占用的槽位号列表。(注:一些板卡较宽,可能会占用两个或以上槽位)'); +INSERT INTO "cm_title" VALUES (2985, 'UPF', 'InventoryUnitHost', 'PGWAE01', 'Id', '标识符', '命名属性 '); +INSERT INTO "cm_title" VALUES (2986, 'UPF', 'InventoryUnitHost', 'PGWAE02', 'UserLabel', '用户友好名', '用户友好名,由EMS厂商自己指定,做为其内部标识,并可被NMS修改。'); +INSERT INTO "cm_title" VALUES (2987, 'UPF', 'InventoryUnitHost', 'PGWAE03', 'VendorUnitFamilyType', '归属类型', '由供应商提供的便于记忆的资产单元的归属类型'); +INSERT INTO "cm_title" VALUES (2988, 'UPF', 'InventoryUnitHost', 'PGWAE04', 'VendorUnitTypeNumber', '资产单元类型版本号', '由供应商提供的可唯一识别资产单元类型及版本的号码'); +INSERT INTO "cm_title" VALUES (2989, 'UPF', 'InventoryUnitHost', 'PGWAE05', 'VendorName', '供应商名称', '供应商名称'); +INSERT INTO "cm_title" VALUES (2990, 'UPF', 'InventoryUnitHost', 'PGWAE06', 'SerialNumber', '资产序列号', '资产序列号'); +INSERT INTO "cm_title" VALUES (2991, 'UPF', 'InventoryUnitHost', 'PGWAE07', 'VersionNumber', '资产版本号', '与VendorUnitTypeNumber相关的版本信息'); +INSERT INTO "cm_title" VALUES (2992, 'UPF', 'InventoryUnitHost', 'PGWAE08', 'DateOfManufacture', '生产日期', '生产日期'); +INSERT INTO "cm_title" VALUES (2993, 'UPF', 'InventoryUnitHost', 'PGWAE09', 'DateOfLastService', '最近服务日期', '最近服务的日期(最近一次恢复工作正常状态的时间)'); +INSERT INTO "cm_title" VALUES (2994, 'UPF', 'InventoryUnitHost', 'PGWAE10', 'ManufacturerData', '特殊信息', '设备商填写的特殊信息'); +INSERT INTO "cm_title" VALUES (2995, 'UPF', 'InventoryUnitHost', 'PGWAE11', 'HostPosition', '主机位置', '主机在机房中的位置,当主机位于机架中时,为机架编号;否则主机应有自己独立的机房位置信息。 '); +INSERT INTO "cm_title" VALUES (2996, 'UPF', 'InventoryUnitHost', 'PGWAE12', 'NumberOfCpu', 'CPU数量', '主机配置的CPU数量'); +INSERT INTO "cm_title" VALUES (2997, 'UPF', 'InventoryUnitHost', 'PGWAE13', 'MemSize', '内存容量', '主机配置的内存容量'); +INSERT INTO "cm_title" VALUES (2998, 'UPF', 'InventoryUnitHost', 'PGWAE14', 'HardDiskSize', '硬盘容量', '主机配置的硬盘容量'); +INSERT INTO "cm_title" VALUES (2999, 'UPF', 'InventoryUnitAccessory', 'UPFAF01', 'Id', '标识符', '命名属性 '); +INSERT INTO "cm_title" VALUES (3000, 'UPF', 'InventoryUnitAccessory', 'UPFAF02', 'UserLabel', '用户友好名', '用户友好名,由EMS厂商自己指定,做为其内部标识,并可被NMS修改。'); +INSERT INTO "cm_title" VALUES (3001, 'UPF', 'InventoryUnitAccessory', 'UPFAF03', 'VendorUnitFamilyType', '归属类型', '由供应商提供的便于记忆的资产单元的归属类型'); +INSERT INTO "cm_title" VALUES (3002, 'UPF', 'InventoryUnitAccessory', 'UPFAF04', 'VendorUnitTypeNumber', '资产单元类型版本号', '由供应商提供的可唯一识别资产单元类型及版本的号码'); +INSERT INTO "cm_title" VALUES (3003, 'UPF', 'InventoryUnitAccessory', 'UPFAF05', 'VendorName', '供应商名称', '供应商名称'); +INSERT INTO "cm_title" VALUES (3004, 'UPF', 'InventoryUnitAccessory', 'UPFAF06', 'SerialNumber', '资产序列号', '资产序列号'); +INSERT INTO "cm_title" VALUES (3005, 'UPF', 'InventoryUnitAccessory', 'UPFAF07', 'VersionNumber', '资产版本号', '与VendorUnitTypeNumber相关的版本信息'); +INSERT INTO "cm_title" VALUES (3006, 'UPF', 'InventoryUnitAccessory', 'UPFAF08', 'DateOfManufacture', '生产日期', '生产日期'); +INSERT INTO "cm_title" VALUES (3007, 'UPF', 'InventoryUnitAccessory', 'UPFAF09', 'DateOfLastService', '最近服务日期', '最近服务的日期(最近一次恢复工作正常状态的时间)'); +INSERT INTO "cm_title" VALUES (3008, 'UPF', 'InventoryUnitAccessory', 'UPFAF10', 'ManufacturerData', '特殊信息', '设备商填写的特殊信息'); +INSERT INTO "cm_title" VALUES (3009, 'UPF', 'InventoryUnitAccessory', 'UPFAF11', 'AccessoryPosition', '附件位置', '附件所在机架的编号'); +INSERT INTO "cm_title" VALUES (3010, 'UPF', 'InventoryUnitAccessory', 'UPFAF12', 'AccessoryType', '附属设备类型', '自定义,例如:内部交换机,路由器,磁盘阵列等,仅适用于ManagedElement内部的附属设备。'); +INSERT INTO "cm_title" VALUES (3011, 'UPF', 'InventoryUnitAccessory', 'UPFAF13', 'AddtionalInformation', '描述信息', '设备自身特有的属性描述'); +INSERT INTO "cm_title" VALUES (3012, 'UPF', 'UpfFunction', 'UPFAG01', 'Id', '标识符', '命名属性 '); +INSERT INTO "cm_title" VALUES (3013, 'UPF', 'UpfFunction', 'UPFAG02', 'UserLabel', '用户友好名', '对象名称'); +INSERT INTO "cm_title" VALUES (3014, 'UPF', 'UpfFunction', 'UPFAG03', 'AdministrativeState', '管理状态', '管理的状态,枚举型 {Locked, Unlocked, ShuttingDown}'); +INSERT INTO "cm_title" VALUES (3015, 'UPF', 'UpfFunction', 'UPFAG04', 'OperationalState', '运行状态', '运行的状态,枚举型{Disabled,Enabled}'); +INSERT INTO "cm_title" VALUES (3016, 'UPF', 'UpfFunction', 'UPFAG05', 'VnfInstanceId', '虚拟化实例标识', '虚拟网元的InstanceId'); +INSERT INTO "cm_title" VALUES (3017, 'UPF', 'UpfFunction', 'UPFAG06', 'MaxQosFlows', '最大QoS流数', '当前软硬件配置条件下(如licence限制),UPF最大支持的并发QoS流数。'); +INSERT INTO "cm_title" VALUES (3018, 'UPF', 'UpfFunction', 'UPFAG07', 'MaxThroughput', '最大数据吞吐率', 'UPF最大每秒能处理的数据量,包括双向流量。'); +INSERT INTO "cm_title" VALUES (3019, 'UPF', 'EpRpDynN9Upf', 'UPFAH01', 'Id', '标识符', '命名属性 '); +INSERT INTO "cm_title" VALUES (3020, 'UPF', 'EpRpDynN9Upf', 'UPFAH02', 'UserLabel', '用户友好名', '用户友好名,由EMS厂商自己指定,做为其内部标识,并可被NMS修改。'); +INSERT INTO "cm_title" VALUES (3021, 'UPF', 'EpRpDynN9Upf', 'UPFAH03', 'LocIpAddrList', '本端IP地址列表', '参考点所关联的本端网元的IP地址列表(Ipv4或Ipv6的地址格式)。'); +INSERT INTO "cm_title" VALUES (3022, 'UPF', 'EpRpDynN9Upf', 'UPFAH04', 'FarIpSubnetworkList', '远端IP子网列表', '参考点所关联的远端IP子网列表: +1.Ipv4:List of Struct{ + Subnetwork:string, + Mask:string } +若子网仅包含一个IP地址,则Subnetwork为该IP地址,Mask为255.255.255.255。 +若子网地址为0.0.0.0,Mask可为任意值(通常也取0.0.0.0),代表所有局向。 +2.Ipv6:子网+前缀方式,样例供参考: +{(2409:802F:0000:0207:0000:0000:1001:0502,128),(2409:802F:0000:0207:0000:0000:1001:0501,128)}或{(2409:802F:0000:0207::1001:0502,128),(2409:802F:0000:0207::1001:0501,128)}或{(2409:802F:0:207::1001:502,128),(2409:802F:0:207::1001:501,128)}'); +INSERT INTO "cm_title" VALUES (3023, 'UPF', 'EpRpDynN3Upf', 'UPFAI01', 'Id', '标识符', '命名属性 '); +INSERT INTO "cm_title" VALUES (3024, 'UPF', 'EpRpDynN3Upf', 'UPFAI02', 'UserLabel', '用户友好名', '用户友好名,由EMS厂商自己指定,做为其内部标识,并可被NMS修改。'); +INSERT INTO "cm_title" VALUES (3025, 'UPF', 'EpRpDynN3Upf', 'UPFAI03', 'LocIpAddrList', '本端IP地址列表', '参考点所关联的本端网元的IP地址列表(Ipv4或Ipv6的地址格式)。'); +INSERT INTO "cm_title" VALUES (3026, 'UPF', 'EpRpDynN3Upf', 'UPFAI04', 'FarIpSubnetworkList', '远端IP子网列表', '参考点所关联的远端IP子网列表: +1.Ipv4:List of Struct{ + Subnetwork:string, + Mask:string } +若子网仅包含一个IP地址,则Subnetwork为该IP地址,Mask为255.255.255.255。 +若子网地址为0.0.0.0,Mask可为任意值(通常也取0.0.0.0),代表所有局向。 +2.Ipv6:子网+前缀方式,样例供参考: +{(2409:802F:0000:0207:0000:0000:1001:0502,128),(2409:802F:0000:0207:0000:0000:1001:0501,128)}或{(2409:802F:0000:0207::1001:0502,128),(2409:802F:0000:0207::1001:0501,128)}或{(2409:802F:0:207::1001:502,128),(2409:802F:0:207::1001:501,128)}'); +INSERT INTO "cm_title" VALUES (3027, 'UPF', 'AmfFunction', 'UPFAJ01', 'Id', '标识符', '对象标识,只在OMC范围内有效'); +INSERT INTO "cm_title" VALUES (3028, 'UPF', 'AmfFunction', 'UPFAJ02', 'UserLabel', '用户友好名', '对象名称'); +INSERT INTO "cm_title" VALUES (3029, 'UPF', 'AmfFunction', 'UPFAJ03', 'AdministrativeState', '管理状态', '管理的状态,取值范围为{Locked,Unlocked,ShuttingDown}'); +INSERT INTO "cm_title" VALUES (3030, 'UPF', 'AmfFunction', 'UPFAJ04', 'OperationalState', '运行状态', '运行的状态,取值范围为{Disabled, Enabled}'); +INSERT INTO "cm_title" VALUES (3031, 'UPF', 'AmfFunction', 'UPFAJ05', 'VnfInstanceId', '虚拟化实例标识', '虚拟网元的InstanceId'); +INSERT INTO "cm_title" VALUES (3032, 'UPF', 'AmfFunction', 'UPFAJ06', 'Fqdn', 'AmfFunction的FQDN', '基于服务化接口的AmfFunction的FQDN,FQDN结构请参见TS23.003.'); +INSERT INTO "cm_title" VALUES (3033, 'UPF', 'SmfFunction', 'UPFAK01', 'Id', '标识符', '命名属性 '); +INSERT INTO "cm_title" VALUES (3034, 'UPF', 'SmfFunction', 'UPFAK02', 'UserLabel', '用户友好名', '对象名称'); +INSERT INTO "cm_title" VALUES (3035, 'UPF', 'SmfFunction', 'UPFAK03', 'AdministrativeState', '管理状态', '管理的状态,枚举型 {Locked, Unlocked, ShuttingDown}'); +INSERT INTO "cm_title" VALUES (3036, 'UPF', 'SmfFunction', 'UPFAK04', 'OperationalState', '运行状态', '运行的状态,枚举型{Disabled,Enabled}'); +INSERT INTO "cm_title" VALUES (3037, 'UPF', 'SmfFunction', 'UPFAK05', 'VnfInstanceId', '虚拟化实例标识', '虚拟网元的InstanceId'); +INSERT INTO "cm_title" VALUES (3038, 'UPF', 'SmfFunction', 'UPFAK06', 'Fqdn', 'SmfFunction的FQDN', '基于服务化接口的SmfFunction的FQDN,FQDN结构请参见TS23.003'); +INSERT INTO "cm_title" VALUES (3039, 'UPF', 'UdrFunction', 'UPFAL01', 'Id', '标识符', '命名属性 '); +INSERT INTO "cm_title" VALUES (3040, 'UPF', 'UdrFunction', 'UPFAL02', 'UserLabel', '用户友好名', '对象名称'); +INSERT INTO "cm_title" VALUES (3041, 'UPF', 'UdrFunction', 'UPFAL03', 'AdministrativeState', '管理状态', '管理的状态,取值范围为{Locked,Unlocked,ShuttingDown}'); +INSERT INTO "cm_title" VALUES (3042, 'UPF', 'UdrFunction', 'UPFAL04', 'OperationalState', '运行状态', '运行的状态,取值范围为{Disabled, Enabled}'); +INSERT INTO "cm_title" VALUES (3043, 'UPF', 'UdrFunction', 'UPFAL05', 'VnfInstanceId', '虚拟化实例标识', '虚拟网元的InstanceId'); +INSERT INTO "cm_title" VALUES (3044, 'UPF', 'UdrFunction', 'UPFAL06', 'Fqdn', 'UdrFunction的FQDN', '基于服务化接口的UdrFunction的FQDN,FQDN结构请参见TS23.003。'); +INSERT INTO "cm_title" VALUES (3045, 'UPF', 'AusfFunction', 'UDMAM01', 'Id', '标识符', '命名属性 '); +INSERT INTO "cm_title" VALUES (3046, 'UPF', 'AusfFunction', 'UDMAM02', 'UserLabel', '用户友好名', '对象名称'); +INSERT INTO "cm_title" VALUES (3047, 'UPF', 'AusfFunction', 'UDMAM03', 'AdministrativeState', '管理状态', '管理的状态,取值范围为{Locked,Unlocked,ShuttingDown}'); +INSERT INTO "cm_title" VALUES (3048, 'UPF', 'AusfFunction', 'UDMAM04', 'OperationalState', '运行状态', '运行的状态,取值范围为{Disabled, Enabled}'); +INSERT INTO "cm_title" VALUES (3049, 'UPF', 'AusfFunction', 'UDMAM05', 'VnfInstanceId', '虚拟化实例标识', '虚拟网元的InstanceId'); +INSERT INTO "cm_title" VALUES (3050, 'UPF', 'AusfFunction', 'UDMAM06', 'Fqdn', 'AusfFunction的FQDN', '基于服务化接口的AusfFunction的FQDN,FQDN结构请参见TS23.003。'); +INSERT INTO "cm_title" VALUES (3051, 'UPF', 'IPResource', 'UPFAN01', 'Id', '标识符', '命名属性 '); +INSERT INTO "cm_title" VALUES (3052, 'UPF', 'IPResource', 'UPFAN02', 'UserLabel', '用户友好名', '用户友好名,由EMS厂商自己指定,做为其内部标识,并可被NMS修改。'); +INSERT INTO "cm_title" VALUES (3053, 'UPF', 'IPResource', 'UPFAN03', 'InterfaceType', '接口类型', '包含管理接口和业务接口(信令和媒体)。枚举值{Mgt,N4,N3,N9,N19},备注:管理接口为Mgt。'); +INSERT INTO "cm_title" VALUES (3054, 'UPF', 'IPResource', 'UPFAN04', 'LocIpV4AddrList', '本端IPV4地址列表', '参考点所关联的本端网元的IP地址列表(Ipv4地址格式),如无IPV4地址,填写{Default}。'); +INSERT INTO "cm_title" VALUES (3055, 'UPF', 'IPResource', 'UPFAN05', 'LocIpV6AddrList', '本端IPV6地址列表', '参考点所关联的本端网元的IP地址列表(Ipv6地址格式),如无IPV6地址,填写{Default}。'); + +-- Dump completed on 2024-03-06 17:27:01 diff --git a/build/database/lite/common/config.sql b/build/database/lite/common/config.sql new file mode 100644 index 00000000..46cc5e91 --- /dev/null +++ b/build/database/lite/common/config.sql @@ -0,0 +1,62 @@ +-- ---------------------------- +-- Table structure for config +-- ---------------------------- +DROP TABLE IF EXISTS "config"; +CREATE TABLE "config" ( + "id" integer NOT NULL, + "module_name" text(32) NOT NULL, + "config_tag" text(32) NOT NULL, + "title_json" text, + "value" text(255), + "value_json" text, + "update_time" text, + "comment" text(255), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table config +-- ---------------------------- +CREATE UNIQUE INDEX "idx_uni_mod_tag" +ON "config" ( + "module_name" ASC, + "config_tag" ASC +); + +-- ---------------------------- +-- Records of config +-- ---------------------------- +INSERT INTO "config" VALUES (1, 'Alarm', 'historyDuration', '{"cn": "历史告警保留时间间隔(天)", "en": "History alarm duration(day)"}', '90', NULL, '2023-07-25 20:41:18', NULL); +INSERT INTO "config" VALUES (2, 'LOG', 'logDuration', '{"cn": "日志保留时间(天)", "en": "Log saved duration(day)"}', '90', NULL, '2023-05-08 17:40:28', NULL); +INSERT INTO "config" VALUES (3, 'LOG', 'logCapacity', '{"cn": "日志占用空间(MB)", "en": "Log occupation space(MB)"}', '1344', NULL, '2023-08-02 17:20:39', NULL); +INSERT INTO "config" VALUES (4, 'PM', 'pmBackupTask', '{"cn": "性能数据报表定期备份(天)", "en": "PM data backup task(day)"}', '', NULL, '2023-09-08 13:59:09', NULL); +INSERT INTO "config" VALUES (5, 'Alarm', 'syncTaskPeriod', '{"cn": "告警同步周期时长(小时)", "en": "Alarm sync task period(小时)"}', '24', '{"alarmEnd":"2023-08-21 00:00:00","alarmStart":"2023-08-08 00:00:00","syncTaskPeriod":"23","unit":"hour"}', '2023-08-10 20:03:38', NULL); +INSERT INTO "config" VALUES (6, 'Alarm', 'displayFilter', '{"cn": "告警显示过滤设置", "en": "Alarm filter setting"}', '', '{"ne_type":"","ne_id":"","orig_severity":"","alarm_code":"","pv_flag":""}', '2023-12-26 10:13:07', NULL); +INSERT INTO "config" VALUES (7, 'Alarm', 'autoAlarmAck', '{"cn": "告警自动确认设置", "en": "Alarm automatic ack setting"}', '', '{"alarm_status":"0","alarm_type":"EquipmentAlarm","orig_severity":"Major","ack_user":"admin"}', '2023-07-28 08:07:02', NULL); +INSERT INTO "config" VALUES (8, 'PM', 'keepPMCKpi', '{"cn": "删除指标保留时长(天)", "en": "Keep custom pm kpi duration(day)"}', '4', NULL, '2023-07-29 11:01:45', NULL); +INSERT INTO "config" VALUES (9, 'Security', 'sessionExpires', '{"cn": "登录会话超时时长(秒)", "en": "User''s session expires(second)"}', '1800000', NULL, '2023-07-31 09:45:17', NULL); +INSERT INTO "config" VALUES (10, 'Alarm', 'forwardAlarm', '{"cn": "告警前转接口设置", "en": "Alarm forward interface"}', NULL, '[{"interface":"Email","to_user":[]},{"interface":"SMS","to_user":["138111112222"]}]', '2024-02-23 14:57:04', NULL); +INSERT INTO "config" VALUES (17, 'Security', 'highRisk', '{"cn":"高危指令设置","en":"High risk instruction settings"}', '1', '[{"timePart":"04:00:00,06:00:00","text":"请不要重复111"},{"timePart":"07:00:00,14:00:00","text":"请不要重复22222"},{"timePart":"09:00:00,15:00:00","text":"请不要重复3333"}]', '2023-08-16 11:23:37', NULL); +INSERT INTO "config" VALUES (18, 'Gold', 'goldSet', '{"cn":"黄金指标设置","en":"Gold Index Setting"}', NULL, '{"goldWeek":"1","omc_name":"23123","login_url":"231231","handshake_url":"321312","grant_type":"321312","user_name":"32131","user_key":"22321","max_data_len":"231","kpi_report_url":"1231231","time_out":"2131"}', '2023-08-13 18:15:01', NULL); +INSERT INTO "config" VALUES (19, 'Security', 'userTimeSet', '{"cn":"账号有效期设置","en":"Account validity period setting"}', '18000', NULL, '2023-08-10 14:18:57', NULL); +INSERT INTO "config" VALUES (20, 'Security', 'pwdStrong', '{"cn":"密码强度设置","en":"Account validity period setting"}', NULL, '{"pwdMinLength":"4","pwdTime":"12","strongNum":"1","outTimeMsg":"密码有效期已过,请联系管理员进行修改密码"}', '2023-08-14 20:18:21', NULL); +INSERT INTO "config" VALUES (22, 'Nbi', 'nbiSet', '{"cn":"北向接口设置","en":"Interface settings"}', NULL, '{"listeningAddress":"21312222222222222222","listeningPort":"312","nbiFileTime":"12312312"}', '2023-08-20 14:30:07', NULL); +INSERT INTO "config" VALUES (25, 'SystemMonitor', 'cpuThreshold', '{"cn":"CPU阈值及告警级别设置","en":"threshold of CPU settings"}', NULL, '{"Major":"60","Minor":"50","Critical":"80","Warning":"90","Event":"75"}', '2023-08-15 18:06:13', NULL); +INSERT INTO "config" VALUES (26, 'SystemMonitor', 'sampleTime', '{"cn":"系统监控采样时间设置","en":"settings"}', NULL, '{"sampleTime":"120"}', '2023-09-04 14:53:24', NULL); +INSERT INTO "config" VALUES (27, 'SystemMonitor', 'fileThreshold', '{"cn":"文件资源阈值及告警级别设置","en":"threshold of file threshold settings"}', NULL, '{"type":"cpuThreshold","Major":"12","Minor":"","Critical":"","Warning":"","Event":""}', '2023-08-15 18:44:18', NULL); +INSERT INTO "config" VALUES (28, 'SystemMonitor', 'RAMThreshold', '{"cn":"内存阈值及告警级别设置","en":"threshold of RAM threshold settings"}', NULL, '{"Major":"", "Minor": "","Critical": "","Warning": "","Event":""}', '2023-08-15 17:34:22', NULL); +INSERT INTO "config" VALUES (29, 'SystemMonitor', 'backupHandle', '{"cn":"手动备份设置","en":"Periodic backup Settings"}', NULL, '{"isAuto":"1","backup_way":"1","backup_value":"2","backup_time":"2023-08-30 18:41:00","backup_medium":"/usr/backup"}', '2023-09-05 11:44:24', 'backup_way:备份方式,backup_value:备份内容,backup_time:备份时间,backup_medium:备份介质,isAuto:是否开启自动备份,"backup_cycle":备份周期'); +INSERT INTO "config" VALUES (30, 'SystemMonitor', 'databaseThreshold', '{"cn":"数据库阈值及告警级别设置","en":"threshold of database settings"}', NULL, '{"Major":"", "Minor": "","Critical": "","Warning": "","Event":""}', '2023-08-15 17:32:55', NULL); +INSERT INTO "config" VALUES (31, 'LOG', 'remoteLogSet', '{"cn":"日志远程输出设置","en":"Log Remote Output Settings"}', NULL, '{"logIp":"8.8.8.8","logDirectory":"/tmp"}', '2023-10-30 18:37:25', NULL); +INSERT INTO "config" VALUES (32, 'MML', 'operationSet', '{"cn":"操作维护接口设置","en":"Operation settings"}', NULL, '{"listeningAddress":"192.168.1.100","listeningPort":32130}', '2023-10-20 11:35:40', NULL); +INSERT INTO "config" VALUES (33, 'LOG', 'ftpLogSet', '{"cn":"FTP日志文件接口设置","en":"FTP Log File Interface Settings"}', '7', '{"agreement":"sftp","ftpLog":"12","toIp":"192.168.4.130","directory":"/usr/local/omc/databse"}', '2023-09-05 11:42:01', NULL); +INSERT INTO "config" VALUES (34, 'NF', 'NfConfigSet', '{"cn":"自动备份任务备份时间设置","en":"Automatic backup task backup time setting + +"}', '24', NULL, '2023-08-21 18:05:03', NULL); +INSERT INTO "config" VALUES (35, 'SystemMonitor', 'backupCycle', '{"cn":"周期备份设置","en":"Periodic backup Settings"}', NULL, '{"isAuto":"1","backup_way":"1","backup_cycle":"5","backup_value":"0","backup_time":"08:00:00","backup_medium":"/usr/local/omc/backup"}', '2023-09-05 11:44:21', 'backup_way:备份方式,backup_value:备份内容,backup_time:备份时间,backup_medium:备份介质,isAuto:是否开启自动备份,"backup_cycle":备份周期'); +INSERT INTO "config" VALUES (36, 'Security', 'loginSecurity', '{"cn":"登录策略设置","en":"Login Security setting"}', '', '{"logintime_range":"08:00:00 - 18:00:00","switch":"0","ipRange":"192.168.4.1/192.168.21.333/192.168.21.114/192.168.2.119/192.168.88.192/192.168.2.112","password_limit_time":"60","limit_num":"5"}', '2023-08-28 15:01:07', '"logintime_range":"允许登录时间范围","start_IP":"开始IP","end_IP":"结束IP","password_limit_time":"密码错误限定时间","limit_num":"限时内密码最大错误次数"'); +INSERT INTO "config" VALUES (37, 'System', 'logo', '{"cn":"系统LOGO","en":"System LOGO"}', 'logo30.png', '', '2023-09-20 19:40:03', ''); +INSERT INTO "config" VALUES (42, 'System', 'href', '{"cn":"官方链接","en":"Href"}', 'https://www.agrandtech.com.cn/', NULL, '2023-10-12 14:19:51', NULL); +INSERT INTO "config" VALUES (43, 'BackUp', 'BackUpSaveTime', '{"cn": "网元配置文件保留时间(天)", "en": "Retention time of network element configuration files(day)"}', '30', NULL, '2023-10-21 16:08:20', NULL); + +-- Dump completed on 2024-03-06 17:27:01 diff --git a/build/database/lite/common/group.sql b/build/database/lite/common/group.sql new file mode 100644 index 00000000..c2ef4ab6 --- /dev/null +++ b/build/database/lite/common/group.sql @@ -0,0 +1,39 @@ +-- ---------------------------- +-- Table structure for group +-- ---------------------------- +DROP TABLE IF EXISTS "group"; +CREATE TABLE "group" ( + "id" integer NOT NULL, + "name" text(255) NOT NULL, + "description" text(255), + "create_time" text, + PRIMARY KEY ("name") +); + +-- ---------------------------- +-- Indexes structure for table group +-- ---------------------------- +CREATE INDEX "fk_account_id" +ON "group" ( + "id" ASC +); +CREATE INDEX "name" +ON "group" ( + "name" ASC +); + +-- ---------------------------- +-- Records of group +-- ---------------------------- +INSERT INTO "group" VALUES (1, 'admin', 'administrator', '2023-05-13 11:04:54'); +INSERT INTO "group" VALUES (3, 'audit', 'audit group', '2023-05-16 22:48:54'); +INSERT INTO "group" VALUES (7, 'manager', 'manager', '2023-08-08 13:02:47'); +INSERT INTO "group" VALUES (6, 'monitor', 'monitor', '2023-08-24 22:34:44'); +INSERT INTO "group" VALUES (9, 'ne', 'all ne', '2023-08-21 11:24:33'); +INSERT INTO "group" VALUES (10, 'omc', 'omc', '2023-08-24 09:55:54'); +INSERT INTO "group" VALUES (2, 'operator', 'operator', '2023-05-16 22:49:42'); +INSERT INTO "group" VALUES (4, 'oss', 'oss ', '2023-05-16 22:54:50'); +INSERT INTO "group" VALUES (8, 'test', 'test group', '2023-08-09 15:57:34'); +INSERT INTO "group" VALUES (5, 'user', 'user group', '2023-05-16 22:48:46'); + +-- Dump completed on 2024-03-06 17:27:02 diff --git a/build/database/lite/common/kpi_title.sql b/build/database/lite/common/kpi_title.sql new file mode 100644 index 00000000..61675ebd --- /dev/null +++ b/build/database/lite/common/kpi_title.sql @@ -0,0 +1,464 @@ +-- ---------------------------- +-- Table structure for kpi_title +-- ---------------------------- +DROP TABLE IF EXISTS "kpi_title"; +CREATE TABLE "kpi_title" ( + "id" integer NOT NULL, + "ne_type" text(16), + "kpi_id" text(16), + "title_json" text, + "cn_title" text(255), + "en_title" text(255), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table kpi_title +-- ---------------------------- +CREATE INDEX "idx_type" +ON "kpi_title" ( + "ne_type" ASC +); + +-- ---------------------------- +-- Records of kpi_title +-- ---------------------------- +INSERT INTO "kpi_title" VALUES (1, 'AMF', 'AMF.01', '{"cn": "AMF注册态用户数", "en": "AMF.RegSub"}', 'AMF注册态用户数', 'AMF.RegSub'); +INSERT INTO "kpi_title" VALUES (2, 'AMF', 'AMF.02', '{"cn": "AMF初始注册请求次数", "en": "AMF.AttInitReg"}', 'AMF初始注册请求次数', '5G Registration Request'); +INSERT INTO "kpi_title" VALUES (3, 'AMF', 'AMF.03', '{"cn": "AMF初始注册成功次数", "en": "AMF.SuccInitReg"}', 'AMF初始注册成功次数', '5G Registration Success'); +INSERT INTO "kpi_title" VALUES (4, 'AMF', 'AMF.04', '{"cn": "AMF初始注册失败次数_非法用户", "en": "AMF.FailedInitReg.3"}', 'AMF初始注册失败次数_非法用户', 'AMF.FailedInitReg.3'); +INSERT INTO "kpi_title" VALUES (5, 'AMF', 'AMF.05', '{"cn": "AMF初始注册失败次数_PEI不允许", "en": "AMF.FailedInitReg.5"}', 'AMF初始注册失败次数_PEI不允许', 'AMF.FailedInitReg.5'); +INSERT INTO "kpi_title" VALUES (6, 'AMF', 'AMF.06', '{"cn": "AMF初始注册失败次数_非法设备", "en": "AMF.FailedInitReg.6"}', 'AMF初始注册失败次数_非法设备', 'AMF.FailedInitReg.6'); +INSERT INTO "kpi_title" VALUES (7, 'AMF', 'AMF.07', '{"cn": "AMF初始注册失败次数_5GS服务不允许_用户原因", "en": "AMF.FailedInitReg.7.User"}', 'AMF初始注册失败次数_5GS服务不允许_用户原因', 'AMF.FailedInitReg.7.User'); +INSERT INTO "kpi_title" VALUES (8, 'AMF', 'AMF.08', '{"cn": "AMF初始注册失败次数_跟踪区内无合适小区_用户原因", "en": "AMF.FailedInitReg.15.User"}', 'AMF初始注册失败次数_跟踪区内无合适小区_用户原因', 'AMF.FailedInitReg.15.User'); +INSERT INTO "kpi_title" VALUES (9, 'AMF', 'AMF.09', '{"cn": "AMF初始注册失败次数_N1模式不允许", "en": "AMF.FailedInitReg.27"}', 'AMF初始注册失败次数_N1模式不允许', 'AMF.FailedInitReg.27'); +INSERT INTO "kpi_title" VALUES (10, 'AMF', 'AMF.10', '{"cn": "AMF初始注册失败次数_PLMN不允许", "en": "AMF.FailedInitReg.11"}', 'AMF初始注册失败次数_PLMN不允许', 'AMF.FailedInitReg.11'); +INSERT INTO "kpi_title" VALUES (11, 'AMF', 'AMF.11', '{"cn": "AMF初始注册失败次数_跟踪区不允许", "en": "AMF.FailedInitReg.12"}', 'AMF初始注册失败次数_跟踪区不允许', 'AMF.FailedInitReg.12'); +INSERT INTO "kpi_title" VALUES (12, 'AMF', 'AMF.12', '{"cn": "AMF初始注册失败次数_漫游跟踪区禁止接入", "en": "AMF.FailedInitReg.13"}', 'AMF初始注册失败次数_漫游跟踪区禁止接入', 'AMF.FailedInitReg.13'); +INSERT INTO "kpi_title" VALUES (13, 'AMF', 'AMF.13', '{"cn": "AMF初始注册失败次数_无可用网络切片", "en": "AMF.FailedInitReg.62"}', 'AMF初始注册失败次数_无可用网络切片', 'AMF.FailedInitReg.62'); +INSERT INTO "kpi_title" VALUES (14, 'AMF', 'AMF.14', '{"cn": "AMF初始注册失败次数_协议错误_用户原因", "en": "AMF.FailedInitReg.111.User"}', 'AMF初始注册失败次数_协议错误_用户原因', 'AMF.FailedInitReg.111.User'); +INSERT INTO "kpi_title" VALUES (15, 'AMF', 'AMF.15', '{"cn": "AMF一次寻呼响应次数", "en": "AMF.FirstPagingSucc"}', 'AMF一次寻呼响应次数', 'AMF.FirstPagingSucc'); +INSERT INTO "kpi_title" VALUES (16, 'AMF', 'AMF.16', '{"cn": "AMF二次寻呼响应次数", "en": "AMF.SecondPagingSucc"}', 'AMF二次寻呼响应次数', 'AMF.SecondPagingSucc'); +INSERT INTO "kpi_title" VALUES (17, 'AMF', 'AMF.17', '{"cn": "AMF寻呼请求次数", "en": "AMF.PagAtt"}', 'AMF寻呼请求次数', 'AMF.PagAtt'); +INSERT INTO "kpi_title" VALUES (18, 'AMF', 'AMF.18', '{"cn": "AMF业务请求被拒次数", "en": "AMF.FailServiceReq"}', 'AMF业务请求被拒次数', 'AMF.FailServiceReq'); +INSERT INTO "kpi_title" VALUES (19, 'AMF', 'AMF.19', '{"cn": "AMF业务请求尝试次数", "en": "AMF.AttServiceReq"}', 'AMF业务请求尝试次数', 'AMF.AttServiceReq'); +INSERT INTO "kpi_title" VALUES (20, 'SMF', 'SMF.01', '{"cn": "5G实时PDU会话数", "en": "SMF.MeanPduSession"}', '5G实时PDU会话数', 'SMF.MeanPduSession'); +INSERT INTO "kpi_title" VALUES (21, 'SMF', 'SMF.02', '{"cn": "PDU会话建立成功次数", "en": "SMF.SuccCreatePduSession"}', 'PDU会话建立成功次数', 'SMF.SuccCreatePduSession'); +INSERT INTO "kpi_title" VALUES (22, 'SMF', 'SMF.03', '{"cn": "PDU会话建立请求次数", "en": "SMF.AttCreatePduSession"}', 'PDU会话建立请求次数', 'SMF.AttCreatePduSession'); +INSERT INTO "kpi_title" VALUES (23, 'SMF', 'SMF.04', '{"cn": "IMS PDU会话建立成功次数", "en": "SMF.SuccCreatePduSession._Ims"}', 'IMS PDU会话建立成功次数', 'SMF.SuccCreatePduSession._Ims'); +INSERT INTO "kpi_title" VALUES (24, 'SMF', 'SMF.05', '{"cn": "IMS PDU会话建立请求次数", "en": "SMF.AttCreatePduSession._Ims"}', 'IMS PDU会话建立请求次数', 'SMF.AttCreatePduSession._Ims'); +INSERT INTO "kpi_title" VALUES (25, 'SMF', 'SMF.06', '{"cn": "EPS-Fallback成功数", "en": "SMF.SuccSmfModifyBearerResponse.Epsfb"}', 'EPS-Fallback成功数', 'SMF.SuccSmfModifyBearerResponse.Epsfb'); +INSERT INTO "kpi_title" VALUES (26, 'SMF', 'SMF.07', '{"cn": "EPS-Fallback请求数", "en": "SMF.AttSmfModifyPduSession.Epsfb"}', 'EPS-Fallback请求数', 'SMF.AttSmfModifyPduSession.Epsfb'); +INSERT INTO "kpi_title" VALUES (27, 'UDM', 'UDM.01', '{"cn": "5G注册用户数", "en": "UDR.5gActSub"}', '5G注册用户数', 'UDR.5gActSub'); +INSERT INTO "kpi_title" VALUES (28, 'UDM', 'UDM.02', '{"cn": "AMF发起的UECM注册请求次数", "en": "UDM.AmfUecmRegReq"}', 'AMF发起的UECM注册请求次数', 'UDM.AmfUecmRegReq'); +INSERT INTO "kpi_title" VALUES (29, 'UDM', 'UDM.03', '{"cn": "AMF发起的UECM注册成功次数", "en": "UDM.AmfUecmRegSucc"}', 'AMF发起的UECM注册成功次数', 'UDM.AmfUecmRegSucc'); +INSERT INTO "kpi_title" VALUES (30, 'UDM', 'UDM.04', '{"cn": "SMF发起的UECM注册成功次数", "en": "UDM.SmfUecmRegSucc"}', 'SMF发起的UECM注册成功次数', 'UDM.SmfUecmRegSucc'); +INSERT INTO "kpi_title" VALUES (31, 'UDM', 'UDM.05', '{"cn": "SMF发起的UECM注册请求次数", "en": "UDM.SmfUecmRegReq"}', 'SMF发起的UECM注册请求次数', 'UDM.SmfUecmRegReq'); +INSERT INTO "kpi_title" VALUES (32, 'UDM', 'UDM.06', '{"cn": "4G注册用户数", "en": "SUB.EpsActSubsInHss"}', '4G注册用户数', 'SUB.EpsActSubsInHss'); +INSERT INTO "kpi_title" VALUES (33, 'UDM', 'UDM.07', '{"cn": "4G鉴权信息查询成功次数", "en": "DIAM.AucInfoAnsSucc"}', '4G鉴权信息查询成功次数', 'DIAM.AucInfoAnsSucc'); +INSERT INTO "kpi_title" VALUES (34, 'UDM', 'UDM.08', '{"cn": "4G鉴权信息查询请求次数", "en": "DIAM.AucInfoReq"}', '4G鉴权信息查询请求次数', 'DIAM.AucInfoReq'); +INSERT INTO "kpi_title" VALUES (35, 'UDM', 'UDM.09', '{"cn": "4G更新位置成功次数", "en": "DIAM.UpdateLocationAnsSucc"}', '4G更新位置成功次数', 'DIAM.UpdateLocationAnsSucc'); +INSERT INTO "kpi_title" VALUES (36, 'UDM', 'UDM.10', '{"cn": "4G更新位置请求次数", "en": "DIAM.UpdateLocationReq"}', '4G更新位置请求次数', 'DIAM.UpdateLocationReq'); +INSERT INTO "kpi_title" VALUES (37, 'UDM', 'UDM.11', '{"cn": "SAR成功响应总次数", "en": "UR.SuccSAA"}', 'SAR成功响应总次数', 'UR.SuccSAA'); +INSERT INTO "kpi_title" VALUES (38, 'UDM', 'UDM.12', '{"cn": "SAR请求总次数", "en": "UR.AttSAR"}', 'SAR请求总次数', 'UR.AttSAR'); +INSERT INTO "kpi_title" VALUES (39, 'UDM', 'UDM.13', '{"cn": "LIR成功响应总次数", "en": "LIQ.SuccLIA"}', 'LIR成功响应总次数', 'LIQ.SuccLIA'); +INSERT INTO "kpi_title" VALUES (40, 'UDM', 'UDM.14', '{"cn": "LIR请求总次数", "en": "LIQ.AttLIR"}', 'LIR请求总次数', 'LIQ.AttLIR'); +INSERT INTO "kpi_title" VALUES (41, 'AUSF', 'AUSF.01', '{"cn": "鉴权成功次数", "en": "Ausf.UeAuthAnsSucc"}', '鉴权成功次数', 'Ausf.UeAuthAnsSucc'); +INSERT INTO "kpi_title" VALUES (42, 'AUSF', 'AUSF.02', '{"cn": "鉴权请求次数", "en": "Ausf.UeAuthReq"}', '鉴权请求次数', 'Ausf.UeAuthReq'); +INSERT INTO "kpi_title" VALUES (43, 'UPF', 'UPF.01', '{"cn": "PFCP会话建立成功次数", "en": "UPF.PfcpSessionEstabSucc"}', 'PFCP会话建立成功次数', 'UPF.PfcpSessionEstabSucc'); +INSERT INTO "kpi_title" VALUES (44, 'UPF', 'UPF.02', '{"cn": "PFCP会话建立请求次数", "en": "UPF.PfcpSessionEstabReq"}', 'PFCP会话建立请求次数', 'UPF.PfcpSessionEstabReq'); +INSERT INTO "kpi_title" VALUES (45, 'UPF', 'UPF.03', '{"cn": "N6接口上行字节数", "en": "UPF.N6OgOct"}', 'N6接口上行字节数', 'UPF.N6OgOct'); +INSERT INTO "kpi_title" VALUES (46, 'UPF', 'UPF.04', '{"cn": "N6接口下行字节数", "en": "UPF.N6IncOct"}', 'N6接口下行字节数', 'UPF Downlink Throughput'); +INSERT INTO "kpi_title" VALUES (47, 'UPF', 'UPF.05', '{"cn": "N3接口上行字节数", "en": "UPF.N3OgOct"}', 'N3接口上行字节数', 'UPF Uplink Throughput'); +INSERT INTO "kpi_title" VALUES (48, 'UPF', 'UPF.06', '{"cn": "N3接口下行字节数", "en": "UPF.N3IncOct"}', 'N3接口下行字节数', 'UPF.N3IncOct'); +INSERT INTO "kpi_title" VALUES (49, 'UPF', 'UPF.07', '{"cn": "SGi接口上行字节数", "en": "IP.PeakThroughputUlSgi"}', 'SGi接口上行字节数', 'IP.PeakThroughputUlSgi'); +INSERT INTO "kpi_title" VALUES (50, 'UPF', 'UPF.08', '{"cn": "SGi接口下行字节数", "en": "IP.PeakThroughputDlSgi"}', 'SGi接口下行字节数', 'IP.PeakThroughputDlSgi'); +INSERT INTO "kpi_title" VALUES (51, 'UPF', 'UPF.09', '{"cn": "S1-U接口上行字节数", "en": "GTP.OutOctS1uSgw"}', 'S1-U接口上行字节数', 'GTP.OutOctS1uSgw'); +INSERT INTO "kpi_title" VALUES (52, 'UPF', 'UPF.10', '{"cn": "S1-U接口下行字节数", "en": "GTP.IncOctS1uSgw"}', 'S1-U接口下行字节数', 'GTP.IncOctS1uSgw'); +INSERT INTO "kpi_title" VALUES (53, 'AMF', 'AMF.20', '{"cn": "EPS在线用户数", "en": "SUB.NbrSub.EcmIdle+SUB.NbrSub.EcmConnected"}', 'EPS在线用户数', 'SUB.NbrSub.EcmIdle+SUB.NbrSub.EcmConnected'); +INSERT INTO "kpi_title" VALUES (54, 'AMF', 'AMF.21', '{"cn": "EPS附着成功次数", "en": "MM.SuccEpsAttach"}', 'EPS附着成功次数', 'MM.SuccEpsAttach'); +INSERT INTO "kpi_title" VALUES (55, 'AMF', 'AMF.22', '{"cn": "EPS附着请求次数", "en": "MM.AttEpsAttach"}', 'EPS附着请求次数', 'MM.AttEpsAttach'); +INSERT INTO "kpi_title" VALUES (56, 'AMF', 'AMF.23', '{"cn": "EPS附着失败次数_非法用户", "en": "MM.FailedEpsAttach.3"}', 'EPS附着失败次数_非法用户', 'MM.FailedEpsAttach.3'); +INSERT INTO "kpi_title" VALUES (57, 'AMF', 'AMF.24', '{"cn": "EPS附着失败次数_非法终端", "en": "MM.FailedEpsAttach.5"}', 'EPS附着失败次数_非法终端', 'MM.FailedEpsAttach.5'); +INSERT INTO "kpi_title" VALUES (58, 'AMF', 'AMF.25', '{"cn": "EPS附着失败次数_非法ME", "en": "MM.FailedEpsAttach.6"}', 'EPS附着失败次数_非法ME', 'MM.FailedEpsAttach.6'); +INSERT INTO "kpi_title" VALUES (59, 'AMF', 'AMF.26', '{"cn": "EPS附着失败次数_EPS服务不允许_用户原因", "en": "MM.FailedEpsAttach.7.User"}', 'EPS附着失败次数_EPS服务不允许_用户原因', 'MM.FailedEpsAttach.7.User'); +INSERT INTO "kpi_title" VALUES (60, 'AMF', 'AMF.27', '{"cn": "EPS附着失败次数_EPS和非EPS服务不允许", "en": "MM.FailedEpsAttach.8"}', 'EPS附着失败次数_EPS和非EPS服务不允许', 'MM.FailedEpsAttach.8'); +INSERT INTO "kpi_title" VALUES (61, 'AMF', 'AMF.28', '{"cn": "EPS附着失败次数_跟踪区内无合适小区_用户原因", "en": "MM.FailedEpsAttach.15.User"}', 'EPS附着失败次数_跟踪区内无合适小区_用户原因', 'MM.FailedEpsAttach.15.User'); +INSERT INTO "kpi_title" VALUES (62, 'AMF', 'AMF.29', '{"cn": "EPS附着失败次数_ESM失败_用户原因", "en": "MM.FailedEpsAttach.19.User"}', 'EPS附着失败次数_ESM失败_用户原因', 'MM.FailedEpsAttach.19.User'); +INSERT INTO "kpi_title" VALUES (63, 'AMF', 'AMF.30', '{"cn": "MME一次寻呼响应次数", "en": "MM.FirstPagingSucc"}', 'MME一次寻呼响应次数', 'MM.FirstPagingSucc'); +INSERT INTO "kpi_title" VALUES (64, 'AMF', 'AMF.31', '{"cn": "MME二次寻呼响应次数", "en": "MM.SecondPagingSucc"}', 'MME二次寻呼响应次数', 'MM.SecondPagingSucc'); +INSERT INTO "kpi_title" VALUES (65, 'AMF', 'AMF.32', '{"cn": "MME寻呼请求次数", "en": "MM.PagAtt"}', 'MME寻呼请求次数', 'MM.PagAtt'); +INSERT INTO "kpi_title" VALUES (66, 'SMF', 'SMF.08', '{"cn": "4G在线会话数", "en": "SM.MeanNbrBearerPgw.Default"}', '4G在线会话数', 'SM.MeanNbrBearerPgw.Default'); +INSERT INTO "kpi_title" VALUES (67, 'SMF', 'SMF.09', '{"cn": "PGW缺省承载建立成功个数", "en": "SM.SuccCreateDefaultEpsBearer"}', 'PGW缺省承载建立成功个数', 'SM.SuccCreateDefaultEpsBearer'); +INSERT INTO "kpi_title" VALUES (68, 'SMF', 'SMF.10', '{"cn": "PGW缺省承载建立请求个数", "en": "SM.AttCreateDefaultEpsBearer"}', 'PGW缺省承载建立请求个数', 'SM.AttCreateDefaultEpsBearer'); +INSERT INTO "kpi_title" VALUES (69, 'SMF', 'SMF.11', '{"cn": "PGW专用承载建立成功个数", "en": "SM.SuccCreateDedicatedEpsBearer"}', 'PGW专用承载建立成功个数', 'SM.SuccCreateDedicatedEpsBearer'); +INSERT INTO "kpi_title" VALUES (70, 'SMF', 'SMF.12', '{"cn": "PGW专用承载建立请求个数", "en": "SM.AttCreateDedicatedEpsBearer"}', 'PGW专用承载建立请求个数', 'SM.AttCreateDedicatedEpsBearer'); +INSERT INTO "kpi_title" VALUES (71, 'SMF', 'SMF.13', '{"cn": "IMS缺省承载成功建立个数", "en": "SM.SuccCreateDefaultEpsBearer._Ims"}', 'IMS缺省承载成功建立个数', 'SM.SuccCreateDefaultEpsBearer._Ims'); +INSERT INTO "kpi_title" VALUES (72, 'SMF', 'SMF.14', '{"cn": "IMS缺省承载请求建立个数", "en": "SM.AttCreateDefaultEpsBearer._Ims"}', 'IMS缺省承载请求建立个数', 'SM.AttCreateDefaultEpsBearer._Ims'); +INSERT INTO "kpi_title" VALUES (73, 'AMF', 'AMF.A.02', '{"cn":"AMF移动性注册更新成功次数","en":"AMF.SuccMobiReg"}', 'AMF移动性注册更新成功次数', 'AMF.SuccMobiReg'); +INSERT INTO "kpi_title" VALUES (74, 'AMF', 'AMF.A.03', '{"cn":"AMF移动性注册更新失败次数","en":"AMF.FailedMobiReg"}', 'AMF移动性注册更新失败次数', 'AMF.FailedMobiReg'); +INSERT INTO "kpi_title" VALUES (75, 'AMF', 'AMF.A.04', '{"cn":"AMF紧急注册请求次数","en":"AMF.AttEmergReg"}', 'AMF紧急注册请求次数', 'AMF.AttEmergReg'); +INSERT INTO "kpi_title" VALUES (76, 'AMF', 'AMF.A.05', '{"cn":"AMF紧急注册成功次数","en":"AMF.SuccEmergReg"}', 'AMF紧急注册成功次数', 'AMF.SuccEmergReg'); +INSERT INTO "kpi_title" VALUES (77, 'AMF', 'AMF.A.06', '{"cn":"AMF紧急注册失败次数","en":"AMF.FailedEmergReg"}', 'AMF紧急注册失败次数', 'AMF.FailedEmergReg'); +INSERT INTO "kpi_title" VALUES (78, 'AMF', 'AMF.A.07', '{"cn":"UE发起的去注册请求次数","en":"AMF.AttUeDereg"}', 'UE发起的去注册请求次数', 'AMF.AttUeDereg'); +INSERT INTO "kpi_title" VALUES (79, 'AMF', 'AMF.A.08', '{"cn":"UE发起的去注册成功次数","en":"AMF.SuccUeDereg"}', 'UE发起的去注册成功次数', 'AMF.SuccUeDereg'); +INSERT INTO "kpi_title" VALUES (80, 'AMF', 'AMF.A.09', '{"cn":"AMF发起的去注册请求次数","en":"AMF.AttAmfDereg"}', 'AMF发起的去注册请求次数', 'AMF.AttAmfDereg'); +INSERT INTO "kpi_title" VALUES (81, 'AMF', 'AMF.A.10', '{"cn":"AMF发起的去注册成功次数","en":"AMF.SuccAmfDereg"}', 'AMF发起的去注册成功次数', 'AMF.SuccAmfDereg'); +INSERT INTO "kpi_title" VALUES (82, 'AMF', 'AMF.A.11', '{"cn":"UDM发起的去注册请求次数","en":"AMF.AttUdmDereg"}', 'UDM发起的去注册请求次数', 'AMF.AttUdmDereg'); +INSERT INTO "kpi_title" VALUES (83, 'AMF', 'AMF.A.12', '{"cn":"UDM发起的去注册成功次数","en":"AMF.SuccUdmDereg"}', 'UDM发起的去注册成功次数', 'AMF.SuccUdmDereg'); +INSERT INTO "kpi_title" VALUES (84, 'AMF', 'AMF.A.13', '{"cn":"AMF寻呼失败次数","en":"AMF.PagFail"}', 'AMF寻呼失败次数', 'AMF.PagFail'); +INSERT INTO "kpi_title" VALUES (85, 'AMF', 'AMF.A.14', '{"cn":"AMF隐式去注册次数","en":"AMF.ImplicitDereg"}', 'AMF隐式去注册次数', 'AMF.ImplicitDereg'); +INSERT INTO "kpi_title" VALUES (86, 'SMF', 'SMF.A.01', '{"cn":"PDU会话接受次数","en":"SMF.PduSessAcpt"}', 'PDU会话接受次数', 'SMF.PduSessAcpt'); +INSERT INTO "kpi_title" VALUES (87, 'SMF', 'SMF.A.02', '{"cn":"基站Pdu资源创建成功次数","en":"SM.PduResSetupSucc"}', '基站Pdu资源创建成功次数', 'SM.PduResSetupSucc'); +INSERT INTO "kpi_title" VALUES (88, 'SMF', 'SMF.A.03', '{"cn":"查询用户SM数据失败次数","en":"SM.RetrieveSmDataFail"}', '查询用户SM数据失败次数', 'SM.RetrieveSmDataFail'); +INSERT INTO "kpi_title" VALUES (89, 'SMF', 'SMF.A.04', '{"cn":"PFCP会话建立失败次数","en":"SM.PfcpSessEstFail"}', 'PFCP会话建立失败次数', 'SM.PfcpSessEstFail'); +INSERT INTO "kpi_title" VALUES (90, 'SMF', 'SMF.A.05', '{"cn":"基站Pdu资源创建失败次数","en":"SM.PduResSetupFail"}', '基站Pdu资源创建失败次数', 'SM.PduResSetupFail'); +INSERT INTO "kpi_title" VALUES (91, 'SMF', 'SMF.A.06', '{"cn":"PFCP会话修改失败次数","en":"SM.PfcpSessMdfyFail"}', 'PFCP会话修改失败次数', 'SM.PfcpSessMdfyFail'); +INSERT INTO "kpi_title" VALUES (92, 'SMF', 'SMF.A.07', '{"cn":"PDU会话拒绝次数","en":"SM.PduSessRejt"}', 'PDU会话拒绝次数', 'SM.PduSessRejt'); +INSERT INTO "kpi_title" VALUES (93, 'SMF', 'SMF.A.08', '{"cn":"PDU会话释放指示次数","en":"SM.PduSessRelCmd"}', 'PDU会话释放指示次数', 'SM.PduSessRelCmd'); +INSERT INTO "kpi_title" VALUES (94, 'NSSF', 'NSSF.A.02', '{"cn":"可用AMF注册次数","en":"NSSF.SuccAvailAMFPut"}', '可用AMF注册成功次数', 'NSSF.SuccAvailAMFPut'); +INSERT INTO "kpi_title" VALUES (95, 'NSSF', 'NSSF.A.03', '{"cn":"可用AMF注册更新成功次数","en":"NSSF.AvailAMFPut"}', '可用AMF注册次数', 'NSSF.AvailAMFPut'); +INSERT INTO "kpi_title" VALUES (96, 'NSSF', 'NSSF.A.04', '{"cn":"可用AMF注册更新次数","en":"NSSF.SuccAvailAMFPatch"}', '可用AMF注册更新成功次数', 'NSSF.SuccAvailAMFPatch'); +INSERT INTO "kpi_title" VALUES (97, 'NSSF', 'NSSF.A.01', '{"cn":"可用AMF注册成功次数","en":"NSSF.AvailAMFPatch"}', '可用AMF注册更新次数', 'NSSF.AvailAMFPatch'); +INSERT INTO "kpi_title" VALUES (98, 'NSSF', 'NSSF.A.05', '{"cn":"可用AMF去注册成功次数","en":"NSSF.SuccAvailAMFDelete"}', '可用AMF去注册成功次数', 'NSSF.SuccAvailAMFDelete'); +INSERT INTO "kpi_title" VALUES (99, 'NSSF', 'NSSF.A.06', '{"cn":"可用AMF去注册次数","en":"NSSF.AvailAMFDelete"}', '可用AMF去注册次数', 'NSSF.AvailAMFDelete'); +INSERT INTO "kpi_title" VALUES (100, 'NSSF', 'NSSF.A.07', '{"cn":"网元订阅成功次数","en":"NSSF.SuccAvailSubscription"}', '网元订阅成功次数', 'NSSF.SuccAvailSubscription'); +INSERT INTO "kpi_title" VALUES (101, 'NSSF', 'NSSF.A.08', '{"cn":"网元订阅次数","en":"NSSF.AvailSubscription"}', '网元订阅次数', 'NSSF.AvailSubscription'); +INSERT INTO "kpi_title" VALUES (102, 'NSSF', 'NSSF.A.09', '{"cn":"网元去订阅成功次数","en":"NSSF.SuccAvailUnsubscription"}', '网元去订阅成功次数', 'NSSF.SuccAvailUnsubscription'); +INSERT INTO "kpi_title" VALUES (103, 'NSSF', 'NSSF.A.10', '{"cn":"网元去订阅次数","en":"NSSF.AvailUnsubscription"}', '网元去订阅次数', 'NSSF.AvailUnsubscription'); +INSERT INTO "kpi_title" VALUES (104, 'NSSF', 'NSSF.A.11', '{"cn":"向NRF注册成功次数","en":"NSSF.SuccNRFReg"}', '向NRF注册成功次数', 'NSSF.SuccNRFReg'); +INSERT INTO "kpi_title" VALUES (105, 'NSSF', 'NSSF.A.12', '{"cn":"向NRF注册次数","en":"NSSF.NRFReg"}', '向NRF注册次数', 'NSSF.NRFReg'); +INSERT INTO "kpi_title" VALUES (106, 'NSSF', 'NSSF.A.13', '{"cn":"向NRF发送心跳次数","en":"NSSF.NRFHeartbeat"}', '向NRF发送心跳次数', 'NSSF.NRFHeartbeat'); +INSERT INTO "kpi_title" VALUES (107, 'NSSF', 'NSSF.A.14', '{"cn":"当前注册AMF个数","en":"NSSF.CurrentAMFCount"}', '当前注册AMF个数', 'NSSF.CurrentAMFCount'); +INSERT INTO "kpi_title" VALUES (108, 'NSSF', 'NSSF.A.15', '{"cn":"当前订阅网元个数","en":"NSSF.CurrentSubscriperCount"}', '当前订阅网元个数', 'NSSF.CurrentSubscriperCount'); +INSERT INTO "kpi_title" VALUES (109, 'MME', 'MME.A.01', '{"cn":"MME附着请求次数","en":"EpsAttachAtt"}', 'MME附着请求次数', 'EpsAttachAtt'); +INSERT INTO "kpi_title" VALUES (110, 'MME', 'MME.A.02', '{"cn":"MME附着成功次数","en":"EpsAttachSucc"}', 'MME附着成功次数', 'EpsAttachSucc'); +INSERT INTO "kpi_title" VALUES (111, 'MME', 'MME.A.03', '{"cn":"MME附着失败次数","en":"EpsAttachFail"}', 'MME附着失败次数', 'EpsAttachFail'); +INSERT INTO "kpi_title" VALUES (112, 'MME', 'MME.A.04', '{"cn":"MME组合附着请求次数","en":"CombAttachAtt"}', 'MME组合附着请求次数', 'CombAttachAtt'); +INSERT INTO "kpi_title" VALUES (113, 'MME', 'MME.A.05', '{"cn":"MME组合附着成功次数","en":"CombAttachSucc"}', 'MME组合附着成功次数', 'CombAttachSucc'); +INSERT INTO "kpi_title" VALUES (114, 'MME', 'MME.A.06', '{"cn":"MME组合附着失败次数","en":"CombAttachFail"}', 'MME组合附着失败次数', 'CombAttachFail'); +INSERT INTO "kpi_title" VALUES (115, 'MME', 'MME.A.07', '{"cn":"MME紧急附着请求次数","en":"EmergAttachAtt"}', 'MME紧急附着请求次数', 'EmergAttachAtt'); +INSERT INTO "kpi_title" VALUES (116, 'MME', 'MME.A.08', '{"cn":"MME紧急附着成功次数","en":"EmergAttachSucc"}', 'MME紧急附着成功次数', 'EmergAttachSucc'); +INSERT INTO "kpi_title" VALUES (117, 'MME', 'MME.A.09', '{"cn":"MME紧急附着失败次数","en":"EmergAttachFail"}', 'MME紧急附着失败次数', 'EmergAttachFail'); +INSERT INTO "kpi_title" VALUES (118, 'MME', 'MME.A.10', '{"cn":"UE发起的分离请求次数","en":"EpsDetachUeAtt"}', 'UE发起的分离请求次数', 'EpsDetachUeAtt'); +INSERT INTO "kpi_title" VALUES (119, 'MME', 'MME.A.11', '{"cn":"UE发起的分离请求成功次数","en":"EpsDetachUeSucc"}', 'UE发起的分离请求成功次数', 'EpsDetachUeSucc'); +INSERT INTO "kpi_title" VALUES (120, 'MME', 'MME.A.12', '{"cn":"MME发起的分离请求次数","en":"EpsDetachMMEAtt"}', 'MME发起的分离请求次数', 'EpsDetachMMEAtt'); +INSERT INTO "kpi_title" VALUES (121, 'MME', 'MME.A.13', '{"cn":"MME发起的分离请求成功次数","en":"EpsDetachMMESucc"}', 'MME发起的分离请求成功次数', 'EpsDetachMMESucc'); +INSERT INTO "kpi_title" VALUES (122, 'MME', 'MME.A.14', '{"cn":"伴随SGW内切换的TAU请求次数","en":"TauIntraSgwAtt"}', '伴随SGW内切换的TAU请求次数', 'TauIntraSgwAtt'); +INSERT INTO "kpi_title" VALUES (123, 'MME', 'MME.A.15', '{"cn":"伴随SGW内切换的TAU成功请求次数","en":"TauIntraSgwSucc"}', '伴随SGW内切换的TAU成功请求次数', 'TauIntraSgwSucc'); +INSERT INTO "kpi_title" VALUES (124, 'MME', 'MME.A.16', '{"cn":"伴随SGW内切换的TAU失败请求次数","en":"TauIntraSgwFail"}', '伴随SGW内切换的TAU失败请求次数', 'TauIntraSgwFail'); +INSERT INTO "kpi_title" VALUES (125, 'MME', 'MME.A.17', '{"cn":"MME寻呼次数","en":"PagingEpsAtt"}', 'MME寻呼次数', 'PagingEpsAtt'); +INSERT INTO "kpi_title" VALUES (126, 'MME', 'MME.A.18', '{"cn":"MME寻呼成功次数","en":"PagingEpsSucc"}', 'MME寻呼成功次数', 'PagingEpsSucc'); +INSERT INTO "kpi_title" VALUES (127, 'MME', 'MME.A.19', '{"cn":"MME寻呼失败次数","en":"PagingEpsFail"}', 'MME寻呼失败次数', 'PagingEpsFail'); +INSERT INTO "kpi_title" VALUES (128, 'MME', 'MME.A.20', '{"cn":"MME隐式分离请求次数","en":"EpsImplicitDetach"}', 'MME隐式分离请求次数', 'EpsImplicitDetach'); +INSERT INTO "kpi_title" VALUES (129, 'MME', 'MME.A.21', '{"cn":"MME激活专用承载请求次数","en":"ActDedicatedEpsBearerAtt"}', 'MME激活专用承载请求次数', 'ActDedicatedEpsBearerAtt'); +INSERT INTO "kpi_title" VALUES (130, 'MME', 'MME.A.22', '{"cn":"MME激活专用承载请求成功次数","en":"ActDedicatedEpsBearerSucc"}', 'MME激活专用承载请求成功次数', 'ActDedicatedEpsBearerSucc'); +INSERT INTO "kpi_title" VALUES (131, 'MME', 'MME.A.23', '{"cn":"MME激活专用承载请求失败次数","en":"ActDedicatedEpsBearerFail"}', 'MME激活专用承载请求失败次数', 'ActDedicatedEpsBearerFail'); +INSERT INTO "kpi_title" VALUES (132, 'MME', 'MME.A.24', '{"cn":"MME去激活专用承载请求次数","en":"DeactEpsDedicatedBearerAtt"}', 'MME去激活专用承载请求次数', 'DeactEpsDedicatedBearerAtt'); +INSERT INTO "kpi_title" VALUES (133, 'MME', 'MME.A.25', '{"cn":"MME去激活专用承载请求成功次数","en":"DeactEpsDedicatedBearerSucc"}', 'MME去激活专用承载请求成功次数', 'DeactEpsDedicatedBearerSucc'); +INSERT INTO "kpi_title" VALUES (134, 'MME', 'MME.A.26', '{"cn":"MME修改专用承载请求次数","en":"ModEpsBearerAtt"}', 'MME修改专用承载请求次数', 'ModEpsBearerAtt'); +INSERT INTO "kpi_title" VALUES (135, 'MME', 'MME.A.27', '{"cn":"MME修改专用承载请求成功次数","en":"ModEpsBearerSucc"}', 'MME修改专用承载请求成功次数', 'ModEpsBearerSucc'); +INSERT INTO "kpi_title" VALUES (136, 'MME', 'MME.A.28', '{"cn":"MME修改专用承载请求失败次数","en":"ModEpsBearerFail"}', 'MME修改专用承载请求失败次数', 'ModEpsBearerFail'); +INSERT INTO "kpi_title" VALUES (137, 'MME', 'MME.A.29', '{"cn":"MME服务请求次数","en":"EpsServiceReqAtt"}', 'MME服务请求次数', 'EpsServiceReqAtt'); +INSERT INTO "kpi_title" VALUES (138, 'MME', 'MME.A.30', '{"cn":"MME服务请求成功次数","en":"EpsServiceReqSucc"}', 'MME服务请求成功次数', 'EpsServiceReqSucc'); +INSERT INTO "kpi_title" VALUES (139, 'MME', 'MME.A.31', '{"cn":"MME服务请求失败次数","en":"EpsServiceReqFail"}', 'MME服务请求失败次数', 'EpsServiceReqFail'); +INSERT INTO "kpi_title" VALUES (140, 'MOCNGW', 'MOCNGW.01', '{"cn":"AttachRequest","en":"AttachRequest"}', 'AttachRequest', 'AttachRequest'); +INSERT INTO "kpi_title" VALUES (141, 'MOCNGW', 'MOCNGW.02', '{"cn":"AttachAccept","en":"AttachAccept"}', 'AttachAccept', 'AttachAccept'); +INSERT INTO "kpi_title" VALUES (142, 'MOCNGW', 'MOCNGW.03', '{"cn":"AttachComplete","en":"AttachComplete"}', 'AttachComplete', 'AttachComplete'); +INSERT INTO "kpi_title" VALUES (143, 'MOCNGW', 'MOCNGW.04', '{"cn":"AttachReject","en":"AttachReject"}', 'AttachReject', 'AttachReject'); +INSERT INTO "kpi_title" VALUES (144, 'MOCNGW', 'MOCNGW.05', '{"cn":"DetachRequest","en":"DetachRequest"}', 'DetachRequest', 'DetachRequest'); +INSERT INTO "kpi_title" VALUES (145, 'MOCNGW', 'MOCNGW.06', '{"cn":"DetachAccept","en":"DetachAccept"}', 'DetachAccept', 'DetachAccept'); +INSERT INTO "kpi_title" VALUES (146, 'MOCNGW', 'MOCNGW.07', '{"cn":"TrackingAreaUpdateRequest","en":"TrackingAreaUpdateRequest"}', 'TrackingAreaUpdateRequest', 'TrackingAreaUpdateRequest'); +INSERT INTO "kpi_title" VALUES (147, 'MOCNGW', 'MOCNGW.08', '{"cn":"TrackingAreaUpdateAccept","en":"TrackingAreaUpdateAccept"}', 'TrackingAreaUpdateAccept', 'TrackingAreaUpdateAccept'); +INSERT INTO "kpi_title" VALUES (148, 'MOCNGW', 'MOCNGW.09', '{"cn":"TrackingAreaUpdateComplete","en":"TrackingAreaUpdateComplete"}', 'TrackingAreaUpdateComplete', 'TrackingAreaUpdateComplete'); +INSERT INTO "kpi_title" VALUES (149, 'MOCNGW', 'MOCNGW.10', '{"cn":"TrackingAreaUpdateReject","en":"TrackingAreaUpdateReject"}', 'TrackingAreaUpdateReject', 'TrackingAreaUpdateReject'); +INSERT INTO "kpi_title" VALUES (150, 'MOCNGW', 'MOCNGW.11', '{"cn":"ServiceRequest","en":"ServiceRequest"}', 'ServiceRequest', 'ServiceRequest'); +INSERT INTO "kpi_title" VALUES (151, 'MOCNGW', 'MOCNGW.12', '{"cn":"ExtendedServiceRequest","en":"ExtendedServiceRequest"}', 'ExtendedServiceRequest', 'ExtendedServiceRequest'); +INSERT INTO "kpi_title" VALUES (152, 'MOCNGW', 'MOCNGW.13', '{"cn":"ControlPlaneServiceRequest","en":"ControlPlaneServiceRequest"}', 'ControlPlaneServiceRequest', 'ControlPlaneServiceRequest'); +INSERT INTO "kpi_title" VALUES (153, 'MOCNGW', 'MOCNGW.14', '{"cn":"ServiceReject","en":"ServiceReject"}', 'ServiceReject', 'ServiceReject'); +INSERT INTO "kpi_title" VALUES (154, 'MOCNGW', 'MOCNGW.15', '{"cn":"ServiceAccept","en":"ServiceAccept"}', 'ServiceAccept', 'ServiceAccept'); +INSERT INTO "kpi_title" VALUES (155, 'MOCNGW', 'MOCNGW.16', '{"cn":"GutiReallocationCommand","en":"GutiReallocationCommand"}', 'GutiReallocationCommand', 'GutiReallocationCommand'); +INSERT INTO "kpi_title" VALUES (156, 'MOCNGW', 'MOCNGW.17', '{"cn":"GutiReallocationComplete","en":"GutiReallocationComplete"}', 'GutiReallocationComplete', 'GutiReallocationComplete'); +INSERT INTO "kpi_title" VALUES (157, 'MOCNGW', 'MOCNGW.18', '{"cn":"AuthenticationRequest","en":"AuthenticationRequest"}', 'AuthenticationRequest', 'AuthenticationRequest'); +INSERT INTO "kpi_title" VALUES (158, 'MOCNGW', 'MOCNGW.19', '{"cn":"AuthenticationResponse","en":"AuthenticationResponse"}', 'AuthenticationResponse', 'AuthenticationResponse'); +INSERT INTO "kpi_title" VALUES (159, 'MOCNGW', 'MOCNGW.20', '{"cn":"AuthenticationReject","en":"AuthenticationReject"}', 'AuthenticationReject', 'AuthenticationReject'); +INSERT INTO "kpi_title" VALUES (160, 'MOCNGW', 'MOCNGW.21', '{"cn":"AuthenticationFailure","en":"AuthenticationFailure"}', 'AuthenticationFailure', 'AuthenticationFailure'); +INSERT INTO "kpi_title" VALUES (161, 'MOCNGW', 'MOCNGW.22', '{"cn":"IdentityRequest","en":"IdentityRequest"}', 'IdentityRequest', 'IdentityRequest'); +INSERT INTO "kpi_title" VALUES (162, 'MOCNGW', 'MOCNGW.23', '{"cn":"IdentityResponse","en":"IdentityResponse"}', 'IdentityResponse', 'IdentityResponse'); +INSERT INTO "kpi_title" VALUES (163, 'MOCNGW', 'MOCNGW.24', '{"cn":"SecurityModeCommand","en":"SecurityModeCommand"}', 'SecurityModeCommand', 'SecurityModeCommand'); +INSERT INTO "kpi_title" VALUES (164, 'MOCNGW', 'MOCNGW.25', '{"cn":"SecurityModeComplete","en":"SecurityModeComplete"}', 'SecurityModeComplete', 'SecurityModeComplete'); +INSERT INTO "kpi_title" VALUES (165, 'MOCNGW', 'MOCNGW.26', '{"cn":"SecurityModeReject","en":"SecurityModeReject"}', 'SecurityModeReject', 'SecurityModeReject'); +INSERT INTO "kpi_title" VALUES (166, 'MOCNGW', 'MOCNGW.27', '{"cn":"EmmStatus","en":"EmmStatus"}', 'EmmStatus', 'EmmStatus'); +INSERT INTO "kpi_title" VALUES (167, 'MOCNGW', 'MOCNGW.28', '{"cn":"EmmInformation","en":"EmmInformation"}', 'EmmInformation', 'EmmInformation'); +INSERT INTO "kpi_title" VALUES (168, 'MOCNGW', 'MOCNGW.29', '{"cn":"DownlinkNasTransport","en":"DownlinkNasTransport"}', 'DownlinkNasTransport', 'DownlinkNasTransport'); +INSERT INTO "kpi_title" VALUES (169, 'MOCNGW', 'MOCNGW.30', '{"cn":"UplinkNasTransport","en":"UplinkNasTransport"}', 'UplinkNasTransport', 'UplinkNasTransport'); +INSERT INTO "kpi_title" VALUES (170, 'MOCNGW', 'MOCNGW.31', '{"cn":"CsServiceNotification","en":"CsServiceNotification"}', 'CsServiceNotification', 'CsServiceNotification'); +INSERT INTO "kpi_title" VALUES (171, 'MOCNGW', 'MOCNGW.32', '{"cn":"DownlinkGenericNasTransport","en":"DownlinkGenericNasTransport"}', 'DownlinkGenericNasTransport', 'DownlinkGenericNasTransport'); +INSERT INTO "kpi_title" VALUES (172, 'MOCNGW', 'MOCNGW.33', '{"cn":"UplinkGenericNasTransport","en":"UplinkGenericNasTransport"}', 'UplinkGenericNasTransport', 'UplinkGenericNasTransport'); +INSERT INTO "kpi_title" VALUES (173, 'IMS', 'SCSCF.01', '{"cn": "LTE接入注册用户数","en": "UR.SubsLTE.fromVoLTE"}', 'LTE接入注册用户数', 'UR.SubsLTE.fromVoLTE'); +INSERT INTO "kpi_title" VALUES (174, 'IMS', 'SCSCF.02', '{"cn": "5G接入注册用户数","en": "UR.Subs5G.fromVo5G"}', '5G接入注册用户数', 'UR.Subs5G.fromVo5G'); +INSERT INTO "kpi_title" VALUES (175, 'IMS', 'SCSCF.03', '{"cn": "初始注册成功次数","en": "UR.SuccInitReg"}', '初始注册成功次数', 'VoNR Registration Success'); +INSERT INTO "kpi_title" VALUES (176, 'IMS', 'SCSCF.04', '{"cn": "初始注册请求次数","en": "UR.AttInitReg"}', '初始注册请求次数', 'VoNR Registration Request'); +INSERT INTO "kpi_title" VALUES (177, 'IMS', 'SCSCF.05', '{"cn": "主叫接通次数","en": "SC.SuccSessionOrig"}', '主叫接通次数', 'MO Call Success'); +INSERT INTO "kpi_title" VALUES (178, 'IMS', 'SCSCF.06', '{"cn": "主叫试呼次数","en": "SC.AttSessionOrig"}', '主叫试呼次数', 'MO Call Attempt'); +INSERT INTO "kpi_title" VALUES (179, 'IMS', 'SCSCF.07', '{"cn": "被叫接通次数","en": "SC.SuccSessionTerm"}', '被叫接通次数', 'MT Call Success'); +INSERT INTO "kpi_title" VALUES (180, 'IMS', 'SCSCF.08', '{"cn": "被叫试呼次数","en": "SC.AttSessionTerm"}', '被叫试呼次数', 'MT Call Attempt'); +INSERT INTO "kpi_title" VALUES (181, 'IMS', 'SCSCF.09', '{"cn": "主叫应答次数","en": "SC.AnsSessionOrig"}', '主叫应答次数', 'SC.AnsSessionOrig'); +INSERT INTO "kpi_title" VALUES (182, 'IMS', 'SCSCF.10', '{"cn": "主叫早释次数","en": "SC.OrigRelBeforeRing"}', '主叫早释次数', 'SC.OrigRelBeforeRing'); +INSERT INTO "kpi_title" VALUES (183, 'IMS', 'SCSCF.11', '{"cn": "主叫振铃早释次数","en": "SC.OrigRelAfterRing"}', '主叫振铃早释次数', 'SC.OrigRelAfterRing'); +INSERT INTO "kpi_title" VALUES (184, 'IMS', 'SCSCF.12', '{"cn": "主叫403请求禁止次数","en": "SC.FailSessionOrig.403"}', '主叫403请求禁止次数', 'SC.FailSessionOrig.403'); +INSERT INTO "kpi_title" VALUES (185, 'IMS', 'SCSCF.13', '{"cn": "主叫404未找到次数","en": "SC.FailSessionOrig.404"}', '主叫404未找到次数', 'SC.FailSessionOrig.404'); +INSERT INTO "kpi_title" VALUES (186, 'IMS', 'SCSCF.14', '{"cn": "主叫408请求超时次数","en": "SC.FailSessionOrig.408"}', '主叫408请求超时次数', 'SC.FailSessionOrig.408'); +INSERT INTO "kpi_title" VALUES (187, 'IMS', 'SCSCF.15', '{"cn": "主叫480久叫不应次","en": "SC.FailSessionOrig.480"}', '主叫480久叫不应次', 'SC.FailSessionOrig.480'); +INSERT INTO "kpi_title" VALUES (188, 'IMS', 'SCSCF.16', '{"cn": "主叫484Request-URI不完整次","en": "SC.FailSessionOrig.484"}', '主叫484Request-URI不完整次', 'SC.FailSessionOrig.484'); +INSERT INTO "kpi_title" VALUES (189, 'IMS', 'SCSCF.17', '{"cn": "主叫486用户忙次数","en": "SC.FailSessionOrig.486"}', '主叫486用户忙次数', 'SC.FailSessionOrig.486'); +INSERT INTO "kpi_title" VALUES (190, 'IMS', 'SCSCF.18', '{"cn": "主叫487请求终止次数","en": "SC.FailSessionOrig.487"}', '主叫487请求终止次数', 'SC.FailSessionOrig.487'); +INSERT INTO "kpi_title" VALUES (191, 'IMS', 'SCSCF.19', '{"cn": "主叫600用户忙次数","en": "SC.FailSessionOrig.600"}', '主叫600用户忙次数', 'SC.FailSessionOrig.600'); +INSERT INTO "kpi_title" VALUES (192, 'IMS', 'SCSCF.20', '{"cn": "主叫603用户拒接次数","en": "SC.FailSessionOrig.603"}', '主叫603用户拒接次数', 'SC.FailSessionOrig.603'); +INSERT INTO "kpi_title" VALUES (193, 'IMS', 'SCSCF.21', '{"cn": "主叫604用户信息不存在次数","en": "SC.FailSessionOrig.604"}', '主叫604用户信息不存在次数', 'SC.FailSessionOrig.604'); +INSERT INTO "kpi_title" VALUES (194, 'IMS', 'SCSCF.22', '{"cn": "被叫应答次数","en": "SC.AnsSessionTerm"}', '被叫应答次数', 'SC.AnsSessionTerm'); +INSERT INTO "kpi_title" VALUES (195, 'IMS', 'SCSCF.23', '{"cn": "被叫早释次","en": "SC.TermiRelBeforeRing"}', '被叫早释次', 'SC.TermiRelBeforeRing'); +INSERT INTO "kpi_title" VALUES (196, 'IMS', 'SCSCF.24', '{"cn": "被叫振铃早释次数","en": "SC.TermiRelAfterRing"}', '被叫振铃早释次数', 'SC.TermiRelAfterRing'); +INSERT INTO "kpi_title" VALUES (197, 'IMS', 'SCSCF.25', '{"cn": "被叫403请求禁止次数","en": "SC.FailSessionTerm.403"}', '被叫403请求禁止次数', 'SC.FailSessionTerm.403'); +INSERT INTO "kpi_title" VALUES (198, 'IMS', 'SCSCF.26', '{"cn": "被叫404未找到次数","en": "SC.FailSessionTerm.404"}', '被叫404未找到次数', 'SC.FailSessionTerm.404'); +INSERT INTO "kpi_title" VALUES (199, 'IMS', 'SCSCF.27', '{"cn": "被叫408请求超时次数","en": "SC.FailSessionTerm.408"}', '被叫408请求超时次数', 'SC.FailSessionTerm.408'); +INSERT INTO "kpi_title" VALUES (200, 'IMS', 'SCSCF.28', '{"cn": "被叫480久叫不应次数","en": "SC.FailSessionTerm.480"}', '被叫480久叫不应次数', 'SC.FailSessionTerm.480'); +INSERT INTO "kpi_title" VALUES (201, 'IMS', 'SCSCF.29', '{"cn": "被叫484Request-URI不完整次数","en": "SC.FailSessionTerm.484"}', '被叫484Request-URI不完整次数', 'SC.FailSessionTerm.484'); +INSERT INTO "kpi_title" VALUES (202, 'IMS', 'SCSCF.30', '{"cn": "被叫486用户忙次数","en": "SC.FailSessionTerm.486"}', '被叫486用户忙次数', 'SC.FailSessionTerm.486'); +INSERT INTO "kpi_title" VALUES (203, 'IMS', 'SCSCF.31', '{"cn": "被叫487请求终止次数","en": "SC.FailSessionTerm.487"}', '被叫487请求终止次数', 'SC.FailSessionTerm.487'); +INSERT INTO "kpi_title" VALUES (204, 'IMS', 'SCSCF.32', '{"cn": "被叫600用户忙次数","en": "SC.FailSessionTerm.600"}', '被叫600用户忙次数', 'SC.FailSessionTerm.600'); +INSERT INTO "kpi_title" VALUES (205, 'IMS', 'SCSCF.33', '{"cn": "被叫603用户拒接次数","en": "SC.FailSessionTerm.603"}', '被叫603用户拒接次数', 'SC.FailSessionTerm.603'); +INSERT INTO "kpi_title" VALUES (206, 'IMS', 'SCSCF.34', '{"cn": "被叫604用户信息不存在次数","en": "SC.FailSessionTerm.604"}', '被叫604用户信息不存在次数', 'SC.FailSessionTerm.604'); +INSERT INTO "kpi_title" VALUES (207, 'PCF', 'PCF.01', '{"cn": "在线N7会话数", "en": "PCF.SmAssocNbrMean"}', '在线N7会话数', 'PCF.SmAssocNbrMean'); +INSERT INTO "kpi_title" VALUES (208, 'PCF', 'PCF.02', '{"cn": "SM策略关联建立成功次数", "en": "PCF.PolicySmAssocCreateSucc"}', 'SM策略关联建立成功次数', 'PCF.PolicySmAssocCreateSucc'); +INSERT INTO "kpi_title" VALUES (209, 'PCF', 'PCF.03', '{"cn": "SM策略关联建立请求次数", "en": "PCF.PolicySmAssocCreateReq"}', 'SM策略关联建立请求次数', 'PCF.PolicySmAssocCreateReq'); +INSERT INTO "kpi_title" VALUES (210, 'PCF', 'PCF.04', '{"cn": "SM策略关联更新成功次数", "en": "PCF.PolicySmAssocUpdateSucc"}', 'SM策略关联更新成功次数', 'PCF.PolicySmAssocUpdateSucc'); +INSERT INTO "kpi_title" VALUES (211, 'PCF', 'PCF.05', '{"cn": "SM策略关联更新请求次数", "en": "PCF.PolicySmAssocUpdateReq"}', 'SM策略关联更新请求次数', 'PCF.PolicySmAssocUpdateReq'); +INSERT INTO "kpi_title" VALUES (212, 'PCF', 'PCF.06', '{"cn": "在线Gx会话数", "en": "SM.SessionNbrMean"}', '在线Gx会话数', 'SM.SessionNbrMean'); +INSERT INTO "kpi_title" VALUES (213, 'PCF', 'PCF.07', '{"cn": "在线Rx会话数", "en": "SM.RxSessionMean"}', '在线Rx会话数', 'SM.RxSessionMean'); +INSERT INTO "kpi_title" VALUES (214, 'PCF', 'PCF.08', '{"cn": "PCRF策略控制发起成功次数", "en": "DIAM.CcInitialSuccess"}', 'PCRF策略控制发起成功次数', 'DIAM.CcInitialSuccess'); +INSERT INTO "kpi_title" VALUES (215, 'PCF', 'PCF.09', '{"cn": "PCRF策略控制发起请求次数", "en": "DIAM.CcInitialRequest"}', 'PCRF策略控制发起请求次数', 'DIAM.CcInitialRequest'); +INSERT INTO "kpi_title" VALUES (216, 'PCF', 'PCF.10', '{"cn": "应用会话授权成功次数", "en": "DIAM.AuthSucc"}', '应用会话授权成功次数', 'DIAM.AuthSucc'); +INSERT INTO "kpi_title" VALUES (217, 'PCF', 'PCF.11', '{"cn": "应用会话授权尝试次数", "en": "DIAM.AuthRequest"}', '应用会话授权尝试次数', 'DIAM.AuthRequest'); +INSERT INTO "kpi_title" VALUES (218, 'PCF', 'PCF.12', '{"cn": "PCRF策略控制更新成功次数", "en": "DIAM.CcUpdateSuccess"}', 'PCRF策略控制更新成功次数', 'DIAM.CcUpdateSuccess'); +INSERT INTO "kpi_title" VALUES (219, 'PCF', 'PCF.13', '{"cn": "PCRF策略控制更新请求次数", "en": "DIAM.CcUpdateRequest"}', 'PCRF策略控制更新请求次数', 'DIAM.CcUpdateRequest'); +INSERT INTO "kpi_title" VALUES (220, 'SMSC', 'SMSC.A.01', '{"cn": "MS到SMSC短信请求次数", "en": "SMSC.MStoSMSCAtt"}', 'MS到SMSC短信请求次数', 'SMSC.MStoSMSCAtt'); +INSERT INTO "kpi_title" VALUES (221, 'SMSC', 'SMSC.A.02', '{"cn": "MS到SMSC短信成功次数", "en": "SMSC.MStoSMSCSucc"}', 'MS到SMSC短信成功次数', 'SMSC.MStoSMSCSucc'); +INSERT INTO "kpi_title" VALUES (222, 'SMSC', 'SMSC.A.03', '{"cn": "MS到SMSC短信失败次数", "en": "SMSC.MStoSMSCFail"}', 'MS到SMSC短信失败次数', 'SMSC.MStoSMSCFail'); +INSERT INTO "kpi_title" VALUES (223, 'SMSC', 'SMSC.A.04', '{"cn": "MS到SMSC短信字节数", "en": "SMSC.MStoSMSCBytes"}', 'MS到SMSC短信字节数', 'SMSC.MStoSMSCBytes'); +INSERT INTO "kpi_title" VALUES (224, 'SMSC', 'SMSC.A.05', '{"cn": "VSS到SMSC短信请求次数", "en": "SMSC.VSStoSMSCAtt"}', 'VSS到SMSC短信请求次数', 'SMSC.VSStoSMSCAtt'); +INSERT INTO "kpi_title" VALUES (225, 'SMSC', 'SMSC.A.06', '{"cn": "VSS到SMSC短信成功次数", "en": "SMSC.VSStoSMSCSucc"}', 'VSS到SMSC短信成功次数', 'SMSC.VSStoSMSCSucc'); +INSERT INTO "kpi_title" VALUES (226, 'SMSC', 'SMSC.A.07', '{"cn": "VSS到SMSC短信失败次数", "en": "SMSC.VSStoSMSCFail"}', 'VSS到SMSC短信失败次数', 'SMSC.VSStoSMSCFail'); +INSERT INTO "kpi_title" VALUES (227, 'SMSC', 'SMSC.A.08', '{"cn": "VSS到SMSC短信字节数", "en": "SMSC.VSStoSMSCBytes"}', 'VSS到SMSC短信字节数', 'SMSC.VSStoSMSCBytes'); +INSERT INTO "kpi_title" VALUES (228, 'SMSC', 'SMSC.A.09', '{"cn": "PPS到SMSC短信请求次数", "en": "SMSC.PPStoSMSCAtt"}', 'PPS到SMSC短信请求次数', 'SMSC.PPStoSMSCAtt'); +INSERT INTO "kpi_title" VALUES (229, 'SMSC', 'SMSC.A.10', '{"cn": "PPS到SMSC短信成功次数", "en": "SMSC.PPStoSMSCSucc"}', 'PPS到SMSC短信成功次数', 'SMSC.PPStoSMSCSucc'); +INSERT INTO "kpi_title" VALUES (230, 'SMSC', 'SMSC.A.11', '{"cn": "PPS到SMSC短信失败次数", "en": "SMSC.PPStoSMSCFail"}', 'PPS到SMSC短信失败次数', 'SMSC.PPStoSMSCFail'); +INSERT INTO "kpi_title" VALUES (231, 'SMSC', 'SMSC.A.12', '{"cn": "PPS到SMSC短信字节数", "en": "SMSC.PPStoSMSCBytes"}', 'PPS到SMSC短信字节数', 'SMSC.PPStoSMSCBytes'); +INSERT INTO "kpi_title" VALUES (232, 'SMSC', 'SMSC.A.13', '{"cn": "SMPP到SMSC短信请求次数", "en": "SMSC.SMPPtoSMSCAtt"}', 'SMPP到SMSC短信请求次数', 'SMSC.SMPPtoSMSCAtt'); +INSERT INTO "kpi_title" VALUES (233, 'SMSC', 'SMSC.A.14', '{"cn": "SMPP到SMSC短信成功次数", "en": "SMSC.SMPPtoSMSCSucc"}', 'SMPP到SMSC短信成功次数', 'SMSC.SMPPtoSMSCSucc'); +INSERT INTO "kpi_title" VALUES (234, 'SMSC', 'SMSC.A.15', '{"cn": "SMPP到SMSC短信失败次数", "en": "SMSC.SMPPtoSMSCFail"}', 'SMPP到SMSC短信失败次数', 'SMSC.SMPPtoSMSCFail'); +INSERT INTO "kpi_title" VALUES (235, 'SMSC', 'SMSC.A.16', '{"cn": "SMPP到SMSC短信字节数", "en": "SMSC.SMPPtoSMSCBytes"}', 'SMPP到SMSC短信字节数', 'SMSC.SMPPtoSMSCBytes'); +INSERT INTO "kpi_title" VALUES (236, 'SMSC', 'SMSC.A.17', '{"cn": "SMSC到MS短信请求次数", "en": "SMSC.SMSCtoMSAtt"}', 'SMSC到MS短信请求次数', 'SMSC.SMSCtoMSAtt'); +INSERT INTO "kpi_title" VALUES (237, 'SMSC', 'SMSC.A.18', '{"cn": "SMSC到MS短信成功次数", "en": "SMSC.SMSCtoMSSucc"}', 'SMSC到MS短信成功次数', 'SMSC.SMSCtoMSSucc'); +INSERT INTO "kpi_title" VALUES (238, 'SMSC', 'SMSC.A.19', '{"cn": "SMSC到MS短信失败次数", "en": "SMSC.SMSCtoMSFail"}', 'SMSC到MS短信失败次数', 'SMSC.SMSCtoMSFail'); +INSERT INTO "kpi_title" VALUES (239, 'SMSC', 'SMSC.A.20', '{"cn": "SMSC到MS短信字节数", "en": "SMSC.SMSCtoMSBytes"}', 'SMSC到MS短信字节数', 'SMSC.SMSCtoMSBytes'); +INSERT INTO "kpi_title" VALUES (240, 'SMSC', 'SMSC.A.21', '{"cn": "SMSC到VSS短信请求次数", "en": "SMSC.SMSCtoVSSAtt"}', 'SMSC到VSS短信请求次数', 'SMSC.SMSCtoVSSAtt'); +INSERT INTO "kpi_title" VALUES (241, 'SMSC', 'SMSC.A.22', '{"cn": "SMSC到VSS短信成功次数", "en": "SMSC.SMSCtoVSSucc"}', 'SMSC到VSS短信成功次数', 'SMSC.SMSCtoVSSucc'); +INSERT INTO "kpi_title" VALUES (242, 'SMSC', 'SMSC.A.23', '{"cn": "SMSC到VSS短信失败次数", "en": "SMSC.SMSCtoVSSFail"}', 'SMSC到VSS短信失败次数', 'SMSC.SMSCtoVSSFail'); +INSERT INTO "kpi_title" VALUES (243, 'SMSC', 'SMSC.A.24', '{"cn": "SMSC到VSS短信字节数", "en": "SMSC.SMSCtoVSSBytes"}', 'SMSC到VSS短信字节数', 'SMSC.SMSCtoVSSBytes'); +INSERT INTO "kpi_title" VALUES (244, 'SMSC', 'SMSC.A.25', '{"cn": "SMSC到PPS短信请求次数", "en": "SMSC.SMSCtoPPSAtt"}', 'SMSC到PPS短信请求次数', 'SMSC.SMSCtoPPSAtt'); +INSERT INTO "kpi_title" VALUES (245, 'SMSC', 'SMSC.A.26', '{"cn": "SMSC到PPS短信成功次数", "en": "SMSC.SMSCtoPPSucc"}', 'SMSC到PPS短信成功次数', 'SMSC.SMSCtoPPSucc'); +INSERT INTO "kpi_title" VALUES (246, 'SMSC', 'SMSC.A.27', '{"cn": "SMSC到PPS短信失败次数", "en": "SMSC.SMSCtoPPSFail"}', 'SMSC到PPS短信失败次数', 'SMSC.SMSCtoPPSFail'); +INSERT INTO "kpi_title" VALUES (247, 'SMSC', 'SMSC.A.28', '{"cn": "SMSC到PPS短信字节数", "en": "SMSC.SMSCtoPPSBytes"}', 'SMSC到PPS短信字节数', 'SMSC.SMSCtoPPSBytes'); +INSERT INTO "kpi_title" VALUES (248, 'SMSC', 'SMSC.A.29', '{"cn": "SMSC到SMPP短信请求次数", "en": "SMSC.SMSCtoSMPPAtt"}', 'SMSC到SMPP短信请求次数', 'SMSC.SMSCtoSMPPAtt'); +INSERT INTO "kpi_title" VALUES (249, 'SMSC', 'SMSC.A.30', '{"cn": "SMSC到SMPP短信成功次数", "en": "SMSC.SMSCtoSMPPucc"}', 'SMSC到SMPP短信成功次数', 'SMSC.SMSCtoSMPPucc'); +INSERT INTO "kpi_title" VALUES (250, 'SMSC', 'SMSC.A.31', '{"cn": "SMSC到SMPP短信失败次数", "en": "SMSC.SMSCtoSMPPFail"}', 'SMSC到SMPP短信失败次数', 'SMSC.SMSCtoSMPPFail'); +INSERT INTO "kpi_title" VALUES (251, 'SMSC', 'SMSC.A.32', '{"cn": "SMSC到SMPP短信字节数", "en": "SMSC.SMSCtoSMPPBytes"}', 'SMSC到SMPP短信字节数', 'SMSC.SMSCtoSMPPBytes'); +INSERT INTO "kpi_title" VALUES (252, 'CBC', 'CBC.A.01', '{"cn": "CBC 发起 Create Write 消息成功", "en": "WarningReqSucc"}', 'CBC 发起 Create Write 消息成功', 'WarningReqSucc'); +INSERT INTO "kpi_title" VALUES (253, 'CBC', 'CBC.A.02', '{"cn": "CBC 发起 Create Write 消息失败", "en": "WarningReqFail"}', 'CBC 发起 Create Write 消息失败', 'WarningReqFail'); +INSERT INTO "kpi_title" VALUES (254, 'CBC', 'CBC.A.03', '{"cn": "CBC 发起 Cancel Write 消息成功", "en": "WarningCancelSucc"}', 'CBC 发起 Cancel Write 消息成功', 'WarningCancelSucc'); +INSERT INTO "kpi_title" VALUES (255, 'CBC', 'CBC.A.04', '{"cn": "CBC 发起 Cancel Write 消息失败", "en": "WarningCancelFail"}', 'CBC 发起 Cancel Write 消息失败', 'WarningCancelFail'); +INSERT INTO "kpi_title" VALUES (256, 'HLR', 'HLR.A.001', NULL, '鉴权信息请求次数', 'AuthReqTotalNum'); +INSERT INTO "kpi_title" VALUES (257, 'HLR', 'HLR.A.002', NULL, '鉴权信息请求成功次数', 'AuthSuccTotalNum'); +INSERT INTO "kpi_title" VALUES (258, 'HLR', 'HLR.A.003', NULL, '鉴权请求失败:缺参数', 'AuthFailByMissPara'); +INSERT INTO "kpi_title" VALUES (259, 'HLR', 'HLR.A.004', NULL, '鉴权请求失败:系统错误', 'AuthFailBySysFail'); +INSERT INTO "kpi_title" VALUES (260, 'HLR', 'HLR.A.005', NULL, '鉴权请求失败:非期望的参数值', 'AuthFailByUnexptData'); +INSERT INTO "kpi_title" VALUES (261, 'HLR', 'HLR.A.006', NULL, '鉴权请求失败:未知用户', 'AuthFailByUnknownUser'); +INSERT INTO "kpi_title" VALUES (262, 'HLR', 'HLR.A.007', NULL, '鉴权失败报告次数', 'AuthFailReportTotalNum'); +INSERT INTO "kpi_title" VALUES (263, 'HLR', 'HLR.A.008', NULL, '鉴权失败报告(错误的网络签名)次数', 'AuthFailReportByErrNetSign'); +INSERT INTO "kpi_title" VALUES (264, 'HLR', 'HLR.A.009', NULL, '鉴权失败报告(错误的用户响应)次数', 'AuthFailReportByErrUserRsp'); +INSERT INTO "kpi_title" VALUES (265, 'HLR', 'HLR.A.010', NULL, '登记请求次数', 'LuReqTotalNum'); +INSERT INTO "kpi_title" VALUES (266, 'HLR', 'HLR.A.011', NULL, '登记成功次数', 'LuSuccTotalNum'); +INSERT INTO "kpi_title" VALUES (267, 'HLR', 'HLR.A.012', NULL, '登记失败:复制手机', 'LuFailByDuplicUnit'); +INSERT INTO "kpi_title" VALUES (268, 'HLR', 'HLR.A.013', NULL, '登记失败:无效ESN', 'LuFailByInvalidESN'); +INSERT INTO "kpi_title" VALUES (269, 'HLR', 'HLR.A.014', NULL, '登记失败:缺鉴权参数', 'LuFailByMissAuthPara'); +INSERT INTO "kpi_title" VALUES (270, 'HLR', 'HLR.A.015', NULL, '登记失败:在这个MSC中不能使用', 'LuFailByMscNotAllow'); +INSERT INTO "kpi_title" VALUES (271, 'HLR', 'HLR.A.016', NULL, '登记失败:终端类型不匹配', 'LuFailByUeTypeMismatch'); +INSERT INTO "kpi_title" VALUES (272, 'HLR', 'HLR.A.017', NULL, '登记失败:未分配号码的手机', 'LuFailByUnAssignMsisdn'); +INSERT INTO "kpi_title" VALUES (273, 'HLR', 'HLR.A.018', NULL, '登记失败:不确定', 'LuFailByUnKnown'); +INSERT INTO "kpi_title" VALUES (274, 'HLR', 'HLR.A.019', NULL, '注销登记次数', 'CancelLuReqTotalNum'); +INSERT INTO "kpi_title" VALUES (275, 'HLR', 'HLR.A.020', NULL, '注销登记成功次数', 'CancelLuSuccTotalNum'); +INSERT INTO "kpi_title" VALUES (276, 'HLR', 'HLR.A.021', NULL, '注销失败:系统错误', 'CancelLuFailBySysFail'); +INSERT INTO "kpi_title" VALUES (277, 'HLR', 'HLR.A.022', NULL, '注销失败:缺参数', 'CancelLuFailByMissPara'); +INSERT INTO "kpi_title" VALUES (278, 'HLR', 'HLR.A.023', NULL, '移动台去活次数', 'MsPurgeReqTotalNum'); +INSERT INTO "kpi_title" VALUES (279, 'HLR', 'HLR.A.024', NULL, '移动台去活成功次数', 'MsPurgeSuccTotalNum'); +INSERT INTO "kpi_title" VALUES (280, 'HLR', 'HLR.A.025', NULL, '移动台去活:系统错误', 'MsPurgeFailBySysFail'); +INSERT INTO "kpi_title" VALUES (281, 'HLR', 'HLR.A.026', NULL, '移动台去活:非期望的参数值', 'MsPurgeFailByUnexptPara'); +INSERT INTO "kpi_title" VALUES (282, 'HLR', 'HLR.A.027', NULL, '移动台去活:未知用户', 'MsPurgeFailByUnknownUser'); +INSERT INTO "kpi_title" VALUES (283, 'HLR', 'HLR.A.028', NULL, 'GPRS登记请求次数', 'GprsLuReqTotalNum'); +INSERT INTO "kpi_title" VALUES (284, 'HLR', 'HLR.A.029', NULL, 'GPRS登记请求成功次数', 'GprsLuSuccTotalNum'); +INSERT INTO "kpi_title" VALUES (285, 'HLR', 'HLR.A.030', NULL, 'GPRS去登记次数', 'GprsPurgeReqTotalNum'); +INSERT INTO "kpi_title" VALUES (286, 'HLR', 'HLR.A.031', NULL, 'GPRS去登记成功次数', 'GprsPurgeSuccTotalNum'); +INSERT INTO "kpi_title" VALUES (287, 'HLR', 'HLR.A.032', NULL, 'GPRS注销登记次数', 'GprsCancelLuReqTotalNum'); +INSERT INTO "kpi_title" VALUES (288, 'HLR', 'HLR.A.033', NULL, 'GPRS注销登记成功次数', 'GprsCancelLuSuccTotalNum'); +INSERT INTO "kpi_title" VALUES (289, 'HLR', 'HLR.A.034', NULL, 'GPRS路由请求次数', 'GprsRoutInfoReqTotalNum'); +INSERT INTO "kpi_title" VALUES (290, 'HLR', 'HLR.A.035', NULL, 'GPRS用户激活失败报告次数', 'GprsActiveFailReportTotalNum'); +INSERT INTO "kpi_title" VALUES (291, 'HLR', 'HLR.A.036', NULL, 'GPRS用户激活失败报告成功次数', 'GprsActiveFailReportSuccTotalNum'); +INSERT INTO "kpi_title" VALUES (292, 'HLR', 'HLR.A.037', NULL, 'GPRS用户激活失败报告失败:缺参数', 'GprsActiveFailReportFailByMissPara'); +INSERT INTO "kpi_title" VALUES (293, 'HLR', 'HLR.A.038', NULL, 'GPRS用户激活失败报告失败:系统错误', 'GprsActiveFailReportFailBySysFail'); +INSERT INTO "kpi_title" VALUES (294, 'HLR', 'HLR.A.039', NULL, 'GPRS用户激活失败报告失败:非期望的参数值', 'GprsActiveFailReportFailByUnexptPara'); +INSERT INTO "kpi_title" VALUES (295, 'HLR', 'HLR.A.040', NULL, 'GPRS用户激活失败报告失败:未知用户', 'GprsActiveFailReportFailByUnKnownUser'); +INSERT INTO "kpi_title" VALUES (296, 'HLR', 'HLR.A.041', NULL, '发起CFU业务登记且激活次数', 'CfuActvReqTotalNum'); +INSERT INTO "kpi_title" VALUES (297, 'HLR', 'HLR.A.042', NULL, 'CFU业务登记且激活成功次数', 'CfuActvSuccTotalNum'); +INSERT INTO "kpi_title" VALUES (298, 'HLR', 'HLR.A.043', NULL, 'CFU登记失败:MS忙', 'CfuRegFailByMsBusy'); +INSERT INTO "kpi_title" VALUES (299, 'HLR', 'HLR.A.044', NULL, 'CFU登记失败:不允许将呼叫终接到MS', 'CfuRegFailByMsDenied'); +INSERT INTO "kpi_title" VALUES (300, 'HLR', 'HLR.A.045', NULL, 'CFU登记失败:MS去登记状态', 'CfuRegFailByMsErase'); +INSERT INTO "kpi_title" VALUES (301, 'HLR', 'HLR.A.046', NULL, 'CFU登记失败:无寻呼响应', 'CfuRegFailByNoPagingResp'); +INSERT INTO "kpi_title" VALUES (302, 'HLR', 'HLR.A.047', NULL, 'CFU登记失败:系统错误', 'CfuRegFailBySysFail'); +INSERT INTO "kpi_title" VALUES (303, 'HLR', 'HLR.A.048', NULL, 'CFU登记失败:未分配电话号码', 'CfuRegFailByUnAssignMsisdn'); +INSERT INTO "kpi_title" VALUES (304, 'HLR', 'HLR.A.049', NULL, 'CFU登记失败:不可用', 'CfuRegFailByUnavailable'); +INSERT INTO "kpi_title" VALUES (305, 'HLR', 'HLR.A.050', NULL, '发起CFU业务去活次数', 'CfuDeActvReqTotalNum'); +INSERT INTO "kpi_title" VALUES (306, 'HLR', 'HLR.A.051', NULL, 'CFU业务去活成功次数', 'CfuDeActvSuccTotalNum'); +INSERT INTO "kpi_title" VALUES (307, 'HLR', 'HLR.A.052', NULL, 'CFU去活失败:MS忙', 'CfuDeActvFailByMsBusy'); +INSERT INTO "kpi_title" VALUES (308, 'HLR', 'HLR.A.053', NULL, 'CFU去活失败:不允许将呼叫终接到MS', 'CfuDeActvFailByMsDenied'); +INSERT INTO "kpi_title" VALUES (309, 'HLR', 'HLR.A.054', NULL, 'CFU去活失败:未分配电话号码', 'CfuDeActvFailByUnAssignMsisdn'); +INSERT INTO "kpi_title" VALUES (310, 'HLR', 'HLR.A.055', NULL, 'CFU去活失败:MS去登记状态', 'CfuDeActvFailByMsErase'); +INSERT INTO "kpi_title" VALUES (311, 'HLR', 'HLR.A.056', NULL, 'CFU去活失败:无寻呼响应', 'CfuDeActvFailByNoPagingResp'); +INSERT INTO "kpi_title" VALUES (312, 'HLR', 'HLR.A.057', NULL, 'CFU去活失败:系统错误', 'CfuDeActvFailBySysFail'); +INSERT INTO "kpi_title" VALUES (313, 'HLR', 'HLR.A.058', NULL, 'CFU去活失败:不可用', 'CfuDeActvFailByUnavailable'); +INSERT INTO "kpi_title" VALUES (314, 'HLR', 'HLR.A.059', NULL, '发起CFB业务登记且激活次数', 'CfbActvReqTotalNum'); +INSERT INTO "kpi_title" VALUES (315, 'HLR', 'HLR.A.060', NULL, 'CFB业务登记且激活成功次数', 'CfbActvSuccTotalNum'); +INSERT INTO "kpi_title" VALUES (316, 'HLR', 'HLR.A.061', NULL, 'CFB登记失败:MS忙', 'CfbRegFailByMsBusy'); +INSERT INTO "kpi_title" VALUES (317, 'HLR', 'HLR.A.062', NULL, 'CFB登记失败:不允许将呼叫终接到MS', 'CfbRegFailByMsDenied'); +INSERT INTO "kpi_title" VALUES (318, 'HLR', 'HLR.A.063', NULL, 'CFB登记失败:MS去登记状态', 'CfbRegFailByMsErase'); +INSERT INTO "kpi_title" VALUES (319, 'HLR', 'HLR.A.064', NULL, 'CFB登记失败:无寻呼响应', 'CfbRegFailByNoPagingResp'); +INSERT INTO "kpi_title" VALUES (320, 'HLR', 'HLR.A.065', NULL, 'CFB登记失败:系统错误', 'CfbRegFailBySysFail'); +INSERT INTO "kpi_title" VALUES (321, 'HLR', 'HLR.A.066', NULL, 'CFB登记失败:未分配电话号码', 'CfbRegFailByUnAssignMsisdn'); +INSERT INTO "kpi_title" VALUES (322, 'HLR', 'HLR.A.067', NULL, 'CFB登记失败:不可用', 'CfbRegFailByUnavailable'); +INSERT INTO "kpi_title" VALUES (323, 'HLR', 'HLR.A.068', NULL, '发起CFB业务去活次数', 'CfbDeActvReqTotalNum'); +INSERT INTO "kpi_title" VALUES (324, 'HLR', 'HLR.A.069', NULL, 'CFB业务去活成功次数', 'CfbDeActvSuccTotalNum'); +INSERT INTO "kpi_title" VALUES (325, 'HLR', 'HLR.A.070', NULL, 'CFB去活失败:MS忙', 'CfbDeActvFailByMsBusy'); +INSERT INTO "kpi_title" VALUES (326, 'HLR', 'HLR.A.071', NULL, 'CFB去活失败:不允许将呼叫终接到MS', 'CfbDeActvFailByMsDenied'); +INSERT INTO "kpi_title" VALUES (327, 'HLR', 'HLR.A.072', NULL, 'CFB去活失败:MS去登记状态', 'CfbDeActvFailByMsErase'); +INSERT INTO "kpi_title" VALUES (328, 'HLR', 'HLR.A.073', NULL, 'CFB去活失败:无寻呼响应', 'CfbDeActvFailByNoPagingResp'); +INSERT INTO "kpi_title" VALUES (329, 'HLR', 'HLR.A.074', NULL, 'CFB去活失败:系统错误', 'CfbDeActvFailBySysFail'); +INSERT INTO "kpi_title" VALUES (330, 'HLR', 'HLR.A.075', NULL, 'CFB去活失败:未分配电话号码', 'CfbDeActvFailByUnAssignMsisdn '); +INSERT INTO "kpi_title" VALUES (331, 'HLR', 'HLR.A.076', NULL, 'CFB去活失败:不可用', 'CfbDeActvFailByUnavailable'); +INSERT INTO "kpi_title" VALUES (332, 'HLR', 'HLR.A.077', NULL, '发起CFNRy业务登记且激活次数', 'CfnryActvReqTotalNum'); +INSERT INTO "kpi_title" VALUES (333, 'HLR', 'HLR.A.078', NULL, 'CFNRy业务登记且激活成功次数', 'CfnryActvSuccTotalNum'); +INSERT INTO "kpi_title" VALUES (334, 'HLR', 'HLR.A.079', NULL, 'CFNRy登记失败:MS忙', 'CfnryRegFailByMsBusy'); +INSERT INTO "kpi_title" VALUES (335, 'HLR', 'HLR.A.080', NULL, 'CFNRy登记失败:不允许将呼叫终接到MS', 'CfnryRegFailByMsDenied'); +INSERT INTO "kpi_title" VALUES (336, 'HLR', 'HLR.A.081', NULL, 'CFNRy登记失败:MS去登记状态', 'CfnryRegFailByMsErase'); +INSERT INTO "kpi_title" VALUES (337, 'HLR', 'HLR.A.082', NULL, 'CFNRy登记失败:无寻呼响应', 'CfnryRegFailByNoPagingResp'); +INSERT INTO "kpi_title" VALUES (338, 'HLR', 'HLR.A.083', NULL, 'CFNRy登记失败:系统错误', 'CfnryRegFailBySysFail'); +INSERT INTO "kpi_title" VALUES (339, 'HLR', 'HLR.A.084', NULL, 'CFNRy登记失败:未分配电话号码', 'CfnryRegFailByUnAssignMsisdn'); +INSERT INTO "kpi_title" VALUES (340, 'HLR', 'HLR.A.085', NULL, 'CFNRy登记失败:不可用', 'CfnryRegFailByUnavailable'); +INSERT INTO "kpi_title" VALUES (341, 'HLR', 'HLR.A.086', NULL, '发起CFNRy业务去活次数', 'CfnryDeActvReqTotalNum'); +INSERT INTO "kpi_title" VALUES (342, 'HLR', 'HLR.A.087', NULL, 'CFNRy业务去活成功次数', 'CfnryDeActvSuccTotalNum'); +INSERT INTO "kpi_title" VALUES (343, 'HLR', 'HLR.A.088', NULL, 'CFNRy去活失败:MS忙', 'CfnryDeActvFailByMsBusy'); +INSERT INTO "kpi_title" VALUES (344, 'HLR', 'HLR.A.089', NULL, 'CFNRy去活失败:不允许将呼叫终接到MS', 'CfnryDeActvFailByMsDenied'); +INSERT INTO "kpi_title" VALUES (345, 'HLR', 'HLR.A.090', NULL, 'CFNRy去活失败:MS去登记状态', 'CfnryDeActvFailByMsErase'); +INSERT INTO "kpi_title" VALUES (346, 'HLR', 'HLR.A.091', NULL, 'CFNRy去活失败:无寻呼响应', 'CfnryDeActvFailByNoPagingResp'); +INSERT INTO "kpi_title" VALUES (347, 'HLR', 'HLR.A.092', NULL, 'CFNRy去活失败:系统错误', 'CfnryDeActvFailBySysFail'); +INSERT INTO "kpi_title" VALUES (348, 'HLR', 'HLR.A.093', NULL, 'CFNRy去活失败:未分配电话号码', 'CfnryDeActvFailByUnAssignMsisdn'); +INSERT INTO "kpi_title" VALUES (349, 'HLR', 'HLR.A.094', NULL, 'CFNRy去活失败:不可用', 'CfnryDeActvFailByUnavailable'); +INSERT INTO "kpi_title" VALUES (350, 'HLR', 'HLR.A.095', NULL, '发起CFNRc)业务登记且激活次数', 'CfnrcActvReqTotalNum'); +INSERT INTO "kpi_title" VALUES (351, 'HLR', 'HLR.A.096', NULL, '(CFNRc)业务登记且激活成功次数', 'CfnrcActvSuccTotalNum'); +INSERT INTO "kpi_title" VALUES (352, 'HLR', 'HLR.A.097', NULL, '(CFNRc)登记失败:MS忙', 'CfnrcRegFailByMsBusy'); +INSERT INTO "kpi_title" VALUES (353, 'HLR', 'HLR.A.098', NULL, '(CFNRc)登记失败:不允许将呼叫终接到MS', 'CfnrcRegFailByMsDenied'); +INSERT INTO "kpi_title" VALUES (354, 'HLR', 'HLR.A.099', NULL, '(CFNRc)登记失败:MS去登记状态', 'CfnrcRegFailByMsErase'); +INSERT INTO "kpi_title" VALUES (355, 'HLR', 'HLR.A.100', NULL, '(CFNRc)登记失败:无寻呼响应', 'CfnrcRegFailByNoPagingResp'); +INSERT INTO "kpi_title" VALUES (356, 'HLR', 'HLR.A.101', NULL, '(CFNRc)登记失败:系统错误', 'CfnrcRegFailBySysFail'); +INSERT INTO "kpi_title" VALUES (357, 'HLR', 'HLR.A.102', NULL, '(CFNRc)登记失败:未分配电话号码', 'CfnrcRegFailByUnAssignMsisdn'); +INSERT INTO "kpi_title" VALUES (358, 'HLR', 'HLR.A.103', NULL, '(CFNRc)登记失败:不可用', 'CfnrcRegFailByUnavailable'); +INSERT INTO "kpi_title" VALUES (359, 'HLR', 'HLR.A.104', NULL, '发起CFNRc)业务去活次数', 'CfnrcDeActvReqTotalNum'); +INSERT INTO "kpi_title" VALUES (360, 'HLR', 'HLR.A.105', NULL, 'CFNRc业务去活成功次数', 'CfnrcDeActvSuccTotalNum'); +INSERT INTO "kpi_title" VALUES (361, 'HLR', 'HLR.A.106', NULL, 'CFNRc)去活失败:MS忙', 'CfnrcDeActvFailByMsBusy'); +INSERT INTO "kpi_title" VALUES (362, 'HLR', 'HLR.A.107', NULL, 'CFNRc)去活失败:不允许将呼叫终接到MS', 'CfnrcDeActvFailByMsDenied'); +INSERT INTO "kpi_title" VALUES (363, 'HLR', 'HLR.A.108', NULL, 'CFNRc)去活失败:MS去登记状态', 'CfnrcDeActvFailByMsErase'); +INSERT INTO "kpi_title" VALUES (364, 'HLR', 'HLR.A.109', NULL, 'CFNRc)去活失败:无寻呼响应', 'CfnrcDeActvFailByNoPagingResp'); +INSERT INTO "kpi_title" VALUES (365, 'HLR', 'HLR.A.110', NULL, 'CFNRc)去活失败:系统错误', 'CfnrcDeActvFailBySysFail'); +INSERT INTO "kpi_title" VALUES (366, 'HLR', 'HLR.A.111', NULL, 'CFNRc)去活失败:未分配电话号码', 'CfnrcDeActvFailByUnAssignMsisdn'); +INSERT INTO "kpi_title" VALUES (367, 'HLR', 'HLR.A.112', NULL, 'CFNRc)去活失败:不可用', 'CfnrcDeActvFailByUnavailable'); +INSERT INTO "kpi_title" VALUES (368, 'HLR', 'HLR.A.113', NULL, '发起CW业务激活次数', 'CwActvReqTotalNum'); +INSERT INTO "kpi_title" VALUES (369, 'HLR', 'HLR.A.114', NULL, 'CW业务激活成功次数', 'CwActvSuccTotalNum'); +INSERT INTO "kpi_title" VALUES (370, 'HLR', 'HLR.A.115', NULL, 'CW激活失败:MS忙', 'CwActvFailByMsBusy'); +INSERT INTO "kpi_title" VALUES (371, 'HLR', 'HLR.A.116', NULL, 'CW激活失败:不允许将呼叫终接到MS', 'CwActvFailByMsDenied'); +INSERT INTO "kpi_title" VALUES (372, 'HLR', 'HLR.A.117', NULL, 'CW激活失败:MS去登记状态', 'CwActvFailByMsErase'); +INSERT INTO "kpi_title" VALUES (373, 'HLR', 'HLR.A.118', NULL, 'CW激活失败:无寻呼响应', 'CwActvFailByNoPagingResp'); +INSERT INTO "kpi_title" VALUES (374, 'HLR', 'HLR.A.119', NULL, 'CW激活失败:系统错误', 'CwActvFailBySysFail'); +INSERT INTO "kpi_title" VALUES (375, 'HLR', 'HLR.A.120', NULL, 'CW激活失败:未分配电话号码', 'CwActvFailByUnAssignMsisdn'); +INSERT INTO "kpi_title" VALUES (376, 'HLR', 'HLR.A.121', NULL, 'CW激活失败:不可用', 'CwActvFailByUnavailable'); +INSERT INTO "kpi_title" VALUES (377, 'HLR', 'HLR.A.122', NULL, '发起CW业务去活次数', 'CwDeActvReqTotalNum'); +INSERT INTO "kpi_title" VALUES (378, 'HLR', 'HLR.A.123', NULL, 'CW业务去活成功次数', 'CwDeActvSuccTotalNum'); +INSERT INTO "kpi_title" VALUES (379, 'HLR', 'HLR.A.124', NULL, 'CW去活失败:MS忙', 'CwDeActvFailByMsBusy'); +INSERT INTO "kpi_title" VALUES (380, 'HLR', 'HLR.A.125', NULL, 'CW去活失败:不允许将呼叫终接到MS', 'CwDeActvFailByMsDenied'); +INSERT INTO "kpi_title" VALUES (381, 'HLR', 'HLR.A.126', NULL, 'CW去活失败:MS去登记状态', 'CwDeActvFailByMsErase'); +INSERT INTO "kpi_title" VALUES (382, 'HLR', 'HLR.A.127', NULL, 'CW去活失败:无寻呼响应', 'CwDeActvFailByNoPagingResp'); +INSERT INTO "kpi_title" VALUES (383, 'HLR', 'HLR.A.128', NULL, 'CW去活失败:系统错误', 'CwDeActvFailBySysFail'); +INSERT INTO "kpi_title" VALUES (384, 'HLR', 'HLR.A.129', NULL, 'CW去活失败:未分配电话号码', 'CwDeActvFailByUnAssignMsisdn'); +INSERT INTO "kpi_title" VALUES (385, 'HLR', 'HLR.A.130', NULL, 'CW去活失败:不可用', 'CwDeActvFailByUnavailable'); +INSERT INTO "kpi_title" VALUES (386, 'HLR', 'HLR.A.131', NULL, '发起前转业务去活次数', 'CFDeActvReqTotalNum'); +INSERT INTO "kpi_title" VALUES (387, 'HLR', 'HLR.A.132', NULL, '前转业务去活成功次数', 'CFDeActvSuccTotalNum'); +INSERT INTO "kpi_title" VALUES (388, 'HLR', 'HLR.A.133', NULL, '发起补充业务登记次数', 'SSRegReqTotalNum'); +INSERT INTO "kpi_title" VALUES (389, 'HLR', 'HLR.A.134', NULL, '发起补充业务登记成功次数', 'SSRegSuccTotalNum'); +INSERT INTO "kpi_title" VALUES (390, 'HLR', 'HLR.A.135', NULL, '获取路由尝试次数', 'RouteInfoReqTotalNum'); +INSERT INTO "kpi_title" VALUES (391, 'HLR', 'HLR.A.136', NULL, '获取路由成功次数', 'RouteInfoSuccTotalNum'); +INSERT INTO "kpi_title" VALUES (392, 'HLR', 'HLR.A.137', NULL, '获取路由尝试失败:缺席用户', 'RouteInfoFailByAbsentSub'); +INSERT INTO "kpi_title" VALUES (393, 'HLR', 'HLR.A.138', NULL, '获取路由尝试失败:未知用户', 'RouteInfoFailByUnknownSub'); +INSERT INTO "kpi_title" VALUES (394, 'HLR', 'HLR.A.139', NULL, '获取路由尝试失败:系统错误', 'RouteInfoFailBySysFail'); +INSERT INTO "kpi_title" VALUES (395, 'HLR', 'HLR.A.140', NULL, '获取路由尝试失败:终呼拒绝', 'RouteInfoFailByCalledReject'); +INSERT INTO "kpi_title" VALUES (396, 'HLR', 'HLR.A.141', NULL, '获取路由尝试失败:缺参数', 'RouteInfoFailByDataMiss'); +INSERT INTO "kpi_title" VALUES (397, 'HLR', 'HLR.A.142', NULL, '获取路由尝试失败:设备不支持', 'RouteInfoFailByFacNotSupport'); +INSERT INTO "kpi_title" VALUES (398, 'HLR', 'HLR.A.143', NULL, '获取路由尝试失败:不支持路由优化', 'RouteInfoFailByORNotAllowed'); +INSERT INTO "kpi_title" VALUES (399, 'HLR', 'HLR.A.144', NULL, 'SRI触发漫游号码请求失败:缺席用户', 'RouteNumberFailByAbsentSub'); +INSERT INTO "kpi_title" VALUES (400, 'HLR', 'HLR.A.145', NULL, 'SRI触发漫游号码请求失败:缺参数', 'RouteNumberFailByDataMiss'); +INSERT INTO "kpi_title" VALUES (401, 'HLR', 'HLR.A.146', NULL, 'SRI触发漫游号码请求失败:设备不支持', 'RouteNumberFailByFacNotSupport'); +INSERT INTO "kpi_title" VALUES (402, 'HLR', 'HLR.A.147', NULL, 'SRI触发漫游号码请求失败:无漫游号码分配', 'RouteNumberFailByNoAssign'); +INSERT INTO "kpi_title" VALUES (403, 'HLR', 'HLR.A.148', NULL, 'SRI触发漫游号码请求失败:不支持路由优化', 'RouteNumberFailByORNotAllowed'); +INSERT INTO "kpi_title" VALUES (404, 'HLR', 'HLR.A.149', NULL, 'SRI触发漫游号码请求次数', 'RouteNumberReqTotalNum'); +INSERT INTO "kpi_title" VALUES (405, 'HLR', 'HLR.A.150', NULL, 'SRI触发漫游号码请求失败:系统错误', 'RouteNumberFailBySysFail'); +INSERT INTO "kpi_title" VALUES (406, 'HLR', 'HLR.A.151', NULL, 'SRI触发漫游号码请求失败:非期望的参数值', 'RouteNumberFailByUnexpData'); +INSERT INTO "kpi_title" VALUES (407, 'HLR', 'HLR.A.152', NULL, 'SRI触发漫游号码请求成功次数', 'RouteNumberSuccTotalNum'); +INSERT INTO "kpi_title" VALUES (408, 'HLR', 'HLR.A.153', NULL, '路由失败:呼叫闭锁', 'SMRouteFailByCallBarred'); +INSERT INTO "kpi_title" VALUES (409, 'HLR', 'HLR.A.154', NULL, '路由失败:缺参数', 'SMRouteFailByDataMiss'); +INSERT INTO "kpi_title" VALUES (410, 'HLR', 'HLR.A.155', NULL, '路由失败:设备不支持', 'SMRouteFailByFacNotSupport'); +INSERT INTO "kpi_title" VALUES (411, 'HLR', 'HLR.A.156', NULL, '路由失败:系统错误', 'SMRouteFailBySysFail'); +INSERT INTO "kpi_title" VALUES (412, 'HLR', 'HLR.A.157', NULL, '路由失败:非期望的参数值', 'SMRouteFailByUnexptPara'); +INSERT INTO "kpi_title" VALUES (413, 'HLR', 'HLR.A.158', NULL, '路由失败:未知用户', 'SMRouteFailByUnknownSub'); +INSERT INTO "kpi_title" VALUES (414, 'HLR', 'HLR.A.159', NULL, '终呼失败:非法用户', 'SMRouteFailByIllegalSub'); +INSERT INTO "kpi_title" VALUES (415, 'HLR', 'HLR.A.160', NULL, '终呼失败:缺席用户', 'SMRouteFailByAbsentSub'); +INSERT INTO "kpi_title" VALUES (416, 'HLR', 'HLR.A.161', NULL, '终呼失败:终呼时用户忙', 'SMRouteFailByBusySub'); +INSERT INTO "kpi_title" VALUES (417, 'HLR', 'HLR.A.162', NULL, '终呼失败:系统错误', 'SMRouteFailBySysFail'); +INSERT INTO "kpi_title" VALUES (418, 'HLR', 'HLR.A.163', NULL, '终呼失败:不期望的参数值', 'SMRouteFailByUnexptPara'); +INSERT INTO "kpi_title" VALUES (419, 'HLR', 'HLR.A.164', NULL, '终呼失败:消息等待队列满', 'SMRouteFailByMsgQueueFull'); +INSERT INTO "kpi_title" VALUES (420, 'HLR', 'HLR.A.165', NULL, '接收GSM MAP_ALERT消息次数', 'GsmAlertReqTotalNum'); +INSERT INTO "kpi_title" VALUES (421, 'HLR', 'HLR.A.166', NULL, '接收GSM MAP_ALERT消息成功次数', 'GsmAlertSuccTotalNum'); +INSERT INTO "kpi_title" VALUES (422, 'HLR', 'HLR.A.167', NULL, '重启指示发送次数', 'ResetReqTotalNum'); +INSERT INTO "kpi_title" VALUES (423, 'HLR', 'HLR.A.168', NULL, '重启成功次数', 'ResetSuccTotalNum'); +INSERT INTO "kpi_title" VALUES (424, 'HLR', 'HLR.A.169', NULL, '数据恢复请求次数', 'RestoreDataReqTotalNum'); +INSERT INTO "kpi_title" VALUES (425, 'HLR', 'HLR.A.170', NULL, '数据恢复成功次数', 'RestoreDataReqSuccNum'); +INSERT INTO "kpi_title" VALUES (426, 'HLR', 'HLR.A.171', NULL, 'C2G Boss开户成功次数', 'AddUserBossSuccNum'); +INSERT INTO "kpi_title" VALUES (427, 'HLR', 'HLR.A.172', NULL, 'C2G Boss销户成功次数', 'DelUserBossSuccNum'); +INSERT INTO "kpi_title" VALUES (428, 'HLR', 'HLR.A.173', NULL, 'C2G Boss修改用户成功次数', 'ModUserBossSuccNum'); +INSERT INTO "kpi_title" VALUES (429, 'HLR', 'HLR.A.174', NULL, 'C2G Boss开户请求次数', 'AddUserBossReqNum'); +INSERT INTO "kpi_title" VALUES (430, 'HLR', 'HLR.A.175', NULL, 'C2G Boss受理失败返回IMSI not used次数', 'BossServFailByImsiNot'); +INSERT INTO "kpi_title" VALUES (431, 'HLR', 'HLR.A.176', NULL, 'C2G Boss受理失败返回ISDN not used次数', 'BossServFailByIsdnNot'); +INSERT INTO "kpi_title" VALUES (432, 'HLR', 'HLR.A.177', NULL, 'C2G Boss受理失败返回其他错误次数', 'BossServFailByOther'); +INSERT INTO "kpi_title" VALUES (433, 'HLR', 'HLR.A.178', NULL, 'C2G Boss受理失败返回repeat IMSI次数', 'BossServFailByRepImsi'); +INSERT INTO "kpi_title" VALUES (434, 'HLR', 'HLR.A.179', NULL, 'C2G Boss受理失败返回repeat ISDN次数', 'BossServFailByRepIsdn'); +INSERT INTO "kpi_title" VALUES (435, 'HLR', 'HLR.A.180', NULL, 'C2G Boss销户请求次数', 'DelUserBossReqNum'); +INSERT INTO "kpi_title" VALUES (436, 'HLR', 'HLR.A.181', NULL, 'C2G Boss修改用户请求次数', 'ModUserBossReqNum'); + +INSERT INTO "kpi_title" VALUES (437, 'UDM', 'AUSF.01', '{"cn": "鉴权成功次数", "en": "Ausf.UeAuthAnsSucc"}', '鉴权成功次数', 'Ausf.UeAuthAnsSucc'); +INSERT INTO "kpi_title" VALUES (438, 'UDM', 'AUSF.02', '{"cn": "鉴权请求次数", "en": "Ausf.UeAuthReq"}', '鉴权请求次数', 'Ausf.UeAuthReq'); diff --git a/build/database/lite/common/measure_title.sql b/build/database/lite/common/measure_title.sql new file mode 100644 index 00000000..1e4bb63c --- /dev/null +++ b/build/database/lite/common/measure_title.sql @@ -0,0 +1,583 @@ +-- ---------------------------- +-- Table structure for measure_title +-- ---------------------------- +DROP TABLE IF EXISTS "measure_title"; +CREATE TABLE "measure_title" ( + "id" integer NOT NULL, + "ne_type" text(16), + "kpi_code" text(32), + "kpi_id" text(64), + "pseudo" text(255), + "object_type" text(16), + "period" text(8), + "title_json" text, + "description" text(255), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Records of measure_title +-- ---------------------------- +INSERT INTO "measure_title" VALUES (3431, 'AMF', 'AMFHA01', 'AMF.AuthReq', 'false', 'AmfFunction', '15M', '{"cn":"鉴权请求次数","en":"AMF.AuthReq"}', 'AMF发起鉴权请求消息的次数 +'); +INSERT INTO "measure_title" VALUES (3432, 'AMF', 'AMFHA02', 'AMF.AuthFail', 'false', 'AmfFunction', '15M', '{"cn":"鉴权参数错误次数","en":"AMF.AuthFail"}', 'UE检测出Authentication Request中包含的鉴权参数错误,向AMF发送Authentication Failure的次数,cause值可能为20、21、26'); +INSERT INTO "measure_title" VALUES (3433, 'AMF', 'AMFHA02', 'AMF.AuthFail.20', 'false', 'AmfFunction', '15M', '{"cn":"MAC错误导致的鉴权参数错误次数","en":"AMF.AuthFail.20"}', 'UE检测出Authentication Request中包含的鉴权参数错误,向AMF发送Authentication Failure的次数,cause值可能为20、21、26'); +INSERT INTO "measure_title" VALUES (3434, 'AMF', 'AMFHA02', 'AMF.AuthFail.21', 'false', 'AmfFunction', '15M', '{"cn":"同步失败导致的鉴权参数错误次数","en":"AMF.AuthFail.21"}', 'UE检测出Authentication Request中包含的鉴权参数错误,向AMF发送Authentication Failure的次数,cause值可能为20、21、26'); +INSERT INTO "measure_title" VALUES (3435, 'AMF', 'AMFHA02', 'AMF.AuthFail.26', 'false', 'AmfFunction', '15M', '{"cn":"非5G鉴权导致的鉴权参数错误次数","en":"AMF.AuthFail.26"}', 'UE检测出Authentication Request中包含的鉴权参数错误,向AMF发送Authentication Failure的次数,cause值可能为20、21、26'); +INSERT INTO "measure_title" VALUES (3436, 'AMF', 'AMFHA03', 'AMF.AuthReject', 'false', 'AmfFunction', '15M', '{"cn":"鉴权拒绝次数","en":"AMF.AuthReject"}', '发送Authentication Reject消息的次数; +'); +INSERT INTO "measure_title" VALUES (3437, 'AMF', 'AMFHB01', 'AMF.RegSub', 'false', 'AmfFunction', '15M', '{"cn":"AMF注册态用户数","en":"AMF.RegSub"}', '当前所有注册在AMF上的用户'); +INSERT INTO "measure_title" VALUES (3438, 'AMF', 'AMFHB01', 'AMF.RegSubMean', 'false', 'AmfFunction', '15M', '{"cn":"AMF平均注册态用户数","en":"AMF.RegSubMean"}', '当前所有注册在AMF上的用户,取统计周期内的平均值'); +INSERT INTO "measure_title" VALUES (3439, 'AMF', 'AMFHB01', 'AMF.RegSubMax', 'false', 'AmfFunction', '15M', '{"cn":"AMF最大注册态用户数","en":"AMF.RegSubMax"}', '当前所有注册在AMF上的用户,取统计周期内的最大值'); +INSERT INTO "measure_title" VALUES (3440, 'AMF', 'AMFHB01', 'AMF.RegSub.CmIdle', 'false', 'AmfFunction', '15M', '{"cn":"AMF空闲态用户数","en":"AMF.RegSub.CmIdle"}', '当前所有注册在AMF上的处于CM-IDLE状态的用户。'); +INSERT INTO "measure_title" VALUES (3441, 'AMF', 'AMFHB01', 'AMF.RegSub.CmIdleMean', 'false', 'AmfFunction', '15M', '{"cn":"AMF平均空闲态用户数","en":"AMF.RegSub.CmIdleMean"}', '当前所有注册在AMF上的处于CM-IDLE状态的用户,取统计周期内的平均值'); +INSERT INTO "measure_title" VALUES (3442, 'AMF', 'AMFHB01', 'AMF.RegSub.CmIdleMax', 'false', 'AmfFunction', '15M', '{"cn":"AMF最大空闲态用户数","en":"AMF.RegSub.CmIdleMax"}', '当前所有注册在AMF上的处于CM-IDLE状态的用户,取统计周期内的最大值'); +INSERT INTO "measure_title" VALUES (3443, 'AMF', 'AMFHB01', 'AMF.RegSub.CmIdle._Ta', 'true', 'AmfFunction', '15M', '{"cn":"分跟踪区的AMF空闲态用户数","en":"AMF.RegSub.CmIdle._Ta"}', '分TA统计当前处于CM-IDLE状态的用户数。如果网络配置约定TAList只包括当前TA,则分跟踪区的统计是准确的;若网络配置TAList可以包括多个TA,则以上次用户处于连接态时的TA作为用户当前TA,但这样统计的结果只是一个近似值。'); +INSERT INTO "measure_title" VALUES (3444, 'AMF', 'AMFHB01', 'AMF.RegSub.CmIdleMean._Ta', 'true', 'AmfFunction', '15M', '{"cn":"分跟踪区的AMF平均空闲态用户数","en":"AMF.RegSub.CmIdleMean._Ta"}', '分TA统计当前处于CM-IDLE状态的用户数,取统计周期内的平均值。如果网络配置约定TAList只包括当前TA,则分跟踪区的统计是准确的;若网络配置TAList可以包括多个TA,则以上次用户处于连接态时的TA作为用户当前TA,但这样统计的结果只是一个近似值。'); +INSERT INTO "measure_title" VALUES (3445, 'AMF', 'AMFHB01', 'AMF.RegSub.CmIdleMax._Ta', 'true', 'AmfFunction', '15M', '{"cn":"分跟踪区的AMF最大空闲态用户数","en":"AMF.RegSub.CmIdleMax._Ta"}', '分TA统计当前处于CM-IDLE状态的用户数,取统计周期内的最大值。如果网络配置约定TAList只包括当前TA,则分跟踪区的统计是准确的;若网络配置TAList可以包括多个TA,则以上次用户处于连接态时的TA作为用户当前TA,但这样统计的结果只是一个近似值。'); +INSERT INTO "measure_title" VALUES (3446, 'AMF', 'AMFHB01', 'AMF.RegSub.CmConnected', 'false', 'AmfFunction', '15M', '{"cn":"AMF连接态用户数","en":"AMF.RegSub.CmConnected"}', '当前所有注册在AMF上的处于CM-CONNECTED状态的用户.'); +INSERT INTO "measure_title" VALUES (3447, 'AMF', 'AMFHB01', 'AMF.RegSub.CmConnectedMean', 'false', 'AmfFunction', '15M', '{"cn":"AMF平均连接态用户数","en":"AMF.RegSub.CmConnectedMean"}', '当前所有注册在AMF上的处于CM-CONNECTED状态的用户,取统计周期内的平均值'); +INSERT INTO "measure_title" VALUES (3448, 'AMF', 'AMFHB01', 'AMF.RegSub.CmConnectedMax', 'false', 'AmfFunction', '15M', '{"cn":"AMF最大连接态用户数","en":"AMF.RegSub.CmConnectedMax"}', '当前所有注册在AMF上的处于CM-CONNECTED状态的用户,取统计周期内的最大值'); +INSERT INTO "measure_title" VALUES (3449, 'AMF', 'AMFHB01', 'AMF.RegSub.CmConnected._Ta', 'true', 'AmfFunction', '15M', '{"cn":"分跟踪区的AMF连接态用户数","en":"AMF.RegSub.CmConnected._Ta"}', '分跟踪区统计当前所有注册在AMF上的处于CM-CONNECTED状态的用户.'); +INSERT INTO "measure_title" VALUES (3450, 'AMF', 'AMFHB01', 'AMF.RegSub.CmConnectedMean._Ta', 'true', 'AmfFunction', '15M', '{"cn":"分跟踪区的AMF平均连接态用户数","en":"AMF.RegSub.CmConnectedMean._Ta"}', '分跟踪区统计当前所有注册在AMF上的处于CM-CONNECTED状态的用户,取统计周期内的平均值'); +INSERT INTO "measure_title" VALUES (3451, 'AMF', 'AMFHB01', 'AMF.RegSub.CmConnectedMax._Ta', 'true', 'AmfFunction', '15M', '{"cn":"分跟踪区的AMF最大连接态用户数","en":"AMF.RegSub.CmConnectedMax._Ta"}', '分跟踪区统计当前所有注册在AMF上的处于CM-CONNECTED状态的用户,取统计周期内的最大值'); +INSERT INTO "measure_title" VALUES (3452, 'AMF', 'AMFHB01', 'AMF.RegSub.CmConnected._Ns', 'true', 'AmfFunction', '15M', '{"cn":"分切片的AMF连接态用户数","en":"AMF.RegSub.CmConnected._Ns"}', '分切片统计当前所有注册在AMF上的处于CM-CONNECTED状态的用户.'); +INSERT INTO "measure_title" VALUES (3453, 'AMF', 'AMFHB01', 'AMF.RegSub._Ns', 'true', 'AmfFunction', '15M', '{"cn":"分切片的AMF注册用户数","en":"AMF.RegSub._Ns"}', 'AMF支持的允许UE使用的S-NSSAI统计每个网络切片在AMF上的用户数。以AMF下发给UE的allowed S-NSSAI中AMF支持的S-NSSAI的个数为准。'); +INSERT INTO "measure_title" VALUES (3454, 'AMF', 'AMFHB01', 'AMF.RegSubMean._Ns', 'true', 'AmfFunction', '15M', '{"cn":"分切片的AMF平均注册用户数","en":"AMF.RegSubMean._Ns"}', 'AMF支持的允许UE使用的S-NSSAI统计每个网络切片在AMF上的用户数,取统计周期内的平均值。以AMF下发给UE的allowed S-NSSAI中AMF支持的S-NSSAI的个数为准。'); +INSERT INTO "measure_title" VALUES (3455, 'AMF', 'AMFHB01', 'AMF.RegSubMax._Ns', 'true', 'AmfFunction', '15M', '{"cn":"分切片的AMF最大注册用户数","en":"AMF.RegSubMax._Ns"}', 'AMF支持的允许UE使用的S-NSSAI统计每个网络切片在AMF上的用户数,取统计周期内的最大值。以AMF下发给UE的allowed S-NSSAI中AMF支持的S-NSSAI的个数为准。'); +INSERT INTO "measure_title" VALUES (3456, 'AMF', 'AMFHB01', 'AMF.RegSub._NumSeg', 'true', 'AmfFunction', '15M', '{"cn":"分号段的AMF注册用户数","en":"AMF.RegSub._NumSeg"}', '分号段统计注册在AMF上的用户。伪测量_NumSeg的取值形式如下: +1)对于国漫用户: +  , 即IMSI的前5(6)位数字。 + AMF.NbrSubEcm.10001 +2)对于网内用户: + ,如 + AMF.NbrSubEcm.1370101'); +INSERT INTO "measure_title" VALUES (3457, 'AMF', 'AMFHC01', 'AMF.AttInitReg', 'false', 'AmfFunction', '15M', '{"cn":"初始注册请求次数","en":"AMF.AttInitReg"}', '初始注册请求次数,并分TA进行统计。'); +INSERT INTO "measure_title" VALUES (3458, 'AMF', 'AMFHC01', 'AMF.AttInitReg._Ta', 'true', 'AmfFunction', '15M', '{"cn":"分跟踪区的初始注册请求次数","en":"AMF.AttInitReg._Ta"}', '初始注册请求次数,并分TA进行统计。'); +INSERT INTO "measure_title" VALUES (3459, 'AMF', 'AMFHC02', 'AMF.SuccInitReg', 'false', 'AmfFunction', '15M', '{"cn":"初始注册成功次数","en":"AMF.SuccInitReg"}', '初始注册完成次数,并分TA进行统计。'); +INSERT INTO "measure_title" VALUES (3460, 'AMF', 'AMFHC02', 'AMF.SuccInitReg._Ta', 'true', 'AmfFunction', '15M', '{"cn":"分跟踪区的初始注册成功次数","en":"AMF.SuccInitReg._Ta"}', '初始注册完成次数,并分TA进行统计。'); +INSERT INTO "measure_title" VALUES (3461, 'AMF', 'AMFHC03', 'AMF.FailedInitReg', 'false', 'AmfFunction', '15M', '{"cn":"初始注册失败次数","en":"AMF.FailedInitReg"}', '初始注册失败次数,分原因进行分类统计; +其中,原因值3、5、6、7.User、15.User、27、9.User、11、12、13、62、111.User视为用户原因。'); +INSERT INTO "measure_title" VALUES (3462, 'AMF', 'AMFHC03', 'AMF.FailedInitReg._Cause', 'true', 'AmfFunction', '15M', '{"cn":"分原因值的初始注册失败次数","en":"AMF.FailedInitReg._Cause"}', '初始注册失败次数,分原因进行分类统计; +其中,原因值3、5、6、7.User、15.User、27、9.User、11、12、13、62、111.User视为用户原因。'); +INSERT INTO "measure_title" VALUES (3463, 'AMF', 'AMFHC03', 'AMF.FailedInitReg.3', 'false', 'AmfFunction', '15M', '{"cn":"初始注册失败次数_非法用户","en":"AMF.FailedInitReg.3"}', '初始注册失败次数,分原因进行分类统计; +其中,原因值3、5、6、7.User、15.User、27、9.User、11、12、13、62、111.User视为用户原因。'); +INSERT INTO "measure_title" VALUES (3464, 'AMF', 'AMFHC03', 'AMF.FailedInitReg.5', 'false', 'AmfFunction', '15M', '{"cn":"初始注册失败次数_PEI不允许","en":"AMF.FailedInitReg.5"}', '初始注册失败次数,分原因进行分类统计; +其中,原因值3、5、6、7.User、15.User、27、9.User、11、12、13、62、111.User视为用户原因。'); +INSERT INTO "measure_title" VALUES (3465, 'AMF', 'AMFHC03', 'AMF.FailedInitReg.6', 'false', 'AmfFunction', '15M', '{"cn":"初始注册失败次数_非法设备","en":"AMF.FailedInitReg.6"}', '初始注册失败次数,分原因进行分类统计; +其中,原因值3、5、6、7.User、15.User、27、9.User、11、12、13、62、111.User视为用户原因。'); +INSERT INTO "measure_title" VALUES (3466, 'AMF', 'AMFHC03', 'AMF.FailedInitReg.7', 'false', 'AmfFunction', '15M', '{"cn":"初始注册失败次数_5GS服务不允许","en":"AMF.FailedInitReg.7"}', '初始注册失败次数,分原因进行分类统计; +其中,原因值3、5、6、7.User、15.User、27、9.User、11、12、13、62、111.User视为用户原因。'); +INSERT INTO "measure_title" VALUES (3467, 'AMF', 'AMFHC03', 'AMF.FailedInitReg.7.User', 'false', 'AmfFunction', '15M', '{"cn":"初始注册失败次数_5GS服务不允许_用户原因","en":"AMF.FailedInitReg.7.User"}', '初始注册失败次数,分原因进行分类统计; +其中,原因值3、5、6、7.User、15.User、27、9.User、11、12、13、62、111.User视为用户原因。'); +INSERT INTO "measure_title" VALUES (3468, 'AMF', 'AMFHC03', 'AMF.FailedInitReg.15', 'false', 'AmfFunction', '15M', '{"cn":"初始注册失败次数_跟踪区内无合适小区","en":"AMF.FailedInitReg.15"}', '初始注册失败次数,分原因进行分类统计; +其中,原因值3、5、6、7.User、15.User、27、9.User、11、12、13、62、111.User视为用户原因。'); +INSERT INTO "measure_title" VALUES (3469, 'AMF', 'AMFHC03', 'AMF.FailedInitReg.15.User', 'false', 'AmfFunction', '15M', '{"cn":"初始注册失败次数_跟踪区内无合适小区_用户原因","en":"AMF.FailedInitReg.15.User"}', '初始注册失败次数,分原因进行分类统计; +其中,原因值3、5、6、7.User、15.User、27、9.User、11、12、13、62、111.User视为用户原因。'); +INSERT INTO "measure_title" VALUES (3470, 'AMF', 'AMFHC03', 'AMF.FailedInitReg.12', 'false', 'AmfFunction', '15M', '{"cn":"初始注册失败次数_跟踪区不允许","en":"AMF.FailedInitReg.12"}', '初始注册失败次数,分原因进行分类统计; +其中,原因值3、5、6、7.User、15.User、27、9.User、11、12、13、62、111.User视为用户原因。'); +INSERT INTO "measure_title" VALUES (3471, 'AMF', 'AMFHC03', 'AMF.FailedInitReg.13', 'false', 'AmfFunction', '15M', '{"cn":"初始注册失败次数_漫游跟踪区禁止接入","en":"AMF.FailedInitReg.13"}', '初始注册失败次数,分原因进行分类统计; +其中,原因值3、5、6、7.User、15.User、27、9.User、11、12、13、62、111.User视为用户原因。'); +INSERT INTO "measure_title" VALUES (3472, 'AMF', 'AMFHC03', 'AMF.FailedInitReg.27', 'false', 'AmfFunction', '15M', '{"cn":"初始注册失败次数_N1模式不允许","en":"AMF.FailedInitReg.27"}', '初始注册失败次数,分原因进行分类统计; +其中,原因值3、5、6、7.User、15.User、27、9.User、11、12、13、62、111.User视为用户原因。'); +INSERT INTO "measure_title" VALUES (3473, 'AMF', 'AMFHC03', 'AMF.FailedInitReg.62', 'false', 'AmfFunction', '15M', '{"cn":"初始注册失败次数_无可用网络切片","en":"AMF.FailedInitReg.62"}', '初始注册失败次数,分原因进行分类统计; +其中,原因值3、5、6、7.User、15.User、27、9.User、11、12、13、62、111.User视为用户原因。'); +INSERT INTO "measure_title" VALUES (3474, 'AMF', 'AMFHC03', 'AMF.FailedInitReg.11', 'false', 'AmfFunction', '15M', '{"cn":"初始注册失败次数_PLMN不允许","en":"AMF.FailedInitReg.11"}', '初始注册失败次数,分原因进行分类统计; +其中,原因值3、5、6、7.User、15.User、27、9.User、11、12、13、62、111.User视为用户原因。'); +INSERT INTO "measure_title" VALUES (3475, 'AMF', 'AMFHC03', 'AMF.FailedInitReg.111', 'false', 'AmfFunction', '15M', '{"cn":"初始注册失败次数_协议错误","en":"AMF.FailedInitReg.111"}', '初始注册失败次数,分原因进行分类统计; +其中,原因值3、5、6、7.User、15.User、27、9.User、11、12、13、62、111.User视为用户原因。'); +INSERT INTO "measure_title" VALUES (3476, 'AMF', 'AMFHC03', 'AMF.FailedInitReg.111.User', 'false', 'AmfFunction', '15M', '{"cn":"初始注册失败次数_协议错误_用户原因","en":"AMF.FailedInitReg.111.User"}', '初始注册失败次数,分原因进行分类统计; +其中,原因值3、5、6、7.User、15.User、27、9.User、11、12、13、62、111.User视为用户原因。'); +INSERT INTO "measure_title" VALUES (3477, 'AMF', 'AMFHC03', 'AMF.FailedInitReg._Ta', 'true', 'AmfFunction', '15M', '{"cn":"分跟踪区的初始注册失败次数","en":"AMF.FailedInitReg._Ta"}', '分跟踪区的初始注册失败次数,分原因进行分类统计; +其中,原因值3、5、6、7.User、8、15.User、27、9.User、11、12、13、62、111.User视为用户原因。'); +INSERT INTO "measure_title" VALUES (3478, 'AMF', 'AMFHC03', 'AMF.FailedInitReg._Ta.3', 'true', 'AmfFunction', '15M', '{"cn":"分跟踪区的初始注册失败次数_非法用户","en":"AMF.FailedInitReg._Ta.3"}', '分跟踪区的初始注册失败次数,分原因进行分类统计; +其中,原因值3、5、6、7.User、8、15.User、27、9.User、11、12、13、62、111.User视为用户原因。'); +INSERT INTO "measure_title" VALUES (3479, 'AMF', 'AMFHC03', 'AMF.FailedInitReg._Ta.5', 'true', 'AmfFunction', '15M', '{"cn":"分跟踪区的初始注册失败次数_PEI不允许","en":"AMF.FailedInitReg._Ta.5"}', '分跟踪区的初始注册失败次数,分原因进行分类统计; +其中,原因值3、5、6、7.User、8、15.User、27、9.User、11、12、13、62、111.User视为用户原因。'); +INSERT INTO "measure_title" VALUES (3480, 'AMF', 'AMFHC03', 'AMF.FailedInitReg._Ta.6', 'true', 'AmfFunction', '15M', '{"cn":"分跟踪区的初始注册失败次数_非法设备","en":"AMF.FailedInitReg._Ta.6"}', '分跟踪区的初始注册失败次数,分原因进行分类统计; +其中,原因值3、5、6、7.User、8、15.User、27、9.User、11、12、13、62、111.User视为用户原因。'); +INSERT INTO "measure_title" VALUES (3481, 'AMF', 'AMFHC03', 'AMF.FailedInitReg._Ta.7', 'true', 'AmfFunction', '15M', '{"cn":"分跟踪区的初始注册失败次数_5GS服务不允许","en":"AMF.FailedInitReg._Ta.7"}', '分跟踪区的初始注册失败次数,分原因进行分类统计; +其中,原因值3、5、6、7.User、8、15.User、27、9.User、11、12、13、62、111.User视为用户原因。'); +INSERT INTO "measure_title" VALUES (3482, 'AMF', 'AMFHC03', 'AMF.FailedInitReg._Ta.7.User', 'true', 'AmfFunction', '15M', '{"cn":"分跟踪区的初始注册失败次数_5GS服务不允许_用户原因","en":"AMF.FailedInitReg._Ta.7.User"}', '分跟踪区的初始注册失败次数,分原因进行分类统计; +其中,原因值3、5、6、7.User、8、15.User、27、9.User、11、12、13、62、111.User视为用户原因。'); +INSERT INTO "measure_title" VALUES (3483, 'AMF', 'AMFHC03', 'AMF.FailedInitReg._Ta.15', 'true', 'AmfFunction', '15M', '{"cn":"分跟踪区的初始注册失败次数_跟踪区内无合适小区","en":"AMF.FailedInitReg._Ta.15"}', '分跟踪区的初始注册失败次数,分原因进行分类统计; +其中,原因值3、5、6、7.User、8、15.User、27、9.User、11、12、13、62、111.User视为用户原因。'); +INSERT INTO "measure_title" VALUES (3484, 'AMF', 'AMFHC03', 'AMF.FailedInitReg._Ta.15.User', 'true', 'AmfFunction', '15M', '{"cn":"分跟踪区的初始注册失败次数_跟踪区内无合适小区_用户原因","en":"AMF.FailedInitReg._Ta.15.User"}', '分跟踪区的初始注册失败次数,分原因进行分类统计; +其中,原因值3、5、6、7.User、8、15.User、27、9.User、11、12、13、62、111.User视为用户原因。'); +INSERT INTO "measure_title" VALUES (3485, 'AMF', 'AMFHC03', 'AMF.FailedInitReg._Ta.12', 'true', 'AmfFunction', '15M', '{"cn":"分跟踪区的初始注册失败次数_跟踪区不允许","en":"AMF.FailedInitReg._Ta.12"}', '分跟踪区的初始注册失败次数,分原因进行分类统计; +其中,原因值3、5、6、7.User、8、15.User、27、9.User、11、12、13、62、111.User视为用户原因。'); +INSERT INTO "measure_title" VALUES (3486, 'AMF', 'AMFHC03', 'AMF.FailedInitReg._Ta.13', 'true', 'AmfFunction', '15M', '{"cn":"分跟踪区的初始注册失败次数_漫游跟踪区禁止接入","en":"AMF.FailedInitReg._Ta.13"}', '分跟踪区的初始注册失败次数,分原因进行分类统计; +其中,原因值3、5、6、7.User、8、15.User、27、9.User、11、12、13、62、111.User视为用户原因。'); +INSERT INTO "measure_title" VALUES (3487, 'AMF', 'AMFHC03', 'AMF.FailedInitReg._Ta.27', 'true', 'AmfFunction', '15M', '{"cn":"分跟踪区的初始注册失败次数_N1模式不允许","en":"AMF.FailedInitReg._Ta.27"}', '分跟踪区的初始注册失败次数,分原因进行分类统计; +其中,原因值3、5、6、7.User、8、15.User、27、9.User、11、12、13、62、111.User视为用户原因。'); +INSERT INTO "measure_title" VALUES (3488, 'AMF', 'AMFHC03', 'AMF.FailedInitReg._Ta.62', 'true', 'AmfFunction', '15M', '{"cn":"分跟踪区的初始注册失败次数_无可用网络切片","en":"AMF.FailedInitReg._Ta.62"}', '分跟踪区的初始注册失败次数,分原因进行分类统计; +其中,原因值3、5、6、7.User、8、15.User、27、9.User、11、12、13、62、111.User视为用户原因。'); +INSERT INTO "measure_title" VALUES (3489, 'AMF', 'AMFHC03', 'AMF.FailedInitReg._Ta.11', 'true', 'AmfFunction', '15M', '{"cn":"分跟踪区的初始注册失败次数_PLMN不允许","en":"AMF.FailedInitReg._Ta.11"}', '分跟踪区的初始注册失败次数,分原因进行分类统计; +其中,原因值3、5、6、7.User、8、15.User、27、9.User、11、12、13、62、111.User视为用户原因。'); +INSERT INTO "measure_title" VALUES (3490, 'AMF', 'AMFHC03', 'AMF.FailedInitReg._Ta.111', 'true', 'AmfFunction', '15M', '{"cn":"分跟踪区的初始注册失败次数_协议错误","en":"AMF.FailedInitReg._Ta.111"}', '分跟踪区的初始注册失败次数,分原因进行分类统计; +其中,原因值3、5、6、7.User、8、15.User、27、9.User、11、12、13、62、111.User视为用户原因。'); +INSERT INTO "measure_title" VALUES (3491, 'AMF', 'AMFHC03', 'AMF.FailedInitReg._Ta.111.User', 'true', 'AmfFunction', '15M', '{"cn":"分跟踪区的初始注册失败次数_协议错误_用户原因","en":"AMF.FailedInitReg._Ta.111.User"}', '分跟踪区的初始注册失败次数,分原因进行分类统计; +其中,原因值3、5、6、7.User、8、15.User、27、9.User、11、12、13、62、111.User视为用户原因。'); +INSERT INTO "measure_title" VALUES (3492, 'AMF', 'AMFHC04', 'AMF.InitRegTime', 'false', 'AmfFunction', '15M', '{"cn":"初始注册平均时长","en":"AMF.InitRegTime"}', '成功的初始附着流程的平均时长'); +INSERT INTO "measure_title" VALUES (3493, 'AMF', 'AMFHD01', 'AMF.RegUpdReq', 'false', 'AmfFunction', '15M', '{"cn":"注册更新请求次数","en":"AMF.RegUpdReq"}', '注册更新请求次数,并分TA进行统计。'); +INSERT INTO "measure_title" VALUES (3494, 'AMF', 'AMFHD01', 'AMF.RegUpdReq._Ta', 'true', 'AmfFunction', '15M', '{"cn":"分TA的注册更新请求次数","en":"AMF.RegUpdReq._Ta"}', '注册更新请求次数,并分TA进行统计。'); +INSERT INTO "measure_title" VALUES (3495, 'AMF', 'AMFHD01', 'AMF.RegUpdReq.Mob.InterAmf', 'false', 'AmfFunction', '15M', '{"cn":"AMF间移动性注册更新请求次数","en":"AMF.RegUpdReq.Mob.InterAmf"}', 'AMF间移动性注册更新请求次数,并分TA进行统计。'); +INSERT INTO "measure_title" VALUES (3496, 'AMF', 'AMFHD01', 'AMF.RegUpdReq.Mob.InterAmf._Ta', 'true', 'AmfFunction', '15M', '{"cn":"分TA的AMF间移动性注册更新请求次数","en":"AMF.RegUpdReq.Mob.InterAmf._Ta"}', 'AMF间移动性注册更新请求次数,并分TA进行统计。'); +INSERT INTO "measure_title" VALUES (3497, 'AMF', 'AMFHD01', 'AMF.RegUpdReq.Mob.IntraAmf', 'false', 'AmfFunction', '15M', '{"cn":"AMF内移动性注册更新请求次数","en":"AMF.RegUpdReq.Mob.IntraAmf"}', 'AMF内移动性注册更新请求次数,并分TA进行统计。'); +INSERT INTO "measure_title" VALUES (3498, 'AMF', 'AMFHD01', 'AMF.RegUpdReq.Mob.IntraAmf._Ta', 'true', 'AmfFunction', '15M', '{"cn":"分TA的AMF内移动性注册更新请求次数","en":"AMF.RegUpdReq.Mob.IntraAmf._Ta"}', 'AMF内移动性注册更新请求次数,并分TA进行统计。'); +INSERT INTO "measure_title" VALUES (3499, 'AMF', 'AMFHD01', 'AMF.RegUpdReq.Per', 'false', 'AmfFunction', '15M', '{"cn":"周期性注册更新请求次数","en":"AMF.RegUpdReq.Per"}', '周期性注册更新请求次数,并分TA进行统计。'); +INSERT INTO "measure_title" VALUES (3500, 'AMF', 'AMFHD01', 'AMF.RegUpdReq.Per._Ta', 'true', 'AmfFunction', '15M', '{"cn":"分TA的周期性注册更新请求次数","en":"AMF.RegUpdReq.Per._Ta"}', '周期性注册更新请求次数,并分TA进行统计。'); +INSERT INTO "measure_title" VALUES (3501, 'AMF', 'AMFHD02', 'AMF.RegUpdAcpt', 'false', 'AmfFunction', '15M', '{"cn":"注册更新接受次数","en":"AMF.RegUpdAcpt"}', '注册更新接受次数,并分TA进行统计。'); +INSERT INTO "measure_title" VALUES (3502, 'AMF', 'AMFHD02', 'AMF.RegUpdAcpt._Ta', 'true', 'AmfFunction', '15M', '{"cn":"分TA的注册更新接受次数","en":"AMF.RegUpdAcpt._Ta"}', '注册更新接受次数,并分TA进行统计。'); +INSERT INTO "measure_title" VALUES (3503, 'AMF', 'AMFHD02', 'AMF.RegUpdAcpt.Mob.InterAmf', 'false', 'AmfFunction', '15M', '{"cn":"AMF间移动性注册更新接受次数","en":"AMF.RegUpdAcpt.Mob.InterAmf"}', 'AMF间移动性注册更新接受次数,并分TA进行统计。'); +INSERT INTO "measure_title" VALUES (3504, 'AMF', 'AMFHD02', 'AMF.RegUpdAcpt.Mob.InterAmf._Ta', 'true', 'AmfFunction', '15M', '{"cn":"分TA的AMF间移动性注册更新接受次数","en":"AMF.RegUpdAcpt.Mob.InterAmf._Ta"}', 'AMF间移动性注册更新接受次数,并分TA进行统计。'); +INSERT INTO "measure_title" VALUES (3505, 'AMF', 'AMFHD02', 'AMF.RegUpdAcpt.Mob.IntraAmf', 'false', 'AmfFunction', '15M', '{"cn":"AMF内移动性注册更新接受次数","en":"AMF.RegUpdAcpt.Mob.IntraAmf"}', 'AMF内移动性注册更新接受次数,并分TA进行统计。'); +INSERT INTO "measure_title" VALUES (3506, 'AMF', 'AMFHD02', 'AMF.RegUpdAcpt.Mob.IntraAmf._Ta', 'true', 'AmfFunction', '15M', '{"cn":"分TA的AMF内移动性注册更新接受次数","en":"AMF.RegUpdAcpt.Mob.IntraAmf._Ta"}', 'AMF内移动性注册更新接受次数,并分TA进行统计。'); +INSERT INTO "measure_title" VALUES (3507, 'AMF', 'AMFHD02', 'AMF.RegUpdAcpt.Per', 'false', 'AmfFunction', '15M', '{"cn":"周期性注册更新接受次数","en":"AMF.RegUpdAcpt.Per"}', '周期性注册更新接受消息的个数,并分TA进行统计。'); +INSERT INTO "measure_title" VALUES (3508, 'AMF', 'AMFHD02', 'AMF.RegUpdAcpt.Per._Ta', 'true', 'AmfFunction', '15M', '{"cn":"分TA的周期性注册更新接受次数","en":"AMF.RegUpdAcpt.Per._Ta"}', '周期性注册更新接受消息的个数,并分TA进行统计。'); +INSERT INTO "measure_title" VALUES (3509, 'AMF', 'AMFHD03', 'AMF.RegUpdRej', 'false', 'AmfFunction', '15M', '{"cn":"注册更新失败次数","en":"AMF.RegUpdRej"}', '注册更新失败次数,分原因进行分类统计。 +其中,原因值3、6、7视为用户原因。'); +INSERT INTO "measure_title" VALUES (3510, 'AMF', 'AMFHD03', 'AMF.RegUpdRej._Cause', 'true', 'AmfFunction', '15M', '{"cn":"分原因的注册更新失败次数","en":"AMF.RegUpdRej._Cause"}', '注册更新失败次数,分原因进行分类统计。 +其中,原因值3、6、7视为用户原因。'); +INSERT INTO "measure_title" VALUES (3511, 'AMF', 'AMFHD03', 'AMF.RegUpdRej.3', 'false', 'AmfFunction', '15M', '{"cn":"注册更新失败次数(非法用户)","en":"AMF.RegUpdRej.3"}', '注册更新失败次数,分原因进行分类统计。 +其中,原因值3、6、7视为用户原因。'); +INSERT INTO "measure_title" VALUES (3512, 'AMF', 'AMFHD03', 'AMF.RegUpdRej.6', 'false', 'AmfFunction', '15M', '{"cn":"注册更新失败次数(非法设备)","en":"AMF.RegUpdRej.6"}', '注册更新失败次数,分原因进行分类统计。 +其中,原因值3、6、7视为用户原因。'); +INSERT INTO "measure_title" VALUES (3513, 'AMF', 'AMFHD03', 'AMF.RegUpdRej.7', 'false', 'AmfFunction', '15M', '{"cn":"注册更新失败次数(5GS服务不允许)","en":"AMF.RegUpdRej.7"}', '注册更新失败次数,分原因进行分类统计。 +其中,原因值3、6、7视为用户原因。'); +INSERT INTO "measure_title" VALUES (3514, 'AMF', 'AMFHD03', 'AMF.RegUpdRej._Ta', 'true', 'AmfFunction', '15M', '{"cn":"分TA的注册更新失败次数","en":"AMF.RegUpdRej._Ta"}', '分TA的注册更新失败次数,分原因进行分类统计。 +其中,原因值3、6、7视为用户原因。'); +INSERT INTO "measure_title" VALUES (3515, 'AMF', 'AMFHD03', 'AMF.RegUpdRej._Ta.3', 'true', 'AmfFunction', '15M', '{"cn":"分TA的注册更新失败次数(非法用户)","en":"AMF.RegUpdRej._Ta.3"}', '分TA的注册更新失败次数,分原因进行分类统计。 +其中,原因值3、6、7视为用户原因。'); +INSERT INTO "measure_title" VALUES (3516, 'AMF', 'AMFHD03', 'AMF.RegUpdRej._Ta.6', 'true', 'AmfFunction', '15M', '{"cn":"分TA的注册更新失败次数(非法设备)","en":"AMF.RegUpdRej._Ta.6"}', '分TA的注册更新失败次数,分原因进行分类统计。 +其中,原因值3、6、7视为用户原因。'); +INSERT INTO "measure_title" VALUES (3517, 'AMF', 'AMFHD03', 'AMF.RegUpdRej._Ta.7', 'true', 'AmfFunction', '15M', '{"cn":"分TA的注册更新失败次数(5GS服务不允许)","en":"AMF.RegUpdRej._Ta.7"}', '分TA的注册更新失败次数,分原因进行分类统计。 +其中,原因值3、6、7视为用户原因。'); +INSERT INTO "measure_title" VALUES (3518, 'AMF', 'AMFHE01', 'AMF.PagAtt', 'false', 'AmfFunction', '15M', '{"cn":"寻呼请求次数","en":"AMF.PagAtt"}', 'AMF的寻呼请求次数,并分TA进行统计。不包括二次寻呼(二次及二次以上统称为二次寻呼)请求次数。'); +INSERT INTO "measure_title" VALUES (3519, 'AMF', 'AMFHE01', 'AMF.PagAtt._Ta', 'true', 'AmfFunction', '15M', '{"cn":"分跟踪区寻呼请求次数","en":"AMF.PagAtt._Ta"}', 'AMF的寻呼请求次数,并分TA进行统计。不包括二次寻呼(二次及二次以上统称为二次寻呼)请求次数。'); +INSERT INTO "measure_title" VALUES (3520, 'AMF', 'AMFHE02', 'AMF.FirstPagingSucc', 'false', 'AmfFunction', '15M', '{"cn":"一次寻呼响应次数","en":"AMF.FirstPagingSucc"}', '一次寻呼成功次数,并分TA进行统计。 +'); +INSERT INTO "measure_title" VALUES (3521, 'AMF', 'AMFHE02', 'AMF.FirstPagingSucc._Ta', 'true', 'AmfFunction', '15M', '{"cn":"分跟踪区一次寻呼响应次数","en":"AMF.FirstPagingSucc._Ta"}', '一次寻呼成功次数,并分TA进行统计。 +'); +INSERT INTO "measure_title" VALUES (3522, 'AMF', 'AMFHE03', 'AMF.SecondPagingSucc', 'false', 'AmfFunction', '15M', '{"cn":"二次寻呼响应次数","en":"AMF.SecondPagingSucc"}', '二次(及二次以上)寻呼成功次数,并分TA进行统计。'); +INSERT INTO "measure_title" VALUES (3523, 'AMF', 'AMFHE03', 'AMF.SecondPagingSucc._Ta', 'true', 'AmfFunction', '15M', '{"cn":"分跟踪区二次寻呼响应次数","en":"AMF.SecondPagingSucc._Ta"}', '二次(及二次以上)寻呼成功次数,并分TA进行统计。'); +INSERT INTO "measure_title" VALUES (3524, 'AMF', 'AMFHE04', 'AMF.AttServiceReq', 'false', 'AmfFunction', '15M', '{"cn":"业务请求尝试次数","en":"AMF.AttServiceReq"}', 'UE发起的业务请求次数 +'); +INSERT INTO "measure_title" VALUES (3525, 'AMF', 'AMFHE05', 'AMF.FailServiceReq', 'false', 'AmfFunction', '15M', '{"cn":"业务请求被拒次数","en":"AMF.FailServiceReq"}', 'UE发起业务请求被拒绝个数'); +INSERT INTO "measure_title" VALUES (3526, 'AMF', 'AMFHE05', 'AMF.FailServiceReq._Cause', 'true', 'AmfFunction', '15M', '{"cn":"分原因的业务请求被拒次数","en":"AMF.FailServiceReq._Cause"}', 'UE发起业务请求被拒绝个数'); +INSERT INTO "measure_title" VALUES (3527, 'AMF', 'AMFHF01', 'AMF.AttIntraAmfXn', 'false', 'AmfFunction', '15M', '{"cn":"AMF内Xn接口切换尝试数","en":"AMF.AttIntraAmfXn"}', 'AMF内基于Xn接口的切换尝试次数。'); +INSERT INTO "measure_title" VALUES (3528, 'AMF', 'AMFHF02', 'AMF.SuccIntraAmfXn', 'false', 'AmfFunction', '15M', '{"cn":"AMF内Xn接口切换成功次数","en":"AMF.SuccIntraAmfXn"}', 'AMF内基于Xn接口的切换成功次数。'); +INSERT INTO "measure_title" VALUES (3529, 'AMF', 'AMFHF03', 'AMF.AttIntraAmfN2', 'false', 'AmfFunction', '15M', '{"cn":"AMF内N2接口切换尝试次数","en":"AMF.AttIntraAmfN2"}', 'AMF内基于N2接口的切换尝试次数。'); +INSERT INTO "measure_title" VALUES (3530, 'AMF', 'AMFHF04', 'AMF.SuccIntraAmfN2', 'false', 'AmfFunction', '15M', '{"cn":"AMF内N2接口切换成功次数","en":"AMF.SuccIntraAmfN2"}', 'AMF内基于N2接口的切换成功次数。'); +INSERT INTO "measure_title" VALUES (3531, 'AMF', 'AMFHF05', 'AMF.AttOutInterAmf', 'false', 'AmfFunction', '15M', '{"cn":"AMF间切换出尝试次数","en":"AMF.AttOutInterAmf"}', 'AMF间的切换,切换出源AMF尝试次数。'); +INSERT INTO "measure_title" VALUES (3532, 'AMF', 'AMFHF06', 'AMF.SuccOutInterAmf', 'false', 'AmfFunction', '15M', '{"cn":"AMF间切换出成功次数","en":"AMF.SuccOutInterAmf"}', 'AMF间的切换,切换出源AMF成功次数。'); +INSERT INTO "measure_title" VALUES (3533, 'AMF', 'AMFHF07', 'AMF.AttIncInterAmf', 'false', 'AmfFunction', '15M', '{"cn":"AMF间切换入尝试次数","en":"AMF.AttIncInterAmf"}', 'AMF间的切换,切换入目标AMF尝试次数。'); +INSERT INTO "measure_title" VALUES (3534, 'AMF', 'AMFHF08', 'AMF.SuccIncInterAmf', 'false', 'AmfFunction', '15M', '{"cn":"AMF间切换入成功次数","en":"AMF.SuccIncInterAmf"}', 'AMF间的切换,切换入目标AMF成功次数。'); +INSERT INTO "measure_title" VALUES (3535, 'AMF', 'AMFHG01', 'AMF.Att5GHandoverTo4G', 'false', 'AmfFunction', '15M', '{"cn":"从5G网络切换出至4G网络尝试次数","en":"AMF.Att5GHandoverTo4G"}', '系统间切换,从源NG-RAN切换出至目标E-UTRAN尝试次数。'); +INSERT INTO "measure_title" VALUES (3536, 'AMF', 'AMFHG02', 'AMF.Succ5GHandoverTo4G', 'false', 'AmfFunction', '15M', '{"cn":"从5G网络切换出至4G网络成功次数","en":"AMF.Succ5GHandoverTo4G"}', '系统间切换,从源NG-RAN切换出至目标E-UTRAN成功次数。'); +INSERT INTO "measure_title" VALUES (3537, 'AMF', 'AMFHG03', 'AMF.Att4GHandoverTo5G', 'false', 'AmfFunction', '15M', '{"cn":"从4G网络切换入5G网络尝试次数","en":"AMF.Att4GHandoverTo5G"}', '系统间切换,从源E-UTRAN切换入目标NG-RAN尝试次数。'); +INSERT INTO "measure_title" VALUES (3538, 'AMF', 'AMFHG04', 'AMF.Succ4GHandoverTo5G', 'false', 'AmfFunction', '15M', '{"cn":"从4G网络切换入5G网络成功次数","en":"AMF.Succ4GHandoverTo5G"}', '系统间切换,从源E-UTRAN切换入目标NG-RAN成功次数。'); +INSERT INTO "measure_title" VALUES (3539, 'AMF', 'AMFHG05', 'AMF.Req4GReselectTo5G', 'false', 'AmfFunction', '15M', '{"cn":"从4G网络重选入5G网络请求次数","en":"AMF.Req4GReselectTo5G"}', '系统间网络重选,从4G网络重选入5G网络请求次数。'); +INSERT INTO "measure_title" VALUES (3540, 'AMF', 'AMFHG06', 'AMF.Acc4GReselectTo5G', 'false', 'AmfFunction', '15M', '{"cn":"从4G网络重选入5G网络接受次数","en":"AMF.Acc4GReselectTo5G"}', '系统间网络重选,从4G网络重选入5G网络成功次数。'); +INSERT INTO "measure_title" VALUES (3541, 'AMF', 'AMFHH01', 'ME.MeanMeLoad', 'false', 'ManagedElement', '15M', '{"cn":"系统平均负荷","en":"ME.MeanMeLoad"}', ' +指测量周期中,网元的虚拟资源负荷的抽样平均值。网元的虚拟资源负荷可取对网元影响最大的模块的负荷,或取不同模块的负荷的加权平均值,不同厂商设备的计算方法各不相同。'); +INSERT INTO "measure_title" VALUES (3542, 'AMF', 'AMFHI01', 'AMF.UecmRegReq', 'false', 'EpRpDynN8Amf', '15M', '{"cn":"UECM注册请求次数","en":"AMF.UecmRegReq"}', 'AMF向UDM发起UECM注册请求的次数。'); +INSERT INTO "measure_title" VALUES (3543, 'AMF', 'AMFHI02', 'AMF.UecmRegSucc', 'false', 'EpRpDynN8Amf', '15M', '{"cn":"UECM注册成功次数","en":"AMF.UecmRegSucc"}', 'AMF收到UDM返回的UECM注册成功的次数。'); +INSERT INTO "measure_title" VALUES (3544, 'AMF', 'AMFHI03', 'AMF.UecmRegFail', 'false', 'EpRpDynN8Amf', '15M', '{"cn":"UECM注册失败次数","en":"AMF.UecmRegFail"}', 'AMF收到UDM返回的UECM注册失败的次数。'); +INSERT INTO "measure_title" VALUES (3545, 'AMF', 'AMFHI03', 'AMF.UecmRegFail._Cause', 'true', 'EpRpDynN8Amf', '15M', '{"cn":"分原因的UECM注册失败次数","en":"AMF.UecmRegFail._Cause"}', 'AMF收到UDM返回的UECM注册失败的次数。'); +INSERT INTO "measure_title" VALUES (3546, 'AMF', 'AMFHI03', 'AMF.UecmRegFail.Unknown5GSub', 'false', 'EpRpDynN8Amf', '15M', '{"cn":"UECM注册失败次数_未签约5G","en":"AMF.UecmRegFail.Unknown5GSub"}', 'AMF收到UDM返回的UECM注册失败的次数。'); +INSERT INTO "measure_title" VALUES (3547, 'AMF', 'AMFHI03', 'AMF.UecmRegFail.NoPsSub', 'false', 'EpRpDynN8Amf', '15M', '{"cn":"UECM注册失败次数_未签约PS业务","en":"AMF.UecmRegFail.NoPsSub"}', 'AMF收到UDM返回的UECM注册失败的次数。'); +INSERT INTO "measure_title" VALUES (3548, 'AMF', 'AMFHI03', 'AMF.UecmRegFail.RoamNotAllowed', 'false', 'EpRpDynN8Amf', '15M', '{"cn":"UECM注册失败次数_漫游不允许","en":"AMF.UecmRegFail.RoamNotAllowed"}', 'AMF收到UDM返回的UECM注册失败的次数。'); +INSERT INTO "measure_title" VALUES (3549, 'AMF', 'AMFHI03', 'AMF.UecmRegFail.AccessNotAllowed', 'false', 'EpRpDynN8Amf', '15M', '{"cn":"UECM注册失败次数_接入类型不允许","en":"AMF.UecmRegFail.AccessNotAllowed"}', 'AMF收到UDM返回的UECM注册失败的次数。'); +INSERT INTO "measure_title" VALUES (3550, 'AMF', 'AMFHI03', 'AMF.UecmRegFail.RatNotAllowed', 'false', 'EpRpDynN8Amf', '15M', '{"cn":"UECM注册失败次数_5GS接入不允许","en":"AMF.UecmRegFail.RatNotAllowed"}', 'AMF收到UDM返回的UECM注册失败的次数。'); +INSERT INTO "measure_title" VALUES (3551, 'AMF', 'AMFHI4', 'AMF.UecmDeregReq', 'false', 'EpRpDynN8Amf', '15M', '{"cn":"AMF发起的UECM去注册请求次数","en":"AMF.UecmDeregReq"}', '在AMF删除用户数据时,AMF向UDM发起的UECM去注册请求次数'); +INSERT INTO "measure_title" VALUES (3552, 'AMF', 'AMFHI5', 'AMF.UecmDeregSucc', 'false', 'EpRpDynN8Amf', '15M', '{"cn":"AMF发起的UECM去注册成功次数","en":"AMF.UecmDeregSucc"}', '在AMF删除用户数据时,AMF收到UDM返回的UECM去注册成功次数'); +INSERT INTO "measure_title" VALUES (3553, 'AMF', 'AMFHI6', 'AMF.UecmDeregNotifyReq', 'false', 'EpRpDynN8Amf', '15M', '{"cn":"UDM发起的UECM去注册请求次数","en":"AMF.UecmDeregNotifyReq"}', '当UDM中用户数据变更或用户移动到新的AMF下时,UDM向AMF发起的UECM去注册通知次数'); +INSERT INTO "measure_title" VALUES (3554, 'AMF', 'AMFHI7', 'AMF.UecmDeregNotifySucc', 'false', 'EpRpDynN8Amf', '15M', '{"cn":"UDM发起的UECM去注册成功次数","en":"AMF.UecmDeregNotifySucc"}', 'UDM调用Nudm_UECM_DeregistrationNotification service operation对AMF进行通知,AMF分HTTP Status Code进行的响应次数。'); +INSERT INTO "measure_title" VALUES (3555, 'AMF', 'AMFHJ01', 'AMF.SmContextCreateReq', 'false', 'EpRpDynN11Amf', '15M', '{"cn":"会话上下文建立请求次数","en":"AMF.SmContextCreateReq"}', 'AMF向SMF发起建立会话上下文的次数。'); +INSERT INTO "measure_title" VALUES (3556, 'AMF', 'AMFHJ02', 'AMF.SessionCreateSucc', 'false', 'EpRpDynN11Amf', '15M', '{"cn":"会话上下文建立成功次数","en":"AMF.SessionCreateSucc"}', 'SMF返回AMF建立会话上下文成功的次数'); +INSERT INTO "measure_title" VALUES (3557, 'AMF', 'AMFHJ03', 'AMF.SmContextUpdateReq', 'false', 'EpRpDynN11Amf', '15M', '{"cn":"会话上下文更新请求次数","en":"AMF.SmContextUpdateReq"}', 'AMF向SMF发起更新会话上下文的次数。'); +INSERT INTO "measure_title" VALUES (3558, 'AMF', 'AMFHJ04', 'AMF.SessionUpdateSucc', 'false', 'EpRpDynN11Amf', '15M', '{"cn":"会话上下文更新成功次数","en":"AMF.SessionUpdateSucc"}', 'SMF返回AMF更新会话上下文成功的次数'); +INSERT INTO "measure_title" VALUES (3559, 'AMF', 'AMFHJ05', 'AMF.SmContextReleaseReq', 'false', 'EpRpDynN11Amf', '15M', '{"cn":"会话上下文释放请求次数","en":"AMF.SmContextReleaseReq"}', 'AMF向SMF发起释放会话上下文的次数。'); +INSERT INTO "measure_title" VALUES (3560, 'AMF', 'AMFHJ06', 'AMF.SessionReleaseSucc', 'false', 'EpRpDynN11Amf', '15M', '{"cn":"会话上下文释放成功次数","en":"AMF.SessionReleaseSucc"}', 'SMF返回AMF释放会话上下文成功的次数'); +INSERT INTO "measure_title" VALUES (3561, 'AMF', 'AMFHJ07', 'AMF.SmContextRetrieveReq', 'false', 'EpRpDynN11Amf', '15M', '{"cn":"会话上下文查询请求次数","en":"AMF.SmContextRetrieveReq"}', 'AMF向SMF发起查询会话上下文的次数。'); +INSERT INTO "measure_title" VALUES (3562, 'AMF', 'AMFHJ08', 'AMF.SessionRetrieveSucc', 'false', 'EpRpDynN11Amf', '15M', '{"cn":"会话上下文查询成功次数","en":"AMF.SessionRetrieveSucc"}', 'SMF返回AMF查询会话上下文成功的次数'); +INSERT INTO "measure_title" VALUES (3563, 'AMF', 'AMFHK01', 'AMF.UeAuthReq', 'false', 'EpRpDynN12Amf', '15M', '{"cn":"AMF向AUSF发起鉴权请求次数","en":"AMF.UeAuthReq"}', 'AMF向AUSF发起鉴权请求消息次数'); +INSERT INTO "measure_title" VALUES (3564, 'AMF', 'AMFHK02', 'AMF.UeAuthSucc', 'false', 'EpRpDynN12Amf', '15M', '{"cn":"AUSF向AMF返回的鉴权成功次数","en":"AMF.UeAuthSucc"}', 'AUSF向AMF返回的鉴权成功消息次数'); +INSERT INTO "measure_title" VALUES (3565, 'AMF', 'AMFHK03', 'AMF.UeAuthFail', 'false', 'EpRpDynN12Amf', '15M', '{"cn":"鉴权失败次数","en":"AMF.UeAuthFail"}', '统计AMF收到的AUSF返回的鉴权失败次数,并分application error进行统计。'); +INSERT INTO "measure_title" VALUES (3566, 'AMF', 'AMFHK03', 'AMF.UeAuthFail._Cause', 'true', 'EpRpDynN12Amf', '15M', '{"cn":"分原因的鉴权失败次数","en":"AMF.UeAuthFail._Cause"}', '统计AMF收到的AUSF返回的鉴权失败次数,并分application error进行统计。'); +INSERT INTO "measure_title" VALUES (3567, 'AMF', 'AMFHK08', 'AMF.UeAuthCfmReq', 'false', 'EpRpDynN12Amf', '15M', '{"cn":"AMF向AUSF发起鉴权确认请求次数","en":"AMF.UeAuthCfmReq"}', 'AMF向AUSF发起鉴权确认请求消息次数'); +INSERT INTO "measure_title" VALUES (3568, 'AMF', 'AMFHK09', 'AMF.UeAuthCfmSucc', 'false', 'EpRpDynN12Amf', '15M', '{"cn":"AUSF向AMF返回的鉴权确认成功次数","en":"AMF.UeAuthCfmSucc"}', 'AUSF向AMF返回的鉴权确认成功消息次数'); +INSERT INTO "measure_title" VALUES (3569, 'AMF', 'AMFHL01', 'AMF.GnbNum', 'false', 'AmfFunction', '15M', '{"cn":"AMF挂接5G基站数","en":"AMF.GnbNum"}', '统计周期结束点时刻,挂接在AMF下的5G基站数量'); +INSERT INTO "measure_title" VALUES (3570, 'PCF', 'PCFHA01', 'PCF.AmAssocNbrMean', 'false', 'PcfFunction', '15M', '{"cn":"AM策略关联总数平均值","en":"PCF.AmAssocNbrMean"}', 'PCF上AM策略关联总数的平均值'); +INSERT INTO "measure_title" VALUES (3571, 'PCF', 'PCFHA02', 'PCF.AmAssocNbrMax', 'false', 'PcfFunction', '15M', '{"cn":"AM策略关联总数最大值","en":"PCF.AmAssocNbrMax"}', 'PCF上AM策略关联总数的最大值'); +INSERT INTO "measure_title" VALUES (3572, 'PCF', 'PCFHA03', 'PCF.SmAssocNbrMean', 'false', 'PcfFunction', '15M', '{"cn":"SM策略关联总数平均值","en":"PCF.SmAssocNbrMean"}', 'PCF上SM策略关联总数的平均值'); +INSERT INTO "measure_title" VALUES (3573, 'PCF', 'PCFHA04', 'PCF.SmAssocNbrMax', 'false', 'PcfFunction', '15M', '{"cn":"SM策略关联总数最大值","en":"PCF.SmAssocNbrMax"}', 'PCF上SM策略关联总数的最大值'); +INSERT INTO "measure_title" VALUES (3574, 'PCF', 'PCFHB01', 'PCF.PolicyAmAssocCreateReq', 'false', 'PcfFunction', '15M', '{"cn":"AM策略关联建立请求次数","en":"PCF.PolicyAmAssocCreateReq"}', 'PCF收到的AM策略关联建立请求次数'); +INSERT INTO "measure_title" VALUES (3575, 'PCF', 'PCFHB02', 'PCF.PolicyAmAssocCreateSucc', 'false', 'PcfFunction', '15M', '{"cn":"AM策略关联建立成功次数","en":"PCF.PolicyAmAssocCreateSucc"}', 'PCF返回的AM策略关联建立成功次数'); +INSERT INTO "measure_title" VALUES (3576, 'PCF', 'PCFHB03', 'PCF.PolicyAmAssocUpdateReq', 'false', 'PcfFunction', '15M', '{"cn":"AM策略关联更新请求次数","en":"PCF.PolicyAmAssocUpdateReq"}', 'PCF从AMF收到的AM策略关联更新请求次数'); +INSERT INTO "measure_title" VALUES (3577, 'PCF', 'PCFHB04', 'PCF.PolicyAmAssocUpdateSucc', 'false', 'PcfFunction', '15M', '{"cn":"AM策略关联更新成功次数","en":"PCF.PolicyAmAssocUpdateSucc"}', 'PCF上AM策略关联更新成功次数'); +INSERT INTO "measure_title" VALUES (3578, 'PCF', 'PCFHB05', 'PCF.PolicyAmAssocNotifReq', 'false', 'PcfFunction', '15M', '{"cn":"AM策略关联更新通知请求次数","en":"PCF.PolicyAmAssocNotifReq"}', '统计PCF向AMF发送的AM策略关联更新通知请求次数'); +INSERT INTO "measure_title" VALUES (3579, 'PCF', 'PCFHB06', 'PCF.PolicyAmAssocNotifSucc', 'false', 'PcfFunction', '15M', '{"cn":"AM策略关联更新通知成功次数","en":"PCF.PolicyAmAssocNotifSucc"}', '统计PCF收到AMF返回的AM策略关联更新通知成功次数'); +INSERT INTO "measure_title" VALUES (3580, 'PCF', 'PCFHB07', 'PCF.PolicyAmAssocDeleteReq', 'false', 'PcfFunction', '15M', '{"cn":"AM策略关联删除请求次数","en":"PCF.PolicyAmAssocDeleteReq"}', 'PCF从AMF收到的AM策略关联删除请求次数'); +INSERT INTO "measure_title" VALUES (3581, 'PCF', 'PCFHB08', 'PCF.PolicyAmAssocDeleteSucc', 'false', 'PcfFunction', '15M', '{"cn":"AM策略关联删除成功次数","en":"PCF.PolicyAmAssocDeleteSucc"}', 'PCF上AM策略关联删除成功次数'); +INSERT INTO "measure_title" VALUES (3582, 'PCF', 'PCFHC01', 'PCF.PolicySmAssocCreateReq', 'false', 'PcfFunction', '15M', '{"cn":"SM策略关联建立请求次数","en":"PCF.PolicySmAssocCreateReq"}', 'PCF收到的SM策略关联建立请求次数'); +INSERT INTO "measure_title" VALUES (3583, 'PCF', 'PCFHC02', 'PCF.PolicySmAssocCreateSucc', 'false', 'PcfFunction', '15M', '{"cn":"SM策略关联建立成功次数","en":"PCF.PolicySmAssocCreateSucc"}', 'PCF返回的SM策略关联建立成功次数'); +INSERT INTO "measure_title" VALUES (3584, 'PCF', 'PCFHC03', 'PCF.PolicySmAssocCreateFail', 'false', 'PcfFunction', '15M', '{"cn":"SM策略关联建立失败次数","en":"PCF.PolicySmAssocCreateFail"}', 'PCF返回的SM策略关联建立失败次数,并按不同的Application errors分别统计'); +INSERT INTO "measure_title" VALUES (3585, 'PCF', 'PCFHC03', 'PCF.PolicySmAssocCreateFail._Cause', 'true', 'PcfFunction', '15M', '{"cn":"分原因的SM策略关联建立失败次数","en":"PCF.PolicySmAssocCreateFail._Cause"}', 'PCF返回的SM策略关联建立失败次数,并按不同的Application errors分别统计'); +INSERT INTO "measure_title" VALUES (3586, 'PCF', 'PCFHC04', 'PCF.PolicySmAssocUpdateReq', 'false', 'PcfFunction', '15M', '{"cn":"SM策略关联更新请求次数","en":"PCF.PolicySmAssocUpdateReq"}', 'PCF从SMF收到的SM策略关联更新请求次数'); +INSERT INTO "measure_title" VALUES (3587, 'PCF', 'PCFHC05', 'PCF.PolicySmAssocUpdateSucc', 'false', 'PcfFunction', '15M', '{"cn":"SM策略关联更新成功次数","en":"PCF.PolicySmAssocUpdateSucc"}', 'PCF上SM策略关联更新成功次数'); +INSERT INTO "measure_title" VALUES (3588, 'PCF', 'PCFHC06', 'PCF.PolicySmAssocUpdateFail', 'false', 'PcfFunction', '15M', '{"cn":"SM策略关联更新失败次数","en":"PCF.PolicySmAssocUpdateFail"}', 'PCF返回的SM策略关联更新失败次数,并按不同的Application errors分别统计'); +INSERT INTO "measure_title" VALUES (3589, 'PCF', 'PCFHC06', 'PCF.PolicySmAssocUpdateFail._Cause', 'true', 'PcfFunction', '15M', '{"cn":"分原因的SM策略关联更新失败次数","en":"PCF.PolicySmAssocUpdateFail._Cause"}', 'PCF返回的SM策略关联更新失败次数,并按不同的Application errors分别统计'); +INSERT INTO "measure_title" VALUES (3590, 'PCF', 'PCFHC07', 'PCF.PolicySmAssocNotifReq', 'false', 'PcfFunction', '15M', '{"cn":"SM策略关联更新通知请求次数","en":"PCF.PolicySmAssocNotifReq"}', 'PCF向SMF发送的SM策略关联更新通知请求次数'); +INSERT INTO "measure_title" VALUES (3591, 'PCF', 'PCFHC08', 'PCF.PolicySmAssocNotifSucc', 'false', 'PcfFunction', '15M', '{"cn":"SM策略关联更新通知成功次数","en":"PCF.PolicySmAssocNotifSucc"}', 'PCF上SM策略关联更新通知成功次数'); +INSERT INTO "measure_title" VALUES (3592, 'PCF', 'PCFHC09', 'PCF.PolicySmAssocNotifFail', 'false', 'PcfFunction', '15M', '{"cn":"SM策略关联更新通知失败次数","en":"PCF.PolicySmAssocNotifFail"}', 'PCF上SM策略关联更新通知失败次数,并按不同的Application errors分类统计'); +INSERT INTO "measure_title" VALUES (3593, 'PCF', 'PCFHC09', 'PCF.PolicySmAssocNotifFail._Cause', 'true', 'PcfFunction', '15M', '{"cn":"分原因的SM策略关联更新通知失败次数","en":"PCF.PolicySmAssocNotifFail._Cause"}', 'PCF上SM策略关联更新通知失败次数,并按不同的Application errors分类统计'); +INSERT INTO "measure_title" VALUES (3594, 'PCF', 'PCFHC10', 'PCF.PolicySmAssocDeleteReq', 'false', 'PcfFunction', '15M', '{"cn":"SM策略关联删除请求次数","en":"PCF.PolicySmAssocDeleteReq"}', 'PCF从SMF收到的SM策略关联删除请求次数'); +INSERT INTO "measure_title" VALUES (3595, 'PCF', 'PCFHC11', 'PCF.PolicySmAssocDeleteSucc', 'false', 'PcfFunction', '15M', '{"cn":"SM策略关联删除成功次数","en":"PCF.PolicySmAssocDeleteSucc"}', 'PCF上SM策略关联删除成功次数'); +INSERT INTO "measure_title" VALUES (3596, 'PCF', 'PCFHD01', 'UDR.PcfSubNbr', 'false', 'UdrFunction', '15M', '{"cn":"PCF签约用户数","en":"UDR.PcfSubNbr"}', 'PCF签约成功的用户数。语音PCF不涉及Udr,语音PCF对应指标填0。'); +INSERT INTO "measure_title" VALUES (3597, 'PCF', 'PCFHE01', 'ME.MeanMeLoad', 'false', 'ManagedElement', '15M', '{"cn":"系统平均负荷","en":"ME.MeanMeLoad"}', ' +指测量周期中,网元的虚拟机资源负荷的抽样平均值。网元的虚拟机资源负荷可取对网元影响最大的模块的负荷,或取不同模块的负荷的加权平均值,不同厂商设备的计算方法各不相同。'); +INSERT INTO "measure_title" VALUES (3598, 'SMF', 'SMFHA01', 'SMF.AttCreatePduSession', 'false', 'SmfFunction', '15M', '{"cn":"PDU会话建立请求次数","en":"SMF.AttCreatePduSession"}', 'UE发起的PDU会话建立请求次数。'); +INSERT INTO "measure_title" VALUES (3599, 'SMF', 'SMFHA01', 'SMF.AttCreatePduSession._Ns', 'true', 'SmfFunction', '15M', '{"cn":"分切片的PDU会话建立请求次数","en":"SMF.AttCreatePduSession._Ns"}', '按照S-NSSAI统计UE发起的PDU会话建立请求次数。'); +INSERT INTO "measure_title" VALUES (3600, 'SMF', 'SMFHA01', 'SMF.AttCreatePduSession._Dnn', 'true', 'SmfFunction', '15M', '{"cn":"分DNN的PDU会话建立请求次数","en":"SMF.AttCreatePduSession._Dnn"}', '按照DNN统计UE发起的PDU会话建立请求次数。'); +INSERT INTO "measure_title" VALUES (3601, 'SMF', 'SMFHA02', 'SMF.SuccCreatePduSession', 'false', 'SmfFunction', '15M', '{"cn":"PDU会话建立成功次数","en":"SMF.SuccCreatePduSession"}', 'UE发起的PDU会话建立成功次数。'); +INSERT INTO "measure_title" VALUES (3602, 'SMF', 'SMFHA02', 'SMF.SuccCreatePduSession._Ns', 'true', 'SmfFunction', '15M', '{"cn":"分切片的PDU会话建立成功次数","en":"SMF.SuccCreatePduSession._Ns"}', '按照S-NSSAI统计UE发起的PDU会话建立成功次数。'); +INSERT INTO "measure_title" VALUES (3603, 'SMF', 'SMFHA02', 'SMF.SuccCreatePduSession._Dnn', 'true', 'SmfFunction', '15M', '{"cn":"分DNN的PDU会话建立成功次数","en":"SMF.SuccCreatePduSession._Dnn"}', '按照DNN统计UE发起的PDU会话建立成功次数。'); +INSERT INTO "measure_title" VALUES (3604, 'SMF', 'SMFHA03', 'SMF.FailCreatePduSession', 'false', 'SmfFunction', '15M', '{"cn":"PDU会话建立失败次数","en":"SMF.FailCreatePduSession"}', 'UE发起的PDU会话建立被SMF拒绝的次数,并按拒绝原因分类统计。'); +INSERT INTO "measure_title" VALUES (3605, 'SMF', 'SMFHA03', 'SMF.FailCreatePduSession._Cause', 'true', 'SmfFunction', '15M', '{"cn":"分原因的PDU会话建立失败次数","en":"SMF.FailCreatePduSession._Cause"}', 'UE发起的PDU会话建立被SMF拒绝的次数,并按拒绝原因分类统计。'); +INSERT INTO "measure_title" VALUES (3606, 'SMF', 'SMFHA03', 'SMF.FailCreatePduSession.82', 'false', 'SmfFunction', '15M', '{"cn":"PDU会话建立失败次数_终端完整性保护速率过低","en":"SMF.FailCreatePduSession.82"}', '在会话建立及更新过程中,终端支持的完整性保护速率小于5GC要求,SMF可以拒绝'); +INSERT INTO "measure_title" VALUES (3607, 'SMF', 'SMFHA03', 'SMF.FailCreatePduSession.28', 'false', 'SmfFunction', '15M', '{"cn":"PDU会话建立失败次数_PDU会话类型不支持","en":"SMF.FailCreatePduSession.28"}', '由于终端设置错误,请求的PDU会话类型与网络支持的PDU类型不一致。'); +INSERT INTO "measure_title" VALUES (3608, 'SMF', 'SMFHA03', 'SMF.FailCreatePduSession.29', 'false', 'SmfFunction', '15M', '{"cn":"PDU会话建立失败次数_鉴权失败","en":"SMF.FailCreatePduSession.29"}', '在PDU会话建立过程中因终端设置或终端未签约导致鉴权失败(一般为2B业务场景)'); +INSERT INTO "measure_title" VALUES (3609, 'SMF', 'SMFHA03', 'SMF.FailCreatePduSession.68', 'false', 'SmfFunction', '15M', '{"cn":"PDU会话建立失败次数_SSC模式不支持","en":"SMF.FailCreatePduSession.68"}', '终端设置原因,终端请求的SSC模式和用户签约的不一致。'); +INSERT INTO "measure_title" VALUES (3610, 'SMF', 'SMFHA03', 'SMF.FailCreatePduSession.27', 'false', 'SmfFunction', '15M', '{"cn":"PDU会话建立失败次数_终端使用未知DNN或者DNN缺失","en":"SMF.FailCreatePduSession.27"}', 'DNN未知或DNN存在缺失导致的失败'); +INSERT INTO "measure_title" VALUES (3611, 'SMF', 'SMFHA03', 'SMF.FailCreatePduSession.33', 'false', 'SmfFunction', '15M', '{"cn":"PDU会话建立失败次数_终端请求的业务未签约","en":"SMF.FailCreatePduSession.33"}', '请求服务没有签约(可能是DNN、PDU类型未签约导致)'); +INSERT INTO "measure_title" VALUES (3612, 'SMF', 'SMFHA03', 'SMF.FailCreatePduSession.46', 'false', 'SmfFunction', '15M', '{"cn":"PDU会话建立失败次数_终端离开本地数据网服务区域","en":"SMF.FailCreatePduSession.46"}', '超出LADN服务区'); +INSERT INTO "measure_title" VALUES (3613, 'SMF', 'SMFHA03', 'SMF.FailCreatePduSession.26', 'false', 'SmfFunction', '15M', '{"cn":"PDU会话建立失败次数_资源不足","en":"SMF.FailCreatePduSession.26"}', '在会话建立过程中,SMF因资源限制/控制场景拒绝会话建立,NAS原因值为资源不足(#26:Insufficient resources)'); +INSERT INTO "measure_title" VALUES (3614, 'SMF', 'SMFHA03', 'SMF.FailCreatePduSession._Ns', 'true', 'SmfFunction', '15M', '{"cn":"分切片的PDU会话建立失败次数","en":"SMF.FailCreatePduSession._Ns"}', '按照S-NSSAI统计UE发起的PDU会话建立被SMF拒绝的次数,并按拒绝原因分类统计。'); +INSERT INTO "measure_title" VALUES (3615, 'SMF', 'SMFHA03', 'SMF.FailCreatePduSession._Ns.82', 'true', 'SmfFunction', '15M', '{"cn":"分网络切片的PDU会话建立失败次数_终端完整性保护速率过低","en":"SMF.FailCreatePduSession._Ns.82"}', '在会话建立及更新过程中,终端支持的完整性保护速率小于5GC要求,SMF可以拒绝'); +INSERT INTO "measure_title" VALUES (3616, 'SMF', 'SMFHA03', 'SMF.FailCreatePduSession._Ns.28', 'true', 'SmfFunction', '15M', '{"cn":"分网络切片的PDU会话建立失败次数_PDU会话类型不支持","en":"SMF.FailCreatePduSession._Ns.28"}', '由于终端设置错误,请求的PDU会话类型与网络支持的PDU类型不一致。'); +INSERT INTO "measure_title" VALUES (3617, 'SMF', 'SMFHA03', 'SMF.FailCreatePduSession._Ns.29', 'true', 'SmfFunction', '15M', '{"cn":"分网络切片的PDU会话建立失败次数_鉴权失败","en":"SMF.FailCreatePduSession._Ns.29"}', '在PDU会话建立过程中因终端设置或终端未签约导致鉴权失败(一般为2B业务场景)'); +INSERT INTO "measure_title" VALUES (3618, 'SMF', 'SMFHA03', 'SMF.FailCreatePduSession._Ns.68', 'true', 'SmfFunction', '15M', '{"cn":"分网络切片的PDU会话建立失败次数_SSC模式不支持","en":"SMF.FailCreatePduSession._Ns.68"}', '终端设置原因,终端请求的SSC模式和用户签约的不一致。'); +INSERT INTO "measure_title" VALUES (3619, 'SMF', 'SMFHA03', 'SMF.FailCreatePduSession._Ns.27', 'true', 'SmfFunction', '15M', '{"cn":"分网络切片的PDU会话建立失败次数_终端使用未知DNN或者DNN缺失","en":"SMF.FailCreatePduSession._Ns.27"}', 'DNN未知或DNN存在缺失导致的失败'); +INSERT INTO "measure_title" VALUES (3620, 'SMF', 'SMFHA03', 'SMF.FailCreatePduSession._Ns.33', 'true', 'SmfFunction', '15M', '{"cn":"分网络切片的PDU会话建立失败次数_终端请求的业务未签约","en":"SMF.FailCreatePduSession._Ns.33"}', '请求服务没有签约(可能是DNN、PDU类型未签约导致)'); +INSERT INTO "measure_title" VALUES (3621, 'SMF', 'SMFHA03', 'SMF.FailCreatePduSession._Ns.46', 'true', 'SmfFunction', '15M', '{"cn":"分网络切片的PDU会话建立失败次数_终端离开本地数据网服务区域","en":"SMF.FailCreatePduSession._Ns.46"}', '超出LADN服务区'); +INSERT INTO "measure_title" VALUES (3622, 'SMF', 'SMFHA03', 'SMF.FailCreatePduSession._Dnn', 'true', 'SmfFunction', '15M', '{"cn":"分DNN的PDU会话建立失败次数","en":"SMF.FailCreatePduSession._Dnn"}', '按照DNN统计UE发起的PDU会话建立被SMF拒绝的次数,并按拒绝原因分类统计。'); +INSERT INTO "measure_title" VALUES (3623, 'SMF', 'SMFHA03', 'SMF.FailCreatePduSession._Dnn.82', 'true', 'SmfFunction', '15M', '{"cn":"分DNN的PDU会话建立失败次数_终端完整性保护速率过低","en":"SMF.FailCreatePduSession._Dnn.82"}', '在会话建立及更新过程中,终端支持的完整性保护速率小于5GC要求,SMF可以拒绝'); +INSERT INTO "measure_title" VALUES (3624, 'SMF', 'SMFHA03', 'SMF.FailCreatePduSession._Dnn.28', 'true', 'SmfFunction', '15M', '{"cn":"分DNN的PDU会话建立失败次数_PDU会话类型不支持","en":"SMF.FailCreatePduSession._Dnn.28"}', '由于终端设置错误,请求的PDU会话类型与网络支持的PDU类型不一致。'); +INSERT INTO "measure_title" VALUES (3625, 'SMF', 'SMFHA03', 'SMF.FailCreatePduSession._Dnn.29', 'true', 'SmfFunction', '15M', '{"cn":"分DNN的PDU会话建立失败次数_鉴权失败","en":"SMF.FailCreatePduSession._Dnn.29"}', '在PDU会话建立过程中因终端设置或终端未签约导致鉴权失败(一般为2B业务场景)'); +INSERT INTO "measure_title" VALUES (3626, 'SMF', 'SMFHA03', 'SMF.FailCreatePduSession._Dnn.68', 'true', 'SmfFunction', '15M', '{"cn":"分DNN的PDU会话建立失败次数_SSC模式不支持","en":"SMF.FailCreatePduSession._Dnn.68"}', '终端设置原因,终端请求的SSC模式和用户签约的不一致。'); +INSERT INTO "measure_title" VALUES (3627, 'SMF', 'SMFHA03', 'SMF.FailCreatePduSession._Dnn.33', 'true', 'SmfFunction', '15M', '{"cn":"分DNN的PDU会话建立失败次数_终端请求的业务未签约","en":"SMF.FailCreatePduSession._Dnn.33"}', '请求服务没有签约(可能是DNN、PDU类型未签约导致)'); +INSERT INTO "measure_title" VALUES (3628, 'SMF', 'SMFHA03', 'SMF.FailCreatePduSession._Dnn.46', 'true', 'SmfFunction', '15M', '{"cn":"分DNN的PDU会话建立失败次数_终端离开本地数据网服务区域","en":"SMF.FailCreatePduSession._Dnn.46"}', '超出LADN服务区'); +INSERT INTO "measure_title" VALUES (3629, 'SMF', 'SMFHA04', 'SMF.AttSmfModifyPduSession', 'false', 'SmfFunction', '15M', '{"cn":"SMF发起的PDU会话修改请求次数","en":"SMF.AttSmfModifyPduSession"}', 'SMF发起的PDU会话修改请求次数。'); +INSERT INTO "measure_title" VALUES (3630, 'SMF', 'SMFHA04', 'SMF.AttSmfModifyPduSession._Ns', 'true', 'SmfFunction', '15M', '{"cn":"分切片的PDU会话修改请求次数","en":"SMF.AttSmfModifyPduSession._Ns"}', '按照S-NSSAI统计SMF发起的PDU会话修改请求次数。'); +INSERT INTO "measure_title" VALUES (3631, 'SMF', 'SMFHA04', 'SMF.AttSmfModifyPduSession._Dnn', 'true', 'SmfFunction', '15M', '{"cn":"分DNN的PDU会话修改请求次数","en":"SMF.AttSmfModifyPduSession._Dnn"}', '按照DNN统计SMF发起的PDU会话修改请求次数。'); +INSERT INTO "measure_title" VALUES (3632, 'SMF', 'SMFHA05', 'SMF.SuccSmfModifyPduSession', 'false', 'SmfFunction', '15M', '{"cn":"SMF发起的PDU会话修改成功次数","en":"SMF.SuccSmfModifyPduSession"}', 'SMF发起的PDU会话修改成功次数。'); +INSERT INTO "measure_title" VALUES (3633, 'SMF', 'SMFHA05', 'SMF.SuccSmfModifyPduSession._Ns', 'true', 'SmfFunction', '15M', '{"cn":"分切片的SMF发起的PDU会话修改成功次数","en":"SMF.SuccSmfModifyPduSession._Ns"}', '按照S-NSSAI统计SMF发起的PDU会话修改成功次数。'); +INSERT INTO "measure_title" VALUES (3634, 'SMF', 'SMFHA05', 'SMF.SuccSmfModifyPduSession._Dnn', 'true', 'SmfFunction', '15M', '{"cn":"分DNN的SMF发起的PDU会话修改成功次数","en":"SMF.SuccSmfModifyPduSession._Dnn"}', '按照DNN统计SMF发起的PDU会话修改成功次数。'); +INSERT INTO "measure_title" VALUES (3635, 'SMF', 'SMFHA06', 'SMF.FailSmfModifyPduSession', 'false', 'SmfFunction', '15M', '{"cn":"SMF发起的PDU会话修改失败次数","en":"SMF.FailSmfModifyPduSession"}', 'SMF发起的PDU会话修改请求被拒绝的次数,并按拒绝原因分类统计。 +'); +INSERT INTO "measure_title" VALUES (3636, 'SMF', 'SMFHA06', 'SMF.FailSmfModifyPduSession._Cause', 'true', 'SmfFunction', '15M', '{"cn":"分原因的SMF发起的PDU会话修改失败次数","en":"SMF.FailSmfModifyPduSession._Cause"}', 'SMF发起的PDU会话修改请求被拒绝的次数,并按拒绝原因分类统计。 +'); +INSERT INTO "measure_title" VALUES (3637, 'SMF', 'SMFHA06', 'SMF.FailSmfModifyPduSession._Ns', 'true', 'SmfFunction', '15M', '{"cn":"分切片的SMF发起的PDU会话修改失败次数","en":"SMF.FailSmfModifyPduSession._Ns"}', '按照S-NSSAI统计SMF发起的PDU会话修改请求被拒绝的次数,并按拒绝原因分类统计。'); +INSERT INTO "measure_title" VALUES (3638, 'SMF', 'SMFHA06', 'SMF.FailSmfModifyPduSession._Dnn', 'true', 'SmfFunction', '15M', '{"cn":"分DNN的SMF发起的PDU会话修改失败次数","en":"SMF.FailSmfModifyPduSession._Dnn"}', '按照DNN统计SMF发起的PDU会话修改请求被拒绝的次数,并按拒绝原因分类统计。 +'); +INSERT INTO "measure_title" VALUES (3639, 'SMF', 'SMFHA07', 'SMF.PduSessionCreateTime', 'false', 'SmfFunction', '15M', '{"cn":"PDU会话建立流程平均时长","en":"SMF.PduSessionCreateTime"}', '成功的PDU会话建立流程的平均时长。 +'); +INSERT INTO "measure_title" VALUES (3640, 'SMF', 'SMFHA08', 'SMF.AttSmfModifyPduSession.Epsfb', 'false', 'SmfFunction', '15M', '{"cn":"EPSFALLBACK请求数","en":"SMF.AttSmfModifyPduSession.Epsfb"}', '用户发起的EPS fallback总的请求数'); +INSERT INTO "measure_title" VALUES (3641, 'SMF', 'SMFHA08', 'SMF.SuccSmfModifyBearerResponse.Epsfb', 'false', 'SmfFunction', '15M', '{"cn":"EPSFALLBACK回落成功数","en":"SMF.SuccSmfModifyBearerResponse.Epsfb"}', '用户回落到4G以后,在4G上修改承载成功数'); +INSERT INTO "measure_title" VALUES (3642, 'SMF', 'SMFHB01', 'SMF.MeanPduSession', 'false', 'SmfFunction', '15M', '{"cn":"平均PDU会话数","en":"SMF.MeanPduSession"}', '一个统计周期内SMF中的平均PDU会话数。'); +INSERT INTO "measure_title" VALUES (3643, 'SMF', 'SMFHB01', 'SMF.MeanPduSession._Ns', 'true', 'SmfFunction', '15M', '{"cn":"分切片的平均PDU会话数","en":"SMF.MeanPduSession._Ns"}', '一个统计周期内按照S-NSSAI统计SMF中的平均PDU会话数。'); +INSERT INTO "measure_title" VALUES (3644, 'SMF', 'SMFHB01', 'SMF.MeanPduSession._Dnn', 'true', 'SmfFunction', '15M', '{"cn":"分DNN的平均PDU会话数","en":"SMF.MeanPduSession._Dnn"}', '一个统计周期内按照DNN统计SMF中的平均PDU会话数。'); +INSERT INTO "measure_title" VALUES (3645, 'SMF', 'SMFHB02', 'SMF.MaxPduSession', 'false', 'SmfFunction', '15M', '{"cn":"最大PDU会话数","en":"SMF.MaxPduSession"}', '一个统计周期内SMF中的最大PDU会话数。'); +INSERT INTO "measure_title" VALUES (3646, 'SMF', 'SMFHB02', 'SMF.MaxPduSession._Ns', 'true', 'SmfFunction', '15M', '{"cn":"分切片的最大PDU会话数","en":"SMF.MaxPduSession._Ns"}', '一个统计周期内按照S-NSSAI统计SMF中的最大PDU会话数。'); +INSERT INTO "measure_title" VALUES (3647, 'SMF', 'SMFHB02', 'SMF.MaxPduSession._Dnn', 'true', 'SmfFunction', '15M', '{"cn":"分DNN的最大PDU会话数","en":"SMF.MaxPduSession._Dnn"}', '一个统计周期内按照DNN统计SMF中的最大PDU会话数。'); +INSERT INTO "measure_title" VALUES (3648, 'SMF', 'SMFHB03', 'SMF.MeanQf', 'false', 'SmfFunction', '15M', '{"cn":"平均Qos流数","en":"SMF.MeanQf"}', '一个统计周期内SMF中的平均Qos流数。'); +INSERT INTO "measure_title" VALUES (3649, 'SMF', 'SMFHB03', 'SMF.MeanQf._Ns', 'true', 'SmfFunction', '15M', '{"cn":"分切片的平均Qos流数","en":"SMF.MeanQf._Ns"}', '一个统计周期内按照S-NSSAI统计SMF中的平均QoS流数。'); +INSERT INTO "measure_title" VALUES (3650, 'SMF', 'SMFHB03', 'SMF.MeanQf._Dnn', 'true', 'SmfFunction', '15M', '{"cn":"分DNN的平均Qos流数","en":"SMF.MeanQf._Dnn"}', '一个统计周期内按照DNN统计SMF中的平均QoS流数。'); +INSERT INTO "measure_title" VALUES (3651, 'SMF', 'SMFHB04', 'SMF.MaxQf', 'false', 'SmfFunction', '15M', '{"cn":"最大Qos流数","en":"SMF.MaxQf"}', '一个统计周期内SMF中的最大Qos流数。'); +INSERT INTO "measure_title" VALUES (3652, 'SMF', 'SMFHB04', 'SMF.MaxQf._Ns', 'true', 'SmfFunction', '15M', '{"cn":"分切片的最大Qos流数","en":"SMF.MaxQf._Ns"}', '一个统计周期内按照S-NSSAI统计SMF中的最大QoS流数。'); +INSERT INTO "measure_title" VALUES (3653, 'SMF', 'SMFHB04', 'SMF.MaxQf._Dnn', 'true', 'SmfFunction', '15M', '{"cn":"分DNN的最大Qos流数","en":"SMF.MaxQf._Dnn"}', '一个统计周期内按照DNN统计SMF中的最大QoS流数。'); +INSERT INTO "measure_title" VALUES (3654, 'SMF', 'SMFHC01', 'ME.MeanMeLoad', 'false', 'ManagedElement', '15M', '{"cn":"系统平均负荷","en":"ME.MeanMeLoad"}', ' +指测量周期中,网元的虚拟机资源负荷的抽样平均值。网元的虚拟机资源负荷可取对网元影响最大的模块的负荷,或取不同模块的负荷的加权平均值,不同厂商设备的计算方法各不相同。'); +INSERT INTO "measure_title" VALUES (3655, 'SMF', 'SMFHD01', 'SMF.MeanAllcAddr', 'false', 'AddrPool', '15M', '{"cn":"平均分配的地址数","en":"SMF.MeanAllcAddr"}', 'SMF为UE平均分配的地址数。'); +INSERT INTO "measure_title" VALUES (3656, 'SMF', 'SMFHD01', 'SMF.MeanAllcAddr._Ns', 'true', 'AddrPool', '15M', '{"cn":"分切片的平均分配的地址数","en":"SMF.MeanAllcAddr._Ns"}', '按照S-NSSAI统计统计的SMF为UE平均分配的地址数。'); +INSERT INTO "measure_title" VALUES (3657, 'SMF', 'SMFHD02', 'SMF.MaxAllcAddr', 'false', 'AddrPool', '15M', '{"cn":"最大分配的地址数","en":"SMF.MaxAllcAddr"}', 'SMF为UE最大分配的地址数。'); +INSERT INTO "measure_title" VALUES (3658, 'SMF', 'SMFHD02', 'SMF.MaxAllcAddr._Ns', 'true', 'AddrPool', '15M', '{"cn":"分切片的最大分配的地址数","en":"SMF.MaxAllcAddr._Ns"}', '按照S-NSSAI统计的SMF为UE最大分配的地址数。'); +INSERT INTO "measure_title" VALUES (3659, 'SMF', 'SMFHE01', 'SMF.SmPlcyCtrlCreateReq', 'false', 'EpRpDynN7Smf', '15M', '{"cn":"创建SM策略请求的次数","en":"SMF.SmPlcyCtrlCreateReq"}', 'SMF向PCF发起创建SM策略请求的次数。'); +INSERT INTO "measure_title" VALUES (3660, 'SMF', 'SMFHE02', 'SMF.SmPlcyCtrlCreateSucc', 'false', 'EpRpDynN7Smf', '15M', '{"cn":"创建SM策略成功次数","en":"SMF.SmPlcyCtrlCreateSucc"}', 'PCF向SMF返回创建SM策略成功的次数。'); +INSERT INTO "measure_title" VALUES (3661, 'SMF', 'SMFHE03', 'SMF.SmPlcyCtrlUpdateReq', 'false', 'EpRpDynN7Smf', '15M', '{"cn":"更新SM策略请求的次数","en":"SMF.SmPlcyCtrlUpdateReq"}', 'SMF向PCF发起更新SM策略请求的次数。'); +INSERT INTO "measure_title" VALUES (3662, 'SMF', 'SMFHE04', 'SMF.SmPlcyCtrlUpdateSucc', 'false', 'EpRpDynN7Smf', '15M', '{"cn":"更新SM策略成功次数","en":"SMF.SmPlcyCtrlUpdateSucc"}', 'PCF向SMF返回更新SM策略成功的次数。'); +INSERT INTO "measure_title" VALUES (3663, 'SMF', 'SMFHE05', 'SMF.SmPlcyCtrlDeleteReq', 'false', 'EpRpDynN7Smf', '15M', '{"cn":"删除策略请求的次数","en":"SMF.SmPlcyCtrlDeleteReq"}', 'SMF向PCF发起删除SM策略请求的次数。'); +INSERT INTO "measure_title" VALUES (3664, 'SMF', 'SMFHE06', 'SMF.SmPlcyCtrlDeleteSucc', 'false', 'EpRpDynN7Smf', '15M', '{"cn":"删除SM策略成功次数","en":"SMF.SmPlcyCtrlDeleteSucc"}', 'PCF向SMF返回删除SM策略成功的次数。'); +INSERT INTO "measure_title" VALUES (3665, 'SMF', 'SMFHF01', 'SMF.UecmRegReq', 'false', 'EpRpDynN10Smf', '15M', '{"cn":"UE上下文注册请求次数","en":"SMF.UecmRegReq"}', 'SMF向UDM发起UE上下文注册请求的次数'); +INSERT INTO "measure_title" VALUES (3666, 'SMF', 'SMFHF02', 'SMF.UecmRegSucc', 'false', 'EpRpDynN10Smf', '15M', '{"cn":"UE上下文注册成功次数","en":"SMF.UecmRegSucc"}', 'SMF收到UDM返回的UE上下文注册成功的次数'); +INSERT INTO "measure_title" VALUES (3667, 'SMF', 'SMFHF03', 'SMF.UecmRegFail', 'false', 'EpRpDynN10Smf', '15M', '{"cn":"UE上下文注册失败次数","en":"SMF.UecmRegFail"}', 'SMF收到UDM返回的UE上下文注册失败的次数'); +INSERT INTO "measure_title" VALUES (3668, 'SMF', 'SMFHF03', 'SMF.UecmRegFail._Cause', 'true', 'EpRpDynN10Smf', '15M', '{"cn":"分原因的UE上下文注册失败次数","en":"SMF.UecmRegFail._Cause"}', 'SMF收到UDM返回的UE上下文注册失败的次数'); +INSERT INTO "measure_title" VALUES (3669, 'SMF', 'SMFHF03', 'SMF.UecmRegFail.Unknown5GSub', 'false', 'EpRpDynN10Smf', '15M', '{"cn":"UE上下文注册失败次数_未签约5G","en":"SMF.UecmRegFail.Unknown5GSub"}', 'SMF收到UDM返回的UE上下文注册失败的次数'); +INSERT INTO "measure_title" VALUES (3670, 'SMF', 'SMFHF03', 'SMF.UecmRegFail.RoamNotAllowed', 'false', 'EpRpDynN10Smf', '15M', '{"cn":"UE上下文注册失败次数_漫游不允许","en":"SMF.UecmRegFail.RoamNotAllowed"}', 'SMF收到UDM返回的UE上下文注册失败的次数'); +INSERT INTO "measure_title" VALUES (3671, 'SMF', 'SMFHF03', 'SMF.UecmRegFail.DnnNotAllowed', 'false', 'EpRpDynN10Smf', '15M', '{"cn":"UE上下文注册失败次数_DNN未授权","en":"SMF.UecmRegFail.DnnNotAllowed"}', 'SMF收到UDM返回的UE上下文注册失败的次数'); +INSERT INTO "measure_title" VALUES (3672, 'SMF', 'SMFHF03', 'SMF.UecmRegFail.UserNotFound', 'false', 'EpRpDynN10Smf', '15M', '{"cn":"UE上下文注册失败次数_未找到用户","en":"SMF.UecmRegFail.UserNotFound"}', 'SMF收到UDM返回的UE上下文注册失败的次数'); +INSERT INTO "measure_title" VALUES (3673, 'SMF', 'SMFHF03', 'SMF.UecmDeregReq', 'false', 'EpRpDynN10Smf', '15M', '{"cn":"UE上下文去注册请求次数","en":"SMF.UecmDeregReq"}', 'SMF向UDM发起UE上下文去注册请求的次数'); +INSERT INTO "measure_title" VALUES (3674, 'SMF', 'SMFHF04', 'SMF.UecmDeregSucc', 'false', 'EpRpDynN10Smf', '15M', '{"cn":"UE上下文去注册成功次数","en":"SMF.UecmDeregSucc"}', 'SMF向UDM发起UE上下文去注册成功的次数'); +INSERT INTO "measure_title" VALUES (3675, 'SMF', 'SMFHG01', 'ASMF.AttCreatePduSession', 'false', 'SmfFunction', '15M', '{"cn":"A-SMF/H-SMFPDU会话建立请求次数","en":"ASMF.AttCreatePduSession"}', 'A-SMF/H-SMF UE发起的PDU会话建立请求次数。'); +INSERT INTO "measure_title" VALUES (3676, 'SMF', 'SMFHG01', 'ASMF.AttCreatePduSession._Ns', 'true', 'SmfFunction', '15M', '{"cn":"A-SMF/H-SMF分切片的PDU会话建立请求次数","en":"ASMF.AttCreatePduSession._Ns"}', 'A-SMF/H-SMF按照S-NSSAI统计UE发起的PDU会话建立请求次数。'); +INSERT INTO "measure_title" VALUES (3677, 'SMF', 'SMFHG01', 'ASMF.AttCreatePduSession._Dnn', 'true', 'SmfFunction', '15M', '{"cn":"A-SMF/H-SMF分DNN的PDU会话建立请求次数","en":"ASMF.AttCreatePduSession._Dnn"}', 'A-SMF/H-SMF按照DNN统计UE发起的PDU会话建立请求次数。'); +INSERT INTO "measure_title" VALUES (3678, 'SMF', 'SMFHG02', 'ASMF.SuccCreatePduSession', 'false', 'SmfFunction', '15M', '{"cn":"A-SMF/H-SMFPDU会话建立成功次数","en":"ASMF.SuccCreatePduSession"}', 'A-SMF/H-SMF收到 UE发起的PDU会话建立成功次数。'); +INSERT INTO "measure_title" VALUES (3679, 'SMF', 'SMFHG02', 'ASMF.SuccCreatePduSession._Ns', 'true', 'SmfFunction', '15M', '{"cn":"A-SMF/H-SMF分切片的PDU会话建立成功次数","en":"ASMF.SuccCreatePduSession._Ns"}', '按照S-NSSAI统计A-SMF/H-SMF收到UE发起的PDU会话建立成功次数。'); +INSERT INTO "measure_title" VALUES (3680, 'SMF', 'SMFHG02', 'ASMF.SuccCreatePduSession._Dnn', 'true', 'SmfFunction', '15M', '{"cn":"A-SMF/H-SMF分DNN的PDU会话建立成功次数","en":"ASMF.SuccCreatePduSession._Dnn"}', '按照DNN统计A-SMF/H-SMF收到UE发起的PDU会话建立成功次数。'); +INSERT INTO "measure_title" VALUES (3681, 'SMF', 'SMFHG03', 'ASMF.FailCreatePduSession', 'false', 'SmfFunction', '15M', '{"cn":"A-SMF/H-SMFPDU会话建立失败次数","en":"ASMF.FailCreatePduSession"}', 'UE发起的PDU会话建立被A-SMF/H-SMF拒绝的次数,并按拒绝原因分类统计。'); +INSERT INTO "measure_title" VALUES (3682, 'SMF', 'SMFHG03', 'ASMF.FailCreatePduSession._Cause', 'true', 'SmfFunction', '15M', '{"cn":"A-SMF/H-SMF分原因的PDU会话建立失败次数","en":"ASMF.FailCreatePduSession._Cause"}', 'UE发起的PDU会话建立被A-SMF/H-SMF拒绝的次数,并按拒绝原因分类统计。'); +INSERT INTO "measure_title" VALUES (3683, 'SMF', 'SMFHG03', 'ASMF.FailCreatePduSession._Ns', 'true', 'SmfFunction', '15M', '{"cn":"A-SMF/H-SMF分切片的PDU会话建立失败次数","en":"ASMF.FailCreatePduSession._Ns"}', '按照S-NSSAI统计UE发起的PDU会话建立被A-SMF/H-SMF拒绝的次数。'); +INSERT INTO "measure_title" VALUES (3684, 'SMF', 'SMFHG03', 'ASMF.FailCreatePduSession._Dnn', 'true', 'SmfFunction', '15M', '{"cn":"A-SMF/H-SMF分DNN的PDU会话建立失败次数","en":"ASMF.FailCreatePduSession._Dnn"}', '按照DNN统计UE发起的PDU会话建立被A-SMF/H-SMF拒绝的次数。'); +INSERT INTO "measure_title" VALUES (3685, 'SMF', 'SMFHG04', 'ASMF.AttSmfModifyPduSession', 'false', 'SmfFunction', '15M', '{"cn":"A-SMF/H-SMF发起的PDU会话修改请求次数","en":"ASMF.AttSmfModifyPduSession"}', 'A-SMF/H-SMF发起的PDU会话修改请求次数。'); +INSERT INTO "measure_title" VALUES (3686, 'SMF', 'SMFHG04', 'ASMF.AttSmfModifyPduSession._Ns', 'true', 'SmfFunction', '15M', '{"cn":"A-SMF/H-SMF发起的分切片的PDU会话修改请求次数","en":"ASMF.AttSmfModifyPduSession._Ns"}', '按照S-NSSAI统计A-SMF/H-SMF发起的PDU会话修改请求次数。'); +INSERT INTO "measure_title" VALUES (3687, 'SMF', 'SMFHG04', 'ASMF.AttSmfModifyPduSession._Dnn', 'true', 'SmfFunction', '15M', '{"cn":"A-SMF/H-SMF发起的分DNN的PDU会话修改请求次数","en":"ASMF.AttSmfModifyPduSession._Dnn"}', '按照DNN统计A-SMF/H-SMF发起的PDU会话修改请求次数。'); +INSERT INTO "measure_title" VALUES (3688, 'SMF', 'SMFHG05', 'ASMF.SuccSmfModifyPduSession', 'false', 'SmfFunction', '15M', '{"cn":"A-SMF/H-SMF发起的PDU会话修改成功次数","en":"ASMF.SuccSmfModifyPduSession"}', 'A-SMF/H-SMF发起的PDU会话修改成功次数。'); +INSERT INTO "measure_title" VALUES (3689, 'SMF', 'SMFHG05', 'ASMF.SuccSmfModifyPduSession._Ns', 'true', 'SmfFunction', '15M', '{"cn":"分切片的A-SMF/H-SMF发起的PDU会话修改成功次数","en":"ASMF.SuccSmfModifyPduSession._Ns"}', '按照S-NSSAI统计A-SMF/H-SMF发起的PDU会话修改成功次数。'); +INSERT INTO "measure_title" VALUES (3690, 'SMF', 'SMFHG05', 'ASMF.SuccSmfModifyPduSession._Dnn', 'true', 'SmfFunction', '15M', '{"cn":"分DNN的A-SMF/H-SMF发起的PDU会话修改成功次数","en":"ASMF.SuccSmfModifyPduSession._Dnn"}', '按照DNN统计A-SMF/H-SMF发起的PDU会话修改成功次数。'); +INSERT INTO "measure_title" VALUES (3691, 'SMF', 'SMFHG06', 'ASMF.FailSmfModifyPduSession', 'false', 'SmfFunction', '15M', '{"cn":"A-SMF/H-SMF发起的PDU会话修改失败次数","en":"ASMF.FailSmfModifyPduSession"}', 'A-SMF/H-SMF发起的PDU会话修改请求被拒绝的次数,并按拒绝原因分类统计。 +'); +INSERT INTO "measure_title" VALUES (3692, 'SMF', 'SMFHG06', 'ASMF.FailSmfModifyPduSession._Cause', 'true', 'SmfFunction', '15M', '{"cn":"分原因的A-SMF/H-SMF发起的PDU会话修改失败次数","en":"ASMF.FailSmfModifyPduSession._Cause"}', 'A-SMF/H-SMF发起的PDU会话修改请求被拒绝的次数,并按拒绝原因分类统计。 +'); +INSERT INTO "measure_title" VALUES (3693, 'SMF', 'SMFHG06', 'ASMF.FailSmfModifyPduSession._Ns', 'true', 'SmfFunction', '15M', '{"cn":"分切片的A-SMF/H-SMF发起的PDU会话修改失败次数","en":"ASMF.FailSmfModifyPduSession._Ns"}', '按照S-NSSAI统计A-SMF/H-SMF发起的PDU会话修改请求被拒绝的次数。'); +INSERT INTO "measure_title" VALUES (3694, 'SMF', 'SMFHG06', 'ASMF.FailSmfModifyPduSession._Dnn', 'true', 'SmfFunction', '15M', '{"cn":"分DNN的A-SMF/H-SMF发起的PDU会话修改失败次数","en":"ASMF.FailSmfModifyPduSession._Dnn"}', '按照DNN统计A-SMF/H-SMF发起的PDU会话修改请求被拒绝的次数。 +'); +INSERT INTO "measure_title" VALUES (3695, 'SMF', 'SMFHG07', 'ASMF.PduSessionCreateTime', 'false', 'SmfFunction', '15M', '{"cn":"A-SMF/H-SMFPDU会话建立流程平均时长","en":"ASMF.PduSessionCreateTime"}', '成功的A-SMF/H-SMF PDU会话建立流程的平均时长。 +'); +INSERT INTO "measure_title" VALUES (3696, 'SMF', 'SMFHH01', 'ASMF.MeanPduSession', 'false', 'SmfFunction', '15M', '{"cn":"A-SMF/H-SMF平均PDU会话数","en":"ASMF.MeanPduSession"}', '一个统计周期内A-SMF/H-SMF中的平均PDU会话数。'); +INSERT INTO "measure_title" VALUES (3697, 'SMF', 'SMFHH01', 'ASMF.MeanPduSession._Ns', 'true', 'SmfFunction', '15M', '{"cn":"A-SMF/H-SMF分切片的平均PDU会话数","en":"ASMF.MeanPduSession._Ns"}', '一个统计周期内按照S-NSSAI统计A-SMF/H-SMF中的平均PDU会话数。'); +INSERT INTO "measure_title" VALUES (3698, 'SMF', 'SMFHH01', 'ASMF.MeanPduSession._Dnn', 'true', 'SmfFunction', '15M', '{"cn":"A-SMF/H-SMF分DNN的平均PDU会话数","en":"ASMF.MeanPduSession._Dnn"}', '一个统计周期内按照DNN统计A-SMF/H-SMF中的平均PDU会话数。'); +INSERT INTO "measure_title" VALUES (3699, 'SMF', 'SMFHH02', 'ASMF.MaxPduSession', 'false', 'SmfFunction', '15M', '{"cn":"A-SMF/H-SMF最大PDU会话数","en":"ASMF.MaxPduSession"}', '一个统计周期内A-SMF/H-SMF中的最大PDU会话数。'); +INSERT INTO "measure_title" VALUES (3700, 'SMF', 'SMFHH02', 'ASMF.MaxPduSession._Ns', 'true', 'SmfFunction', '15M', '{"cn":"A-SMF/H-SMF分切片的最大PDU会话数","en":"ASMF.MaxPduSession._Ns"}', '一个统计周期内按照S-NSSAI统计A-SMF/H-SMF中的最大PDU会话数。'); +INSERT INTO "measure_title" VALUES (3701, 'SMF', 'SMFHH02', 'ASMF.MaxPduSession._Dnn', 'true', 'SmfFunction', '15M', '{"cn":"A-SMF/H-SMF分DNN的最大PDU会话数","en":"ASMF.MaxPduSession._Dnn"}', '一个统计周期内按照DNN统计A-SMF/H-SMF中的最大PDU会话数。'); +INSERT INTO "measure_title" VALUES (3702, 'SMF', 'SMFHH03', 'ASMF.MeanQf', 'false', 'SmfFunction', '15M', '{"cn":"A-SMF/H-SMF平均Qos流数","en":"ASMF.MeanQf"}', '一个统计周期内A-SMF/H-SMF中的平均Qos流数。'); +INSERT INTO "measure_title" VALUES (3703, 'SMF', 'SMFHH03', 'ASMF.MeanQf._Ns', 'true', 'SmfFunction', '15M', '{"cn":"A-SMF/H-SMF分切片的平均Qos流数","en":"ASMF.MeanQf._Ns"}', '一个统计周期内按照S-NSSAI统计A-SMF/H-SMF中的平均QoS流数。'); +INSERT INTO "measure_title" VALUES (3704, 'SMF', 'SMFHH03', 'ASMF.MeanQf._Dnn', 'true', 'SmfFunction', '15M', '{"cn":"A-SMF/H-SMF分DNN的平均Qos流数","en":"ASMF.MeanQf._Dnn"}', '一个统计周期内按照DNN统计A-SMF/H-SMF中的平均QoS流数。'); +INSERT INTO "measure_title" VALUES (3705, 'SMF', 'SMFHH04', 'ASMF.MaxQf', 'false', 'SmfFunction', '15M', '{"cn":"A-SMF/H-SMF最大Qos流数","en":"ASMF.MaxQf"}', '一个统计周期内A-SMF/H-SMF中的最大Qos流数。'); +INSERT INTO "measure_title" VALUES (3706, 'SMF', 'SMFHH04', 'ASMF.MaxQf._Ns', 'true', 'SmfFunction', '15M', '{"cn":"A-SMF/H-SMF分切片的最大Qos流数","en":"ASMF.MaxQf._Ns"}', '一个统计周期内按照S-NSSAI统计A-SMF/H-SMF中的最大QoS流数。'); +INSERT INTO "measure_title" VALUES (3707, 'SMF', 'SMFHH04', 'ASMF.MaxQf._Dnn', 'true', 'SmfFunction', '15M', '{"cn":"A-SMF/H-SMF分DNN的最大Qos流数","en":"ASMF.MaxQf._Dnn"}', '一个统计周期内按照DNN统计A-SMF/H-SMF中的最大QoS流数。'); +INSERT INTO "measure_title" VALUES (3708, 'SMF', 'SMFHI01', 'ISMF.AttCreatePduSession', 'false', 'SmfFunction', '15M', '{"cn":"I-SMF/V-SMFPDU会话建立请求次数","en":"ISMF.AttCreatePduSession"}', 'I-SMF/V-SMF UE发送的PDU会话建立请求次数。'); +INSERT INTO "measure_title" VALUES (3709, 'SMF', 'SMFHI01', 'ISMF.AttCreatePduSession._Ns', 'true', 'SmfFunction', '15M', '{"cn":"I-SMF/V-SMF分切片的PDU会话建立请求次数","en":"ISMF.AttCreatePduSession._Ns"}', 'I-SMF/V-SMF按照S-NSSAI统计UE发起的PDU会话建立请求次数。'); +INSERT INTO "measure_title" VALUES (3710, 'SMF', 'SMFHI02', 'ISMF.SuccCreatePduSession', 'false', 'SmfFunction', '15M', '{"cn":"I-SMF/V-SMFPDU会话建立成功次数","en":"ISMF.SuccCreatePduSession"}', 'I-SMF/V-SMF收到 UE发起的PDU会话建立成功次数。'); +INSERT INTO "measure_title" VALUES (3711, 'SMF', 'SMFHI02', 'ISMF.SuccCreatePduSession._Ns', 'true', 'SmfFunction', '15M', '{"cn":"I-SMF/V-SMF分切片的PDU会话建立成功次数","en":"ISMF.SuccCreatePduSession._Ns"}', '按照S-NSSAI统计I-SMF/V-SMF收到UE发起的PDU会话建立成功次数。'); +INSERT INTO "measure_title" VALUES (3712, 'SMF', 'SMFHI03', 'ISMF.FailCreatePduSession', 'false', 'SmfFunction', '15M', '{"cn":"I-SMF/V-SMFPDU会话建立失败次数","en":"ISMF.FailCreatePduSession"}', 'UE发起的PDU会话建立被I-SMF/V-SMF拒绝的次数'); +INSERT INTO "measure_title" VALUES (3713, 'SMF', 'SMFHI03', 'ISMF.FailCreatePduSession._Ns', 'true', 'SmfFunction', '15M', '{"cn":"I-SMF/V-SMF分切片的PDU会话建立失败次数","en":"ISMF.FailCreatePduSession._Ns"}', '按照S-NSSAI统计UE发起的PDU会话建立被I-SMF/V-SMF拒绝的次数,并按拒绝原因分类统计。'); +INSERT INTO "measure_title" VALUES (3714, 'SMF', 'SMFHI04', 'ISMF.SendSmfModifyPduSession', 'false', 'SmfFunction', '15M', '{"cn":"I-SMF/V-SMF发送的PDU会话修改命令次数","en":"ISMF.SendSmfModifyPduSession"}', 'I-SMF/V-SMF发送的PDU会话修改命令次数。'); +INSERT INTO "measure_title" VALUES (3715, 'SMF', 'SMFHI04', 'ISMF.SendSmfModifyPduSession._Ns', 'true', 'SmfFunction', '15M', '{"cn":"I-SMF/V-SMF发送的分切片的PDU会话修改命令次数","en":"ISMF.SendSmfModifyPduSession._Ns"}', '按照S-NSSAI统计I-SMF/V-SMF发送的PDU会话修改次数。'); +INSERT INTO "measure_title" VALUES (3716, 'SMF', 'SMFHI05', 'ISMF.SuccSmfModifyPduSession', 'false', 'SmfFunction', '15M', '{"cn":"I-SMF/V-SMFPDU会话修改成功次数","en":"ISMF.SuccSmfModifyPduSession"}', 'I-SMF/V-SMF PDU会话修改成功次数。'); +INSERT INTO "measure_title" VALUES (3717, 'SMF', 'SMFHI05', 'ISMF.SuccSmfModifyPduSession._Ns', 'true', 'SmfFunction', '15M', '{"cn":"分切片的I-SMF/V-SMFPDU会话修改成功次数","en":"ISMF.SuccSmfModifyPduSession._Ns"}', '按照S-NSSAI统计I-SMF/V-SMF PDU会话修改成功次数。'); +INSERT INTO "measure_title" VALUES (3718, 'SMF', 'SMFHI06', 'ISMF.FailSmfModifyPduSession', 'false', 'SmfFunction', '15M', '{"cn":"I-SMF/V-SMFPDU会话修改失败次数","en":"ISMF.FailSmfModifyPduSession"}', 'I-SMF/V-SMF PDU会话修改被拒绝的次数。 +'); +INSERT INTO "measure_title" VALUES (3719, 'SMF', 'SMFHI06', 'ISMF.FailSmfModifyPduSession._Ns', 'true', 'SmfFunction', '15M', '{"cn":"分切片的I-SMF/V-SMFPDU会话修改失败次数","en":"ISMF.FailSmfModifyPduSession._Ns"}', '按照S-NSSAI统计I-SMF/V-SMF PDU会话修改被拒绝的次数。'); +INSERT INTO "measure_title" VALUES (3720, 'SMF', 'SMFHI07', 'ISMF.PduSessionCreateTime', 'false', 'SmfFunction', '15M', '{"cn":"I-SMF/V-SMFPDU会话建立流程平均时长","en":"ISMF.PduSessionCreateTime"}', '成功的I-SMF/V-SMF PDU会话建立流程的平均时长。 +'); +INSERT INTO "measure_title" VALUES (3721, 'SMF', 'SMFHJ01', 'ISMF.MeanPduSession', 'false', 'SmfFunction', '15M', '{"cn":"I-SMF/V-SMF平均PDU会话数","en":"ISMF.MeanPduSession"}', '一个统计周期内I-SMF/V-SMF中的平均PDU会话数。'); +INSERT INTO "measure_title" VALUES (3722, 'SMF', 'SMFHJ01', 'ISMF.MeanPduSession._Ns', 'true', 'SmfFunction', '15M', '{"cn":"I-SMF/V-SMF分切片的平均PDU会话数","en":"ISMF.MeanPduSession._Ns"}', '一个统计周期内按照S-NSSAI统计I-SMF/V-SMF中的平均PDU会话数。'); +INSERT INTO "measure_title" VALUES (3723, 'SMF', 'SMFHJ02', 'ISMF.MaxPduSession', 'false', 'SmfFunction', '15M', '{"cn":"I-SMF/V-SMF最大PDU会话数","en":"ISMF.MaxPduSession"}', '一个统计周期内I-SMF/V-SMF中的最大PDU会话数。'); +INSERT INTO "measure_title" VALUES (3724, 'SMF', 'SMFHJ02', 'ISMF.MaxPduSession._Ns', 'true', 'SmfFunction', '15M', '{"cn":"I-SMF/V-SMF分切片的最大PDU会话数","en":"ISMF.MaxPduSession._Ns"}', '一个统计周期内按照S-NSSAI统计I-SMF/V-SMF中的最大PDU会话数。'); +INSERT INTO "measure_title" VALUES (3725, 'SMF', 'SMFHJ03', 'ISMF.MeanQf', 'false', 'SmfFunction', '15M', '{"cn":"I-SMF/V-SMF平均Qos流数","en":"ISMF.MeanQf"}', '一个统计周期内I-SMF/V-SMF中的平均Qos流数。'); +INSERT INTO "measure_title" VALUES (3726, 'SMF', 'SMFHJ03', 'ISMF.MeanQf._Ns', 'true', 'SmfFunction', '15M', '{"cn":"I-SMF/V-SMF分切片的平均Qos流数","en":"ISMF.MeanQf._Ns"}', '一个统计周期内按照S-NSSAI统计I-SMF/V-SMF中的平均QoS流数。'); +INSERT INTO "measure_title" VALUES (3727, 'SMF', 'SMFHJ04', 'ISMF.MaxQf', 'false', 'SmfFunction', '15M', '{"cn":"I-SMF/V-SMF最大Qos流数","en":"ISMF.MaxQf"}', '一个统计周期内I-SMF/V-SMF中的最大Qos流数。'); +INSERT INTO "measure_title" VALUES (3728, 'SMF', 'SMFHJ04', 'ISMF.MaxQf._Ns', 'true', 'SmfFunction', '15M', '{"cn":"I-SMF/V-SMF分切片的最大Qos流数","en":"ISMF.MaxQf._Ns"}', '一个统计周期内按照S-NSSAI统计I-SMF/V-SMF中的最大QoS流数。'); +INSERT INTO "measure_title" VALUES (3729, 'SMF', 'SMFHK01', 'SMF.AttAccessRequestByUPF', 'false', 'SmfFunction', '15M', '{"cn":"SMF发送UPF转接的AccessRequest消息数","en":"SMF.AttAccessRequestByUPF"}', 'SMF向UPF转接的AAA服务器发起鉴权请求的尝试次数。'); +INSERT INTO "measure_title" VALUES (3730, 'SMF', 'SMFHK02', 'SMF.SuccAccessAcceptByUPF', 'false', 'SmfFunction', '15M', '{"cn":"SMF接收UPF转接的AccessAccept消息数","en":"SMF.SuccAccessAcceptByUPF"}', 'SMF收到UPF转接的AAA服务器鉴权请求接受次数'); +INSERT INTO "measure_title" VALUES (3731, 'SMF', 'SMFHK03', 'SMF.AttAccountingStartRequestByUPF', 'false', 'SmfFunction', '15M', '{"cn":"SMF发送UPF转接的AccountingStartRequest消息数","en":"SMF.AttAccountingStartRequestByUPF"}', 'SMF向UPF转接的AAA服务器发起计费开始请求的尝试次数。'); +INSERT INTO "measure_title" VALUES (3732, 'SMF', 'SMFHK04', 'SMF.SuccAccountingStartResponseByUPF', 'false', 'SmfFunction', '15M', '{"cn":"SMF接收UPF转接的AccoutingStartResponse消息数","en":"SMF.SuccAccountingStartResponseByUPF"}', 'SMF收到UPF转接的AAA服务器计费开始应答次数'); +INSERT INTO "measure_title" VALUES (3733, 'SMF', 'SMFHL01', 'SMF.AttChargingDataReq', 'false', 'SmfFunction', '15M', '{"cn":"N40接口发送激活请求消息数","en":"SMF.AttChargingDataReq"}', 'N40接口上发送Nchf_ConvergedCharging_Create Request消息的数目'); +INSERT INTO "measure_title" VALUES (3734, 'SMF', 'SMFHL02', 'SMF.RecvChargingDataRsp', 'false', 'SmfFunction', '15M', '{"cn":"收到Nchf_ConvergedCharging_CreateResponse次数","en":"SMF.RecvChargingDataRsp"}', 'N40接口上接收Nchf_ConvergedCharging_Create Response消息的数目'); +INSERT INTO "measure_title" VALUES (3735, 'SMF', 'SMFHL03', 'SMF.ReAttChargingDataReq', 'false', 'SmfFunction', '15M', '{"cn":"重发Nchf_ConvergedCharging_CreateRequest次数","en":"SMF.ReAttChargingDataReq"}', 'N40接口上重发Nchf_ConvergedCharging_Create Request消息的数目'); +INSERT INTO "measure_title" VALUES (3736, 'SMF', 'SMFHM01', 'SMF.BsfRecPcfQuery', 'false', 'SmfFunction', '15M', '{"cn":"BSF收到查询请求次数","en":"SMF.BsfRecPcfQuery"}', 'BSF收到查询PCF请求次数'); +INSERT INTO "measure_title" VALUES (3737, 'SMF', 'SMFHM02', 'SMF.BsfRspPcfQuery', 'false', 'SmfFunction', '15M', '{"cn":"BSF发送查询应答次数","en":"SMF.BsfRspPcfQuery"}', 'BSF发送查询PCF成功次数'); +INSERT INTO "measure_title" VALUES (3738, 'UDM', 'UDMHA01', 'UDM.AmfUecmRegReq', 'false', 'UdmFunction', '15M', '{"cn":"AMF发起的UECM注册请求次数","en":"UDM.AmfUecmRegReq"}', '统计UDM收到的AMF发起的UECM注册请求次数'); +INSERT INTO "measure_title" VALUES (3739, 'UDM', 'UDMHA02', 'UDM.AmfUecmRegSucc', 'false', 'UdmFunction', '15M', '{"cn":"AMF发起的UECM注册成功次数","en":"UDM.AmfUecmRegSucc"}', '统计UDM返回的成功的AMF注册响应次数'); +INSERT INTO "measure_title" VALUES (3740, 'UDM', 'UDMHA03', 'UDM.AmfUecmRegUpdateReq', 'false', 'UdmFunction', '15M', '{"cn":"更新注册参数请求次数","en":"UDM.AmfUecmRegUpdateReq"}', '更新注册参数请求次数'); +INSERT INTO "measure_title" VALUES (3741, 'UDM', 'UDMHA04', 'UDM.AmfUecmRegUpdateSucc', 'false', 'UdmFunction', '15M', '{"cn":"更新注册参数成功次数","en":"UDM.AmfUecmRegUpdateSucc"}', '更新注册参数成功次数'); +INSERT INTO "measure_title" VALUES (3742, 'UDM', 'UDMHA05', 'UDM.AmfUecmDeregReq', 'false', 'UdmFunction', '15M', '{"cn":"AMF发起的UECM去注册请求次数","en":"UDM.AmfUecmDeregReq"}', '统计AMF发起的UECM去注册请求次数'); +INSERT INTO "measure_title" VALUES (3743, 'UDM', 'UDMHA06', 'UDM.AmfUecmDeregSucc', 'false', 'UdmFunction', '15M', '{"cn":"AMF发起的UECM去注册成功次数","en":"UDM.AmfUecmDeregSucc"}', '统计AMF发起的UECM去注册成功次数'); +INSERT INTO "measure_title" VALUES (3744, 'UDM', 'UDMHA07', 'UDM.SmfUecmRegReq', 'false', 'UdmFunction', '15M', '{"cn":"SMF发起的UECM注册请求次数","en":"UDM.SmfUecmRegReq"}', '统计SMF发起的用户上下文注册请求次数'); +INSERT INTO "measure_title" VALUES (3745, 'UDM', 'UDMHA08', 'UDM.SmfUecmRegSucc', 'false', 'UdmFunction', '15M', '{"cn":"SMF发起的UECM注册成功次数","en":"UDM.SmfUecmRegSucc"}', '统计UDM返回的成功的用户上下文注册响应次数'); +INSERT INTO "measure_title" VALUES (3746, 'UDM', 'UDMHA09', 'UDM.SmfUecmDeregReq', 'false', 'UdmFunction', '15M', '{"cn":"SMF发起的UECM去注册请求次数","en":"UDM.SmfUecmDeregReq"}', '统计SMF发起的用户上下文去注册请求次数'); +INSERT INTO "measure_title" VALUES (3747, 'UDM', 'UDMHA10', 'UDM.SmfUecmDeregSucc', 'false', 'UdmFunction', '15M', '{"cn":"SMF发起的UECM去注册成功次数","en":"UDM.SmfUecmDeregSucc"}', '统计UDM返回的成功的用户上下文去注册响应次数'); +INSERT INTO "measure_title" VALUES (3748, 'UDM', 'UDMHA11', 'UDM.SdmGetReq', 'false', 'UdmFunction', '15M', '{"cn":"获取用户数据请求次数","en":"UDM.SdmGetReq"}', '统计UDM收到的获取用户数据请求次数'); +INSERT INTO "measure_title" VALUES (3749, 'UDM', 'UDMHA12', 'UDM.SdmGetSucc', 'false', 'UdmFunction', '15M', '{"cn":"获取用户数据成功次数","en":"UDM.SdmGetSucc"}', '统计UDM成功返回用户数据次数'); +INSERT INTO "measure_title" VALUES (3750, 'UDM', 'UDMHA13', 'UDM.SdmNotif', 'false', 'UdmFunction', '15M', '{"cn":"用户数据变化通知次数","en":"UDM.SdmNotif"}', '统计UDM发送用户数据变化通知次数'); +INSERT INTO "measure_title" VALUES (3751, 'UDM', 'UDMHA14', 'UDM.SdmSubscrReq', 'false', 'UdmFunction', '15M', '{"cn":"订阅用户数据请求次数","en":"UDM.SdmSubscrReq"}', '统计UDM收到的订阅用户数据相关通知请求次数'); +INSERT INTO "measure_title" VALUES (3752, 'UDM', 'UDMHA15', 'UDM.SdmSubscrSucc', 'false', 'UdmFunction', '15M', '{"cn":"订阅用户数据成功次数","en":"UDM.SdmSubscrSucc"}', '统计UDM返回的订阅用户数据相关通知成功次数'); +INSERT INTO "measure_title" VALUES (3753, 'UDM', 'UDMHA16', 'UDM.SdmUnSubscrReq', 'false', 'UdmFunction', '15M', '{"cn":"去订阅用户数据请求次数","en":"UDM.SdmUnSubscrReq"}', '统计UDM收到的去订阅用户数据相关通知请求次数'); +INSERT INTO "measure_title" VALUES (3754, 'UDM', 'UDMHA17', 'UDM.SdmUnSubscrSucc', 'false', 'UdmFunction', '15M', '{"cn":"去订阅用户数据成功次数","en":"UDM.SdmUnSubscrSucc"}', '统计UDM返回的去订阅用户数据相关通知成功次数'); +INSERT INTO "measure_title" VALUES (3755, 'UDM', 'UDMHA18', 'UDM.UecmDeregNotif', 'false', 'UdmFunction', '15M', '{"cn":"去注册通知次数","en":"UDM.UecmDeregNotif"}', '统计UDM发送的去注册通知次数'); +INSERT INTO "measure_title" VALUES (3756, 'UDM', 'UDMHA19', 'UDM.SdmGetUserNotFound', 'false', 'UdmFunction', '15M', '{"cn":"获取用户数据返回用户不存在消息总数","en":"UDM.SdmGetUserNotFound"}', '统计获取用户数据时UDM返回用户不存在消息总数'); +INSERT INTO "measure_title" VALUES (3757, 'UDM', 'UDMHA20', 'UDM.SdmGetDataNotFound', 'false', 'UdmFunction', '15M', '{"cn":"获取用户数据返回签约数据不存在消息总数","en":"UDM.SdmGetDataNotFound"}', '统计获取用户数据时UDM返回签约数据不存在消息总数'); +INSERT INTO "measure_title" VALUES (3758, 'UDM', 'UDMHA21', 'UDM.AmfUecmRegUserNotFound', 'false', 'UdmFunction', '15M', '{"cn":"AMF发起的UECM注册返回用户不存在消息总数","en":"UDM.AmfUecmRegUserNotFound"}', 'AMF发起的UECM注册返回时,UDM返回用户不存在消息总数'); +INSERT INTO "measure_title" VALUES (3759, 'UDM', 'UDMHA22', 'UDM.AmfUecmRegUnknownSub', 'false', 'UdmFunction', '15M', '{"cn":"AMF发起的UECM注册返回未签约5G业务消息总数","en":"UDM.AmfUecmRegUnknownSub"}', 'AMF发起的UECM注册返回时,UDM返回未签约5G业务消息总数'); +INSERT INTO "measure_title" VALUES (3760, 'UDM', 'UDMHA23', 'UDM.AmfUecmRegNoPsSub', 'false', 'UdmFunction', '15M', '{"cn":"AMF发起的UECM注册返回未签约PS业务消息总数","en":"UDM.AmfUecmRegNoPsSub"}', 'AMF发起的UECM注册返回时,UDM返回未签约PS业务消息总数'); +INSERT INTO "measure_title" VALUES (3761, 'UDM', 'UDMHA24', 'UDM.AmfUecmRegRoamNotAllowed', 'false', 'UdmFunction', '15M', '{"cn":"AMF发起的UECM注册返回漫游不允许消息总数","en":"UDM.AmfUecmRegRoamNotAllowed"}', 'AMF发起的UECM注册返回时,UDM返回漫游不允许消息总数'); +INSERT INTO "measure_title" VALUES (3762, 'UDM', 'UDMHA25', 'UDM.AmfUecmRegRatNotAllowed', 'false', 'UdmFunction', '15M', '{"cn":"AMF发起的UECM注册返回RAT不允许消息总数","en":"UDM.AmfUecmRegRatNotAllowed"}', 'AMF发起的UECM注册返回时,UDM返回RAT不允许消息总数'); +INSERT INTO "measure_title" VALUES (3763, 'UDM', 'UDMHA26', 'UDM.AmfUecmRegContextNotFound', 'false', 'UdmFunction', '15M', '{"cn":"AMF发起的UECM注册返回上下文不存在消息总数","en":"UDM.AmfUecmRegContextNotFound"}', 'AMF发起的UECM注册返回时,UDM返回上下文不存在消息总数'); +INSERT INTO "measure_title" VALUES (3764, 'UDM', 'UDMHA27', 'UDM.AmfUecmRegReAuth', 'false', 'UdmFunction', '15M', '{"cn":"AMF发起的UECM注册返回UE未鉴权总数","en":"UDM.AmfUecmRegReAuth"}', 'AMF发起的UECM注册返回时,UDM返回UE未鉴权总数'); +INSERT INTO "measure_title" VALUES (3765, 'UDM', 'UDMHA28', 'UDM.SmfUecmRegUserNotFound', 'false', 'UdmFunction', '15M', '{"cn":"SMF发起的UECM注册返回用户不存在消息总数","en":"UDM.SmfUecmRegUserNotFound"}', 'SMF发起的UECM注册返回时,UDM返回用户不存在消息总数'); +INSERT INTO "measure_title" VALUES (3766, 'UDM', 'UDMHA29', 'UDM.SmfUecmRegUnknownSub', 'false', 'UdmFunction', '15M', '{"cn":"SMF发起的UECM注册返回未签约5G业务消息总数","en":"UDM.SmfUecmRegUnknownSub"}', 'SMF发起的UECM注册返回时,UDM返回未签约5G业务消息总数'); +INSERT INTO "measure_title" VALUES (3767, 'UDM', 'UDMHA30', 'UDM.SmfUecmRegRoamNotAllowed', 'false', 'UdmFunction', '15M', '{"cn":"SMF发起的UECM注册返回漫游不允许消息总数","en":"UDM.SmfUecmRegRoamNotAllowed"}', 'SMF发起的UECM注册返回时,UDM返回漫游不允许消息总数'); +INSERT INTO "measure_title" VALUES (3768, 'UDM', 'UDMHA31', 'UDM.SmfUecmRegDnnNotAllowed', 'false', 'UdmFunction', '15M', '{"cn":"SMF发起的UECM注册返回DNN不允许消息总数","en":"UDM.SmfUecmRegDnnNotAllowed"}', 'SMF发起的UECM注册返回时,UDM返回DNN不允许消息总数'); +INSERT INTO "measure_title" VALUES (3769, 'UDM', 'UDMHB01', 'UDR.5gSupi', 'false', 'UdrFunction', '15M', '{"cn":"5G网络SUPI数","en":"UDR.5gSupi"}', '统计UDR存储的SUPI数最新值'); +INSERT INTO "measure_title" VALUES (3770, 'UDM', 'UDMHB02', 'UDR.5gSub', 'false', 'UdrFunction', '15M', '{"cn":"5G用户数","en":"UDR.5gSub"}', '统计UDR存储的5G MSISDN数最新值'); +INSERT INTO "measure_title" VALUES (3771, 'UDM', 'UDMHB03', 'UDR.5gActSub', 'false', 'UdrFunction', '15M', '{"cn":"5G活动用户数","en":"UDR.5gActSub"}', '统计UDR存储的有5G位置信息的MSISDN用户数最新值'); +INSERT INTO "measure_title" VALUES (3772, 'UDM', 'UDMHC01', 'Ausf.UeAuthReq', 'false', 'AusfFunction', '15M', '{"cn":"鉴权请求次数","en":"Ausf.UeAuthReq"}', 'AUSF收到的鉴权请求次数'); +INSERT INTO "measure_title" VALUES (3773, 'UDM', 'UDMHC02', 'Ausf.UeAuthAnsSucc', 'false', 'AusfFunction', '15M', '{"cn":"鉴权成功次数","en":"Ausf.UeAuthAnsSucc"}', 'AUSF返回鉴权成功响应次数'); +INSERT INTO "measure_title" VALUES (3774, 'UDM', 'UDMHC03', 'Ausf.UeAuthAnsUserNotFound', 'false', 'AusfFunction', '15M', '{"cn":"鉴权返回用户不存在消息总数","en":"Ausf.UeAuthAnsUserNotFound"}', 'AUSF返回用户不存在消息总数'); +INSERT INTO "measure_title" VALUES (3775, 'UDM', 'UDMHC04', 'Ausf.UeAuthAnsContextNotFound', 'false', 'AusfFunction', '15M', '{"cn":"返回上下文不存在消息总数","en":"Ausf.UeAuthAnsContextNotFound"}', 'AUSF返回上下文不存在消息总数'); +INSERT INTO "measure_title" VALUES (3776, 'UDM', 'UDMHD01', 'ME.MeanMeLoad', 'false', 'ManagedElement', '15M', '{"cn":"系统平均负荷","en":"ME.MeanMeLoad"}', ' +指测量周期中,网元的虚拟机资源负荷的抽样平均值。网元的虚拟机资源负荷可取对网元影响最大的模块的负荷,或取不同模块的负荷的加权平均值,不同厂商设备的计算方法各不相同。'); +INSERT INTO "measure_title" VALUES (3777, 'UPF', 'UPFHA01', 'UPF.PfcpSessionEstabReq', 'false', 'UpfFunction', '15M', '{"cn":"PFCP会话建立请求次数","en":"UPF.PfcpSessionEstabReq"}', 'PFCP会话建立请求次数。'); +INSERT INTO "measure_title" VALUES (3778, 'UPF', 'UPFHA01', 'UPF.PfcpSessionEstabReq._Ns', 'true', 'UpfFunction', '15M', '{"cn":"分切片的PFCP会话建立请求次数","en":"UPF.PfcpSessionEstabReq._Ns"}', '按照S-NSSAI统计的PFCP会话建立请求次数。'); +INSERT INTO "measure_title" VALUES (3779, 'UPF', 'UPFHA01', 'UPF.PfcpSessionEstabReq._Dnn', 'true', 'UpfFunction', '15M', '{"cn":"分Dnn的PFCP会话建立请求次数","en":"UPF.PfcpSessionEstabReq._Dnn"}', '按照Dnn统计的PFCP会话建立请求次数。'); +INSERT INTO "measure_title" VALUES (3780, 'UPF', 'UPFHA02', 'UPF.PfcpSessionEstabSucc', 'false', 'UpfFunction', '15M', '{"cn":"PFCP会话建立成功次数","en":"UPF.PfcpSessionEstabSucc"}', 'PFCP会话建立成功次数。'); +INSERT INTO "measure_title" VALUES (3781, 'UPF', 'UPFHA02', 'UPF.PfcpSessionEstabSucc._Ns', 'true', 'UpfFunction', '15M', '{"cn":"分切片的PFCP会话建立成功次数","en":"UPF.PfcpSessionEstabSucc._Ns"}', '按照S-NSSAI统计的PFCP会话建立成功次数。'); +INSERT INTO "measure_title" VALUES (3782, 'UPF', 'UPFHA02', 'UPF.PfcpSessionEstabSucc._Dnn', 'true', 'UpfFunction', '15M', '{"cn":"分Dnn的PFCP会话建立成功次数","en":"UPF.PfcpSessionEstabSucc._Dnn"}', '按照Dnn统计的PFCP会话建立成功次数。'); +INSERT INTO "measure_title" VALUES (3783, 'UPF', 'UPFHA03', 'UPF.PfcpSessionEstabFail', 'false', 'UpfFunction', '15M', '{"cn":"PFCP会话建立失败次数","en":"UPF.PfcpSessionEstabFail"}', 'PFCP会话建立被拒绝的次数,并按拒绝原因分类统计。'); +INSERT INTO "measure_title" VALUES (3784, 'UPF', 'UPFHA03', 'UPF.PfcpSessionEstabFail._Cause', 'true', 'UpfFunction', '15M', '{"cn":"分原因的PFCP会话建立失败次数","en":"UPF.PfcpSessionEstabFail._Cause"}', 'PFCP会话建立被拒绝的次数,并按拒绝原因分类统计。'); +INSERT INTO "measure_title" VALUES (3785, 'UPF', 'UPFHA03', 'UPF.PfcpSessionEstabFail._Ns', 'true', 'UpfFunction', '15M', '{"cn":"分切片的PFCP会话建立失败次数","en":"UPF.PfcpSessionEstabFail._Ns"}', '按照S-NSSAI统计PFCP会话建立被拒绝的次数'); +INSERT INTO "measure_title" VALUES (3786, 'UPF', 'UPFHA03', 'UPF.PfcpSessionEstabFail._Dnn', 'true', 'UpfFunction', '15M', '{"cn":"分Dnn的PFCP会话建立失败次数","en":"UPF.PfcpSessionEstabFail._Dnn"}', '按照Dnn统计PFCP会话建立被拒绝的次数'); +INSERT INTO "measure_title" VALUES (3787, 'UPF', 'UPFHA04', 'UPF.PfcpSessionModifyReq', 'false', 'UpfFunction', '15M', '{"cn":"PFCP会话修改请求次数","en":"UPF.PfcpSessionModifyReq"}', 'PFCP会话修改请求次数。'); +INSERT INTO "measure_title" VALUES (3788, 'UPF', 'UPFHA04', 'UPF.PfcpSessionModifyReq._Ns', 'true', 'UpfFunction', '15M', '{"cn":"分切片的PFCP会话修改请求次数","en":"UPF.PfcpSessionModifyReq._Ns"}', '按照S-NSSAI统计PFCP会话修改请求次数。'); +INSERT INTO "measure_title" VALUES (3789, 'UPF', 'UPFHA04', 'UPF.PfcpSessionModifyReq._Dnn', 'true', 'UpfFunction', '15M', '{"cn":"分Dnn的PFCP会话修改请求次数","en":"UPF.PfcpSessionModifyReq._Dnn"}', '按照Dnn统计PFCP会话修改请求次数。'); +INSERT INTO "measure_title" VALUES (3790, 'UPF', 'UPFHA05', 'UPF.PfcpSessionModifySucc', 'false', 'UpfFunction', '15M', '{"cn":"PFCP会话修改成功次数","en":"UPF.PfcpSessionModifySucc"}', 'PFCP会话修改成功次数。'); +INSERT INTO "measure_title" VALUES (3791, 'UPF', 'UPFHA05', 'UPF.PfcpSessionModifySucc._Ns', 'true', 'UpfFunction', '15M', '{"cn":"分切片的PFCP会话修改成功次数","en":"UPF.PfcpSessionModifySucc._Ns"}', '按照S-NSSAI统计PFCP会话修改成功次数。'); +INSERT INTO "measure_title" VALUES (3792, 'UPF', 'UPFHA05', 'UPF.PfcpSessionModifySucc._Dnn', 'true', 'UpfFunction', '15M', '{"cn":"分Dnn的PFCP会话修改成功次数","en":"UPF.PfcpSessionModifySucc._Dnn"}', '按照Dnn统计PFCP会话修改成功次数。'); +INSERT INTO "measure_title" VALUES (3793, 'UPF', 'UPFHA06', 'UPF.PfcpSessionModifyFail', 'false', 'UpfFunction', '15M', '{"cn":"PFCP会话修改失败次数","en":"UPF.PfcpSessionModifyFail"}', 'PFCP会话修改拒绝的次数,并按拒绝原因分类统计。'); +INSERT INTO "measure_title" VALUES (3794, 'UPF', 'UPFHA06', 'UPF.PfcpSessionModifyFail._Cause', 'true', 'UpfFunction', '15M', '{"cn":"分原因的PFCP会话修改失败次数","en":"UPF.PfcpSessionModifyFail._Cause"}', 'PFCP会话修改拒绝的次数,并按拒绝原因分类统计。'); +INSERT INTO "measure_title" VALUES (3795, 'UPF', 'UPFHA06', 'UPF.PfcpSessionModifyFail._Ns', 'true', 'UpfFunction', '15M', '{"cn":"分切片的PFCP会话修改失败次数","en":"UPF.PfcpSessionModifyFail._Ns"}', '按照S-NSSAI统计PFCP会话修改拒绝的次数。'); +INSERT INTO "measure_title" VALUES (3796, 'UPF', 'UPFHA06', 'UPF.PfcpSessionModifyFail._Dnn', 'true', 'UpfFunction', '15M', '{"cn":"分Dnn的PFCP会话修改失败次数","en":"UPF.PfcpSessionModifyFail._Dnn"}', '按照Dnn统计PFCP会话修改拒绝的次数。'); +INSERT INTO "measure_title" VALUES (3797, 'UPF', 'UPFHB01', 'UPF.MeanQosFlows', 'false', 'UpfFunction', '15M', '{"cn":"平均QoS流数","en":"UPF.MeanQosFlows"}', '一个统计周期内UPF中的平均QoS流数。'); +INSERT INTO "measure_title" VALUES (3798, 'UPF', 'UPFHB01', 'UPF.MeanQosFlows._Ns', 'true', 'UpfFunction', '15M', '{"cn":"分切片的平均QoS流数","en":"UPF.MeanQosFlows._Ns"}', '一个统计周期内按照S-NSSAI统计UPF中的平均QoS流数。'); +INSERT INTO "measure_title" VALUES (3799, 'UPF', 'UPFHB01', 'UPF.MeanQosFlows._Dnn', 'true', 'UpfFunction', '15M', '{"cn":"分DNN的平均QoS流数","en":"UPF.MeanQosFlows._Dnn"}', '一个统计周期内按照DNN统计UPF中的平均QoS流数。'); +INSERT INTO "measure_title" VALUES (3800, 'UPF', 'UPFHB01', 'UPF.MaxQosFlows', 'false', 'UpfFunction', '15M', '{"cn":"最大QoS流数","en":"UPF.MaxQosFlows"}', '一个统计周期内UPF中的最大QoS流数。'); +INSERT INTO "measure_title" VALUES (3801, 'UPF', 'UPFHB01', 'UPF.MaxQosFlows._Ns', 'true', 'UpfFunction', '15M', '{"cn":"分切片的最大QoS流数","en":"UPF.MaxQosFlows._Ns"}', '一个统计周期内按照S-NSSAI统计UPF中的最大QoS流数。'); +INSERT INTO "measure_title" VALUES (3802, 'UPF', 'UPFHB01', 'UPF.MaxQosFlows._Dnn', 'true', 'UpfFunction', '15M', '{"cn":"分DNN的最大QoS流数","en":"UPF.MaxQosFlows._Dnn"}', '一个统计周期内按照DNN统计UPF中的最大QoS流数。'); +INSERT INTO "measure_title" VALUES (3803, 'UPF', 'UPFHC01', 'UPF.N3IncPkt', 'false', 'EpRpDynN3Upf', '15M', '{"cn":"N3接口接收GTP包数","en":"UPF.N3IncPkt"}', 'UPF从N3接口接收的GTP包数。其中EpRpDynN3Upf_Global要求按S-NSSAI分别进行统计。'); +INSERT INTO "measure_title" VALUES (3804, 'UPF', 'UPFHC01', 'UPF.N3IncPkt._Ns', 'true', 'EpRpDynN3Upf', '15M', '{"cn":"分切片的N3接口接收GTP包数","en":"UPF.N3IncPkt._Ns"}', 'UPF从N3接口接收的GTP包数。其中EpRpDynN3Upf_Global要求按S-NSSAI分别进行统计。'); +INSERT INTO "measure_title" VALUES (3805, 'UPF', 'UPFHC02', 'UPF.N3OgPkt', 'false', 'EpRpDynN3Upf', '15M', '{"cn":"N3接口发送GTP包数","en":"UPF.N3OgPkt"}', 'UPF从N3接口发送出去的GTP包数,其中EpRpDynN3Upf_Global要求按S-NSSAI分别进行统计。'); +INSERT INTO "measure_title" VALUES (3806, 'UPF', 'UPFHC02', 'UPF.N3OgPkt._Ns', 'true', 'EpRpDynN3Upf', '15M', '{"cn":"分切片的N3接口发送GTP包数","en":"UPF.N3OgPkt._Ns"}', 'UPF从N3接口发送出去的GTP包数,其中EpRpDynN3Upf_Global要求按S-NSSAI分别进行统计。'); +INSERT INTO "measure_title" VALUES (3807, 'UPF', 'UPFHC03', 'UPF.N3IncOct', 'false', 'EpRpDynN3Upf', '15M', '{"cn":"N3接口接收GTP包字节数","en":"UPF.N3IncOct"}', 'UPF从N3接口接收的GTP包字节数(含GTP头),其中EpRpDynN3Upf_Global要求按S-NSSAI或UE分别进行统计。'); +INSERT INTO "measure_title" VALUES (3808, 'UPF', 'UPFHC03', 'UPF.N3IncOct._Ns', 'true', 'EpRpDynN3Upf', '15M', '{"cn":"分切片的N3接口接收GTP包字节数","en":"UPF.N3IncOct._Ns"}', 'UPF从N3接口接收的GTP包字节数(含GTP头),其中EpRpDynN3Upf_Global要求按S-NSSAI或UE分别进行统计。'); +INSERT INTO "measure_title" VALUES (3809, 'UPF', 'UPFHC04', 'UPF.N3OgOct', 'false', 'EpRpDynN3Upf', '15M', '{"cn":"N3接口发送GTP包字节数","en":"UPF.N3OgOct"}', 'UPF从N3接口发送的GTP包字节数(含GTP头),其中EpRpDynN3Upf_Global要求按S-NSSAI或UE分别进行统计。'); +INSERT INTO "measure_title" VALUES (3810, 'UPF', 'UPFHC04', 'UPF.N3OgOct._Ns', 'true', 'EpRpDynN3Upf', '15M', '{"cn":"分切片的N3接口发送GTP包字节数","en":"UPF.N3OgOct._Ns"}', 'UPF从N3接口发送的GTP包字节数(含GTP头),其中EpRpDynN3Upf_Global要求按S-NSSAI或UE分别进行统计。'); +INSERT INTO "measure_title" VALUES (3811, 'UPF', 'UPFHC05', 'UPF.N3DiscPkt', 'false', 'EpRpDynN3Upf', '15M', '{"cn":"N3接口接收错误GTP包数","en":"UPF.N3DiscPkt"}', 'N3接口因出错丢弃的GTP包个数,其中EpRpDynN3Upf_Global要求按S-NSSAI分别进行统计。'); +INSERT INTO "measure_title" VALUES (3812, 'UPF', 'UPFHC05', 'UPF.N3DiscPkt._Ns', 'true', 'EpRpDynN3Upf', '15M', '{"cn":"分切片的N3接口接收错误GTP包数","en":"UPF.N3DiscPkt._Ns"}', 'N3接口因出错丢弃的GTP包个数,其中EpRpDynN3Upf_Global要求按S-NSSAI分别进行统计。'); +INSERT INTO "measure_title" VALUES (3813, 'UPF', 'UPFHD01', 'UPF.N9aIncPkt', 'false', 'EpRpDynN9Upf', '15M', '{"cn":"N9a接口接收GTP包数","en":"UPF.N9aIncPkt"}', 'UPF从左侧N9a接口接收的GTP包数,其中EpRpDynN9Upf_Global要求按S-NSSAI分别进行统计。'); +INSERT INTO "measure_title" VALUES (3814, 'UPF', 'UPFHD01', 'UPF.N9aIncPkt._Ns', 'true', 'EpRpDynN9Upf', '15M', '{"cn":"分切片的N9a接口接收GTP包数","en":"UPF.N9aIncPkt._Ns"}', 'UPF从左侧N9a接口接收的GTP包数,其中EpRpDynN9Upf_Global要求按S-NSSAI分别进行统计。'); +INSERT INTO "measure_title" VALUES (3815, 'UPF', 'UPFHD02', 'UPF.N9aOgPkt', 'false', 'EpRpDynN9Upf', '15M', '{"cn":"N9a接口发送GTP包数","en":"UPF.N9aOgPkt"}', 'UPF从左侧N9a接口发送出去的GTP包数,其中EpRpDynN9Upf_Global要求按S-NSSAI分别进行统计。'); +INSERT INTO "measure_title" VALUES (3816, 'UPF', 'UPFHD02', 'UPF.N9aOgPkt._Ns', 'true', 'EpRpDynN9Upf', '15M', '{"cn":"分切片的N9a接口发送GTP包数","en":"UPF.N9aOgPkt._Ns"}', 'UPF从左侧N9a接口发送出去的GTP包数,其中EpRpDynN9Upf_Global要求按S-NSSAI分别进行统计。'); +INSERT INTO "measure_title" VALUES (3817, 'UPF', 'UPFHD03', 'UPF.N9aIncOct', 'false', 'EpRpDynN9Upf', '15M', '{"cn":"N9a接口接收GTP包字节数","en":"UPF.N9aIncOct"}', 'UPF从左侧N9a接口接收的GTP包字节数,其中EpRpDynN9Upf_Global要求按S-NSSAI分别进行统计。'); +INSERT INTO "measure_title" VALUES (3818, 'UPF', 'UPFHD03', 'UPF.N9aIncOct._Ns', 'true', 'EpRpDynN9Upf', '15M', '{"cn":"分切片的N9a接口接收GTP包字节数","en":"UPF.N9aIncOct._Ns"}', 'UPF从左侧N9a接口接收的GTP包字节数,其中EpRpDynN9Upf_Global要求按S-NSSAI分别进行统计。'); +INSERT INTO "measure_title" VALUES (3819, 'UPF', 'UPFHD04', 'UPF.N9aOgOct', 'false', 'EpRpDynN9Upf', '15M', '{"cn":"N9a接口发送GTP包字节数","en":"UPF.N9aOgOct"}', 'UPF从左侧N9a接口发送的GTP包字节数,其中EpRpDynN9Upf_Global要求按S-NSSAI分别进行统计。'); +INSERT INTO "measure_title" VALUES (3820, 'UPF', 'UPFHD04', 'UPF.N9aOgOct._Ns', 'true', 'EpRpDynN9Upf', '15M', '{"cn":"分切片的N9a接口发送GTP包字节数","en":"UPF.N9aOgOct._Ns"}', 'UPF从左侧N9a接口发送的GTP包字节数,其中EpRpDynN9Upf_Global要求按S-NSSAI分别进行统计。'); +INSERT INTO "measure_title" VALUES (3821, 'UPF', 'UPFHD05', 'UPF.N9aDiscPkt', 'false', 'EpRpDynN9Upf', '15M', '{"cn":"N9a接口接收错误GTP包数","en":"UPF.N9aDiscPkt"}', 'UPF对左侧N9a接口因出错丢弃的GTP包个数,其中EpRpDynN9Upf_Global要求按S-NSSAI分别进行统计。'); +INSERT INTO "measure_title" VALUES (3822, 'UPF', 'UPFHD05', 'UPF.N9aDiscPkt._Ns', 'true', 'EpRpDynN9Upf', '15M', '{"cn":"分切片的N9a接口接收错误GTP包数","en":"UPF.N9aDiscPkt._Ns"}', 'UPF对左侧N9a接口因出错丢弃的GTP包个数,其中EpRpDynN9Upf_Global要求按S-NSSAI分别进行统计。'); +INSERT INTO "measure_title" VALUES (3823, 'UPF', 'UPFHD06', 'UPF.N9cIncPkt', 'false', 'EpRpDynN9Upf', '15M', '{"cn":"N9c接口接收GTP包数","en":"UPF.N9cIncPkt"}', 'UPF从右侧N9c接口接收的GTP包数,其中EpRpDynN9Upf_Global要求按S-NSSAI分别进行统计。'); +INSERT INTO "measure_title" VALUES (3824, 'UPF', 'UPFHD06', 'UPF.N9cIncPkt._Ns', 'true', 'EpRpDynN9Upf', '15M', '{"cn":"分切片的N9c接口接收GTP包数","en":"UPF.N9cIncPkt._Ns"}', 'UPF从右侧N9c接口接收的GTP包数,其中EpRpDynN9Upf_Global要求按S-NSSAI分别进行统计。'); +INSERT INTO "measure_title" VALUES (3825, 'UPF', 'UPFHD07', 'UPF.N9cOgPkt', 'false', 'EpRpDynN9Upf', '15M', '{"cn":"N9c接口发送GTP包数","en":"UPF.N9cOgPkt"}', 'UPF从右侧N9c接口发送出去的GTP包数,其中EpRpDynN9Upf_Global要求按S-NSSAI分别进行统计。'); +INSERT INTO "measure_title" VALUES (3826, 'UPF', 'UPFHD07', 'UPF.N9cOgPkt._Ns', 'true', 'EpRpDynN9Upf', '15M', '{"cn":"分切片的N9c接口发送GTP包数","en":"UPF.N9cOgPkt._Ns"}', 'UPF从右侧N9c接口发送出去的GTP包数,其中EpRpDynN9Upf_Global要求按S-NSSAI分别进行统计。'); +INSERT INTO "measure_title" VALUES (3827, 'UPF', 'UPFHD08', 'UPF.N9cIncOct', 'false', 'EpRpDynN9Upf', '15M', '{"cn":"N9c接口接收GTP包字节数","en":"UPF.N9cIncOct"}', 'UPF从右侧N9c接口接收的GTP包字节数,其中EpRpDynN9Upf_Global要求按S-NSSAI分别进行统计。'); +INSERT INTO "measure_title" VALUES (3828, 'UPF', 'UPFHD08', 'UPF.N9cIncOct._Ns', 'true', 'EpRpDynN9Upf', '15M', '{"cn":"分切片的N9c接口接收GTP包字节数","en":"UPF.N9cIncOct._Ns"}', 'UPF从右侧N9c接口接收的GTP包字节数,其中EpRpDynN9Upf_Global要求按S-NSSAI分别进行统计。'); +INSERT INTO "measure_title" VALUES (3829, 'UPF', 'UPFHD09', 'UPF.N9cOgOct', 'false', 'EpRpDynN9Upf', '15M', '{"cn":"N9c接口发送GTP包字节数","en":"UPF.N9cOgOct"}', 'UPF从右侧N9c接口发送的GTP包字节数,其中EpRpDynN9Upf_Global要求按S-NSSAI分别进行统计。'); +INSERT INTO "measure_title" VALUES (3830, 'UPF', 'UPFHD09', 'UPF.N9cOgOct._Ns', 'true', 'EpRpDynN9Upf', '15M', '{"cn":"分切片的N9c接口发送GTP包字节数","en":"UPF.N9cOgOct._Ns"}', 'UPF从右侧N9c接口发送的GTP包字节数,其中EpRpDynN9Upf_Global要求按S-NSSAI分别进行统计。'); +INSERT INTO "measure_title" VALUES (3831, 'UPF', 'UPFHD10', 'UPF.N9cDiscPkt', 'false', 'EpRpDynN9Upf', '15M', '{"cn":"N9c接口接收错误GTP包数","en":"UPF.N9cDiscPkt"}', 'UPF对右侧N9c接口因出错丢弃的GTP包个数,其中EpRpDynN9Upf_Global要求按S-NSSAI分别进行统计。'); +INSERT INTO "measure_title" VALUES (3832, 'UPF', 'UPFHD10', 'UPF.N9cDiscPkt._Ns', 'true', 'EpRpDynN9Upf', '15M', '{"cn":"分切片的N9c接口接收错误GTP包数","en":"UPF.N9cDiscPkt._Ns"}', 'UPF对右侧N9c接口因出错丢弃的GTP包个数,其中EpRpDynN9Upf_Global要求按S-NSSAI分别进行统计。'); +INSERT INTO "measure_title" VALUES (3833, 'UPF', 'UPFHE01', 'UPF.N6IncPkt', 'false', 'UpfFunction', '15M', '{"cn":"N6接口接收IP包数","en":"UPF.N6IncPkt"}', '统计UPF在N6接口接收到的IP包个数,并按DNN分别进行统计;'); +INSERT INTO "measure_title" VALUES (3834, 'UPF', 'UPFHE01', 'UPF.N6IncPkt._Dnn', 'true', 'UpfFunction', '15M', '{"cn":"分DNN的N6接口接收IP包数","en":"UPF.N6IncPkt._Dnn"}', '统计UPF在N6接口接收到的IP包个数,并按DNN分别进行统计;'); +INSERT INTO "measure_title" VALUES (3835, 'UPF', 'UPFHE01', 'UPF.N6IncPktIpv6', 'false', 'UpfFunction', '15M', '{"cn":"N6接口接收IPv6包数","en":"UPF.N6IncPktIpv6"}', '统计UPF在N6接口接收到的IPv6包个数,并按DNN分别进行统计;'); +INSERT INTO "measure_title" VALUES (3836, 'UPF', 'UPFHE01', 'UPF.N6IncPktIpv6._Dnn', 'true', 'UpfFunction', '15M', '{"cn":"分DNN的N6接口接收IPv6包数","en":"UPF.N6IncPktIpv6._Dnn"}', '统计UPF在N6接口接收到的IPv6包个数,并按DNN分别进行统计;'); +INSERT INTO "measure_title" VALUES (3837, 'UPF', 'UPFHE02', 'UPF.N6OgPkt', 'false', 'UpfFunction', '15M', '{"cn":"N6接口发送IP包数","en":"UPF.N6OgPkt"}', '统计UPF在N6向发送的IP包个数,并按DNN分别进行统计;'); +INSERT INTO "measure_title" VALUES (3838, 'UPF', 'UPFHE02', 'UPF.N6OgPkt._Dnn', 'true', 'UpfFunction', '15M', '{"cn":"分DNN的N6接口发送IP包数","en":"UPF.N6OgPkt._Dnn"}', '统计UPF在N6向发送的IP包个数,并按DNN分别进行统计;'); +INSERT INTO "measure_title" VALUES (3839, 'UPF', 'UPFHE02', 'UPF.N6OgPktIpv6', 'false', 'UpfFunction', '15M', '{"cn":"N6接口发送IPv6包数","en":"UPF.N6OgPktIpv6"}', '统计UPF在N6向发送的IPv6包个数,并按DNN分别进行统计;'); +INSERT INTO "measure_title" VALUES (3840, 'UPF', 'UPFHE02', 'UPF.N6OgPktIpv6._Dnn', 'true', 'UpfFunction', '15M', '{"cn":"分DNN的N6接口发送IPv6包数","en":"UPF.N6OgPktIpv6._Dnn"}', '统计UPF在N6向发送的IPv6包个数,并按DNN分别进行统计;'); +INSERT INTO "measure_title" VALUES (3841, 'UPF', 'UPFHE03', 'UPF.N6IncOct', 'false', 'UpfFunction', '15M', '{"cn":"N6接口接收字节数","en":"UPF.N6IncOct"}', '统计UPF在N6接收到的IP包PDU字节数,并按DNN分别进行统计;'); +INSERT INTO "measure_title" VALUES (3842, 'UPF', 'UPFHE03', 'UPF.N6IncOct._Dnn', 'true', 'UpfFunction', '15M', '{"cn":"分DNN的N6接口接收字节数","en":"UPF.N6IncOct._Dnn"}', '统计UPF在N6接收到的IP包PDU字节数,并按DNN分别进行统计;'); +INSERT INTO "measure_title" VALUES (3843, 'UPF', 'UPFHE03', 'UPF.N6IncOctIpv6', 'false', 'UpfFunction', '15M', '{"cn":"N6接口接收的IPv6字节数","en":"UPF.N6IncOctIpv6"}', '统计UPF在N6接收到的IPv6包PDU字节数,并按DNN分别进行统计;'); +INSERT INTO "measure_title" VALUES (3844, 'UPF', 'UPFHE03', 'UPF.N6IncOctIpv6._Dnn', 'true', 'UpfFunction', '15M', '{"cn":"分DNN的N6接口接收的IPv6字节数","en":"UPF.N6IncOctIpv6._Dnn"}', '统计UPF在N6接收到的IPv6包PDU字节数,并按DNN分别进行统计;'); +INSERT INTO "measure_title" VALUES (3845, 'UPF', 'UPFHE04', 'UPF.N6OgOct', 'false', 'UpfFunction', '15M', '{"cn":"N6接口发送字节数","en":"UPF.N6OgOct"}', '统计UPF在N6发送的IP包PDU字节数,并按DNN分别进行统计;'); +INSERT INTO "measure_title" VALUES (3846, 'UPF', 'UPFHE04', 'UPF.N6OgOct._Dnn', 'true', 'UpfFunction', '15M', '{"cn":"分DNN的N6接口发送字节数","en":"UPF.N6OgOct._Dnn"}', '统计UPF在N6发送的IP包PDU字节数,并按DNN分别进行统计;'); +INSERT INTO "measure_title" VALUES (3847, 'UPF', 'UPFHE04', 'UPF.N6OgOctIpv6', 'false', 'UpfFunction', '15M', '{"cn":"N6接口发送的IPv6字节数","en":"UPF.N6OgOctIpv6"}', '统计UPF在N6发送的IPv6包PDU字节数,并按DNN分别进行统计;'); +INSERT INTO "measure_title" VALUES (3848, 'UPF', 'UPFHE04', 'UPF.N6OgOctIpv6._Dnn', 'true', 'UpfFunction', '15M', '{"cn":"分DNN的N6接口发送的IPv6字节数","en":"UPF.N6OgOctIpv6._Dnn"}', '统计UPF在N6发送的IPv6包PDU字节数,并按DNN分别进行统计;'); +INSERT INTO "measure_title" VALUES (3849, 'UPF', 'UPFHE05', 'UPF.N6DiscPkt', 'false', 'UpfFunction', '15M', '{"cn":"N6接口出错丢弃的IP包数","en":"UPF.N6DiscPkt"}', '统计N6口出错丢弃的IP包个数,并按DNN分别进行统计;'); +INSERT INTO "measure_title" VALUES (3850, 'UPF', 'UPFHE05', 'UPF.N6DiscPkt._Dnn', 'true', 'UpfFunction', '15M', '{"cn":"分DNN的N6接口出错丢弃的IP包数","en":"UPF.N6DiscPkt._Dnn"}', '统计N6口出错丢弃的IP包个数,并按DNN分别进行统计;'); +INSERT INTO "measure_title" VALUES (3851, 'UPF', 'UPFHE05', 'UPF.N6DiscPktIpv6', 'false', 'UpfFunction', '15M', '{"cn":"N6接口出错丢弃的IPv6包数","en":"UPF.N6DiscPktIpv6"}', '统计N6口出错丢弃的IPv6包个数,并按DNN分别进行统计;'); +INSERT INTO "measure_title" VALUES (3852, 'UPF', 'UPFHE05', 'UPF.N6DiscPktIpv6._Dnn', 'true', 'UpfFunction', '15M', '{"cn":"分DNN的N6接口出错丢弃的IPv6包数","en":"UPF.N6DiscPktIpv6._Dnn"}', '统计N6口出错丢弃的IPv6包个数,并按DNN分别进行统计;'); +INSERT INTO "measure_title" VALUES (3853, 'UPF', 'UPFHF01', 'ME.MeanMeLoad', 'false', 'ManagedElement', '15M', '{"cn":"系统平均负荷","en":"ME.MeanMeLoad"}', '对物理网元:指测量周期中,网元的硬件资源负荷的抽样平均值。网元的硬件资源负荷可取对网元影响最大的模块的负荷,或取不同模块的负荷的加权平均值,不同厂商设备的计算方法各不相同。 +对虚拟网元:指测量周期中,网元的虚拟机资源负荷的抽样平均值。网元的虚拟机资源负荷可取对网元影响最大的模块的负荷,或取不同模块的负荷的加权平均值,不同厂商设备的计算方法各不相同。'); +INSERT INTO "measure_title" VALUES (3854, 'UPF', 'UPFHG01', 'UPF.MeanRtDelay._Ns', 'true', 'UpfFunction', '15M', '{"cn":"分切片的平均往返时延","en":"UPF.MeanRtDelay._Ns"}', '基于切片对一个测量周期内所有归属该切片的采样用户获得的时延取平均后得到的往返时延'); +INSERT INTO "measure_title" VALUES (3855, 'UPF', 'UPFHG02', 'UPF.MeanUlDelay._Ns', 'true', 'UpfFunction', '15M', '{"cn":"分切片的平均上行时延","en":"UPF.MeanUlDelay._Ns"}', '基于切片对一个测量周期内所有归属该切片的采样用户获得的时延取平均后得到的上行时延'); +INSERT INTO "measure_title" VALUES (3856, 'UPF', 'UPFHG03', 'UPF.MeanDlDelay._Ns', 'true', 'UpfFunction', '15M', '{"cn":"分切片的平均下行时延","en":"UPF.MeanDlDelay._Ns"}', '基于切片对一个测量周期内所有归属该切片的采样用户获得的时延取平均后得到的下行时延'); +INSERT INTO "measure_title" VALUES (3857, 'UPF', 'UPFHG04', 'UPF.MaxRtDelay._Ns', 'true', 'UpfFunction', '15M', '{"cn":"分切片的最大往返时延","en":"UPF.MaxRtDelay._Ns"}', '基于切片对一个测量周期内所有归属该切片的采样用户获得的时延取平均后得到的最大往返时延'); +INSERT INTO "measure_title" VALUES (3858, 'UPF', 'UPFHG05', 'UPF.MaxUlDelay._Ns', 'true', 'UpfFunction', '15M', '{"cn":"分切片的最大上行时延","en":"UPF.MaxUlDelay._Ns"}', '基于切片对一个测量周期内所有归属该切片的采样用户获得的时延取平均后得到的最大上行时延'); +INSERT INTO "measure_title" VALUES (3859, 'UPF', 'UPFHG06', 'UPF.MaxDlDelay._Ns', 'true', 'UpfFunction', '15M', '{"cn":"分切片的最大下行时延","en":"UPF.MaxDlDelay._Ns"}', '基于切片对一个测量周期内所有归属该切片的采样用户获得的时延取平均后得到的最大下行时延'); +INSERT INTO "measure_title" VALUES (3860, 'UPF', 'UPFHH01', 'UPF.5GLanMaxPduSession', 'false', 'UpfFunction', '15M', '{"cn":"最大的5GLANGroup会话数","en":"UPF.5GLanMaxPduSession"}', '一个统计周期内UPF+中的最大5G LAN GROUP会话数目'); +INSERT INTO "measure_title" VALUES (3861, 'UPF', 'UPFHH01', 'UPF.5GLanMaxPduSession._5GLanGroup', 'true', 'UpfFunction', '15M', '{"cn":"指定5GLANGroup的最大的5GLANGroup会话数","en":"UPF.5GLanMaxPduSession._5GLanGroup"}', '一个统计周期内UPF+中指定5G LAN Group的最大5G LAN GROUP会话数目'); +INSERT INTO "measure_title" VALUES (3862, 'UPF', 'UPFHH02', 'UPF.5GLanUeTransPkt', 'false', 'UpfFunction', '15M', '{"cn":"5GLANGroupUE互访报文包数","en":"UPF.5GLanUeTransPkt"}', '一个统计周期内UPF+中的5G LAN GROUP UE转发给其他UE的报文报数'); +INSERT INTO "measure_title" VALUES (3863, 'UPF', 'UPFHH02', 'UPF.5GLanUeTransPkt._5GLanGroup', 'true', 'UpfFunction', '15M', '{"cn":"指定5GLANGroup的UE互访报文包数","en":"UPF.5GLanUeTransPkt._5GLanGroup"}', '一个统计周期内UPF+中指定5G LAN Group的UE转发给其他UE的报文报数'); +INSERT INTO "measure_title" VALUES (3864, 'UPF', 'UPFHH03', 'UPF.5GLanUeTransOct', 'false', 'UpfFunction', '15M', '{"cn":"5GLANGroupUE互访报文字节数","en":"UPF.5GLanUeTransOct"}', '一个统计周期内UPF+中的5G LAN GROUP UE转发给其他UE的报文字节数'); +INSERT INTO "measure_title" VALUES (3865, 'UPF', 'UPFHH03', 'UPF.5GLanUeTransOct._5GLanGroup', 'true', 'UpfFunction', '15M', '{"cn":"指定5GLANGroup的UE互访报文字节数","en":"UPF.5GLanUeTransOct._5GLanGroup"}', '一个统计周期内UPF+中指定5G LAN Group的UE转发给其他UE的报文字节数'); +INSERT INTO "measure_title" VALUES (3866, 'UPF', 'UPFHI01', 'AMF.RegSub', 'false', 'AmfFunction', '15M', '{"cn":"AMF注册态用户数","en":"AMF.RegSub"}', '当前所有注册在AMF上的用户'); +INSERT INTO "measure_title" VALUES (3867, 'UPF', 'UPFHI01', 'AMF.RegSub._Ns', 'true', 'AmfFunction', '15M', '{"cn":"分切片的AMF注册用户数","en":"AMF.RegSub._Ns"}', 'AMF支持的允许UE使用的S-NSSAI统计每个网络切片在AMF上的用户数。以AMF下发给UE的allowed S-NSSAI中AMF支持的S-NSSAI的个数为准。'); +INSERT INTO "measure_title" VALUES (3868, 'UPF', 'UPFHI02', 'AMF.PagAtt', 'false', 'AmfFunction', '15M', '{"cn":"寻呼请求次数","en":"AMF.PagAtt"}', 'AMF的寻呼请求次数。'); +INSERT INTO "measure_title" VALUES (3869, 'UPF', 'UPFHI03', 'AMF.FirstPagingSucc', 'false', 'AmfFunction', '15M', '{"cn":"寻呼响应次数","en":"AMF.FirstPagingSucc"}', '寻呼成功次数。'); +INSERT INTO "measure_title" VALUES (3870, 'UPF', 'UPFHI04', 'AMF.GnbNum', 'false', 'AmfFunction', '15M', '{"cn":"AMF挂接5G基站数","en":"AMF.GnbNum"}', '统计周期结束点时刻,挂接在AMF下的5G基站数量'); +INSERT INTO "measure_title" VALUES (3871, 'UPF', 'UPFHI05', 'AMF.AttInitReg', 'false', 'AmfFunction', '15M', '{"cn":"初始注册请求次数","en":"AMF.AttInitReg"}', '初始注册请求次数,并分TA进行统计。'); +INSERT INTO "measure_title" VALUES (3872, 'UPF', 'UPFHI06', 'AMF.AttInitReg._Ta', 'true', 'AmfFunction', '15M', '{"cn":"分跟踪区的初始注册请求次数","en":"AMF.AttInitReg._Ta"}', '初始注册请求次数,并分TA进行统计。'); +INSERT INTO "measure_title" VALUES (3873, 'UPF', 'UPFHI07', 'AMF.SuccInitReg', 'false', 'AmfFunction', '15M', '{"cn":"初始注册成功次数","en":"AMF.SuccInitReg"}', '初始注册完成次数,并分TA进行统计。'); +INSERT INTO "measure_title" VALUES (3874, 'UPF', 'UPFHI08', 'AMF.SuccInitReg._Ta', 'true', 'AmfFunction', '15M', '{"cn":"分跟踪区的初始注册成功次数","en":"AMF.SuccInitReg._Ta"}', '初始注册完成次数,并分TA进行统计。'); +INSERT INTO "measure_title" VALUES (3875, 'UPF', 'UPFHI09', 'AMF.FailedInitReg', 'false', 'AmfFunction', '15M', '{"cn":"初始注册失败次数","en":"AMF.FailedInitReg"}', '初始注册失败次数,分原因进行分类统计; +其中,原因值3、5、6、7.User、15.User、27、9.User、11、12、13、62、111.User视为用户原因。'); +INSERT INTO "measure_title" VALUES (3876, 'UPF', 'UPFHI10', 'AMF.FailedInitReg._Cause', 'true', 'AmfFunction', '15M', '{"cn":"分原因值的初始注册失败次数","en":"AMF.FailedInitReg._Cause"}', '初始注册失败次数,分原因进行分类统计; +其中,原因值3、5、6、7.User、15.User、27、9.User、11、12、13、62、111.User视为用户原因。'); +INSERT INTO "measure_title" VALUES (3877, 'UPF', 'UPFHI11', 'AMF.FailedInitReg.3', 'false', 'AmfFunction', '15M', '{"cn":"初始注册失败次数_非法用户","en":"AMF.FailedInitReg.3"}', '初始注册失败次数,分原因进行分类统计; +其中,原因值3、5、6、7.User、15.User、27、9.User、11、12、13、62、111.User视为用户原因。'); +INSERT INTO "measure_title" VALUES (3878, 'UPF', 'UPFHI12', 'AMF.FailedInitReg.5', 'false', 'AmfFunction', '15M', '{"cn":"初始注册失败次数_PEI不允许","en":"AMF.FailedInitReg.5"}', '初始注册失败次数,分原因进行分类统计; +其中,原因值3、5、6、7.User、15.User、27、9.User、11、12、13、62、111.User视为用户原因。'); +INSERT INTO "measure_title" VALUES (3879, 'UPF', 'UPFHI13', 'AMF.FailedInitReg.6', 'false', 'AmfFunction', '15M', '{"cn":"初始注册失败次数_非法设备","en":"AMF.FailedInitReg.6"}', '初始注册失败次数,分原因进行分类统计; +其中,原因值3、5、6、7.User、15.User、27、9.User、11、12、13、62、111.User视为用户原因。'); +INSERT INTO "measure_title" VALUES (3880, 'UPF', 'UPFHI14', 'AMF.FailedInitReg.7', 'false', 'AmfFunction', '15M', '{"cn":"初始注册失败次数_5GS服务不允许","en":"AMF.FailedInitReg.7"}', '初始注册失败次数,分原因进行分类统计; +其中,原因值3、5、6、7.User、15.User、27、9.User、11、12、13、62、111.User视为用户原因。'); +INSERT INTO "measure_title" VALUES (3881, 'UPF', 'UPFHI15', 'AMF.FailedInitReg.7.User', 'false', 'AmfFunction', '15M', '{"cn":"初始注册失败次数_5GS服务不允许_用户原因","en":"AMF.FailedInitReg.7.User"}', '初始注册失败次数,分原因进行分类统计; +其中,原因值3、5、6、7.User、15.User、27、9.User、11、12、13、62、111.User视为用户原因。'); +INSERT INTO "measure_title" VALUES (3882, 'UPF', 'UPFHI16', 'AMF.FailedInitReg.15', 'false', 'AmfFunction', '15M', '{"cn":"初始注册失败次数_跟踪区内无合适小区","en":"AMF.FailedInitReg.15"}', '初始注册失败次数,分原因进行分类统计; +其中,原因值3、5、6、7.User、15.User、27、9.User、11、12、13、62、111.User视为用户原因。'); +INSERT INTO "measure_title" VALUES (3883, 'UPF', 'UPFHI17', 'AMF.FailedInitReg.15.User', 'false', 'AmfFunction', '15M', '{"cn":"初始注册失败次数_跟踪区内无合适小区_用户原因","en":"AMF.FailedInitReg.15.User"}', '初始注册失败次数,分原因进行分类统计; +其中,原因值3、5、6、7.User、15.User、27、9.User、11、12、13、62、111.User视为用户原因。'); +INSERT INTO "measure_title" VALUES (3884, 'UPF', 'UPFHI18', 'AMF.FailedInitReg.12', 'false', 'AmfFunction', '15M', '{"cn":"初始注册失败次数_跟踪区不允许","en":"AMF.FailedInitReg.12"}', '初始注册失败次数,分原因进行分类统计; +其中,原因值3、5、6、7.User、15.User、27、9.User、11、12、13、62、111.User视为用户原因。'); +INSERT INTO "measure_title" VALUES (3885, 'UPF', 'UPFHI19', 'AMF.FailedInitReg.13', 'false', 'AmfFunction', '15M', '{"cn":"初始注册失败次数_漫游跟踪区禁止接入","en":"AMF.FailedInitReg.13"}', '初始注册失败次数,分原因进行分类统计; +其中,原因值3、5、6、7.User、15.User、27、9.User、11、12、13、62、111.User视为用户原因。'); +INSERT INTO "measure_title" VALUES (3886, 'UPF', 'UPFHI20', 'AMF.FailedInitReg.27', 'false', 'AmfFunction', '15M', '{"cn":"初始注册失败次数_N1模式不允许","en":"AMF.FailedInitReg.27"}', '初始注册失败次数,分原因进行分类统计; +其中,原因值3、5、6、7.User、15.User、27、9.User、11、12、13、62、111.User视为用户原因。'); +INSERT INTO "measure_title" VALUES (3887, 'UPF', 'UPFHI21', 'AMF.FailedInitReg.62', 'false', 'AmfFunction', '15M', '{"cn":"初始注册失败次数_无可用网络切片","en":"AMF.FailedInitReg.62"}', '初始注册失败次数,分原因进行分类统计; +其中,原因值3、5、6、7.User、15.User、27、9.User、11、12、13、62、111.User视为用户原因。'); +INSERT INTO "measure_title" VALUES (3888, 'UPF', 'UPFHI22', 'AMF.FailedInitReg.11', 'false', 'AmfFunction', '15M', '{"cn":"初始注册失败次数_PLMN不允许","en":"AMF.FailedInitReg.11"}', '初始注册失败次数,分原因进行分类统计; +其中,原因值3、5、6、7.User、15.User、27、9.User、11、12、13、62、111.User视为用户原因。'); +INSERT INTO "measure_title" VALUES (3889, 'UPF', 'UPFHI23', 'AMF.FailedInitReg.111', 'false', 'AmfFunction', '15M', '{"cn":"初始注册失败次数_协议错误","en":"AMF.FailedInitReg.111"}', '初始注册失败次数,分原因进行分类统计; +其中,原因值3、5、6、7.User、15.User、27、9.User、11、12、13、62、111.User视为用户原因。'); +INSERT INTO "measure_title" VALUES (3890, 'UPF', 'UPFHI24', 'AMF.FailedInitReg.111.User', 'false', 'AmfFunction', '15M', '{"cn":"初始注册失败次数_协议错误_用户原因","en":"AMF.FailedInitReg.111.User"}', '初始注册失败次数,分原因进行分类统计; +其中,原因值3、5、6、7.User、15.User、27、9.User、11、12、13、62、111.User视为用户原因。'); +INSERT INTO "measure_title" VALUES (3891, 'UPF', 'UPFHJ01', 'SMF.AttCreatePduSession', 'false', 'SmfFunction', '15M', '{"cn":"PDU会话建立请求次数","en":"SMF.AttCreatePduSession"}', 'UE发起的PDU会话建立请求次数。'); +INSERT INTO "measure_title" VALUES (3892, 'UPF', 'UPFHJ02', 'SMF.SuccCreatePduSession', 'false', 'SmfFunction', '15M', '{"cn":"PDU会话建立成功次数","en":"SMF.SuccCreatePduSession"}', 'UE发起的PDU会话建立成功次数。'); +INSERT INTO "measure_title" VALUES (3893, 'UPF', 'UPFHJ03', 'SMF.MeanPduSession', 'false', 'SmfFunction', '15M', '{"cn":"平均PDU会话数","en":"SMF.MeanPduSession"}', '一个统计周期内SMF中的平均PDU会话数。'); +INSERT INTO "measure_title" VALUES (3894, 'UPF', 'UPFHJ03', 'SMF.MeanPduSession._Ns', 'true', 'SmfFunction', '15M', '{"cn":"分切片的平均PDU会话数","en":"SMF.MeanPduSession._Ns"}', '一个统计周期内按照S-NSSAI统计SMF中的平均PDU会话数。'); +INSERT INTO "measure_title" VALUES (3895, 'UPF', 'UPFHJ04', 'SMF.MaxPduSession', 'false', 'SmfFunction', '15M', '{"cn":"最大PDU会话数","en":"SMF.MaxPduSession"}', '一个统计周期内SMF中的最大PDU会话数。'); +INSERT INTO "measure_title" VALUES (3896, 'UPF', 'UPFHJ04', 'SMF.MaxPduSession._Ns', 'true', 'SmfFunction', '15M', '{"cn":"分切片的最大PDU会话数","en":"SMF.MaxPduSession._Ns"}', '一个统计周期内按照S-NSSAI统计SMF中的最大PDU会话数。'); +INSERT INTO "measure_title" VALUES (3897, 'UPF', 'UPFHJ05', 'SMF.MeanQf', 'false', 'SmfFunction', '15M', '{"cn":"平均Qos流数","en":"SMF.MeanQf"}', '一个统计周期内SMF中的平均Qos流数。'); +INSERT INTO "measure_title" VALUES (3898, 'UPF', 'UPFHJ05', 'SMF.MeanQf._Ns', 'true', 'SmfFunction', '15M', '{"cn":"分切片的平均Qos流数","en":"SMF.MeanQf._Ns"}', '一个统计周期内按照S-NSSAI统计SMF中的平均QoS流数。'); +INSERT INTO "measure_title" VALUES (3899, 'UPF', 'UPFHJ06', 'SMF.MaxQf', 'false', 'SmfFunction', '15M', '{"cn":"最大Qos流数","en":"SMF.MaxQf"}', '一个统计周期内SMF中的最大Qos流数。'); +INSERT INTO "measure_title" VALUES (3900, 'UPF', 'UPFHJ06', 'SMF.MaxQf._Ns', 'true', 'SmfFunction', '15M', '{"cn":"分切片的最大Qos流数","en":"SMF.MaxQf._Ns"}', '一个统计周期内按照S-NSSAI统计SMF中的最大QoS流数。'); +INSERT INTO "measure_title" VALUES (3901, 'UPF', 'UPFHJ07', 'SMF.AttCreatePduSession._Ns', 'true', 'SmfFunction', '15M', '{"cn":"分切片的PDU会话建立请求次数","en":"SMF.AttCreatePduSession._Ns"}', '按照S-NSSAI统计UE发起的PDU会话建立请求次数。'); +INSERT INTO "measure_title" VALUES (3902, 'UPF', 'UPFHJ07', 'SMF.SuccCreatePduSession._Ns', 'true', 'SmfFunction', '15M', '{"cn":"分切片的PDU会话建立成功次数","en":"SMF.SuccCreatePduSession._Ns"}', '按照S-NSSAI统计UE发起的PDU会话建立成功次数。'); +INSERT INTO "measure_title" VALUES (3903, 'UPF', 'UPFHK01', 'UDR.5gActSub', 'false', 'UdrFunction', '15M', '{"cn":"5G活动用户数","en":"UDR.5gActSub"}', '统计UDR存储的有5G位置信息的MSISDN用户数最新值'); +INSERT INTO "measure_title" VALUES (3904, 'UPF', 'UPFHK02', 'UDR.FileSyncReq', 'false', 'UdrFunction', '15M', '{"cn":"文件同步请求次数","en":"UDR.FileSyncReq"}', '应急UDR和核心侧UDR文件同步请求次数'); +INSERT INTO "measure_title" VALUES (3905, 'UPF', 'UPFHK03', 'UDR.FileSyncReqSucc', 'false', 'UdrFunction', '15M', '{"cn":"文件同步成功次数","en":"UDR.FileSyncReqSucc"}', '应急UDR和核心侧UDR文件同步请求成功次数'); +INSERT INTO "measure_title" VALUES (3906, 'UPF', 'UPFHK04', 'UDR.InstruSyncReq', 'false', 'UdrFunction', '15M', '{"cn":"指令同步请求次数","en":"UDR.InstruSyncReq"}', '应急UDR和核心侧UDR指令同步请求次数'); +INSERT INTO "measure_title" VALUES (3907, 'UPF', 'UPFHK05', 'UDR.InstruSyncReqSucc', 'false', 'UdrFunction', '15M', '{"cn":"指令同步成功次数","en":"UDR.InstruSyncReqSucc"}', '应急UDR和核心侧UDR指令同步请求成功次数'); +INSERT INTO "measure_title" VALUES (3908, 'UPF', 'UPFHK06', 'UDR.SynSub', 'false', 'UdrFunction', '15M', '{"cn":"应急UDR同步的用户总数","en":"UDR.SynSub"}', '统计应急UDR从核心侧UDR同步的用户数'); +INSERT INTO "measure_title" VALUES (3909, 'UPF', 'UPFHK07', 'UDR.SynSubSucc', 'false', 'UdrFunction', '15M', '{"cn":"应急UDR同步成功的用户数","en":"UDR.SynSubSucc"}', '统计应急UDR从核心侧UDR同步成功的用户数'); +INSERT INTO "measure_title" VALUES (3910, 'UPF', 'UPFHL01', 'Ausf.UeAuthReq', 'false', 'AusfFunction', '15M', '{"cn":"鉴权请求次数","en":"Ausf.UeAuthReq"}', 'AUSF收到的鉴权请求次数'); +INSERT INTO "measure_title" VALUES (3911, 'UPF', 'UPFHL02', 'Ausf.UeAuthAnsSucc', 'false', 'AusfFunction', '15M', '{"cn":"鉴权成功次数","en":"Ausf.UeAuthAnsSucc"}', 'AUSF返回鉴权成功响应次数'); diff --git a/build/database/lite/common/mml_command.sql b/build/database/lite/common/mml_command.sql new file mode 100644 index 00000000..0a21cf1e --- /dev/null +++ b/build/database/lite/common/mml_command.sql @@ -0,0 +1,61 @@ +-- ---------------------------- +-- Table structure for mml_command +-- ---------------------------- +DROP TABLE IF EXISTS "mml_command"; +CREATE TABLE "mml_command" ( + "id" integer NOT NULL, + "ne_type" text(16), + "category" text(32), + "cat_display" text(64), + "operation" text(10), + "object" text(16), + "mml_display" text(64), + "param_json" text, + "status" text(255), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table mml_command +-- ---------------------------- +CREATE INDEX "id" +ON "mml_command" ( + "id" ASC +); + +-- ---------------------------- +-- Records of mml_command +-- ---------------------------- +INSERT INTO "mml_command" VALUES (1593, 'OMC', 'neManagement', 'Network Element Management', 'lst', 'neinfo', 'List NE Information', '[{"alias":"ne_type","apostr":"true","comment":"","display":"NE type","filter":"","name":"netype","optional":"true","type":"string"},{"alias":"ne_id","apostr":"true","comment":"","display":"NE ID","filter":"","name":"neid","optional":"true","type":"string"},{"alias":"rm_uid","apostr":"true","comment":"","display":"Resource management UID","filter":"","name":"rmuid","optional":"true","type":"string"}]', 'Active'); +INSERT INTO "mml_command" VALUES (1594, 'OMC', 'neManagement', 'Network Element Management', 'lst', 'memap', 'List Managed Element Map', '[{"alias":"rm_uid","apostr":"true","comment":"","display":"Resource management UID","filter":"","name":"rmuid","optional":"true","type":"string"}]', 'Active'); +INSERT INTO "mml_command" VALUES (1595, 'OMC', 'neManagement', 'Network Element Management', 'add', 'neinfo', 'Add Network Element', '[{"alias":"ne_type","apostr":"false","comment":"","display":"NE type","filter":"","loc":"false","name":"netype","optional":"false","type":"string"},{"alias":"ne_id","apostr":"false","comment":"","display":"NE ID","filter":"","loc":"false","name":"neid","optional":"false","type":"string"},{"alias":"rm_uid","apostr":"false","comment":"","display":"Resource management UID","filter":"","loc":"false","name":"rmuid","optional":"false","type":"string"},{"alias":"ip","apostr":"false","comment":"","display":"IP address","filter":"","loc":"false","name":"ip","optional":"false","type":"string"},{"alias":"port","apostr":"false","comment":"","display":"Port","filter":"","loc":"false","name":"port","optional":"false","type":"string"},{"alias":"ne_name","apostr":"false","comment":"","display":"NE name","filter":"","loc":"false","name":"nename","optional":"false","type":"string"},{"alias":"pv_flag","apostr":"false","comment":"","display":"PV flag","filter":"","loc":"false","name":"pvflag","optional":"false","type":"string"}]', 'Active'); +INSERT INTO "mml_command" VALUES (1596, 'OMC', 'neManagement', 'Network Element Management', 'mod', 'neinfo', 'Modify Network Element', '[{"alias":"ne_type","apostr":"true","comment":"","display":"NE type","filter":"","loc":"true","name":"netype","optional":"false","type":"string"},{"alias":"ne_id","apostr":"true","comment":"","display":"NE ID","filter":"","loc":"true","name":"neid","optional":"false","type":"string"},{"alias":"rm_uid","apostr":"false","comment":"","display":"Resource management UID","filter":"","loc":"false","name":"rmuid","optional":"true","type":"string"},{"alias":"ip","apostr":"false","comment":"","display":"IP address","filter":"","loc":"false","name":"ip","optional":"true","type":"string"},{"alias":"port","apostr":"false","comment":"","display":"Port","filter":"","loc":"false","name":"port","optional":"true","type":"string"},{"alias":"ne_name","apostr":"false","comment":"","display":"NE name","filter":"","loc":"false","name":"nename","optional":"true","type":"string"},{"alias":"pv_flag","apostr":"false","comment":"","display":"PV flag","filter":"","loc":"false","name":"pvflag","optional":"true","type":"string"}]', 'Active'); +INSERT INTO "mml_command" VALUES (1597, 'OMC', 'neManagement', 'Network Element Management', 'del', 'neinfo', 'Delete Network Element', '[{"alias":"ne_type","apostr":"true","comment":"","display":"NE type","filter":"","name":"netype","optional":"false","type":"string"},{"alias":"ne_id","apostr":"true","comment":"","display":"NE ID","filter":"","name":"neid","optional":"false","type":"string"}]', 'Active'); +INSERT INTO "mml_command" VALUES (1598, 'OMC', 'neConfigManagement', 'NE Config Parameter Management', 'dsp', 'neconfig', 'Display NE Config Parameter', '[{"alias":"ne_type","apostr":"true","comment":"","display":"NE Type","filter":"","loc":"true","name":"netype","optional":"true","type":"string"},{"alias":"param_display","apostr":"true","comment":"","display":"Parameters Display","filter":"","loc":"true","name":"paramDisplay","optional":"true","type":"string"}]', 'Active'); +INSERT INTO "mml_command" VALUES (1599, 'OMC', 'faultManagement', 'Fault Management', 'dsp', 'alarm', 'Display Alarm Information', '[{"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 UID","filter":"","loc":"true","name":"neid","optional":"true","type":"string"},{"alias":"ne_name","apostr":"true","comment":"","display":"NE name","filter":"","name":"nename","optional":"true","type":"string"},{"alias":"alarm_code","apostr":"true","comment":"","display":"Alarm code","filter":"","name":"alarmcode","optional":"true","type":"int"},{"alias":"orig_severity","apostr":"true","comment":"","display":"Original severity","filter":"{\"Critical\":\"Critical\",\"Major\":\"Major\",\"Minor\":\"Minor\",\"Warning\":\"Warning\",\"Event\":\"Event\"}","name":"origseverity","optional":"true","type":"enum"},{"alias":"pv_flag","apostr":"true","comment":"","display":"PV flag","filter":"","name":"pvflag","optional":"true","type":"string"},{"alias":"event_time\u003e","apostr":"true","comment":"","display":"Alarm event start time","filter":"","name":"starttime","optional":"true","type":"string"},{"alias":"event_time\u003c","apostr":"true","comment":"","display":"Alarm event end time","filter":"","name":"endtime","optional":"true","type":"string"},{"alias":"alarm_type","apostr":"true","comment":"","display":"Alarm type","filter":"{\"CommunicationAlarm\":\"CommunicationAlarm\",\"EquipmentAlarm\":\"EquipmentAlarm\",\"ProcessingFailure\":\"ProcessingFailure\",\"EnvironmentalAlarm\":\"EnvironmentalAlarm\",\"QualityOfServiceAlarm\":\"QualityOfServiceAlarm\"}","name":"alarmtype","optional":"true","type":"enum"},{"alias":"alarm_status","apostr":"true","comment":"","display":"Alarm status","filter":"","name":"alarmstatus","optional":"true","type":"int"}]', 'Active'); +INSERT INTO "mml_command" VALUES (1600, 'OMC', 'systemCommand', 'Linux System Command', 'run', 'shell', 'Run Shell Command', '[{"alias":"cmd","apostr":"true","comment":"","display":"Shell command","filter":"","loc":"false","name":"cmd","optional":"false","type":"string"}]', 'Inactive'); +INSERT INTO "mml_command" VALUES (1601, 'OMC', 'licenseManagement', 'License Management', 'dsp', 'licenseinfo', 'Display NE License 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"}]', 'Inactive'); +INSERT INTO "mml_command" VALUES (1602, 'OMC', 'licenseManagement', 'License Management', 'lst', 'license', 'List NE License Information', '[{"alias":"ne_type","apostr":"true","comment":"","display":"NE type","filter":"","name":"netype","optional":"true","type":"string"},{"alias":"ne_id","apostr":"true","comment":"","display":"NE ID","filter":"","name":"neid","optional":"true","type":"string"}]', 'Inactive'); +INSERT INTO "mml_command" VALUES (1603, 'OMC', 'licenseManagement', 'License Management', 'dep', 'license', 'Deployment NE License', '[{"alias":"ne_type","apostr":"true","comment":"","display":"Source NE type","filter":"","name":"srcnetype","optional":"false","type":"string"},{"alias":"ne_id","comment":"","display":"Source NE ID","filter":"","name":"srcneid","optional":"false","type":"string"},{"alias":"ne_type","apostr":"false","comment":"","display":"Destination NE type","filter":"","name":"dstnetype","optional":"false","type":"string"},{"alias":"ne_id","comment":"","display":"Destination NE ID","filter":"","name":"dstneid","optional":"false","type":"string"},{"alias":"dep_number","comment":"","display":"Deployment number","filter":"","name":"number","optional":"false","type":"int"}]', 'Inactive'); +INSERT INTO "mml_command" VALUES (1604, 'OMC', 'licenseManagement', 'License Management', 'rel', 'license', 'Batch Release NE License', '[{"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":"capcity","apostr":"false","comment":"","display":"Release number","filter":"","loc":"false","name":"capcity","optional":"false","type":"int"}]', 'Inactive'); +INSERT INTO "mml_command" VALUES (1605, 'OMC', 'licenseManagement', 'License Management', 'ins', 'license', 'Install NE License', '[{"alias":"ne_type","apostr":"true","comment":"","display":"NE type","filter":"","loc":"true","name":"netype","optional":"false","type":"string"},{"alias":"ne_id","apostr":"true","comment":"","display":"NE ID","filter":"","loc":"true","name":"neid","optional":"false","type":"string"},{"alias":"capcity","comment":"","display":"Install number","filter":"","loc":"false","name":"capcity","optional":"false","type":"int"}]', 'Inactive'); +INSERT INTO "mml_command" VALUES (1606, 'OMC', 'licenseManagement', 'License Management', 'adj', 'license', 'Adjustment NE License', '[{"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":"number","comment":"","display":"Adjustment number","filter":"","loc":"false","name":"number","optional":"false","type":"int"}]', 'Inactive'); +INSERT INTO "mml_command" VALUES (1607, 'OMC', 'licenseManagement', 'License Management', 'exp', 'license', 'Export NE License', '[{"alias":"ne_type","apostr":"true","comment":"","display":"NE type","filter":"","name":"netype","optional":"true","type":"string"},{"alias":"ne_id","apostr":"true","comment":"","display":"NE ID","filter":"","name":"neid","optional":"true","type":"string"}]', 'Inactive'); +INSERT INTO "mml_command" VALUES (1608, 'OMC', 'licenseManagement', 'License Management', 'uni', 'license', 'Uninstall NE License', '[{"alias":"ne_type","apostr":"true","comment":"","display":"NE type","filter":"","name":"netype","optional":"false","type":"string"},{"alias":"ne_id","apostr":"true","comment":"","display":"NE ID","filter":"","name":"neid","optional":"false","type":"string"}]', 'Inactive'); +INSERT INTO "mml_command" VALUES (1609, 'OMC', 'licenseManagement', 'License Management', 'dsp', 'nelink', 'Display NE Interface Link Status', '[{"alias":"ne_type","apostr":"false","comment":"","display":"NE type","filter":"","name":"netype","optional":"true","type":"string"},{"alias":"ne_id","comment":"","display":"NE ID","filter":"","name":"neid","optional":"true","type":"string"},{"alias":"interface","comment":"","display":"Interface","filter":"","name":"interface","optional":"true","type":"string"}]', 'Inactive'); +INSERT INTO "mml_command" VALUES (1610, 'OMC', 'nrmManagement', 'NBI Resources Management', 'dsp', 'nbicm', 'Display NBI Resources Management', '[{"alias":"ne_type","apostr":"true","comment":"","display":"NE type","filter":"","name":"netype","optional":"true","type":"string"},{"alias":"ne_id","apostr":"true","comment":"","display":"NE ID","filter":"","name":"neid","optional":"true","type":"string"},{"alias":"rm_uid","apostr":"true","comment":"","display":"Resource management UID","filter":"","name":"rmuid","optional":"true","type":"string"}]', 'Inactive'); +INSERT INTO "mml_command" VALUES (1611, 'OMC', 'neVersionManagement', 'NE Version Management', 'upg', 'neversion', 'Upgrade NE Software Version', '[{"alias":"ne_type","apostr":"true","comment":"","display":"NE type","filter":"","loc":"true","name":"netype","optional":"false","type":"string"},{"alias":"ne_id","apostr":"true","comment":"","display":"NE ID","filter":"","loc":"true","name":"neid","optional":"false","type":"string"},{"alias":"version","apostr":"true","comment":"","display":"Version","filter":"","loc":"true","name":"version","optional":"false","type":"string"}]', 'Inactive'); +INSERT INTO "mml_command" VALUES (1612, 'OMC', 'pmTaskManagement', 'Performance Measure Task Management', 'lst', 'measuretask', 'List Performance Measure Task', '[{"alias":"id","apostr":"false","comment":"","display":"Task ID","filter":"","loc":"true","name":"id","optional":"true","type":"string"},{"alias":"ne_type","apostr":"true","comment":"","display":"NE type","filter":"","name":"netype","optional":"true","type":"string"},{"alias":"granul_option","apostr":"true","comment":"","display":"Time granularity","filter":"","name":"granuloption","optional":"true","type":"string"}]', 'Active'); +INSERT INTO "mml_command" VALUES (1613, 'OMC', 'pmTaskManagement', 'Performance Measure Task Management', 'add', 'measuretask', 'Add Performance Measure Task', '[{"alias":"ne_type","apostr":"false","comment":"","display":"NE type","filter":"","loc":"false","name":"netype","optional":"false","type":"string"},{"alias":"ne_ids","apostr":"false","comment":"","display":"NE ID set","filter":"","loc":"false","name":"neids","optional":"false","type":"array"},{"alias":"granul_option","apostr":"false","comment":"","display":"Granularity option","filter":"","loc":"false","name":"granuloption","optional":"false","type":"string"},{"alias":"kpi_set","apostr":"false","comment":"","display":"KPI set","filter":"","loc":"false","name":"kpiset","optional":"false","type":"json"},{"alias":"start_time","apostr":"false","comment":"","display":"Measure task start time","filter":"","loc":"false","name":"starttime","optional":"false","type":"string"},{"alias":"end_time","apostr":"false","comment":"","display":"Measure task end time","filter":"","loc":"false","name":"endtime","optional":"false","type":"string"}]', 'Active'); +INSERT INTO "mml_command" VALUES (1614, 'OMC', 'pmTaskManagement', 'Performance Measure Task Management', 'mod', 'measuretask', 'Modify Performance Measure Task', '[{"alias":"id","apostr":"false","comment":"","display":"Task ID","filter":"","loc":"true","name":"id","optional":"false","type":"string"},{"alias":"kpi_set","apostr":"false","comment":"","display":"KPI set","filter":"","loc":"false","name":"kpiset","optional":"true","type":"json"},{"alias":"start_time","apostr":"false","comment":"","display":"Measure task start time","filter":"","loc":"false","name":"starttime","optional":"true","type":"string"},{"alias":"end_time","apostr":"false","comment":"","display":"Measure task end time","filter":"","loc":"false","name":"endtime","optional":"true","type":"string"},{"alias":"granul_option","apostr":"false","comment":"","display":"granularity option","filter":"","loc":"false","name":"granuloption","optional":"true","type":"string"}]', 'Active'); +INSERT INTO "mml_command" VALUES (1615, 'OMC', 'pmTaskManagement', 'Performance Measure Task Management', 'del', 'measuretask', 'Delete Performance Measure Task', '[{"alias":"id","apostr":"false","comment":"","display":"Task ID","filter":"","loc":"true","name":"id","optional":"false","type":"string"}]', 'Active'); +INSERT INTO "mml_command" VALUES (1616, 'OMC', 'pmTaskManagement', 'Performance Measure Task Management', 'act', 'measuretask', 'Active Performance Measure Task', '[{"alias":"id","apostr":"false","comment":"","display":"Task ID","filter":"","loc":"true","name":"id","optional":"false","type":"string"}]', 'Active'); +INSERT INTO "mml_command" VALUES (1617, 'OMC', 'pmTaskManagement', 'Performance Measure Task Management', 'dea', 'measuretask', 'Deactive Performance Measure Task', '[{"alias":"id","apostr":"false","comment":"","display":"Task ID","filter":"","loc":"true","name":"id","optional":"false","type":"string"}]', 'Active'); +INSERT INTO "mml_command" VALUES (1618, 'OMC', 'pmDataManagement', 'Performance Data Management', 'lst', 'measuredata', 'List Performance Data', '[{"alias":"task_id","apostr":"false","comment":"","display":"Task ID","filter":"","loc":"true","name":"id","optional":"true","type":"string"},{"alias":"ne_type","apostr":"true","comment":"","display":"NE type","filter":"","loc":"true","name":"netype","optional":"true","type":"string"},{"alias":"kpi_id","apostr":"true","comment":"","display":"KPI ID","filter":"","loc":"true","name":"kpiid","optional":"true","type":"string"},{"alias":"start_time\u003e","apostr":"false","comment":"","display":"Measure period start time(\u003e=)","filter":"","name":"starttime","optional":"true","type":"string"},{"alias":"start_time\u003c","apostr":"false","comment":"","display":"Measure period start time(\u003c=)","filter":"","name":"endtime","optional":"true","type":"string"}]', 'Active'); +INSERT INTO "mml_command" VALUES (1619, 'OMC', 'logManagement', 'Log Management', 'lst', 'systemlog', 'List System Log', '[{"alias":"process_type","apostr":"true","comment":"","display":"Process type","filter":"","loc":"true","name":"processtype","optional":"true","type":"string"},{"alias":"log_time\u003e","apostr":"true","comment":"","display":"Log time more than","filter":"","name":"starttime","optional":"true","type":"string"},{"alias":"log_time\u003c","apostr":"true","comment":"","display":"Log time less than","filter":"","name":"endtime","optional":"true","type":"string"}]', 'Active'); +INSERT INTO "mml_command" VALUES (1620, 'OMC', 'logManagement', 'Log Management', 'lst', 'operationlog', 'List Operation Log', '[{"alias":"account_name","apostr":"true","comment":"","display":"Account ID","filter":"","loc":"true","name":"accountid","optional":"true","type":"string"},{"alias":"log_time\u003e","apostr":"true","comment":"","display":"Log time more than","filter":"","name":"starttime","optional":"true","type":"string"},{"alias":"log_time\u003c","apostr":"true","comment":"","display":"Log Time Less Than","filter":"","name":"endtime","optional":"true","type":"string"}]', 'Active'); +INSERT INTO "mml_command" VALUES (1621, 'OMC', 'logManagement', 'Log Management', 'lst', 'securitylog', 'List Security Log', '[{"alias":"account_name","apostr":"true","comment":"","display":"Account ID","filter":"","loc":"true","name":"accountid","optional":"true","type":"string"},{"alias":"op_time\u003e","apostr":"true","comment":"","display":"Log time more than","filter":"","name":"starttime","optional":"true","type":"string"},{"alias":"op_time\u003c","apostr":"true","comment":"","display":"Log time less than","filter":"","name":"endtime","optional":"true","type":"string"}]', 'Active'); +INSERT INTO "mml_command" VALUES (1622, 'OMC', 'logManagement', 'Log Management', 'lst', 'alarmlog', 'List Alarm Log', '[{"alias":"ne_type","apostr":"true","comment":"","display":"NE type","filter":"","name":"netype","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 less than","filter":"","name":"endtime","optional":"true","type":"string"}]', 'Active'); +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'); diff --git a/config/mml_map/http_mml_map.json b/build/database/lite/common/mml_http_map.sql similarity index 68% rename from config/mml_map/http_mml_map.json rename to build/database/lite/common/mml_http_map.sql index d70652ec..db0ad44e 100644 --- a/config/mml_map/http_mml_map.json +++ b/build/database/lite/common/mml_http_map.sql @@ -1,484 +1,26 @@ -"ne_info":{ - "retFmt": "GetDB", - "retMsg": "RetCode = %d operation succeeded\n\n", - "errMsg": "ErrorCode = %d operation failed: %s\n\n", - "title": "Network element information", - "singleList": true, - "sepSpaceNum": 2, - "alignmentM": "Left", - "alignmentSN": "Right", - "alignmentSV": "Left", - "cols": [ - { - "name": "ne_type", - "display": "NE type", - "length": 10 - }, - { - "name": "ne_id", - "display": "NE ID", - "length": 16 - }, - { - "name": "rm_uid", - "display": "Resource management UID", - "length": 28 - }, - { - "name": "ne_name", - "display": "NE name", - "length": 28 - }, - { - "name": "pv_flag", - "display": "PV flag", - "length": 10 - }, - { - "name": "ip", - "display": "IP address", - "length": 32 - }, - { - "name": "port", - "display": "Port", - "length": 6 - }, - { - "name": "status", - "display": "Status", - "length": 10, - "alias": [ - "online", - "offline", - "standby", - "maintain" - ] - } - ], - "end": "(Number of results = %d)\n\n" -} +-- ---------------------------- +-- Table structure for mml_http_map +-- ---------------------------- +DROP TABLE IF EXISTS "mml_http_map"; +CREATE TABLE "mml_http_map" ( + "id" integer NOT NULL, + "ne_type" text(16), + "operation" text(10), + "object" text(16), + "method" text(10), + "uri" text(255), + "ext_uri" text(255), + "param_tag" text(10), + "params" text(255), + "input" text, + "output" text, + PRIMARY KEY ("id") +); - -"me_map":{ - "retFmt": "GetDB", - "retMsg": "RetCode = %d operation succeeded\n\n", - "errMsg": "ErrorCode = %d operation failed: %s\n\n", - "title": "Managed Element Map", - "singleList": true, - "sepSpaceNum": 2, - "alignmentM": "Left", - "alignmentSN": "Right", - "alignmentSV": "Left", - "cols": [ - { - "name": "rm_uid", - "display": "Resource management UID", - "length": 28 - }, - { - "name": "ne_name", - "display": "NE name", - "length": 28 - } - ], - "end": "(Number of results = %d)\n\n" -} - - -{ - "retFmt": "DeleteDB", - "retMsg": "RetCode = %d operation succeeded\n\n", - "errMsg": "ErrorCode = %d operation failed: %s\n\n", - "cols": [ - { - "name": "affectedRows", - "display": "Affected rows", - "length": 11 - } - ] -} - - -{ - "bodyFmt": "PostDB", - "bodyKey": "ne_info" -} - -{ - "bodyFmt": "PutDB", - "bodyKey": "measure_task", - "cols": [ - { - "name": "status", - "alias": "status", - "type": "int", - "length": 11, - "value": "Active" - } - ] -} - -{ - "bodyFmt": "PutDB", - "bodyKey": "measure_task", - "cols": [ - { - "name": "status", - "alias": "status", - "type": "string", - "length": 11, - "value": "Active" - } - ] -} - -{ - "bodyFmt": "PutDB", - "bodyKey": "ne_version", - "cols": [ - { - "name": "status", - "alias": "status", - "type": "string", - "length": 8, - "value": "Active" - } - ] -} - -{ - "retFmt": "PostDB", - "retMsg": "RetCode = %d operation succeeded\n\n", - "errMsg": "ErrorCode = %d operation failed: %s\n\n", - "cols": [ - { - "name": "affectedRows", - "display": "Affected rows", - "length": 11 - } - ] -} - -{ - "retFmt": "PutDB", - "retMsg": "RetCode = %d operation succeeded\n\n", - "errMsg": "ErrorCode = %d operation failed: %s\n\n", - "cols": [ - { - "name": "affectedRows", - "display": "Affected rows", - "length": 11 - } - ] -} - -"alarm":{ - "retFmt": "GetDB", - "retMsg": "RetCode = %d operation succeeded\n\n", - "errMsg": "ErrorCode = %d operation failed: %s\n\n", - "title": "Alarm Information", - "singleList": true, - "sepSpaceNum": 2, - "alignmentM": "Left", - "alignmentSN": "Right", - "alignmentSV": "Left", - "cols": [ - { - "name": "ne_type", - "display": "NE type", - "length": 10 - }, - { - "name": "ne_id", - "display": "NE UID", - "length": 28 - }, - { - "name": "ne_name", - "display": "NE name", - "length": 28 - }, - { - "name": "alarm_seq", - "display": "Alarm sequence", - "length": 11 - }, - { - "name": "alarm_title", - "display": "Alarm title", - "length": 30 - }, - { - "name": "orig_severity", - "display": "Original severity", - "length": 11 - }, - { - "name": "pv_flag", - "display": "PV flag", - "length": 10 - }, - { - "name": "event_time", - "display": "Event time", - "length": 20 - } - ], - "end": "(Number of results = %d)\n\n" -} - -"measure_task":{ - "retFmt": "GetDB", - "retMsg": "RetCode = %d operation succeeded\n\n", - "errMsg": "ErrorCode = %d operation failed: %s\n\n", - "title": "Performance Task Information", - "singleList": true, - "sepSpaceNum": 2, - "alignmentM": "Left", - "alignmentSN": "Right", - "alignmentSV": "Left", - "cols": [ - { - "name": "id", - "display": "Task ID", - "length": 11 - }, - { - "name": "ne_type", - "display": "NE type", - "length": 10 - }, - { - "name": "ne_ids", - "display": "NE ID Set", - "length": 28 - }, - { - "name": "granul_option", - "display": "Time granulity", - "length": 5 - }, - { - "name": "kpi_set", - "display": "KPI set", - "length": 60 - }, - { - "name": "start_time", - "display": "Start time", - "length": 20 - }, - { - "name": "end_time", - "display": "End time", - "length": 20 - }, - { - "name": "status", - "display": "Status", - "length": 8 - } - ], - "end": "(Number of results = %d)\n\n" -} - -"measure_data":{ - "retFmt": "GetDB", - "retMsg": "RetCode = %d operation succeeded\n\n", - "errMsg": "ErrorCode = %d operation failed: %s\n\n", - "title": "Performance Measure Data", - "singleList": true, - "sepSpaceNum": 2, - "alignmentM": "Left", - "alignmentSN": "Right", - "alignmentSV": "Left", - "cols": [ - { - "name": "task_id", - "display": "Task ID", - "length": 11 - }, - { - "name": "ne_type", - "display": "NE type", - "length": 10 - }, - { - "name": "rm_uid", - "display": "Resource management UID", - "length": 28 - }, - { - "name": "ne_name", - "display": "NE name", - "length": 28 - }, - { - "name": "granul_option", - "display": "Time granulity", - "length": 5 - }, - { - "name": "kpi_id", - "display": "KPI ID", - "length": 32 - }, - { - "name": "start_time", - "display": "Start time", - "length": 20 - }, - { - "name": "end_time", - "display": "End time", - "length": 20 - }, - { - "name": "value", - "display": "value", - "length": 11 - } - ], - "end": "(Number of results = %d)\n\n" -} - -"operation_log":{ - "retFmt": "GetDB", - "retMsg": "RetCode = %d operation succeeded\n\n", - "errMsg": "ErrorCode = %d operation failed: %s\n\n", - "title": "Operation Log", - "singleList": true, - "sepSpaceNum": 2, - "alignmentM": "Left", - "alignmentSN": "Right", - "alignmentSV": "Left", - "cols": [ - { - "name": "account_name", - "display": "Account ID", - "length": 10 - }, - { - "name": "op_ip", - "display": "Source IP address", - "length": 20 - }, - { - "name": "op_type", - "display": "Opration type", - "length": 12 - }, - { - "name": "op_content", - "display": "Operation content", - "length": 50 - }, - { - "name": "op_result", - "display": "Operation result", - "length": 20 - }, - { - "name": "log_time", - "display": "Log time", - "length": 20 - } - ], - "end": "(Number of results = %d)\n\n" -} - -"security_log": { - "retFmt": "GetDB", - "retMsg": "RetCode = %d operation succeeded\n\n", - "errMsg": "ErrorCode = %d operation failed: %s\n\n", - "title": "Security Log", - "singleList": true, - "sepSpaceNum": 2, - "alignmentM": "Left", - "alignmentSN": "Right", - "alignmentSV": "Left", - "cols": [ - { - "name": "account_name", - "display": "Account ID", - "length": 10 - }, - { - "name": "op_ip", - "display": "Source IP address", - "length": 20 - }, - { - "name": "op_type", - "display": "Opration type", - "length": 12 - }, - { - "name": "op_content", - "display": "Operation content", - "length": 50 - }, - { - "name": "op_result", - "display": "Operation result", - "length": 20 - }, - { - "name": "op_time", - "display": "Operation log time", - "length": 20 - } - ], - "end": "(Number of results = %d)\n\n" -} - -"alarm_log":{ - "retFmt": "GetDB", - "retMsg": "RetCode = %d operation succeeded\n\n", - "errMsg": "ErrorCode = %d operation failed: %s\n\n", - "title": "Alarm Log", - "singleList": true, - "sepSpaceNum": 2, - "alignmentM": "Left", - "alignmentSN": "Right", - "alignmentSV": "Left", - "cols": [ - { - "name": "ne_type", - "display": "NE type", - "length": 8 - }, - { - "name": "ne_id", - "display": "NE UID", - "length": 28 - }, - { - "name": "alarm_seq", - "display": "Alarm sequence", - "length": 12 - }, - { - "name": "alarm_id", - "display": "Alarm ID", - "length": 20 - }, - { - "name": "event_time", - "display": "Alarm event time", - "length": 20 - }, - { - "name": "log_time", - "display": "Log time", - "length": 20 - } - ], - "end": "(Number of results = %d)\n\n" -} - -"sysInfo": { +-- ---------------------------- +-- Records of mml_http_map +-- ---------------------------- +INSERT INTO "mml_http_map" VALUES (1, 'OMC', 'dsp', 'sysinfo', 'Get', '/api/rest/systemManagement/v1/sysInfo', '/%s', NULL, NULL, '{}', '{ "retFmt": "GetNF", "retMsg": "RetCode = %d operation succeeded\n\n", "errMsg": "ErrorCode = %d operation failed: %s\n\n", @@ -541,9 +83,466 @@ } ], "end": "(Number of results = %d)\n\n" +}'); +INSERT INTO "mml_http_map" VALUES (2, 'OMC', 'lst', 'memap', 'Get', '/api/rest/dataManagement/v1/omc_db/ne_info', NULL, NULL, '?loc=', '{}', '{ + "retFmt": "GetDB", + "retMsg": "RetCode = %d operation succeeded\n\n", + "errMsg": "ErrorCode = %d operation failed: %s\n\n", + "title": "Managed Element Map", + "singleList": true, + "sepSpaceNum": 2, + "alignmentM": "Left", + "alignmentSN": "Right", + "alignmentSV": "Left", + "cols": [ + { + "name": "rm_uid", + "display": "Resource management UID", + "length": 28 + }, + { + "name": "ne_name", + "display": "NE name", + "length": 28 + } + ], + "end": "(Number of results = %d)\n\n" +}'); +INSERT INTO "mml_http_map" VALUES (3, 'OMC', 'lst', 'neinfo', 'Get', '/api/rest/dataManagement/v1/omc_db/ne_info', NULL, NULL, '?loc=', '{}', '{ + "retFmt": "GetDB", + "retMsg": "RetCode = %d operation succeeded\n\n", + "errMsg": "ErrorCode = %d operation failed: %s\n\n", + "title": "Network element information", + "singleList": true, + "sepSpaceNum": 2, + "alignmentM": "Left", + "alignmentSN": "Right", + "alignmentSV": "Left", + "cols": [ + { + "name": "ne_type", + "display": "NE type", + "length": 10 + }, + { + "name": "ne_id", + "display": "NE ID", + "length": 16 + }, + { + "name": "rm_uid", + "display": "Resource management UID", + "length": 28 + }, + { + "name": "ne_name", + "display": "NE name", + "length": 28 + }, + { + "name": "pv_flag", + "display": "PV flag", + "length": 10 + }, + { + "name": "ip", + "display": "IP address", + "length": 32 + }, + { + "name": "port", + "display": "Port", + "length": 6 + }, + { + "name": "status", + "display": "Status", + "length": 10, + "alias": [ + "offline", + "online", + "standby", + "maintain" + ] + } + ], + "end": "(Number of results = %d)\n\n" } - -"licenseInfo":{ +'); +INSERT INTO "mml_http_map" VALUES (4, 'OMC', 'add', 'neinfo', 'Post', '/api/rest/dataManagement/v1/omc_db/ne_info', NULL, NULL, '', '{"bodyFmt":"PostDB", "bodyKey":"ne_info"}', '{ + "retFmt": "PostDB", + "retMsg": "RetCode = %d operation succeeded\n\n", + "errMsg": "ErrorCode = %d operation failed: %s\n\n", + "cols": [ + { + "name": "affectedRows", + "display": "Affected rows", + "length": 11 + } + ] +} +'); +INSERT INTO "mml_http_map" VALUES (5, 'OMC', 'del', 'neinfo', 'Delete', '/api/rest/dataManagement/v1/omc_db/ne_info', NULL, NULL, '?loc=', '{}', '{ + "retFmt": "DeleteDB", + "retMsg": "RetCode = %d operation succeeded\n\n", + "errMsg": "ErrorCode = %d operation failed: %s\n\n", + "cols": [ + { + "name": "affectedRows", + "display": "Affected rows", + "length": 11 + } + ] +}'); +INSERT INTO "mml_http_map" VALUES (6, 'OMC', 'mod', 'neinfo', 'Put', '/api/rest/dataManagement/v1/omc_db/ne_info', NULL, NULL, '?loc=', '{"bodyFmt":"PutDB", "bodyKey":"ne_info"}', '{ + "retFmt": "PutDB", + "retMsg": "RetCode = %d operation succeeded\n\n", + "errMsg": "ErrorCode = %d operation failed: %s\n\n", + "cols": [ + { + "name": "affectedRows", + "display": "Affected rows", + "length": 11 + } + ] +}'); +INSERT INTO "mml_http_map" VALUES (7, 'OMC', 'dsp', 'alarm', 'Get', '/api/rest/dataManagement/v1/omc_db/alarm', NULL, NULL, '?loc=', '{}', '{ + "retFmt": "GetDB", + "retMsg": "RetCode = %d operation succeeded\n\n", + "errMsg": "ErrorCode = %d operation failed: %s\n\n", + "title": "Alarm Information", + "singleList": true, + "sepSpaceNum": 2, + "alignmentM": "Left", + "alignmentSN": "Right", + "alignmentSV": "Left", + "cols": [ + { + "name": "ne_type", + "display": "NE type", + "length": 10 + }, + { + "name": "ne_id", + "display": "NE UID", + "length": 28 + }, + { + "name": "ne_name", + "display": "NE name", + "length": 28 + }, + { + "name": "alarm_seq", + "display": "Alarm sequence", + "length": 11 + }, + { + "name": "alarm_title", + "display": "Alarm title", + "length": 30 + }, + { + "name": "orig_severity", + "display": "Original severity", + "length": 11 + }, + { + "name": "pv_flag", + "display": "PV flag", + "length": 10 + }, + { + "name": "event_time", + "display": "Event time", + "length": 20 + } + ], + "end": "(Number of results = %d)\n\n" +}'); +INSERT INTO "mml_http_map" VALUES (8, 'OMC', 'lst', 'measuretask', 'Get', '/api/rest/dataManagement/v1/omc_db/measure_task', NULL, NULL, '?loc=', '{}', '{ + "retFmt": "GetDB", + "retMsg": "RetCode = %d operation succeeded\n\n", + "errMsg": "ErrorCode = %d operation failed: %s\n\n", + "title": "Performance Task Information", + "singleList": true, + "sepSpaceNum": 2, + "alignmentM": "Left", + "alignmentSN": "Right", + "alignmentSV": "Left", + "cols": [ + { + "name": "id", + "display": "Task ID", + "length": 11 + }, + { + "name": "ne_type", + "display": "NE type", + "length": 10 + }, + { + "name": "ne_ids", + "display": "NE ID Set", + "length": 28 + }, + { + "name": "granul_option", + "display": "Time granulity", + "length": 5 + }, + { + "name": "kpi_set", + "display": "KPI set", + "length": 60 + }, + { + "name": "start_time", + "display": "Start time", + "length": 20 + }, + { + "name": "end_time", + "display": "End time", + "length": 20 + }, + { + "name": "status", + "display": "Status", + "length": 8 + } + ], + "end": "(Number of results = %d)\n\n" +}'); +INSERT INTO "mml_http_map" VALUES (9, 'OMC', 'add', 'measuretask', 'Post', '/api/rest/dataManagement/v1/omc_db/measure_task', NULL, NULL, '', '{"bodyFmt":"PostDB", "bodyKey":"measure_task"}', '{ + "retFmt": "PostDB", + "retMsg": "RetCode = %d operation succeeded\n\n", + "errMsg": "ErrorCode = %d operation failed: %s\n\n", + "cols": [ + { + "name": "affectedRows", + "display": "Affected rows", + "length": 11 + } + ] +} +'); +INSERT INTO "mml_http_map" VALUES (10, 'OMC', 'del', 'measuretask', 'Delete', '/api/rest/dataManagement/v1/omc_db/measure_task', NULL, NULL, '?loc=', '{}', '{ + "retFmt": "DeleteDB", + "retMsg": "RetCode = %d operation succeeded\n\n", + "errMsg": "ErrorCode = %d operation failed: %s\n\n", + "cols": [ + { + "name": "affectedRows", + "display": "Affected rows", + "length": 11 + } + ] +}'); +INSERT INTO "mml_http_map" VALUES (11, 'OMC', 'mod', 'measuretask', 'Put', '/api/rest/dataManagement/v1/omc_db/measure_task', NULL, NULL, '?loc=', '{"bodyFmt":"PutDB", "bodyKey":"measure_task"}', '{ + "retFmt": "PutDB", + "retMsg": "RetCode = %d operation succeeded\n\n", + "errMsg": "ErrorCode = %d operation failed: %s\n\n", + "cols": [ + { + "name": "affectedRows", + "display": "Affected rows", + "length": 11 + } + ] +}'); +INSERT INTO "mml_http_map" VALUES (12, 'OMC', 'lst', 'measuredata', 'Get', '/api/rest/dataManagement/v1/omc_db/measure_data', NULL, NULL, '?loc=', '{}', '{ + "retFmt": "GetDB", + "retMsg": "RetCode = %d operation succeeded\n\n", + "errMsg": "ErrorCode = %d operation failed: %s\n\n", + "title": "Performance Measure Data", + "singleList": true, + "sepSpaceNum": 2, + "alignmentM": "Left", + "alignmentSN": "Right", + "alignmentSV": "Left", + "cols": [ + { + "name": "task_id", + "display": "Task ID", + "length": 11 + }, + { + "name": "ne_type", + "display": "NE type", + "length": 10 + }, + { + "name": "rm_uid", + "display": "Resource management UID", + "length": 28 + }, + { + "name": "ne_name", + "display": "NE name", + "length": 28 + }, + { + "name": "granul_option", + "display": "Time granulity", + "length": 5 + }, + { + "name": "kpi_id", + "display": "KPI ID", + "length": 32 + }, + { + "name": "start_time", + "display": "Start time", + "length": 20 + }, + { + "name": "end_time", + "display": "End time", + "length": 20 + }, + { + "name": "value", + "display": "value", + "length": 11 + } + ], + "end": "(Number of results = %d)\n\n" +}'); +INSERT INTO "mml_http_map" VALUES (13, 'OMC', 'lst', 'operationlog', 'Get', '/api/rest/dataManagement/v1/omc_db/operation_log', NULL, NULL, '?loc=', '{}', '{ + "retFmt": "GetDB", + "retMsg": "RetCode = %d operation succeeded\n\n", + "errMsg": "ErrorCode = %d operation failed: %s\n\n", + "title": "Operation Log", + "singleList": true, + "sepSpaceNum": 2, + "alignmentM": "Left", + "alignmentSN": "Right", + "alignmentSV": "Left", + "cols": [ + { + "name": "account_name", + "display": "Account ID", + "length": 10 + }, + { + "name": "op_ip", + "display": "Source IP address", + "length": 20 + }, + { + "name": "op_type", + "display": "Opration type", + "length": 12 + }, + { + "name": "op_content", + "display": "Operation content", + "length": 50 + }, + { + "name": "op_result", + "display": "Operation result", + "length": 20 + }, + { + "name": "log_time", + "display": "Log time", + "length": 20 + } + ], + "end": "(Number of results = %d)\n\n" +}'); +INSERT INTO "mml_http_map" VALUES (14, 'OMC', 'lst', 'securitylog', 'Get', '/api/rest/dataManagement/v1/omc_db/security_log', NULL, NULL, '?loc=', '{}', '{ + "retFmt": "GetDB", + "retMsg": "RetCode = %d operation succeeded\n\n", + "errMsg": "ErrorCode = %d operation failed: %s\n\n", + "title": "Security Log", + "singleList": true, + "sepSpaceNum": 2, + "alignmentM": "Left", + "alignmentSN": "Right", + "alignmentSV": "Left", + "cols": [ + { + "name": "account_name", + "display": "Account ID", + "length": 10 + }, + { + "name": "op_ip", + "display": "Source IP address", + "length": 20 + }, + { + "name": "op_type", + "display": "Opration type", + "length": 12 + }, + { + "name": "op_content", + "display": "Operation content", + "length": 50 + }, + { + "name": "op_result", + "display": "Operation result", + "length": 20 + }, + { + "name": "op_time", + "display": "Operation log time", + "length": 20 + } + ], + "end": "(Number of results = %d)\n\n" +}'); +INSERT INTO "mml_http_map" VALUES (15, 'OMC', 'lst', 'alarmlog', 'Get', '/api/rest/dataManagement/v1/omc_db/alarm_log', NULL, NULL, '?loc=', '{}', '{ + "retFmt": "GetDB", + "retMsg": "RetCode = %d operation succeeded\n\n", + "errMsg": "ErrorCode = %d operation failed: %s\n\n", + "title": "Alarm Log", + "singleList": true, + "sepSpaceNum": 2, + "alignmentM": "Left", + "alignmentSN": "Right", + "alignmentSV": "Left", + "cols": [ + { + "name": "ne_type", + "display": "NE type", + "length": 8 + }, + { + "name": "ne_id", + "display": "NE UID", + "length": 28 + }, + { + "name": "alarm_seq", + "display": "Alarm sequence", + "length": 12 + }, + { + "name": "alarm_id", + "display": "Alarm ID", + "length": 20 + }, + { + "name": "event_time", + "display": "Alarm event time", + "length": 20 + }, + { + "name": "log_time", + "display": "Log time", + "length": 20 + } + ], + "end": "(Number of results = %d)\n\n" +}'); +INSERT INTO "mml_http_map" VALUES (16, 'OMC', 'dsp', 'licenseinfo', 'Get', '/api/rest/systemManagement/v1/licenseInfo', '/%s', NULL, NULL, '{}', '{ "retFmt": "GetNF", "retMsg": "RetCode = %d operation succeeded\n\n", "errMsg": "ErrorCode = %d operation failed: %s\n\n", @@ -591,9 +590,8 @@ } ], "end": "(Number of results = %d)\n\n" -} - -"system_log": { +}'); +INSERT INTO "mml_http_map" VALUES (17, 'OMC', 'lst', 'systemlog', 'Get', '/api/rest/dataManagement/v1/omc_db/system_log', NULL, NULL, '?loc=', '{}', '{ "retFmt": "GetDB", "retMsg": "RetCode = %d operation succeeded\n\n", "errMsg": "ErrorCode = %d operation failed: %s\n\n", @@ -646,9 +644,8 @@ } ], "end": "(Number of results = %d)\n\n" -} - -"event_log": { +}'); +INSERT INTO "mml_http_map" VALUES (18, 'OMC', 'lst', 'eventlog', 'Get', '/api/rest/dataManagement/v1/omc_db/event_log', NULL, NULL, '?loc=', '{}', '{ "retFmt": "GetDB", "retMsg": "RetCode = %d operation succeeded\n\n", "errMsg": "ErrorCode = %d operation failed: %s\n\n", @@ -675,8 +672,8 @@ "length": 12 }, { - "name": "event_time", - "display": "Event time", + "name": "event time", + "display": "Event", "length": 20 }, { @@ -686,9 +683,8 @@ } ], "end": "(Number of results = %d)\n\n" -} - -"mml_command": { +}'); +INSERT INTO "mml_http_map" VALUES (19, 'OMC', 'lst', 'mmlcmd', 'Get', '/api/rest/dataManagement/v1/omc_db/mml_command', NULL, NULL, '?loc=`status`=''Active''', '{}', '{ "retFmt": "GetDB", "retMsg": "RetCode = %d operation succeeded\n\n", "errMsg": "ErrorCode = %d operation failed: %s\n\n", @@ -716,10 +712,8 @@ } ], "end": "(Number of results = %d)\n\n" -} - - -"mml_cmd": { +}'); +INSERT INTO "mml_http_map" VALUES (20, 'OMC', 'help', 'mmlcmd', 'Get', '/api/rest/dataManagement/v1/omc_db/mml_command', NULL, NULL, '?SQL=select+operation,object,mml_display,json_extract(param_json,''$[*].name'')+as+params+from+mml_command', '{}', '{ "retFmt": "GetDB", "retMsg": "RetCode = %d operation succeeded\n\n", "errMsg": "ErrorCode = %d operation failed: %s\n\n", @@ -747,9 +741,204 @@ } ], "end": "(Number of results = %d)\n\n" +}'); +INSERT INTO "mml_http_map" VALUES (21, 'OMC', 'dsp', 'nelink', 'Get', '/api/rest/dataManagement/v1/omc_db/ne_link', NULL, NULL, '?loc=', '{}', '{ + "retFmt": "GetDB", + "retMsg": "RetCode = %d operation succeeded\n\n", + "errMsg": "ErrorCode = %d operation failed: %s\n\n", + "title": "Network Element Link", + "singleList": true, + "sepSpaceNum": 2, + "alignmentM": "Left", + "alignmentSN": "Right", + "alignmentSV": "Left", + "cols": [ + { + "name": "ne_type", + "display": "NE type", + "length": 10 + }, + { + "name": "ne_id", + "display": "NE ID", + "length": 28 + }, + { + "name": "interface", + "display": "Interface", + "length": 20 + }, + { + "name": "status", + "display": "Status", + "length": 20 + }, + { + "name": "created_at", + "display": "Timestamp", + "length": 20 + } + ], + "end": "(Number of results = %d)\n\n" +}'); +INSERT INTO "mml_http_map" VALUES (22, 'OMC', 'act', 'measuretask', 'Put', '/api/rest/dataManagement/v1/omc_db/measure_task', NULL, NULL, '?loc=', '{ + "bodyFmt": "PutDB", + "bodyKey": "measure_task", + "cols": [ + { + "name": "status", + "alias": "status", + "type": "int", + "length": 11, + "value": "Active" + } + ] +}', '{ + "retFmt": "PutDB", + "retMsg": "RetCode = %d operation succeeded\n\n", + "errMsg": "ErrorCode = %d operation failed: %s\n\n", + "cols": [ + { + "name": "affectedRows", + "display": "Affected rows", + "length": 11 + } + ] +}'); +INSERT INTO "mml_http_map" VALUES (23, 'OMC', 'dea', 'measuretask', 'Put', '/api/rest/dataManagement/v1/omc_db/measure_task', NULL, NULL, '?loc=', '{ + "bodyFmt": "PutDB", + "bodyKey": "measure_task", + "cols": [ + { + "name": "status", + "alias": "status", + "type": "int", + "length": 11, + "value": "Inactive" + } + ] } - -"ne_license": { +', '{ + "retFmt": "PutDB", + "retMsg": "RetCode = %d operation succeeded\n\n", + "errMsg": "ErrorCode = %d operation failed: %s\n\n", + "cols": [ + { + "name": "affectedRows", + "display": "Affected rows", + "length": 11 + } + ] +}'); +INSERT INTO "mml_http_map" VALUES (24, 'OMC', 'dsp', 'nbicm', 'Get', '/api/rest/dataManagement/v1/omc_db/nbi_cm', NULL, NULL, '?loc=', '{}', '{ + "retFmt": "GetDB", + "retMsg": "RetCode = %d operation succeeded\n\n", + "errMsg": "ErrorCode = %d operation failed: %s\n\n", + "title": "NBI Resources Management", + "singleList": true, + "sepSpaceNum": 2, + "alignmentM": "Left", + "alignmentSN": "Right", + "alignmentSV": "Left", + "cols": [ + { + "name": "ne_type", + "display": "NE type", + "length": 10 + }, + { + "name": "ne_id", + "display": "NE ID", + "length": 20 + }, + { + "name": "rm_uid", + "display": "RM UID", + "length": 20 + }, + { + "name": "user_label", + "display": "User label", + "length": 20 + }, + { + "name": "object_type", + "display": "Object type", + "length": 20 + }, + { + "name": "pv_flag", + "display": "PV flag", + "length": 8 + }, + { + "name": "value_json", + "display": "NBI resource management", + "length": 200 + } + ], + "end": "(Number of results = %d)\n\n" +} +'); +INSERT INTO "mml_http_map" VALUES (25, 'OMC', 'upg', 'neversion', 'Put', '/api/rest/dataManagement/v1/omc_db/ne_version', NULL, NULL, '?loc=', '{ + "bodyFmt": "PutDB", + "bodyKey": "ne_version", + "cols": [ + { + "name": "status", + "alias": "status", + "type": "string", + "length": 8, + "value": "Active" + } + ] +}', '{ + "retFmt": "PutDB", + "retMsg": "RetCode = %d operation succeeded\n\n", + "errMsg": "ErrorCode = %d operation failed: %s\n\n", + "cols": [ + { + "name": "affectedRows", + "display": "Affected rows", + "length": 11 + } + ] +}'); +INSERT INTO "mml_http_map" VALUES (26, 'OMC', 'dsp', 'neconfig', 'Get', '/api/rest/dataManagement/v1/omc_db/ne_config', NULL, 'SQL', '?SQL=select+ne_type,param_display,JSON_UNQUOTE(json_extract(param_json,''$[0].name''))+as+param_name,JSON_UNQUOTE(json_extract(param_json,''$[0].value''))+as+param_value+from+ne_config', '{}', '{ + "retFmt": "GetDB", + "retMsg": "RetCode = %d operation succeeded\n\n", + "errMsg": "ErrorCode = %d operation failed: %s\n\n", + "title": "NE Config Parameters", + "singleList": true, + "sepSpaceNum": 2, + "alignmentM": "Left", + "alignmentSN": "Right", + "alignmentSV": "Left", + "cols": [ + { + "name": "ne_type", + "display": "NE Type", + "length": 10 + }, + { + "name": "param_display", + "display": "Parameter Display", + "length": 128 + }, + { + "name": "param_name", + "display": "Parameter Name", + "length": 256 + }, + { + "name": "param_value", + "display": "Parameter Value", + "length": 256 + } + ], + "end": "(Number of results = %d)\n\n" +}'); +INSERT INTO "mml_http_map" VALUES (27, 'OMC', 'lst', 'license', 'Get', '/api/rest/dataManagement/v1/omc_db/ne_license', NULL, 'loc', '?loc=', '{}', '{ "retFmt": "GetDB", "retMsg": "RetCode = %d operation succeeded\n\n", "errMsg": "ErrorCode = %d operation failed: %s\n\n", @@ -797,153 +986,72 @@ } ], "end": "(Number of results = %d)\n\n" -} - -"ne_link": { - "retFmt": "GetDB", - "retMsg": "RetCode = %d operation succeeded\n\n", - "errMsg": "ErrorCode = %d operation failed: %s\n\n", - "title": "Network Element Link", - "singleList": true, - "sepSpaceNum": 2, - "alignmentM": "Left", - "alignmentSN": "Right", - "alignmentSV": "Left", - "cols": [ - { - "name": "ne_type", - "display": "NE type", - "length": 10 - }, - { - "name": "ne_id", - "display": "NE ID", - "length": 28 - }, - { - "name": "interface", - "display": "Interface", - "length": 20 - }, - { - "name": "status", - "display": "Status", - "length": 20 - }, - { - "name": "created_at", - "display": "Timestamp", - "length": 20 - } - ], - "end": "(Number of results = %d)\n\n" -} - -"nbi_cm": { - "retFmt": "GetDB", - "retMsg": "RetCode = %d operation succeeded\n\n", - "errMsg": "ErrorCode = %d operation failed: %s\n\n", - "title": "NBI Resource Management", - "singleList": true, - "sepSpaceNum": 2, - "alignmentM": "Left", - "alignmentSN": "Right", - "alignmentSV": "Left", - "cols": [ - { - "name": "ne_type", - "display": "NE type", - "length": 10 - }, - { - "name": "ne_id", - "display": "NE ID", - "length": 20 - }, - { - "name": "rm_uid", - "display": "RM UID", - "length": 20 - }, - { - "name": "user_label", - "display": "User label", - "length": 20 - }, - { - "name": "object_type", - "display": "Object type", - "length": 20 - }, - { - "name": "pv_flag", - "display": "PV flag", - "length": 8 - }, - { - "name": "value_json", - "display": "NBI resource management", - "length": 200 - } - ], - "end": "(Number of results = %d)\n\n" -} - - -"ne_config": { - "retFmt": "GetDB", - "retMsg": "RetCode = %d operation succeeded\n\n", - "errMsg": "ErrorCode = %d operation failed: %s\n\n", - "title": "NE Config Parameters", - "singleList": true, - "sepSpaceNum": 2, - "alignmentM": "Left", - "alignmentSN": "Right", - "alignmentSV": "Left", - "cols": [ - { - "name": "ne_type", - "display": "NE Type", - "length": 10 - }, - { - "name": "param_display", - "display": "Parameter Display", - "length": 128 - }, - { - "name": "param_name", - "display": "Parameter Name", - "length": 256 - }, - { - "name": "param_value", - "display": "Parameter Value", - "length": 256 - } - ], - "end": "(Number of results = %d)\n\n" -} - -{ +}'); +INSERT INTO "mml_http_map" VALUES (28, 'OMC', 'dep', 'license', 'Put', '/api/rest/dataManagement/v1/omc_db/ne_license', NULL, 'loc', '?loc=', '{ "bodyFmt": "PutDB", "bodyKey": "ne_license", "callFunc": "DeploymentLicense" -} - -{ - "bodyFmt": "PutDB", - "bodyKey": "ne_license", - "callFunc": "AdjustmentLicense" -} - -{ +}', '{ + "retFmt": "DeleteDB", + "retMsg": "RetCode = %d operation succeeded\n\n", + "errMsg": "ErrorCode = %d operation failed: %s\n\n", + "cols": [ + { + "name": "affectedRows", + "display": "Affected rows", + "length": 11 + } + ] +}'); +INSERT INTO "mml_http_map" VALUES (29, 'OMC', 'rel', 'license', 'Put', '/api/rest/dataManagement/v1/omc_db/ne_license', NULL, 'loc', '?loc=', '{ "bodyFmt": "PutDB", "bodyKey": "ne_license", "callFunc": "InstallLicense" -} - -{ +}', '{ + "retFmt": "DeleteDB", + "retMsg": "RetCode = %d operation succeeded\n\n", + "errMsg": "ErrorCode = %d operation failed: %s\n\n", + "cols": [ + { + "name": "affectedRows", + "display": "Affected rows", + "length": 11 + } + ] +}'); +INSERT INTO "mml_http_map" VALUES (30, 'OMC', 'ins', 'license', 'Put', '/api/rest/dataManagement/v1/omc_db/ne_license', NULL, 'loc', '?loc=', '{ + "bodyFmt": "PutDB", + "bodyKey": "ne_license", + "callFunc": "InstallLicense" +}', '{ + "retFmt": "DeleteDB", + "retMsg": "RetCode = %d operation succeeded\n\n", + "errMsg": "ErrorCode = %d operation failed: %s\n\n", + "cols": [ + { + "name": "affectedRows", + "display": "Affected rows", + "length": 11 + } + ] +}'); +INSERT INTO "mml_http_map" VALUES (31, 'OMC', 'adj', 'license', 'Put', '/api/rest/dataManagement/v1/omc_db/ne_license', NULL, 'loc', '?loc=', '{ + "bodyFmt": "PutDB", + "bodyKey": "ne_license", + "callFunc": "AdjustmentLicense" +}', '{ + "retFmt": "DeleteDB", + "retMsg": "RetCode = %d operation succeeded\n\n", + "errMsg": "ErrorCode = %d operation failed: %s\n\n", + "cols": [ + { + "name": "affectedRows", + "display": "Affected rows", + "length": 11 + } + ] +}'); +INSERT INTO "mml_http_map" VALUES (32, 'OMC', 'exp', 'license', 'Put', '/api/rest/dataManagement/v1/omc_db/ne_license', NULL, 'loc', '?loc=', '{ "bodyFmt": "PutDB", "bodyKey": "ne_license", "cols": [ @@ -955,15 +1063,43 @@ "value": "2023-08-17 23:38:53" } ] -} - -{ - "bodyFmt": "PutDB", - "bodyKey": "ne_license" -} - -{ +}', '{ + "retFmt": "DeleteDB", + "retMsg": "RetCode = %d operation succeeded\n\n", + "errMsg": "ErrorCode = %d operation failed: %s\n\n", + "cols": [ + { + "name": "affectedRows", + "display": "Affected rows", + "length": 11 + } + ] +}'); +INSERT INTO "mml_http_map" VALUES (33, 'OMC', 'uni', 'license', 'Delete', '/api/rest/dataManagement/v1/omc_db/ne_license', NULL, 'loc', '?loc=', '{}', '{ + "retFmt": "DeleteDB", + "retMsg": "RetCode = %d operation succeeded\n\n", + "errMsg": "ErrorCode = %d operation failed: %s\n\n", + "cols": [ + { + "name": "affectedRows", + "display": "Affected rows", + "length": 11 + } + ] +}'); +INSERT INTO "mml_http_map" VALUES (34, 'OMC', 'run', 'shell', 'Put', '/api/rest/systemCommand/v1/omc/shell', NULL, 'loc', '?loc=', '{ "bodyFmt": "PutDB", "bodyKey": "shell", "callFunc": "RunShellCommand" -} \ No newline at end of file +}', '{ + "retFmt": "DeleteDB", + "retMsg": "RetCode = %d operation succeeded\n\n", + "errMsg": "ErrorCode = %d operation failed: %s\n\n", + "cols": [ + { + "name": "affectedRows", + "display": "Affected rows", + "length": 11 + } + ] +}'); diff --git a/build/database/lite/common/mml_subscriber.sql b/build/database/lite/common/mml_subscriber.sql new file mode 100644 index 00000000..ffaf4009 --- /dev/null +++ b/build/database/lite/common/mml_subscriber.sql @@ -0,0 +1,42 @@ +-- ---------------------------- +-- Table structure for mml_subscriber +-- ---------------------------- +DROP TABLE IF EXISTS "mml_subscriber"; +CREATE TABLE "mml_subscriber" ( + "id" integer NOT NULL, + "ne_type" text(16), + "category" text(32), + "cat_display" text(64), + "operation" text(10), + "object" text(16), + "mml_display" text(128), + "param_json" text, + "status" text(255), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Records of mml_subscriber +-- ---------------------------- +INSERT INTO "mml_subscriber" VALUES (590, 'UDM', 'authdataManagement', 'Authentication Data Management', 'dsp', 'authdat', 'Display Auth Data', '[{"comment":"","display":"IMSI","filter":"","name":"imsi","optional":"false","type":"string"}]', 'Active'); +INSERT INTO "mml_subscriber" VALUES (591, 'UDM', 'authdataManagement', 'Authentication Data Management', 'add', 'authdat', 'Add Auth Data', '[{"comment":"","display":"IMSI","filter":"","name":"imsi","optional":"false","type":"string"},{"comment":"","display":"KI","filter":"","name":"ki","optional":"false","type":"string"},{"comment":"","display":"AMF","filter":"","name":"amf","optional":"false","type":"string"},{"comment":"","display":"Algo Index","filter":"0~15","name":"algo","optional":"false","type":"int"},{"comment":"","display":"OPC","filter":"","name":"opc","optional":"true","type":"string"}]', 'Active'); +INSERT INTO "mml_subscriber" VALUES (592, 'UDM', 'authdataManagement', 'Authentication Data Management', 'del', 'authdat', 'Delete Auth Data', '[{"comment":"","display":"IMSI","filter":"","name":"imsi","optional":"false","type":"string"}]', 'Active'); +INSERT INTO "mml_subscriber" VALUES (593, 'UDM', 'authdataManagement', 'Authentication Data Management', 'baa', 'authdat', 'Batch Add Auth Data', '[{"comment":"","display":"Starting IMSI","filter":"","name":"start_imsi","optional":"false","type":"string"},{"comment":"","display":"Auth Data Number","filter":"","name":"sub_num","optional":"false","type":"int"},{"comment":"","display":"KI","filter":"","name":"ki","optional":"false","type":"string"},{"comment":"","display":"AMF","filter":"","name":"amf","optional":"false","type":"string"},{"comment":"","display":"Algo Index","filter":"0~15","name":"algo","optional":"false","type":"int"},{"comment":"","display":"OPC","filter":"","name":"opc","optional":"true","type":"string"}]', 'Active'); +INSERT INTO "mml_subscriber" VALUES (594, 'UDM', 'authdataManagement', 'Authentication Data Management', 'bde', 'authdat', 'Batch Delete Auth Data', '[{"comment":"","display":"Starting IMSI","filter":"","name":"start_imsi","optional":"false","type":"string"},{"comment":"","display":"Auth Data Number","filter":"","name":"sub_num","optional":"false","type":"int"}]', 'Active'); +INSERT INTO "mml_subscriber" VALUES (595, 'UDM', 'authdataManagement', 'Authentication Data Management', 'import', 'authdat', 'Import Auth Data From File', '[{"comment":"","display":"Path File","filter":".txt","name":"path","optional":"false","type":"file"}]', 'Active'); +INSERT INTO "mml_subscriber" VALUES (596, 'UDM', 'authdataManagement', 'Authentication Data Management', 'export', 'authdat', 'Export Auth Data to File', '[{"comment":"","display":"Path File","filter":"","name":"path","optional":"false","type":"string"}]', 'Inactive'); +INSERT INTO "mml_subscriber" VALUES (597, 'UDM', 'subscriberManagement', 'Subcriber Management', 'dsp', 'udmuser', 'Display UDM Subscriber', '[{"comment":"","display":"IMSI","filter":"","name":"imsi","optional":"false","type":"string"}]', 'Active'); +INSERT INTO "mml_subscriber" VALUES (598, 'UDM', 'subscriberManagement', 'Subcriber Management', 'add', 'udmuser', 'Add UDM Subscriber', '[{"comment":"","display":"IMSI","filter":"","name":"imsi","optional":"false","type":"string"},{"comment":"","display":"MSISDN","filter":"","name":"msisdn","optional":"false","type":"string"},{"comment":"","display":"5G UE AMBR","filter":"","name":"ambr","optional":"true","type":"string"},{"comment":"","display":"5G SNSSAIs","filter":"","name":"nssai","optional":"true","type":"string"},{"comment":"","display":"5G Forbidden Areas","filter":"","name":"arfb","optional":"true","type":"string"},{"comment":"","display":"5G Service Area Restriction","filter":"","name":"sar","optional":"true","type":"string"},{"comment":"","display":"RAT Type","filter":"","name":"rat","optional":"true","type":"string"},{"comment":"","display":"Core Network","filter":"","name":"cn","optional":"true","type":"string"},{"comment":"","display":"5G SMF Selection Data","filter":"","name":"smf_sel","optional":"true","type":"string"},{"comment":"","display":"5G SM Data","filter":"","name":"sm_data","optional":"false","type":"string"},{"comment":"Specify mobile phone static IP address, and ''-'' indicates the use of dynamic IP address","display":"4G Static IP","filter":"","name":"static_ip","optional":"true","type":"string"},{"comment":"","display":"4G Context ID","filter":"","name":"context_id","optional":"true","type":"int"},{"comment":"","display":"4G APN Context","filter":"","name":"apn_context","optional":"true","type":"int"},{"comment":"","display":"4G EPS User Template Name","filter":"","name":"epstpl","optional":"true","type":"string"},{"comment":"","display":"4G EPS Flag","filter":"{\"0\":\"Disable\", \"1\":\"Enable\"}","name":"eps_flag","optional":"true","type":"enum"},{"comment":"","display":"4G EPS ODB","filter":"","name":"eps_odb","optional":"true","type":"int"},{"comment":"","display":"4G HPLMN ODB","filter":"","name":"hplmn_odb","optional":"true","type":"int"},{"comment":"","display":"4G Access Restriction Data","filter":"","name":"ard","optional":"true","type":"int"}]', 'Active'); +INSERT INTO "mml_subscriber" VALUES (599, 'UDM', 'subscriberManagement', 'Subcriber Management', 'del', 'udmuser', 'Delete Subscriber Data', '[{"comment":"","display":"IMSI","filter":"","name":"imsi","optional":"false","type":"string"}]', 'Active'); +INSERT INTO "mml_subscriber" VALUES (600, 'UDM', 'subscriberManagement', 'Subcriber Management', 'mod', 'udmuser', 'Modify Subscriber Data', '[{"comment":"","display":"IMSI","filter":"","name":"imsi","optional":"false","type":"string"},{"comment":"","display":"MSISDN","filter":"","name":"msisdn","optional":"true","type":"string"},{"comment":"","display":"5G UE AMBR","filter":"","name":"ambr","optional":"true","type":"string"},{"comment":"","display":"5G SNSSAIs","filter":"","name":"nssai","optional":"true","type":"string"},{"comment":"","display":"5G Forbidden Areas","filter":"","name":"arfb","optional":"true","type":"string"},{"comment":"","display":"5G Service Area Restriction","filter":"","name":"sar","optional":"true","type":"string"},{"comment":"","display":"RAT Type","filter":"","name":"rat","optional":"true","type":"string"},{"comment":"","display":"Core Network","filter":"","name":"cn","optional":"true","type":"string"},{"comment":"","display":"5G SMF Selection Data","filter":"","name":"smf_sel","optional":"true","type":"string"},{"comment":"","display":"5G SM Data","filter":"","name":"sm_data","optional":"true","type":"string"},{"comment":"Specify mobile phone static IP address, and ''-'' indicates the use of dynamic IP address","display":"4G Static IP","filter":"","name":"static_ip","optional":"true","type":"string"},{"comment":"","display":"4G Context ID","filter":"","name":"context_id","optional":"true","type":"int"},{"comment":"","display":"4G APN Context","filter":"","name":"apn_context","optional":"true","type":"int"},{"comment":"","display":"4G EPS User Template Name","filter":"","name":"epstpl","optional":"true","type":"string"},{"comment":"","display":"4G EPS Flag","filter":"{\"0\":\"Disable\", \"1\":\"Enable\"}","name":"eps_flag","optional":"true","type":"enum"},{"comment":"","display":"4G EPS ODB","filter":"","name":"eps_odb","optional":"true","type":"int"},{"comment":"","display":"4G HPLMN ODB","filter":"","name":"hplmn_odb","optional":"true","type":"int"},{"comment":"","display":"4G Access Restriction Data","filter":"","name":"ard","optional":"true","type":"int"}]', 'Active'); +INSERT INTO "mml_subscriber" VALUES (601, 'UDM', 'subscriberManagement', 'Subcriber Management', 'baa', 'udmuser', 'Batch Add UDM Subscriber', '[{"comment":"","display":"Starting IMSI","filter":"","name":"start_imsi","optional":"false","type":"string"},{"comment":"","display":"Starting MSISDN","filter":"","name":"start_msisdn","optional":"false","type":"string"},{"comment":"","display":"Subscriber Number","filter":"","name":"sub_num","optional":"false","type":"int"},{"comment":"","display":"5G UE AMBR","filter":"","name":"ambr","optional":"true","type":"string"},{"comment":"","display":"5G SNSSAIs","filter":"","name":"nssai","optional":"true","type":"string"},{"comment":"","display":"5G Forbidden Areas","filter":"","name":"arfb","optional":"true","type":"string"},{"comment":"","display":"5G Service Area Restriction","filter":"","name":"sar","optional":"true","type":"string"},{"comment":"","display":"RAT Type","filter":"","name":"rat","optional":"true","type":"string"},{"comment":"","display":"Core Network","filter":"","name":"cn","optional":"true","type":"string"},{"comment":"","display":"5G SMF Selection Data","filter":"","name":"smf_sel","optional":"true","type":"string"},{"comment":"","display":"5G SM Data","filter":"","name":"sm_data","optional":"false","type":"string"},{"comment":"Specify mobile phone static IP address, and ''-'' indicates the use of dynamic IP address","display":"4G Static IP","filter":"","name":"static_ip","optional":"true","type":"string"},{"comment":"","display":"4G Context ID","filter":"","name":"context_id","optional":"true","type":"int"},{"comment":"","display":"4G APN Context","filter":"","name":"apn_context","optional":"true","type":"int"},{"comment":"","display":"4G EPS User Template Name","filter":"","name":"epstpl","optional":"true","type":"string"},{"comment":"","display":"4G EPS Flag","filter":"{\"0\":\"Disable\", \"1\":\"Enable\"}","name":"eps_flag","optional":"true","type":"enum"},{"comment":"","display":"4G EPS ODB","filter":"","name":"eps_odb","optional":"true","type":"int"},{"comment":"","display":"4G HPLMN ODB","filter":"","name":"hplmn_odb","optional":"true","type":"int"},{"comment":"","display":"4G Access Restriction Data","filter":"","name":"ard","optional":"true","type":"int"}]', 'Active'); +INSERT INTO "mml_subscriber" VALUES (602, 'UDM', 'subscriberManagement', 'Subcriber Management', 'bde', 'udmuser', 'Batch Delete Subscriber Data', '[{"comment":"","display":"Starting IMSI","filter":"","name":"start_imsi","optional":"false","type":"string"},{"comment":"","display":"Subcribers Number","filter":"","name":"sub_num","optional":"false","type":"string"}]', 'Active'); +INSERT INTO "mml_subscriber" VALUES (603, 'UDM', 'subscriberManagement', 'Subcriber Management', 'bmd', 'udmuser', 'Batch Modify Subscriber Data', '[{"comment":"","display":"Starting IMSI","filter":"","name":"start_imsi","optional":"false","type":"string"},{"comment":"","display":"Subcribers Number","filter":"","name":"sub_num","optional":"false","type":"string"},{"comment":"","display":"5G UE AMBR","filter":"","name":"ambr","optional":"true","type":"string"},{"comment":"","display":"5G SNSSAIs","filter":"","name":"nssai","optional":"true","type":"string"},{"comment":"","display":"5G Forbidden Areas","filter":"","name":"arfb","optional":"true","type":"string"},{"comment":"","display":"5G Service Area Restriction","filter":"","name":"sar","optional":"true","type":"string"},{"comment":"","display":"RAT Type","filter":"","name":"rat","optional":"true","type":"string"},{"comment":"","display":"Core Network","filter":"","name":"cn","optional":"true","type":"string"},{"comment":"","display":"5G SMF Selection Data","filter":"","name":"smf_sel","optional":"true","type":"string"},{"comment":"","display":"5G SM Data","filter":"","name":"sm_data","optional":"true","type":"string"},{"comment":"Specify mobile phone static IP address, and ''-'' indicates the use of dynamic IP address","display":"4G Static IP","filter":"","name":"static_ip","optional":"true","type":"string"},{"comment":"","display":"4G Context ID","filter":"","name":"context_id","optional":"true","type":"int"},{"comment":"","display":"4G APN Context","filter":"","name":"apn_context","optional":"true","type":"int"},{"comment":"","display":"4G EPS User Template Name","filter":"","name":"epstpl","optional":"true","type":"string"},{"comment":"","display":"4G EPS Flag","filter":"{\"0\":\"Disable\", \"1\":\"Enable\"}","name":"eps_flag","optional":"true","type":"enum"},{"comment":"","display":"4G EPS ODB","filter":"","name":"eps_odb","optional":"true","type":"int"},{"comment":"","display":"4G HPLMN ODB","filter":"","name":"hplmn_odb","optional":"true","type":"int"},{"comment":"","display":"4G Access Restriction Data","filter":"","name":"ard","optional":"true","type":"int"}]', 'Active'); +INSERT INTO "mml_subscriber" VALUES (604, 'UDM', 'subscriberManagement', 'Subcriber Management', 'import', 'udmuser', 'Import Subscriber Data From File', '[{"comment":"","display":"Path File","filter":".txt","name":"path","optional":"false","type":"file"}]', 'Active'); +INSERT INTO "mml_subscriber" VALUES (605, 'UDM', 'subscriberManagement', 'Subcriber Management', 'upload', 'udmuser', 'Upload Subscriber Data', '[{"comment":"","display":"Path File","filter":".txt","name":"path","optional":"false","type":"file"}]', 'Inactive'); +INSERT INTO "mml_subscriber" VALUES (606, 'UDM', 'subscriberManagement', 'Subcriber Management', 'export', 'udmuser', 'Export Subscriber Data to File', '[{"comment":"","display":"Path File","filter":"","name":"path","optional":"false","type":"string"}]', 'Inactive'); +INSERT INTO "mml_subscriber" VALUES (607, 'UDM', 'subscriberManagement', 'Subcriber Management', 'sync', 'start', 'Sync UDM Data From Public UDM', 'null', 'Inactive'); +INSERT INTO "mml_subscriber" VALUES (608, 'UDM', 'subscriberManagement', 'Subcriber Management', 'sync', 'state', 'Query State of Sync Task', 'null', 'Inactive'); +INSERT INTO "mml_subscriber" VALUES (609, 'UDM', 'other', 'Other', 'set suci', '', 'Set SUCI', '[{"comment":"","display":"ID","filter":"","name":"id","optional":"false","type":"string"},{"comment":"","display":"Scheme","filter":"","name":"scheme","optional":"false","type":"string"},{"comment":"","display":"Private Key","filter":"","name":"privatekey","optional":"false","type":"string"},{"comment":"","display":"Public Key","filter":"","name":"publickey","optional":"false","type":"string"}]', 'Active'); +INSERT INTO "mml_subscriber" VALUES (610, 'UDM', 'other', 'Other', 'set op', '', 'Set OP', '[{"comment":"","display":"ID","filter":"","name":"id","optional":"false","type":"string"},{"comment":"","display":"Value","filter":"","name":"value","optional":"false","type":"string"}]', 'Active'); +INSERT INTO "mml_subscriber" VALUES (611, 'UDM', 'other', 'Other', 'dec key', '', 'Check Key Profile', 'null', 'Active'); diff --git a/build/database/lite/common/mml_system.sql b/build/database/lite/common/mml_system.sql new file mode 100644 index 00000000..6aaf1aec --- /dev/null +++ b/build/database/lite/common/mml_system.sql @@ -0,0 +1,82 @@ +-- ---------------------------- +-- Table structure for mml_system +-- ---------------------------- +DROP TABLE IF EXISTS "mml_system"; +CREATE TABLE "mml_system" ( + "id" integer NOT NULL, + "ne_type" text(16), + "category" text(32), + "cat_display" text(64), + "operation" text(10), + "object" text(16), + "mml_display" text(128), + "object_type" text(16), + "param_json" text, + "status" text(255), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- 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'); diff --git a/build/database/lite/common/ne_config.sql b/build/database/lite/common/ne_config.sql new file mode 100644 index 00000000..22a9f361 --- /dev/null +++ b/build/database/lite/common/ne_config.sql @@ -0,0 +1,143 @@ +-- ---------------------------- +-- Table structure for ne_config +-- ---------------------------- +DROP TABLE IF EXISTS "ne_config"; +CREATE TABLE "ne_config" ( + "id" integer NOT NULL, + "ne_type" text(32) NOT NULL, + "param_name" text(32) NOT NULL, + "param_display" text(40), + "param_type" text(40), + "param_json" text NOT NULL, + "param_sort" integer(11), + "param_perms" text(32), + "update_time" integer(20), + "visible" text(12), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table ne_config +-- ---------------------------- +CREATE INDEX "idx_netype_paramname" +ON "ne_config" ( + "ne_type" ASC, + "param_name" ASC +); + +-- ---------------------------- +-- Records of ne_config +-- ---------------------------- +INSERT INTO "ne_config" VALUES (1, 'AMF', 'system', 'System Config', 'list', '[{"access":"read-write","comment":"","display":"AMF Name","filter":"0~64","name":"amfName","type":"string","value":"AMF","visible":"self"},{"access":"read-write","comment":"0~255","display":"Relative Capacity","filter":"0~255","name":"relativeCapacity","type":"int","value":"255","visible":"self"},{"access":"read-write","comment":"","display":"SBI Scheme","filter":"{\"0\":\"http\",\"1\":\"https\"}","name":"sbiScheme","type":"enum","value":"0"},{"access":"read-write","comment":"","display":"SBI Server IP","filter":"0~64","name":"sbiServerIp","type":"string","value":"192.168.1.183","visible":"self"},{"access":"read-write","comment":"0~65535","display":"SBI Server Port","filter":"0~65535","name":"sbiServerPort","type":"int","value":"8080"},{"access":"read-write","comment":"","display":"NRF Enabled","filter":"{\"0\":\"false\",\"1\":\"true\"}","name":"nrfEnabled","type":"bool","value":"0"},{"access":"read-write","comment":"","display":"NRF URI","filter":"0~64","name":"nrfUri","type":"string","value":"http://172.16.5.180:8080"},{"access":"read-write","comment":"","display":"AUSF URI","filter":"0~64","name":"ausfUri","type":"string","value":"http://172.16.5.130:8080"},{"access":"read-write","comment":"","display":"UDM URI","filter":"0~64","name":"udmUri","type":"string","value":"http://172.16.5.140:8080"},{"access":"read-write","comment":"","display":"SMF URI","filter":"0~64","name":"smfUri","type":"string","value":"http://172.16.5.150:8080"},{"access":"read-write","comment":"","display":"PCF URI","filter":"0~64","name":"pcfUri","type":"string","value":"http://172.16.5.160:8080"},{"access":"read-write","comment":"","display":"Backup AUSF URI","filter":"0~64","name":"backupAusfUri","type":"string","value":"http://172.16.5.131:8080"},{"access":"read-write","comment":"","display":"Backup UDM URI","filter":"0~64","name":"backupUdmUri","type":"string","value":"http://172.16.5.141:8080"},{"access":"read-write","comment":"","display":"Backup SMF URI","filter":"0~64","name":"backupSmfUri","type":"string","value":"http://172.16.5.151:8080"},{"access":"read-write","comment":"","display":"Backup PCF URI","filter":"0~64","name":"backupPcfUri","type":"string","value":"http://172.16.5.161:8080"},{"access":"read-write","comment":"","display":"LMF URI","filter":"0~64","name":"lmfUri","type":"string","value":"http://172.16.5.200:8080"},{"access":"read-write","comment":"","display":"NEF URI","filter":"0~64","name":"nefUri","type":"string","value":"http://172.16.5.210:8080"},{"access":"read-write","comment":"","display":"IMEI Restriction Enabled","filter":"{\"0\":\"false\",\"1\":\"true\"}","name":"imeiRestrictionEnabled","type":"bool","value":"0"},{"access":"read-write","comment":"","display":"Allowed IMEI Prefix","filter":"0~128","name":"allowedImeiPrefix","type":"string","value":"869583045"},{"access":"read-write","comment":"","display":"DNN Correction Enabled","filter":"{\"0\":\"false\",\"1\":\"true\"}","name":"dnnCorrectionEnabled","type":"bool","value":"0"},{"access":"read-write","comment":"","display":"Default DNN","filter":"0~64","name":"defaultDnn","type":"string","value":"internet"},{"access":"read-write","comment":"","display":"Integrity Algorithm","filter":"{\"0\":\"NIA0\",\"1\":\"NIA1\",\"2\":\"NIA2\",\"3\":\"NIA3\"}","name":"integrityAlgorithm","type":"enum","value":"2"},{"access":"read-write","comment":"","display":"Ciphering Algorithm","filter":"{\"0\":\"NEA0\",\"1\":\"NEA1\",\"2\":\"NEA2\",\"3\":\"NEA3\"}","name":"cipheringAlgorithm","type":"enum","value":"0"},{"access":"read-write","comment":"","display":"T3502","filter":"1~65535","name":"t3502","type":"int","value":"720"},{"access":"read-write","comment":"","display":"T3512","filter":"1~65535","name":"t3512","type":"int","value":"3600"},{"access":"read-write","comment":"","display":"T3513","filter":"1~65535","name":"t3513","type":"int","value":"2"},{"access":"read-write","comment":"","display":"T3522","filter":"1~65535","name":"t3522","type":"int","value":"6"},{"access":"read-write","comment":"","display":"T3550","filter":"1~65535","name":"t3550","type":"int","value":"6"},{"access":"read-write","comment":"","display":"T3555","filter":"1~65535","name":"t3555","type":"int","value":"6"},{"access":"read-write","comment":"","display":"T3560","filter":"1~65535","name":"t3560","type":"int","value":"6"},{"access":"read-write","comment":"","display":"T3565","filter":"1~65535","name":"t3565","type":"int","value":"6"},{"access":"read-write","comment":"","display":"T3570","filter":"1~65535","name":"t3570","type":"int","value":"6"}]', 1, '', 1741848584716, 'public'); +INSERT INTO "ne_config" VALUES (2, 'AMF', 'association', 'TNL Association List', 'array', '[{"access":"read-only","comment":"0~15","display":"Index","filter":"0~15","name":"index","type":"int","value":"0"},{"access":"read-write","comment":"","display":"NGAP IP","filter":"0~64","name":"ngapIp","type":"string","value":"192.168.1.183"},{"access":"read-write","comment":"0~65535","display":"NGAP SCTP Port","filter":"0~65535","name":"ngapSctpPort","type":"int","value":"38412"},{"access":"read-write","comment":"0~255","display":"Weight","filter":"0~255","name":"weightFactor","type":"int","value":"255"}]', 3, '', 1741848584729, 'self'); +INSERT INTO "ne_config" VALUES (3, 'AMF', 'guami', 'GUAMI List', 'array', '[{"access":"read-only","comment":"0~15","display":"Index","filter":"0~15","name":"index","type":"int","value":"0"},{"access":"read-write","comment":"","display":"PLMN ID","filter":"^[0-9]{5,6}$","name":"plmnId","type":"regex","value":"00101"},{"access":"read-write","comment":"0~255","display":"Region ID","filter":"0~255","name":"regionId","type":"int","value":"1"},{"access":"read-write","comment":"0~1023","display":"Set ID","filter":"0~1023","name":"setId","type":"int","value":"1"},{"access":"read-write","comment":"0~63","display":"Pointer","filter":"0~63","name":"pointer","type":"int","value":"1"}]', 5, '', 1741848584734, 'self'); +INSERT INTO "ne_config" VALUES (4, 'AMF', 'tai', 'TAI List', 'array', '[{"access":"read-only","comment":"0~15","display":"Index","filter":"0~15","name":"index","type":"int","value":"0"},{"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"}]', 7, '', 1741848584738, 'public'); +INSERT INTO "ne_config" VALUES (5, 'AMF', 'slice', 'Slice List', 'array', '[{"access":"read-only","comment":"0~15","display":"Index","filter":"0~15","name":"index","type":"int","value":"0"},{"access":"read-write","comment":"","display":"PLMN ID","filter":"^[0-9]{5,6}$","name":"plmnId","type":"regex","value":"00101"},{"access":"read-write","comment":"0~127","display":"SST","filter":"0~127","name":"sst","type":"int","value":"1"},{"access":"read-write","comment":"","display":"SD","filter":"^[A-Fa-f0-9]{6}","name":"sd","type":"regex","value":"000001"}]', 9, '', 1741848584742, 'public'); +INSERT INTO "ne_config" VALUES (6, 'AMF', 'systemFeatOpt', 'System FeatOpt', 'list', '[{"access":"read-write","comment":"","display":"dnnCorrectionEnabled","filter":"{\"0\":\"false\",\"1\":\"true\"}","name":"dnnCorrectionEnabled","type":"bool","value":"0"},{"access":"read-write","comment":"","display":"gutiReallocationInPRUEnabled","filter":"{\"0\":\"false\",\"1\":\"true\"}","name":"gutiReallocationInPRUEnabled","type":"bool","value":"0"},{"access":"read-write","comment":"","display":"ueRadioCapabilityMatchEnabled","filter":"{\"0\":\"false\",\"1\":\"true\"}","name":"ueRadioCapabilityMatchEnabled","type":"bool","value":"0"},{"access":"read-write","comment":"","display":"supportFollowOnRequestIndication","filter":"{\"0\":\"false\",\"1\":\"true\"}","name":"supportFollowOnRequestIndication","type":"bool","value":"0"},{"access":"read-write","comment":"","display":"triggerInitCtxSetupForAllNASProc","filter":"{\"0\":\"false\",\"1\":\"true\"}","name":"triggerInitCtxSetupForAllNASProc","type":"bool","value":"0"},{"access":"read-write","comment":"","display":"supportAllAllowedNssai","filter":"{\"0\":\"false\",\"1\":\"true\"}","name":"supportAllAllowedNssai","type":"bool","value":"0"},{"access":"read-write","comment":"","display":"implicitUnsubscribeEnabled","filter":"{\"0\":\"false\",\"1\":\"true\"}","name":"implicitUnsubscribeEnabled","type":"bool","value":"0"},{"access":"read-write","comment":"","display":"supportRRCInactiveReport","filter":"{\"0\":\"false\",\"1\":\"true\"}","name":"supportRRCInactiveReport","type":"bool","value":"0"},{"access":"read-write","comment":"","display":"supportMappedSecurityContext","filter":"{\"0\":\"false\",\"1\":\"true\"}","name":"supportMappedSecurityContext","type":"bool","value":"0"},{"access":"read-write","comment":"","display":"optimizeSignalingProcedure","filter":"{\"0\":\"false\",\"1\":\"true\"}","name":"optimizeSignalingProcedure","type":"bool","value":"0"},{"access":"read-write","comment":"","display":"reAuthInServiceRequestProc","filter":"{\"0\":\"false\",\"1\":\"true\"}","name":"reAuthInServiceRequestProc","type":"bool","value":"0"},{"access":"read-write","comment":"","display":"skipGetSubscribedNssai","filter":"{\"0\":\"false\",\"1\":\"true\"}","name":"skipGetSubscribedNssai","type":"bool","value":"0"},{"access":"read-write","comment":"","display":"forceIdentityRequest","filter":"{\"0\":\"false\",\"1\":\"true\"}","name":"forceIdentityRequest","type":"bool","value":"0"},{"access":"read-write","comment":"","display":"cagEnabled","filter":"{\"0\":\"false\",\"1\":\"true\"}","name":"cagEnabled","type":"bool","value":"0"},{"access":"read-write","comment":"","display":"imeiRestrictionEnabled","filter":"{\"0\":\"false\",\"1\":\"true\"}","name":"imeiRestrictionEnabled","type":"bool","value":"0"},{"access":"read-write","comment":"","display":"checkSliceInTaEnabled","filter":"{\"0\":\"false\",\"1\":\"true\"}","name":"checkSliceInTaEnabled","type":"bool","value":"0"},{"access":"read-write","comment":"","display":"uePolicyEnabled","filter":"{\"0\":\"false\",\"1\":\"true\"}","name":"uePolicyEnabled","type":"bool","value":"0"},{"access":"read-write","comment":"","display":"smsOverNasEnabled","filter":"{\"0\":\"false\",\"1\":\"true\"}","name":"smsOverNasEnabled","type":"bool","value":"0"},{"access":"read-write","comment":"","display":"statusReportToOmc","filter":"{\"0\":\"false\",\"1\":\"true\"}","name":"statusReportToOmc","type":"bool","value":"0"},{"access":"read-write","comment":"","display":"statusReportEnabled","filter":"{\"0\":\"false\",\"1\":\"true\"}","name":"statusReportEnabled","type":"bool","value":"0"},{"access":"read-write","comment":"","display":"getTraceDataFromUdm","filter":"{\"0\":\"false\",\"1\":\"true\"}","name":"getTraceDataFromUdm","type":"bool","value":"0"},{"access":"read-write","comment":"","display":"disableLocationReportControl","filter":"{\"0\":\"false\",\"1\":\"true\"}","name":"disableLocationReportControl","type":"bool","value":"0"},{"access":"read-write","comment":"","display":"sendDnnOiToSmf","filter":"{\"0\":\"false\",\"1\":\"true\"}","name":"sendDnnOiToSmf","type":"bool","value":"0"},{"access":"read-write","comment":"","display":"udsfEnabled","filter":"{\"0\":\"false\",\"1\":\"true\"}","name":"udsfEnabled","type":"bool","value":"0"},{"access":"read-write","comment":"","display":"enableHttpPprof","filter":"{\"0\":\"false\",\"1\":\"true\"}","name":"enableHttpPprof","type":"bool","value":"0"}]', 11, '', 1741848584746, 'public'); +INSERT INTO "ne_config" VALUES (7, 'AMF', 'gnbList', 'Gnb List Config', 'array', '[{"access":"read-only","comment":"0~128","display":"Index","filter":"0~128","name":"index","type":"int","value":"0"},{"access":"read-write","comment":"text content length 0~64","display":"GNB Name","filter":"0~64","name":"name","type":"string","value":""},{"access":"read-write","comment":"text content length 0~64","display":"GNB Address","filter":"0~64","name":"address","type":"string","value":""},{"access":"read-write","comment":"location description. Prohibition of spaces, length of text content 0-64","display":"Position","filter":"0~64","name":"position","type":"string","value":""}]', 13, '', 1741848584751, 'hide'); +INSERT INTO "ne_config" VALUES (8, 'AMF', 'imeiWhitelist', 'IMEI White List', 'array', '[{"access":"read-only","comment":"0~65535","display":"Index","filter":"0~65535","name":"index","type":"int","value":"0"},{"access":"read-write","comment":"","display":"IMEI Prefix","filter":"^[a-zA-Z0-9]{0,16}$","name":"imeiPrefixValue","type":"string","value":""}]', 15, '', 1741848584755, 'public'); +INSERT INTO "ne_config" VALUES (20, 'AUSF', 'system', 'System', 'list', '[{"access":"read-write","comment":"","display":"Service IP","filter":"","name":"serviceIP","type":"ipv4","value":"172.16.5.130"},{"access":"read-write","comment":"","display":"Service Port","filter":"0~65535","name":"servicePort","type":"int","value":"8080"},{"access":"read-write","comment":"","display":"Scheme","filter":"{\"0\":\"HTTP\", \"1\":\"HTTPS\"}","name":"scheme","type":"enum","value":"http"},{"access":"read-write","comment":"","display":"NRF URI","filter":"","name":"nrfUri","type":"string","value":"http://172.16.5.180:8080"},{"access":"read-write","comment":"","display":"UDM URI","filter":"","name":"udmUri","type":"string","value":"http://172.16.5.140:8080"},{"access":"read-write","comment":"","display":"Group ID","filter":"","name":"groupId","type":"string","value":"0"}]', 1, '', 1719831209173, 'public'); +INSERT INTO "ne_config" VALUES (40, 'IMS', 'system', 'System', 'list', '[{"access":"read-write","comment":"","display":"Label","filter":"","name":"label","type":"string","value":"ims-core"},{"access":"read-only","comment":"","display":"HPLMN MCC","filter":"","name":"hplmnMCC","type":"string","value":"001"},{"access":"read-only","comment":"","display":"HPLMN MNC","filter":"","name":"hplmnMNC","type":"string","value":"01"},{"access":"read-write","comment":"","display":"Local Network IPv4","filter":"","name":"LocalNetworkIPv4","type":"ipv4","value":"172.16.5.110"},{"access":"read-write","comment":"","display":"Public Network IPv4","filter":"","name":"serviceIP","type":"ipv4","value":"172.16.5.110"},{"access":"read-write","comment":"","display":"Public Network IPv6","filter":"","name":"serviceIPv6","type":"ipv6","value":""},{"access":"read-only","comment":"","display":"Domain Name 1","filter":"","name":"domainName1","type":"string","value":"ims.mnc001.mcc001.3gppnetwork.org"},{"access":"read-only","comment":"","display":"Domain Name 2","filter":"","name":"domainName2","type":"string","value":""},{"access":"read-only","comment":"","display":"Domain Name 3","filter":"","name":"domainName3","type":"string","value":""},{"access":"read-only","comment":"","display":"Domain Name 4","filter":"","name":"domainName4","type":"string","value":""},{"access":"read-write","comment":"","display":"MultiIPStack Indicator","filter":"{\"0\":\"false\", \"1\":\"true\"}","name":"multiIPStackInd","type":"bool","value":"false"},{"access":"read-write","comment":"","display":"Register Timer","filter":"120~1000000","name":"registerTimer","type":"int","value":"7200"},{"access":"read-write","comment":"","display":"Max Call Duration","filter":"1800~1000000","name":"maxCallDuration","type":"int","value":"43200"},{"access":"read-write","comment":"","display":"Internal SMS Indicator","filter":"{\"0\":\"false\", \"1\":\"true\"}","name":"internalSMSInd","type":"bool","value":"false"},{"access":"read-write","comment":"","display":"Internal CDR Indicator","filter":"{\"0\":\"false\", \"1\":\"true\"}","name":"internalCDRInd","type":"bool","value":"false"},{"access":"read-write","comment":"","display":"Internal KPI Indicator","filter":"{\"0\":\"false\", \"1\":\"true\"}","name":"internalKPIInd","type":"bool","value":"false"},{"access":"read-write","comment":"","display":"PCF IP Address","filter":"","name":"pcfIP","type":"ipv4","value":"172.16.5.160"}]', 1, '', 1723716862092, 'public'); +INSERT INTO "ne_config" VALUES (41, 'IMS', 'plmn', 'PLMN List', 'array', '[{"access":"read-only","comment":"0~3","display":"Index","filter":"0~3","name":"index","type":"int","value":"0"},{"access":"read-write","comment":"","display":"MCC","filter":"^[0-9]{3}$","name":"mcc","type":"regex","value":"001"},{"access":"read-write","comment":"","display":"MNC","filter":"^[0-9]{2,3}$","name":"mnc","type":"regex","value":"01"},{"access":"read-only","comment":"","display":"Domain","filter":"0~128","name":"domain","type":"string","value":"ims.mnc001.mcc001.3gppnetwork.org"}]', 3, '', 1723716862107, 'public'); +INSERT INTO "ne_config" VALUES (42, 'IMS', 'mmtel_dialplan', 'MMTEL Dialplan', 'array', '[{"access":"read-only","comment":"0~15","display":"Index","filter":"0~15","name":"index","type":"int","value":"0"},{"access":"read-only","comment":"","display":"NaName","filter":"0~128","name":"naName","type":"string","value":""},{"access":"read-write","comment":"","display":"Title","filter":"0~128","name":"title","type":"string","value":""},{"access":"read-write","comment":"","display":"Method","filter":"0-2","name":"method","type":"string","value":"0"},{"access":"read-write","comment":"","display":"Prefix","filter":"0~128","name":"prefix","type":"string","value":""},{"access":"read-write","comment":"","display":"Start","filter":"0~128","name":"start","type":"string","value":""},{"access":"read-write","comment":"","display":"End","filter":"0~128","name":"end","type":"string","value":""},{"access":"read-write","comment":"","display":"Attrib","filter":"0~128","name":"attrib","type":"string","value":""},{"access":"read-write","comment":"","display":"Number Len","filter":"0~128","name":"numberLen","type":"string","value":""},{"access":"read-write","comment":"","display":"Rsc","filter":"0~128","name":"rsc","type":"string","value":""},{"access":"read-write","comment":"","display":"E164 Nai","filter":"0~128","name":"e164Nai","type":"string","value":""},{"access":"read-write","comment":"","display":"E164 Delete","filter":"0~128","name":"e164Delete","type":"string","value":""},{"access":"read-write","comment":"","display":"E164 Insert","filter":"0~128","name":"e164Insert","type":"string","value":""},{"access":"read-write","comment":"Enable: Close/Open","display":"Admin State","filter":"{\"0\":\"Close\", \"1\":\"Open\"}","name":"adminState","type":"enum","value":"0"}]', 5, '', 1723716862110, 'public'); +INSERT INTO "ne_config" VALUES (43, 'IMS', 'ds_system', 'DS System', 'list', '[{"access":"read-write","comment":"","display":"Dispatch System Indicator","filter":"{\"0\":\"false\", \"1\":\"true\"}","name":"dispatchSystemInd","type":"bool","value":"false"},{"access":"read-write","comment":"","display":"Transcode Indicator","filter":"{\"0\":\"false\", \"1\":\"true\"}","name":"transcodeInd","type":"bool","value":"false"},{"access":"read-write","comment":"","display":"Dispatch System IPv4","filter":"","name":"dispatchSystemIP","type":"ipv4","value":"1.0.0.1"},{"access":"read-write","comment":"","display":"Dispatch System Port","filter":"","name":"dispatchSystemPort","type":"int","value":"5060"}]', 7, '', 1723716862113, 'public'); +INSERT INTO "ne_config" VALUES (60, 'MME', 'system', 'System Config', 'list', '[{"access":"read-write","comment":"true|false","display":"CSFB Enabled","filter":"{\"0\":\"false\",\"1\":\"true\"}","name":"csfbEnabled","type":"bool","value":"false"},{"access":"read-write","comment":"true|false","display":"VoLTE Enabled","filter":"{\"0\":\"false\",\"1\":\"true\"}","name":"volteEnabled","type":"bool","value":"false"},{"access":"read-write","comment":"0~128","display":"ME IDENTITY CHECK PATH","filter":"0~128","name":"meIdentityCheckPath","type":"string","value":"/usr/local/etc/mme/me_identity_check.csv"},{"access":"read-write","comment":"0~128","display":"IMEI WHITE LIST PATH","filter":"0~128","name":"imeiWhiteListPath","type":"string","value":"/usr/local/etc/mme/imei_whitelist.csv"},{"access":"read-write","comment":"0~64","display":"DNS SERVER IP","filter":"0~64","name":"dnsServerIp","type":"string","value":"127.0.0.53"},{"access":"read-write","comment":"0~64","display":"S1 MME IP","filter":"0~64","name":"s1MmeIp","type":"string","value":"192.168.1.179"},{"access":"read-only","comment":"0~65535","display":"S1 MME Port","filter":"0~65535","name":"s1MmePort","type":"int","value":"36412"},{"access":"read-write","comment":"0~64","display":"S11 MME IP","filter":"0~64","name":"s11MmeIp","type":"string","value":"192.168.1.179"},{"access":"read-write","comment":"0~65535","display":"S11 MME Port","filter":"0~65535","name":"s11MmePort","type":"int","value":"2123"},{"access":"read-write","comment":"0~64","display":"S10 MME IP","filter":"0~64","name":"s10MmeIp","type":"string","value":"192.168.1.178"},{"access":"read-write","comment":"0~65535","display":"S10 MME Port","filter":"0~65535","name":"s10MmePort","type":"int","value":"2123"},{"access":"read-write","comment":"0~64","display":"SGs MME IP","filter":"0~64","name":"sgsMmeIp","type":"string","value":"192.168.1.179"},{"access":"read-only","comment":"0~65535","display":"SGs MME Port","filter":"0~65535","name":"sgsMmePort","type":"int","value":"29118"},{"access":"read-write","comment":"0~100","display":"S6A MME Identity","filter":"0~100","name":"s6aIdentity","type":"string","value":"mme.epc.mnc001.mcc001.3gppnetwork.org"},{"access":"read-write","comment":"0~20","display":"S6A MME IP","filter":"0~20","name":"s6aLocalIp","type":"string","value":"172.16.5.220"},{"access":"read-write","comment":"0~20","display":"SLS MME IP","filter":"0~20","name":"slsLocalIp","type":"string","value":"172.16.5.220"},{"access":"read-write","comment":"0~20","display":"SLS REMOTE IP","filter":"0~20","name":"slsRemoteIp","type":"string","value":"172.16.5.220"},{"access":"read-write","comment":"0~20","display":"SLS REMOTE PORT","filter":"0~20","name":"slsRemotePort","type":"string","value":"9082"},{"access":"read-write","comment":"0~100","display":"SLG MME Identity","filter":"0~100","name":"slgIdentity","type":"string","value":"gmlc.epc.mnc001.mcc001.3gppnetwork.org"},{"access":"read-write","comment":"0~100","display":"SLG MME REALM","filter":"0~100","name":"slgRealm","type":"string","value":"epc.mnc001.mcc001.3gppnetwork.org"},{"access":"read-write","comment":"0~20","display":"SBC MME IP","filter":"0~20","name":"sbcLocalIp","type":"string","value":"192.168.8.220"},{"access":"read-write","comment":"0~20","display":"SV MME IP","filter":"0~20","name":"svLocalIp","type":"string","value":"172.16.5.220"},{"access":"read-write","comment":"0~20","display":"SV MME PORT","filter":"0~20","name":"svLocalPort","type":"string","value":"9082"},{"access":"read-write","comment":"0~20","display":"SV REMOTE IP","filter":"0~20","name":"svRemoteIp","type":"string","value":"172.16.5.220"},{"access":"read-write","comment":"0~20","display":"SV REMOTE PORT","filter":"0~20","name":"svRemotePort","type":"string","value":"9082"},{"access":"read-write","comment":"0~20","display":"S3 REMOTE IP","filter":"0~20","name":"s3RemoteIp","type":"string","value":"172.16.5.220"},{"access":"read-write","comment":"0~20","display":"S3 REMOTE PORT","filter":"0~20","name":"s3RemotePort","type":"string","value":"9082"}]', 1, '', 1736155729512, 'public'); +INSERT INTO "ne_config" VALUES (61, 'MME', 'gummei', 'Gummei List', 'array', '[{"access":"read","comment":"0~15","display":"Index","filter":"0~15","name":"index","type":"int","value":"0"},{"access":"read-write","comment":"^[0-9]{5,6}$","display":"PLMN ID","filter":"^[0-9]{5,6}$","name":"plmnId","type":"regex","value":"00101"},{"access":"read-write","comment":"0~65535","display":"Group ID","filter":"0~65535","name":"groupId","type":"int","value":"4"},{"access":"read-write","comment":"0~255","display":"Code","filter":"0~255","name":"code","type":"int","value":"1"}]', 3, '', 1736155729554, 'public'); +INSERT INTO "ne_config" VALUES (62, 'MME', 'tai', 'TAI List', 'array', '[{"access":"read","comment":"0~15","display":"Index","filter":"0~15","name":"index","type":"int","value":"0"},{"access":"read-write","comment":"^[0-9]{5,6}$","display":"PLMN ID","filter":"^[0-9]{5,6}$","name":"plmnId","type":"regex","value":"00101"},{"access":"read-write","comment":"0~65535","display":"TAC","filter":"0~65535","name":"tac","type":"int","value":"1"}]', 5, '', 1736155729560, 'public'); +INSERT INTO "ne_config" VALUES (63, 'MME', 'hss', 'HSS List', 'array', '[{"access":"read","comment":"0~15","display":"Index","filter":"0~15","name":"index","type":"int","value":"0"},{"access":"read-write","comment":"^[0-9]{1,15}$","display":"IMSI Prefix","filter":"^[0-9]{1,15}$","name":"imsiPre","type":"regex","value":"00101"},{"access":"read-write","comment":"0~128","display":"HSS Hostname","filter":"0~128","name":"hssHostname","type":"string","value":"hss.ims.mnc001.mcc001.3gppnetwork.org"},{"access":"read-write","comment":"0~128","display":"HSS Realm","filter":"0~128","name":"hssRealm","type":"string","value":"ims.mnc001.mcc001.3gppnetwork.org"},{"access":"read-write","comment":"SCTP|TCP","display":"Protocol","filter":"0~8","name":"protocol","type":"string","value":"SCTP"},{"access":"read-write","comment":"0~65535","display":"HSS Port","filter":"0~65535","name":"hssPort","type":"int","value":"3868"}]', 7, '', 1736155729574, 'public'); +INSERT INTO "ne_config" VALUES (64, 'MME', 'sgw', 'SGW List', 'array', '[{"access":"read","comment":"0~15","display":"Index","filter":"0~15","name":"index","type":"int","value":"0"},{"access":"read-write","comment":"^[0-9]{5,6}$","display":"PLMN ID","filter":"^[0-9]{5,6}$","name":"plmnId","type":"regex","value":"00101"},{"access":"read-write","comment":"0~65535","display":"TAC","filter":"0~65535","name":"tac","type":"int","value":"1"},{"access":"read-write","comment":"0~64","display":"SGW IP","filter":"0~64","name":"sgwIp","type":"string","value":"172.16.5.150"}]', 9, '', 1736155729580, 'public'); +INSERT INTO "ne_config" VALUES (65, 'MME', 'pgw', 'PGW List', 'array', '[{"access":"read","comment":"0~15","display":"Index","filter":"0~15","name":"index","type":"int","value":"0"},{"access":"read-write","comment":"^[0-9]{5,6}$","display":"PLMN ID","filter":"^[0-9]{5,6}$","name":"plmnId","type":"regex","value":"00101"},{"access":"read-write","comment":"0~128","display":"APN","filter":"0~128","name":"apn","type":"string","value":"internet"},{"access":"read-write","comment":"0~64","display":"PGW IP","filter":"0~64","name":"pgwIp","type":"string","value":"192.168.1.181"}]', 11, '', 1736155729592, 'public'); +INSERT INTO "ne_config" VALUES (66, 'MME', 'amf', 'AMF List', 'array', '[{"access":"read","comment":"0~15","display":"Index","filter":"0~15","name":"index","type":"int","value":"0"},{"access":"read-write","comment":"^[0-9]{5,6}$","display":"PLMN ID","filter":"^[0-9]{5,6}$","name":"plmnId","type":"regex","value":"00101"},{"access":"read-write","comment":"0~16777215","display":"TAC","filter":"0~16777215","name":"tac","type":"int","value":"1"},{"access":"read-write","comment":"0~255","display":"Region ID","filter":"0~255","name":"regionId","type":"int","value":"1"},{"access":"read-write","comment":"0~1023","display":"Set ID","filter":"0~1023","name":"setId","type":"int","value":"1"},{"access":"read-write","comment":"0~63","display":"Pointer","filter":"0~63","name":"pointer","type":"int","value":"1"},{"access":"read-write","comment":"0~64","display":"AMF IP","filter":"0~64","name":"amfIp","type":"string","value":"172.16.5.120"}]', 13, '', 1736155729597, 'public'); +INSERT INTO "ne_config" VALUES (67, 'MME', 'white_list', 'IMEI White List', 'array', '[{"access":"read","comment":"0~15","display":"Index","filter":"0~15","name":"index","type":"int","value":"0"},{"access":"read-write","comment":"0~64","display":"IMEI","filter":"0~64","name":"imei","type":"string","value":"001"}]', 17, '', 1736155729630, 'public'); +INSERT INTO "ne_config" VALUES (68, 'MME', 'roam_plmn', 'Roam Plmn List', 'array', '[{"access":"read","comment":"0~15","display":"Index","filter":"0~15","name":"index","type":"int","value":"0"},{"access":"read-write","comment":"0~64","display":"MCC","filter":"0~64","name":"mcc","type":"string","value":"001"},{"access":"read-write","comment":"0~64","display":"MNC","filter":"0~64","name":"mnc","type":"string","value":"01"}]', 15, '', 1736155729626, 'public'); +INSERT INTO "ne_config" VALUES (69, 'MME', 'enbList', 'Enb List Config', 'array', '[{"access":"read-only","comment":"0~128","display":"Index","filter":"0~128","name":"index","type":"int","value":"0"},{"access":"read-write","comment":"text content length 0~64","display":"ENB Name","filter":"0~64","name":"name","type":"string","value":""},{"access":"read-write","comment":"text content length 0~64","display":"ENB Address","filter":"0~64","name":"address","type":"string","value":""},{"access":"read-write","comment":"location description. Prohibition of spaces, length of text content 0-64","display":"Position","filter":"0~64","name":"position","type":"string","value":""}]', 19, '', 1737626779749, 'hide'); +INSERT INTO "ne_config" VALUES (80, 'MOCNGW', 'system', 'System Config', 'list', '[{"access":"read-write","comment":"","display":"S1AP South Address","filter":"0~64","name":"s1apSouthAddr","type":"string","value":"192.168.7.163"},{"access":"read-write","comment":"","display":"S1AP North Address","filter":"0~64","name":"s1apNorthAddr","type":"string","value":"192.168.8.163"},{"access":"read-write","comment":"0~65535","display":"TAC","filter":"0~65535","name":"tac","type":"int","value":"1"},{"access":"read-write","comment":"0~1048575","display":"ENB ID","filter":"0~1048575","name":"enbId","type":"int","value":"24"},{"access":"read-write","comment":"","display":"User Plane Enabled","filter":"{\"0\":\"false\",\"1\":\"true\"}","name":"userPlaneEnabled","type":"bool","value":"0"},{"access":"read-write","comment":"","display":"PFCP Address","filter":"0~64","name":"pfcpAddr","type":"string","value":"192.168.7.163"}]', 1, '', 1719831210071, 'public'); +INSERT INTO "ne_config" VALUES (81, 'MOCNGW', 'mme', 'MME List', 'array', '[{"access":"read-only","comment":"0~15","display":"Index","filter":"0~15","name":"index","type":"int","value":"0"},{"access":"read-write","comment":"","display":"S1AP Address","filter":"0~64","name":"s1apAddr","type":"string","value":"192.168.1.161"},{"access":"read-write","comment":"0~65535","display":"S1AP Port","filter":"0~65535","name":"s1apPort","type":"int","value":"36412"},{"access":"read-write","comment":"","display":"PLMN ID","filter":"^[0-9]{5,6}$","name":"plmnId","type":"regex","value":"00101"}]', 3, '', 1719831210273, 'public'); +INSERT INTO "ne_config" VALUES (82, 'MOCNGW', 'upgw', 'UPGW Config', 'list', '[{"access":"read-write","comment":"","display":"PFCP Address","filter":"0~64","name":"pfcpAddr","type":"string","value":"192.168.1.159"},{"access":"read-write","comment":"0~65535","display":"PFCP Port","filter":"0~65535","name":"pfcpPort","type":"int","value":"8805"},{"access":"read-write","comment":"","display":"GTP-U South Address","filter":"0~64","name":"gtpuSouthAddr","type":"string","value":"10.10.1.2"},{"access":"read-write","comment":"","display":"GTP-U North Address","filter":"0~64","name":"gtpuNorthAddr","type":"string","value":"192.168.7.123"}]', 5, '', 1719831210320, 'public'); +INSERT INTO "ne_config" VALUES (100, 'N3IWF', 'system', 'System', 'list', '[{"access":"read-write","comment":"","display":"IKEBindAddress","filter":"","name":"ikeBindAddr","type":"string","value":"192.168.12.160"},{"access":"read-write","comment":"","display":"GTPBindAddress","filter":"","name":"gtpBindAddr","type":"string","value":"192.168.12.161"},{"access":"read-write","comment":"","display":"FQDN","filter":"","name":"fqdn","type":"string","value":"n3iwf.5gc.mnc00.mcc460.pub.3gppnetwork.org"},{"access":"read-write","comment":"","display":"InternalIP","filter":"","name":"internalIP","type":"string","value":"172.16.1.190"},{"access":"read-write","comment":"","display":"UdmIPAddrPort","filter":"","name":"udmAddr","type":"string","value":"172.16.1.140:8080"},{"access":"read-write","comment":"","display":"SmfIPAddress","filter":"","name":"smfIPAddr","type":"string","value":"172.16.1.150"},{"access":"read-write","comment":"","display":"N3IPAddress","filter":"","name":"n3IPAddr","type":"string","value":"192.168.1.160"},{"access":"read-write","comment":"","display":"N6IPAddress","filter":"","name":"n6IPAddr","type":"string","value":"192.168.1.161"}]', 1, '', 1719831210358, 'public'); +INSERT INTO "ne_config" VALUES (120, 'NRF', 'system', 'System', 'list', '[{"access":"read-write","comment":"","display":"Service IP","filter":"","name":"serviceIP","type":"ipv4","value":"172.16.5.180"},{"access":"read-write","comment":"","display":"Service Port","filter":"0~65535","name":"servicePort","type":"int","value":"8080"},{"access":"read-write","comment":"","display":"Scheme","filter":"{\"0\":\"HTTP\", \"1\":\"HTTPS\"}","name":"scheme","type":"enum","value":"0"}]', 1, 'put', 1719831210397, 'public'); +INSERT INTO "ne_config" VALUES (121, 'NRF', 'registeredNFs', 'Registered NFs', 'array', '[{"access":"read-only","comment":"","display":"Index","filter":"1~256","name":"index","type":"int","value":"1"},{"access":"read-only","comment":"","display":"NF Type","filter":"^.{1,128}$","name":"nfType","type":"string","value":""},{"access":"read-only","comment":"","display":"Status","filter":"^.{1,128}$","name":"status","type":"string","value":""},{"access":"read-only","comment":"","display":"NF ID","filter":"^.{1,128}$","name":"nfId","type":"string","value":""},{"access":"read-only","comment":"","display":"IP Address","filter":"^.{1,128}$","name":"ipAddress","type":"string","value":""}]', 3, 'get', 1719831210443, 'public'); +INSERT INTO "ne_config" VALUES (140, 'NSSF', 'general', 'General', 'list', '[{"access":"read-write","comment":"","display":"NSSF Name","filter":"","name":"nssfName","type":"string","value":""},{"access":"read-write","comment":"","display":"NRF URI","filter":"","name":"nrfUri","type":"string","value":""},{"access":"read-write","comment":"","display":"Log Level","filter":"","name":"logLevel","type":"string","value":"error"},{"access":"read-write","comment":"","display":"NF ID","filter":"","name":"nfId","type":"string","value":""},{"access":"read-write","comment":"","display":"System ID","filter":"","name":"systemId","type":"int","value":"0"}]', 1, '', 1719831210478, 'public'); +INSERT INTO "ne_config" VALUES (141, 'NSSF', 'sbi', 'SBI', 'list', '[{"access":"read-write","comment":"","display":"Scheme","filter":"","name":"scheme","type":"string","value":"http"},{"access":"read-write","comment":"","display":"Register IPv4","filter":"","name":"registerIpv4","type":"string","value":""},{"access":"read-write","comment":"","display":"Binding IPv4","filter":"","name":"bindingIpv4","type":"string","value":""},{"access":"read-write","comment":"","display":"Register IPv6","filter":"","name":"registerIpv6","type":"string","value":""},{"access":"read-write","comment":"","display":"Binding IPv6","filter":"","name":"bindingIpv6","type":"string","value":""},{"access":"read-write","comment":"","display":"IP Type","filter":"","name":"ipType","type":"string","value":"ipv4"},{"access":"read-write","comment":"","display":"Port","filter":"","name":"port","type":"int","value":"8080"},{"access":"read-write","comment":"","display":"Telnet IPv4","filter":"","name":"telnetIpv4","type":"string","value":""},{"access":"read-write","comment":"","display":"Telnet IPv6","filter":"","name":"telnetIpv6","type":"string","value":""},{"access":"read-write","comment":"","display":"Telnet Port","filter":"","name":"telnetPort","type":"int","value":"4100"}]', 3, '', 1719831210567, 'public'); +INSERT INTO "ne_config" VALUES (142, 'NSSF', 'supportedNetworkSliceList', 'Supported Network Slice List', '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":"","name":"mcc","type":"string","value":"001"},{"access":"read-write","comment":"","display":"MNC","filter":"","name":"mnc","type":"string","value":"01"},{"access":"read-write","comment":"","display":"TAC","filter":"","name":"tac","type":"string","value":""},{"access":"read-write","comment":"","display":"Supported SST","filter":"","name":"supportedSst","type":"int","value":""},{"access":"read-write","comment":"","display":"Supported SD","filter":"","name":"supportedSd","type":"string","value":""},{"access":"read-write","comment":"","display":"Restricted SST","filter":"","name":"restrictedSst","type":"int","value":""},{"access":"read-write","comment":"","display":"Restricted SD","filter":"","name":"restrictedSd","type":"string","value":""},{"access":"read-write","comment":"","display":"NRF ID","filter":"","name":"nrfId","type":"string","value":""},{"access":"read-write","comment":"","display":"NSI ID","filter":"","name":"nsiId","type":"string","value":""},{"access":"read-write","comment":"","display":"Access Type","filter":"","name":"accessType","type":"string","value":""},{"access":"read-write","comment":"","display":"AMF Set ID","filter":"","name":"amfSetId","type":"string","value":""}]', 5, '', 1719831210617, 'public'); +INSERT INTO "ne_config" VALUES (143, 'NSSF', 'plmnMappingList', 'PLMN Mapping List', 'array', '[{"access":"read-only","comment":"1~32","display":"Index","filter":"1~32","name":"index","type":"int","value":"1"},{"access":"read-write","comment":"","display":"Operator Name","filter":"","name":"operatorName","type":"string","value":""},{"access":"read-write","comment":"","display":"MCC","filter":"","name":"mcc","type":"string","value":"001"},{"access":"read-write","comment":"","display":"MNC","filter":"","name":"mnc","type":"string","value":"02"},{"access":"read-write","comment":"","display":"Serving SNSSAI SST","filter":"","name":"servingSnssaiSst","type":"int","value":"1"},{"access":"read-write","comment":"","display":"Serving SNSSAI SD","filter":"","name":"servingSnssaiSd","type":"string","value":"1"},{"access":"read-write","comment":"","display":"Home SNSSAI SST","filter":"","name":"homeSnssaiSst","type":"int","value":"1"},{"access":"read-write","comment":"","display":"Home SNSSAI SD","filter":"","name":"homeSnssaiSd","type":"string","value":"1"}]', 7, '', 1719831210699, 'public'); +INSERT INTO "ne_config" VALUES (160, 'PCF', 'system', 'System', 'list', '[{"access":"read-write","comment":"","display":"Service IP","filter":"","name":"serviceIP","type":"ipv4","value":"172.16.5.160"},{"access":"read-write","comment":"","display":"Service Port","filter":"0~65535","name":"servicePort","type":"int","value":"8080"},{"access":"read-write","comment":"","display":"Scheme","filter":"{\"0\":\"HTTP\", \"1\":\"HTTPS\"}","name":"scheme","type":"enum","value":"0"},{"access":"read-write","comment":"","display":"NRF URI","filter":"","name":"nrfUri","type":"string","value":"http://172.16.5.180:8080"},{"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"}]', 1, '', 1719831210756, 'public'); +INSERT INTO "ne_config" VALUES (161, 'PCF', '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"}]', 3, '', 1719831210789, 'public'); +INSERT INTO "ne_config" VALUES (162, 'PCF', 'pccRules', 'PCC Rules', 'array', '[{"access":"read-only","comment":"","display":"Index","filter":"1~64","name":"index","type":"int","value":"1"},{"access":"read-write","comment":"","display":"Rule ID","filter":"^.{1,63}$","name":"ruleId","type":"string","value":"internet"},{"access":"read-write","comment":"","display":"Activate","filter":"false;true;","name":"activate","type":"bool","value":"true"},{"access":"read-write","comment":"","display":"Precedence","filter":"0~255","name":"precedence","type":"int","value":"80"},{"access":"read-write","comment":"","display":"Flow Usage","filter":"{\"0\":\"General\", \"1\":\"IMS-Signalling\"}","name":"flowUsage","type":"enum","value":"0"},{"access":"read-write","comment":"","display":"APP ID","filter":"^.{1,63}$","name":"appId","type":"string","value":""},{"access":"read-write","comment":"","display":"Flow Template","filter":"^.{1,255}$","name":"flowTemplate","type":"string","value":"flow_any"},{"access":"read-write","comment":"","display":"QoS ID","filter":"^.{1,63}$","name":"qosId","type":"string","value":"qos_internet"},{"access":"read-write","comment":"","display":"Traffic Control ID","filter":"^.{1,63}$","name":"trafficControlId","type":"string","value":""},{"access":"read-write","comment":"","display":"Usage Monitoring ID","filter":"^.{1,63}$","name":"usageMonitoringId","type":"string","value":""}]', 5, '', 1719831210834, 'public'); +INSERT INTO "ne_config" VALUES (163, 'PCF', 'sessionRules', 'Session Rules', 'array', '[{"access":"read-only","comment":"","display":"Index","filter":"1~64","name":"index","type":"int","value":"1"},{"access":"read-write","comment":"","display":"Rule ID","filter":"^.{1,63}$","name":"ruleId","type":"string","value":"internet"},{"access":"read-write","comment":"","display":"Activate","filter":"false;true;","name":"activate","type":"bool","value":"true"},{"access":"read-write","comment":"","display":"5QI","filter":"0~255","name":"fiveQI","type":"int","value":"9"},{"access":"read-write","comment":"","display":"5QI Priority Level","filter":"0~127","name":"fiveQIPriorityLevel","type":"int","value":"80"},{"access":"read-write","comment":"","display":"Flow Usage","filter":"{\"0\":\"General\", \"1\":\"IMS-Signalling\"}","name":"flowUsage","type":"enum","value":"0"},{"access":"read-write","comment":"","display":"Usage Monitoring ID","filter":"^.{1,63}$","name":"usageMonitoringId","type":"string","value":""},{"access":"read-write","comment":"","display":"AMBR Downlink","filter":"^\\d+(\\.\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$","name":"ambrDl","type":"string","value":"200Mbps"},{"access":"read-write","comment":"","display":"AMBR Uplink","filter":"^\\d+(\\.\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$","name":"ambrUl","type":"string","value":"100Mbps"},{"access":"read-write","comment":"","display":"Averaging Window","filter":"0~4095","name":"averagingWindow","type":"int","value":"0"},{"access":"read-write","comment":"","display":"Max Data Burst Volume","filter":"0~4095","name":"maxDataBurstVolume","type":"int","value":"0"},{"access":"read-write","comment":"","display":"ARP Priority Level","filter":"1~15","name":"arpPriorityLevel","type":"int","value":"1"},{"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"},{"access":"read-write","comment":"","display":"Max Bitrate Downlink","filter":"^\\d+(\\.\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$","name":"maxbrDl","type":"string","value":""},{"access":"read-write","comment":"","display":"Max Bitrate Uplink","filter":"^\\d+(\\.\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$","name":"maxbrUl","type":"string","value":""},{"access":"read-write","comment":"","display":"GBR Downlink","filter":"^\\d+(\\.\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$","name":"gbrDl","type":"string","value":""},{"access":"read-write","comment":"","display":"GBR Uplink","filter":"^\\d+(\\.\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$","name":"gbrUl","type":"string","value":""}]', 7, '', 1719831210893, 'public'); +INSERT INTO "ne_config" VALUES (164, 'PCF', 'gxServer', 'Gx 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":"^.{0,127}$","name":"host","type":"string","value":"hss.ims.mnc001.mcc001.3gppnetwork.org"},{"access":"read-write","comment":"","display":"Realm","filter":"^.{0,127}$","name":"realm","type":"string","value":"ims.mnc001.mcc001.3gppnetwork.org"}]', 9, '', 1719831210965, 'public'); +INSERT INTO "ne_config" VALUES (165, 'PCF', 'rxServer', 'Rx 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":"^.{0,127}$","name":"host","type":"string","value":"hss.ims.mnc001.mcc001.3gppnetwork.org"},{"access":"read-write","comment":"","display":"Realm","filter":"^.{0,127}$","name":"realm","type":"string","value":"ims.mnc001.mcc001.3gppnetwork.org"}]', 11, '', 1719831211004, 'public'); +INSERT INTO "ne_config" VALUES (166, 'PCF', 'flowTemplate', 'Flow Template', 'array', '[{"access":"read-only","comment":"","display":"Index","filter":"1~256","name":"index","type":"int","value":"1"},{"access":"read-write","comment":"","display":"Template Name","filter":"^.{1,63}$","name":"templateName","type":"string","value":"flow_any"},{"access":"read-write","comment":"","display":"Flow Description","filter":"^.{1,127}$","name":"flowDescription","type":"string","value":"permit out ip from any to assigned"},{"access":"read-write","comment":"","display":"Flow Direction","filter":"{\"0\":\"Unspecified\", \"1\":\"Uplink\", \"2\":\"Downlink\", \"3\":\"Bidirectional\"}","name":"flowDirection","type":"enum","value":"0"}]', 13, '', 1719831211185, 'public'); +INSERT INTO "ne_config" VALUES (167, 'PCF', 'qosTemplate', 'QoS Template', 'array', '[{"access":"read-only","comment":"","display":"Index","filter":"1~64","name":"index","type":"int","value":"1"},{"access":"read-write","comment":"","display":"QoS ID","filter":"^.{1,63}$","name":"qosId","type":"string","value":"qos_internet"},{"access":"read-write","comment":"","display":"5QI","filter":"0~255","name":"fiveQI","type":"int","value":"9"},{"access":"read-write","comment":"","display":"5QI Priority Level","filter":"0~127","name":"fiveQIPriorityLevel","type":"int","value":"80"},{"access":"read-write","comment":"","display":"Max Bitrate Downlink","filter":"^\\d+(\\.\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$","name":"maxbrDl","type":"string","value":""},{"access":"read-write","comment":"","display":"Max Bitrate Uplink","filter":"^\\d+(\\.\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$","name":"maxbrUl","type":"string","value":""},{"access":"read-write","comment":"","display":"GBR Downlink","filter":"^\\d+(\\.\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$","name":"gbrDl","type":"string","value":""},{"access":"read-write","comment":"","display":"GBR Uplink","filter":"^\\d+(\\.\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$","name":"gbrUl","type":"string","value":""},{"access":"read-write","comment":"","display":"ARP Priority Level","filter":"1~15","name":"arpPriorityLevel","type":"int","value":"1"},{"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"},{"access":"read-write","comment":"","display":"Default QoS Flow Indication","filter":"false;true;","name":"defQosFlowIndication","type":"bool","value":"false"}]', 15, '', 1719831211267, 'public'); +INSERT INTO "ne_config" VALUES (168, 'PCF', 'usageMonitoringTemplate', 'Usage Monitoring Template', 'array', '[{"access":"read-only","comment":"","display":"Index","filter":"1~64","name":"index","type":"int","value":"1"},{"access":"read-write","comment":"","display":"Usage Monitoring ID","filter":"^.{1,63}$","name":"umId","type":"string","value":"flow_any"},{"access":"read-write","comment":"","display":"Volume Threshold(KB)","filter":"","name":"volumeThreshold","type":"int","value":"5242880"},{"access":"read-write","comment":"","display":"Volume Threshold Uplink(KB)","filter":"","name":"volumeThresholdUplink","type":"int","value":"0"},{"access":"read-write","comment":"","display":"Volume Threshold Downlink(KB)","filter":"","name":"volumeThresholdDownlink","type":"int","value":"0"},{"access":"read-write","comment":"","display":"Time Threshold","filter":"","name":"timeThreshold","type":"int","value":"0"},{"access":"read-write","comment":"","display":"Inactivity Time","filter":"","name":"inactivityTime","type":"int","value":"0"}]', 17, '', 1719831211321, 'public'); +INSERT INTO "ne_config" VALUES (169, 'PCF', 'trafficControlTemplate', 'Traffic Control Template', 'array', '[{"access":"read-only","comment":"","display":"Index","filter":"1~64","name":"index","type":"int","value":"1"},{"access":"read-write","comment":"","display":"Traffic Control ID","filter":"^.{1,63}$","name":"tcId","type":"string","value":""},{"access":"read-write","comment":"","display":"Flow Status","filter":"{\"0\":\"Disable\", \"1\":\"Uplink\", \"2\":\"Downlink\", \"3\":\"Enable\", \"4\":\"Remove\"}","name":"flowStatus","type":"enum","value":"0"},{"access":"read-write","comment":"","display":"Mute Notify","filter":"false;true;","name":"muteNotif","type":"bool","value":"true"},{"access":"read-write","comment":"","display":"Route to Location DNAI","filter":"^.{1,63}$","name":"dnai","type":"string","value":""}]', 19, '', 1719831211361, 'public'); +INSERT INTO "ne_config" VALUES (170, 'PCF', 'headerEnrichTemplate', 'Header Enrich Template', 'array', '[{"access":"read-only","comment":"","display":"Index","filter":"1~16","name":"index","type":"int","value":"1"},{"access":"read-write","comment":"","display":"Template Name","filter":"^.{1,63}$","name":"templateName","type":"string","value":""},{"access":"read-write","comment":"","display":"Header Type","filter":"{\"0\":\"GPSI\", \"1\":\"SUPI\", \"2\":\"UE IP\", \"3\":\"User Location\", \"4\":\"DNN\"}","name":"headerType","type":"enum","value":"0"},{"access":"read-write","comment":"","display":"Header Name","filter":"^.{1,63}$","name":"headerName","type":"string","value":""}]', 21, '', 1719831211407, 'public'); + +-- 更新 SMF 配置 20250319 +INSERT INTO "ne_config" VALUES (180, 'SMF', 'smfSystem', 'SMF System Config', 'list', '[{"access":"read-write","comment":"","display":"SBI IP","filter":"","name":"sbiIpAddr","type":"string","value":"172.16.5.150"},{"access":"read-write","comment":"0~65535","display":"SBI Port","filter":"0~65535","name":"sbiPort","type":"int","value":"8080"},{"access":"read-write","comment":"","display":"SBI Scheme","filter":"{\"0\":\"http\", \"1\":\"https\"}","name":"sbiScheme","type":"enum","value":"http"},{"access":"read-write","comment":"","display":"N4 IPv4","filter":"","name":"n4Ipv4","type":"ipv4","value":"172.16.5.150"},{"access":"read-write","comment":"","display":"N4 IPv6","filter":"","name":"n4Ipv6","type":"ipv6","value":""},{"access":"read-write","comment":"","display":"N4U IPv4","filter":"","name":"n4UIpv4","type":"ipv4","value":""},{"access":"read-write","comment":"","display":"N4U IPv6","filter":"","name":"n4UIpv6","type":"ipv6","value":""},{"access":"read-write","comment":"","display":"AMF URI","filter":"","name":"amfUri","type":"string","value":"http://172.16.5.120:8080"},{"access":"read-write","comment":"","display":"PCF Enable","filter":"","name":"pcfEnable","type":"bool","value":"true"},{"access":"read-write","comment":"URI1;URI2","display":"PCF URI","filter":"","name":"pcfUri","type":"string","value":"http://172.16.5.160:8080"},{"access":"read-write","comment":"URI1;URI2","display":"UDM URI","filter":"","name":"udmUri","type":"string","value":"http://172.16.5.140:8080"},{"access":"read-write","display":"5G Charging Enable","filter":"{\"0\":\"false\", \"1\":\"true\"}","name":"chfEnable","type":"bool","value":"false"},{"access":"read-write","comment":"","display":"CHF Primary URI","filter":"","name":"chfPrimaryUri","type":"string","value":"http://172.16.5.240:8080"},{"access":"read-write","comment":"","display":"CHF Secondary URI","filter":"","name":"chfSecondaryUri","type":"string","value":""},{"access":"read-write","comment":"","display":"NRF Enable","filter":"{\"0\":\"false\", \"1\":\"true\"}","name":"nrfEnable","type":"bool","value":"false"},{"access":"read-write","comment":"","display":"NRF URI","filter":"","name":"nrfUri","type":"string","value":"http://172.16.5.180:8080"},{"access":"read-write","comment":"","display":"Primary DNS IPv4","filter":"","name":"primaryDnsIpv4","type":"ipv4","value":"114.114.114.114"},{"access":"read-write","comment":"","display":"Secondary DNS IPv4","filter":"","name":"secondaryDnsIpv4","type":"ipv4","value":""},{"access":"read-write","comment":"","display":"Primary DNS IPv6","filter":"","name":"primaryDnsIpv6","type":"ipv6","value":""},{"access":"read-write","comment":"","display":"Secondary DNS IPv6","filter":"","name":"secondaryDnsIpv6","type":"ipv6","value":""},{"access":"read-write","comment":"","display":"Primary PCSCF IPv4","filter":"","name":"primaryPcscfIpv4","type":"ipv4","value":"172.16.5.110"},{"access":"read-write","comment":"","display":"Secondary PCSCF IPv4","filter":"","name":"secondaryPcscfIpv4","type":"ipv4","value":""},{"access":"read-write","comment":"","display":"Primary PCSCF IPv6","filter":"","name":"primaryPcscfIpv6","type":"ipv6","value":""},{"access":"read-write","comment":"","display":"Secondary PCSCF IPv6","filter":"","name":"secondaryPcscfIpv6","type":"ipv6","value":""},{"access":"read-write","comment":"","display":"UE MTU","filter":"0~65535","name":"ueMtu","type":"int","value":""}]', 1, '', 1742367527403, 'public'); +INSERT INTO "ne_config" VALUES (181, 'SMF', 'spgwSystem', 'SPGW Sytem Config', 'list', '[{"access":"read-write","comment":"","display":"Local S11 IP","filter":"","name":"s11Ip","type":"string","value":"172.16.5.150"},{"access":"read-write","comment":"","display":"Local Diameter IP","filter":"","name":"localDiameterIp","type":"string","value":"172.16.5.150"},{"access":"read-write","comment":"","display":"Local Diameter Host Name","filter":"","name":"localDiameterHostName","type":"string","value":"smf.mnc001.mcc001.3gppnetwork.org"},{"access":"read-write","comment":"","display":"Local Diameter Realm Name","filter":"","name":"localDiameterRealmName","type":"string","value":"mnc001.mcc001.3gppnetwork.org"},{"access":"read-write","comment":"","display":"Gy Enable","filter":"false;true;","name":"peerGyEnable","type":"bool","value":"false"},{"access":"read-write","comment":"","display":"Primary Remote Gy IP","filter":"","name":"primaryPeerGyIp","type":"string","value":""},{"access":"read-write","comment":"0~65535","display":"Primary Remote Gy Port","filter":"0~65535","name":"primaryPeerGyPort","type":"int","value":"3868"},{"access":"read-write","comment":"","display":"Secondary Remote Gy IP","filter":"","name":"secondaryPeerGyIp","type":"string","value":""},{"access":"read-write","comment":"0~65535","display":"Secondary Remote Gy Port","filter":"0~65535","name":"secondaryPeerGyPort","type":"int","value":"3868"},{"access":"read-write","comment":"","display":"Gx Enable","filter":"false;true;","name":"peerGxEnable","type":"bool","value":"false"},{"access":"read-write","comment":"","display":"Gx Charging Enable","filter":"false;true;","name":"gxChargingEnable","type":"bool","value":"false"},{"access":"read-write","comment":"","display":"Primary Remote Gx IP","filter":"","name":"primaryPeerGxIp","type":"string","value":""},{"access":"read-write","comment":"0~65535","display":"Primary Remote Gx Port","filter":"0~65535","name":"primaryPeerGxPort","type":"int","value":"3868"},{"access":"read-write","comment":"","display":"Secondary Remote Gx IP","filter":"","name":"secondaryPeerGxIp","type":"string","value":""},{"access":"read-write","comment":"0~65535","display":"Secondary Remote Gx Port","filter":"0~65535","name":"secondaryPeerGxPort","type":"int","value":"3868"}]', 3, '', 1742367527736, 'public'); +INSERT INTO "ne_config" VALUES (182, 'SMF', 'upfConfig', 'UPF Config', 'array', '[{"access":"read-only","comment":"","display":"Index","filter":"0~2047","name":"index","type":"int","value":""},{"access":"read-write","comment":"","display":"UPF ID","filter":"1~64","name":"id","type":"string","value":""},{"access":"read-write","comment":"e.g. ip:port","display":"Address","filter":"7~45","name":"addr","type":"string","value":""},{"access":"read-write","comment":"IPv4,IPv6,IPv4v6","display":"Ip Pool Type","filter":"","name":"ipPoolType","type":"string","value":"IPv4v6"},{"access":"read-write","comment":"CIDR format, e.g. 192.168.1.0/24","display":"IPv4 Pools","filter":"10~256","name":"ipv4Pools","type":"string","value":""},{"access":"read-write","comment":"CIDR format, e.g. fe80::20c:29ff:fee4:dab7/50","display":"IPv6 Pools","filter":"5~512","name":"ipv6Pools","type":"string","value":""},{"access":"read-write","comment":"","display":"Static IPv4 Enable","filter":"{\"0\":\"false\", \"1\":\"true\"}","name":"staticIpv4Enable","type":"bool","value":""},{"access":"read-write","comment":"ipv4 format","display":"Static IPv4 Start","filter":"","name":"staticIpv4Start","type":"ipv4","value":""},{"access":"read-write","comment":"ipv4 format","display":"Static IPv4 End","filter":"","name":"staticIpv4End","type":"ipv4","value":""},{"access":"read-write","comment":"","display":"Static IPv6 Enable","filter":"{\"0\":\"false\", \"1\":\"true\"}","name":"staticIpv6Enable","type":"bool","value":""},{"access":"read-write","comment":"ipv6 format","display":"Static IPv6 Start","filter":"","name":"staticIpv6Start","type":"ipv6","value":""},{"access":"read-write","comment":"ipv6 format","display":"Static IPv6 End","filter":"","name":"staticIpv6End","type":"ipv6","value":""},{"array":[{"access":"read-only","comment":"","display":"Index","filter":"0~2047","name":"index","type":"int","value":""},{"access":"read-write","comment":"","display":"DNN","filter":"1~64","name":"dnn","type":"string","value":""},{"access":"read-write","comment":"IPv4,IPv6,IPv4v6","display":"Ip Pool Type","filter":"","name":"ipPoolType","type":"string","value":"IPv4v6"},{"access":"read-write","comment":"CIDR format, e.g. 192.168.1.0/24","display":"IPv4 Pools","filter":"10~256","name":"ipv4Pools","type":"string","value":""},{"access":"read-write","comment":"CIDR format, e.g. fe80::20c:29ff:fee4:dab7/50","display":"IPv6 Pools","filter":"5~512","name":"ipv6Pools","type":"string","value":""},{"access":"read-write","comment":"","display":"Static IPv4 Enable","filter":"{\"0\":\"false\", \"1\":\"true\"}","name":"staticIpv4Enable","type":"bool","value":""},{"access":"read-write","comment":"ipv4 format","display":"Static IPv4 Start","filter":"","name":"staticIpv4Start","type":"ipv4","value":""},{"access":"read-write","comment":"ipv4 format","display":"Static IPv4 End","filter":"","name":"staticIpv4End","type":"ipv4","value":""},{"access":"read-write","comment":"","display":"Static IPv6 Enable","filter":"{\"0\":\"false\", \"1\":\"true\"}","name":"staticIpv6Enable","type":"bool","value":""},{"access":"read-write","comment":"ipv6 format","display":"Static IPv6 Start","filter":"","name":"staticIpv6Start","type":"ipv6","value":""},{"access":"read-write","comment":"ipv6 format","display":"Static IPv6 End","filter":"","name":"staticIpv6End","type":"ipv6","value":""}],"display":"UE DNN IP Pool","name":"ueDnnIpPool"}]', 5, '', 1742367528104, 'public'); +INSERT INTO "ne_config" VALUES (183, 'SMF', 'dnnSelectUpf', 'DNN Select UPF', 'array', '[{"access":"read-only","comment":"","display":"Index","filter":"0~65535","name":"index","type":"int","value":"0"},{"access":"read-write","comment":"","display":"DNN","filter":"1~64","name":"dnn","type":"string","value":""},{"access":"read-write","comment":"","display":"UPF ID","filter":"1~64","name":"upfId","type":"string","value":""}]', 7, '', 1742367528153, 'public'); +INSERT INTO "ne_config" VALUES (184, 'SMF', 'dnnTaiSelectUpf', 'DNN TAI Select UPF', 'array', '[{"access":"read-only","comment":"","display":"Index","filter":"0~65535","name":"index","type":"int","value":""},{"access":"read-write","comment":"","display":"DNN","filter":"1~64","name":"dnn","type":"string","value":""},{"access":"read-write","comment":"MCC+MNC+TAC","display":"TAI","filter":"1~64","name":"tai","type":"string","value":""},{"access":"read-write","comment":"","display":"UPF ID","filter":"1~64","name":"upfId","type":"string","value":"upf2-Id"}]', 9, '', 1742367528176, 'public'); +INSERT INTO "ne_config" VALUES (185, 'SMF', 'snssaiSelectUpf', 'SNSSAI Select UPF', 'array', '[{"access":"read-only","comment":"","display":"Index","filter":"0~65535","name":"index","type":"int","value":""},{"access":"read-write","display":"Enable","filter":"false;true;","name":"enable","type":"bool","value":"true"},{"access":"read-write","comment":"sst1-sd1;sst2-sd2;sst3-sd3","display":"SNSSAI","filter":"1~64","name":"snssai","type":"string","value":"1-000001"},{"access":"read-write","comment":"upf1-id;upf2-id;upf3-id","display":"UPF ID","filter":"1~64","name":"upfId","type":"string","value":"upf1-Id"}]', 11, '', 1742367528227, 'public'); +INSERT INTO "ne_config" VALUES (186, '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"}]', 17, '', 1742367528261, 'public'); +INSERT INTO "ne_config" VALUES (187, 'SMF', 'localDhcpCfg', 'Local DHCP Config', 'list', '[{"access":"read-write","comment":"","display":"Enable","filter":"","name":"enable","type":"bool","value":"false"},{"access":"read-write","comment":"","display":"Local IP","filter":"","name":"localIp","type":"string","value":""}]', 13, '', 1742367528232, 'public'); +INSERT INTO "ne_config" VALUES (188, '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":""}]', 15, '', 1742367528256, 'public'); + +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":"AUSF IP","filter":"","name":"ausfIP","type":"ipv4","value":"172.16.5.130"},{"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, '', 1719831212399, '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"}]', 3, '', 1719831212494, '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"}]', 5, '', 1719831212590, '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"}]', 7, '', 1719831212718, '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"}]', 9, '', 1719831212824, '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"}]', 11, '', 1719831212979, '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"}]', 13, '', 1719831213074, '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"}]', 15, '', 1719831213203, '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"}]', 17, '', 1719831213410, '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"}]', 19, '', 1719831213536, '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"}]', 21, '', 1719831213732, '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"}]', 23, '', 1719831213924, '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"}]', 25, '', 1719831214313, '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"}]', 27, '', 1719831214393, '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'); +INSERT INTO "ne_config" VALUES (221, 'UPF', 'logger', 'Logger', 'list', '[{"access":"read-write","comment":"","display":"Log File Full Path","filter":"","name":"logFileFullPath","type":"string","value":"/var/log/upf.log"},{"access":"read-write","comment":"error|warning|info|debug","display":"Log Level","filter":"","name":"logLevel","type":"string","value":"error"},{"access":"read-write","comment":"error|warning|info|debug","display":"Upfd Log Level","filter":"","name":"upfdLogLevel","type":"string","value":"error"},{"access":"read-write","comment":"","display":"Upfd Log Transfer","filter":"","name":"upfdLogTransfer","type":"bool","value":"false"},{"access":"read-write","comment":"","display":"Report Caller","filter":"","name":"reportCaller","type":"bool","value":"false"}]', 3, '', 1742469466510, 'public'); +INSERT INTO "ne_config" VALUES (222, 'UPF', 'pfcp', 'PFCP', 'list', '[{"access":"read-write","comment":"ipv4|ipv6|ipv46","display":"IP Type","filter":"","name":"ipType","type":"string","value":"ipv4"},{"access":"read-write","comment":"","display":"Local IPv4","filter":"","name":"localIpv4","type":"string","value":"0.0.0.0"},{"access":"read-write","comment":"","display":"Local IPv6","filter":"","name":"localIpv6","type":"string","value":""},{"access":"read-write","comment":"1~65535","display":"Local UDP Port","filter":"1~65535","name":"localUdpPort","type":"int","value":"8805"},{"access":"read-write","comment":"","display":"SMF IPv4","filter":"","name":"smfIpv4","type":"string","value":"0.0.0.0"},{"access":"read-write","comment":"","display":"SMF IPv6","filter":"","name":"smfIpv6","type":"string","value":""},{"access":"read-write","comment":"1~65535","display":"SMF UDP Port","filter":"1~65535","name":"smfUdpPort","type":"int","value":"8805"},{"access":"read-write","comment":"1~255","display":"Retry Interval","filter":"1~255","name":"retryInterval","type":"int","value":"2"},{"access":"read-write","comment":"0~255","display":"Max Retry","filter":"0~255","name":"maxRetry","type":"int","value":"3"},{"access":"read-write","comment":"1~255","display":"Heartbeat Interval","filter":"1~255","name":"heartbeatInterval","type":"int","value":"15"}]', 5, '', 1742469466514, 'public'); +INSERT INTO "ne_config" VALUES (223, 'UPF', 'telnet', 'Telnet', 'list', '[{"access":"read-write","comment":"","display":"Enabled","filter":"","name":"enabled","type":"bool","value":"false"},{"access":"read-write","comment":"ipv4|ipv6|ipv46","display":"IP Type","filter":"","name":"ipType","type":"string","value":"ipv4"},{"access":"read-write","comment":"","display":"Local IPv4","filter":"","name":"localIpv4","type":"string","value":"0.0.0.0"},{"access":"read-write","comment":"","display":"Local IPv6","filter":"","name":"localIpv6","type":"string","value":""},{"access":"read-write","comment":"1~65535","display":"Local Port","filter":"1~65535","name":"localPort","type":"int","value":"4100"}]', 7, '', 1742469466518, 'public'); +INSERT INTO "ne_config" VALUES (224, 'UPF', 'redisDb', 'Redis DB', 'list', '[{"access":"read-write","comment":"","display":"Enabled","filter":"","name":"enabled","type":"bool","value":"false"},{"access":"read-write","comment":"tcp|udp","display":"Net Type","filter":"","name":"netType","type":"string","value":"tcp"},{"access":"read-write","comment":"","display":"Server Address","filter":"","name":"serverAddr","type":"string","value":"0.0.0.0:0"}]', 9, '', 1742469466521, 'public'); +INSERT INTO "ne_config" VALUES (225, 'UPF', 'dataForwarderCommon', 'Data Forwarder Common', 'list', '[{"access":"read-write","comment":"upfd|tun","display":"Type","filter":"","name":"type","type":"string","value":"upfd"},{"access":"read-only","comment":"1~8","display":"Instance ID","filter":"1~8","name":"instanceId","type":"int","value":"1"},{"access":"read-write","comment":"1~255","display":"Main CPU","filter":"1~255","name":"mainCpu","type":"int","value":"1"},{"access":"read-write","comment":"2,3,4,5 or 2-5","display":"CPU Workers","filter":"","name":"cpuWorkers","type":"string","value":""},{"access":"read-write","comment":"data forwarder already run or not","display":"Is Run","filter":"0~1","name":"isRun","type":"int","value":"0"},{"access":"read-write","comment":"Hot Standby work or not","display":"Is Hot Standby","filter":"0~1","name":"isHotStandby","type":"int","value":"0"},{"access":"read-write","comment":"The value from which TEID is allocated","display":"TEID Start","filter":"","name":"teidStart","type":"int","value":"16777216"},{"access":"read-write","comment":"","display":"N3 Heartbeat Interval","filter":"","name":"n3HeartbeatInterval","type":"int","value":"30"},{"access":"read-write","comment":"","display":"RX TX Queue Num","filter":"","name":"rxTxQueueNum","type":"int","value":"1"},{"access":"read-write","comment":"data rx\u0026tx use C socket","display":"Use Socket","filter":"0~1","name":"useSocket","type":"int","value":"0"},{"access":"read-write","comment":"Enable 5G ethernet LAN","display":"Enable Tap","filter":"0~1","name":"enableTap","type":"int","value":"0"},{"access":"read-write","comment":"Enable PFCP Qer Control","display":"Enable Qer","filter":"0~1","name":"enableQer","type":"int","value":"0"},{"access":"read-write","comment":"Enable NAT For N6 interface","display":"Enable NAT","filter":"0~1","name":"enableNat","type":"int","value":"0"},{"access":"read-write","comment":"Enable Arp Proxy For N6 interface","display":"Enable Arp Proxy","filter":"0~1","name":"enableArpProxy","type":"int","value":"0"}]', 11, '', 1742469466525, 'public'); +INSERT INTO "ne_config" VALUES (226, 'UPF', 'dataForwarderUpfd', 'Data Forwarder Upfd', 'list', '[{"access":"read-write","comment":"Currently only support vfio-pci","display":"UIO Driver","filter":"","name":"uioDriver","type":"string","value":"vfio-pci"},{"access":"read-write","comment":"The format must be IP:Port","display":"Telnet Address IP:Port","filter":"","name":"commandlineListen","type":"string","value":"localhost:5002"},{"access":"read-write","comment":"the unit is GB","display":"Heap Size GB","filter":"1~8","name":"heapSizeGB","type":"int","value":"2"},{"access":"read-write","comment":"the unit is MB","display":"State Seg Size MB","filter":"64~512","name":"stateSegSizeMB","type":"int","value":"256"},{"access":"read-write","comment":"","display":"DPDK No PCI","filter":"0~1","name":"dpdkNoPci","type":"int","value":"0"},{"access":"read-write","comment":"","display":"Mem Channel Num","filter":"0~128","name":"memChannelNum","type":"int","value":"0"},{"access":"read-write","comment":"","display":"Session Base Va","filter":"","name":"sessionBaseVa","type":"string","value":"0x2000000000"},{"access":"read-write","comment":"","display":"Buffers Per Numa","filter":"","name":"buffersPerNuma","type":"int","value":"0"},{"access":"read-write","comment":"","display":"N3 RSS Hash","filter":"","name":"n3RssHash","type":"string","value":""}]', 13, '', 1742469466530, 'public'); +INSERT INTO "ne_config" VALUES (227, 'UPF', 'dataInterfaceList', 'Data Interface List', 'array', '[{"access":"read-only","comment":"1~32","display":"Index","filter":"1~32","name":"index","type":"int","value":"1"},{"access":"read-write","comment":"N3|N6|N9|N19","display":"Interface Type","filter":"","name":"interfaceType","type":"string","value":"N3"},{"access":"read-write","comment":"","display":"Interface ID","filter":"1~32","name":"interfaceId","type":"int","value":"1"},{"access":"read-write","comment":"host|vmxnet3|dpdk|socket|uds","display":"Driver Type","filter":"","name":"driverType","type":"string","value":"host"},{"access":"read-write","comment":"ipv4|ipv6|ipv4v6","display":"IP Type","filter":"","name":"ipType","type":"string","value":"ipv4"},{"access":"read-write","array":[{"access":"read-only","comment":"1~8","display":"Index","filter":"1~8","name":"index","type":"int","value":"1"},{"access":"read-write","comment":"IPv4","display":"IPv4","filter":"","name":"ipv4","type":"string","value":"0.0.0.0"},{"access":"read-write","comment":"","display":"IPv4 Mask","filter":"","name":"ipv4Mask","type":"string","value":"0.0.0.0"}],"comment":"","display":"IPv4 Address List","filter":"0~8","name":"ipv4AddrList","type":"int","value":"1"},{"access":"read-write","array":[{"access":"read-only","comment":"1~8","display":"Index","filter":"1~8","name":"index","type":"int","value":"1"},{"access":"read-write","comment":"","display":"IPv6","filter":"","name":"ipv6","type":"string","value":""},{"access":"read-write","comment":"","display":"IPv6 Prefix","filter":"","name":"ipv6Prefix","type":"int","value":"64"}],"comment":"","display":"IPv6 Address List","filter":"0~8","name":"ipv6AddrList","type":"int","value":"1"},{"access":"read-write","comment":"","display":"MAC Address","filter":"","name":"macAddr","type":"string","value":"00:00:00:00:00:00"},{"access":"read-write","comment":"","display":"Interface PCI","filter":"","name":"interfacePCI","type":"string","value":"0000:00:00.0"},{"access":"read-write","comment":"","display":"System Network Card Name","filter":"","name":"systemNetworkCardName","type":"string","value":""},{"access":"read-write","comment":"","display":"Gateway IPv4","filter":"","name":"gatewayIpv4","type":"string","value":"0.0.0.0"},{"access":"read-write","comment":"null|bak|sub|xor|round|lacp","display":"Bond Type","filter":"","name":"bondType","type":"string","value":"0"},{"access":"read-write","comment":"","display":"Bond ID","filter":"0~32","name":"bondId","type":"int","value":"1"},{"access":"read-write","comment":"","display":"BFD TX Interval Ms","filter":"","name":"bfdTxIntervalMs","type":"int","value":"0"},{"access":"read-write","comment":"","display":"BFD RX Interval Ms","filter":"","name":"bfdRxIntervalMs","type":"int","value":"0"},{"access":"read-write","comment":"","display":"DNN Name","filter":"","name":"dnnName","type":"string","value":"default"},{"access":"read-write","comment":"","display":"Gateway IPv6","filter":"","name":"gatewayIpv6","type":"string","value":""},{"access":"read-write","comment":"","display":"BFD Gateway IPv4","filter":"","name":"bfdGatewayIpv4","type":"string","value":"0.0.0.0"},{"access":"read-write","comment":"","display":"BFD Gateway IPv6","filter":"","name":"bfdGatewayIpv6","type":"string","value":""},{"access":"read-write","comment":"","display":"MTU","filter":"0~65535","name":"mtu","type":"int","value":"1500"},{"access":"read-write","comment":"","display":"Vlan ID Min","filter":"","name":"vlanIdMin","type":"int","value":"0"},{"access":"read-write","comment":"","display":"Vlan ID Max","filter":"","name":"vlanIdMax","type":"int","value":"0"},{"access":"read-write","comment":"","display":"UDP Src Port","filter":"1~65535","name":"udpSrcPort","type":"int","value":"0"},{"access":"read-write","comment":"","display":"UDP Listen Port","filter":"0~65536","name":"udpListenPort","type":"int","value":"2152"},{"access":"read-write","comment":"","display":"UDS Local File Full Path","filter":"","name":"udsLocalFileFullPath","type":"string","value":""},{"access":"read-write","comment":"","display":"UDS Remote File Full Path","filter":"","name":"udsRemoteFileFullPath","type":"string","value":""},{"access":"read-write","comment":"","display":"Link Detection Type","filter":"0~1","name":"linkDetectionType","type":"int","value":"0"},{"access":"read-write","comment":"","display":"NAT Interface ID","filter":"0~1","name":"natInterfaceId","type":"int","value":"0"},{"access":"read-write","comment":"","display":"IPv4","filter":"","name":"ueIpv4","type":"string","value":"0.0.0.0"},{"access":"read-write","comment":"","display":"UE IPv4 Mask","filter":"","name":"ueIpv4Mask","type":"string","value":"255.255.255.0"},{"access":"read-write","comment":"","display":"UE IPv6","filter":"","name":"ueIpv6","type":"string","value":""},{"access":"read-write","comment":"","display":"UE IPv6 Prefix","filter":"1~128","name":"ueIpv6Prefix","type":"int","value":"64"},{"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":"IPv4","filter":"","name":"ipv4","type":"string","value":"0.0.0.0"},{"access":"read-write","comment":"","display":"IPv4 Mask","filter":"","name":"ipv4Mask","type":"string","value":"0.0.0.0"}],"comment":"","display":"GTPU Remote IPv4 Pool List","filter":"1~32","name":"gtpuRemoteIpv4PoolList","type":"int","value":"1"},{"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":"IPv6","filter":"","name":"ipv6","type":"string","value":""},{"access":"read-write","comment":"","display":"IPv6 Prefix","filter":"","name":"ipv6Prefix","type":"int","value":"64"}],"comment":"","display":"GTPU Remote IPv6 Pool List","filter":"0~32","name":"gtpuRemoteIpv6PoolList","type":"int","value":"1"},{"access":"read-write","comment":"","display":"GTPU Signaling Handle","filter":"0~1","name":"gtpuSignalingHandle","type":"int","value":"0"},{"access":"read-write","comment":"","display":"IMS Default DSCP Value","filter":"0~1","name":"imsDefaultDSCPValue","type":"int","value":"0"},{"access":"read-write","comment":"","display":"Data Default DSCP Value","filter":"0~1","name":"dataDefaultDSCPValue","type":"int","value":"0"},{"access":"read-write","comment":"","display":"Inner DSCP Value Map","filter":"0~1","name":"innerDSCPValueMap","type":"int","value":"0"},{"access":"read-write","comment":"","display":"Max Support Speed Mbps","filter":"0~65536","name":"maxSupportSpeedMbps","type":"int","value":"0"},{"access":"read-write","comment":"","display":"DPDK RX Queues Number","filter":"0~127","name":"dpdkRxQueuesNumber","type":"int","value":"0"},{"access":"read-write","comment":"","display":"DPDK TX Queues Number","filter":"0~127","name":"dpdkTxQueuesNumber","type":"int","value":"0"},{"access":"read-write","comment":"","display":"DPDK RX Desc Number","filter":"0~32768","name":"dpdkRxDescNumber","type":"int","value":"0"},{"access":"read-write","comment":"","display":"DPDK TX Desc Number","filter":"0~32768","name":"dpdkTxDescNumber","type":"int","value":"0"},{"access":"read-write","comment":"","display":"DPDK Workers","filter":"","name":"dpdkworkers","type":"string","value":""}]', 15, '', 1742469466536, 'public'); +INSERT INTO "ne_config" VALUES (228, 'UPF', 'networkControlCommon', 'Network Control Common', 'list', '[{"access":"read-write","comment":"","display":"Local Switch Disabled","filter":"0~1","name":"localSwitchDisabled","type":"int","value":"0"},{"access":"read-write","comment":"","display":"Max TCP Sync Per Second","filter":"","name":"maxTCPSyncPerSecond","type":"int","value":"0"},{"access":"read-write","comment":"","display":"UPF Max Support Mbps","filter":"","name":"upfMaxSupportMbps","type":"int","value":"0"},{"access":"read-write","comment":"","display":"dscp Inner Mapping","filter":"","name":"dscpInnerMapping","type":"int","value":"0"}]', 17, '', 1742469466542, 'public'); +INSERT INTO "ne_config" VALUES (229, 'UPF', 'networkControlDnnList', 'Network Control DNN List', 'array', '[{"access":"read-only","comment":"1~32","display":"Index","filter":"1~32","name":"index","type":"int","value":"1"},{"access":"read-write","comment":"","display":"DNN Name","filter":"","name":"dnnName","type":"string","value":""},{"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","comment":"","display":"HTTP Proto Enabled","filter":"0~1","name":"httpProtoEnabled","type":"int","value":"0"},{"access":"read-write","comment":"","display":"HTTPS Proto Enabled","filter":"0~1","name":"httpsProtoEnabled","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":"Type","filter":"","name":"type","type":"int","value":"0"},{"access":"read-write","comment":"","display":"Name","filter":"","name":"name","type":"string","value":""},{"access":"read-write","comment":"","display":"Value","filter":"","name":"value","type":"string","value":""}],"comment":"","display":"Header Enrich Info List","filter":"0~32","name":"headerEnrichInfoList","type":"int","value":"1"},{"access":"read-write","comment":"","display":"Statistic Enabled","filter":"0~1","name":"statisticEnabled","type":"int","value":"0"},{"access":"read-write","comment":"","display":"Local Switch Check","filter":"0~1","name":"localSwitchCheck","type":"int","value":"0"},{"access":"read-write","comment":"","display":"QER Max Support Mbps","filter":"","name":"qerMaxSupportMbps","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":"IPv4","filter":"","name":"ipv4","type":"string","value":"0.0.0.0"},{"access":"read-write","comment":"","display":"IPv4 Mask","filter":"","name":"ipv4Mask","type":"string","value":"255.255.255.0"}],"comment":"","display":"UE IPv4 Pool List","filter":"0~32","name":"ueIpv4PoolList","type":"int","value":"1"},{"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":"IPv6","filter":"","name":"ipv6","type":"string","value":""},{"access":"read-write","comment":"","display":"IPv6 Prefix","filter":"1~128","name":"ipv6Prefix","type":"int","value":"64"}],"comment":"","display":"UE IPv6 Pool List","filter":"0~32","name":"ueIpv6PoolList","type":"int","value":"1"},{"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":"IPv4","filter":"","name":"ipv4","type":"string","value":"0.0.0.0"},{"access":"read-write","comment":"","display":"IPv4 Mask","filter":"","name":"ipv4Mask","type":"string","value":"255.255.255.0"}],"comment":"","display":"Dst Server IPv4 Pool List","filter":"0~32","name":"dstServerIpv4PoolList","type":"int","value":"1"},{"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":"IPv6","filter":"","name":"ipv6","type":"string","value":""},{"access":"read-write","comment":"","display":"IPv6 Prefix","filter":"1~128","name":"ipv6Prefix","type":"int","value":"64"}],"comment":"","display":"Dst Server IPv6 Pool List","filter":"0~32","name":"dstServerIpv6PoolList","type":"int","value":"1"},{"access":"read-write","comment":"ipv4|ipv6|ipv4v6","display":"Gateway IP Type","filter":"","name":"gatewayIpType","type":"string","value":"ipv4"},{"access":"read-write","comment":"","display":"Gateway IPv4","filter":"","name":"gatewayIpv4","type":"string","value":"0.0.0.0"},{"access":"read-write","comment":"","display":"Gateway IPv6","filter":"","name":"gatewayIpv6","type":"string","value":""},{"access":"read-write","comment":"","display":"Secondary Gateway IPv4","filter":"","name":"secondaryGatewayIpv4","type":"string","value":"0.0.0.0"},{"access":"read-write","comment":"","display":"Secondary Gateway IPv6","filter":"","name":"secondaryGatewayIpv6","type":"string","value":""}]', 19, '', 1742469466545, 'public'); +INSERT INTO "ne_config" VALUES (230, 'UPF', 'networkControlSnssaiList', 'Network Control SNSSAI List', 'array', '[{"access":"read-only","comment":"1~32","display":"Index","filter":"1~32","name":"index","type":"int","value":"1"},{"access":"read-write","comment":"","display":"SST","filter":"","name":"sst","type":"int","value":"1"},{"access":"read-write","comment":"","display":"SD","filter":"","name":"sd","type":"int","value":"1"},{"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","comment":"","display":"QER Max Support Mbps","filter":"","name":"qerMaxSupportMbps","type":"int","value":"0"},{"access":"read-write","comment":"","display":"Statistic Enabled","filter":"0~1","name":"statisticEnabled","type":"int","value":"0"},{"access":"read-write","comment":"","display":"Vlan ID Min","filter":"","name":"vlanIdMin","type":"int","value":"0"},{"access":"read-write","comment":"","display":"Vlan ID Max","filter":"","name":"vlanIdMax","type":"int","value":"0"}]', 21, '', 1742469466549, 'public'); +INSERT INTO "ne_config" VALUES (231, 'UPF', 'networkControlAclWhiteList', 'Network Control ACL White List', 'array', '[{"access":"read-only","comment":"1~32","display":"Index","filter":"1~32","name":"index","type":"int","value":"1"},{"access":"read-write","comment":"","display":"UE IPv4","filter":"","name":"ueIpv4","type":"string","value":"0.0.0.0"},{"access":"read-write","comment":"","display":"UE IPv4 Mask","filter":"","name":"ueIpv4Mask","type":"string","value":"255.255.255.0"},{"access":"read-write","comment":"","display":"UE IPv6","filter":"","name":"ueIpv6","type":"string","value":""},{"access":"read-write","comment":"","display":"UE IPv6 Prefix","filter":"1~128","name":"ueIpv6Prefix","type":"int","value":"64"},{"access":"read-write","comment":"","display":"Dst Server IPv4","filter":"","name":"dstServerIpv4","type":"string","value":"0.0.0.0"},{"access":"read-write","comment":"","display":"Dst Server IPv4 Mask","filter":"","name":"dstServerIpv4Mask","type":"string","value":"255.255.255.0"},{"access":"read-write","comment":"","display":"Dst Server IPv6","filter":"","name":"dstServerIpv6","type":"string","value":""},{"access":"read-write","comment":"","display":"Dst Server IPv6 Prefix","filter":"1~128","name":"dstServerIpv6Prefix","type":"int","value":"64"}]', 23, '', 1742469466554, 'public'); +INSERT INTO "ne_config" VALUES (232, 'UPF', 'networkControlAclBlackList', 'Network Control ACL Black List', 'array', '[{"access":"read-only","comment":"1~32","display":"Index","filter":"1~32","name":"index","type":"int","value":"1"},{"access":"read-write","comment":"","display":"UE IPv4","filter":"","name":"ueIpv4","type":"string","value":"0.0.0.0"},{"access":"read-write","comment":"","display":"UE IPv4 Mask","filter":"","name":"ueIpv4Mask","type":"string","value":"255.255.255.0"},{"access":"read-write","comment":"","display":"UE IPv6","filter":"","name":"ueIpv6","type":"string","value":""},{"access":"read-write","comment":"","display":"UE IPv6 Prefix","filter":"1~128","name":"ueIpv6Prefix","type":"int","value":"64"},{"access":"read-write","comment":"","display":"Dst Server IPv4","filter":"","name":"dstServerIpv4","type":"string","value":"0.0.0.0"},{"access":"read-write","comment":"","display":"Dst Server IPv4 Mask","filter":"","name":"dstServerIpv4Mask","type":"string","value":"255.255.255.0"},{"access":"read-write","comment":"","display":"Dst Server IPv6","filter":"","name":"dstServerIpv6","type":"string","value":""},{"access":"read-write","comment":"","display":"Dst Server IPv6 Prefix","filter":"1~128","name":"dstServerIpv6Prefix","type":"int","value":"64"}]', 25, '', 1742469466558, 'public'); +INSERT INTO "ne_config" VALUES (233, 'UPF', 'networkControlDnsServerList', 'Network Control DNS Server List', 'array', '[{"access":"read-only","comment":"1~32","display":"Index","filter":"1~32","name":"index","type":"int","value":"1"},{"access":"read-write","comment":"0~1","display":"Enabled","filter":"0~1","name":"enabled","type":"int","value":"0"},{"access":"read-write","comment":"","display":"DNS Name","filter":"","name":"dnsName","type":"string","value":""},{"access":"read-write","comment":"","display":"Server IPv4","filter":"","name":"serverIpv4","type":"string","value":"0.0.0.0"},{"access":"read-write","comment":"","display":"Server IPv6","filter":"","name":"serverIpv6","type":"string","value":""}]', 29, '', 1742469466567, 'public'); +INSERT INTO "ne_config" VALUES (234, 'UPF', 'dpiCommon', 'DPI Common', 'list', '[{"access":"read-write","comment":"","display":"Max Detect Packet Num","filter":"","name":"maxDetectPacketNum","type":"int","value":"20"},{"access":"read-write","comment":"","display":"HTTP Proto Enabled","filter":"0~1","name":"httpProtoEnabled","type":"int","value":"0"},{"access":"read-write","comment":"","display":"HTTPS Proto Enabled","filter":"0~1","name":"httpsProtoEnabled","type":"int","value":"0"}]', 31, '', 1742469466572, 'public'); +INSERT INTO "ne_config" VALUES (235, 'UPF', 'dpiHeaderEnrichInfoList', 'DPI Header Enrich Info List', 'array', '[{"access":"read-only","comment":"1~32","display":"Index","filter":"1~32","name":"index","type":"int","value":"1"},{"access":"read-write","comment":"","display":"Type","filter":"","name":"type","type":"int","value":"0"},{"access":"read-write","comment":"","display":"Name","filter":"","name":"name","type":"string","value":""},{"access":"read-write","comment":"","display":"Value","filter":"","name":"value","type":"string","value":""}]', 33, '', 1742469466576, 'public'); +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'); + +-- OMC parameter config +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":"","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, '', 1725505025649, '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, '', 1727664057261, 'public'); + +-- 更新 SMSC 配置 20241010 +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 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, '', 1728528805723, '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', 1728528805736, '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\"}","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', 1728528805740, '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', 1728528805745, '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', 1728528805748, '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'); +INSERT INTO "ne_config" VALUES (301, 'SGWC', 'upfConfig', 'UPF Config', 'array', '[{"access":"read-only","comment":"","display":"Index","filter":"0~2047","name":"index","type":"int","value":""},{"access":"read-write","comment":"","display":"UPF ID","filter":"1~64","name":"id","type":"string","value":""},{"access":"read-write","comment":"e.g. ip:port","display":"Address","filter":"7~45","name":"addr","type":"string","value":""}]', 3, '', 1734512800805, 'public'); +INSERT INTO "ne_config" VALUES (302, 'SGWC', 'dnnSelectUpf', 'DNN Select UPF', 'array', '[{"access":"read-only","comment":"","display":"Index","filter":"0~65535","name":"index","type":"int","value":"0"},{"access":"read-write","comment":"","display":"DNN","filter":"1~64","name":"dnn","type":"string","value":""},{"access":"read-write","comment":"","display":"UPF ID","filter":"1~64","name":"upfId","type":"string","value":""}]', 5, '', 1734512800811, 'public'); +INSERT INTO "ne_config" VALUES (303, 'SGWC', 'dnnTaiSelectUpf', 'DNN TAI Select UPF', 'array', '[{"access":"read-only","comment":"","display":"Index","filter":"0~65535","name":"index","type":"int","value":""},{"access":"read-write","comment":"","display":"DNN","filter":"1~64","name":"dnn","type":"string","value":""},{"access":"read-write","comment":"MCC+MNC+TAC","display":"TAI","filter":"1~64","name":"tai","type":"string","value":""},{"access":"read-write","comment":"","display":"UPF ID","filter":"1~64","name":"upfId","type":"string","value":"upf2-Id"}]', 7, '', 1734512800816, 'public'); +INSERT INTO "ne_config" VALUES (304, 'SGWC', 'cdrConfig', 'Charging Data Report Config', 'list', '[{"access":"read-write","comment":"","display":"CDR Enable","filter":"","name":"enable","type":"bool","value":"false"},{"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":"Seconds","display":"Time Threshold","filter":"0~999999999","name":"timeThreshold","type":"int","value":"600"},{"access":"read-write","comment":"Bytes","display":"Volume Threshold","filter":"","name":"volumeThreshold","type":"int","value":"0~999999999999999"}]', 9, '', 1734512800821, 'public'); diff --git a/build/database/lite/common/pm_custom_title.sql b/build/database/lite/common/pm_custom_title.sql new file mode 100644 index 00000000..7a0ec5d2 --- /dev/null +++ b/build/database/lite/common/pm_custom_title.sql @@ -0,0 +1,27 @@ +-- ---------------------------- +-- Table structure for pm_custom_title +-- ---------------------------- +DROP TABLE IF EXISTS "pm_custom_title"; +CREATE TABLE "pm_custom_title" ( + "id" integer NOT NULL, + "ne_type" text(16), + "kpi_code" text(32), + "kpi_id" text(64), + "kpi_set" text, + "expression" text(1024), + "object_type" text(16), + "period" text(8), + "status" text(255), + "title" text(255), + "description" text(255), + "update_time" text, + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Records of pm_custom_title +-- ---------------------------- +INSERT INTO "pm_custom_title" VALUES (3, 'AMF', NULL, 'AMF.CKpi.AuthFailRate', 'AMF.RegSub.CmIdle,AMF.RegSubMean', 'AMF.AuthFail/AMF.AuthReqAMF.RegSub.CmIdleAMF.RegSubMean', 'AmfFunction', '15', 'Active', 'AMF鉴权失败率', '', '2023-08-18 18:06:10'); +INSERT INTO "pm_custom_title" VALUES (4, 'AMF', NULL, 'AMF会话保持数', NULL, 'AMF.SessionCreateSucc/AMF.SmContextCreateReq', 'EpRpDynN11Amf', '15', NULL, 'AMF会话保持数', 'AMF会话保持数', '2023-08-18 14:29:58'); +INSERT INTO "pm_custom_title" VALUES (7, 'AMF', NULL, 'AMF', 'AMF.AuthFail,AMF.AuthFail.20', 'AMF.AuthFail*AMF.AuthFail.20', 'AmfFunction', '15', NULL, 'asdas', '', '2023-08-18 14:30:27'); +INSERT INTO "pm_custom_title" VALUES (8, 'PCF', 'PCFHA01', 'PCF.AmAssocNbrMean', 'PCF.PolicyAmAssocNotifSucc,PCF.PolicyAmAssocDeleteSucc', 'PCF.PolicyAmAssocNotifSuccPCF.PolicyAmAssocDeleteSucc', 'PcfFunction', '15', 'Active', 'PCF指标定义', '', '2023-08-18 18:05:08'); diff --git a/build/database/lite/common/title_info.sql b/build/database/lite/common/title_info.sql new file mode 100644 index 00000000..9ba7d221 --- /dev/null +++ b/build/database/lite/common/title_info.sql @@ -0,0 +1,15 @@ +-- ---------------------------- +-- Table structure for title_info +-- ---------------------------- +DROP TABLE IF EXISTS "title_info"; +CREATE TABLE "title_info" ( + "id" integer NOT NULL, + "tag" text(15), + "title_json" text, + "remark" text(255), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Records of title_info +-- ---------------------------- diff --git a/build/database/lite/common/trace_info.sql b/build/database/lite/common/trace_info.sql new file mode 100644 index 00000000..c72f01d7 --- /dev/null +++ b/build/database/lite/common/trace_info.sql @@ -0,0 +1,60 @@ +-- ---------------------------- +-- Table structure for trace_info +-- ---------------------------- +DROP TABLE IF EXISTS "trace_info"; +CREATE TABLE "trace_info" ( + "ne_type" text(32) NOT NULL, + "interface" text(10) NOT NULL, + "message_type" integer(4) NOT NULL, + "message_title" text(64), + PRIMARY KEY ("ne_type", "interface", "message_type") +); + +-- ---------------------------- +-- Records of trace_info +-- ---------------------------- +INSERT INTO "trace_info" VALUES ('AMF', 'N1', 1, NULL); +INSERT INTO "trace_info" VALUES ('AMF', 'N11', 1, NULL); +INSERT INTO "trace_info" VALUES ('AMF', 'N12', 1, NULL); +INSERT INTO "trace_info" VALUES ('AMF', 'N14', 1, NULL); +INSERT INTO "trace_info" VALUES ('AMF', 'N15', 1, NULL); +INSERT INTO "trace_info" VALUES ('AMF', 'N2', 1, NULL); +INSERT INTO "trace_info" VALUES ('AMF', 'N8', 1, NULL); +INSERT INTO "trace_info" VALUES ('AUSF', 'N12', 1, 'Nausf_AUTH_Post ue-authentications'); +INSERT INTO "trace_info" VALUES ('AUSF', 'N12', 2, 'Nausf_AUTH_Put 5g-aka-confirmation'); +INSERT INTO "trace_info" VALUES ('AUSF', 'N12', 3, 'Nausf_AUTH_Delete 5g-aka-confirmation'); +INSERT INTO "trace_info" VALUES ('AUSF', 'N12', 4, 'Nausf_AUTH_Post eap-session'); +INSERT INTO "trace_info" VALUES ('AUSF', 'N12', 5, 'Nausf_AUTH_Delete eap-session'); +INSERT INTO "trace_info" VALUES ('SMF', 'N10', 1, NULL); +INSERT INTO "trace_info" VALUES ('SMF', 'N11', 1, NULL); +INSERT INTO "trace_info" VALUES ('SMF', 'N4', 1, NULL); +INSERT INTO "trace_info" VALUES ('SMF', 'N7', 1, NULL); +INSERT INTO "trace_info" VALUES ('UDM', 'N10', 1, 'Nudm_SDM_Get sm-data'); +INSERT INTO "trace_info" VALUES ('UDM', 'N10', 2, 'Nudm_SDM_Post sdm-subscriptions'); +INSERT INTO "trace_info" VALUES ('UDM', 'N10', 3, 'Nudm_SDM_Patch sdm-subscriptions'); +INSERT INTO "trace_info" VALUES ('UDM', 'N10', 4, 'Nudm_SDM_Delete sdm-subscriptions'); +INSERT INTO "trace_info" VALUES ('UDM', 'N10', 5, 'Nudm_SDM_Get id-translation-result'); +INSERT INTO "trace_info" VALUES ('UDM', 'N10', 6, 'Nudm_UECM_Get smf-registrations'); +INSERT INTO "trace_info" VALUES ('UDM', 'N10', 7, 'Nudm_UECM_Put smf-registrations'); +INSERT INTO "trace_info" VALUES ('UDM', 'N10', 8, 'Nudm_UECM_Patch smf-3gpp-access'); +INSERT INTO "trace_info" VALUES ('UDM', 'N10', 9, 'Nudm_UECM_Get smf-3gpp-access'); +INSERT INTO "trace_info" VALUES ('UDM', 'N10', 10, 'Nudm_UECM_Delete smf-3gpp-access'); +INSERT INTO "trace_info" VALUES ('UDM', 'N13', 1, 'Nudm_UEAU_Post generate-auth-data'); +INSERT INTO "trace_info" VALUES ('UDM', 'N13', 2, 'Nudm_UEAU_Post auth-events'); +INSERT INTO "trace_info" VALUES ('UDM', 'N8', 1, 'Nudm_SDM_Get supi'); +INSERT INTO "trace_info" VALUES ('UDM', 'N8', 2, 'Nudm_SDM_Get nssai'); +INSERT INTO "trace_info" VALUES ('UDM', 'N8', 3, 'Nudm_SDM_Get am-data'); +INSERT INTO "trace_info" VALUES ('UDM', 'N8', 4, 'Nudm_SDM_Put am-data cag-ack'); +INSERT INTO "trace_info" VALUES ('UDM', 'N8', 5, 'Nudm_SDM_Get smf-select-data'); +INSERT INTO "trace_info" VALUES ('UDM', 'N8', 6, 'Nudm_SDM_Post sdm-subscriptions'); +INSERT INTO "trace_info" VALUES ('UDM', 'N8', 7, 'Nudm_SDM_Patch sdm-subscriptions'); +INSERT INTO "trace_info" VALUES ('UDM', 'N8', 8, 'Nudm_SDM_Delete sdm-subscriptions'); +INSERT INTO "trace_info" VALUES ('UDM', 'N8', 9, 'Nudm_SDM_Get id-translation-result'); +INSERT INTO "trace_info" VALUES ('UDM', 'N8', 10, 'Nudm_UECM_Put amf-3gpp-access'); +INSERT INTO "trace_info" VALUES ('UDM', 'N8', 11, 'Nudm_UECM_Patch amf-3gpp-access'); +INSERT INTO "trace_info" VALUES ('UDM', 'N8', 12, 'Nudm_UECM_Get amf-3gpp-access'); +INSERT INTO "trace_info" VALUES ('UDM', 'N8', 13, 'Namf_Callback Deregistraion'); +INSERT INTO "trace_info" VALUES ('UPF', 'N3', 1, NULL); +INSERT INTO "trace_info" VALUES ('UPF', 'N4', 1, NULL); +INSERT INTO "trace_info" VALUES ('UPF', 'N6', 1, NULL); +INSERT INTO "trace_info" VALUES ('UPF', 'N9', 1, NULL); diff --git a/build/database/lite/install/4a_log.sql b/build/database/lite/install/4a_log.sql new file mode 100644 index 00000000..f16129ac --- /dev/null +++ b/build/database/lite/install/4a_log.sql @@ -0,0 +1,17 @@ +-- ---------------------------- +-- Table structure for 4a_log +-- ---------------------------- +DROP TABLE IF EXISTS "4a_log"; +CREATE TABLE "4a_log" ( + "LogTime" text, + "SubUser" text(32), + "App" text(64), + "Sip" text(32), + "AppModule" text(32), + "OpType" text(255), + "OpText" text(255) +); + +-- ---------------------------- +-- Records of 4a_log +-- ---------------------------- diff --git a/build/database/lite/install/alarm.sql b/build/database/lite/install/alarm.sql new file mode 100644 index 00000000..094631bd --- /dev/null +++ b/build/database/lite/install/alarm.sql @@ -0,0 +1,57 @@ +-- ---------------------------- +-- Table structure for alarm +-- ---------------------------- +DROP TABLE IF EXISTS "alarm"; +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(10), + "perceived_severity" text(10), + "object_uid" text(64), + "object_name" text(64), + "object_type" text(20), + "location_info" text(2048), + "alarm_status" text(10), + "specific_problem" text(255), + "specific_problem_id" text(100), + "add_info" text(2048), + "ack_state" integer(11), + "ack_time" integer(20), + "ack_user" text(16), + "clear_type" integer(11), + "clear_time" integer(20), + "clear_user" text(16), + "timestamp" integer(20), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table alarm +-- ---------------------------- +CREATE INDEX "idx_status_severity_time" +ON "alarm" ( + "alarm_status" ASC, + "orig_severity" ASC, + "event_time" ASC +); +CREATE UNIQUE INDEX "uk_uni_aid_ne_aseq" +ON "alarm" ( + "ne_type" ASC, + "ne_id" ASC, + "alarm_id" ASC, + "alarm_seq" ASC +); + +-- ---------------------------- +-- Records of alarm +-- ---------------------------- diff --git a/build/database/lite/install/alarm_event.sql b/build/database/lite/install/alarm_event.sql new file mode 100644 index 00000000..8a398a66 --- /dev/null +++ b/build/database/lite/install/alarm_event.sql @@ -0,0 +1,47 @@ +-- ---------------------------- +-- Table structure for alarm_event +-- ---------------------------- +DROP TABLE IF EXISTS "alarm_event"; +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(10), + "specific_problem" text(255), + "specific_problem_id" text(100), + "add_info" text(2048), + "clear_type" integer(11), + "clear_time" integer(20), + "clear_user" text(16), + "timestamp" integer(20), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table alarm_event +-- ---------------------------- +CREATE INDEX "idx_astatus_etime" +ON "alarm_event" ( + "alarm_status" ASC, + "event_time" ASC +); +CREATE UNIQUE INDEX "uk_ti_aid_aseq" +ON "alarm_event" ( + "ne_type" ASC, + "ne_id" ASC, + "alarm_id" ASC, + "alarm_seq" ASC +); + +-- ---------------------------- +-- Records of alarm_event +-- ---------------------------- diff --git a/build/database/lite/install/alarm_forward_log.sql b/build/database/lite/install/alarm_forward_log.sql new file mode 100644 index 00000000..6235f395 --- /dev/null +++ b/build/database/lite/install/alarm_forward_log.sql @@ -0,0 +1,26 @@ +-- ---------------------------- +-- Table structure for alarm_forward_log +-- ---------------------------- +DROP TABLE IF EXISTS "alarm_forward_log"; +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(10), + "alarm_type" text(10), + "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 +-- ---------------------------- diff --git a/build/database/lite/install/alarm_log.sql b/build/database/lite/install/alarm_log.sql new file mode 100644 index 00000000..0e942b41 --- /dev/null +++ b/build/database/lite/install/alarm_log.sql @@ -0,0 +1,23 @@ +-- ---------------------------- +-- Table structure for alarm_log +-- ---------------------------- +DROP TABLE IF EXISTS "alarm_log"; +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(10), + "alarm_type" text(10), + "orig_severity" text(10), + "event_time" integer(20), + "created_at" integer(20), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Records of alarm_log +-- ---------------------------- diff --git a/build/database/lite/install/alarm_relation.sql b/build/database/lite/install/alarm_relation.sql new file mode 100644 index 00000000..8a9721d5 --- /dev/null +++ b/build/database/lite/install/alarm_relation.sql @@ -0,0 +1,27 @@ +-- ---------------------------- +-- Table structure for alarm_relation +-- ---------------------------- +DROP TABLE IF EXISTS "alarm_relation"; +CREATE TABLE "alarm_relation" ( + "id" integer NOT NULL, + "created_at" text(3), + "updated_at" text(3), + "deleted_at" text(3), + "root_alarm_id" text(64), + "alarm_id" text(64), + "relation_type" text(64), + "add_info" text(64), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table alarm_relation +-- ---------------------------- +CREATE INDEX "idx_alarm_relation_deleted_at" +ON "alarm_relation" ( + "deleted_at" ASC +); + +-- ---------------------------- +-- Records of alarm_relation +-- ---------------------------- diff --git a/build/database/lite/install/alarm_subscribe.sql b/build/database/lite/install/alarm_subscribe.sql new file mode 100644 index 00000000..22356445 --- /dev/null +++ b/build/database/lite/install/alarm_subscribe.sql @@ -0,0 +1,25 @@ +-- ---------------------------- +-- Table structure for alarm_subscribe +-- ---------------------------- +DROP TABLE IF EXISTS "alarm_subscribe"; +CREATE TABLE "alarm_subscribe" ( + "id" integer NOT NULL, + "created_at" text(3), + "updated_at" text(3), + "deleted_at" text(3), + "user" text(64), + "callback_url" text(255), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table alarm_subscribe +-- ---------------------------- +CREATE INDEX "idx_alarm_subscribe_deleted_at" +ON "alarm_subscribe" ( + "deleted_at" ASC +); + +-- ---------------------------- +-- Records of alarm_subscribe +-- ---------------------------- diff --git a/build/database/lite/install/cdr_event.sql b/build/database/lite/install/cdr_event.sql new file mode 100644 index 00000000..3088be9a --- /dev/null +++ b/build/database/lite/install/cdr_event.sql @@ -0,0 +1,27 @@ +-- ---------------------------- +-- Table structure for cdr_event +-- ---------------------------- +DROP TABLE IF EXISTS "cdr_event"; +CREATE TABLE "cdr_event" ( + "id" integer NOT NULL, + "ne_type" text(32), + "ne_name" text(64), + "rm_uid" text(32), + "timestamp" integer(20), + "cdr_json" text, + "created_at" integer(20), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table cdr_event +-- ---------------------------- +CREATE INDEX "idx_uid_t" +ON "cdr_event" ( + "rm_uid" ASC, + "timestamp" ASC +); + +-- ---------------------------- +-- Records of cdr_event +-- ---------------------------- \ No newline at end of file diff --git a/build/database/lite/install/cdr_event_ims.sql b/build/database/lite/install/cdr_event_ims.sql new file mode 100644 index 00000000..4eebfa4e --- /dev/null +++ b/build/database/lite/install/cdr_event_ims.sql @@ -0,0 +1,27 @@ +-- ---------------------------- +-- Table structure for cdr_event_ims +-- ---------------------------- +DROP TABLE IF EXISTS "cdr_event_ims"; +CREATE TABLE "cdr_event_ims" ( + "id" integer NOT NULL, + "ne_type" text(32), + "ne_name" text(64), + "rm_uid" text(32), + "timestamp" integer(20), + "cdr_json" text, + "created_at" integer(20), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table cdr_event_ims +-- ---------------------------- +CREATE INDEX "idx_ims_uid_t" +ON "cdr_event_ims" ( + "rm_uid" ASC, + "timestamp" ASC +); + +-- ---------------------------- +-- Records of cdr_event_ims +-- ---------------------------- diff --git a/build/database/lite/install/cdr_event_sgwc.sql b/build/database/lite/install/cdr_event_sgwc.sql new file mode 100644 index 00000000..6476294d --- /dev/null +++ b/build/database/lite/install/cdr_event_sgwc.sql @@ -0,0 +1,27 @@ +-- ---------------------------- +-- Table structure for cdr_event_sgwc +-- ---------------------------- +DROP TABLE IF EXISTS "cdr_event_sgwc"; +CREATE TABLE "cdr_event_sgwc" ( + "id" integer NOT NULL, + "ne_type" text(32), + "ne_name" text(64), + "rm_uid" text(32), + "timestamp" integer(20), + "cdr_json" text, + "created_at" integer(20), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table cdr_event_sgwc +-- ---------------------------- +CREATE INDEX "idx_sgwc_uid_t" +ON "cdr_event_sgwc" ( + "rm_uid" ASC, + "timestamp" ASC +); + +-- ---------------------------- +-- Records of cdr_event_sgwc +-- ---------------------------- \ No newline at end of file diff --git a/build/database/lite/install/cdr_event_smf.sql b/build/database/lite/install/cdr_event_smf.sql new file mode 100644 index 00000000..43342365 --- /dev/null +++ b/build/database/lite/install/cdr_event_smf.sql @@ -0,0 +1,27 @@ +-- ---------------------------- +-- Table structure for cdr_event_smf +-- ---------------------------- +DROP TABLE IF EXISTS "cdr_event_smf"; +CREATE TABLE "cdr_event_smf" ( + "id" integer NOT NULL, + "ne_type" text(32), + "ne_name" text(64), + "rm_uid" text(32), + "timestamp" integer(20), + "cdr_json" text, + "created_at" integer(20), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table cdr_event_smf +-- ---------------------------- +CREATE INDEX "idx_smf_uid_t" +ON "cdr_event_smf" ( + "rm_uid" ASC, + "timestamp" ASC +); + +-- ---------------------------- +-- Records of cdr_event_smf +-- ---------------------------- \ No newline at end of file diff --git a/build/database/lite/install/cdr_event_smsc.sql b/build/database/lite/install/cdr_event_smsc.sql new file mode 100644 index 00000000..dc458c0f --- /dev/null +++ b/build/database/lite/install/cdr_event_smsc.sql @@ -0,0 +1,27 @@ +-- ---------------------------- +-- Table structure for cdr_event_smsc +-- ---------------------------- +DROP TABLE IF EXISTS "cdr_event_smsc"; +CREATE TABLE "cdr_event_smsc" ( + "id" integer NOT NULL, + "ne_type" text(32), + "ne_name" text(64), + "rm_uid" text(32), + "timestamp" integer(20), + "cdr_json" text, + "created_at" integer(20), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table cdr_event_smsc +-- ---------------------------- +CREATE INDEX "idx_smsc_uid_t" +ON "cdr_event_smsc" ( + "rm_uid" ASC, + "timestamp" ASC +); + +-- ---------------------------- +-- Records of cdr_event_smsc +-- ---------------------------- \ No newline at end of file diff --git a/build/database/lite/install/cert_info.sql b/build/database/lite/install/cert_info.sql new file mode 100644 index 00000000..1f793be7 --- /dev/null +++ b/build/database/lite/install/cert_info.sql @@ -0,0 +1,20 @@ +-- ---------------------------- +-- Table structure for cert_info +-- ---------------------------- +DROP TABLE IF EXISTS "cert_info"; +CREATE TABLE "cert_info" ( + "id" integer NOT NULL, + "file_name" text(64), + "key_length" integer(11), + "key_algorithm" text(16), + "cert_format" text(16), + "cert_expiration" text(24), + "created_at" text, + "updated_at" text, + "deleted_at" text, + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Records of cert_info +-- ---------------------------- \ No newline at end of file diff --git a/build/database/lite/install/event_log.sql b/build/database/lite/install/event_log.sql new file mode 100644 index 00000000..ca5eb549 --- /dev/null +++ b/build/database/lite/install/event_log.sql @@ -0,0 +1,17 @@ +-- ---------------------------- +-- Table structure for event_log +-- ---------------------------- +DROP TABLE IF EXISTS "event_log"; +CREATE TABLE "event_log" ( + "id" integer NOT NULL, + "ne_type" text(16), + "ne_id" text(32) NOT NULL, + "event" text(255) NOT NULL, + "event_time" text, + "log_time" text, + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Records of event_log +-- ---------------------------- \ No newline at end of file diff --git a/build/database/lite/install/kpi_c_report.sql b/build/database/lite/install/kpi_c_report.sql new file mode 100644 index 00000000..226c5177 --- /dev/null +++ b/build/database/lite/install/kpi_c_report.sql @@ -0,0 +1,31 @@ +-- ---------------------------- +-- Table structure for kpi_c_report +-- ---------------------------- +DROP TABLE IF EXISTS "kpi_c_report"; +CREATE TABLE "kpi_c_report" ( + "id" integer NOT NULL, + "ne_type" text(16), + "ne_name" text(64), + "rm_uid" text(64), + "date" text(10) NOT NULL, + "start_time" text(10), + "end_time" text(10), + "index" integer(11) NOT NULL, + "granularity" integer(11), + "kpi_values" text, + "created_at" integer(20), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table kpi_c_report +-- ---------------------------- +CREATE INDEX "idx_c_uid_at" +ON "kpi_c_report" ( + "rm_uid" ASC, + "created_at" ASC +); + +-- ---------------------------- +-- Records of kpi_c_report +-- ---------------------------- \ No newline at end of file diff --git a/build/database/lite/install/kpi_c_report_amf.sql b/build/database/lite/install/kpi_c_report_amf.sql new file mode 100644 index 00000000..4e5b4d50 --- /dev/null +++ b/build/database/lite/install/kpi_c_report_amf.sql @@ -0,0 +1,31 @@ +-- ---------------------------- +-- Table structure for kpi_c_report_amf +-- ---------------------------- +DROP TABLE IF EXISTS "kpi_c_report_amf"; +CREATE TABLE "kpi_c_report_amf" ( + "id" integer NOT NULL, + "ne_type" text(16), + "ne_name" text(64), + "rm_uid" text(64), + "date" text(10) NOT NULL, + "start_time" text(10), + "end_time" text(10), + "index" integer(11) NOT NULL, + "granularity" integer(11), + "kpi_values" text, + "created_at" integer(20), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table kpi_c_report_amf +-- ---------------------------- +CREATE INDEX "idx_c_amf_uid_at" +ON "kpi_c_report_amf" ( + "rm_uid" ASC, + "created_at" ASC +); + +-- ---------------------------- +-- Records of kpi_c_report_amf +-- ---------------------------- \ No newline at end of file diff --git a/build/database/lite/install/kpi_c_report_ims.sql b/build/database/lite/install/kpi_c_report_ims.sql new file mode 100644 index 00000000..6353adad --- /dev/null +++ b/build/database/lite/install/kpi_c_report_ims.sql @@ -0,0 +1,31 @@ +-- ---------------------------- +-- Table structure for kpi_c_report_ims +-- ---------------------------- +DROP TABLE IF EXISTS "kpi_c_report_ims"; +CREATE TABLE "kpi_c_report_ims" ( + "id" integer NOT NULL, + "ne_type" text(16), + "ne_name" text(64), + "rm_uid" text(64), + "date" text(10) NOT NULL, + "start_time" text(10), + "end_time" text(10), + "index" integer(11) NOT NULL, + "granularity" integer(11), + "kpi_values" text, + "created_at" integer(20), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table kpi_c_report_ims +-- ---------------------------- +CREATE INDEX "idx_c_ims_uid_at" +ON "kpi_c_report_ims" ( + "rm_uid" ASC, + "created_at" ASC +); + +-- ---------------------------- +-- Records of kpi_c_report_ims +-- ---------------------------- \ No newline at end of file diff --git a/build/database/lite/install/kpi_c_report_mme.sql b/build/database/lite/install/kpi_c_report_mme.sql new file mode 100644 index 00000000..f7ad94b4 --- /dev/null +++ b/build/database/lite/install/kpi_c_report_mme.sql @@ -0,0 +1,31 @@ +-- ---------------------------- +-- Table structure for kpi_c_report_mme +-- ---------------------------- +DROP TABLE IF EXISTS "kpi_c_report_mme"; +CREATE TABLE "kpi_c_report_mme" ( + "id" integer NOT NULL, + "ne_type" text(16), + "ne_name" text(64), + "rm_uid" text(64), + "date" text(10) NOT NULL, + "start_time" text(10), + "end_time" text(10), + "index" integer(11) NOT NULL, + "granularity" integer(11), + "kpi_values" text, + "created_at" integer(20), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table kpi_c_report_mme +-- ---------------------------- +CREATE INDEX "idx_c_mme_uid_at" +ON "kpi_c_report_mme" ( + "rm_uid" ASC, + "created_at" ASC +); + +-- ---------------------------- +-- Records of kpi_c_report_mme +-- ---------------------------- \ No newline at end of file diff --git a/build/database/lite/install/kpi_c_report_smf.sql b/build/database/lite/install/kpi_c_report_smf.sql new file mode 100644 index 00000000..705e8bf1 --- /dev/null +++ b/build/database/lite/install/kpi_c_report_smf.sql @@ -0,0 +1,31 @@ +-- ---------------------------- +-- Table structure for kpi_c_report_smf +-- ---------------------------- +DROP TABLE IF EXISTS "kpi_c_report_smf"; +CREATE TABLE "kpi_c_report_smf" ( + "id" integer NOT NULL, + "ne_type" text(16), + "ne_name" text(64), + "rm_uid" text(64), + "date" text(10) NOT NULL, + "start_time" text(10), + "end_time" text(10), + "index" integer(11) NOT NULL, + "granularity" integer(11), + "kpi_values" text, + "created_at" integer(20), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table kpi_c_report_smf +-- ---------------------------- +CREATE INDEX "idx_c_smf_uid_at" +ON "kpi_c_report_smf" ( + "rm_uid" ASC, + "created_at" ASC +); + +-- ---------------------------- +-- Records of kpi_c_report_smf +-- ---------------------------- \ No newline at end of file diff --git a/build/database/lite/install/kpi_c_report_udm.sql b/build/database/lite/install/kpi_c_report_udm.sql new file mode 100644 index 00000000..44292724 --- /dev/null +++ b/build/database/lite/install/kpi_c_report_udm.sql @@ -0,0 +1,31 @@ +-- ---------------------------- +-- Table structure for kpi_c_report_udm +-- ---------------------------- +DROP TABLE IF EXISTS "kpi_c_report_udm"; +CREATE TABLE "kpi_c_report_udm" ( + "id" integer NOT NULL, + "ne_type" text(16), + "ne_name" text(64), + "rm_uid" text(64), + "date" text(10) NOT NULL, + "start_time" text(10), + "end_time" text(10), + "index" integer(11) NOT NULL, + "granularity" integer(11), + "kpi_values" text, + "created_at" integer(20), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table kpi_c_report_udm +-- ---------------------------- +CREATE INDEX "idx_c_udm_uid_at" +ON "kpi_c_report_udm" ( + "rm_uid" ASC, + "created_at" ASC +); + +-- ---------------------------- +-- Records of kpi_c_report_udm +-- ---------------------------- \ No newline at end of file diff --git a/build/database/lite/install/kpi_c_report_upf.sql b/build/database/lite/install/kpi_c_report_upf.sql new file mode 100644 index 00000000..0099e6d2 --- /dev/null +++ b/build/database/lite/install/kpi_c_report_upf.sql @@ -0,0 +1,31 @@ +-- ---------------------------- +-- Table structure for kpi_c_report_upf +-- ---------------------------- +DROP TABLE IF EXISTS "kpi_c_report_upf"; +CREATE TABLE "kpi_c_report_upf" ( + "id" integer NOT NULL, + "ne_type" text(16), + "ne_name" text(64), + "rm_uid" text(64), + "date" text(10) NOT NULL, + "start_time" text(10), + "end_time" text(10), + "index" integer(11) NOT NULL, + "granularity" integer(11), + "kpi_values" text, + "created_at" integer(20), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table kpi_c_report_upf +-- ---------------------------- +CREATE INDEX "idx_c_upf_uid_at" +ON "kpi_c_report_upf" ( + "rm_uid" ASC, + "created_at" ASC +); + +-- ---------------------------- +-- Records of kpi_c_report_upf +-- ---------------------------- \ No newline at end of file diff --git a/build/database/lite/install/kpi_c_title.sql b/build/database/lite/install/kpi_c_title.sql new file mode 100644 index 00000000..90dfb65c --- /dev/null +++ b/build/database/lite/install/kpi_c_title.sql @@ -0,0 +1,51 @@ +-- ---------------------------- +-- Table structure for kpi_c_title +-- ---------------------------- +DROP TABLE IF EXISTS "kpi_c_title"; +CREATE TABLE "kpi_c_title" ( + "id" integer NOT NULL, + "ne_type" text(16), + "kpi_id" text(16), + "title" text(255), + "expression" text(1024), + "unit" text(16), + "description" text(255), + "status" text(16), + "created_by" text(32), + "updated_at" integer(20), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table kpi_c_title +-- ---------------------------- +CREATE UNIQUE INDEX "idx_ne_kpi_id" +ON "kpi_c_title" ( + "ne_type" ASC, + "kpi_id" ASC +); + +-- ---------------------------- +-- Records of kpi_c_title +-- ---------------------------- +INSERT INTO "kpi_c_title" VALUES (1, 'AMF', 'AMF.C.01', 'Regstration Success Rate', '(''AMF.03''/''AMF.02'')*100', '%', '', '1', 'admin', 1739362260083); +INSERT INTO "kpi_c_title" VALUES (2, 'AMF', 'AMF.C.02', 'Paging Success Rate', '((''AMF.15''+''AMF.16'')/''AMF.17'')*100', '%', '', '1', 'admin', 1739362260083); +INSERT INTO "kpi_c_title" VALUES (3, 'AMF', 'AMF.C.03', 'Service Request Success Rate', '(1-''AMF.18''/''AMF.19'')*100', '%', '', '1', 'admin', 1739362260083); +INSERT INTO "kpi_c_title" VALUES (4, 'AMF', 'AMF.C.04', '5G Register Subscriber', '''AMF.01''', ' ', '', '1', 'admin', 1739362260083); +INSERT INTO "kpi_c_title" VALUES (5, 'SMF', 'SMF.C.01', 'SA_MeanPduSession', '''SMF.01''', ' ', '', '1', 'admin', 1739362260083); +INSERT INTO "kpi_c_title" VALUES (6, 'SMF', 'SMF.C.02', 'PDU Session Establishment Success Rate', '(''SMF.02''/''SMF.03'')*100', '%', '', '1', 'admin', 1739362260083); +INSERT INTO "kpi_c_title" VALUES (7, 'SMF', 'SMF.C.03', 'IMS Session Establishment Success Rate', '(''SMF.04''/''SMF.05'')*100', '%', '', '1', 'admin', 1739362260083); +INSERT INTO "kpi_c_title" VALUES (8, 'MME', 'MME.C.01', 'Attach Success Rate ', '(''MME.A.02''/''MME.A.01'')*100', '%', '', '1', 'admin', 1739362260083); +INSERT INTO "kpi_c_title" VALUES (9, 'UPF', 'UPF.C.01', 'PFCP Establish Success Rate ', '(''UPF.01''/''UPF.02'')*100', '%', '', '1', 'admin', 1739362260083); +INSERT INTO "kpi_c_title" VALUES (10, 'UPF', 'UPF.C.02', 'N6_Uplink_Throughout', '(''UPF.03'')*8/5/1000/1000', 'Mbps', '', '1', 'admin', 1739362260083); +INSERT INTO "kpi_c_title" VALUES (11, 'UPF', 'UPF.C.03', 'N3_Uplink_Throughout', '(''UPF.06'')*8/5/1000/1000', 'Mbps', '', '1', 'admin', 1739362260083); +INSERT INTO "kpi_c_title" VALUES (12, 'UDM', 'UDM.C.01', 'AMF_UECM_Success_Rate ', '(''UDM.03''/''UDM.02'')*100', '%', '', '1', 'admin', 1739362260083); +INSERT INTO "kpi_c_title" VALUES (13, 'UDM', 'UDM.C.02', 'SMF_UECM_Success_Rate ', '(''UDM.04''/''UDM.05'')*100', '%', '', '1', 'admin', 1739362260083); +INSERT INTO "kpi_c_title" VALUES (14, 'IMS', 'IMS.C.01', 'InitReg_Success_Rate', '(''SCSCF.03''/''SCSCF.04'')*100', '%', '', '1', 'admin', 1739362260083); +INSERT INTO "kpi_c_title" VALUES (15, 'IMS', 'IMS.C.02', 'MO_Success_Rate', '(''SCSCF.05''/''SCSCF.06'')*100', '%', '', '1', 'admin', 1739362260083); +INSERT INTO "kpi_c_title" VALUES (16, 'IMS', 'IMS.C.03', 'MT_Success_Rate', '(''SCSCF.07''/''SCSCF.08'')*100', '%', '', '1', 'admin', 1739362260083); +INSERT INTO "kpi_c_title" VALUES (17, '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 (18, 'SMF', 'SMF.C.06', 'IMS_DefaultBear_Success_Rate ', '(''SMF.13''/''SMF.14'')*100', '%', '', '1', 'admin', 1739362260083); +INSERT INTO "kpi_c_title" VALUES (19, 'SMF', 'SMF.C.07', 'Bear_Success_Rate_new', '((''SMF.09''+''SMF.11'')/(''SMF.10''+''SMF.12'') )*100', '%', '', '2', 'admin', 1739362260083); +INSERT INTO "kpi_c_title" VALUES (22, 'UPF', 'UPF.C.06', 'N3_Downlink_Throughout', '(''UPF.05'')*8/5/1000/1000', 'Mbps', '', '1', 'admin', 1739362260083); +INSERT INTO "kpi_c_title" VALUES (23, 'UPF', 'UPF.C.07', 'N6_Downlink_Throughout', '(''UPF.04'')*8/5/1000/1000', 'Mbps', '', '1', 'admin', 1739362260083); diff --git a/build/database/lite/install/kpi_report.sql b/build/database/lite/install/kpi_report.sql new file mode 100644 index 00000000..feecb776 --- /dev/null +++ b/build/database/lite/install/kpi_report.sql @@ -0,0 +1,31 @@ +-- ---------------------------- +-- Table structure for kpi_report +-- ---------------------------- +DROP TABLE IF EXISTS "kpi_report"; +CREATE TABLE "kpi_report" ( + "id" integer NOT NULL, + "ne_type" text(16), + "ne_name" text(64), + "rm_uid" text(64), + "date" text(10) NOT NULL, + "start_time" text(10), + "end_time" text(10), + "index" integer(11) NOT NULL, + "granularity" integer(11), + "kpi_values" text, + "created_at" integer(20), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table kpi_report +-- ---------------------------- +CREATE INDEX "idx_uid_at" +ON "kpi_report" ( + "rm_uid" ASC, + "created_at" ASC +); + +-- ---------------------------- +-- Records of kpi_report +-- ---------------------------- \ No newline at end of file diff --git a/build/database/lite/install/kpi_report_amf.sql b/build/database/lite/install/kpi_report_amf.sql new file mode 100644 index 00000000..ac20a621 --- /dev/null +++ b/build/database/lite/install/kpi_report_amf.sql @@ -0,0 +1,31 @@ +-- ---------------------------- +-- Table structure for kpi_report_amf +-- ---------------------------- +DROP TABLE IF EXISTS "kpi_report_amf"; +CREATE TABLE "kpi_report_amf" ( + "id" integer NOT NULL, + "ne_type" text(16), + "ne_name" text(64), + "rm_uid" text(64), + "date" text(10) NOT NULL, + "start_time" text(10), + "end_time" text(10), + "index" integer(11) NOT NULL, + "granularity" integer(11), + "kpi_values" text, + "created_at" integer(20), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table kpi_report_amf +-- ---------------------------- +CREATE INDEX "idx_amf_uid_at" +ON "kpi_report_amf" ( + "rm_uid" ASC, + "created_at" ASC +); + +-- ---------------------------- +-- Records of kpi_report_amf +-- ---------------------------- \ No newline at end of file diff --git a/build/database/lite/install/kpi_report_ausf.sql b/build/database/lite/install/kpi_report_ausf.sql new file mode 100644 index 00000000..498d666f --- /dev/null +++ b/build/database/lite/install/kpi_report_ausf.sql @@ -0,0 +1,31 @@ +-- ---------------------------- +-- Table structure for kpi_report_ausf +-- ---------------------------- +DROP TABLE IF EXISTS "kpi_report_ausf"; +CREATE TABLE "kpi_report_ausf" ( + "id" integer NOT NULL, + "ne_type" text(16), + "ne_name" text(64), + "rm_uid" text(64), + "date" text(10) NOT NULL, + "start_time" text(10), + "end_time" text(10), + "index" integer(11) NOT NULL, + "granularity" integer(11), + "kpi_values" text, + "created_at" integer(20), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table kpi_report_ausf +-- ---------------------------- +CREATE INDEX "idx_ausf_uid_at" +ON "kpi_report_ausf" ( + "rm_uid" ASC, + "created_at" ASC +); + +-- ---------------------------- +-- Records of kpi_report_ausf +-- ---------------------------- \ No newline at end of file diff --git a/build/database/lite/install/kpi_report_cbc.sql b/build/database/lite/install/kpi_report_cbc.sql new file mode 100644 index 00000000..ff34bc17 --- /dev/null +++ b/build/database/lite/install/kpi_report_cbc.sql @@ -0,0 +1,31 @@ +-- ---------------------------- +-- Table structure for kpi_report_cbc +-- ---------------------------- +DROP TABLE IF EXISTS "kpi_report_cbc"; +CREATE TABLE "kpi_report_cbc" ( + "id" integer NOT NULL, + "ne_type" text(16), + "ne_name" text(64), + "rm_uid" text(64), + "date" text(10) NOT NULL, + "start_time" text(10), + "end_time" text(10), + "index" integer(11) NOT NULL, + "granularity" integer(11), + "kpi_values" text, + "created_at" integer(20), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table kpi_report_cbc +-- ---------------------------- +CREATE INDEX "idx_cbc_uid_at" +ON "kpi_report_cbc" ( + "rm_uid" ASC, + "created_at" ASC +); + +-- ---------------------------- +-- Records of kpi_report_cbc +-- ---------------------------- \ No newline at end of file diff --git a/build/database/lite/install/kpi_report_hlr.sql b/build/database/lite/install/kpi_report_hlr.sql new file mode 100644 index 00000000..4f8dbc62 --- /dev/null +++ b/build/database/lite/install/kpi_report_hlr.sql @@ -0,0 +1,31 @@ +-- ---------------------------- +-- Table structure for kpi_report_hlr +-- ---------------------------- +DROP TABLE IF EXISTS "kpi_report_hlr"; +CREATE TABLE "kpi_report_hlr" ( + "id" integer NOT NULL, + "ne_type" text(16), + "ne_name" text(64), + "rm_uid" text(64), + "date" text(10) NOT NULL, + "start_time" text(10), + "end_time" text(10), + "index" integer(11) NOT NULL, + "granularity" integer(11), + "kpi_values" text, + "created_at" integer(20), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table kpi_report_hlr +-- ---------------------------- +CREATE INDEX "idx_hlr_uid_at" +ON "kpi_report_hlr" ( + "rm_uid" ASC, + "created_at" ASC +); + +-- ---------------------------- +-- Records of kpi_report_hlr +-- ---------------------------- \ No newline at end of file diff --git a/build/database/lite/install/kpi_report_ims.sql b/build/database/lite/install/kpi_report_ims.sql new file mode 100644 index 00000000..b4abf5e6 --- /dev/null +++ b/build/database/lite/install/kpi_report_ims.sql @@ -0,0 +1,31 @@ +-- ---------------------------- +-- Table structure for kpi_report_ims +-- ---------------------------- +DROP TABLE IF EXISTS "kpi_report_ims"; +CREATE TABLE "kpi_report_ims" ( + "id" integer NOT NULL, + "ne_type" text(16), + "ne_name" text(64), + "rm_uid" text(64), + "date" text(10) NOT NULL, + "start_time" text(10), + "end_time" text(10), + "index" integer(11) NOT NULL, + "granularity" integer(11), + "kpi_values" text, + "created_at" integer(20), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table kpi_report_ims +-- ---------------------------- +CREATE INDEX "idx_ims_uid_at" +ON "kpi_report_ims" ( + "rm_uid" ASC, + "created_at" ASC +); + +-- ---------------------------- +-- Records of kpi_report_ims +-- ---------------------------- \ No newline at end of file diff --git a/build/database/lite/install/kpi_report_mme.sql b/build/database/lite/install/kpi_report_mme.sql new file mode 100644 index 00000000..4519a6d4 --- /dev/null +++ b/build/database/lite/install/kpi_report_mme.sql @@ -0,0 +1,31 @@ +-- ---------------------------- +-- Table structure for kpi_report_mme +-- ---------------------------- +DROP TABLE IF EXISTS "kpi_report_mme"; +CREATE TABLE "kpi_report_mme" ( + "id" integer NOT NULL, + "ne_type" text(16), + "ne_name" text(64), + "rm_uid" text(64), + "date" text(10) NOT NULL, + "start_time" text(10), + "end_time" text(10), + "index" integer(11) NOT NULL, + "granularity" integer(11), + "kpi_values" text, + "created_at" integer(20), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table kpi_report_mme +-- ---------------------------- +CREATE INDEX "idx_mme_uid_at" +ON "kpi_report_mme" ( + "rm_uid" ASC, + "created_at" ASC +); + +-- ---------------------------- +-- Records of kpi_report_mme +-- ---------------------------- \ No newline at end of file diff --git a/build/database/lite/install/kpi_report_mocngw.sql b/build/database/lite/install/kpi_report_mocngw.sql new file mode 100644 index 00000000..20c3388a --- /dev/null +++ b/build/database/lite/install/kpi_report_mocngw.sql @@ -0,0 +1,31 @@ +-- ---------------------------- +-- Table structure for kpi_report_mocngw +-- ---------------------------- +DROP TABLE IF EXISTS "kpi_report_mocngw"; +CREATE TABLE "kpi_report_mocngw" ( + "id" integer NOT NULL, + "ne_type" text(16), + "ne_name" text(64), + "rm_uid" text(64), + "date" text(10) NOT NULL, + "start_time" text(10), + "end_time" text(10), + "index" integer(11) NOT NULL, + "granularity" integer(11), + "kpi_values" text, + "created_at" integer(20), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table kpi_report_mocngw +-- ---------------------------- +CREATE INDEX "idx_mocngw_uid_at" +ON "kpi_report_mocngw" ( + "rm_uid" ASC, + "created_at" ASC +); + +-- ---------------------------- +-- Records of kpi_report_mocngw +-- ---------------------------- \ No newline at end of file diff --git a/build/database/lite/install/kpi_report_nssf.sql b/build/database/lite/install/kpi_report_nssf.sql new file mode 100644 index 00000000..42d8c24b --- /dev/null +++ b/build/database/lite/install/kpi_report_nssf.sql @@ -0,0 +1,31 @@ +-- ---------------------------- +-- Table structure for kpi_report_nssf +-- ---------------------------- +DROP TABLE IF EXISTS "kpi_report_nssf"; +CREATE TABLE "kpi_report_nssf" ( + "id" integer NOT NULL, + "ne_type" text(16), + "ne_name" text(64), + "rm_uid" text(64), + "date" text(10) NOT NULL, + "start_time" text(10), + "end_time" text(10), + "index" integer(11) NOT NULL, + "granularity" integer(11), + "kpi_values" text, + "created_at" integer(20), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table kpi_report_nssf +-- ---------------------------- +CREATE INDEX "idx_nssf_uid_at" +ON "kpi_report_nssf" ( + "rm_uid" ASC, + "created_at" ASC +); + +-- ---------------------------- +-- Records of kpi_report_nssf +-- ---------------------------- \ No newline at end of file diff --git a/build/database/lite/install/kpi_report_pcf.sql b/build/database/lite/install/kpi_report_pcf.sql new file mode 100644 index 00000000..357801e1 --- /dev/null +++ b/build/database/lite/install/kpi_report_pcf.sql @@ -0,0 +1,31 @@ +-- ---------------------------- +-- Table structure for kpi_report_pcf +-- ---------------------------- +DROP TABLE IF EXISTS "kpi_report_pcf"; +CREATE TABLE "kpi_report_pcf" ( + "id" integer NOT NULL, + "ne_type" text(16), + "ne_name" text(64), + "rm_uid" text(64), + "date" text(10) NOT NULL, + "start_time" text(10), + "end_time" text(10), + "index" integer(11) NOT NULL, + "granularity" integer(11), + "kpi_values" text, + "created_at" integer(20), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table kpi_report_pcf +-- ---------------------------- +CREATE INDEX "idx_pcf_uid_at" +ON "kpi_report_pcf" ( + "rm_uid" ASC, + "created_at" ASC +); + +-- ---------------------------- +-- Records of kpi_report_pcf +-- ---------------------------- \ No newline at end of file diff --git a/build/database/lite/install/kpi_report_smf.sql b/build/database/lite/install/kpi_report_smf.sql new file mode 100644 index 00000000..e26dd461 --- /dev/null +++ b/build/database/lite/install/kpi_report_smf.sql @@ -0,0 +1,31 @@ +-- ---------------------------- +-- Table structure for kpi_report_smf +-- ---------------------------- +DROP TABLE IF EXISTS "kpi_report_smf"; +CREATE TABLE "kpi_report_smf" ( + "id" integer NOT NULL, + "ne_type" text(16), + "ne_name" text(64), + "rm_uid" text(64), + "date" text(10) NOT NULL, + "start_time" text(10), + "end_time" text(10), + "index" integer(11) NOT NULL, + "granularity" integer(11), + "kpi_values" text, + "created_at" integer(20), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table kpi_report_smf +-- ---------------------------- +CREATE INDEX "idx_smf_uid_at" +ON "kpi_report_smf" ( + "rm_uid" ASC, + "created_at" ASC +); + +-- ---------------------------- +-- Records of kpi_report_smf +-- ---------------------------- \ No newline at end of file diff --git a/build/database/lite/install/kpi_report_smsc.sql b/build/database/lite/install/kpi_report_smsc.sql new file mode 100644 index 00000000..600a4daa --- /dev/null +++ b/build/database/lite/install/kpi_report_smsc.sql @@ -0,0 +1,31 @@ +-- ---------------------------- +-- Table structure for kpi_report_smsc +-- ---------------------------- +DROP TABLE IF EXISTS "kpi_report_smsc"; +CREATE TABLE "kpi_report_smsc" ( + "id" integer NOT NULL, + "ne_type" text(16), + "ne_name" text(64), + "rm_uid" text(64), + "date" text(10) NOT NULL, + "start_time" text(10), + "end_time" text(10), + "index" integer(11) NOT NULL, + "granularity" integer(11), + "kpi_values" text, + "created_at" integer(20), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table kpi_report_smsc +-- ---------------------------- +CREATE INDEX "idx_smsc_uid_at" +ON "kpi_report_smsc" ( + "rm_uid" ASC, + "created_at" ASC +); + +-- ---------------------------- +-- Records of kpi_report_smsc +-- ---------------------------- \ No newline at end of file diff --git a/build/database/lite/install/kpi_report_udm.sql b/build/database/lite/install/kpi_report_udm.sql new file mode 100644 index 00000000..8ca34115 --- /dev/null +++ b/build/database/lite/install/kpi_report_udm.sql @@ -0,0 +1,31 @@ +-- ---------------------------- +-- Table structure for kpi_report_udm +-- ---------------------------- +DROP TABLE IF EXISTS "kpi_report_udm"; +CREATE TABLE "kpi_report_udm" ( + "id" integer NOT NULL, + "ne_type" text(16), + "ne_name" text(64), + "rm_uid" text(64), + "date" text(10) NOT NULL, + "start_time" text(10), + "end_time" text(10), + "index" integer(11) NOT NULL, + "granularity" integer(11), + "kpi_values" text, + "created_at" integer(20), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table kpi_report_udm +-- ---------------------------- +CREATE INDEX "idx_udm_uid_at" +ON "kpi_report_udm" ( + "rm_uid" ASC, + "created_at" ASC +); + +-- ---------------------------- +-- Records of kpi_report_udm +-- ---------------------------- \ No newline at end of file diff --git a/build/database/lite/install/kpi_report_upf.sql b/build/database/lite/install/kpi_report_upf.sql new file mode 100644 index 00000000..85a8eb0b --- /dev/null +++ b/build/database/lite/install/kpi_report_upf.sql @@ -0,0 +1,31 @@ +-- ---------------------------- +-- Table structure for kpi_report_upf +-- ---------------------------- +DROP TABLE IF EXISTS "kpi_report_upf"; +CREATE TABLE "kpi_report_upf" ( + "id" integer NOT NULL, + "ne_type" text(16), + "ne_name" text(64), + "rm_uid" text(64), + "date" text(10) NOT NULL, + "start_time" text(10), + "end_time" text(10), + "index" integer(11) NOT NULL, + "granularity" integer(11), + "kpi_values" text, + "created_at" integer(20), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table kpi_report_upf +-- ---------------------------- +CREATE INDEX "idx_upf_uid_at" +ON "kpi_report_upf" ( + "rm_uid" ASC, + "created_at" ASC +); + +-- ---------------------------- +-- Records of kpi_report_upf +-- ---------------------------- diff --git a/build/database/lite/install/measure_data.sql b/build/database/lite/install/measure_data.sql new file mode 100644 index 00000000..f17a1edd --- /dev/null +++ b/build/database/lite/install/measure_data.sql @@ -0,0 +1,25 @@ +-- ---------------------------- +-- Table structure for measure_data +-- ---------------------------- +DROP TABLE IF EXISTS "measure_data"; +CREATE TABLE "measure_data" ( + "id" integer NOT NULL, + "date" text, + "task_id" integer(11), + "ne_name" text(64), + "rm_uid" text(64), + "ne_type" text(16), + "granul_option" text(255), + "kpi_code" text(32), + "kpi_id" text(64), + "kpi_ext" text(32), + "start_time" text, + "end_time" text, + "value" integer(20), + "timestamp" text, + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Records of measure_data +-- ---------------------------- diff --git a/build/database/lite/install/measure_task.sql b/build/database/lite/install/measure_task.sql new file mode 100644 index 00000000..75f83777 --- /dev/null +++ b/build/database/lite/install/measure_task.sql @@ -0,0 +1,26 @@ +-- ---------------------------- +-- Table structure for measure_task +-- ---------------------------- +DROP TABLE IF EXISTS "measure_task"; +CREATE TABLE "measure_task" ( + "id" integer NOT NULL, + "ne_type" text(16), + "ne_ids" text, + "kpi_set" text, + "start_time" text(32), + "end_time" text(32), + "periods" text, + "schedule" text, + "granul_option" text(255) NOT NULL, + "status" text(255) NOT NULL, + "account_id" text(32), + "comment" text(255), + "create_time" text, + "update_time" text, + "delete_time" text, + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Records of measure_task +-- ---------------------------- diff --git a/build/database/lite/install/measure_threshold.sql b/build/database/lite/install/measure_threshold.sql new file mode 100644 index 00000000..8c420040 --- /dev/null +++ b/build/database/lite/install/measure_threshold.sql @@ -0,0 +1,20 @@ +-- ---------------------------- +-- Table structure for measure_threshold +-- ---------------------------- +DROP TABLE IF EXISTS "measure_threshold"; +CREATE TABLE "measure_threshold" ( + "id" integer NOT NULL, + "ne_type" text(16), + "kpi_set" text(1024), + "threshold" integer(20), + "status" text(255), + "orig_severity" text(255), + "alarm_code" text(16), + "alarm_flag" integer(4), + "create_time" text, + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Records of measure_threshold +-- ---------------------------- diff --git a/build/database/lite/install/mml_log.sql b/build/database/lite/install/mml_log.sql new file mode 100644 index 00000000..392309ec --- /dev/null +++ b/build/database/lite/install/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), + "mml" text(1024), + "result" text(2048), + "log_time" text, + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Records of mml_log +-- ---------------------------- diff --git a/build/database/lite/install/monitor_base.sql b/build/database/lite/install/monitor_base.sql new file mode 100644 index 00000000..69ff6942 --- /dev/null +++ b/build/database/lite/install/monitor_base.sql @@ -0,0 +1,21 @@ +-- ---------------------------- +-- Table structure for monitor_base +-- ---------------------------- +DROP TABLE IF EXISTS "monitor_base"; +CREATE TABLE "monitor_base" ( + "id" integer NOT NULL, + "create_time" integer(20), + "cpu" integer, + "load_usage" integer, + "cpu_load1" integer, + "cpu_load5" integer, + "cpu_load15" integer, + "memory" integer, + "ne_type" text(32), + "ne_id" text(32), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Records of monitor_base +-- ---------------------------- diff --git a/build/database/lite/install/monitor_io.sql b/build/database/lite/install/monitor_io.sql new file mode 100644 index 00000000..117688a2 --- /dev/null +++ b/build/database/lite/install/monitor_io.sql @@ -0,0 +1,20 @@ +-- ---------------------------- +-- Table structure for monitor_io +-- ---------------------------- +DROP TABLE IF EXISTS "monitor_io"; +CREATE TABLE "monitor_io" ( + "id" integer NOT NULL, + "create_time" integer(20), + "name" text(50) NOT NULL, + "read" integer(11), + "write" integer(11), + "count" integer(11), + "time" integer(11), + "ne_type" text(32), + "ne_id" text(32), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Records of monitor_io +-- ---------------------------- diff --git a/build/database/lite/install/monitor_network.sql b/build/database/lite/install/monitor_network.sql new file mode 100644 index 00000000..3f4644e2 --- /dev/null +++ b/build/database/lite/install/monitor_network.sql @@ -0,0 +1,18 @@ +-- ---------------------------- +-- Table structure for monitor_network +-- ---------------------------- +DROP TABLE IF EXISTS "monitor_network"; +CREATE TABLE "monitor_network" ( + "id" integer NOT NULL, + "create_time" integer(20), + "name" text(50) NOT NULL, + "up" integer, + "down" integer, + "ne_type" text(32), + "ne_id" text(32), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Records of monitor_network +-- ---------------------------- diff --git a/build/database/lite/install/nb_state.sql b/build/database/lite/install/nb_state.sql new file mode 100644 index 00000000..006dafa3 --- /dev/null +++ b/build/database/lite/install/nb_state.sql @@ -0,0 +1,33 @@ +-- ---------------------------- +-- Table structure for nb_state +-- ---------------------------- +DROP TABLE IF EXISTS "nb_state"; +CREATE TABLE "nb_state" ( + "id" integer NOT NULL, + "ne_type" text(32) NOT NULL, + "ne_id" text(32) NOT NULL, + "rm_uid" text(128), + "create_time" integer(20), + "address" text(255), + "name" text(64), + "position" text(64), + "nb_name" text(128), + "state" text(12), + "time" text(64), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table nb_state +-- ---------------------------- +CREATE UNIQUE INDEX "uk_state_type_id_uid_cat" +ON "nb_state" ( + "ne_type" ASC, + "ne_id" ASC, + "rm_uid" ASC, + "create_time" ASC +); + +-- ---------------------------- +-- Records of nb_state +-- ---------------------------- diff --git a/build/database/lite/install/nbi_alarm_log.sql b/build/database/lite/install/nbi_alarm_log.sql new file mode 100644 index 00000000..82274bda --- /dev/null +++ b/build/database/lite/install/nbi_alarm_log.sql @@ -0,0 +1,23 @@ +-- ---------------------------- +-- Table structure for nbi_alarm_log +-- ---------------------------- +DROP TABLE IF EXISTS "nbi_alarm_log"; +CREATE TABLE "nbi_alarm_log" ( + "id" integer NOT NULL, + "op_user" text(16), + "src_ip" text(64) NOT NULL, + "ne_type" text(16), + "ne_id" text(32), + "alarm_seq" integer(11) NOT NULL, + "alarm_id" text(32), + "alarm_code" integer(11), + "alarm_status" integer(11), + "event_time" text(32), + "log_time" text NOT NULL, + "a_id" integer(11) NOT NULL, + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Records of nbi_alarm_log +-- ---------------------------- diff --git a/build/database/lite/install/nbi_cm.sql b/build/database/lite/install/nbi_cm.sql new file mode 100644 index 00000000..ab4bf91b --- /dev/null +++ b/build/database/lite/install/nbi_cm.sql @@ -0,0 +1,26 @@ +-- ---------------------------- +-- Table structure for nbi_cm +-- ---------------------------- +DROP TABLE IF EXISTS "nbi_cm"; +CREATE TABLE "nbi_cm" ( + "id" integer NOT NULL, + "timestamp" text, + "time_zone" text(10), + "vendor_name" text(65), + "ne_type" text(16), + "cm_version" text(32), + "rm_uid" text(32), + "ne_id" text(32), + "user_label" text(64), + "object_type" text(32), + "pv_flag" text(255), + "vm_id" text(128), + "vnf_instance_id" text(64), + "value_json" text, + "status" text(255) NOT NULL, + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Records of nbi_cm +-- ---------------------------- diff --git a/build/database/lite/install/nbi_operation_log.sql b/build/database/lite/install/nbi_operation_log.sql new file mode 100644 index 00000000..0651b12c --- /dev/null +++ b/build/database/lite/install/nbi_operation_log.sql @@ -0,0 +1,37 @@ +-- ---------------------------- +-- Table structure for nbi_operation_log +-- ---------------------------- +DROP TABLE IF EXISTS "nbi_operation_log"; +CREATE TABLE "nbi_operation_log" ( + "id" integer NOT NULL, + "src_ip" text(64), + "op_user" text(32), + "dst_ip" text(64), + "op_type" text(32), + "op_proto" text(32), + "op_params" text(255), + "op_result" text(64), + "op_time" text, + "log_time" text, + "created_at" text, + "pri" text, + "vendor" text, + "ne_name" text, + "rm_uid" text, + "ne_type" text, + "log_type" text, + "user_name" text, + "terminal_ip" text, + "start_time" text, + "end_time" text, + "oper_type" text, + "risk_level" text, + "oper_content" text, + "oper_result" text, + "failure_cause" text, + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Records of nbi_operation_log +-- ---------------------------- diff --git a/build/database/lite/install/nbi_pm.sql b/build/database/lite/install/nbi_pm.sql new file mode 100644 index 00000000..558a64e5 --- /dev/null +++ b/build/database/lite/install/nbi_pm.sql @@ -0,0 +1,24 @@ +-- ---------------------------- +-- Table structure for nbi_pm +-- ---------------------------- +DROP TABLE IF EXISTS "nbi_pm"; +CREATE TABLE "nbi_pm" ( + "id" integer NOT NULL, + "date" text, + "index" integer(11), + "start_time" text, + "time_zone" text(16), + "ne_name" text(64), + "pm_version" text(16), + "period" text(6), + "rm_uid" text(64), + "ne_type" text(16), + "dn" text(255), + "datas" text, + "timestamp" text, + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Records of nbi_pm +-- ---------------------------- diff --git a/build/database/lite/install/nbi_secure_log.sql b/build/database/lite/install/nbi_secure_log.sql new file mode 100644 index 00000000..c301a0b6 --- /dev/null +++ b/build/database/lite/install/nbi_secure_log.sql @@ -0,0 +1,24 @@ +-- ---------------------------- +-- Table structure for nbi_secure_log +-- ---------------------------- +DROP TABLE IF EXISTS "nbi_secure_log"; +CREATE TABLE "nbi_secure_log" ( + "id" integer NOT NULL, + "created_at" text(3), + "pri" text, + "vendor" text, + "ne_name" text, + "rm_uid" text, + "ne_type" text, + "log_type" text, + "event_name" text, + "start_time" text, + "user_name" text, + "terminal_ip" text, + "oper_result" text, + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Records of nbi_secure_log +-- ---------------------------- diff --git a/build/database/lite/install/ne_check.sql b/build/database/lite/install/ne_check.sql new file mode 100644 index 00000000..73eaa32e --- /dev/null +++ b/build/database/lite/install/ne_check.sql @@ -0,0 +1,16 @@ +-- ---------------------------- +-- Table structure for ne_check +-- ---------------------------- +DROP TABLE IF EXISTS "ne_check"; +CREATE TABLE "ne_check" ( + "id" integer(10) NOT NULL, + "status" integer(4), + "result" text(64), + "create_time" text, + "ne_type" text(32), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Records of ne_check +-- ---------------------------- diff --git a/build/database/lite/install/ne_config_backup.sql b/build/database/lite/install/ne_config_backup.sql new file mode 100644 index 00000000..831d2930 --- /dev/null +++ b/build/database/lite/install/ne_config_backup.sql @@ -0,0 +1,30 @@ +-- ---------------------------- +-- Table structure for ne_config_backup +-- ---------------------------- +DROP TABLE IF EXISTS "ne_config_backup"; +CREATE TABLE "ne_config_backup" ( + "id" integer NOT NULL, + "ne_type" text(32) NOT NULL, + "ne_id" text(32) NOT NULL, + "name" text(128), + "path" text(255), + "remark" text(400), + "create_by" text(50), + "create_time" integer(20), + "update_by" text(50), + "update_time" integer(20), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table ne_config_backup +-- ---------------------------- +CREATE INDEX "idx_cb_type_id" +ON "ne_config_backup" ( + "ne_type" ASC, + "ne_id" ASC +); + +-- ---------------------------- +-- Records of ne_config_backup +-- ---------------------------- diff --git a/build/database/lite/install/ne_host.sql b/build/database/lite/install/ne_host.sql new file mode 100644 index 00000000..a709d197 --- /dev/null +++ b/build/database/lite/install/ne_host.sql @@ -0,0 +1,56 @@ +-- ---------------------------- +-- Table structure for ne_host +-- ---------------------------- +DROP TABLE IF EXISTS "ne_host"; +CREATE TABLE "ne_host" ( + "id" integer NOT NULL, + "host_type" text(16), + "group_id" text(1), + "title" text(128), + "addr" text(128), + "port" integer(11), + "user" text(50), + "auth_mode" text(1), + "password" text(2000), + "private_key" text(6000), + "pass_phrase" text(2000), + "db_name" text(50), + "remark" text(500), + "create_by" text(50), + "create_time" integer(20), + "update_by" text(50), + "update_time" integer(20), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table ne_host +-- ---------------------------- +CREATE UNIQUE INDEX "uk_type_group_title" +ON "ne_host" ( + "host_type" ASC, + "group_id" ASC, + "title" ASC +); + +-- ---------------------------- +-- Records of ne_host +-- ---------------------------- +INSERT INTO "ne_host" VALUES (1, 'ssh', '1', 'OMC_001_27149', '127.0.0.1', 27149, 'new_user', '0', 't7sKsIsdh7dXKs0ErZRtGIZGRIjrFz6tJGfZGJS2h6E=', '', '', '', '', 'system', 1729063407329, '', 0); +INSERT INTO "ne_host" VALUES (2, 'telnet', '1', 'OMC_001_4100', '127.0.0.10', 4100, 'admin', '0', 'NUBonCin4GZgl7o12YjeClE8ToQmYp9KWdhMjSNxc2M=', '', '', '', '', 'system', 1729063407329, '', 0); +INSERT INTO "ne_host" VALUES (3, 'ssh', '1', 'IMS_001_27149', '127.0.0.1', 27149, 'new_user', '0', 't7sKsIsdh7dXKs0ErZRtGIZGRIjrFz6tJGfZGJS2h6E=', '', '', '', '', 'system', 1729063407329, '', 0); +INSERT INTO "ne_host" VALUES (4, 'telnet', '1', 'IMS_001_4100', '127.0.0.1', 4100, 'admin', '0', 'NUBonCin4GZgl7o12YjeClE8ToQmYp9KWdhMjSNxc2M=', '', '', '', '', 'system', 1729063407329, '', 0); +INSERT INTO "ne_host" VALUES (5, 'ssh', '1', 'AMF_001_27149', '127.0.0.1', 27149, 'new_user', '0', 't7sKsIsdh7dXKs0ErZRtGIZGRIjrFz6tJGfZGJS2h6E=', '', '', '', '', 'system', 1729063407329, '', 0); +INSERT INTO "ne_host" VALUES (6, 'telnet', '1', 'AMF_001_4100', '127.0.0.9', 4100, 'admin', '0', 'NUBonCin4GZgl7o12YjeClE8ToQmYp9KWdhMjSNxc2M=', '', '', '', '', 'system', 1729063407329, '', 0); +INSERT INTO "ne_host" VALUES (7, 'ssh', '1', 'AUSF_001_27149', '127.0.0.1', 27149, 'new_user', '0', 't7sKsIsdh7dXKs0ErZRtGIZGRIjrFz6tJGfZGJS2h6E=', '', '', '', '', 'system', 1729063407329, '', 0); +INSERT INTO "ne_host" VALUES (8, 'telnet', '1', 'AUSF_001_4100', '127.0.0.4', 4100, 'admin', '0', 'NUBonCin4GZgl7o12YjeClE8ToQmYp9KWdhMjSNxc2M=', '', '', '', '', 'system', 1729063407329, '', 0); +INSERT INTO "ne_host" VALUES (9, 'ssh', '1', 'UDM_001_27149', '127.0.0.1', 27149, 'new_user', '0', 't7sKsIsdh7dXKs0ErZRtGIZGRIjrFz6tJGfZGJS2h6E=', '', '', '', '', 'system', 1729063407329, '', 0); +INSERT INTO "ne_host" VALUES (10, 'telnet', '1', 'UDM_001_4100', '127.0.0.5', 4100, 'admin', '0', 'NUBonCin4GZgl7o12YjeClE8ToQmYp9KWdhMjSNxc2M=', '', '', '', '', 'system', 1729063407329, '', 0); +INSERT INTO "ne_host" VALUES (11, 'redis', '1', 'UDM_001_6379', '127.0.0.1', 6379, 'udmdb', '0', 'nO3fEhtuKuBkQE5ozsUhNfzn02vhnyxYTEiPn2CIlr4=', '', '', '0', '', 'system', 1729063407329, '', 0); +INSERT INTO "ne_host" VALUES (12, 'ssh', '1', 'SMF_001_27149', '127.0.0.1', 27149, 'new_user', '0', 't7sKsIsdh7dXKs0ErZRtGIZGRIjrFz6tJGfZGJS2h6E=', '', '', '', '', 'system', 1729063407329, '', 0); +INSERT INTO "ne_host" VALUES (13, 'telnet', '1', 'SMF_001_4100', '127.0.0.6', 4100, 'admin', '0', 'NUBonCin4GZgl7o12YjeClE8ToQmYp9KWdhMjSNxc2M=', '', '', '', '', 'system', 1729063407329, '', 0); +INSERT INTO "ne_host" VALUES (14, 'ssh', '1', 'PCF_001_27149', '127.0.0.1', 27149, 'new_user', '0', 't7sKsIsdh7dXKs0ErZRtGIZGRIjrFz6tJGfZGJS2h6E=', '', '', '', '', 'system', 1729063407329, '', 0); +INSERT INTO "ne_host" VALUES (15, 'telnet', '1', 'PCF_001_4100', '127.0.0.7', 4100, 'admin', '0', 'NUBonCin4GZgl7o12YjeClE8ToQmYp9KWdhMjSNxc2M=', '', '', '', '', 'system', 1729063407329, '', 0); +INSERT INTO "ne_host" VALUES (20, 'ssh', '1', 'UPF_001_27149', '127.0.0.1', 27149, 'new_user', '0', 't7sKsIsdh7dXKs0ErZRtGIZGRIjrFz6tJGfZGJS2h6E=', '', '', '', '', 'system', 1729063407329, '', 0); +INSERT INTO "ne_host" VALUES (21, 'telnet', '1', 'UPF_001_4100', '127.0.0.8', 4100, 'admin', '0', 'NUBonCin4GZgl7o12YjeClE8ToQmYp9KWdhMjSNxc2M=', '', '', '', '', 'system', 1729063407329, '', 0); +INSERT INTO "ne_host" VALUES (22, 'telnet', '1', 'UPF_001_5002', '127.0.0.8', 5002, 'admin', '0', '', '', '', '', '', 'system', 1729063407329, '', 0); diff --git a/build/database/lite/install/ne_host_cmd.sql b/build/database/lite/install/ne_host_cmd.sql new file mode 100644 index 00000000..eb716202 --- /dev/null +++ b/build/database/lite/install/ne_host_cmd.sql @@ -0,0 +1,31 @@ +-- ---------------------------- +-- Table structure for ne_host_cmd +-- ---------------------------- +DROP TABLE IF EXISTS "ne_host_cmd"; +CREATE TABLE "ne_host_cmd" ( + "id" integer NOT NULL, + "cmd_type" text(16), + "group_id" text(2), + "title" text(50), + "command" text(500), + "remark" text(500), + "create_by" text(50), + "create_time" integer(20), + "update_by" text(50), + "update_time" integer(20), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table ne_host_cmd +-- ---------------------------- +CREATE UNIQUE INDEX "uk_host_type_group_title" +ON "ne_host_cmd" ( + "cmd_type" ASC, + "group_id" ASC, + "title" ASC +); + +-- ---------------------------- +-- Records of ne_host_cmd +-- ---------------------------- diff --git a/build/database/lite/install/ne_info.sql b/build/database/lite/install/ne_info.sql new file mode 100644 index 00000000..0c9dc199 --- /dev/null +++ b/build/database/lite/install/ne_info.sql @@ -0,0 +1,47 @@ +-- ---------------------------- +-- Table structure for ne_info +-- ---------------------------- +DROP TABLE IF EXISTS "ne_info"; +CREATE TABLE "ne_info" ( + "id" integer NOT NULL, + "ne_type" text(32) NOT NULL, + "ne_id" text(32) NOT NULL, + "rm_uid" text(40), + "ne_name" text(64), + "ip" text(128), + "port" integer(11), + "pv_flag" text(32), + "province" text(32), + "vendor_name" text(64), + "dn" text(255), + "ne_address" text(64), + "host_ids" text(64), + "status" integer(11), + "remark" text(255), + "create_by" text(50), + "create_time" integer(20), + "update_by" text(50), + "update_time" integer(20), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table ne_info +-- ---------------------------- +CREATE UNIQUE INDEX "ux_netype_neid" +ON "ne_info" ( + "ne_type" ASC, + "ne_id" ASC +); + +-- ---------------------------- +-- Records of ne_info +-- ---------------------------- +INSERT INTO "ne_info" VALUES (1, 'OMC', '001', '4400HXOMC001', 'OMC_001', '127.0.0.10', 33080, 'PNF', 'AreaNet', '-', '-', '-', '1,2', 0, '', 'system', 1713928436971, '', 0); +INSERT INTO "ne_info" VALUES (2, 'IMS', '001', '4400HXIMS001', 'IMS_001', '127.0.0.1', 33030, 'PNF', 'AreaNet', '-', '-', '-', '3,4', 0, '', 'system', 1713928436971, '', 0); +INSERT INTO "ne_info" VALUES (3, 'AMF', '001', '4400HXAMF001', 'AMF_001', '127.0.0.9', 33030, 'PNF', 'AreaNet', '-', '-', '', '5,6', 0, '', 'system', 1713928436971, '', 0); +INSERT INTO "ne_info" VALUES (4, 'AUSF', '001', '4400HXAUSF001', 'AUSF_001', '127.0.0.4', 33030, 'PNF', 'AreaNet', '-', '-', '', '7,8', 0, '', 'system', 1713928436971, '', 0); +INSERT INTO "ne_info" VALUES (5, 'UDM', '001', '4400HXUDM001', 'UDM_001', '127.0.0.5', 33030, 'PNF', 'AreaNet', '-', '-', '-', '9,10,11', 0, '', 'system', 1713928436971, '', 0); +INSERT INTO "ne_info" VALUES (6, 'SMF', '001', '4400HXSMF001', 'SMF_001', '127.0.0.6', 33030, 'PNF', 'AreaNet', '-', '-', '-', '12,13', 0, '', 'system', 1713928436971, '', 0); +INSERT INTO "ne_info" VALUES (7, 'PCF', '001', '4400HXPCF001', 'PCF_001', '127.0.0.7', 33030, 'PNF', 'AreaNet', '-', '-', '-', '14,15', 0, '', 'system', 1713928436971, '', 0); +INSERT INTO "ne_info" VALUES (10, 'UPF', '001', '4400HXUPF001', 'UPF_001', '127.0.0.8', 33030, 'PNF', 'AreaNet', '-', '-', '', '20,21,22', 0, '', 'system', 1713928436971, '', 0); diff --git a/build/database/lite/install/ne_license.sql b/build/database/lite/install/ne_license.sql new file mode 100644 index 00000000..9ba93081 --- /dev/null +++ b/build/database/lite/install/ne_license.sql @@ -0,0 +1,41 @@ +-- ---------------------------- +-- Table structure for ne_license +-- ---------------------------- +DROP TABLE IF EXISTS "ne_license"; +CREATE TABLE "ne_license" ( + "id" integer NOT NULL, + "ne_type" text(32) NOT NULL, + "ne_id" text(32) NOT NULL, + "activation_request_code" text(255) NOT NULL, + "license_path" text(255), + "serial_num" text(32), + "expiry_date" text(32), + "status" text(32), + "remark" text(255), + "create_by" text(50), + "create_time" integer(20), + "update_by" text(50), + "update_time" integer(20), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table ne_license +-- ---------------------------- +CREATE UNIQUE INDEX "uk_lic_type_id" +ON "ne_license" ( + "ne_type" ASC, + "ne_id" ASC +); + +-- ---------------------------- +-- Records of ne_license +-- ---------------------------- +INSERT INTO "ne_license" VALUES (1, 'OMC', '001', '', '', '', '', '0', '', 'system', 1713928436971, '', 0); +INSERT INTO "ne_license" VALUES (2, 'IMS', '001', '', '', '', '', '0', '', 'system', 1713928436971, '', 0); +INSERT INTO "ne_license" VALUES (3, 'AMF', '001', '', '', '', '', '0', '', 'system', 1713928436971, '', 0); +INSERT INTO "ne_license" VALUES (4, 'AUSF', '001', '', '', '', '', '0', '', 'system', 1713928436971, '', 0); +INSERT INTO "ne_license" VALUES (5, 'UDM', '001', '', '', '', '', '0', '', 'system', 1713928436971, '', 0); +INSERT INTO "ne_license" VALUES (6, 'SMF', '001', '', '', '', '', '0', '', 'system', 1713928436971, '', 0); +INSERT INTO "ne_license" VALUES (7, 'PCF', '001', '', '', '', '', '0', '', 'system', 1713928436971, '', 0); +INSERT INTO "ne_license" VALUES (10, 'UPF', '001', '', '', '', '', '0', '', 'system', 1713928436971, '', 0); diff --git a/build/database/lite/install/ne_link.sql b/build/database/lite/install/ne_link.sql new file mode 100644 index 00000000..d1936ff1 --- /dev/null +++ b/build/database/lite/install/ne_link.sql @@ -0,0 +1,29 @@ +-- ---------------------------- +-- Table structure for ne_link +-- ---------------------------- +DROP TABLE IF EXISTS "ne_link"; +CREATE TABLE "ne_link" ( + "id" integer NOT NULL, + "ne_type" text(32) NOT NULL, + "ne_id" text(32) NOT NULL, + "rm_uid" text(40), + "interface" text(16), + "status" text(255), + "created_at" text, + "updated_at" text, + "deleted_at" text, + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table ne_link +-- ---------------------------- +CREATE UNIQUE INDEX "idx_netype_neid" +ON "ne_link" ( + "ne_type" ASC, + "ne_id" ASC +); + +-- ---------------------------- +-- Records of ne_link +-- ---------------------------- diff --git a/build/database/lite/install/ne_pool.sql b/build/database/lite/install/ne_pool.sql new file mode 100644 index 00000000..045fc9bb --- /dev/null +++ b/build/database/lite/install/ne_pool.sql @@ -0,0 +1,18 @@ +-- ---------------------------- +-- Table structure for ne_pool +-- ---------------------------- +DROP TABLE IF EXISTS "ne_pool"; +CREATE TABLE "ne_pool" ( + "id" integer NOT NULL, + "name" text(255), + "ne_type" text(50) NOT NULL, + "ne_id" text(50) NOT NULL, + "rm_uid" text(50), + "balance" integer(11), + "update_time" text, + PRIMARY KEY ("id", "ne_type", "ne_id") +); + +-- ---------------------------- +-- Records of ne_pool +-- ---------------------------- diff --git a/build/database/lite/install/ne_software.sql b/build/database/lite/install/ne_software.sql new file mode 100644 index 00000000..40721cf5 --- /dev/null +++ b/build/database/lite/install/ne_software.sql @@ -0,0 +1,31 @@ +-- ---------------------------- +-- Table structure for ne_software +-- ---------------------------- +DROP TABLE IF EXISTS "ne_software"; +CREATE TABLE "ne_software" ( + "id" integer NOT NULL, + "ne_type" text(32) NOT NULL, + "name" text(128) NOT NULL, + "path" text(500), + "version" text(64) NOT NULL, + "description" text(500), + "create_by" text(50), + "create_time" integer(20), + "update_by" text(50), + "update_time" integer(20), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table ne_software +-- ---------------------------- +CREATE UNIQUE INDEX "uk_type_name_version" +ON "ne_software" ( + "ne_type" ASC, + "name" ASC, + "version" ASC +); + +-- ---------------------------- +-- Records of ne_software +-- ---------------------------- diff --git a/build/database/lite/install/ne_state.sql b/build/database/lite/install/ne_state.sql new file mode 100644 index 00000000..7ddea274 --- /dev/null +++ b/build/database/lite/install/ne_state.sql @@ -0,0 +1,32 @@ +-- ---------------------------- +-- Table structure for ne_state +-- ---------------------------- +DROP TABLE IF EXISTS "ne_state"; +CREATE TABLE "ne_state" ( + "id" integer NOT NULL, + "ne_type" text(16), + "ne_id" text(32), + "version" text(16), + "capability" text(64), + "serial_num" text(16), + "expiry_date" text(10), + "cpu_usage" text, + "mem_usage" text, + "disk_space" text, + "timestamp" integer(20), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table ne_state +-- ---------------------------- +CREATE INDEX "idx_type_id_time" +ON "ne_state" ( + "ne_type" ASC, + "ne_id" ASC, + "timestamp" ASC +); + +-- ---------------------------- +-- Records of ne_state +-- ---------------------------- diff --git a/build/database/lite/install/ne_version.sql b/build/database/lite/install/ne_version.sql new file mode 100644 index 00000000..0440d55e --- /dev/null +++ b/build/database/lite/install/ne_version.sql @@ -0,0 +1,45 @@ +-- ---------------------------- +-- Table structure for ne_version +-- ---------------------------- +DROP TABLE IF EXISTS "ne_version"; +CREATE TABLE "ne_version" ( + "id" integer NOT NULL, + "ne_type" text(32) NOT NULL, + "ne_id" text(32) NOT NULL, + "name" text(128), + "version" text(64), + "path" text(255), + "pre_name" text(128), + "pre_version" text(64), + "pre_path" text(255), + "new_name" text(128), + "new_version" text(64), + "new_path" text(255), + "status" text(16), + "create_by" text(50), + "create_time" integer(20), + "update_by" text(50), + "update_time" integer(20), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table ne_version +-- ---------------------------- +CREATE UNIQUE INDEX "uk_ver_type_id" +ON "ne_version" ( + "ne_type" ASC, + "ne_id" ASC +); + +-- ---------------------------- +-- Records of ne_version +-- ---------------------------- +INSERT INTO "ne_version" VALUES (1, 'OMC', '001', '', '', '', '', '', '', '', '', '', '0', 'system', 1729063407329, '', 0); +INSERT INTO "ne_version" VALUES (2, 'IMS', '001', '', '', '', '', '', '', '', '', '', '0', 'system', 1729063407329, '', 0); +INSERT INTO "ne_version" VALUES (3, 'AMF', '001', '', '', '', '', '', '', '', '', '', '0', 'system', 1729063407329, '', 0); +INSERT INTO "ne_version" VALUES (4, 'AUSF', '001', '', '', '', '', '', '', '', '', '', '0', 'system', 1729063407329, '', 0); +INSERT INTO "ne_version" VALUES (5, 'UDM', '001', '', '', '', '', '', '', '', '', '', '0', 'system', 1729063407329, '', 0); +INSERT INTO "ne_version" VALUES (6, 'SMF', '001', '', '', '', '', '', '', '', '', '', '0', 'system', 1729063407329, '', 0); +INSERT INTO "ne_version" VALUES (7, 'PCF', '001', '', '', '', '', '', '', '', '', '', '0', 'system', 1729063407329, '', 0); +INSERT INTO "ne_version" VALUES (10, 'UPF', '001', '', '', '', '', '', '', '', '', '', '0', 'system', 1729063407329, '', 0); diff --git a/build/database/lite/install/northbound_cm.sql b/build/database/lite/install/northbound_cm.sql new file mode 100644 index 00000000..4c122004 --- /dev/null +++ b/build/database/lite/install/northbound_cm.sql @@ -0,0 +1,26 @@ +-- ---------------------------- +-- Table structure for northbound_cm +-- ---------------------------- +DROP TABLE IF EXISTS "northbound_cm"; +CREATE TABLE "northbound_cm" ( + "id" integer NOT NULL, + "timestamp" text, + "time_zone" text(10), + "vendor_name" text(65), + "ne_type" text(16), + "cm_version" text(32), + "rm_uid" text(32), + "ne_id" text(32), + "user_label" text(64), + "object_type" text(32), + "pv_flag" text(255), + "vm_id" text(128), + "vnf_instance_id" text(64), + "value_json" text, + "status" text(255) NOT NULL, + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Records of northbound_cm +-- ---------------------------- diff --git a/build/database/lite/install/northbound_pm.sql b/build/database/lite/install/northbound_pm.sql new file mode 100644 index 00000000..70438b2d --- /dev/null +++ b/build/database/lite/install/northbound_pm.sql @@ -0,0 +1,24 @@ +-- ---------------------------- +-- Table structure for northbound_pm +-- ---------------------------- +DROP TABLE IF EXISTS "northbound_pm"; +CREATE TABLE "northbound_pm" ( + "id" integer NOT NULL, + "date" text, + "index" integer(11), + "start_time" text, + "time_zone" text(16), + "ne_name" text(64), + "pm_version" text(16), + "period" text(6), + "rm_uid" text(64), + "ne_type" text(16), + "dn" text(255), + "datas" text, + "timestamp" text, + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Records of northbound_pm +-- ---------------------------- diff --git a/build/database/lite/install/oauth2_client.sql b/build/database/lite/install/oauth2_client.sql new file mode 100644 index 00000000..72276be1 --- /dev/null +++ b/build/database/lite/install/oauth2_client.sql @@ -0,0 +1,24 @@ +-- ---------------------------- +-- Table structure for oauth2_client +-- ---------------------------- +DROP TABLE IF EXISTS "oauth2_client"; +CREATE TABLE "oauth2_client" ( + "id" integer NOT NULL, + "client_id" text(32) NOT NULL, + "client_secret" text(64) NOT NULL, + "title" text(64), + "ip_white" text(255), + "del_flag" text(1), + "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 ("id") +); + +-- ---------------------------- +-- Records of oauth2_client +-- ---------------------------- diff --git a/build/database/lite/install/oauth2_log_login.sql b/build/database/lite/install/oauth2_log_login.sql new file mode 100644 index 00000000..9ea610dd --- /dev/null +++ b/build/database/lite/install/oauth2_log_login.sql @@ -0,0 +1,20 @@ +-- ---------------------------- +-- Table structure for oauth2_log_login +-- ---------------------------- +DROP TABLE IF EXISTS "oauth2_log_login"; +CREATE TABLE "oauth2_log_login" ( + "id" integer NOT NULL, + "client_id" text(32), + "login_ip" text(128), + "login_location" text(32), + "browser" text(64), + "os" text(64), + "status_flag" text(1), + "msg" text(255), + "login_time" integer, + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Records of oauth2_log_login +-- ---------------------------- diff --git a/build/database/lite/install/param_value.sql b/build/database/lite/install/param_value.sql new file mode 100644 index 00000000..b140fc48 --- /dev/null +++ b/build/database/lite/install/param_value.sql @@ -0,0 +1,17 @@ +-- ---------------------------- +-- Table structure for param_value +-- ---------------------------- +DROP TABLE IF EXISTS "param_value"; +CREATE TABLE "param_value" ( + "id" integer(11) NOT NULL, + "ne_type" text(32), + "ne_id" text(64) NOT NULL, + "flag" integer(4) NOT NULL, + "top_tag" text(32) NOT NULL, + "value_json" text, + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Records of param_value +-- ---------------------------- diff --git a/build/database/lite/install/pm_custom_data.sql b/build/database/lite/install/pm_custom_data.sql new file mode 100644 index 00000000..7567ab1f --- /dev/null +++ b/build/database/lite/install/pm_custom_data.sql @@ -0,0 +1,23 @@ +-- ---------------------------- +-- Table structure for pm_custom_data +-- ---------------------------- +DROP TABLE IF EXISTS "pm_custom_data"; +CREATE TABLE "pm_custom_data" ( + "id" integer NOT NULL, + "date" text, + "ne_name" text(64), + "rm_uid" text(64), + "ne_type" text(16), + "granul_option" text(255), + "object_type" text(32), + "kpi_id" text(64), + "start_time" text, + "end_time" text, + "value" integer, + "timestamp" text, + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Records of pm_custom_data +-- ---------------------------- diff --git a/build/database/lite/install/pm_template.sql b/build/database/lite/install/pm_template.sql new file mode 100644 index 00000000..91f4df77 --- /dev/null +++ b/build/database/lite/install/pm_template.sql @@ -0,0 +1,21 @@ +-- ---------------------------- +-- Table structure for pm_template +-- ---------------------------- +DROP TABLE IF EXISTS "pm_template"; +CREATE TABLE "pm_template" ( + "id" integer NOT NULL, + "name" text(64), + "ne_type" text(16), + "object_type" text(16) NOT NULL, + "kpi_set" text, + "created_user" text(32), + "description" text(255), + "created_time" text, + "updata_time" text, + "kpi_id" text(64), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Records of pm_template +-- ---------------------------- diff --git a/build/database/lite/install/sys_config.sql b/build/database/lite/install/sys_config.sql new file mode 100644 index 00000000..37dd7f6e --- /dev/null +++ b/build/database/lite/install/sys_config.sql @@ -0,0 +1,46 @@ +-- ---------------------------- +-- Table structure for sys_config +-- ---------------------------- +DROP TABLE IF EXISTS "sys_config"; +CREATE TABLE "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 +-- ---------------------------- +INSERT INTO "sys_config" VALUES (1, 'config.sys.user.initPassword', 'sys.user.initPassword', 'Abcd@1234..', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.user.initPasswordRemark'); +INSERT INTO "sys_config" VALUES (2, 'config.sys.account.captchaEnabled', 'sys.account.captchaEnabled', 'false', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.account.captchaEnabledRemark'); +INSERT INTO "sys_config" VALUES (3, 'config.sys.account.registerUser', 'sys.account.registerUser', 'false', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.account.registerUserRemark'); +INSERT INTO "sys_config" VALUES (4, 'config.sys.user.maxRetryCount', 'sys.user.maxRetryCount', '5', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.user.maxRetryCountRemark'); +INSERT INTO "sys_config" VALUES (5, 'config.sys.user.lockTime', 'sys.user.lockTime', '10', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.user.lockTimeRemark'); +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 (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'); +INSERT INTO "sys_config" VALUES (21, 'config.monitor.sysResource.storeDays', 'monitor.sysResource.storeDays', '30', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.monitor.sysResource.storeDaysRemark'); +INSERT INTO "sys_config" VALUES (22, 'config.sys.logo.type', 'sys.logo.type', 'brand', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.logo.typeRemark'); +INSERT 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'); +INSERT 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'); +INSERT INTO "sys_config" VALUES (25, 'config.sys.loginBackground', 'sys.loginBackground', '#', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.loginBackgroundRemark'); +INSERT INTO "sys_config" VALUES (26, 'config.sys.title', 'sys.title', 'config.sys.titleValue', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.titleRemark'); +INSERT INTO "sys_config" VALUES (27, 'config.sys.copyright', 'sys.copyright', 'config.sys.copyrightValue', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.copyrightRemark'); +INSERT INTO "sys_config" VALUES (28, 'config.sys.i18nOpen', 'sys.i18n.open', 'true', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.i18nOpenRemark'); +INSERT INTO "sys_config" VALUES (29, 'config.sys.i18nDefault', 'sys.i18n.default', 'en_US', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.i18nDefaultRemark'); +INSERT INTO "sys_config" VALUES (30, 'config.sys.lockTime', 'sys.lockTime', '0', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.lockTimeRemark'); +INSERT INTO "sys_config" VALUES (31, 'config.sys.homePage', 'sys.homePage', 'dashboard/overview/index', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.homePageRemark'); +INSERT 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/install/sys_dept.sql b/build/database/lite/install/sys_dept.sql new file mode 100644 index 00000000..7d85f5da --- /dev/null +++ b/build/database/lite/install/sys_dept.sql @@ -0,0 +1,27 @@ +-- ---------------------------- +-- Table structure for sys_dept +-- ---------------------------- +DROP TABLE IF EXISTS "sys_dept"; +CREATE TABLE "sys_dept" ( + "dept_id" integer NOT NULL, + "parent_id" integer(20), + "ancestors" text(255), + "dept_name" text(255), + "dept_sort" integer(11), + "leader" text(32), + "phone" text(32), + "email" text(64), + "status_flag" text(1), + "del_flag" text(1), + "create_by" text(64), + "create_time" integer(20), + "update_by" text(64), + "update_time" integer(20), + PRIMARY KEY ("dept_id") +); + +-- ---------------------------- +-- Records of sys_dept +-- ---------------------------- +INSERT INTO "sys_dept" VALUES (100, 0, '0', 'dept.root', 0, 'system', '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468); +INSERT INTO "sys_dept" VALUES (101, 100, '0,100', 'dept.root.item1', 1, 'system', '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468); diff --git a/build/database/lite/install/sys_dict_data.sql b/build/database/lite/install/sys_dict_data.sql new file mode 100644 index 00000000..599f5756 --- /dev/null +++ b/build/database/lite/install/sys_dict_data.sql @@ -0,0 +1,193 @@ +-- ---------------------------- +-- Table structure for sys_dict_data +-- ---------------------------- +DROP TABLE IF EXISTS "sys_dict_data"; +CREATE TABLE "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 +-- ---------------------------- +INSERT INTO "sys_dict_data" VALUES (1, 'sys_user_sex', 'dictData.sex.un', '0', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (2, 'sys_user_sex', 'dictData.sex.male', '1', 2, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (3, 'sys_user_sex', 'dictData.sex.female', '2', 3, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (4, 'sys_show_hide', 'dictData.show', '1', 1, '', 'success', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (5, 'sys_show_hide', 'dictData.hide', '0', 2, '', 'error', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (6, 'sys_normal_disable', 'dictData.normal', '1', 1, '', 'success', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (7, 'sys_normal_disable', 'dictData.disable', '0', 2, '', 'error', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (8, 'sys_yes_no', 'dictData.yes', 'Y', 1, '', 'success', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (9, 'sys_yes_no', 'dictData.no', 'N', 2, '', 'error', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (10, 'sys_common_status', 'dictData.success', '1', 1, '', 'success', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (11, 'sys_common_status', 'dictData.fail', '0', 2, '', 'error', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (12, 'sys_job_status', 'dictData.jobStatus.normal', '1', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (13, 'sys_job_status', 'dictData.jobStatus.pause', '0', 2, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (14, 'sys_job_group', 'dictData.jobGroup.Default', 'DEFAULT', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (15, 'sys_job_group', 'dictData.jobGroup.System', 'SYSTEM', 2, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (16, 'sys_oper_type', 'dictData.operType.other', '0', 1, '', 'purple', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (17, 'sys_oper_type', 'dictData.operType.add', '1', 2, '', 'blue', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (18, 'sys_oper_type', 'dictData.operType.edit', '2', 3, '', 'cyan', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (19, 'sys_oper_type', 'dictData.operType.delete', '3', 4, '', 'red', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (20, 'sys_oper_type', 'dictData.operType.auth', '4', 5, '', '#108ee9', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (21, 'sys_oper_type', 'dictData.operType.export', '5', 6, '', 'orange', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (22, 'sys_oper_type', 'dictData.operType.import', '6', 7, '', 'orange', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (23, 'sys_oper_type', 'dictData.operType.forced quit', '7', 8, '', 'default', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (24, 'sys_oper_type', 'dictData.operType.clear', '8', 9, '', '#f50', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (25, 'trace_type', 'dictData.trace.interface', '1', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (26, 'trace_type', 'dictData.trace.device', '2', 2, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (27, 'trace_type', 'dictData.trace.user', '3', 3, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +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 (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 (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, ''); +INSERT INTO "sys_dict_data" VALUES (56, 'cdr_sip_code', 'dictData.cdr_sip_code.403', '403', 5, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (57, 'cdr_sip_code', 'dictData.cdr_sip_code.408', '408', 13, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (58, 'cdr_sip_code', 'dictData.cdr_sip_code.500', '500', 16, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (59, 'cdr_call_type', 'dictData.cdr_call_type.audio', 'audio', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (60, 'cdr_call_type', 'dictData.cdr_call_type.video', 'video', 2, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (61, 'ue_auth_code', 'dictData.ue_auth_code.200', '200', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (62, 'ue_auth_code', 'dictData.ue_auth_code.001', '001', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (63, 'ue_auth_code', 'dictData.ue_auth_code.002', '002', 2, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (64, 'ue_auth_code', 'dictData.ue_auth_code.003', '003', 3, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (65, 'ue_auth_code', 'dictData.ue_auth_code.004', '004', 4, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +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 (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, ''); +INSERT INTO "sys_dict_data" VALUES (75, 'cdr_sip_code', 'dictData.cdr_sip_code.404', '404', 6, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (76, 'cdr_sip_code', 'dictData.cdr_sip_code.487', '487', 12, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (77, 'cdr_sip_code', 'dictData.cdr_sip_code.503', '503', 17, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (78, 'cdr_sip_code', 'dictData.cdr_sip_code.504', '504', 18, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (79, 'cdr_sip_code', 'dictData.cdr_sip_code.603', '603', 21, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (80, 'cdr_sip_code', 'dictData.cdr_sip_code.606', '606', 22, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (81, 'cdr_sip_code', 'dictData.cdr_sip_code.202', '202', 2, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (82, 'cdr_call_type', 'dictData.cdr_call_type.sms', 'sms', 3, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (83, 'cdr_sip_code', 'dictData.cdr_sip_code.488', '488', 14, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (84, 'cdr_sip_code', 'dictData.cdr_sip_code.0', '0', 99, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (85, 'ne_host_type', 'dictData.ne_host_type.ssh', 'ssh', 0, '', 'blue', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (86, 'ne_host_type', 'dictData.ne_host_type.telnet', 'telnet', 1, '', 'purple', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (87, 'ne_host_groupId', 'dictData.ne_host_groupId.0', '0', 0, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (88, 'ne_host_groupId', 'dictData.ne_host_groupId.1', '1', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (89, 'ne_host_groupId', 'dictData.ne_host_groupId.2', '2', 2, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (90, 'ne_host_authMode', 'dictData.ne_host_authMode.0', '0', 0, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (91, 'ne_host_authMode', 'dictData.ne_host_authMode.1', '1', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (92, 'ne_host_cmd_groupId', 'dictData.ne_host_cmd_groupId.0', '0', 0, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (93, 'ne_host_cmd_groupId', 'dictData.ne_host_cmd_groupId.1', '1', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (94, 'ne_info_status', 'dictData.ne_info_status.0', '0', 0, '', 'error', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (95, 'ne_info_status', 'dictData.ne_info_status.1', '1', 1, '', 'success', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (96, 'ne_info_status', 'dictData.ne_info_status.2', '2', 2, '', 'orange', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (97, 'ne_info_status', 'dictData.ne_info_status.3', '3', 3, '', 'blue', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (98, 'ne_license_status', 'dictData.ne_license_status.0', '0', 0, '', 'warning', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (99, 'ne_license_status', 'dictData.ne_license_status.1', '1', 1, '', 'processing', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (100, 'ne_host_authMode', 'dictData.ne_host_authMode.2', '2', 2, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (101, 'ne_version_status', 'dictData.ne_version_status.0', '0', 0, '', 'default', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (102, 'ne_version_status', 'dictData.ne_version_status.1', '1', 1, '', 'success', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (103, 'ne_version_status', 'dictData.ne_version_status.2', '2', 1, '', 'purple', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (104, 'ne_version_status', 'dictData.ne_version_status.3', '3', 1, '', 'processing', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (105, 'cdr_cause_code', 'dictData.cdr_cause_code.0', '0', 0, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (106, 'cdr_cause_code', 'dictData.cdr_cause_code.8', '8', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (107, 'cdr_cause_code', 'dictData.cdr_cause_code.10', '10', 2, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (108, 'cdr_cause_code', 'dictData.cdr_cause_code.21', '21', 10, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (109, 'cdr_cause_code', 'dictData.cdr_cause_code.22', '22', 11, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (110, 'cdr_cause_code', 'dictData.cdr_cause_code.27', '27', 12, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (111, 'cdr_cause_code', 'dictData.cdr_cause_code.28', '28', 13, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (112, 'cdr_cause_code', 'dictData.cdr_cause_code.29', '29', 14, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (113, 'cdr_cause_code', 'dictData.cdr_cause_code.30', '30', 15, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (114, 'cdr_cause_code', 'dictData.cdr_cause_code.38', '38', 16, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (115, 'cdr_cause_code', 'dictData.cdr_cause_code.41', '41', 20, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (116, 'cdr_cause_code', 'dictData.cdr_cause_code.41', '41', 21, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (117, 'cdr_cause_code', 'dictData.cdr_cause_code.42', '42', 22, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (118, 'cdr_cause_code', 'dictData.cdr_cause_code.47', '47', 23, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (119, 'cdr_cause_code', 'dictData.cdr_cause_code.50', '50', 30, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (120, 'trace_msg_type', 'dictData.trace_msg_type.0', '0', 0, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (121, 'trace_msg_type', 'dictData.trace_msg_type.1', '1', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (122, 'trace_msg_direct', 'dictData.trace_msg_direct.0', '0', 0, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (123, 'trace_msg_direct', 'dictData.trace_msg_direct.1', '1', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (124, 'trace_interfaces', 'dictData.trace_interfaces.1', 'N1', 1, '', '', '0', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (125, 'trace_interfaces', 'dictData.trace_interfaces.2', 'N2', 2, '', '', '0', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (126, 'trace_interfaces', 'dictData.trace_interfaces.3', 'N1/N2', 3, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (127, 'trace_interfaces', 'dictData.trace_interfaces.4', 'N4', 4, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (128, 'trace_interfaces', 'dictData.trace_interfaces.8', 'N8', 8, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (129, 'trace_interfaces', 'dictData.trace_interfaces.10', 'N10', 10, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (130, 'trace_interfaces', 'dictData.trace_interfaces.11', 'N11', 11, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (131, 'trace_interfaces', 'dictData.trace_interfaces.12', 'N12', 12, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (132, 'trace_interfaces', 'dictData.trace_interfaces.13', 'N13', 13, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (133, 'trace_interfaces', 'dictData.trace_interfaces.7', 'N7', 7, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (134, 'trace_interfaces', 'dictData.trace_interfaces.15', 'N15', 15, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (135, 'trace_interfaces', 'dictData.trace_interfaces.17', 'N17', 17, '', '', '0', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (136, 'trace_interfaces', 'dictData.trace_interfaces.20', 'N20', 20, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (137, 'trace_interfaces', 'dictData.trace_interfaces.22', 'N22', 22, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (138, 'trace_interfaces', 'dictData.trace_interfaces.40', 'N40', 40, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (139, 'cdr_sip_code', 'dictData.cdr_sip_code.302', '302', 3, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (140, 'cdr_sip_code', 'dictData.cdr_sip_code.402', '402', 4, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (141, 'cdr_sip_code', 'dictData.cdr_sip_code.480', '480', 7, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (142, 'cdr_sip_code', 'dictData.cdr_sip_code.481', '481', 8, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (143, 'cdr_sip_code', 'dictData.cdr_sip_code.482', '482', 9, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (144, 'cdr_sip_code', 'dictData.cdr_sip_code.486', '486', 11, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (145, 'cdr_sip_code', 'dictData.cdr_sip_code.489', '489', 15, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (146, 'cdr_sip_code', 'dictData.cdr_sip_code.580', '580', 19, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (147, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.0', '0', 99, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (148, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.200', '200', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (149, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.202', '202', 2, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (150, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.302', '302', 3, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (151, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.402', '402', 4, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (152, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.403', '403', 5, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (153, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.404', '404', 6, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (154, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.480', '480', 7, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (155, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.481', '481', 8, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (156, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.482', '482', 9, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (157, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.486', '486', 11, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (158, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.487', '487', 12, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (159, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.408', '408', 13, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (160, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.488', '488', 14, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (161, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.489', '489', 15, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (162, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.500', '500', 16, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (163, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.503', '503', 17, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (164, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.504', '504', 18, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (165, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.580', '580', 19, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_data" VALUES (166, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.603', '603', 21, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +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, ''); + diff --git a/build/database/lite/install/sys_dict_type.sql b/build/database/lite/install/sys_dict_type.sql new file mode 100644 index 00000000..30bb5f99 --- /dev/null +++ b/build/database/lite/install/sys_dict_type.sql @@ -0,0 +1,54 @@ +-- ---------------------------- +-- Table structure for sys_dict_type +-- ---------------------------- +DROP TABLE IF EXISTS "sys_dict_type"; +CREATE TABLE "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 +-- ---------------------------- +INSERT INTO "sys_dict_type" VALUES (1, 'dictType.sys_user_sex', 'sys_user_sex', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_user_sex_remark'); +INSERT INTO "sys_dict_type" VALUES (2, 'dictType.sys_show_hide', 'sys_show_hide', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_show_hide_remark'); +INSERT INTO "sys_dict_type" VALUES (3, 'dictType.sys_normal_disable', 'sys_normal_disable', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_normal_disable_remark'); +INSERT INTO "sys_dict_type" VALUES (4, 'dictType.sys_job_status', 'sys_job_status', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_job_status_remark'); +INSERT INTO "sys_dict_type" VALUES (5, 'dictType.sys_job_group', 'sys_job_group', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_job_group_remark'); +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 (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'); +INSERT INTO "sys_dict_type" VALUES (53, 'dictType.sys_role_datascope', 'sys_role_datascope', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_role_datascope_remark'); +INSERT INTO "sys_dict_type" VALUES (54, 'dictType.active_alarm_type', 'active_alarm_type', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.active_alarm_type_remark'); +INSERT INTO "sys_dict_type" VALUES (55, 'dictType.active_clear_type', 'active_clear_type', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.active_clear_type_remark'); +INSERT INTO "sys_dict_type" VALUES (56, 'dictType.active_ack_state', 'active_ack_state', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.active_ack_state_remark'); +INSERT INTO "sys_dict_type" VALUES (57, 'dictType.active_alarm_severity', 'active_alarm_severity', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.active_alarm_severity_remark'); +INSERT INTO "sys_dict_type" VALUES (58, 'dictType.index_status', 'index_status', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.index_status_remark'); +INSERT INTO "sys_dict_type" VALUES (59, 'dictType.cdr_sip_code', 'cdr_sip_code', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_type" VALUES (60, 'dictType.cdr_call_type', 'cdr_call_type', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_type" VALUES (61, 'dictType.ue_auth_code', 'ue_auth_code', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_type" VALUES (62, 'dictType.ue_event_type', 'ue_event_type', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_type" VALUES (63, 'dictType.ue_event_cm_state', 'ue_event_cm_state', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_type" VALUES (64, 'dictType.ne_host_type', 'ne_host_type', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_type" VALUES (65, 'dictType.ne_host_groupId', 'ne_host_groupId', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_type" VALUES (66, 'dictType.ne_host_authMode', 'ne_host_authMode', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_type" VALUES (67, 'dictType.ne_host_cmd_groupId', 'ne_host_cmd_groupId', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_type" VALUES (68, 'dictType.ne_info_status', 'ne_info_status', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_type" VALUES (69, 'dictType.ne_license_status', 'ne_license_status', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_type" VALUES (70, 'dictType.cdr_cause_code', 'cdr_cause_code', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_type" VALUES (71, 'dictType.trace_msg_type', 'trace_msg_type', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_type" VALUES (72, 'dictType.trace_msg_direct', 'trace_msg_direct', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO "sys_dict_type" VALUES (73, 'dictType.trace_interfaces', 'trace_interfaces', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT 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/install/sys_i18n.sql b/build/database/lite/install/sys_i18n.sql new file mode 100644 index 00000000..4b06eb8f --- /dev/null +++ b/build/database/lite/install/sys_i18n.sql @@ -0,0 +1,845 @@ +-- ---------------------------- +-- Table structure for sys_i18n +-- ---------------------------- +DROP TABLE IF EXISTS "sys_i18n"; +CREATE TABLE "sys_i18n" ( + "id" integer NOT NULL, + "key_lable" text(255) NOT NULL, + "value_zh" text(255), + "value_en" text(255), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Records of sys_i18n +-- ---------------------------- +INSERT INTO "sys_i18n" VALUES (1, 'i18n', '中文', 'English'); +INSERT INTO "sys_i18n" VALUES (2, 'hello', '你好', 'Hello'); +INSERT INTO "sys_i18n" VALUES (3, 'menu.system', '系统', 'System'); +INSERT INTO "sys_i18n" VALUES (4, 'menu.monitor', '监控', 'Monitor'); +INSERT INTO "sys_i18n" VALUES (5, 'menu.tools', '工具', 'Tools'); +INSERT INTO "sys_i18n" VALUES (6, 'menu.ne', '网元', 'NE'); +INSERT INTO "sys_i18n" VALUES (7, 'menu.ue', '终端', 'UE'); +INSERT INTO "sys_i18n" VALUES (8, 'menu.systemRemark', '系统管理目录', 'System Management Catalog'); +INSERT INTO "sys_i18n" VALUES (9, 'menu.monitorRemark', '系统监控目录', 'System Monitor Catalog'); +INSERT INTO "sys_i18n" VALUES (10, 'menu.toolsRemark', '系统工具目录', 'System Tools Catalog'); +INSERT INTO "sys_i18n" VALUES (11, 'menu.neRemark', '网元配置管理目录', 'NE Configuration Management Catalog'); +INSERT INTO "sys_i18n" VALUES (12, 'menu.ueRemark', '网元终端信息目录', 'Network Element Terminal Information Catalog'); +INSERT INTO "sys_i18n" VALUES (13, 'menu.security.user', '用户管理', 'User Management'); +INSERT INTO "sys_i18n" VALUES (14, 'menu.security.role', '角色管理', 'Role Management'); +INSERT INTO "sys_i18n" VALUES (15, 'menu.security.roleUser', '分配角色', 'Assigning Roles'); +INSERT INTO "sys_i18n" VALUES (16, 'menu.system.menu', '菜单管理', 'Menu Management'); +INSERT INTO "sys_i18n" VALUES (17, 'menu.security.dept', '部门管理', 'Department Management'); +INSERT INTO "sys_i18n" VALUES (18, 'menu.security.post', '岗位管理', 'Position Management'); +INSERT INTO "sys_i18n" VALUES (19, 'menu.system.dictType', '字典管理', 'Dictionary Management'); +INSERT INTO "sys_i18n" VALUES (20, 'menu.system.dictData', '字典数据', 'Dictionary Data'); +INSERT INTO "sys_i18n" VALUES (21, 'menu.system.paramSet', '参数设置', 'Parameter Settings'); +INSERT INTO "sys_i18n" VALUES (22, 'menu.system.systemLog', '系统日志', 'System Log'); +INSERT INTO "sys_i18n" VALUES (23, 'menu.system.systemInfo', '系统信息', 'System Information'); +INSERT INTO "sys_i18n" VALUES (24, 'menu.system.cacheInfo', '缓存信息', 'Cache Information'); +INSERT INTO "sys_i18n" VALUES (25, 'menu.system.cache', '缓存管理', 'Cache Management'); +INSERT INTO "sys_i18n" VALUES (26, 'menu.security.onlineUser', '在线用户', 'Online Users'); +INSERT INTO "sys_i18n" VALUES (27, 'menu.system.job', '调度任务', 'Scheduling Tasks'); +INSERT INTO "sys_i18n" VALUES (28, 'menu.system.jobLog', '调度日志', 'Scheduling Logs'); +INSERT INTO "sys_i18n" VALUES (29, 'menu.tools.help', '帮助文档', 'Help Documentation'); +INSERT INTO "sys_i18n" VALUES (30, 'menu.log.operat', '操作日志', 'Operation logs'); +INSERT INTO "sys_i18n" VALUES (31, 'menu.log.login', '安全日志', 'Security logs'); +INSERT INTO "sys_i18n" VALUES (32, 'menu.security.userRemark', '用户管理菜单', 'User Management Menu'); +INSERT INTO "sys_i18n" VALUES (33, 'menu.security.roleRemark', '角色管理菜单', 'Role Management Menu'); +INSERT INTO "sys_i18n" VALUES (34, 'menu.security.roleUserRemark', '分配角色内嵌隐藏菜单', 'Assign Roles Embedded Hidden Menu'); +INSERT INTO "sys_i18n" VALUES (35, 'menu.system.menuRemark', '菜单管理菜单', 'Menu Management Menu'); +INSERT INTO "sys_i18n" VALUES (36, 'menu.security.deptRemark', '部门管理菜单', 'Department management menu'); +INSERT INTO "sys_i18n" VALUES (37, 'menu.security.postRemark', '岗位管理菜单', 'Job Management Menu'); +INSERT INTO "sys_i18n" VALUES (38, 'menu.system.dictTypeRemark', '字典管理菜单', 'Dictionary management menu'); +INSERT INTO "sys_i18n" VALUES (39, 'menu.system.dictDataRemark', '字典数据内嵌隐藏菜单', 'Dictionary data embedded hidden menu'); +INSERT INTO "sys_i18n" VALUES (40, 'menu.system.paramSetRemark', '参数设置菜单', 'Parameter setting menu'); +INSERT INTO "sys_i18n" VALUES (41, 'menu.system.systemLogRemark', '系统日志目录', 'System Log Catalog'); +INSERT INTO "sys_i18n" VALUES (42, 'menu.system.systemInfoRemark', '系统信息菜单', 'System information menu'); +INSERT INTO "sys_i18n" VALUES (43, 'menu.system.cacheInfoRemark', '缓存信息菜单', 'Cache Information Menu'); +INSERT INTO "sys_i18n" VALUES (44, 'menu.system.cacheRemark', '缓存列表菜单', 'Cache List Menu'); +INSERT INTO "sys_i18n" VALUES (45, 'menu.security.onlineUserRemark', '在线用户菜单', 'Online User Menu'); +INSERT INTO "sys_i18n" VALUES (46, 'menu.system.jobRemark', '调度任务菜单', 'Scheduling Tasks menu'); +INSERT INTO "sys_i18n" VALUES (47, 'menu.system.jobLogRemark', '调度日志内嵌隐藏菜单', 'Scheduling Log Embedded Hidden Menu'); +INSERT INTO "sys_i18n" VALUES (48, 'menu.tools.helpRemark', '帮助文档菜单', 'Help file menu'); +INSERT INTO "sys_i18n" VALUES (49, 'menu.log.operatRemark', '操作日志菜单', 'Operation log menu'); +INSERT INTO "sys_i18n" VALUES (50, 'menu.log.loginRemark', '登录日志菜单', 'Login log menu'); +INSERT INTO "sys_i18n" VALUES (51, 'menu.common.query', '查询', 'Inquiry'); +INSERT INTO "sys_i18n" VALUES (52, 'menu.common.add', '新增', 'Add'); +INSERT INTO "sys_i18n" VALUES (53, 'menu.common.edit', '修改', 'Modify'); +INSERT INTO "sys_i18n" VALUES (54, 'menu.common.delete', '删除', 'Delete'); +INSERT INTO "sys_i18n" VALUES (55, 'menu.common.export', '导出', 'Export'); +INSERT INTO "sys_i18n" VALUES (56, 'menu.common.import', '导入', 'Import'); +INSERT INTO "sys_i18n" VALUES (57, 'menu.common.resetPwd', '重置密码', 'Reset Password'); +INSERT INTO "sys_i18n" VALUES (58, 'menu.common.unlock', '账户解锁', 'Account Unlock'); +INSERT INTO "sys_i18n" VALUES (59, 'menu.forcedQuit.batch ', '批量强退', 'Batch Undo'); +INSERT INTO "sys_i18n" VALUES (60, 'menu.forcedQuit.single', '单条强退', 'Individual Forced Retirement'); +INSERT INTO "sys_i18n" VALUES (61, 'menu.neData.udmAuth', 'UDM鉴权用户', 'UDM Authentication'); +INSERT INTO "sys_i18n" VALUES (62, 'menu.neData.udmSub', 'UDM签约用户', 'UDM Subscribers'); +INSERT INTO "sys_i18n" VALUES (63, 'menu.neData.udmVOIP', 'VOIP鉴权用户', 'VOIP Authentication'); +INSERT INTO "sys_i18n" VALUES (64, 'menu.neData.udmVolte', 'IMS签约用户', 'IMS Subscribers'); +INSERT INTO "sys_i18n" VALUES (65, 'menu.neData.imsSub', 'IMS在线用户', 'IMS Online Users'); +INSERT INTO "sys_i18n" VALUES (66, 'menu.neData.smfSub', 'UE在线信息', 'UE Online Information'); +INSERT INTO "sys_i18n" VALUES (67, 'menu.neData.baseOnline', '基站在线', 'Radio Online'); +INSERT INTO "sys_i18n" VALUES (68, 'menu.trace', '跟踪', 'Trace'); +INSERT INTO "sys_i18n" VALUES (69, 'menu.trace.task', '网元跟踪任务', 'NE Trace Task'); +INSERT INTO "sys_i18n" VALUES (70, 'menu.trace.taskData', '网元跟踪任务数据', 'NE Trace Task Data'); +INSERT INTO "sys_i18n" VALUES (71, 'menu.trace.pcap', '信令抓包', 'Signaling Capture'); +INSERT INTO "sys_i18n" VALUES (72, 'menu.fault', '监控', 'Monitor'); +INSERT INTO "sys_i18n" VALUES (73, 'config.neData.backupDataFTP', '备份网元数据-同步FTP服务', 'Backup NE Data - Sync Data FTP Service'); +INSERT INTO "sys_i18n" VALUES (74, 'config.neData.backupDataFTPRemark', '请通过系统页面进行设置FTP信息', 'Please set the FTP information through the system page.'); +INSERT 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}'); +INSERT 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}'); +INSERT 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}'); +INSERT INTO "sys_i18n" VALUES (78, 'menu.traceRemark', '跟踪管理目录', 'Tracking Management Menu'); +INSERT INTO "sys_i18n" VALUES (79, 'menu.trace.taskRemark', '跟踪任务菜单', 'Tracking Task Menu'); +INSERT INTO "sys_i18n" VALUES (80, 'config.sys.user.fristPasswdChange', '用户管理-首次登录密码修改', 'User Management-First Login Password Change'); +INSERT INTO "sys_i18n" VALUES (81, 'menu.trace.pcapRemark', '信令抓包菜单', 'Signaling Capture Menu'); +INSERT INTO "sys_i18n" VALUES (82, 'menu.faultRemark', '故障管理目录', 'Fault Management Catalog'); +INSERT INTO "sys_i18n" VALUES (83, 'menu.fault.active', '活动告警', 'Active Alarms'); +INSERT INTO "sys_i18n" VALUES (84, 'menu.log', '日志', 'Logs'); +INSERT INTO "sys_i18n" VALUES (85, 'menu.log.mml', 'MML日志', 'MML Logs'); +INSERT INTO "sys_i18n" VALUES (86, 'menu.log.alarm', '告警日志', 'Alarm Logs'); +INSERT INTO "sys_i18n" VALUES (87, 'menu.log.forwarding', '告警前转日志', 'Alarm Forwarding Logs'); +INSERT INTO "sys_i18n" VALUES (88, 'menu.log.set', '日志设置', 'Log Settings'); +INSERT INTO "sys_i18n" VALUES (89, 'menu.monitor.sessionUser', '用户会话', 'User Sessions'); +INSERT INTO "sys_i18n" VALUES (90, 'menu.fault.history', '历史告警', 'Historical Alarms'); +INSERT INTO "sys_i18n" VALUES (91, 'menu.fault.set', '设置', 'Settings'); +INSERT INTO "sys_i18n" VALUES (92, 'menu.perf', '性能', 'Performance'); +INSERT INTO "sys_i18n" VALUES (93, 'menu.fault.activemRemark', '活动告警菜单', 'Active Alarm Menu'); +INSERT INTO "sys_i18n" VALUES (94, 'menu.logRemark', '日志管理目录', 'Log Management Catalog'); +INSERT INTO "sys_i18n" VALUES (95, 'menu.log.operatOldRemark', '操作日志旧layui菜单', 'Operation log old layui menu'); +INSERT INTO "sys_i18n" VALUES (96, 'menu.log.mmlRemark', '操作MML日志', 'Operation MML Log'); +INSERT INTO "sys_i18n" VALUES (97, 'menu.log.alarmRemark', '告警日志菜单', 'Alarm Log Menu'); +INSERT INTO "sys_i18n" VALUES (98, 'menu.log.securityOldRemark', '安全日志旧layui菜单', 'Security Log Old Layui Menu'); +INSERT INTO "sys_i18n" VALUES (99, 'menu.log.forwardingRemark', '告警前转日志菜单', 'Alarm forward log menu'); +INSERT INTO "sys_i18n" VALUES (100, 'menu.log.setRemark', '日志设置菜单', 'Log Settings menu'); +INSERT INTO "sys_i18n" VALUES (101, 'menu.monitor.sessionUserRemark', '用户会话旧layui菜单', 'User Session Old Layui Menu'); +INSERT INTO "sys_i18n" VALUES (102, 'menu.fault.historyRemark', '历史告警菜单', 'Alarm history menu'); +INSERT INTO "sys_i18n" VALUES (103, 'menu.fault.setRemark', '故障通用设置菜单', 'Fault General Setup Menu'); +INSERT INTO "sys_i18n" VALUES (104, 'menu.perfRemark', '性能目录', 'Performance Catalog'); +INSERT INTO "sys_i18n" VALUES (105, 'menu.perf.task', '任务管理', 'Performance Tasks'); +INSERT INTO "sys_i18n" VALUES (106, 'menu.perf.data', '性能数据', 'Performance Data'); +INSERT INTO "sys_i18n" VALUES (107, 'menu.perf.kpiOverView', '关键指标概览', 'Key Performance Overview'); +INSERT INTO "sys_i18n" VALUES (108, 'menu.perf.threshold', '性能门限', 'Performance Thresholds'); +INSERT INTO "sys_i18n" VALUES (109, 'menu.perf.kpi', '关键指标', 'Key Performance Indicators'); +INSERT INTO "sys_i18n" VALUES (110, 'menu.perf.customTarget', '自定义指标', 'Custom Indicator Management'); +INSERT INTO "sys_i18n" VALUES (111, 'menu.perf.kpiKeyTarget', '关键指标报表', 'Key Performance Reports'); +INSERT INTO "sys_i18n" VALUES (112, 'menu.mml', 'MML', 'MML'); +INSERT INTO "sys_i18n" VALUES (113, 'menu.mml.ne', '网元操作', 'NE Operation'); +INSERT INTO "sys_i18n" VALUES (114, 'menu.mml.udm', 'UDM操作', 'UDM Operation'); +INSERT INTO "sys_i18n" VALUES (115, 'menu.mml.set', 'MML设置', 'MML Settings'); +INSERT INTO "sys_i18n" VALUES (116, 'menu.mml.omc', 'OMC操作', 'OMC Operation'); +INSERT INTO "sys_i18n" VALUES (117, 'menu.perf.taskRemark', '任务管理菜单', 'Task Management Menu'); +INSERT INTO "sys_i18n" VALUES (118, 'menu.perf.dataRemark', '性能数据菜单', 'Performance Data Menu'); +INSERT INTO "sys_i18n" VALUES (119, 'menu.dashboard.smscCDR.content', '可见短信内容', 'Visible SMS content'); +INSERT INTO "sys_i18n" VALUES (120, 'menu.perf.thresholdRemark', '性能门限菜单', 'Performance Threshold Menu'); +INSERT INTO "sys_i18n" VALUES (121, 'menu.perf.kpiRemark', '黄金指标菜单', 'Key Performance Indicator Menu'); +INSERT INTO "sys_i18n" VALUES (122, 'menu.perf.customTargetRemark', '自定义指标菜单', 'Custom Indicator Management Menu'); +INSERT INTO "sys_i18n" VALUES (123, 'menu.dashboard.smfCDRByIMSI', '数据流量报表', 'Data Usage Report'); +INSERT INTO "sys_i18n" VALUES (124, 'menu.mmlRemark', 'MML管理目录', 'MML Management Catalog'); +INSERT INTO "sys_i18n" VALUES (125, 'menu.mml.neRemark', '网元操作菜单', 'Network Element Operations Menu'); +INSERT INTO "sys_i18n" VALUES (126, 'menu.mml.udmRemark', '网元UDM用户数据菜单', 'Network Element UDM User Data Menu'); +INSERT INTO "sys_i18n" VALUES (127, 'menu.mml.setRemark', 'MML设置菜单', 'MML Setup Menu'); +INSERT INTO "sys_i18n" VALUES (128, 'menu.mml.omcRemark', 'OMC操作菜单', 'OMC Operation Menu'); +INSERT INTO "sys_i18n" VALUES (129, 'menu.dashboard.sgwcCDR', '漫游数据话单', 'Roaming Data CDR'); +INSERT INTO "sys_i18n" VALUES (130, 'menu.security', '安全', 'Security'); +INSERT INTO "sys_i18n" VALUES (131, 'menu.system.systemSet', '系统设置', 'System Settings'); +INSERT INTO "sys_i18n" VALUES (132, 'menu.system.systemResource', '系统资源', 'System Resources'); +INSERT INTO "sys_i18n" VALUES (133, 'log.operate.title.sgwcCDR', '漫游数据话单', 'Roaming Data CDR'); +INSERT INTO "sys_i18n" VALUES (134, 'menu.securityRemark', '安全管理目录', 'Security Management Catalog'); +INSERT INTO "sys_i18n" VALUES (135, 'menu.system.systemSetRemark', '系统设置菜单', 'System Settings Menu'); +INSERT INTO "sys_i18n" VALUES (136, 'menu.system.systemResourceRemark', '系统资源 cpu io network菜单', 'System Resources cpu io network menu'); +INSERT INTO "sys_i18n" VALUES (137, 'dictData.offline', '离线', 'Offline'); +INSERT INTO "sys_i18n" VALUES (138, 'dictData.online', '在线', 'Online'); +INSERT INTO "sys_i18n" VALUES (139, 'menu.neData.baseStation', '基站状态', 'Radio State'); +INSERT INTO "sys_i18n" VALUES (140, 'menu.noData', '没有可访问菜单数据!', 'There is no accessible menu data!'); +INSERT INTO "sys_i18n" VALUES (141, 'menu.errNameExists', '操作菜单【{name}】失败,菜单名称已存在', 'Failed to operate menu [{name}], menu name already exists!'); +INSERT INTO "sys_i18n" VALUES (142, 'menu.errPathExists', '操作菜单【{name}】失败,菜单路由地址已存在', 'Failed to operate menu [{name}], menu routing address already exists!'); +INSERT INTO "sys_i18n" VALUES (143, 'menu.errFramePath', '操作菜单【{name}】失败,非内部地址请以http(s)://开头', 'Failed to manipulate menu [{name}], non-internal address should start with http(s)://'); +INSERT INTO "sys_i18n" VALUES (144, 'menu.errParentStatus', '上级菜单未启用!', 'The parent menu is not enabled!'); +INSERT INTO "sys_i18n" VALUES (145, 'menu.errHasChildUse', '操作菜单【{name}】失败,存在使用子菜单数:{num}', 'Operation menu [{name}] failed, number of submenus in use exists: {num}'); +INSERT INTO "sys_i18n" VALUES (146, 'menu.errHasRoleUse', '操作菜单【{name}】失败,菜单已分配给角色数:{num}', 'Operation menu [{name}] failed, number of roles the menu has been assigned to: {num}'); +INSERT INTO "sys_i18n" VALUES (147, 'dictData.sex.un', '未选择', 'Not Selected'); +INSERT INTO "sys_i18n" VALUES (148, 'dictData.sex.male', '男', 'Male'); +INSERT INTO "sys_i18n" VALUES (149, 'dictData.sex.female', '女', 'Female'); +INSERT INTO "sys_i18n" VALUES (150, 'dictData.show', '显示', 'Show'); +INSERT INTO "sys_i18n" VALUES (151, 'dictData.hide', '隐藏', 'Hide'); +INSERT INTO "sys_i18n" VALUES (152, 'dictData.normal', '正常', 'Active'); +INSERT INTO "sys_i18n" VALUES (153, 'dictData.disable', '停用', 'Inactive'); +INSERT INTO "sys_i18n" VALUES (154, 'dictData.yes', '是', 'Yes'); +INSERT INTO "sys_i18n" VALUES (155, 'dictData.no', '否', 'No'); +INSERT INTO "sys_i18n" VALUES (156, 'dictData.success', '成功', 'Successful'); +INSERT INTO "sys_i18n" VALUES (157, 'dictData.fail', '失败', 'Failed'); +INSERT INTO "sys_i18n" VALUES (158, 'dictData.jobStatus.normal', '正常', 'Active'); +INSERT INTO "sys_i18n" VALUES (159, 'dictData.jobStatus.pause', '暂停', 'Inactive'); +INSERT INTO "sys_i18n" VALUES (160, 'dictData.jobGroup.Default', '默认', 'Default'); +INSERT INTO "sys_i18n" VALUES (161, 'dictData.jobGroup.System', '系统', 'System'); +INSERT INTO "sys_i18n" VALUES (162, 'dictData.operType.other', '其他', 'Other'); +INSERT INTO "sys_i18n" VALUES (163, 'dictData.operType.add', '新增', 'New'); +INSERT INTO "sys_i18n" VALUES (164, 'dictData.operType.edit', '修改', 'Modify'); +INSERT INTO "sys_i18n" VALUES (165, 'dictData.operType.delete', '删除', 'Delete'); +INSERT INTO "sys_i18n" VALUES (166, 'dictData.operType.auth', '授权', 'Authorization'); +INSERT INTO "sys_i18n" VALUES (167, 'dictData.operType.export', '导出', 'Export'); +INSERT INTO "sys_i18n" VALUES (168, 'dictData.operType.import', '导入', 'Import'); +INSERT INTO "sys_i18n" VALUES (169, 'dictData.operType.forced quit', '强退', 'Forced Retirement'); +INSERT INTO "sys_i18n" VALUES (170, 'dictData.operType.clear', '清空', 'Clear'); +INSERT INTO "sys_i18n" VALUES (171, 'dictData.trace.interface', '接口跟踪', 'Interface Tracing'); +INSERT INTO "sys_i18n" VALUES (172, 'dictData.trace.device', '设备跟踪', 'Module Tracing'); +INSERT INTO "sys_i18n" VALUES (173, 'dictData.trace.user', '用户跟踪', 'User Tracing'); +INSERT INTO "sys_i18n" VALUES (174, 'nbState.export.id', '编号', 'ID'); +INSERT INTO "sys_i18n" VALUES (175, 'nbState.export.name', '基站名称', 'Name'); +INSERT INTO "sys_i18n" VALUES (176, 'nbState.export.position', '基站位置', 'Position'); +INSERT INTO "sys_i18n" VALUES (177, 'nbState.export.address', 'IP地址', 'IP Address'); +INSERT INTO "sys_i18n" VALUES (178, 'nbState.export.nbName', '设备名称', 'RanNodeName'); +INSERT INTO "sys_i18n" VALUES (179, 'nbState.export.ueNum', '在线用户数', 'UE Number'); +INSERT INTO "sys_i18n" VALUES (180, 'nbState.export.state', '基站状态', 'State'); +INSERT INTO "sys_i18n" VALUES (181, 'nbState.export.time', '变更时间', 'Change Time'); +INSERT INTO "sys_i18n" VALUES (182, 'neHost.okBySSHLink', '设置免密直连成功', 'Setting up a password-free direct connection is successful'); +INSERT INTO "sys_i18n" VALUES (183, 'neHost.banNE', '禁止操作网元', 'Do not operate the NE'); +INSERT INTO "sys_i18n" VALUES (184, 'dictData.ne_host_type.redis', 'Redis', 'Redis'); +INSERT INTO "sys_i18n" VALUES (185, 'menu.tools.ping', '网络探测测试', 'Net Probing Test'); +INSERT INTO "sys_i18n" VALUES (186, 'menu.tools.iperf', '网络性能测试', 'Net Performance Test'); +INSERT INTO "sys_i18n" VALUES (187, 'dictData.jobSaveLog.no', '不记录', 'No Record'); +INSERT INTO "sys_i18n" VALUES (188, 'dictData.jobSaveLog.yes', '记录', 'Recorded'); +INSERT INTO "sys_i18n" VALUES (189, 'dictData.neVersionStatus.upload', '已上传', 'Uploaded'); +INSERT INTO "sys_i18n" VALUES (190, 'dictData.neVersionStatus.inactive', '未激活', 'Inactivated'); +INSERT INTO "sys_i18n" VALUES (191, 'dictData.neVersionStatus.active', '已激活', 'Activated'); +INSERT INTO "sys_i18n" VALUES (192, 'dictData.alarmStatus.history', '历史告警', 'Historical Alarm'); +INSERT INTO "sys_i18n" VALUES (193, 'dictData.alarmStatus.active', '活动告警', 'Active Alarm'); +INSERT INTO "sys_i18n" VALUES (194, 'dictData.export.code', '数据代码', 'Data Code'); +INSERT INTO "sys_i18n" VALUES (195, 'dictData.export.sort', '数据排序', 'Data Sort'); +INSERT INTO "sys_i18n" VALUES (196, 'dictData.export.label', '数据标签', 'Data Key'); +INSERT INTO "sys_i18n" VALUES (197, 'dictData.export.value', '数据键值', 'Data Value'); +INSERT INTO "sys_i18n" VALUES (198, 'dictData.export.type', '数据排序', 'Data Type'); +INSERT INTO "sys_i18n" VALUES (199, 'dictData.export.status', '数据状态', 'Status'); +INSERT INTO "sys_i18n" VALUES (200, 'dictData.datascope.all', '全部数据权限', 'All data permissions'); +INSERT INTO "sys_i18n" VALUES (201, 'dictData.datascope.custom', '自定数据权限', 'Customized Data Rights'); +INSERT INTO "sys_i18n" VALUES (202, 'dictData.datascope.dept', '部门数据权限', 'Departmental Data Permissions'); +INSERT INTO "sys_i18n" VALUES (203, 'dictData.datascope.deptAndChid', '部门及以下数据权限', 'Department and below'); +INSERT INTO "sys_i18n" VALUES (204, 'dictData.datascope.self', '仅本人数据权限', 'Personal data access only'); +INSERT INTO "sys_i18n" VALUES (205, 'dictData.noData', '没有可访问字典编码数据!', 'There is no accessible dictionary code data!'); +INSERT INTO "sys_i18n" VALUES (206, 'dictData.errLabelExists', '操作数据【{name}】失败,该字典类型下标签名已存在', 'Failed to manipulate data [{name}], tag name already exists under this dictionary type!'); +INSERT INTO "sys_i18n" VALUES (207, 'dictType.sys_user_sex', '用户性别', 'User Gender'); +INSERT INTO "sys_i18n" VALUES (208, 'dictType.sys_show_hide', '菜单状态', 'Menu Status'); +INSERT INTO "sys_i18n" VALUES (209, 'dictType.sys_normal_disable', '系统开关', 'System switches'); +INSERT INTO "sys_i18n" VALUES (210, 'dictType.sys_job_status', '任务状态', 'Task Status'); +INSERT INTO "sys_i18n" VALUES (211, 'dictType.sys_job_group', '任务分组', 'Task Grouping'); +INSERT INTO "sys_i18n" VALUES (212, 'dictType.sys_yes_no', '系统是否', 'System or not'); +INSERT INTO "sys_i18n" VALUES (213, 'dictType.sys_oper_type', '操作类型', 'Operation Type'); +INSERT INTO "sys_i18n" VALUES (214, 'dictType.sys_common_status', '系统状态', 'System Status'); +INSERT INTO "sys_i18n" VALUES (215, 'dictType.trace_type', '跟踪类型', 'Trace Types'); +INSERT INTO "sys_i18n" VALUES (216, 'menu.tools.ps', '进程运行程序', 'Process Running Program'); +INSERT INTO "sys_i18n" VALUES (217, 'dictType.alarm_status', '告警日志类型', 'Alarm Log Type'); +INSERT INTO "sys_i18n" VALUES (218, 'menu.tools.net', '进程网络连接', 'Process Net Connection'); +INSERT INTO "sys_i18n" VALUES (219, 'dictType.ne_version_status', '网元软件版本状态', 'Network element software version status'); +INSERT INTO "sys_i18n" VALUES (220, 'dictType.sys_user_sex_remark', '用户性别列表', 'User gender list'); +INSERT INTO "sys_i18n" VALUES (221, 'dictType.sys_show_hide_remark', '菜单状态列表', 'Menu Status List'); +INSERT INTO "sys_i18n" VALUES (222, 'dictType.sys_normal_disable_remark', '系统开关列表', 'System switch list'); +INSERT INTO "sys_i18n" VALUES (223, 'dictType.sys_job_status_remark', '任务状态列表', 'Task Status List'); +INSERT INTO "sys_i18n" VALUES (224, 'dictType.sys_job_group_remark', '任务分组列表', 'Task Grouping List'); +INSERT INTO "sys_i18n" VALUES (225, 'dictType.sys_yes_no_remark', '系统是否列表', 'System whether list'); +INSERT INTO "sys_i18n" VALUES (226, 'dictType.sys_oper_type_remark', '操作类型列表', 'Operation type list'); +INSERT INTO "sys_i18n" VALUES (227, 'dictType.sys_common_status_remark', '登录状态列表', 'Login Status List'); +INSERT INTO "sys_i18n" VALUES (228, 'dictType.trace_type_remark', '跟踪类型', 'Trace Types'); +INSERT INTO "sys_i18n" VALUES (229, 'dictType.alarm_status_remark', '告警日志状态类型', 'Alarm Log Status Type'); +INSERT INTO "sys_i18n" VALUES (230, 'menu.trace.tshark', '信令分析', 'Signaling Analysis'); +INSERT INTO "sys_i18n" VALUES (231, 'menu.trace.wireshark', '信令跟踪', 'Signaling Trace'); +INSERT INTO "sys_i18n" VALUES (232, 'dictType.ne_version_status_remark', '网元软件版本状态', 'Network element software version status'); +INSERT INTO "sys_i18n" VALUES (233, 'dictType.export.id', '字典编号', 'Dictionary Number'); +INSERT INTO "sys_i18n" VALUES (234, 'dictType.export.name', '字典名称', 'Dictionary Name'); +INSERT INTO "sys_i18n" VALUES (235, 'dictType.export.type', '字典类型', 'Dictionary Type'); +INSERT INTO "sys_i18n" VALUES (236, 'dictType.export.status', '字典状态', 'Status'); +INSERT INTO "sys_i18n" VALUES (237, 'dictType.sys_role_datascope', '系统角色数据范围', 'System Role Data Range'); +INSERT INTO "sys_i18n" VALUES (238, 'dictType.sys_role_datascope_remark', '系统角色数据范围映射', 'System Role Data Range Mapping'); +INSERT INTO "sys_i18n" VALUES (239, 'dictType.noData', '没有可访问字典类型数据!', 'There is no accessible dictionary type data!'); +INSERT INTO "sys_i18n" VALUES (240, 'dictType.errNameExists', '操作字典【{name}】失败,字典名称已存在', 'Failed to manipulate dictionary [{name}], dictionary name already exists!'); +INSERT INTO "sys_i18n" VALUES (241, 'dictType.errTypeExists', '操作字典【{name}】失败,字典类型已存在', 'Failed to manipulate dictionary [{name}], dictionary type already exists!'); +INSERT INTO "sys_i18n" VALUES (242, 'dept.root', '系统', 'System'); +INSERT INTO "sys_i18n" VALUES (243, 'dept.root.item1', '未分配', 'Unallocated'); +INSERT INTO "sys_i18n" VALUES (244, 'dept.noData', '没有可访问部门数据!', 'There is no accessible department data!'); +INSERT INTO "sys_i18n" VALUES (245, 'dept.errParentDelFlag', '上级部门【{name}】已删除,不允许新增', 'The parent department [{name}] has been deleted and is not allowed to be added.'); +INSERT INTO "sys_i18n" VALUES (246, 'dept.errParentStatus', '上级部门【{name}】停用,不允许新增', 'Parent department [{name}] is deactivated, additions are not allowed!'); +INSERT INTO "sys_i18n" VALUES (247, 'dept.errNameExists', '操作部门【{name}】失败,部门名称已存在', 'Manipulate department [{name}] failed, department name already exists!'); +INSERT INTO "sys_i18n" VALUES (248, 'dept.errParentID', '操作部门【{name}】失败,上级部门不能是自己', 'Failed to operate department [{name}], the parent department cannot be itself.'); +INSERT INTO "sys_i18n" VALUES (249, 'dept.errHasChildUse', '操作失败,该部门包含未停用的子部门数量:{num}', 'Operation failed, the department contains undeactivated sub-departments number: {num}'); +INSERT INTO "sys_i18n" VALUES (250, 'dept.errHasUserUse', '不允许删除,部门已分配给用户数:{num}', 'Deletion is not allowed, number of users the department has been assigned to: {num}'); +INSERT INTO "sys_i18n" VALUES (251, 'config.sys.user.initPassword', '用户管理-账号初始密码', 'User Management-Account Initial Password'); +INSERT INTO "sys_i18n" VALUES (252, 'config.sys.account.captchaEnabled', '账号自助-验证码开关', 'Account self-help-Certification code switch'); +INSERT INTO "sys_i18n" VALUES (253, 'config.sys.account.registerUser', '账号自助-是否开启用户注册功能', 'Account self-service-Whether to enable the user registration function'); +INSERT INTO "sys_i18n" VALUES (254, 'config.sys.user.maxRetryCount', '用户管理-密码最大错误次数', 'User Management-Maximum number of password errors'); +INSERT INTO "sys_i18n" VALUES (255, 'config.sys.user.lockTime', '用户管理-密码锁定时间', 'User Management-Password Lock Time'); +INSERT INTO "sys_i18n" VALUES (256, 'config.monitor.sysResource.storeDays', '监控-系统资源-数据保留时长', 'Monitor-System Resources-Data retention time'); +INSERT INTO "sys_i18n" VALUES (257, 'config.sys.logo.type', '系统设置-LOGO类型', 'System Settings-Logo Type'); +INSERT INTO "sys_i18n" VALUES (258, 'config.sys.logo.filePathIcon', '系统设置-LOGO文件icon', 'System Settings-Logo File icon'); +INSERT INTO "sys_i18n" VALUES (259, 'config.sys.logo.filePathBrand', '系统设置-LOGO文件brand', 'System Settings-Logo File Brand'); +INSERT INTO "sys_i18n" VALUES (260, 'config.sys.loginBackground', '系统设置-登录界面背景', 'System Settings-Login Interface Background'); +INSERT INTO "sys_i18n" VALUES (261, 'config.sys.title', '系统设置-系统名称', 'System Settings-System Name'); +INSERT INTO "sys_i18n" VALUES (262, 'config.sys.copyright', '系统设置-版权声明', 'System Settings-Copyright Notice'); +INSERT INTO "sys_i18n" VALUES (263, 'config.sys.user.initPasswordRemark', '导入用户初始化密码', 'Import user initialization password'); +INSERT INTO "sys_i18n" VALUES (264, 'config.sys.account.captchaEnabledRemark', '是否开启验证码功能(true开启,false关闭)', 'Whether to enable the verification code function (true on, false off)'); +INSERT INTO "sys_i18n" VALUES (265, 'config.sys.account.registerUserRemark', '是否开启注册用户功能(true开启,false关闭)', 'Whether to enable the function of registered users (true on, false off)'); +INSERT INTO "sys_i18n" VALUES (266, 'config.sys.user.maxRetryCountRemark', '密码最大错误次数', 'Maximum number of password errors'); +INSERT INTO "sys_i18n" VALUES (267, 'config.sys.user.lockTimeRemark', '密码锁定时间,单位分钟(默认10分钟)', 'Password lock time in minutes (default 10 minutes)'); +INSERT 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.'); +INSERT INTO "sys_i18n" VALUES (269, 'config.sys.logo.typeRemark', '全图:brand +小图:icon', 'Full image: brand +Small image: icon'); +INSERT INTO "sys_i18n" VALUES (270, 'config.sys.logo.filePathIconRemark', '文件支持网络地址图片和内部上传的文件路径', 'File support for web address images and file paths for internal uploads'); +INSERT INTO "sys_i18n" VALUES (271, 'config.sys.logo.filePathBrandRemark', '文件支持网络地址图片和内部上传的文件路径', 'File support for web address images and paths to internally uploaded files'); +INSERT 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'); +INSERT INTO "sys_i18n" VALUES (273, 'config.sys.titleRemark', '系统名称长度限制20位字符串', 'System name length limit of 20-digit string'); +INSERT INTO "sys_i18n" VALUES (274, 'config.sys.copyrightRemark', '底脚固定条,左侧放置版权声明', 'Footer fixing strip with copyright notice on the left side'); +INSERT INTO "sys_i18n" VALUES (275, 'config..export.id', '参数编号', 'ID'); +INSERT INTO "sys_i18n" VALUES (276, 'config..export.name', '参数名称', 'Config Name'); +INSERT INTO "sys_i18n" VALUES (277, 'config..export.key', '参数键名', 'Config Key'); +INSERT INTO "sys_i18n" VALUES (278, 'config..export.value', '参数键值', 'Config Value'); +INSERT INTO "sys_i18n" VALUES (279, 'config..export.type', '系统内置', 'Built In'); +INSERT INTO "sys_i18n" VALUES (280, 'config..export.remark', '参数说明', 'Config Description'); +INSERT INTO "sys_i18n" VALUES (281, 'config.sys.titleValue', '5G Core Network', '5G Core Network'); +INSERT INTO "sys_i18n" VALUES (282, 'config.sys.copyrightValue', 'Copyright ©2025 5G Core Network', 'Copyright ©2025 5G Core Network'); +INSERT INTO "sys_i18n" VALUES (283, 'config.noData', '没有可访问参数配置数据!', 'No parameter configuration data is accessible!'); +INSERT INTO "sys_i18n" VALUES (284, 'config.errKey', '无效 key', 'Invalid key'); +INSERT INTO "sys_i18n" VALUES (285, 'config.errValueEq', '变更状态与旧值相等!', 'Change state is equal to the old value!'); +INSERT INTO "sys_i18n" VALUES (286, 'config.errKeyExists', '操作参数配置【{name}】失败,参数键名已存在', 'Failed to manipulate parameter configuration [{name}], parameter key name already exists!'); +INSERT INTO "sys_i18n" VALUES (287, 'config.errDelete', '删除参数配置信息失败!', 'Deletion of parameter configuration information failed!'); +INSERT INTO "sys_i18n" VALUES (288, 'config.errType', '操作含有内置参数,禁止删除!', 'The operation contains built-in parameters and deletion is prohibited!'); +INSERT INTO "sys_i18n" VALUES (289, 'job.monitor_sys_resource', '监控-系统资源', 'Monitor-System Resources'); +INSERT 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'); +INSERT INTO "sys_i18n" VALUES (291, 'job.delete_ne_config_backup', '删除-过期配置文件备份', 'Delete-Expired NE ETC Backup File'); +INSERT INTO "sys_i18n" VALUES (292, 'job.delete_ne_config_backup_remark', 'storeDays:表示保留最近天数的数据记录', 'storeDays: indicates that the most recent days of data records are kept.'); +INSERT INTO "sys_i18n" VALUES (293, 'job.delete_alarm_record', '删除-过期告警记录', 'Delete-Expired Alarm Records'); +INSERT 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.'); +INSERT INTO "sys_i18n" VALUES (295, 'job.delete_kpi_record', '删除-过期指标记录', 'Delete-Expired KPI Records'); +INSERT 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'); +INSERT INTO "sys_i18n" VALUES (297, 'menu.neData.backupData', '导出文件', 'Exponted File'); +INSERT INTO "sys_i18n" VALUES (298, 'config.sys.user.passwordPolicyNot', '未配置密码策略', 'Password policy not configured'); +INSERT INTO "sys_i18n" VALUES (299, 'job.export.jobID', '任务编号', 'ID'); +INSERT INTO "sys_i18n" VALUES (300, 'job.export.jobName', '任务名称', 'Name'); +INSERT INTO "sys_i18n" VALUES (301, 'job.export.jobGroupName', '任务组名', 'Group'); +INSERT INTO "sys_i18n" VALUES (302, 'job.export.invokeTarget', '调用目标', 'Invoke'); +INSERT INTO "sys_i18n" VALUES (303, 'job.export.targetParams', '传入参数', 'Incoming Parameters'); +INSERT INTO "sys_i18n" VALUES (304, 'job.export.cronExpression', 'cron表达式', 'Cron'); +INSERT INTO "sys_i18n" VALUES (305, 'job.export.status', '状态', 'Status'); +INSERT INTO "sys_i18n" VALUES (306, 'job.export.remark', '备注说明', 'Description'); +INSERT INTO "sys_i18n" VALUES (307, 'job.export.jobLogID', '任务日志编号', 'ID'); +INSERT INTO "sys_i18n" VALUES (308, 'job.export.jobLogStatus', '任务日志状态', 'Status'); +INSERT INTO "sys_i18n" VALUES (309, 'job.export.jobLogTime', '任务日志时间', 'Time'); +INSERT INTO "sys_i18n" VALUES (310, 'job.noData', '没有可访问调度任务数据!', 'There is no accessible scheduling task data!'); +INSERT INTO "sys_i18n" VALUES (311, 'job.errTargetParams', '操作调度任务【{name}】失败,任务传入参数json字符串不正确', 'Failed to operate scheduling task [{name}] with incorrect task incoming parameter json string!'); +INSERT INTO "sys_i18n" VALUES (312, 'job.errCronExpression', '操作调度任务【{name}】失败,Cron表达式不正确', 'Scheduled task [{name}] failed with incorrect Cron expression!'); +INSERT 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'); +INSERT INTO "sys_i18n" VALUES (314, 'job.statusEq', '变更状态与旧值相等!', 'The change state is equal to the old value!'); +INSERT INTO "sys_i18n" VALUES (315, 'role.system', '系统', 'System'); +INSERT INTO "sys_i18n" VALUES (316, 'role.admin', '管理人员', 'Administrator'); +INSERT INTO "sys_i18n" VALUES (317, 'role.operator', '运维人员', 'Operators'); +INSERT INTO "sys_i18n" VALUES (318, 'role.monitor', '监控人员', 'Monitor'); +INSERT INTO "sys_i18n" VALUES (319, 'role.vistor', '普通用户', 'General Users'); +INSERT INTO "sys_i18n" VALUES (320, 'role.systemRemark', '系统,无法修改删除', 'System, cannot modify or delete'); +INSERT INTO "sys_i18n" VALUES (321, 'role.adminRemark', '管理人员 可以对设备进行任何操作', 'Administrators can perform any operation on the device'); +INSERT 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.'); +INSERT INTO "sys_i18n" VALUES (323, 'role.monitorRemark', '监控人员 只能从设备读取数据,而不能对设备进行任何设置', 'Monitoring personnel Can only read data from the device, but cannot make any settings on the device'); +INSERT INTO "sys_i18n" VALUES (324, 'role.vistorRemark', '普通用户 只可看系统相关信息', 'Ordinary users can only see system-related information'); +INSERT INTO "sys_i18n" VALUES (325, 'role.export.id', '角色编号', 'Role Number'); +INSERT INTO "sys_i18n" VALUES (326, 'role.export.name', '角色名称 ', 'Role Name'); +INSERT INTO "sys_i18n" VALUES (327, 'role.export.key', '角色键值', 'Role Key'); +INSERT INTO "sys_i18n" VALUES (328, 'role.export.sort', '角色顺序', 'Role Sort'); +INSERT INTO "sys_i18n" VALUES (329, 'role.export.dataScope', '角色数据范围', 'Role Data Range'); +INSERT INTO "sys_i18n" VALUES (330, 'role.export.status', '角色状态', 'Role Status'); +INSERT INTO "sys_i18n" VALUES (331, 'role.noData', '没有可访问角色数据!', 'There is no accessible role data!'); +INSERT INTO "sys_i18n" VALUES (332, 'role.statusEq', '变更状态与旧值相等!', 'The change status is equal to the old value!'); +INSERT INTO "sys_i18n" VALUES (333, 'role.errNameExists', '操作角色【{name}】失败,角色名称已存在', 'Manipulating role [{name}] failed, role name already exists!'); +INSERT INTO "sys_i18n" VALUES (334, 'role.errKeyExists', '操作角色【{name}】失败,角色键值已存在', 'Failed to manipulate role [{name}], role key already exists!'); +INSERT INTO "sys_i18n" VALUES (335, 'post.admin', '系统', 'Systems'); +INSERT INTO "sys_i18n" VALUES (336, 'post.operator', '管理', 'Management'); +INSERT INTO "sys_i18n" VALUES (337, 'post.monitor', '运维', 'Operation & Maintenance'); +INSERT INTO "sys_i18n" VALUES (338, 'post.visitor', '监控', 'Monitoring'); +INSERT INTO "sys_i18n" VALUES (339, 'post.export.id', '岗位编号 ', 'Position Number'); +INSERT INTO "sys_i18n" VALUES (340, 'post.export.code', '岗位编码', 'Position Code'); +INSERT INTO "sys_i18n" VALUES (341, 'post.export.name', '岗位名称', 'Position Name'); +INSERT INTO "sys_i18n" VALUES (342, 'post.export.sort', '岗位排序', 'Position Sort'); +INSERT INTO "sys_i18n" VALUES (343, 'post.export.status', '岗位状态', 'Position Status'); +INSERT INTO "sys_i18n" VALUES (344, 'post.noData', '没有可访问岗位数据!', 'There is no accessible post data!'); +INSERT INTO "sys_i18n" VALUES (345, 'post.errNameExists', '操作岗位【{name}】失败,岗位名称已存在已存在', 'Failed to manipulate post [{name}], post name already exists already exists'); +INSERT INTO "sys_i18n" VALUES (346, 'post.errCodeExists', '操作角色【{name}】失败,角色键值已存在', 'Failed to manipulate role [{name}], role key already exists.'); +INSERT INTO "sys_i18n" VALUES (347, 'user.export.id', '用户编号', 'User Number'); +INSERT INTO "sys_i18n" VALUES (348, 'user.export.name', '登录账号', 'Account'); +INSERT INTO "sys_i18n" VALUES (349, 'user.export.nick', '用户昵称', 'Nick Name'); +INSERT INTO "sys_i18n" VALUES (350, 'user.export.email', '电子邮箱', 'E-Mail'); +INSERT INTO "sys_i18n" VALUES (351, 'user.export.phone', '手机号码', 'Cell phone number'); +INSERT INTO "sys_i18n" VALUES (352, 'user.export.sex', '用户性别', 'Gender'); +INSERT INTO "sys_i18n" VALUES (353, 'user.export.status', '用户状态', 'Status'); +INSERT INTO "sys_i18n" VALUES (354, 'user.export.deptID', '部门编号', 'Department number'); +INSERT INTO "sys_i18n" VALUES (355, 'user.export.deptName', '部门名称', 'Department'); +INSERT INTO "sys_i18n" VALUES (356, 'user.export.deptLeader', '部门负责人', 'Department Head'); +INSERT INTO "sys_i18n" VALUES (357, 'user.export.loginIP', '用户登录IP', 'Login Address'); +INSERT INTO "sys_i18n" VALUES (358, 'user.export.loginDate', '用户登录时间', 'Login Time'); +INSERT INTO "sys_i18n" VALUES (359, 'user.noData', '没有可访问用户数据!', 'No accessible user data!'); +INSERT INTO "sys_i18n" VALUES (360, 'user.statusEq', '变更状态与旧值相等!', 'The change status is equal to the old value!'); +INSERT INTO "sys_i18n" VALUES (361, 'user.errPasswdOld', '修改密码失败,旧密码错误', 'Change password failed, old password is wrong'); +INSERT INTO "sys_i18n" VALUES (362, 'user.errPasswdEqOld', '新密码不能与旧密码相同', 'New password cannot be the same as the old one'); +INSERT 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.'); +INSERT INTO "sys_i18n" VALUES (364, 'user.errEmailFormat', '操作用户【{name}】失败,邮箱格式错误', 'Failed to operate user [{name}], mailbox format error'); +INSERT INTO "sys_i18n" VALUES (365, 'user.errEmailExists', '操作用户【{name}】失败,邮箱已存在', 'Failed to operate user [{name}], mailbox already exists.'); +INSERT INTO "sys_i18n" VALUES (366, 'user.errPhoneFormat', '操作用户【{name}】失败,手机号码格式错误', 'Failed to operate user [{name}], cell phone number format is wrong.'); +INSERT INTO "sys_i18n" VALUES (367, 'user.errPhoneExists', '操作用户【{name}】失败,手机号码已存在', 'Failed to operate user [{name}], cell phone number already exists.'); +INSERT INTO "sys_i18n" VALUES (368, 'user.errNameExists', '操作用户【{name}】失败,登录账号已存在', 'Failed to operate user [{name}], login account already exists.'); +INSERT INTO "sys_i18n" VALUES (369, 'user.import.mustItem', '表格中必填列表项,{text}', 'Required list item in form, {text}'); +INSERT INTO "sys_i18n" VALUES (370, 'user.import.phoneExist', '用户编号:{id} 手机号码 {phone} 已存在', 'User ID: {id} cell phone number {phone} Existing'); +INSERT INTO "sys_i18n" VALUES (371, 'user.import.phoneFormat', '用户编号:{id} 手机号码 {phone} 格式错误', 'User ID: {id} cell phone number {phone} Wrong format'); +INSERT INTO "sys_i18n" VALUES (372, 'user.import.emailExist', '用户编号:{id} 用户邮箱:{email} 已存在', 'User ID: {id} User Email: {email} Existing'); +INSERT INTO "sys_i18n" VALUES (373, 'user.import.emailFormat', '用户编号:{id} 用户邮箱:{email} 格式错误', 'User ID: {id} Email: {email} Wrong Format'); +INSERT INTO "sys_i18n" VALUES (374, 'user.import.success', '用户编号:{id} 登录名称:{name} 导入成功', 'User ID:{id} Login name:{name} Imported successfully!'); +INSERT INTO "sys_i18n" VALUES (375, 'user.import.fail', '用户编号:{id} 登录名称:{name} 导入失败', 'User ID: {id} Login name: {name} Import failed'); +INSERT INTO "sys_i18n" VALUES (376, 'user.import.successUpdate', '用户编号:{id} 登录名称:{name} 更新成功', 'User ID: {id} Login name: {name} Update success'); +INSERT INTO "sys_i18n" VALUES (377, 'user.import.failUpdate', '用户编号:{id} 登录名称:{name} 更新失败', 'User ID: {id} Login Name: {name} Update Failed'); +INSERT 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:'); +INSERT INTO "sys_i18n" VALUES (379, 'user.import.successTip', '恭喜您,数据已全部导入成功!共 {num} 条,数据如下:', 'Congratulations, the data has been imported successfully! There are {num} entries with the following data:'); +INSERT INTO "sys_i18n" VALUES (380, 'app.common.err403', '无权访问 {method} {requestURI}', 'Unauthorized access {method} {requestURI}'); +INSERT INTO "sys_i18n" VALUES (381, 'app.common.err401', '无效身份授权', 'Invalid authorization'); +INSERT INTO "sys_i18n" VALUES (382, 'app.common.err400', '参数错误', 'Parameter error'); +INSERT INTO "sys_i18n" VALUES (383, 'app.common.exportEmpty', '导出数据记录为空', 'Export data record is empty'); +INSERT INTO "sys_i18n" VALUES (384, 'app.common.errOperateAdmin', '不允许操作内置用户', 'Built-in users are not allowed to operate'); +INSERT INTO "sys_i18n" VALUES (385, 'app.common.errOperateRole', '不允许操作内置角色', 'Built-in roles are not allowed to be operated'); +INSERT INTO "sys_i18n" VALUES (386, 'app.common.deleteSuccess', '删除成功:{num}', 'Deleted successfully: {num}'); +INSERT INTO "sys_i18n" VALUES (387, 'app.common.loginSuccess', '登录成功', 'Login Success'); +INSERT INTO "sys_i18n" VALUES (388, 'app.common.logoutSuccess', '注销成功', 'Logout Successful'); +INSERT INTO "sys_i18n" VALUES (389, 'app.common.errUnlock', '该用户未被锁定', 'The user is not locked'); +INSERT INTO "sys_i18n" VALUES (390, 'app.common.noLoginUser', '登录用户信息无效', 'Invalid login user information'); +INSERT INTO "sys_i18n" VALUES (391, 'app.common.rateLimitTip', '访问过于频繁,请稍候再试', 'Access too often, please try again later'); +INSERT INTO "sys_i18n" VALUES (392, 'log.operate.export.id', '操作编号', 'Log ID'); +INSERT INTO "sys_i18n" VALUES (393, 'log.operate.export.title', '模块名称', 'Module Name'); +INSERT INTO "sys_i18n" VALUES (394, 'log.operate.export.businessType', '业务类型', 'Business Type'); +INSERT INTO "sys_i18n" VALUES (395, 'log.operate.export.method', '操作方法', 'Operation Method'); +INSERT INTO "sys_i18n" VALUES (396, 'log.operate.export.requestMethod', '请求方式 ', 'Request Method'); +INSERT INTO "sys_i18n" VALUES (397, 'log.operate.export.operatorType', '操作类型', 'Operation Type'); +INSERT INTO "sys_i18n" VALUES (398, 'log.operate.export.operName', '操作人员', 'Operator'); +INSERT INTO "sys_i18n" VALUES (399, 'log.operate.export.deptName', '操作人员部门名称', 'Operator Department Name'); +INSERT INTO "sys_i18n" VALUES (400, 'log.operate.export.url', '请求链接地址', 'Request URL'); +INSERT INTO "sys_i18n" VALUES (401, 'log.operate.export.ip', '请求主机 ', 'Request Host'); +INSERT INTO "sys_i18n" VALUES (402, 'log.operate.export.location', '请求地址', 'Request Address'); +INSERT INTO "sys_i18n" VALUES (403, 'log.operate.export.param', '请求参数', 'Request Parameters'); +INSERT INTO "sys_i18n" VALUES (404, 'log.operate.export.msg', '操作信息', 'Operation Information'); +INSERT INTO "sys_i18n" VALUES (405, 'log.operate.export.status', '操作状态', 'Status'); +INSERT INTO "sys_i18n" VALUES (406, 'log.operate.export.costTime', '消耗时间(毫秒)', 'Time Consumption (ms)'); +INSERT INTO "sys_i18n" VALUES (407, 'log.operate.export.operTime', '操作时间', 'Time'); +INSERT INTO "sys_i18n" VALUES (408, 'log.login.export.id', '记录编号', 'Log ID'); +INSERT INTO "sys_i18n" VALUES (409, 'log.login.export.userName', '登录账号', 'Login Account'); +INSERT INTO "sys_i18n" VALUES (410, 'log.login.export.status', '登录状态', 'Status'); +INSERT INTO "sys_i18n" VALUES (411, 'log.login.export.ip', '登录地址', 'Login Address'); +INSERT INTO "sys_i18n" VALUES (412, 'log.login.export.location', '登录地点', 'Login Location'); +INSERT INTO "sys_i18n" VALUES (413, 'log.login.export.browser', '浏览器', 'Browser'); +INSERT INTO "sys_i18n" VALUES (414, 'log.login.export.os', '操作系统', 'Operating System'); +INSERT INTO "sys_i18n" VALUES (415, 'log.login.export.msg', '登录信息', 'Login Information'); +INSERT INTO "sys_i18n" VALUES (416, 'log.login.export.time', '登录时间', 'Login Time'); +INSERT INTO "sys_i18n" VALUES (417, 'trace.tcpdump.noData', '找不到 {type} {id} 对应网元信息', 'Can it find {type} {id} information of the corresponding network element.'); +INSERT 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.'); +INSERT INTO "sys_i18n" VALUES (419, 'login.errPasswdExpire', '登录密码已过期', 'Login password has expired'); +INSERT INTO "sys_i18n" VALUES (420, 'register.errPasswdNotEq', '用户确认输入密码不一致', 'User confirms password inconsistency'); +INSERT INTO "sys_i18n" VALUES (421, 'register.success', '注册成功', 'Successful registration'); +INSERT INTO "sys_i18n" VALUES (422, 'register.successMsg', '{name} 注册成功 {id}', '{name} Register Successful {id}'); +INSERT INTO "sys_i18n" VALUES (423, 'log.operate.title.sysJobLog', '调度任务日志', 'Scheduling Task Logs'); +INSERT INTO "sys_i18n" VALUES (424, 'log.operate.title.sysJob', '调度任务', 'Scheduling Tasks'); +INSERT INTO "sys_i18n" VALUES (425, 'log.operate.title.tcpdump', '信令抓包', 'Signaling Capture'); +INSERT INTO "sys_i18n" VALUES (426, 'log.operate.title.sysConfig', '参数配置', 'Parameter Configuration'); +INSERT INTO "sys_i18n" VALUES (427, 'log.operate.title.sysDept', '部门', 'Sector'); +INSERT INTO "sys_i18n" VALUES (428, 'log.operate.title.sysDictData', '字典数据', 'Dictionary Data'); +INSERT INTO "sys_i18n" VALUES (429, 'log.operate.title.sysDictType', '字典类型', 'Dictionary type'); +INSERT INTO "sys_i18n" VALUES (430, 'log.operate.title.sysMenu', '菜单', 'Menu'); +INSERT INTO "sys_i18n" VALUES (431, 'log.operate.title.sysPost', '岗位', 'Positions'); +INSERT INTO "sys_i18n" VALUES (432, 'log.operate.title.sysProfile', '个人信息', 'Personal Information'); +INSERT INTO "sys_i18n" VALUES (433, 'log.operate.title.sysProfileAvatar', '个人头像', 'Personal avatar'); +INSERT INTO "sys_i18n" VALUES (434, 'log.operate.title.sysRole', '角色', 'Roles'); +INSERT INTO "sys_i18n" VALUES (435, 'log.operate.title.sysUser', '用户', 'User'); +INSERT INTO "sys_i18n" VALUES (436, 'log.operate.title.sysLogOper', '操作日志记录', 'Operation Logging'); +INSERT INTO "sys_i18n" VALUES (437, 'log.operate.title.sysLogLogin', '登录日志记录', 'Operation Logging'); +INSERT INTO "sys_i18n" VALUES (438, 'login.errNameOrPasswd', '用户不存在或密码错误', 'User does not exist or password is wrong'); +INSERT INTO "sys_i18n" VALUES (439, 'login.errDelFlag', '对不起,您的账号已被删除', 'Sorry, your account has been deleted'); +INSERT INTO "sys_i18n" VALUES (440, 'login.errStatus', '对不起,您的帐户已被禁用', 'Sorry, your account has been disabled'); +INSERT INTO "sys_i18n" VALUES (441, 'login.errRetryPasswd', '密码输入错误多次,帐户已被锁定', 'Password was entered incorrectly several times, account has been locked'); +INSERT INTO "sys_i18n" VALUES (442, 'captcha.err', '验证码错误', 'Captcha Error'); +INSERT INTO "sys_i18n" VALUES (443, 'captcha.errValid', '验证码已失效', 'Captcha is invalid'); +INSERT INTO "sys_i18n" VALUES (444, 'app.common.noUaOsBrowser', '未知 未知', 'Unknown Unknown'); +INSERT INTO "sys_i18n" VALUES (445, 'app.common.noIPregion', '内网', 'Intranet'); +INSERT INTO "sys_i18n" VALUES (446, 'app.common.unknown', '未知', 'Unknown'); +INSERT INTO "sys_i18n" VALUES (447, 'app.common.noNEInfo', '未找到匹配网元信息', 'No matching network element information found'); +INSERT 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'); +INSERT INTO "sys_i18n" VALUES (449, 'ne.udm.errExportType', '导出文件类型支持CSV和txt', 'Export file types support CSV and txt'); +INSERT 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'); +INSERT INTO "sys_i18n" VALUES (451, 'log.operate.title.udmAuth', 'UDM鉴权用户', 'UDM Authentication'); +INSERT INTO "sys_i18n" VALUES (452, 'log.operate.title.udmSub', 'UDM签约用户', 'UDM Subscriber'); +INSERT INTO "sys_i18n" VALUES (453, 'dictType.active_alarm_type', '活动告警类型', 'Event Alarm Types'); +INSERT INTO "sys_i18n" VALUES (454, 'dictType.active_alarm_type_remark', '活动告警类型列表', 'List of Active Alarm Types'); +INSERT INTO "sys_i18n" VALUES (455, 'dictData.active_alarm_type.communication', '通信告警', 'Communication Alarm'); +INSERT INTO "sys_i18n" VALUES (456, 'dictData.active_alarm_type.equipment', '设备告警', 'Equipment Alarm'); +INSERT INTO "sys_i18n" VALUES (457, 'dictData.active_alarm_type.processing', '处理错误', 'Processing Failure Alarm'); +INSERT INTO "sys_i18n" VALUES (458, 'dictData.active_alarm_type.environmental', '环境告警', 'Environmental Alarm'); +INSERT INTO "sys_i18n" VALUES (459, 'dictData.active_alarm_type.qualityOfService', '服务质量', 'Quality of Service Alarm'); +INSERT INTO "sys_i18n" VALUES (460, 'dictType.active_clear_type', '告警清除类型', 'Alarm Clearing Types'); +INSERT INTO "sys_i18n" VALUES (461, 'dictType.active_clear_type_remark', '告警清除类型列表', 'List of Alarm Clearing Types'); +INSERT INTO "sys_i18n" VALUES (462, 'dictData.active_clear_type.notCleared', '告警未清除', 'Not cleared'); +INSERT INTO "sys_i18n" VALUES (463, 'dictData.active_clear_type.hand', '手动清除', 'Manually cleared'); +INSERT INTO "sys_i18n" VALUES (464, 'dictData.active_clear_type.auto', '自动清除', 'Automatically cleared'); +INSERT INTO "sys_i18n" VALUES (465, 'dictType.active_ack_state', '告警确认类型', 'Alarm Acknowledgement Types'); +INSERT INTO "sys_i18n" VALUES (466, 'dictType.active_ack_state_remark', '告警确认类型列表', 'Alarm Acknowledgement Type List'); +INSERT INTO "sys_i18n" VALUES (467, 'dictData.active_ack_state.unconfirmed', '未确认', 'Not Confirm'); +INSERT INTO "sys_i18n" VALUES (468, 'dictData.active_ack_state.confirmed', '已确认', 'Confirm'); +INSERT INTO "sys_i18n" VALUES (469, 'dictType.active_alarm_severity', '严重程度', 'Severity'); +INSERT INTO "sys_i18n" VALUES (470, 'dictType.active_alarm_severity_remark', '严重程度列表', 'Severity List'); +INSERT INTO "sys_i18n" VALUES (471, 'dictData.active_alarm_severity.critical', '严重告警', 'Critical'); +INSERT INTO "sys_i18n" VALUES (472, 'dictData.active_alarm_severity.major', '主要告警', 'Major'); +INSERT INTO "sys_i18n" VALUES (473, 'dictData.active_alarm_severity.minor', '次要告警', 'Minor'); +INSERT INTO "sys_i18n" VALUES (474, 'dictData.active_alarm_severity.warning', '警告告警', 'Warning'); +INSERT INTO "sys_i18n" VALUES (475, 'dictData.active_alarm_severity.event', '事件告警', 'Event'); +INSERT INTO "sys_i18n" VALUES (476, 'config.sys.officialUrl', '系统设置-官网链接', 'System Settings - Official Website Links'); +INSERT INTO "sys_i18n" VALUES (477, 'config.sys.helpDoc', '系统设置-系统使用文档', 'System Settings-System Documentation'); +INSERT INTO "sys_i18n" VALUES (478, 'config.sys.officialUrlRemark', '默认无地址用#号', 'Default no address with # sign'); +INSERT INTO "sys_i18n" VALUES (479, 'config.sys.helpDocRemark', '静态文件目录地址,使用{language}区分语言文件', 'Static file directory address, use {language} to distinguish language files'); +INSERT INTO "sys_i18n" VALUES (480, 'log.operate.title.neAction', '网元处理', 'Network Element Processing'); +INSERT INTO "sys_i18n" VALUES (481, 'log.operate.title.helpDoc', '系统使用文档', 'System Usage Documentation'); +INSERT INTO "sys_i18n" VALUES (482, 'menu.ueUser.n3iwf', 'N3IWF在线用户', 'N3IWF Online User'); +INSERT INTO "sys_i18n" VALUES (483, 'menu.neData.pcfSub', '用户策略控制信息', 'User PCC Information'); +INSERT INTO "sys_i18n" VALUES (484, 'menu.system.user.editRole', '修改用户角色', 'Modifying User Role'); +INSERT INTO "sys_i18n" VALUES (485, 'config.sys.i18nOpen', '国际化切换', 'Internationalization Switching'); +INSERT INTO "sys_i18n" VALUES (486, 'config.sys.i18nDefault', '国际化默认语言', 'Internationalization Default Language'); +INSERT INTO "sys_i18n" VALUES (487, 'user.export.role', '用户角色', 'Role'); +INSERT INTO "sys_i18n" VALUES (488, 'menu.system.setting.i18n', '国际化切换', 'Internationalization Switch'); +INSERT INTO "sys_i18n" VALUES (489, 'menu.system.setting.i18nRemark', '国际化多语言的切换选择', 'Internationalized multilingual switching options'); +INSERT INTO "sys_i18n" VALUES (490, 'dictType.index_status', '首页状态', 'Home Status'); +INSERT INTO "sys_i18n" VALUES (491, 'dictType.index_status_remark', '首页的网元状态颜色', 'Network element status colors on the home page'); +INSERT INTO "sys_i18n" VALUES (492, 'dictType.index_status.normal', '正常', 'Normal'); +INSERT INTO "sys_i18n" VALUES (493, 'dictType.index_status.abnormal', '异常', 'Abnormal'); +INSERT INTO "sys_i18n" VALUES (494, 'menu.log.neFile', '网元日志文件', 'NE Log File'); +INSERT INTO "sys_i18n" VALUES (495, 'menu.dashboard.overview.smfUeNum', '展示数据会话数', 'Display data session number'); +INSERT INTO "sys_i18n" VALUES (496, 'menu.dashboard.overview.imsUeNum', '展示语音会话数', 'Display the number of voice sessions'); +INSERT INTO "sys_i18n" VALUES (497, 'menu.dashboard.overview.gnbBase', '展示5G基站在线信息', 'Display 5G base station online information'); +INSERT INTO "sys_i18n" VALUES (498, 'menu.dashboard.overview.enbBase', '展示4G基站在线信息', 'Display 4G base station online information'); +INSERT INTO "sys_i18n" VALUES (499, 'job.ne_alarm_state_check', '网元告警-状态检查', 'NE Alarm-Health State Check'); +INSERT 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'); +INSERT INTO "sys_i18n" VALUES (501, 'menu.neUser.nssf', 'NSSF在线订阅数', 'NSSF Subscription Info'); +INSERT INTO "sys_i18n" VALUES (502, 'menu.neUser.nssfAmf', 'NSSF可用的注册AMF', 'NSSF Available AMFs'); +INSERT INTO "sys_i18n" VALUES (503, 'menu.monitor.topology', '拓扑信息', 'Topology Info'); +INSERT INTO "sys_i18n" VALUES (504, 'menu.monitor.topologyBuild', '拓扑图组编辑', 'Topological Graph Build'); +INSERT INTO "sys_i18n" VALUES (505, 'log.operate.title.chartGraph', '拓扑图组', 'Topological Graph'); +INSERT INTO "sys_i18n" VALUES (506, 'menu.monitor.topologyArchitecture', '网元拓扑组网', 'NE System Topology'); +INSERT INTO "sys_i18n" VALUES (507, 'menu.alarm', '告警', 'Alarm'); +INSERT INTO "sys_i18n" VALUES (508, 'menu.topology', '拓扑', 'Topology'); +INSERT INTO "sys_i18n" VALUES (509, 'config.sys.lockTime', '系统设置-锁屏超时时长', 'System Settings - Screen Lock Timeout Duration'); +INSERT 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'); +INSERT INTO "sys_i18n" VALUES (511, 'sys.account.captchaType', '账号自助-验证码类型', 'Account Self Service - Captcha Type'); +INSERT INTO "sys_i18n" VALUES (512, 'sys.account.captchaTypeRemark', '使用验证码类型(math数值计算,char字符验证)', 'Using CAPTCHA types (math numeric calculation, char character validation)'); +INSERT INTO "sys_i18n" VALUES (513, 'menu.dashboard', '仪表盘', 'Dashboard'); +INSERT INTO "sys_i18n" VALUES (514, 'menu.dashboard.overview', '总览', 'Overview'); +INSERT INTO "sys_i18n" VALUES (515, 'menu.dashboard.imsCDR', '语音话单', 'Voice CDR'); +INSERT INTO "sys_i18n" VALUES (516, 'dictType.cdr_sip_code', 'IMS-Voice-SIP响应代码类别类型', 'IMS-Voice-SIP Response Code Category Type'); +INSERT INTO "sys_i18n" VALUES (517, 'dictType.cdr_call_type', 'IMS-呼叫类型', 'IMS-Call Type'); +INSERT INTO "sys_i18n" VALUES (518, 'dictType.ue_auth_code', 'UE 事件认证代码类型', 'UE Event Authentication Code Type'); +INSERT INTO "sys_i18n" VALUES (519, 'dictType.ue_event_type', 'UE 事件类型', 'UE Event Type'); +INSERT INTO "sys_i18n" VALUES (520, 'dictData.cdr_sip_code.200', '200 正常通话', '200 OK'); +INSERT INTO "sys_i18n" VALUES (521, 'dictData.cdr_sip_code.403', '403 禁止访问', '403 Forbidden'); +INSERT INTO "sys_i18n" VALUES (522, 'dictData.cdr_sip_code.408', '408 请求超时', '408 Request Timeout'); +INSERT INTO "sys_i18n" VALUES (523, 'dictData.cdr_sip_code.500', '500 内部服务器错误', '500 Internal Server Error'); +INSERT INTO "sys_i18n" VALUES (524, 'dictData.cdr_call_type.audio', '语音', 'Voice'); +INSERT INTO "sys_i18n" VALUES (525, 'dictData.cdr_call_type.video', '视频', 'Video'); +INSERT INTO "sys_i18n" VALUES (526, 'dictData.ue_auth_code.200', '成功', 'Success'); +INSERT INTO "sys_i18n" VALUES (527, 'dictData.ue_auth_code.001', '网络失败', 'Network Failure'); +INSERT INTO "sys_i18n" VALUES (528, 'dictData.ue_auth_code.002', '接口失败', 'Interface Failure'); +INSERT INTO "sys_i18n" VALUES (529, 'dictData.ue_auth_code.003', 'MAC失败', 'MAC Failure'); +INSERT INTO "sys_i18n" VALUES (530, 'dictData.ue_auth_code.004', '同步失败', 'Synchronization failure'); +INSERT INTO "sys_i18n" VALUES (531, 'dictData.ue_auth_code.005', '不接受非5G认证', 'Non-5G Authentication Not Accepted'); +INSERT INTO "sys_i18n" VALUES (532, 'dictData.ue_auth_code.006', '响应失败', 'Response Failure'); +INSERT INTO "sys_i18n" VALUES (533, 'dictData.ue_auth_code.007', '未知', 'Unknown'); +INSERT INTO "sys_i18n" VALUES (534, 'dictData.ue_event_type.auth', '认证', 'Authentication'); +INSERT INTO "sys_i18n" VALUES (535, 'dictData.ue_event_type.detach', '注销', 'Detach'); +INSERT INTO "sys_i18n" VALUES (536, 'dictData.ue_event_type.state', 'CM状态', 'CM Status'); +INSERT INTO "sys_i18n" VALUES (537, 'dictType.ue_event_cm_state', 'UE 事件CM状态', 'UE Event CM Status'); +INSERT INTO "sys_i18n" VALUES (538, 'dictData.ue_event_cm_state.connected', '连接', 'Connected'); +INSERT INTO "sys_i18n" VALUES (539, 'dictData.ue_event_cm_state.idle', '空闲', 'Idle'); +INSERT INTO "sys_i18n" VALUES (540, 'dictData.ue_event_cm_state.inactive', '不活动', 'Inactive'); +INSERT INTO "sys_i18n" VALUES (541, 'dictData.cdr_sip_code.404', '404 找不到', '404 Not Found'); +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 (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'); +INSERT INTO "sys_i18n" VALUES (549, 'cache.name.sys_dict', '字典管理', 'Dictionary Management'); +INSERT INTO "sys_i18n" VALUES (550, 'cache.name.captcha_codes', '验证码', 'Captcha'); +INSERT INTO "sys_i18n" VALUES (551, 'cache.name.repeat_submit', '防重提交', 'Resubmit'); +INSERT INTO "sys_i18n" VALUES (552, 'cache.name.rate_limit', '限流', 'Limit Traffic'); +INSERT INTO "sys_i18n" VALUES (553, 'cache.name.pwd_err_cnt', '登录账户密码错误次数', 'Number of Password Errors'); +INSERT INTO "sys_i18n" VALUES (554, 'cache.name.ne_info', '网元信息管理', 'NE Info Management'); +INSERT INTO "sys_i18n" VALUES (555, 'cache.name.ne_data', '网元数据管理', 'NE Data Management'); +INSERT INTO "sys_i18n" VALUES (556, 'dictData.cdr_call_type.sms', '短信', 'SMS'); +INSERT INTO "sys_i18n" VALUES (557, 'dictData.cdr_sip_code.202', '202 已接受', '202 Accepted'); +INSERT INTO "sys_i18n" VALUES (558, 'dictData.cdr_sip_code.488', '488 这里不接受', '488 Not Acceptable Here'); +INSERT INTO "sys_i18n" VALUES (559, 'dictData.cdr_sip_code.0', '0 原因不明', '0 Unknown Reason'); +INSERT INTO "sys_i18n" VALUES (560, 'log.operate.title.ws', 'WS会话', 'WS Sessions'); +INSERT INTO "sys_i18n" VALUES (561, 'log.operate.title.neHost', '网元主机', 'NE Host'); +INSERT INTO "sys_i18n" VALUES (562, 'neHost.noData', '没有可访问主机信息数据!', 'There is no accessible host information data!'); +INSERT INTO "sys_i18n" VALUES (563, 'neHost.errKeyExists', '主机信息操作【{name}】失败,同组内名称已存在', 'Host information operation [{name}] failed, name already exists in the same group'); +INSERT INTO "sys_i18n" VALUES (564, 'neHost.errByHostInfo', '连接失败,请检查连接参数后重试', 'Connection Failed, Please check connection parameters and retry'); +INSERT INTO "sys_i18n" VALUES (565, 'dictType.ne_host_type', '网元主机连接类型', 'Network element host connection type'); +INSERT INTO "sys_i18n" VALUES (566, 'dictType.ne_host_groupId', '网元主机分组', 'Network element host grouping'); +INSERT INTO "sys_i18n" VALUES (567, 'dictType.ne_host_authMode', '网元主机认证模式', 'Network element host authentication mode'); +INSERT INTO "sys_i18n" VALUES (568, 'dictData.ne_host_type.ssh', 'SSH', 'SSH'); +INSERT INTO "sys_i18n" VALUES (569, 'dictData.ne_host_type.telnet', 'Telnet', 'Telnet'); +INSERT INTO "sys_i18n" VALUES (570, 'dictData.ne_host_groupId.0', '其他', 'Other'); +INSERT INTO "sys_i18n" VALUES (571, 'dictData.ne_host_groupId.1', '网元', 'Network Elements'); +INSERT INTO "sys_i18n" VALUES (572, 'dictData.ne_host_groupId.2', '系统', 'System'); +INSERT INTO "sys_i18n" VALUES (573, 'dictData.ne_host_authMode.0', '密码认证', 'Password Authentication'); +INSERT INTO "sys_i18n" VALUES (574, 'dictData.ne_host_authMode.1', '私钥认证', 'Private key authentication'); +INSERT INTO "sys_i18n" VALUES (575, 'menu.tools.terminal', '主机终端', 'Host Terminal'); +INSERT INTO "sys_i18n" VALUES (576, 'menu.ne.neHost', '网元主机', 'NE Host'); +INSERT INTO "sys_i18n" VALUES (577, 'menu.ne.neHostCommand', '网元主机命令', 'NE Host CMD'); +INSERT INTO "sys_i18n" VALUES (578, 'log.operate.title.neHostCmd', '网元主机命令', 'NE Host CMD'); +INSERT INTO "sys_i18n" VALUES (579, 'neHostCmd.noData', '没有可访问主机命令数据!', 'No accessible host command data!'); +INSERT INTO "sys_i18n" VALUES (580, 'neHostCmd.errKeyExists', '主机命令操作【{name}】失败,同组内名称已存在', 'Host command operation [{name}] failed, name already exists in the same group'); +INSERT INTO "sys_i18n" VALUES (581, 'dictType.ne_host_cmd_groupId', '网元主机命令分组', 'Network element host command grouping'); +INSERT INTO "sys_i18n" VALUES (582, 'dictData.ne_host_cmd_groupId.0', '默认', 'Default'); +INSERT INTO "sys_i18n" VALUES (583, 'dictData.ne_host_cmd_groupId.1', '快速命令', 'Quick Commands'); +INSERT INTO "sys_i18n" VALUES (584, 'menu.ne.neInfo', '网元信息', 'NE Information'); +INSERT INTO "sys_i18n" VALUES (585, 'log.operate.title.neInfo', '网元信息', 'NE Information'); +INSERT INTO "sys_i18n" VALUES (586, 'neInfo.noData', '没有可访问网元信息数据!', 'There is no accessible network element information data!'); +INSERT INTO "sys_i18n" VALUES (587, 'neInfo.errKeyExists', '网元信息操作【{key}】失败,同类型下标识已存在', 'NE info operation [{key}] failed, identifier already exists under the same type'); +INSERT INTO "sys_i18n" VALUES (588, 'log.operate.title.imsCDR', '通话话单', 'Voice CDR'); +INSERT INTO "sys_i18n" VALUES (589, 'menu.dashboard.amfUE', '5G 终端事件', '5G UE Events'); +INSERT INTO "sys_i18n" VALUES (590, 'log.operate.title.amfUE', '5G 终端事件', '5G UE Events'); +INSERT INTO "sys_i18n" VALUES (591, 'dictData.ne_info_status.0', '离线', 'Offline'); +INSERT INTO "sys_i18n" VALUES (592, 'dictData.ne_info_status.1', '在线', 'Active'); +INSERT INTO "sys_i18n" VALUES (593, 'dictData.ne_info_status.2', '等待同步', 'Wait Sync'); +INSERT INTO "sys_i18n" VALUES (594, 'dictData.ne_info_status.3', '待机', 'Standby'); +INSERT INTO "sys_i18n" VALUES (595, 'dictType.ne_info_status', '网元信息状态', 'NE Info State'); +INSERT INTO "sys_i18n" VALUES (596, 'menu.ne.neQuickSetup', '网元快速安装', 'NE Quick Setup'); +INSERT INTO "sys_i18n" VALUES (597, 'log.operate.title.neConfig', '网元参数配置', 'NE Parameter Configuration'); +INSERT INTO "sys_i18n" VALUES (598, 'menu.ne.neLicense', '网元许可', 'NE License'); +INSERT INTO "sys_i18n" VALUES (599, 'log.operate.title.neLicense', '网元许可', 'NE License'); +INSERT INTO "sys_i18n" VALUES (600, 'menu.ne.neSoftware', '网元软件包', 'NE Software'); +INSERT INTO "sys_i18n" VALUES (601, 'log.operate.title.neSoftware', '网元软件包', 'NE Software'); +INSERT INTO "sys_i18n" VALUES (602, 'log.operate.title.neVersion', '网元版本', 'NE Version'); +INSERT INTO "sys_i18n" VALUES (603, 'menu.ne.neVersion', '网元版本', 'NE Version'); +INSERT INTO "sys_i18n" VALUES (604, 'dictType.ne_license_status', '网元许可状态', 'NE License Status'); +INSERT INTO "sys_i18n" VALUES (605, 'dictData.ne_license_status.0', '无效', 'Invalid'); +INSERT INTO "sys_i18n" VALUES (606, 'dictData.ne_license_status.1', '有效', 'Valid'); +INSERT INTO "sys_i18n" VALUES (607, 'menu.dashboard.mocn', 'MOCN', 'MOCN'); +INSERT INTO "sys_i18n" VALUES (608, 'menu.monitor.cdr', '话单', 'CDR'); +INSERT INTO "sys_i18n" VALUES (609, 'menu.monitor.event', '事件', 'Events'); +INSERT INTO "sys_i18n" VALUES (610, 'post.export.time', '创建时间', 'Creation Time'); +INSERT INTO "sys_i18n" VALUES (611, 'role.export.time', '创建时间', 'Creation Time'); +INSERT INTO "sys_i18n" VALUES (612, 'dictData.ne_host_authMode.2', '免密认证', 'Confidentiality Auth Mode'); +INSERT INTO "sys_i18n" VALUES (613, 'menu.ne.neConfig', '网元配置', 'NE Config'); +INSERT INTO "sys_i18n" VALUES (614, 'dictData.ne_version_status.0', '无', 'Nothing'); +INSERT INTO "sys_i18n" VALUES (615, 'dictData.ne_version_status.1', '已是最新', 'Updated'); +INSERT INTO "sys_i18n" VALUES (616, 'dictData.ne_version_status.2', '上一版本', 'Previous'); +INSERT INTO "sys_i18n" VALUES (617, 'dictData.ne_version_status.3', '有新版本', 'Has New'); +INSERT INTO "sys_i18n" VALUES (618, 'menu.fault.event', '事件通知', 'Event Notification'); +INSERT INTO "sys_i18n" VALUES (619, 'menu.dashboard.smfCDR', '数据话单', 'Data CDR'); +INSERT INTO "sys_i18n" VALUES (620, 'log.operate.title.smfCDR', '数据话单', 'Data CDR'); +INSERT INTO "sys_i18n" VALUES (621, 'config.sys.i18nDefaultRemark', '国际化默认语言可选择 en_US、zh_CN', 'Internationalization default language selectable en_US、zh_CN'); +INSERT INTO "sys_i18n" VALUES (622, 'config.sys.i18nOpenRemark', '是否显示切换的控件 true/false', 'Whether to display switched controls true/false'); +INSERT INTO "sys_i18n" VALUES (623, 'menu.dashboard.mmeUE', '4G 终端事件', '4G UE Events'); +INSERT INTO "sys_i18n" VALUES (624, 'log.operate.title.mmeUE', '4G 终端事件', '4G UE Events'); +INSERT INTO "sys_i18n" VALUES (625, 'menu.system.user.editPost', '修改用户岗位', 'Modify User Post'); +INSERT INTO "sys_i18n" VALUES (626, 'menu.dashboard.smscCDR', '短信话单', 'SMS CDR'); +INSERT INTO "sys_i18n" VALUES (627, 'log.operate.title.smscCDR', '短信话单', 'SMS CDR'); +INSERT INTO "sys_i18n" VALUES (628, 'menu.trace.pcapFile', '信令抓包文件', 'Signaling Capture File'); +INSERT INTO "sys_i18n" VALUES (629, 'menu.trace.taskAnalyze', '网元跟踪任务分析', 'NE Trace Task Analysis'); +INSERT INTO "sys_i18n" VALUES (630, 'job.ne_data_udm', '网元数据-UDM用户数据同步', 'NE Data-Sync UDM Data'); +INSERT INTO "sys_i18n" VALUES (631, 'menu.system.setting.doc', '系统使用文档', 'System User Documentation'); +INSERT INTO "sys_i18n" VALUES (632, 'menu.system.setting.official', '官网链接', 'Official Website'); +INSERT INTO "sys_i18n" VALUES (633, 'menu.system.setting.lock', '锁屏操作', 'Lockscreen Operation'); +INSERT INTO "sys_i18n" VALUES (634, 'menu.ne.neConfigBackup', '网元配置备份', 'NE Config Backups'); +INSERT INTO "sys_i18n" VALUES (635, 'job.ne_config_backup', '网元-配置文件定期备份', 'NE-Config Backup Regularly'); +INSERT 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.'); +INSERT INTO "sys_i18n" VALUES (637, 'job.backup_export_table_sys_log_operate', '备份-操作日志表定期导出', 'Backup-Operation Log Table Periodic Export'); +INSERT INTO "sys_i18n" VALUES (638, 'job.backup_export_table_cdr_event_ims', '备份-语音话单表定期导出', 'Backup-Regular Export of voice bill forms'); +INSERT INTO "sys_i18n" VALUES (639, 'job.backup_export_table_cdr_event_smf', '备份-数据话单表定期导出', 'Backup-Regular Export of data sheet tables'); +INSERT INTO "sys_i18n" VALUES (640, 'cache.name.oauth2_codes', '客户端授权码', 'Oauth2 Client Code'); +INSERT INTO "sys_i18n" VALUES (641, 'cache.name.oauth2_devices', '客户端令牌', 'Oauth2 Token'); +INSERT INTO "sys_i18n" VALUES (644, 'menu.log.exportFile', '导出文件', 'Exported File'); +INSERT INTO "sys_i18n" VALUES (645, 'menu.perf.kpiCReport', '自定义指标数据', 'Custom Indicator Data'); +INSERT INTO "sys_i18n" VALUES (646, 'menu.trace.taskHLR', 'HLR 跟踪任务', 'HLR Trace Task'); +INSERT INTO "sys_i18n" VALUES (647, 'dictType.cdr_cause_code', 'CDR 响应原因代码类别类型', 'CDR Response Reason Code Category Type'); +INSERT INTO "sys_i18n" VALUES (648, 'dictData.cdr_cause_code.0', '未知错误', 'Unknown Error'); +INSERT INTO "sys_i18n" VALUES (649, 'dictData.cdr_cause_code.8', '运营者确定的禁止', 'Operator determined barring'); +INSERT INTO "sys_i18n" VALUES (650, 'dictData.cdr_cause_code.10', '禁止呼叫', 'Call Barred'); +INSERT INTO "sys_i18n" VALUES (651, 'dictData.cdr_cause_code.21', '呼叫被拒', 'Call rejected'); +INSERT INTO "sys_i18n" VALUES (652, 'dictData.cdr_cause_code.22', '数量已更改', 'Number changed'); +INSERT INTO "sys_i18n" VALUES (653, 'dictData.cdr_cause_code.27', '目的地出错', 'Destination out of order'); +INSERT INTO "sys_i18n" VALUES (654, 'dictData.cdr_cause_code.28', '数字格式无效(数字不完整)', 'Invalid number format (incomplete number)'); +INSERT INTO "sys_i18n" VALUES (655, 'dictData.cdr_cause_code.29', '设施被拒', 'Facility rejected'); +INSERT INTO "sys_i18n" VALUES (656, 'dictData.cdr_cause_code.30', '回复状态查询', 'Response to STATUS ENQUIRY'); +INSERT INTO "sys_i18n" VALUES (657, 'dictData.cdr_cause_code.38', '网络故障', 'Network out of order'); +INSERT INTO "sys_i18n" VALUES (658, 'dictData.cdr_cause_code.41', '临时故障', 'Temporary failure'); +INSERT INTO "sys_i18n" VALUES (659, 'dictData.cdr_cause_code.42', '交换设备拥塞', 'Switching equipment congestion'); +INSERT INTO "sys_i18n" VALUES (660, 'dictData.cdr_cause_code.47', '资源不可用', 'Resource unavailable, unspecified'); +INSERT INTO "sys_i18n" VALUES (661, 'dictData.cdr_cause_code.50', '请求的设施未订阅', 'Requested facility not subscribed'); +INSERT INTO "sys_i18n" VALUES (662, 'job.backup_export_table_cdr_event_smsc', '备份-短信话单表定期导出', 'Backup-Regular Export of SMS call list'); +INSERT INTO "sys_i18n" VALUES (663, 'job.backup_remove_file', '备份-定期删除备份目录下文件', 'Backup-Periodically Delete Directory Files'); +INSERT INTO "sys_i18n" VALUES (664, 'config.sys.homePage', '自定义主页', 'Custom Home Page'); +INSERT INTO "sys_i18n" VALUES (665, 'config.sys.homePageRemark', '选择列表中的任一页面作为主页路径', 'Select any page in the list as the homepage'); +INSERT INTO "sys_i18n" VALUES (666, 'menu.ne.neOverview', '网元概览', 'NE Overview'); +INSERT INTO "sys_i18n" VALUES (667, 'menu.ne.neOverviewRemark', '显示所有网元状态配置和license等概览信息', 'Displays overview information such as status, configuration and license of all network elements'); +INSERT INTO "sys_i18n" VALUES (668, 'job.backup_export_table_cdr_event_sgwc', '备份-漫游数据话单表定期导出', 'Backup-Regular Export of Roaming Data table'); +INSERT INTO "sys_i18n" VALUES (669, 'cache.name.i18n', '国际化语言管理', 'Internationalized Language Management'); +INSERT INTO "sys_i18n" VALUES (670, 'config.sys.user.passwordPolicy', '用户管理-默认密码策略强度', 'User Management-Default Password Policy Strength'); +INSERT 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'); +INSERT INTO "sys_i18n" VALUES (672, 'config.sys.user.passwdExpire', '用户管理-密码有效期', 'User Management-Password Expiration Date'); +INSERT 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'); +INSERT INTO "sys_i18n" VALUES (674, 'config.sys.user.passwdNotAllowedHistory', '用户管理-不允许使用最近密码次数', 'User Management-Not Allowed Recent Passwords'); +INSERT 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'); +INSERT INTO "sys_i18n" VALUES (676, 'login.errPasswdHistory', '不允许使用最近密码', 'Recent passwords not allowed'); +INSERT INTO "sys_i18n" VALUES (677, 'log.operate.title.oauth2client', 'Oauth2客户端授权', 'Oauth2 Client Authorization'); +INSERT INTO "sys_i18n" VALUES (679, 'dictType.trace_msg_type', '跟踪消息类型', 'Trace Message Type'); +INSERT INTO "sys_i18n" VALUES (680, 'dictData.trace_msg_type.0', '请求', 'Request'); +INSERT INTO "sys_i18n" VALUES (681, 'dictData.trace_msg_type.1', '响应', 'Response'); +INSERT INTO "sys_i18n" VALUES (682, 'dictType.trace_msg_direct', '跟踪消息方向', 'Track Message Direction'); +INSERT INTO "sys_i18n" VALUES (683, 'dictData.trace_msg_direct.0', '接收', 'Receive'); +INSERT INTO "sys_i18n" VALUES (684, 'dictData.trace_msg_direct.1', '发送', 'Send'); +INSERT INTO "sys_i18n" VALUES (685, 'dictData.trace_interfaces.1', 'N1', 'N1'); +INSERT INTO "sys_i18n" VALUES (686, 'dictData.trace_interfaces.2', 'N2', 'N2'); +INSERT INTO "sys_i18n" VALUES (687, 'dictData.trace_interfaces.3', 'N1/N2', 'N1/N2'); +INSERT INTO "sys_i18n" VALUES (688, 'dictData.trace_interfaces.4', 'N4', 'N4'); +INSERT INTO "sys_i18n" VALUES (689, 'dictData.trace_interfaces.8', 'N8', 'N8'); +INSERT INTO "sys_i18n" VALUES (690, 'dictData.trace_interfaces.10', 'N10', 'N10'); +INSERT INTO "sys_i18n" VALUES (691, 'dictData.trace_interfaces.11', 'N11', 'N11'); +INSERT INTO "sys_i18n" VALUES (692, 'dictData.trace_interfaces.12', 'N12', 'N12'); +INSERT INTO "sys_i18n" VALUES (693, 'dictData.trace_interfaces.13', 'N13', 'N13'); +INSERT INTO "sys_i18n" VALUES (694, 'dictData.trace_interfaces.7', 'N7', 'N7'); +INSERT INTO "sys_i18n" VALUES (695, 'dictData.trace_interfaces.15', 'N15', 'N15'); +INSERT INTO "sys_i18n" VALUES (696, 'dictData.trace_interfaces.17', 'N17', 'N17'); +INSERT INTO "sys_i18n" VALUES (697, 'dictData.trace_interfaces.20', 'N20', 'N20'); +INSERT INTO "sys_i18n" VALUES (698, 'dictData.trace_interfaces.22', 'N22', 'N22'); +INSERT INTO "sys_i18n" VALUES (699, 'dictData.trace_interfaces.40', 'N40', 'N40'); +INSERT INTO "sys_i18n" VALUES (700, 'dictData.cdr_sip_code.302', '302 原因不明', '302 Unknown Reason'); +INSERT INTO "sys_i18n" VALUES (701, 'dictData.cdr_sip_code.402', '402 原因不明', '402 Unknown Reason'); +INSERT INTO "sys_i18n" VALUES (702, 'dictData.cdr_sip_code.480', '480 被叫挂断/拒接', '480 Temporarily Unavailable'); +INSERT INTO "sys_i18n" VALUES (703, 'dictData.cdr_sip_code.481', '481 原因不明', '481 Unknown Reason'); +INSERT INTO "sys_i18n" VALUES (704, 'dictData.cdr_sip_code.482', '482 发现环路', '482 Loop Detected'); +INSERT INTO "sys_i18n" VALUES (705, 'dictData.cdr_sip_code.486', '486 这里很忙', '486 Busy Here'); +INSERT INTO "sys_i18n" VALUES (706, 'dictData.cdr_sip_code.489', '489 原因不明', '489 Unknown Reason'); +INSERT INTO "sys_i18n" VALUES (707, 'dictData.cdr_sip_code.580', '580 原因不明', '580 Unknown Reason'); +INSERT INTO "sys_i18n" VALUES (708, 'alarm.export.alarmType', '告警类型', 'Alarm Type'); +INSERT INTO "sys_i18n" VALUES (709, 'alarm.export.origSeverity', '告警级别', 'Severity'); +INSERT INTO "sys_i18n" VALUES (710, 'alarm.export.alarmTitle', '告警标题', 'Alarm Title'); +INSERT INTO "sys_i18n" VALUES (711, 'alarm.export.eventTime', '告警产生时间', 'Event Time'); +INSERT INTO "sys_i18n" VALUES (712, 'alarm.export.alarmId', '告警唯一标识', 'Alarm ID'); +INSERT INTO "sys_i18n" VALUES (713, 'alarm.export.clearUser', '告警清除用户', 'Clear User'); +INSERT INTO "sys_i18n" VALUES (714, 'alarm.export.clearType', '告警清除类型', 'Clear Type'); +INSERT INTO "sys_i18n" VALUES (715, 'alarm.export.clearTime', '告警清除时间', 'Clear Time'); +INSERT INTO "sys_i18n" VALUES (716, 'log.operate.title.alarm', '告警', 'Alarm'); +INSERT INTO "sys_i18n" VALUES (717, 'ne.common.neType', '网元类型', 'NE Type'); +INSERT INTO "sys_i18n" VALUES (718, 'ne.common.neName', '网元名称', 'NE Name'); +INSERT INTO "sys_i18n" VALUES (719, 'ne.common.neId', '网元标识', 'NE ID'); +INSERT INTO "sys_i18n" VALUES (720, 'log.operate.title.udmVOIP', 'VOIP用户', 'UDM VOIP'); +INSERT INTO "sys_i18n" VALUES (721, 'log.operate.title.udmVolteIMS', 'VolteIMS用户', 'UDM VolteIMS'); +INSERT INTO "sys_i18n" VALUES (722, 'log.operate.title.backup', '备份', 'Backup'); +INSERT 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}'); +INSERT 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}'); +INSERT 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'); +INSERT INTO "sys_i18n" VALUES (726, 'job.backup_export_udm', '备份-UDM数据定期导出', 'Backup-Periodic export of UDM Data'); +INSERT 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/txtUDM Data'); +INSERT INTO "sys_i18n" VALUES (728, 'dictData.cdr_sip_code_cause.0', '因其他原因呼叫失败', 'Call failure for other reason'); +INSERT INTO "sys_i18n" VALUES (729, 'dictData.cdr_sip_code_cause.200', '正常通话清除', 'Normal Call Clearing'); +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 (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 (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'); +INSERT INTO "sys_i18n" VALUES (743, 'dictData.cdr_sip_code_cause.500', '服务器本身出了问题', 'Something went wrong inside the server itself'); +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 (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'); diff --git a/build/database/lite/install/sys_job.sql b/build/database/lite/install/sys_job.sql new file mode 100644 index 00000000..6a0b9a52 --- /dev/null +++ b/build/database/lite/install/sys_job.sql @@ -0,0 +1,49 @@ +-- ---------------------------- +-- Table structure for sys_job +-- ---------------------------- +DROP TABLE IF EXISTS "sys_job"; +CREATE TABLE "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 "uk_name_group" +ON "sys_job" ( + "job_name" ASC, + "job_group" ASC +); + +-- ---------------------------- +-- Records of sys_job +-- ---------------------------- +INSERT 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'); +INSERT INTO "sys_job" VALUES (2, 'job.ne_config_backup', 'SYSTEM', 'ne_config_backup', '', '0 30 0 * * ?', '3', '0', '1', '1', 'system', 1698478134839, 'system', 1698478134839, 'job.ne_config_backup_remark'); +INSERT 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, ''); +INSERT INTO "sys_job" VALUES (4, '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 (5, '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 (6, '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 (7, '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'); +INSERT INTO "sys_job" VALUES (21, 'job.backup_export_table_sys_log_operate', 'SYSTEM', 'backup_export_table', '{"hour":1,"columns":["id","title","business_type","opera_by","opera_url_method","opera_url","opera_ip","status","opera_time","cost_time"],"tableName":"sys_log_operate","backupPath":"/log/operate_log"}', '0 0 0/1 * * ?', '3', '0', '1', '1', 'system', 1698478134839, 'system', 1698478134839, 'job.backup_export_table_sys_log_operate_remark'); +INSERT INTO "sys_job" VALUES (22, 'job.backup_export_table_cdr_event_ims', 'SYSTEM', 'backup_export_table', '{"hour":1,"columns":["id","record_type","call_type","caller_party","called_party","call_duration","cause","seizure_time","release_time"],"tableName":"cdr_event_ims","backupPath":"/cdr/ims_cdr"}', '0 0 0/1 * * ?', '3', '0', '1', '1', 'system', 1698478134839, 'system', 1698478134839, 'job.backup_export_table_cdr_event_ims_remark'); +INSERT INTO "sys_job" VALUES (23, 'job.backup_export_table_cdr_event_smf', 'SYSTEM', 'backup_export_table', '{"hour":1,"columns":["id","charging_id","subscription_id_data","subscription_id_type","data_volume_uplink","data_volume_downlink","data_total_volume","invocation_timestamp","user_identifier","ssc_mode","dnn_id","pdu_type","rat_type","pdu_ipv4","pdu_ipv6","network_function_ipv4_address","record_nfId","record_type","record_opening_time"],"tableName":"cdr_event_smf","backupPath":"/cdr/smf_cdr"}', '0 0 0/1 * * ?', '3', '0', '1', '1', 'system', 1698478134839, 'system', 1698478134839, 'job.backup_export_table_cdr_event_smf_remark'); +INSERT INTO "sys_job" VALUES (24, 'job.backup_export_table_cdr_event_smsc', 'SYSTEM', 'backup_export_table', '{"hour":1,"columns":["id","record_type","service_type","caller_party","called_party","result","update_time"],"tableName":"cdr_event_smsc","backupPath":"/cdr/smsc_cdr"}', '0 0 0/1 * * ?', '3', '0', '1', '1', 'system', 1698478134839, 'system', 1698478134839, 'job.backup_export_table_cdr_event_smsc_remark'); +INSERT INTO "sys_job" VALUES (25, 'job.backup_export_table_cdr_event_sgwc', 'SYSTEM', 'backup_export_table', '{"hour":1,"columns":["charging_id","served_imsi","served_msisdn","data_volume_gprs_uplink","data_volume_gprs_downlink","duration","invocation_timestamp","pgw_address_used","sgw_address","rat_type","pdp_pdn_type","served_pdppdn_address","serving_node_address","serving_node_type","access_point_name_ni","cause_for_rec_closing","record_sequence_number","local_record_sequence_number","record_type","record_opening_time"],"tableName":"cdr_event_sgwc","backupPath":"/cdr/sgwc_cdr"}', '0 0 0/1 * * ?', '3', '0', '1', '1', 'system', 1698478134839, 'system', 1698478134839, 'job.backup_export_table_cdr_event_sgwc_remark'); +INSERT INTO "sys_job" VALUES (26, 'job.backup_remove_file', 'SYSTEM', 'backup_remove_file', '[{"backupPath":"/log/operate_log","storeDays":30,"storeNum":7},{"backupPath":"/cdr/ims_cdr","storeDays":30},{"backupPath":"/cdr/smf_cdr","storeDays":30},{"backupPath":"/cdr/smsc_cdr","storeDays":30},{"backupPath":"/cdr/sgwc_cdr","storeDays":30},{"backupPath":"/udm_data/auth","storeDays":30},{"backupPath":"/udm_data/sub","storeDays":30},{"backupPath":"/udm_data/voip","storeDays":30},{"backupPath":"/udm_data/volte","storeDays":30}]', '0 10 0 * * ?', '3', '0', '1', '1', 'system', 1698478134839, 'system', 1698478134839, 'job.backup_remove_file_remark'); +INSERT INTO "sys_job" VALUES (27, '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_job_log.sql b/build/database/lite/install/sys_job_log.sql new file mode 100644 index 00000000..2b4fa055 --- /dev/null +++ b/build/database/lite/install/sys_job_log.sql @@ -0,0 +1,20 @@ +-- ---------------------------- +-- Table structure for sys_job_log +-- ---------------------------- +DROP TABLE IF EXISTS "sys_job_log"; +CREATE TABLE "sys_job_log" ( + "log_id" integer NOT NULL, + "job_name" text(64) NOT NULL, + "job_group" text(64) NOT NULL, + "invoke_target" text(64) NOT NULL, + "target_params" text(2048), + "job_msg" text(500), + "status_flag" text(1), + "create_time" integer(20), + "cost_time" integer(20), + PRIMARY KEY ("log_id") +); + +-- ---------------------------- +-- Records of sys_job_log +-- ---------------------------- diff --git a/build/database/lite/install/sys_log_login.sql b/build/database/lite/install/sys_log_login.sql new file mode 100644 index 00000000..f6670661 --- /dev/null +++ b/build/database/lite/install/sys_log_login.sql @@ -0,0 +1,29 @@ +-- ---------------------------- +-- Table structure for sys_log_login +-- ---------------------------- +DROP TABLE IF EXISTS "sys_log_login"; +CREATE TABLE "sys_log_login" ( + "id" integer NOT NULL, + "user_name" text(32), + "login_ip" text(128), + "login_location" text(128), + "browser" text(64), + "os" text(64), + "status_flag" text(1), + "msg" text(2048), + "login_time" integer(20), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table sys_job_log +-- ---------------------------- +CREATE INDEX "idx_name_group" +ON "sys_job_log" ( + "job_name" ASC, + "job_group" ASC +); + +-- ---------------------------- +-- Records of sys_log_login +-- ---------------------------- diff --git a/build/database/lite/install/sys_log_operate.sql b/build/database/lite/install/sys_log_operate.sql new file mode 100644 index 00000000..8c5a6cd9 --- /dev/null +++ b/build/database/lite/install/sys_log_operate.sql @@ -0,0 +1,25 @@ +-- ---------------------------- +-- Table structure for sys_log_operate +-- ---------------------------- +DROP TABLE IF EXISTS "sys_log_operate"; +CREATE TABLE "sys_log_operate" ( + "id" integer NOT NULL, + "title" text(64), + "business_type" text(1), + "opera_url" text(200), + "opera_url_method" text(10), + "opera_ip" text(128), + "opera_location" text(128), + "opera_param" text(2000), + "opera_msg" text(2000), + "opera_method" text(128), + "opera_by" text(64), + "opera_time" integer(20), + "status_flag" text(1), + "cost_time" integer(20), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Records of sys_log_operate +-- ---------------------------- diff --git a/build/database/lite/install/sys_log_user_password.sql b/build/database/lite/install/sys_log_user_password.sql new file mode 100644 index 00000000..4d4fb147 --- /dev/null +++ b/build/database/lite/install/sys_log_user_password.sql @@ -0,0 +1,27 @@ +-- ---------------------------- +-- Table structure for sys_log_user_password +-- ---------------------------- +DROP TABLE IF EXISTS "sys_log_user_password"; +CREATE TABLE "sys_log_user_password" ( + "id" integer NOT NULL, + "user_id" integer, + "user_name" text(32), + "password" text(128), + "create_by" text(64), + "create_time" integer, + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table sys_log_user_password +-- ---------------------------- +CREATE INDEX "idx_id_name_time" +ON "sys_log_user_password" ( + "user_id" ASC, + "user_name" ASC, + "create_time" ASC +); + +-- ---------------------------- +-- Records of sys_log_user_password +-- ---------------------------- diff --git a/build/database/lite/install/sys_menu.sql b/build/database/lite/install/sys_menu.sql new file mode 100644 index 00000000..6a01a6e2 --- /dev/null +++ b/build/database/lite/install/sys_menu.sql @@ -0,0 +1,202 @@ +-- ---------------------------- +-- Table structure for sys_menu +-- ---------------------------- +DROP TABLE IF EXISTS "sys_menu"; +CREATE TABLE "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 +-- ---------------------------- +INSERT INTO "sys_menu" VALUES (1, 'menu.system', 0, 16, 'system', '', '1', '1', 'D', '1', '1', '', 'icon-xiangmu', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.systemRemark'); +INSERT INTO "sys_menu" VALUES (4, 'menu.ne', 0, 3, 'ne', '', '1', '0', 'D', '1', '1', '', 'icon-huizhiguize', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.configRemark'); +INSERT INTO "sys_menu" VALUES (5, 'menu.ue', 0, 7, 'ue', '', '1', '0', 'D', '1', '1', '', 'icon-wocanyu', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.ueRemark'); +INSERT INTO "sys_menu" VALUES (60, 'menu.tools', 0, 60, 'tool', '', '1', '1', 'D', '1', '1', '', 'icon-wenjian', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.toolsRemark'); +INSERT 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, ''); +INSERT 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'); +INSERT 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, ''); +INSERT 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, ''); +INSERT 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, ''); +INSERT 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, ''); +INSERT 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'); +INSERT 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'); +INSERT 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'); +INSERT 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'); +INSERT 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'); +INSERT 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'); +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 (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'); +INSERT 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'); +INSERT 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'); +INSERT 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'); +INSERT 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'); +INSERT 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'); +INSERT 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'); +INSERT INTO "sys_menu" VALUES (1000, 'menu.common.query', 100, 1, '', '', '1', '1', 'B', '1', '1', 'system:user:query', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (1001, 'menu.common.add', 100, 2, '', '', '1', '1', 'B', '1', '1', 'system:user:add', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (1002, 'menu.common.edit', 100, 3, '', '', '1', '1', 'B', '1', '1', 'system:user:edit', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (1003, 'menu.common.delete', 100, 4, '', '', '1', '1', 'B', '1', '1', 'system:user:remove', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (1004, 'menu.common.export', 100, 5, '', '', '1', '1', 'B', '1', '1', 'system:user:export', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (1005, 'menu.common.import', 100, 6, '', '', '1', '1', 'B', '1', '1', 'system:user:import', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (1006, 'menu.common.resetPwd', 100, 7, '', '', '1', '1', 'B', '1', '1', 'system:user:resetPwd', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (1007, 'menu.common.query', 101, 1, '', '', '1', '1', 'B', '1', '1', 'system:role:query', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (1008, 'menu.common.add', 101, 2, '', '', '1', '1', 'B', '1', '1', 'system:role:add', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (1009, 'menu.common.edit', 101, 3, '', '', '1', '1', 'B', '1', '1', 'system:role:edit', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (1010, 'menu.common.delete', 101, 4, '', '', '1', '1', 'B', '1', '1', 'system:role:remove', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (1011, 'menu.common.export', 101, 5, '', '', '1', '1', 'B', '1', '1', 'system:role:export', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (1012, 'menu.common.query', 103, 1, '', '', '1', '1', 'B', '1', '1', 'system:menu:query', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (1013, 'menu.common.add', 103, 2, '', '', '1', '1', 'B', '1', '1', 'system:menu:add', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (1014, 'menu.common.edit', 103, 3, '', '', '1', '1', 'B', '1', '1', 'system:menu:edit', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (1015, 'menu.common.delete', 103, 4, '', '', '1', '1', 'B', '1', '1', 'system:menu:remove', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (1016, 'menu.common.query', 104, 1, '', '', '1', '1', 'B', '1', '1', 'system:dept:query', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (1017, 'menu.common.add', 104, 2, '', '', '1', '1', 'B', '1', '1', 'system:dept:add', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (1018, 'menu.common.edit', 104, 3, '', '', '1', '1', 'B', '1', '1', 'system:dept:edit', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (1019, 'menu.common.delete', 104, 4, '', '', '1', '1', 'B', '1', '1', 'system:dept:remove', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (1020, 'menu.common.query', 105, 1, '', '', '1', '1', 'B', '1', '1', 'system:post:query', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (1021, 'menu.common.add', 105, 2, '', '', '1', '1', 'B', '1', '1', 'system:post:add', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (1022, 'menu.common.edit', 105, 3, '', '', '1', '1', 'B', '1', '1', 'system:post:edit', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (1023, 'menu.common.delete', 105, 4, '', '', '1', '1', 'B', '1', '1', 'system:post:remove', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (1024, 'menu.common.export', 105, 5, '', '', '1', '1', 'B', '1', '1', 'system:post:export', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (1025, 'menu.common.query', 106, 1, '#', '', '1', '1', 'B', '1', '1', 'system:dict:query', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (1026, 'menu.common.add', 106, 2, '#', '', '1', '1', 'B', '1', '1', 'system:dict:add', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (1027, 'menu.common.edit', 106, 3, '#', '', '1', '1', 'B', '1', '1', 'system:dict:edit', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (1028, 'menu.common.delete', 106, 4, '#', '', '1', '1', 'B', '1', '1', 'system:dict:remove', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (1029, 'menu.common.export', 106, 5, '#', '', '1', '1', 'B', '1', '1', 'system:dict:export', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (1030, 'menu.common.query', 108, 1, '#', '', '1', '1', 'B', '1', '1', 'system:config:query', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (1031, 'menu.common.add', 108, 2, '#', '', '1', '1', 'B', '1', '1', 'system:config:add', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (1032, 'menu.common.edit', 108, 3, '#', '', '1', '1', 'B', '1', '1', 'system:config:edit', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (1033, 'menu.common.delete', 108, 4, '#', '', '1', '1', 'B', '1', '1', 'system:config:remove', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (1034, 'menu.common.export', 108, 5, '#', '', '1', '1', 'B', '1', '1', 'system:config:export', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (1039, 'menu.common.query', 500, 1, '#', '', '1', '1', 'B', '1', '1', 'system:log:operate:query', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (1040, 'menu.common.delete', 500, 2, '#', '', '1', '1', 'B', '1', '1', 'system:log:operate:remove', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (1041, 'menu.common.export', 500, 3, '#', '', '1', '1', 'B', '1', '1', 'system:log:operate:export', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (1042, 'menu.common.query', 501, 1, '#', '', '1', '1', 'B', '1', '1', 'system:log:login:query', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (1043, 'menu.common.delete', 501, 2, '#', '', '1', '1', 'B', '1', '1', 'system:log:login:remove', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (1044, 'menu.common.export', 501, 3, '#', '', '1', '1', 'B', '1', '1', 'system:log:login:export', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (1045, 'menu.common.unlock', 501, 4, '#', '', '1', '1', 'B', '1', '1', 'system:log:login:unlock', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (1046, 'menu.common.query', 114, 1, '#', '', '1', '1', 'B', '1', '1', 'monitor:cache:query', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (1047, 'menu.common.delete', 114, 2, '#', '', '1', '1', 'B', '1', '1', 'monitor:cache:remove', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (1048, 'menu.common.query', 115, 1, '#', '', '1', '1', 'B', '1', '1', 'monitor:online:query', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (1049, 'menu.forcedQuit.batch ', 115, 2, '#', '', '1', '1', 'B', '1', '1', 'monitor:online:batchLogout', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (1050, 'menu.forcedQuit.single', 115, 3, '#', '', '1', '1', 'B', '1', '1', 'monitor:online:forceLogout', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (1051, 'menu.common.query', 116, 1, '#', '', '1', '1', 'B', '1', '1', 'monitor:job:query', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (1052, 'menu.common.add', 116, 2, '#', '', '1', '1', 'B', '1', '1', 'monitor:job:add', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (1053, 'menu.common.edit', 116, 3, '#', '', '1', '1', 'B', '1', '1', 'monitor:job:edit', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +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 (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, ''); +INSERT INTO "sys_menu" VALUES (2003, 'menu.neData.udmVolte', 5, 7, 'udm-volte', 'neData/udm-volte/index', '1', '0', 'M', '1', '1', 'udm:volte:list', 'icon-xiangmuchengyuan', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT 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, ''); +INSERT 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, ''); +INSERT 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, ''); +INSERT 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, ''); +INSERT INTO "sys_menu" VALUES (2008, 'menu.ueUser.n3iwf', 5, 20, 'n3iwf', 'neUser/n3iwf/index', '1', '0', 'M', '0', '1', 'neUser:n3iwf:index', 'icon-paixu', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT 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, ''); +INSERT INTO "sys_menu" VALUES (2010, 'menu.neUser.nssf', 5, 26, 'nssf', 'neUser/nssf/index', '1', '0', 'M', '0', '1', 'neUser:nssf:index', 'icon-daimayingyong', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (2011, 'menu.neUser.nssfAmf', 5, 28, 'nssfAmf', 'neUser/nssfAmf/index', '1', '0', 'M', '0', '1', 'neUser:nssfAmf:index', 'icon-paixu', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (2083, 'menu.trace', 2087, 30, 'traceManage', '', '1', '0', 'D', '1', '1', '', 'icon-paixu', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.traceRemark'); +INSERT INTO "sys_menu" VALUES (2084, 'menu.trace.task', 2083, 1, 'task', 'traceManage/task/index', '1', '0', 'M', '1', '1', 'traceManage:task:index', 'icon-chexiao', '0', 'system', 1728641403588, 'system', 1744453890548, 'menu.trace.taskRemark'); +INSERT INTO "sys_menu" VALUES (2085, 'menu.trace.taskData', 2083, 4, 'task/inline/data', 'traceManage/task/data', '1', '0', 'M', '0', '1', 'traceManage:task:data', '#', '0', 'system', 1728641403588, 'system', 1744453921381, ''); +INSERT INTO "sys_menu" VALUES (2086, 'menu.trace.pcap', 2083, 11, 'pcap', 'traceManage/pcap/index', '1', '1', 'M', '1', '1', 'traceManage:pcap:index', 'icon-soutubiao', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.trace.pcapRemark'); +INSERT INTO "sys_menu" VALUES (2087, 'menu.fault', 0, 2, 'faultManage', '', '1', '0', 'D', '1', '1', '', 'icon-jinggao', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.faultRemark'); +INSERT INTO "sys_menu" VALUES (2088, 'menu.fault.active', 2129, 1, 'active-alarm', 'faultManage/active-alarm/index', '1', '1', 'M', '1', '1', 'faultManage:active-alarm:index', 'icon-wenjian', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.fault.activemRemark'); +INSERT INTO "sys_menu" VALUES (2089, 'menu.log', 0, 9, 'logManage', '', '1', '0', 'D', '1', '1', '', 'icon-fuzhidaima', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.logRemark'); +INSERT 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'); +INSERT 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'); +INSERT 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'); +INSERT 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'); +INSERT 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, ''); +INSERT 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'); +INSERT 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'); +INSERT INTO "sys_menu" VALUES (2099, 'menu.perf', 0, 5, 'perfManage', '', '1', '0', 'D', '1', '1', '', 'icon-soutubiao', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.perfRemark'); +INSERT 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'); +INSERT 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'); +INSERT 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, ''); +INSERT 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'); +INSERT 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'); +INSERT 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'); +INSERT 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, ''); +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 (2112, 'menu.dashboard.sgwcCDR', 2140, 12, 'sgwcCDR', 'dashboard/sgwcCDR/index', '1', '0', 'M', '1', '1', 'dashboard: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'); +INSERT 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'); +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', 'dashboard:cdr:index', 'icon-gerenzhanghu', '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, ''); +INSERT 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, ''); +INSERT 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, ''); +INSERT 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, ''); +INSERT INTO "sys_menu" VALUES (2129, 'menu.alarm', 2087, 20, 'alarm', '', '1', '0', 'D', '1', '1', '', 'icon-jinggao', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (2130, 'menu.topology', 2087, 10, 'topology', '', '1', '0', 'D', '1', '1', '', 'icon-anzhuo', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (2131, 'menu.dashboard', 2087, 15, 'dashboard', '', '1', '0', 'D', '0', '0', '', 'icon-soutubiao', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (2132, 'menu.dashboard.overview', 2087, 1, 'overview', 'dashboard/overview/index', '1', '0', 'M', '1', '1', 'dashboard:overview:index', 'icon-paixu', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (2133, 'menu.dashboard.imsCDR', 2140, 3, 'imsCDR', 'dashboard/imsCDR/index', '1', '0', 'M', '1', '1', 'dashboard:cdr:index', 'icon-paixu', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT 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, ''); +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', 'dashboard:amfUE:index', 'icon-paixu', '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, ''); +INSERT 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, ''); +INSERT 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, ''); +INSERT 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, ''); +INSERT 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, ''); +INSERT 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, ''); +INSERT INTO "sys_menu" VALUES (2148, 'menu.dashboard.smfCDR', 2140, 6, 'smfCDR', 'dashboard/smfCDR/index', '1', '0', 'M', '1', '1', 'dashboard:cdr:index', 'icon-paixu', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (2149, 'menu.dashboard.mmeUE', 2141, 5, 'mmeUE', 'dashboard/mmeUE/index', '1', '0', 'M', '1', '1', 'dashboard:mmeUE:index', 'icon-paixu', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (2150, 'menu.system.user.editPost', 100, 9, '', '', '1', '1', 'B', '1', '1', 'system:user:editPost', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (2151, 'menu.system.setting.doc', 2114, 2, '', '', '1', '1', 'B', '1', '1', 'system:setting:doc', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (2152, 'menu.system.setting.official', 2114, 3, '', '', '1', '1', 'B', '1', '1', 'system:setting:official', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (2153, 'menu.system.setting.lock', 2114, 4, '', '', '1', '1', 'B', '1', '1', 'system:setting:lock', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT 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, ''); +INSERT INTO "sys_menu" VALUES (2155, 'menu.common.delete', 2154, 1, '#', '', '1', '1', 'B', '1', '1', 'ne:neConfigBackup:remove', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (2156, 'menu.common.edit', 2154, 2, '#', '', '1', '1', 'B', '1', '1', 'ne:neConfigBackup:edit', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (2157, 'menu.dashboard.smscCDR', 2140, 9, 'smscCDR', 'dashboard/smscCDR/index', '1', '0', 'M', '1', '1', 'dashboard:cdr:index', 'icon-paixu', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT 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, ''); +INSERT 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, ''); +INSERT INTO "sys_menu" VALUES (2160, 'menu.perf.kpiCReport', 2099, 100, 'kpiCReport', 'perfManage/kpiCReport/index', '1', '0', 'M', '1', '1', 'perfManage:kpiCReport:index', 'icon-tubiaoku', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (2161, 'menu.trace.taskHLR', 2083, 6, 'taskHLR', 'traceManage/task-hlr/index', '1', '0', 'M', '0', '1', 'traceManage:taskHLR:index', 'icon-chexiao', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (2162, 'menu.trace.taskAnalyze', 2083, 2, 'task/inline/analyze', 'traceManage/task/analyze', '1', '0', 'M', '0', '1', 'traceManage:task:analyze', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (2163, 'menu.trace.tshark', 2083, 14, 'tshark', 'traceManage/tshark/index', '1', '0', 'M', '1', '1', 'traceManage:tshark:index', 'icon-gengduo', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO "sys_menu" VALUES (2164, 'menu.trace.wireshark', 2083, 16, 'wireshark', 'traceManage/wireshark/index', '1', '0', 'M', '1', '1', 'traceManage:wireshark:index', 'icon-gengduo', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT 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'); +INSERT INTO "sys_menu" VALUES (2166, 'menu.dashboard.overview.smfUeNum', 2132, 4, '', '', '1', '1', 'B', '1', '1', 'dashboard:overview:smfUeNum', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +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, ''); diff --git a/build/database/lite/install/sys_post.sql b/build/database/lite/install/sys_post.sql new file mode 100644 index 00000000..1abdefb3 --- /dev/null +++ b/build/database/lite/install/sys_post.sql @@ -0,0 +1,26 @@ +-- ---------------------------- +-- Table structure for sys_post +-- ---------------------------- +DROP TABLE IF EXISTS "sys_post"; +CREATE TABLE "sys_post" ( + "post_id" integer NOT NULL, + "post_code" text(64) NOT NULL, + "post_name" text(64) NOT NULL, + "post_sort" integer(11), + "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 ("post_id") +); + +-- ---------------------------- +-- Records of sys_post +-- ---------------------------- +INSERT INTO "sys_post" VALUES (1, 'administator', 'post.admin', 1, '1', '0', 'system', 1697110106499, '', 0, ''); +INSERT INTO "sys_post" VALUES (2, 'operator', 'post.operator', 2, '1', '0', 'system', 1697110106499, '', 0, ''); +INSERT INTO "sys_post" VALUES (3, 'monitor', 'post.monitor', 3, '1', '0', 'system', 1697110106499, '', 0, ''); +INSERT INTO "sys_post" VALUES (4, 'visitor', 'post.visitor', 4, '1', '0', 'system', 1697110106499, '', 0, ''); diff --git a/build/database/lite/install/sys_role.sql b/build/database/lite/install/sys_role.sql new file mode 100644 index 00000000..4277780e --- /dev/null +++ b/build/database/lite/install/sys_role.sql @@ -0,0 +1,30 @@ +-- ---------------------------- +-- Table structure for sys_role +-- ---------------------------- +DROP TABLE IF EXISTS "sys_role"; +CREATE TABLE "sys_role" ( + "role_id" integer NOT NULL, + "role_name" text(64) NOT NULL, + "role_key" text(64) NOT NULL, + "role_sort" integer(11), + "data_scope" text(1), + "menu_check_strictly" text(1), + "dept_check_strictly" text(1), + "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(200), + PRIMARY KEY ("role_id") +); + +-- ---------------------------- +-- Records of sys_role +-- ---------------------------- +INSERT INTO "sys_role" VALUES (1, 'role.system', 'system', 1, '1', '1', '1', '1', '0', 'system', 1697091437683, 'system', 1697091437683, 'role.systemRemark'); +INSERT INTO "sys_role" VALUES (2, 'role.admin', 'admin', 2, '1', '1', '1', '1', '0', 'system', 1697091437683, 'system', 1697091437683, 'role.adminRemark'); +INSERT INTO "sys_role" VALUES (3, 'role.operator', 'operator', 3, '1', '1', '1', '1', '0', 'system', 1697091437683, 'system', 1697091437683, 'role.operatorRemark'); +INSERT INTO "sys_role" VALUES (4, 'role.monitor', 'monitor', 4, '1', '1', '1', '1', '0', 'system', 1697091437683, 'system', 1697091437683, 'role.monitorRemark'); +INSERT INTO "sys_role" VALUES (5, 'role.vistor', 'vistor', 5, '1', '1', '1', '1', '0', 'system', 1697091437683, 'system', 1697091437683, 'role.vistorRemark'); diff --git a/build/database/lite/install/sys_role_dept.sql b/build/database/lite/install/sys_role_dept.sql new file mode 100644 index 00000000..4d3ba0c1 --- /dev/null +++ b/build/database/lite/install/sys_role_dept.sql @@ -0,0 +1,13 @@ +-- ---------------------------- +-- Table structure for sys_role_dept +-- ---------------------------- +DROP TABLE IF EXISTS "sys_role_dept"; +CREATE TABLE "sys_role_dept" ( + "role_id" integer(20) NOT NULL, + "dept_id" integer(20) NOT NULL, + PRIMARY KEY ("role_id", "dept_id") +); + +-- ---------------------------- +-- Records of sys_role_dept +-- ---------------------------- diff --git a/build/database/lite/install/sys_role_menu.sql b/build/database/lite/install/sys_role_menu.sql new file mode 100644 index 00000000..fb71afed --- /dev/null +++ b/build/database/lite/install/sys_role_menu.sql @@ -0,0 +1,190 @@ +-- ---------------------------- +-- Table structure for sys_role_menu +-- ---------------------------- +DROP TABLE IF EXISTS "sys_role_menu"; +CREATE TABLE "sys_role_menu" ( + "role_id" integer(20) NOT NULL, + "menu_id" integer(20) NOT NULL, + PRIMARY KEY ("role_id", "menu_id") +); + +-- ---------------------------- +-- Records of sys_role_menu +-- ---------------------------- +INSERT INTO "sys_role_menu" VALUES (2, 1); +INSERT INTO "sys_role_menu" VALUES (2, 4); +INSERT INTO "sys_role_menu" VALUES (2, 5); +INSERT INTO "sys_role_menu" VALUES (2, 60); +INSERT INTO "sys_role_menu" VALUES (2, 61); +INSERT INTO "sys_role_menu" VALUES (2, 65); +INSERT INTO "sys_role_menu" VALUES (2, 66); +INSERT INTO "sys_role_menu" VALUES (2, 100); +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, 111); +INSERT INTO "sys_role_menu" VALUES (2, 116); +INSERT INTO "sys_role_menu" VALUES (2, 117); +INSERT INTO "sys_role_menu" VALUES (2, 1000); +INSERT INTO "sys_role_menu" VALUES (2, 1001); +INSERT INTO "sys_role_menu" VALUES (2, 1002); +INSERT INTO "sys_role_menu" VALUES (2, 1003); +INSERT INTO "sys_role_menu" VALUES (2, 1004); +INSERT INTO "sys_role_menu" VALUES (2, 1005); +INSERT INTO "sys_role_menu" VALUES (2, 1006); +INSERT INTO "sys_role_menu" VALUES (2, 1007); +INSERT INTO "sys_role_menu" VALUES (2, 1008); +INSERT INTO "sys_role_menu" VALUES (2, 1009); +INSERT INTO "sys_role_menu" VALUES (2, 1010); +INSERT INTO "sys_role_menu" VALUES (2, 1011); +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, 1051); +INSERT INTO "sys_role_menu" VALUES (2, 1053); +INSERT INTO "sys_role_menu" VALUES (2, 1055); +INSERT INTO "sys_role_menu" VALUES (2, 2000); +INSERT INTO "sys_role_menu" VALUES (2, 2001); +INSERT INTO "sys_role_menu" VALUES (2, 2002); +INSERT INTO "sys_role_menu" VALUES (2, 2003); +INSERT INTO "sys_role_menu" VALUES (2, 2004); +INSERT INTO "sys_role_menu" VALUES (2, 2005); +INSERT INTO "sys_role_menu" VALUES (2, 2007); +INSERT INTO "sys_role_menu" VALUES (2, 2009); +INSERT INTO "sys_role_menu" VALUES (2, 2083); +INSERT INTO "sys_role_menu" VALUES (2, 2084); +INSERT INTO "sys_role_menu" VALUES (2, 2086); +INSERT INTO "sys_role_menu" VALUES (2, 2087); +INSERT INTO "sys_role_menu" VALUES (2, 2088); +INSERT INTO "sys_role_menu" VALUES (2, 2089); +INSERT INTO "sys_role_menu" VALUES (2, 2092); +INSERT INTO "sys_role_menu" VALUES (2, 2094); +INSERT INTO "sys_role_menu" VALUES (2, 2096); +INSERT INTO "sys_role_menu" VALUES (2, 2097); +INSERT INTO "sys_role_menu" VALUES (2, 2099); +INSERT INTO "sys_role_menu" VALUES (2, 2102); +INSERT INTO "sys_role_menu" VALUES (2, 2107); +INSERT INTO "sys_role_menu" VALUES (2, 2109); +INSERT INTO "sys_role_menu" VALUES (2, 2113); +INSERT INTO "sys_role_menu" VALUES (2, 2114); +INSERT INTO "sys_role_menu" VALUES (2, 2116); +INSERT INTO "sys_role_menu" VALUES (2, 2117); +INSERT INTO "sys_role_menu" VALUES (2, 2118); +INSERT INTO "sys_role_menu" VALUES (2, 2121); +INSERT INTO "sys_role_menu" VALUES (2, 2122); +INSERT INTO "sys_role_menu" VALUES (2, 2123); +INSERT INTO "sys_role_menu" VALUES (2, 2126); +INSERT INTO "sys_role_menu" VALUES (2, 2128); +INSERT INTO "sys_role_menu" VALUES (2, 2129); +INSERT INTO "sys_role_menu" VALUES (2, 2130); +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, 2140); +INSERT INTO "sys_role_menu" VALUES (2, 2141); +INSERT INTO "sys_role_menu" VALUES (2, 2143); +INSERT INTO "sys_role_menu" VALUES (2, 2145); +INSERT INTO "sys_role_menu" VALUES (2, 2146); +INSERT INTO "sys_role_menu" VALUES (2, 2147); +INSERT INTO "sys_role_menu" VALUES (2, 2148); +INSERT INTO "sys_role_menu" VALUES (2, 2150); +INSERT INTO "sys_role_menu" VALUES (2, 2151); +INSERT INTO "sys_role_menu" VALUES (2, 2152); +INSERT INTO "sys_role_menu" VALUES (2, 2153); +INSERT INTO "sys_role_menu" VALUES (2, 2154); +INSERT INTO "sys_role_menu" VALUES (2, 2155); +INSERT INTO "sys_role_menu" VALUES (2, 2156); +INSERT INTO "sys_role_menu" VALUES (2, 2157); +INSERT INTO "sys_role_menu" VALUES (2, 2158); +INSERT INTO "sys_role_menu" VALUES (2, 2159); +INSERT INTO "sys_role_menu" VALUES (2, 2162); +INSERT INTO "sys_role_menu" VALUES (2, 2163); +INSERT INTO "sys_role_menu" VALUES (2, 2164); +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 (3, 1); +INSERT INTO "sys_role_menu" VALUES (3, 4); +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, 2000); +INSERT INTO "sys_role_menu" VALUES (3, 2001); +INSERT INTO "sys_role_menu" VALUES (3, 2002); +INSERT INTO "sys_role_menu" VALUES (3, 2003); +INSERT INTO "sys_role_menu" VALUES (3, 2004); +INSERT INTO "sys_role_menu" VALUES (3, 2005); +INSERT INTO "sys_role_menu" VALUES (3, 2007); +INSERT INTO "sys_role_menu" VALUES (3, 2009); +INSERT INTO "sys_role_menu" VALUES (3, 2083); +INSERT INTO "sys_role_menu" VALUES (3, 2086); +INSERT INTO "sys_role_menu" VALUES (3, 2087); +INSERT INTO "sys_role_menu" VALUES (3, 2088); +INSERT INTO "sys_role_menu" VALUES (3, 2089); +INSERT INTO "sys_role_menu" VALUES (3, 2092); +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, 2114); +INSERT INTO "sys_role_menu" VALUES (3, 2116); +INSERT INTO "sys_role_menu" VALUES (3, 2123); +INSERT INTO "sys_role_menu" VALUES (3, 2126); +INSERT INTO "sys_role_menu" VALUES (3, 2128); +INSERT INTO "sys_role_menu" VALUES (3, 2129); +INSERT INTO "sys_role_menu" VALUES (3, 2130); +INSERT INTO "sys_role_menu" VALUES (3, 2132); +INSERT INTO "sys_role_menu" VALUES (3, 2133); +INSERT INTO "sys_role_menu" VALUES (3, 2137); +INSERT INTO "sys_role_menu" VALUES (3, 2138); +INSERT INTO "sys_role_menu" VALUES (3, 2140); +INSERT INTO "sys_role_menu" VALUES (3, 2141); +INSERT INTO "sys_role_menu" VALUES (3, 2143); +INSERT INTO "sys_role_menu" VALUES (3, 2146); +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, 2157); +INSERT INTO "sys_role_menu" VALUES (3, 2158); +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 (4, 4); +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, 2097); +INSERT INTO "sys_role_menu" VALUES (4, 2116); +INSERT INTO "sys_role_menu" VALUES (4, 2118); +INSERT INTO "sys_role_menu" VALUES (4, 2126); +INSERT INTO "sys_role_menu" VALUES (4, 2128); +INSERT INTO "sys_role_menu" VALUES (4, 2129); +INSERT INTO "sys_role_menu" VALUES (4, 2130); +INSERT INTO "sys_role_menu" VALUES (4, 2132); +INSERT INTO "sys_role_menu" VALUES (4, 2133); +INSERT INTO "sys_role_menu" VALUES (4, 2138); +INSERT INTO "sys_role_menu" VALUES (4, 2140); +INSERT INTO "sys_role_menu" VALUES (4, 2141); +INSERT INTO "sys_role_menu" VALUES (4, 2147); +INSERT INTO "sys_role_menu" VALUES (4, 2148); +INSERT INTO "sys_role_menu" VALUES (4, 2149); +INSERT INTO "sys_role_menu" VALUES (4, 2157); +INSERT INTO "sys_role_menu" VALUES (4, 2165); +INSERT INTO "sys_role_menu" VALUES (4, 2166); +INSERT INTO "sys_role_menu" VALUES (4, 2167); +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, 2126); +INSERT INTO "sys_role_menu" VALUES (5, 2130); +INSERT INTO "sys_role_menu" VALUES (5, 2165); diff --git a/build/database/lite/install/sys_user.sql b/build/database/lite/install/sys_user.sql new file mode 100644 index 00000000..ab646349 --- /dev/null +++ b/build/database/lite/install/sys_user.sql @@ -0,0 +1,35 @@ +-- ---------------------------- +-- Table structure for sys_user +-- ---------------------------- +DROP TABLE IF EXISTS "sys_user"; +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), + "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` 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, ''); diff --git a/build/database/lite/install/sys_user_post.sql b/build/database/lite/install/sys_user_post.sql new file mode 100644 index 00000000..1619f49b --- /dev/null +++ b/build/database/lite/install/sys_user_post.sql @@ -0,0 +1,17 @@ +-- ---------------------------- +-- Table structure for sys_user_post +-- ---------------------------- +DROP TABLE IF EXISTS "sys_user_post"; +CREATE TABLE "sys_user_post" ( + "user_id" integer(20) NOT NULL, + "post_id" integer(20) NOT NULL, + PRIMARY KEY ("user_id", "post_id") +); + +-- ---------------------------- +-- Records of sys_user_post +-- ---------------------------- +INSERT INTO "sys_user_post" VALUES (1, 1); +INSERT INTO "sys_user_post" VALUES (2, 2); +INSERT INTO "sys_user_post" VALUES (3, 3); +INSERT INTO "sys_user_post" VALUES (4, 3); diff --git a/build/database/lite/install/sys_user_role.sql b/build/database/lite/install/sys_user_role.sql new file mode 100644 index 00000000..b14f5bb7 --- /dev/null +++ b/build/database/lite/install/sys_user_role.sql @@ -0,0 +1,17 @@ +-- ---------------------------- +-- Table structure for sys_user_role +-- ---------------------------- +DROP TABLE IF EXISTS "sys_user_role"; +CREATE TABLE "sys_user_role" ( + "user_id" integer(20) NOT NULL, + "role_id" integer(20) NOT NULL, + PRIMARY KEY ("user_id", "role_id") +); + +-- ---------------------------- +-- Records of sys_user_role +-- ---------------------------- +INSERT INTO "sys_user_role" VALUES (1, 1); +INSERT INTO "sys_user_role" VALUES (2, 2); +INSERT INTO "sys_user_role" VALUES (3, 3); +INSERT INTO "sys_user_role" VALUES (4, 4); diff --git a/build/database/lite/install/trace_data.sql b/build/database/lite/install/trace_data.sql new file mode 100644 index 00000000..13706077 --- /dev/null +++ b/build/database/lite/install/trace_data.sql @@ -0,0 +1,34 @@ +-- ---------------------------- +-- Table structure for trace_data +-- ---------------------------- +DROP TABLE IF EXISTS "trace_data"; +CREATE TABLE "trace_data" ( + "id" integer NOT NULL, + "trace_id" text(16) NOT NULL, + "imsi" text(16), + "msisdn" text(16), + "src_addr" text(128), + "dst_addr" text(128), + "if_type" text(16), + "msg_type" integer, + "msg_direct" integer, + "msg_ne" text(16), + "msg_event" text(128), + "length" integer, + "timestamp" integer, + "raw_msg" text, + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table trace_data +-- ---------------------------- +CREATE INDEX "idx_task_id_time" +ON "trace_data" ( + "trace_id" ASC, + "timestamp" ASC +); + +-- ---------------------------- +-- Records of trace_data +-- ---------------------------- diff --git a/build/database/lite/install/trace_task.sql b/build/database/lite/install/trace_task.sql new file mode 100644 index 00000000..9a715d7b --- /dev/null +++ b/build/database/lite/install/trace_task.sql @@ -0,0 +1,26 @@ +-- ---------------------------- +-- Table structure for trace_task +-- ---------------------------- +DROP TABLE IF EXISTS "trace_task"; +CREATE TABLE "trace_task" ( + "id" integer NOT NULL, + "trace_id" text(16) NOT NULL, + "trace_type" text(2) NOT NULL, + "start_time" integer, + "end_time" integer, + "interfaces" text(255), + "imsi" text(16), + "msisdn" text(16), + "src_ip" text(128), + "dst_ip" text(128), + "create_by" text(50), + "create_time" integer, + "remark" text(500), + "ne_list" text(32) NOT NULL, + "notify_url" text(128) NOT NULL, + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Records of trace_task +-- ---------------------------- diff --git a/build/database/lite/install/trace_task_hlr.sql b/build/database/lite/install/trace_task_hlr.sql new file mode 100644 index 00000000..3ae465f1 --- /dev/null +++ b/build/database/lite/install/trace_task_hlr.sql @@ -0,0 +1,24 @@ +-- ---------------------------- +-- Table structure for trace_task_hlr +-- ---------------------------- +DROP TABLE IF EXISTS "trace_task_hlr"; +CREATE TABLE "trace_task_hlr" ( + "id" integer NOT NULL, + "trace_id" text(50) NOT NULL, + "imsi" text(16), + "msisdn" text(16), + "start_time" integer(20), + "end_time" integer(20), + "status" text(1), + "msg" text(255), + "remark" text(255), + "create_by" text(50), + "create_time" integer(20), + "update_by" text(50), + "update_time" integer(20), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Records of trace_task_hlr +-- ---------------------------- diff --git a/build/database/lite/install/udm_auth.sql b/build/database/lite/install/udm_auth.sql new file mode 100644 index 00000000..2f11e17f --- /dev/null +++ b/build/database/lite/install/udm_auth.sql @@ -0,0 +1,28 @@ +-- ---------------------------- +-- Table structure for udm_auth +-- ---------------------------- +DROP TABLE IF EXISTS "udm_auth"; +CREATE TABLE "udm_auth" ( + "id" integer NOT NULL, + "imsi" text(50) NOT NULL, + "ne_id" text(50), + "amf" text(50), + "status" text(50), + "ki" text(50), + "algo_index" text(50), + "opc" text(50), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table udm_auth +-- ---------------------------- +CREATE UNIQUE INDEX "uk_auth_imsi_ne" +ON "udm_auth" ( + "imsi" ASC, + "ne_id" ASC +); + +-- ---------------------------- +-- Records of udm_auth +-- ---------------------------- diff --git a/build/database/lite/install/udm_extend.sql b/build/database/lite/install/udm_extend.sql new file mode 100644 index 00000000..7bf2497f --- /dev/null +++ b/build/database/lite/install/udm_extend.sql @@ -0,0 +1,25 @@ +-- ---------------------------- +-- Table structure for udm_extend +-- ---------------------------- +DROP TABLE IF EXISTS "udm_extend"; +CREATE TABLE "udm_extend" ( + "id" integer NOT NULL, + "imsi" text(50) NOT NULL, + "msisdn" text(50), + "ne_id" text(50), + "remark" text(500), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table udm_extend +-- ---------------------------- +CREATE UNIQUE INDEX "imsi_ne" +ON "udm_extend" ( + "imsi" ASC, + "ne_id" ASC +); + +-- ---------------------------- +-- Records of udm_extend +-- ---------------------------- diff --git a/build/database/lite/install/udm_sub.sql b/build/database/lite/install/udm_sub.sql new file mode 100644 index 00000000..00e14ec8 --- /dev/null +++ b/build/database/lite/install/udm_sub.sql @@ -0,0 +1,51 @@ +-- ---------------------------- +-- Table structure for udm_sub +-- ---------------------------- +DROP TABLE IF EXISTS "udm_sub"; +CREATE TABLE "udm_sub" ( + "id" integer NOT NULL, + "imsi" text(50) NOT NULL, + "msisdn" text(50), + "ne_id" text(50), + "am_dat" text(1500), + "ambr" text(50), + "nssai" text(50), + "rat" text(50), + "arfb" text(50), + "sar" text(50), + "cn_type" text(50), + "rfsp_index" text(50), + "reg_timer" text(50), + "ue_usage_type" text(50), + "active_time" text(50), + "mico" text(50), + "odb_ps" text(50), + "group_id" text(50), + "eps_dat" text(1500), + "eps_flag" text(50), + "eps_odb" text(50), + "hplmn_odb" text(50), + "ard" text(50), + "epstpl" text(50), + "context_id" text(50), + "apn_mum" text(50), + "apn_context" text(50), + "static_ip" text(50), + "sm_data" text(1500), + "smf_sel" text(50), + "cag" text(50), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table udm_sub +-- ---------------------------- +CREATE UNIQUE INDEX "uk_sub_imsi_ne" +ON "udm_sub" ( + "imsi" ASC, + "ne_id" ASC +); + +-- ---------------------------- +-- Records of udm_sub +-- ---------------------------- diff --git a/build/database/lite/install/udm_voip.sql b/build/database/lite/install/udm_voip.sql new file mode 100644 index 00000000..6a3fdd67 --- /dev/null +++ b/build/database/lite/install/udm_voip.sql @@ -0,0 +1,24 @@ +-- ---------------------------- +-- Table structure for udm_voip +-- ---------------------------- +DROP TABLE IF EXISTS "udm_voip"; +CREATE TABLE "udm_voip" ( + "id" integer NOT NULL, + "ne_id" text(50), + "username" text(50), + "password" text(128), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table udm_voip +-- ---------------------------- +CREATE UNIQUE INDEX "uk_voip_user_ne" +ON "udm_voip" ( + "username" ASC, + "ne_id" ASC +); + +-- ---------------------------- +-- Records of udm_voip +-- ---------------------------- diff --git a/build/database/lite/install/udm_volte_ims.sql b/build/database/lite/install/udm_volte_ims.sql new file mode 100644 index 00000000..8946b2a6 --- /dev/null +++ b/build/database/lite/install/udm_volte_ims.sql @@ -0,0 +1,31 @@ +-- ---------------------------- +-- Table structure for udm_volte_ims +-- ---------------------------- +DROP TABLE IF EXISTS "udm_volte_ims"; +CREATE TABLE "udm_volte_ims" ( + "id" integer NOT NULL, + "imsi" text(50) NOT NULL, + "msisdn" text(50), + "ne_id" text(50), + "tag" text(50), + "vni" text(128), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table udm_volte_ims +-- ---------------------------- +CREATE INDEX "idx_volte_tag" +ON "udm_volte_ims" ( + "tag" ASC +); + +CREATE UNIQUE INDEX "uk_volte_imsi_ne" +ON "udm_volte_ims" ( + "imsi" ASC, + "msisdn" ASC, + "ne_id" ASC +); +-- ---------------------------- +-- Records of udm_volte_ims +-- ---------------------------- diff --git a/build/database/lite/install/ue_event.sql b/build/database/lite/install/ue_event.sql new file mode 100644 index 00000000..c1acd923 --- /dev/null +++ b/build/database/lite/install/ue_event.sql @@ -0,0 +1,28 @@ +-- ---------------------------- +-- Table structure for ue_event +-- ---------------------------- +DROP TABLE IF EXISTS "ue_event"; +CREATE TABLE "ue_event" ( + "id" integer NOT NULL, + "ne_type" text(32), + "ne_name" text(64), + "rm_uid" text(32), + "timestamp" integer(20), + "event_type" text(16), + "event_json" text, + "created_at" integer(20), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table ue_event +-- ---------------------------- +CREATE INDEX "idx_type_t" +ON "ue_event" ( + "event_type" ASC, + "timestamp" ASC +); + +-- ---------------------------- +-- Records of ue_event +-- ---------------------------- diff --git a/build/database/lite/install/ue_event_amf.sql b/build/database/lite/install/ue_event_amf.sql new file mode 100644 index 00000000..2d2aa44a --- /dev/null +++ b/build/database/lite/install/ue_event_amf.sql @@ -0,0 +1,28 @@ +-- ---------------------------- +-- Table structure for ue_event_amf +-- ---------------------------- +DROP TABLE IF EXISTS "ue_event_amf"; +CREATE TABLE "ue_event_amf" ( + "id" integer NOT NULL, + "ne_type" text(32), + "ne_name" text(64), + "rm_uid" text(32), + "timestamp" integer(20), + "event_type" text(16), + "event_json" text, + "created_at" integer(20), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table ue_event_amf +-- ---------------------------- +CREATE INDEX "idx_amf_type_t" +ON "ue_event_amf" ( + "event_type" ASC, + "timestamp" ASC +); + +-- ---------------------------- +-- Records of ue_event_amf +-- ---------------------------- diff --git a/build/database/lite/install/ue_event_mme.sql b/build/database/lite/install/ue_event_mme.sql new file mode 100644 index 00000000..f9cc13f5 --- /dev/null +++ b/build/database/lite/install/ue_event_mme.sql @@ -0,0 +1,30 @@ +-- ---------------------------- +-- Table structure for ue_event_mme +-- ---------------------------- +DROP TABLE IF EXISTS "ue_event_mme"; +CREATE TABLE "ue_event_mme" ( + "id" integer NOT NULL, + "ne_type" text(32), + "ne_name" text(64), + "rm_uid" text(32), + "timestamp" integer(20), + "event_type" text(16), + "event_json" text, + "created_at" integer(20), + PRIMARY KEY ("id") +); + +-- ---------------------------- +-- Indexes structure for table ue_event_mme +-- ---------------------------- +CREATE INDEX "idx_mme_type_t" +ON "ue_event_mme" ( + "event_type" ASC, + "timestamp" ASC +); + + +-- ---------------------------- +-- Records of ue_event_mme +-- ---------------------------- + diff --git a/tools/encode/sorted_test.yaml b/build/database/lite/install/zinstall.sql similarity index 100% rename from tools/encode/sorted_test.yaml rename to build/database/lite/install/zinstall.sql diff --git a/tools/encode/unsorted_test.yaml b/build/database/lite/upgrade/zupgrade.sql similarity index 100% rename from tools/encode/unsorted_test.yaml rename to build/database/lite/upgrade/zupgrade.sql diff --git a/database/common/alarm_define.sql b/build/database/std/common/alarm_define.sql similarity index 100% rename from database/common/alarm_define.sql rename to build/database/std/common/alarm_define.sql diff --git a/database/common/chart_graph.sql b/build/database/std/common/chart_graph.sql similarity index 100% rename from database/common/chart_graph.sql rename to build/database/std/common/chart_graph.sql diff --git a/database/common/cm_title.sql b/build/database/std/common/cm_title.sql similarity index 100% rename from database/common/cm_title.sql rename to build/database/std/common/cm_title.sql diff --git a/database/common/config.sql b/build/database/std/common/config.sql similarity index 100% rename from database/common/config.sql rename to build/database/std/common/config.sql diff --git a/database/common/group.sql b/build/database/std/common/group.sql similarity index 100% rename from database/common/group.sql rename to build/database/std/common/group.sql diff --git a/database/common/kpi_title.sql b/build/database/std/common/kpi_title.sql similarity index 99% rename from database/common/kpi_title.sql rename to build/database/std/common/kpi_title.sql index 786ccda0..8b2c739f 100644 --- a/database/common/kpi_title.sql +++ b/build/database/std/common/kpi_title.sql @@ -458,5 +458,8 @@ INSERT INTO `kpi_title` VALUES (433, 'HLR', 'HLR.A.178', NULL, 'C2G Boss受理 INSERT INTO `kpi_title` VALUES (434, 'HLR', 'HLR.A.179', NULL, 'C2G Boss受理失败返回repeat ISDN次数', 'BossServFailByRepIsdn'); INSERT INTO `kpi_title` VALUES (435, 'HLR', 'HLR.A.180', NULL, 'C2G Boss销户请求次数', 'DelUserBossReqNum'); INSERT INTO `kpi_title` VALUES (436, 'HLR', 'HLR.A.181', NULL, 'C2G Boss修改用户请求次数', 'ModUserBossReqNum'); +-- UDM融合AUSF +INSERT INTO `kpi_title` VALUES (437, 'UDM', 'AUSF.01', '{\"cn\": \"鉴权成功次数\", \"en\": \"Ausf.UeAuthAnsSucc\"}', '鉴权成功次数', 'Ausf.UeAuthAnsSucc'); +INSERT INTO `kpi_title` VALUES (438, 'UDM', 'AUSF.02', '{\"cn\": \"鉴权请求次数\", \"en\": \"Ausf.UeAuthReq\"}', '鉴权请求次数', 'Ausf.UeAuthReq'); SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/common/measure_title.sql b/build/database/std/common/measure_title.sql similarity index 100% rename from database/common/measure_title.sql rename to build/database/std/common/measure_title.sql diff --git a/database/common/mml_command.sql b/build/database/std/common/mml_command.sql similarity index 100% rename from database/common/mml_command.sql rename to build/database/std/common/mml_command.sql diff --git a/database/common/mml_http_map.sql b/build/database/std/common/mml_http_map.sql similarity index 100% rename from database/common/mml_http_map.sql rename to build/database/std/common/mml_http_map.sql diff --git a/database/common/mml_subscriber.sql b/build/database/std/common/mml_subscriber.sql similarity index 99% rename from database/common/mml_subscriber.sql rename to build/database/std/common/mml_subscriber.sql index f2b4a4dd..6778eae1 100644 --- a/database/common/mml_subscriber.sql +++ b/build/database/std/common/mml_subscriber.sql @@ -32,7 +32,7 @@ CREATE TABLE `mml_subscriber` ( `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 -) ENGINE = InnoDB AUTO_INCREMENT = 609 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; +) ENGINE = InnoDB AUTO_INCREMENT = 612 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of mml_subscriber diff --git a/database/common/mml_system.sql b/build/database/std/common/mml_system.sql similarity index 100% rename from database/common/mml_system.sql rename to build/database/std/common/mml_system.sql diff --git a/database/common/ne_config.sql b/build/database/std/common/ne_config.sql similarity index 100% rename from database/common/ne_config.sql rename to build/database/std/common/ne_config.sql diff --git a/database/common/pm_custom_title.sql b/build/database/std/common/pm_custom_title.sql similarity index 100% rename from database/common/pm_custom_title.sql rename to build/database/std/common/pm_custom_title.sql diff --git a/database/common/title_info.sql b/build/database/std/common/title_info.sql similarity index 100% rename from database/common/title_info.sql rename to build/database/std/common/title_info.sql diff --git a/database/common/trace_info.sql b/build/database/std/common/trace_info.sql similarity index 100% rename from database/common/trace_info.sql rename to build/database/std/common/trace_info.sql diff --git a/database/install/4a_log.sql b/build/database/std/install/4a_log.sql similarity index 100% rename from database/install/4a_log.sql rename to build/database/std/install/4a_log.sql diff --git a/database/install/alarm.sql b/build/database/std/install/alarm.sql similarity index 100% rename from database/install/alarm.sql rename to build/database/std/install/alarm.sql diff --git a/database/install/alarm_event.sql b/build/database/std/install/alarm_event.sql similarity index 100% rename from database/install/alarm_event.sql rename to build/database/std/install/alarm_event.sql diff --git a/database/install/alarm_forward_log.sql b/build/database/std/install/alarm_forward_log.sql similarity index 100% rename from database/install/alarm_forward_log.sql rename to build/database/std/install/alarm_forward_log.sql diff --git a/database/install/alarm_log.sql b/build/database/std/install/alarm_log.sql similarity index 100% rename from database/install/alarm_log.sql rename to build/database/std/install/alarm_log.sql diff --git a/database/install/alarm_relation.sql b/build/database/std/install/alarm_relation.sql similarity index 100% rename from database/install/alarm_relation.sql rename to build/database/std/install/alarm_relation.sql diff --git a/database/install/alarm_subscribe.sql b/build/database/std/install/alarm_subscribe.sql similarity index 100% rename from database/install/alarm_subscribe.sql rename to build/database/std/install/alarm_subscribe.sql diff --git a/database/install/cdr_event.sql b/build/database/std/install/cdr_event.sql similarity index 100% rename from database/install/cdr_event.sql rename to build/database/std/install/cdr_event.sql diff --git a/database/install/cdr_event_ims.sql b/build/database/std/install/cdr_event_ims.sql similarity index 100% rename from database/install/cdr_event_ims.sql rename to build/database/std/install/cdr_event_ims.sql diff --git a/database/install/cdr_event_sgwc.sql b/build/database/std/install/cdr_event_sgwc.sql similarity index 100% rename from database/install/cdr_event_sgwc.sql rename to build/database/std/install/cdr_event_sgwc.sql diff --git a/database/install/cdr_event_smf.sql b/build/database/std/install/cdr_event_smf.sql similarity index 100% rename from database/install/cdr_event_smf.sql rename to build/database/std/install/cdr_event_smf.sql diff --git a/database/install/cdr_event_smsc.sql b/build/database/std/install/cdr_event_smsc.sql similarity index 100% rename from database/install/cdr_event_smsc.sql rename to build/database/std/install/cdr_event_smsc.sql diff --git a/database/install/cert_info.sql b/build/database/std/install/cert_info.sql similarity index 100% rename from database/install/cert_info.sql rename to build/database/std/install/cert_info.sql diff --git a/database/install/event_log.sql b/build/database/std/install/event_log.sql similarity index 100% rename from database/install/event_log.sql rename to build/database/std/install/event_log.sql diff --git a/database/install/kpi_c_report.sql b/build/database/std/install/kpi_c_report.sql similarity index 100% rename from database/install/kpi_c_report.sql rename to build/database/std/install/kpi_c_report.sql diff --git a/build/database/std/install/kpi_c_report_amf.sql b/build/database/std/install/kpi_c_report_amf.sql new file mode 100644 index 00000000..0372832c --- /dev/null +++ b/build/database/std/install/kpi_c_report_amf.sql @@ -0,0 +1,24 @@ +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for kpi_c_report_amf +-- ---------------------------- +DROP TABLE IF EXISTS `kpi_c_report_amf`; +CREATE TABLE `kpi_c_report_amf` ( + `id` int NOT NULL AUTO_INCREMENT, + `ne_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `ne_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `rm_uid` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `date` varchar(10) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'Date of the report yyyy-mm-dd hh:mi:ss', + `start_time` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'Start time of the report hh:mi:ss', + `end_time` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'End time of the report hh:mi:ss', + `index` int NOT NULL COMMENT 'Index of the report', + `granularity` int DEFAULT '60' COMMENT 'Time granualarity: 5/10/.../60/300 (second)', + `kpi_values` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT 'KPI values JSON String', + `created_at` bigint DEFAULT '0' COMMENT 'Creation time 接收到的timestamp秒级存储毫秒时间戳', + PRIMARY KEY (`id`) USING BTREE, + KEY `idx_c_amf_uid_at` (`rm_uid`,`created_at`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='KPI_自定义指标数据_AMF'; + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/build/database/std/install/kpi_c_report_ims.sql b/build/database/std/install/kpi_c_report_ims.sql new file mode 100644 index 00000000..4280d221 --- /dev/null +++ b/build/database/std/install/kpi_c_report_ims.sql @@ -0,0 +1,24 @@ +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for kpi_c_report_ims +-- ---------------------------- +DROP TABLE IF EXISTS `kpi_c_report_ims`; +CREATE TABLE `kpi_c_report_ims` ( + `id` int NOT NULL AUTO_INCREMENT, + `ne_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `ne_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `rm_uid` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `date` varchar(10) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'Date of the report yyyy-mm-dd hh:mi:ss', + `start_time` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'Start time of the report hh:mi:ss', + `end_time` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'End time of the report hh:mi:ss', + `index` int NOT NULL COMMENT 'Index of the report', + `granularity` int DEFAULT '60' COMMENT 'Time granualarity: 5/10/.../60/300 (second)', + `kpi_values` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT 'KPI values JSON String', + `created_at` bigint DEFAULT '0' COMMENT 'Creation time 接收到的timestamp秒级存储毫秒时间戳', + PRIMARY KEY (`id`) USING BTREE, + KEY `idx_c_ims_uid_at` (`rm_uid`,`created_at`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='KPI_自定义指标数据_IMS'; + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/build/database/std/install/kpi_c_report_mme.sql b/build/database/std/install/kpi_c_report_mme.sql new file mode 100644 index 00000000..0e9fdb68 --- /dev/null +++ b/build/database/std/install/kpi_c_report_mme.sql @@ -0,0 +1,24 @@ +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for kpi_c_report_mme +-- ---------------------------- +DROP TABLE IF EXISTS `kpi_c_report_mme`; +CREATE TABLE `kpi_c_report_mme` ( + `id` int NOT NULL AUTO_INCREMENT, + `ne_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `ne_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `rm_uid` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `date` varchar(10) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'Date of the report yyyy-mm-dd hh:mi:ss', + `start_time` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'Start time of the report hh:mi:ss', + `end_time` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'End time of the report hh:mi:ss', + `index` int NOT NULL COMMENT 'Index of the report', + `granularity` int DEFAULT '60' COMMENT 'Time granualarity: 5/10/.../60/300 (second)', + `kpi_values` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT 'KPI values JSON String', + `created_at` bigint DEFAULT '0' COMMENT 'Creation time 接收到的timestamp秒级存储毫秒时间戳', + PRIMARY KEY (`id`) USING BTREE, + KEY `idx_c_mme_uid_at` (`rm_uid`,`created_at`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='KPI_自定义指标数据_MME'; + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/build/database/std/install/kpi_c_report_smf.sql b/build/database/std/install/kpi_c_report_smf.sql new file mode 100644 index 00000000..4d811013 --- /dev/null +++ b/build/database/std/install/kpi_c_report_smf.sql @@ -0,0 +1,24 @@ +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for kpi_c_report_smf +-- ---------------------------- +DROP TABLE IF EXISTS `kpi_c_report_smf`; +CREATE TABLE `kpi_c_report_smf` ( + `id` int NOT NULL AUTO_INCREMENT, + `ne_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `ne_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `rm_uid` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `date` varchar(10) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'Date of the report yyyy-mm-dd hh:mi:ss', + `start_time` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'Start time of the report hh:mi:ss', + `end_time` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'End time of the report hh:mi:ss', + `index` int NOT NULL COMMENT 'Index of the report', + `granularity` int DEFAULT '60' COMMENT 'Time granualarity: 5/10/.../60/300 (second)', + `kpi_values` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT 'KPI values JSON String', + `created_at` bigint DEFAULT '0' COMMENT 'Creation time 接收到的timestamp秒级存储毫秒时间戳', + PRIMARY KEY (`id`) USING BTREE, + KEY `idx_c_smf_uid_at` (`rm_uid`,`created_at`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='KPI_自定义指标数据_SMF'; + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/build/database/std/install/kpi_c_report_udm.sql b/build/database/std/install/kpi_c_report_udm.sql new file mode 100644 index 00000000..676ad803 --- /dev/null +++ b/build/database/std/install/kpi_c_report_udm.sql @@ -0,0 +1,24 @@ +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for kpi_c_report_udm +-- ---------------------------- +DROP TABLE IF EXISTS `kpi_c_report_udm`; +CREATE TABLE `kpi_c_report_udm` ( + `id` int NOT NULL AUTO_INCREMENT, + `ne_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `ne_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `rm_uid` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `date` varchar(10) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'Date of the report yyyy-mm-dd hh:mi:ss', + `start_time` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'Start time of the report hh:mi:ss', + `end_time` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'End time of the report hh:mi:ss', + `index` int NOT NULL COMMENT 'Index of the report', + `granularity` int DEFAULT '60' COMMENT 'Time granualarity: 5/10/.../60/300 (second)', + `kpi_values` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT 'KPI values JSON String', + `created_at` bigint DEFAULT '0' COMMENT 'Creation time 接收到的timestamp秒级存储毫秒时间戳', + PRIMARY KEY (`id`) USING BTREE, + KEY `idx_c_udm_uid_at` (`rm_uid`,`created_at`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='KPI_自定义指标数据_UDM'; + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/build/database/std/install/kpi_c_report_upf.sql b/build/database/std/install/kpi_c_report_upf.sql new file mode 100644 index 00000000..1a2c4682 --- /dev/null +++ b/build/database/std/install/kpi_c_report_upf.sql @@ -0,0 +1,24 @@ +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for kpi_c_report_upf +-- ---------------------------- +DROP TABLE IF EXISTS `kpi_c_report_upf`; +CREATE TABLE `kpi_c_report_upf` ( + `id` int NOT NULL AUTO_INCREMENT, + `ne_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `ne_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `rm_uid` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `date` varchar(10) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'Date of the report yyyy-mm-dd hh:mi:ss', + `start_time` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'Start time of the report hh:mi:ss', + `end_time` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'End time of the report hh:mi:ss', + `index` int NOT NULL COMMENT 'Index of the report', + `granularity` int DEFAULT '60' COMMENT 'Time granualarity: 5/10/.../60/300 (second)', + `kpi_values` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT 'KPI values JSON String', + `created_at` bigint DEFAULT '0' COMMENT 'Creation time 接收到的timestamp秒级存储毫秒时间戳', + PRIMARY KEY (`id`) USING BTREE, + KEY `idx_c_upf_uid_at` (`rm_uid`,`created_at`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='KPI_自定义指标数据_UPF'; + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/install/kpi_c_title.sql b/build/database/std/install/kpi_c_title.sql similarity index 97% rename from database/install/kpi_c_title.sql rename to build/database/std/install/kpi_c_title.sql index 18932e9d..d93c6031 100644 --- a/database/install/kpi_c_title.sql +++ b/build/database/std/install/kpi_c_title.sql @@ -27,7 +27,7 @@ INSERT INTO `kpi_c_title` VALUES (4, 'AMF', 'AMF.C.04', '5G Register Subscriber' INSERT INTO `kpi_c_title` VALUES (5, 'SMF', 'SMF.C.01', 'SA_MeanPduSession', '\'SMF.01\'', ' ', '', '1', 'admin', 1739362260083); INSERT INTO `kpi_c_title` VALUES (6, 'SMF', 'SMF.C.02', 'PDU Session Establishment Success Rate', '(\'SMF.02\'/\'SMF.03\')*100', '%', '', '1', 'admin', 1739362260083); INSERT INTO `kpi_c_title` VALUES (7, 'SMF', 'SMF.C.03', 'IMS Session Establishment Success Rate', '(\'SMF.04\'/\'SMF.05\')*100', '%', '', '1', 'admin', 1739362260083); -INSERT INTO `kpi_c_title` VALUES (8, 'MME', 'MME.C.01', 'Attach Success Rate ', '(\'MME.A.02\'/\'MME.A.01\')*100', '%', '', '1', 'admin', 1739362260083); +INSERT INTO `kpi_c_title` VALUES (8, 'MME', 'MME.C.01', 'Attach Success Rate ', '(\'MME.A.05\'/\'MME.A.04\')*100', '%', '', '1', 'admin', 1739362260083); INSERT INTO `kpi_c_title` VALUES (9, 'UPF', 'UPF.C.01', 'PFCP Establish Success Rate ', '(\'UPF.01\'/\'UPF.02\')*100', '%', '', '1', 'admin', 1739362260083); INSERT INTO `kpi_c_title` VALUES (10, 'UPF', 'UPF.C.02', 'N6_Uplink_Throughout', '(\'UPF.03\')*8/5/1000/1000', 'Mbps', '', '1', 'admin', 1739362260083); INSERT INTO `kpi_c_title` VALUES (11, 'UPF', 'UPF.C.03', 'N3_Uplink_Throughout', '(\'UPF.06\')*8/5/1000/1000', 'Mbps', '', '1', 'admin', 1739362260083); @@ -38,7 +38,7 @@ INSERT INTO `kpi_c_title` VALUES (15, 'IMS', 'IMS.C.02', 'MO_Success_Rate', '(\' INSERT INTO `kpi_c_title` VALUES (16, 'IMS', 'IMS.C.03', 'MT_Success_Rate', '(\'SCSCF.07\'/\'SCSCF.08\')*100', '%', '', '1', 'admin', 1739362260083); INSERT INTO `kpi_c_title` VALUES (17, '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 (18, 'SMF', 'SMF.C.06', 'IMS_DefaultBear_Success_Rate ', '(\'SMF.13\'/\'SMF.14\')*100', '%', '', '1', 'admin', 1739362260083); -INSERT INTO `kpi_c_title` VALUES (19, 'SMF', 'SMF.C.07', 'Bear_Success_Rate_new', '((\'SMF.09\'+\'SMF.11\')/(\'SMF.10\'+\'SMF.12\') )*100', '%', '', '1', 'admin', 1739362260083); +INSERT INTO `kpi_c_title` VALUES (19, 'SMF', 'SMF.C.07', 'Bear_Success_Rate_new', '((\'SMF.09\'+\'SMF.11\')/(\'SMF.10\'+\'SMF.12\') )*100', '%', '', '2', 'admin', 1739362260083); INSERT INTO `kpi_c_title` VALUES (22, 'UPF', 'UPF.C.06', 'N3_Downlink_Throughout', '(\'UPF.05\')*8/5/1000/1000', 'Mbps', '', '1', 'admin', 1739362260083); INSERT INTO `kpi_c_title` VALUES (23, 'UPF', 'UPF.C.07', 'N6_Downlink_Throughout', '(\'UPF.04\')*8/5/1000/1000', 'Mbps', '', '1', 'admin', 1739362260083); diff --git a/database/install/kpi_report.sql b/build/database/std/install/kpi_report.sql similarity index 100% rename from database/install/kpi_report.sql rename to build/database/std/install/kpi_report.sql diff --git a/build/database/std/install/kpi_report_amf.sql b/build/database/std/install/kpi_report_amf.sql new file mode 100644 index 00000000..a73c8804 --- /dev/null +++ b/build/database/std/install/kpi_report_amf.sql @@ -0,0 +1,24 @@ +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for kpi_report_amf +-- ---------------------------- +DROP TABLE IF EXISTS `kpi_report_amf`; +CREATE TABLE `kpi_report_amf` ( + `id` int NOT NULL AUTO_INCREMENT, + `ne_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `ne_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `rm_uid` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `date` varchar(10) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'Date of the report yyyy-mm-dd hh:mi:ss', + `start_time` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'Start time of the report hh:mi:ss', + `end_time` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'End time of the report hh:mi:ss', + `index` int NOT NULL COMMENT 'Index of the report', + `granularity` int DEFAULT '60' COMMENT 'Time granualarity: 5/10/.../60/300 (second)', + `kpi_values` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT 'KPI values JSON String', + `created_at` bigint DEFAULT '0' COMMENT 'Creation time 接收到的timestamp秒级存储毫秒时间戳', + PRIMARY KEY (`id`) USING BTREE, + KEY `idx_amf_uid_at` (`rm_uid`,`created_at`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='KPI_指标数据_AMF'; + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/build/database/std/install/kpi_report_ausf.sql b/build/database/std/install/kpi_report_ausf.sql new file mode 100644 index 00000000..9013115c --- /dev/null +++ b/build/database/std/install/kpi_report_ausf.sql @@ -0,0 +1,24 @@ +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for kpi_report_ausf +-- ---------------------------- +DROP TABLE IF EXISTS `kpi_report_ausf`; +CREATE TABLE `kpi_report_ausf` ( + `id` int NOT NULL AUTO_INCREMENT, + `ne_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `ne_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `rm_uid` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `date` varchar(10) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'Date of the report yyyy-mm-dd hh:mi:ss', + `start_time` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'Start time of the report hh:mi:ss', + `end_time` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'End time of the report hh:mi:ss', + `index` int NOT NULL COMMENT 'Index of the report', + `granularity` int DEFAULT '60' COMMENT 'Time granualarity: 5/10/.../60/300 (second)', + `kpi_values` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT 'KPI values JSON String', + `created_at` bigint DEFAULT '0' COMMENT 'Creation time 接收到的timestamp秒级存储毫秒时间戳', + PRIMARY KEY (`id`) USING BTREE, + KEY `idx_ausf_uid_at` (`rm_uid`,`created_at`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='KPI_指标数据_AUSF'; + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/build/database/std/install/kpi_report_cbc.sql b/build/database/std/install/kpi_report_cbc.sql new file mode 100644 index 00000000..5faac6cf --- /dev/null +++ b/build/database/std/install/kpi_report_cbc.sql @@ -0,0 +1,24 @@ +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for kpi_report_cbc +-- ---------------------------- +DROP TABLE IF EXISTS `kpi_report_cbc`; +CREATE TABLE `kpi_report_cbc` ( + `id` int NOT NULL AUTO_INCREMENT, + `ne_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `ne_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `rm_uid` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `date` varchar(10) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'Date of the report yyyy-mm-dd hh:mi:ss', + `start_time` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'Start time of the report hh:mi:ss', + `end_time` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'End time of the report hh:mi:ss', + `index` int NOT NULL COMMENT 'Index of the report', + `granularity` int DEFAULT '60' COMMENT 'Time granualarity: 5/10/.../60/300 (second)', + `kpi_values` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT 'KPI values JSON String', + `created_at` bigint DEFAULT '0' COMMENT 'Creation time 接收到的timestamp秒级存储毫秒时间戳', + PRIMARY KEY (`id`) USING BTREE, + KEY `idx_cbc_uid_at` (`rm_uid`,`created_at`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='KPI_指标数据_CBC'; + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/build/database/std/install/kpi_report_hlr.sql b/build/database/std/install/kpi_report_hlr.sql new file mode 100644 index 00000000..48e101e0 --- /dev/null +++ b/build/database/std/install/kpi_report_hlr.sql @@ -0,0 +1,24 @@ +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for kpi_report_hlr +-- ---------------------------- +DROP TABLE IF EXISTS `kpi_report_hlr`; +CREATE TABLE `kpi_report_hlr` ( + `id` int NOT NULL AUTO_INCREMENT, + `ne_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `ne_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `rm_uid` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `date` varchar(10) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'Date of the report yyyy-mm-dd hh:mi:ss', + `start_time` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'Start time of the report hh:mi:ss', + `end_time` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'End time of the report hh:mi:ss', + `index` int NOT NULL COMMENT 'Index of the report', + `granularity` int DEFAULT '60' COMMENT 'Time granualarity: 5/10/.../60/300 (second)', + `kpi_values` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT 'KPI values JSON String', + `created_at` bigint DEFAULT '0' COMMENT 'Creation time 接收到的timestamp秒级存储毫秒时间戳', + PRIMARY KEY (`id`) USING BTREE, + KEY `idx_hlr_uid_at` (`rm_uid`,`created_at`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='KPI_指标数据_HLR'; + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/build/database/std/install/kpi_report_ims.sql b/build/database/std/install/kpi_report_ims.sql new file mode 100644 index 00000000..5ee4b15f --- /dev/null +++ b/build/database/std/install/kpi_report_ims.sql @@ -0,0 +1,24 @@ +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for kpi_report_ims +-- ---------------------------- +DROP TABLE IF EXISTS `kpi_report_ims`; +CREATE TABLE `kpi_report_ims` ( + `id` int NOT NULL AUTO_INCREMENT, + `ne_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `ne_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `rm_uid` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `date` varchar(10) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'Date of the report yyyy-mm-dd hh:mi:ss', + `start_time` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'Start time of the report hh:mi:ss', + `end_time` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'End time of the report hh:mi:ss', + `index` int NOT NULL COMMENT 'Index of the report', + `granularity` int DEFAULT '60' COMMENT 'Time granualarity: 5/10/.../60/300 (second)', + `kpi_values` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT 'KPI values JSON String', + `created_at` bigint DEFAULT '0' COMMENT 'Creation time 接收到的timestamp秒级存储毫秒时间戳', + PRIMARY KEY (`id`) USING BTREE, + KEY `idx_ims_uid_at` (`rm_uid`,`created_at`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='KPI_指标数据_IMS'; + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/build/database/std/install/kpi_report_mme.sql b/build/database/std/install/kpi_report_mme.sql new file mode 100644 index 00000000..02024561 --- /dev/null +++ b/build/database/std/install/kpi_report_mme.sql @@ -0,0 +1,24 @@ +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for kpi_report_mme +-- ---------------------------- +DROP TABLE IF EXISTS `kpi_report_mme`; +CREATE TABLE `kpi_report_mme` ( + `id` int NOT NULL AUTO_INCREMENT, + `ne_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `ne_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `rm_uid` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `date` varchar(10) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'Date of the report yyyy-mm-dd hh:mi:ss', + `start_time` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'Start time of the report hh:mi:ss', + `end_time` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'End time of the report hh:mi:ss', + `index` int NOT NULL COMMENT 'Index of the report', + `granularity` int DEFAULT '60' COMMENT 'Time granualarity: 5/10/.../60/300 (second)', + `kpi_values` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT 'KPI values JSON String', + `created_at` bigint DEFAULT '0' COMMENT 'Creation time 接收到的timestamp秒级存储毫秒时间戳', + PRIMARY KEY (`id`) USING BTREE, + KEY `idx_mme_uid_at` (`rm_uid`,`created_at`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='KPI_指标数据_MME'; + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/build/database/std/install/kpi_report_mocngw.sql b/build/database/std/install/kpi_report_mocngw.sql new file mode 100644 index 00000000..8adbbc71 --- /dev/null +++ b/build/database/std/install/kpi_report_mocngw.sql @@ -0,0 +1,24 @@ +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for kpi_report_mocngw +-- ---------------------------- +DROP TABLE IF EXISTS `kpi_report_mocngw`; +CREATE TABLE `kpi_report_mocngw` ( + `id` int NOT NULL AUTO_INCREMENT, + `ne_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `ne_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `rm_uid` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `date` varchar(10) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'Date of the report yyyy-mm-dd hh:mi:ss', + `start_time` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'Start time of the report hh:mi:ss', + `end_time` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'End time of the report hh:mi:ss', + `index` int NOT NULL COMMENT 'Index of the report', + `granularity` int DEFAULT '60' COMMENT 'Time granualarity: 5/10/.../60/300 (second)', + `kpi_values` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT 'KPI values JSON String', + `created_at` bigint DEFAULT '0' COMMENT 'Creation time 接收到的timestamp秒级存储毫秒时间戳', + PRIMARY KEY (`id`) USING BTREE, + KEY `idx_mocngw_uid_at` (`rm_uid`,`created_at`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='KPI_指标数据_MOCNGW'; + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/build/database/std/install/kpi_report_nssf.sql b/build/database/std/install/kpi_report_nssf.sql new file mode 100644 index 00000000..c0884abd --- /dev/null +++ b/build/database/std/install/kpi_report_nssf.sql @@ -0,0 +1,24 @@ +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for kpi_report_nssf +-- ---------------------------- +DROP TABLE IF EXISTS `kpi_report_nssf`; +CREATE TABLE `kpi_report_nssf` ( + `id` int NOT NULL AUTO_INCREMENT, + `ne_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `ne_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `rm_uid` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `date` varchar(10) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'Date of the report yyyy-mm-dd hh:mi:ss', + `start_time` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'Start time of the report hh:mi:ss', + `end_time` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'End time of the report hh:mi:ss', + `index` int NOT NULL COMMENT 'Index of the report', + `granularity` int DEFAULT '60' COMMENT 'Time granualarity: 5/10/.../60/300 (second)', + `kpi_values` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT 'KPI values JSON String', + `created_at` bigint DEFAULT '0' COMMENT 'Creation time 接收到的timestamp秒级存储毫秒时间戳', + PRIMARY KEY (`id`) USING BTREE, + KEY `idx_nssf_uid_at` (`rm_uid`,`created_at`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='KPI_指标数据_NSSF'; + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/build/database/std/install/kpi_report_pcf.sql b/build/database/std/install/kpi_report_pcf.sql new file mode 100644 index 00000000..d67e8c00 --- /dev/null +++ b/build/database/std/install/kpi_report_pcf.sql @@ -0,0 +1,24 @@ +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for kpi_report_pcf +-- ---------------------------- +DROP TABLE IF EXISTS `kpi_report_pcf`; +CREATE TABLE `kpi_report_pcf` ( + `id` int NOT NULL AUTO_INCREMENT, + `ne_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `ne_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `rm_uid` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `date` varchar(10) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'Date of the report yyyy-mm-dd hh:mi:ss', + `start_time` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'Start time of the report hh:mi:ss', + `end_time` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'End time of the report hh:mi:ss', + `index` int NOT NULL COMMENT 'Index of the report', + `granularity` int DEFAULT '60' COMMENT 'Time granualarity: 5/10/.../60/300 (second)', + `kpi_values` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT 'KPI values JSON String', + `created_at` bigint DEFAULT '0' COMMENT 'Creation time 接收到的timestamp秒级存储毫秒时间戳', + PRIMARY KEY (`id`) USING BTREE, + KEY `idx_pcf_uid_at` (`rm_uid`,`created_at`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='KPI_指标数据_PCF'; + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/build/database/std/install/kpi_report_smf.sql b/build/database/std/install/kpi_report_smf.sql new file mode 100644 index 00000000..6f2f3fbe --- /dev/null +++ b/build/database/std/install/kpi_report_smf.sql @@ -0,0 +1,24 @@ +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for kpi_report_smf +-- ---------------------------- +DROP TABLE IF EXISTS `kpi_report_smf`; +CREATE TABLE `kpi_report_smf` ( + `id` int NOT NULL AUTO_INCREMENT, + `ne_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `ne_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `rm_uid` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `date` varchar(10) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'Date of the report yyyy-mm-dd hh:mi:ss', + `start_time` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'Start time of the report hh:mi:ss', + `end_time` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'End time of the report hh:mi:ss', + `index` int NOT NULL COMMENT 'Index of the report', + `granularity` int DEFAULT '60' COMMENT 'Time granualarity: 5/10/.../60/300 (second)', + `kpi_values` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT 'KPI values JSON String', + `created_at` bigint DEFAULT '0' COMMENT 'Creation time 接收到的timestamp秒级存储毫秒时间戳', + PRIMARY KEY (`id`) USING BTREE, + KEY `idx_smf_uid_at` (`rm_uid`,`created_at`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='KPI_指标数据_SMF'; + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/build/database/std/install/kpi_report_smsc.sql b/build/database/std/install/kpi_report_smsc.sql new file mode 100644 index 00000000..8f07e154 --- /dev/null +++ b/build/database/std/install/kpi_report_smsc.sql @@ -0,0 +1,24 @@ +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for kpi_report_smsc +-- ---------------------------- +DROP TABLE IF EXISTS `kpi_report_smsc`; +CREATE TABLE `kpi_report_smsc` ( + `id` int NOT NULL AUTO_INCREMENT, + `ne_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `ne_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `rm_uid` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `date` varchar(10) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'Date of the report yyyy-mm-dd hh:mi:ss', + `start_time` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'Start time of the report hh:mi:ss', + `end_time` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'End time of the report hh:mi:ss', + `index` int NOT NULL COMMENT 'Index of the report', + `granularity` int DEFAULT '60' COMMENT 'Time granualarity: 5/10/.../60/300 (second)', + `kpi_values` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT 'KPI values JSON String', + `created_at` bigint DEFAULT '0' COMMENT 'Creation time 接收到的timestamp秒级存储毫秒时间戳', + PRIMARY KEY (`id`) USING BTREE, + KEY `idx_smsc_uid_at` (`rm_uid`,`created_at`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='KPI_指标数据_SMSC'; + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/build/database/std/install/kpi_report_udm.sql b/build/database/std/install/kpi_report_udm.sql new file mode 100644 index 00000000..5dbc1cd1 --- /dev/null +++ b/build/database/std/install/kpi_report_udm.sql @@ -0,0 +1,24 @@ +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for kpi_report_udm +-- ---------------------------- +DROP TABLE IF EXISTS `kpi_report_udm`; +CREATE TABLE `kpi_report_udm` ( + `id` int NOT NULL AUTO_INCREMENT, + `ne_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `ne_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `rm_uid` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `date` varchar(10) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'Date of the report yyyy-mm-dd hh:mi:ss', + `start_time` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'Start time of the report hh:mi:ss', + `end_time` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'End time of the report hh:mi:ss', + `index` int NOT NULL COMMENT 'Index of the report', + `granularity` int DEFAULT '60' COMMENT 'Time granualarity: 5/10/.../60/300 (second)', + `kpi_values` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT 'KPI values JSON String', + `created_at` bigint DEFAULT '0' COMMENT 'Creation time 接收到的timestamp秒级存储毫秒时间戳', + PRIMARY KEY (`id`) USING BTREE, + KEY `idx_udm_uid_at` (`rm_uid`,`created_at`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='KPI_指标数据_UDM'; + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/build/database/std/install/kpi_report_upf.sql b/build/database/std/install/kpi_report_upf.sql new file mode 100644 index 00000000..28361e26 --- /dev/null +++ b/build/database/std/install/kpi_report_upf.sql @@ -0,0 +1,24 @@ +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for kpi_report_upf +-- ---------------------------- +DROP TABLE IF EXISTS `kpi_report_upf`; +CREATE TABLE `kpi_report_upf` ( + `id` int NOT NULL AUTO_INCREMENT, + `ne_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `ne_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `rm_uid` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `date` varchar(10) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'Date of the report yyyy-mm-dd hh:mi:ss', + `start_time` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'Start time of the report hh:mi:ss', + `end_time` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'End time of the report hh:mi:ss', + `index` int NOT NULL COMMENT 'Index of the report', + `granularity` int DEFAULT '60' COMMENT 'Time granualarity: 5/10/.../60/300 (second)', + `kpi_values` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT 'KPI values JSON String', + `created_at` bigint DEFAULT '0' COMMENT 'Creation time 接收到的timestamp秒级存储毫秒时间戳', + PRIMARY KEY (`id`) USING BTREE, + KEY `idx_upf_uid_at` (`rm_uid`,`created_at`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='KPI_指标数据_UPF'; + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/install/measure_data.sql b/build/database/std/install/measure_data.sql similarity index 100% rename from database/install/measure_data.sql rename to build/database/std/install/measure_data.sql diff --git a/database/install/measure_task.sql b/build/database/std/install/measure_task.sql similarity index 100% rename from database/install/measure_task.sql rename to build/database/std/install/measure_task.sql diff --git a/database/install/measure_threshold.sql b/build/database/std/install/measure_threshold.sql similarity index 100% rename from database/install/measure_threshold.sql rename to build/database/std/install/measure_threshold.sql diff --git a/database/install/mml_log.sql b/build/database/std/install/mml_log.sql similarity index 100% rename from database/install/mml_log.sql rename to build/database/std/install/mml_log.sql diff --git a/database/install/monitor_base.sql b/build/database/std/install/monitor_base.sql similarity index 100% rename from database/install/monitor_base.sql rename to build/database/std/install/monitor_base.sql diff --git a/database/install/monitor_io.sql b/build/database/std/install/monitor_io.sql similarity index 100% rename from database/install/monitor_io.sql rename to build/database/std/install/monitor_io.sql diff --git a/database/install/monitor_network.sql b/build/database/std/install/monitor_network.sql similarity index 100% rename from database/install/monitor_network.sql rename to build/database/std/install/monitor_network.sql diff --git a/database/install/nb_state.sql b/build/database/std/install/nb_state.sql similarity index 100% rename from database/install/nb_state.sql rename to build/database/std/install/nb_state.sql diff --git a/database/install/nbi_alarm_log.sql b/build/database/std/install/nbi_alarm_log.sql similarity index 100% rename from database/install/nbi_alarm_log.sql rename to build/database/std/install/nbi_alarm_log.sql diff --git a/database/install/nbi_cm.sql b/build/database/std/install/nbi_cm.sql similarity index 100% rename from database/install/nbi_cm.sql rename to build/database/std/install/nbi_cm.sql diff --git a/database/install/nbi_operation_log.sql b/build/database/std/install/nbi_operation_log.sql similarity index 100% rename from database/install/nbi_operation_log.sql rename to build/database/std/install/nbi_operation_log.sql diff --git a/database/install/nbi_pm.sql b/build/database/std/install/nbi_pm.sql similarity index 100% rename from database/install/nbi_pm.sql rename to build/database/std/install/nbi_pm.sql diff --git a/database/install/nbi_secure_log.sql b/build/database/std/install/nbi_secure_log.sql similarity index 100% rename from database/install/nbi_secure_log.sql rename to build/database/std/install/nbi_secure_log.sql diff --git a/database/install/ne_check.sql b/build/database/std/install/ne_check.sql similarity index 100% rename from database/install/ne_check.sql rename to build/database/std/install/ne_check.sql diff --git a/database/install/ne_config_backup.sql b/build/database/std/install/ne_config_backup.sql similarity index 100% rename from database/install/ne_config_backup.sql rename to build/database/std/install/ne_config_backup.sql diff --git a/database/install/ne_host.sql b/build/database/std/install/ne_host.sql similarity index 99% rename from database/install/ne_host.sql rename to build/database/std/install/ne_host.sql index cfa6e344..2ebb0589 100644 --- a/database/install/ne_host.sql +++ b/build/database/std/install/ne_host.sql @@ -29,7 +29,7 @@ CREATE TABLE `ne_host` ( UNIQUE KEY `uk_type_group_title` (`host_type`,`group_id`,`title`) USING BTREE COMMENT '同组内名称唯一' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='网元_主机表'; --- 初始数据对应网元 +-- 初始网元数据 INSERT INTO `ne_host` VALUES (1, 'ssh', '1', 'OMC_001_27149', '127.0.0.1', 27149, 'new_user', '0', 't7sKsIsdh7dXKs0ErZRtGIZGRIjrFz6tJGfZGJS2h6E=', '', '', '', '', 'system', 1729063407329, '', 0); INSERT INTO `ne_host` VALUES (2, 'telnet', '1', 'OMC_001_4100', '127.0.0.10', 4100, 'admin', '0', 'NUBonCin4GZgl7o12YjeClE8ToQmYp9KWdhMjSNxc2M=', '', '', '', '', 'system', 1729063407329, '', 0); INSERT INTO `ne_host` VALUES (3, 'ssh', '1', 'IMS_001_27149', '127.0.0.1', 27149, 'new_user', '0', 't7sKsIsdh7dXKs0ErZRtGIZGRIjrFz6tJGfZGJS2h6E=', '', '', '', '', 'system', 1729063407329, '', 0); diff --git a/database/install/ne_host_cmd.sql b/build/database/std/install/ne_host_cmd.sql similarity index 100% rename from database/install/ne_host_cmd.sql rename to build/database/std/install/ne_host_cmd.sql diff --git a/database/install/ne_info.sql b/build/database/std/install/ne_info.sql similarity index 99% rename from database/install/ne_info.sql rename to build/database/std/install/ne_info.sql index 8f93165e..a1be201e 100644 --- a/database/install/ne_info.sql +++ b/build/database/std/install/ne_info.sql @@ -31,7 +31,7 @@ CREATE TABLE `ne_info` ( UNIQUE KEY `ux_netype_neid` (`ne_type`,`ne_id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='网元_基础信息表 关联对应版本、授权、主机'; --- 初始网元数据 + -- 初始数据对应网元 INSERT INTO `ne_info` VALUES (1, 'OMC', '001', '4400HXOMC001', 'OMC_001', '127.0.0.10', 33080, 'PNF', 'AreaNet', '-', '-', '-', '1,2', 0, '', 'system', 1713928436971, '', 0); INSERT INTO `ne_info` VALUES (2, 'IMS', '001', '4400HXIMS001', 'IMS_001', '127.0.0.1', 33030, 'PNF', 'AreaNet', '-', '-', '-', '3,4', 0, '', 'system', 1713928436971, '', 0); INSERT INTO `ne_info` VALUES (3, 'AMF', '001', '4400HXAMF001', 'AMF_001', '127.0.0.9', 33030, 'PNF', 'AreaNet', '-', '-', '', '5,6', 0, '', 'system', 1713928436971, '', 0); diff --git a/database/install/ne_license.sql b/build/database/std/install/ne_license.sql similarity index 100% rename from database/install/ne_license.sql rename to build/database/std/install/ne_license.sql diff --git a/database/install/ne_link.sql b/build/database/std/install/ne_link.sql similarity index 100% rename from database/install/ne_link.sql rename to build/database/std/install/ne_link.sql diff --git a/database/install/ne_pool.sql b/build/database/std/install/ne_pool.sql similarity index 100% rename from database/install/ne_pool.sql rename to build/database/std/install/ne_pool.sql diff --git a/database/install/ne_software.sql b/build/database/std/install/ne_software.sql similarity index 100% rename from database/install/ne_software.sql rename to build/database/std/install/ne_software.sql diff --git a/database/install/ne_state.sql b/build/database/std/install/ne_state.sql similarity index 100% rename from database/install/ne_state.sql rename to build/database/std/install/ne_state.sql diff --git a/database/install/ne_version.sql b/build/database/std/install/ne_version.sql similarity index 100% rename from database/install/ne_version.sql rename to build/database/std/install/ne_version.sql diff --git a/database/install/northbound_cm.sql b/build/database/std/install/northbound_cm.sql similarity index 100% rename from database/install/northbound_cm.sql rename to build/database/std/install/northbound_cm.sql diff --git a/database/install/northbound_pm.sql b/build/database/std/install/northbound_pm.sql similarity index 100% rename from database/install/northbound_pm.sql rename to build/database/std/install/northbound_pm.sql diff --git a/build/database/std/install/oauth2_client.sql b/build/database/std/install/oauth2_client.sql new file mode 100644 index 00000000..195d85e2 --- /dev/null +++ b/build/database/std/install/oauth2_client.sql @@ -0,0 +1,27 @@ +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for oauth2_client +-- ---------------------------- +DROP TABLE IF EXISTS `oauth2_client`; +CREATE TABLE `oauth2_client` ( + `id` int NOT NULL AUTO_INCREMENT COMMENT '应用ID', + `client_id` varchar(32) COLLATE utf8mb4_general_ci NOT NULL COMMENT '应用的唯一标识', + `client_secret` varchar(64) COLLATE utf8mb4_general_ci NOT NULL COMMENT '应用的凭证秘钥', + `title` varchar(64) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '应用名称', + `ip_white` varchar(255) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'IP白名单', + `del_flag` varchar(1) COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '删除标记(0存在 1删除)', + `login_ip` varchar(128) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '最后登录IP', + `login_time` bigint DEFAULT '0' COMMENT '最后登录时间', + `create_by` varchar(64) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '创建者', + `create_time` bigint DEFAULT '0' COMMENT '创建时间', + `update_by` varchar(64) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '更新者', + `update_time` bigint DEFAULT '0' COMMENT '更新时间', + `remark` varchar(200) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '备注', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='第三方_用户授权应用表'; + +SET FOREIGN_KEY_CHECKS = 1; + +-- Dump completed on 2025-04-25 15:26:56 diff --git a/build/database/std/install/oauth2_log_login.sql b/build/database/std/install/oauth2_log_login.sql new file mode 100644 index 00000000..c6f13889 --- /dev/null +++ b/build/database/std/install/oauth2_log_login.sql @@ -0,0 +1,23 @@ +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for oauth2_log_login +-- ---------------------------- +DROP TABLE IF EXISTS `oauth2_log_login`; +CREATE TABLE `oauth2_log_login` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '登录ID', + `client_id` varchar(32) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '应用的唯一标识', + `login_ip` varchar(128) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '登录IP地址', + `login_location` varchar(32) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '登录地点', + `browser` varchar(64) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '浏览器类型', + `os` varchar(64) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '操作系统', + `status_flag` varchar(1) COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '登录状态(0失败 1成功)', + `msg` varchar(255) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '提示消息', + `login_time` bigint DEFAULT '0' COMMENT '登录时间', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='第三方_用户授权应用登录日志表'; + +SET FOREIGN_KEY_CHECKS = 1; + +-- Dump completed on 2025-04-25 15:26:56 diff --git a/database/install/param_value.sql b/build/database/std/install/param_value.sql similarity index 100% rename from database/install/param_value.sql rename to build/database/std/install/param_value.sql diff --git a/database/install/pm_custom_data.sql b/build/database/std/install/pm_custom_data.sql similarity index 100% rename from database/install/pm_custom_data.sql rename to build/database/std/install/pm_custom_data.sql diff --git a/database/install/pm_template.sql b/build/database/std/install/pm_template.sql similarity index 100% rename from database/install/pm_template.sql rename to build/database/std/install/pm_template.sql diff --git a/database/install/sys_config.sql b/build/database/std/install/sys_config.sql similarity index 77% rename from database/install/sys_config.sql rename to build/database/std/install/sys_config.sql index b6952836..ba790b85 100644 --- a/database/install/sys_config.sql +++ b/build/database/std/install/sys_config.sql @@ -32,7 +32,11 @@ 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 (21, 'config.monitor.sysResource.storeDays', 'monitor.sysResource.storeDays', '7', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.monitor.sysResource.storeDaysRemark'); +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 (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'); +INSERT INTO `sys_config` VALUES (21, 'config.monitor.sysResource.storeDays', 'monitor.sysResource.storeDays', '30', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.monitor.sysResource.storeDaysRemark'); INSERT INTO `sys_config` VALUES (22, 'config.sys.logo.type', 'sys.logo.type', 'brand', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.logo.typeRemark'); INSERT 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'); INSERT 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'); @@ -42,9 +46,8 @@ INSERT INTO `sys_config` VALUES (27, 'config.sys.copyright', 'sys.copyright', 'c INSERT INTO `sys_config` VALUES (28, 'config.sys.i18nOpen', 'sys.i18n.open', 'false', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.i18nOpenRemark'); INSERT INTO `sys_config` VALUES (29, 'config.sys.i18nDefault', 'sys.i18n.default', 'en_US', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.i18nDefaultRemark'); INSERT INTO `sys_config` VALUES (30, 'config.sys.lockTime', 'sys.lockTime', '0', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.lockTimeRemark'); -INSERT INTO `sys_config` VALUES (31, 'config.sys.homePage', 'sys.homePage', 'dashboard/overview/index', 'Y', '0', 'system', 1704960008300, 'supervisor', 1742786120043, 'config.sys.homePageRemark'); -INSERT INTO `sys_config` VALUES (32, 'config.neData.exportTableFTP', 'neData.exportTableFTP', 'VXEECeDMoYhX29pqsb753ecJOnPfxB6XrEa9QdUrRqwKI7EmJei5HlvehvL+wL0Osjo3Y2Qs7ADA6eL3SrisiVXAVVXv38KMhvcSU9eaAzl/jrY4ahsq6a/eSbzxFDgE21US7/YnsyDRG7eGAc7W5Q==', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.neData.exportTableFTPRemark'); -INSERT INTO `sys_config` VALUES (33, 'config.ne.neConfigBackupFTP', 'ne.neConfigBackupFTP', 'DMb1TFtE/4yBjh/5HX41sMjkaBjIA/Wfqj+w/T0QC6zmYIA/sEHs4THOluwNyR0EEupRQWJI0xY9kUomhynu/lDd8QDtCWsKpFhzXyBofL1qAvruSnJMGP3uYrgFJGqaQ4pBGQpndyUvjiJE80Mo+w==', 'Y', '0', 'system', 1744265760822, 'admin', 1744265760822, 'config.ne.neConfigBackupFTPRemark'); +INSERT INTO `sys_config` VALUES (31, 'config.sys.homePage', 'sys.homePage', 'dashboard/overview/index', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.sys.homePageRemark'); +INSERT INTO `sys_config` VALUES (32, 'config.neData.backupDataFTP', 'neData.backupDataFTP', 'VXEECeDMoYhX29pqsb753ecJOnPfxB6XrEa9QdUrRqwKI7EmJei5HlvehvL+wL0Osjo3Y2Qs7ADA6eL3SrisiVXAVVXv38KMhvcSU9eaAzl/jrY4ahsq6a/eSbzxFDgE21US7/YnsyDRG7eGAc7W5Q==', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.neData.backupDataFTPRemark'); UNLOCK TABLES; diff --git a/database/install/sys_dept.sql b/build/database/std/install/sys_dept.sql similarity index 100% rename from database/install/sys_dept.sql rename to build/database/std/install/sys_dept.sql diff --git a/database/install/sys_dict_data.sql b/build/database/std/install/sys_dict_data.sql similarity index 89% rename from database/install/sys_dict_data.sql rename to build/database/std/install/sys_dict_data.sql index 17bc596e..5e7160a7 100644 --- a/database/install/sys_dict_data.sql +++ b/build/database/std/install/sys_dict_data.sql @@ -145,6 +145,25 @@ INSERT INTO `sys_dict_data` VALUES (116, 'cdr_cause_code', 'dictData.cdr_cause_c INSERT INTO `sys_dict_data` VALUES (117, 'cdr_cause_code', 'dictData.cdr_cause_code.42', '42', 22, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); INSERT INTO `sys_dict_data` VALUES (118, 'cdr_cause_code', 'dictData.cdr_cause_code.47', '47', 23, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); INSERT INTO `sys_dict_data` VALUES (119, 'cdr_cause_code', 'dictData.cdr_cause_code.50', '50', 30, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO `sys_dict_data` VALUES (120, 'trace_msg_type', 'dictData.trace_msg_type.0', '0', 0, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO `sys_dict_data` VALUES (121, 'trace_msg_type', 'dictData.trace_msg_type.1', '1', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO `sys_dict_data` VALUES (122, 'trace_msg_direct', 'dictData.trace_msg_direct.0', '0', 0, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO `sys_dict_data` VALUES (123, 'trace_msg_direct', 'dictData.trace_msg_direct.1', '1', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO `sys_dict_data` VALUES (124, 'trace_interfaces', 'dictData.trace_interfaces.1', 'N1', 1, '', '', '0', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO `sys_dict_data` VALUES (125, 'trace_interfaces', 'dictData.trace_interfaces.2', 'N2', 2, '', '', '0', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO `sys_dict_data` VALUES (126, 'trace_interfaces', 'dictData.trace_interfaces.3', 'N1/N2', 3, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO `sys_dict_data` VALUES (127, 'trace_interfaces', 'dictData.trace_interfaces.4', 'N4', 4, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO `sys_dict_data` VALUES (128, 'trace_interfaces', 'dictData.trace_interfaces.8', 'N8', 8, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO `sys_dict_data` VALUES (129, 'trace_interfaces', 'dictData.trace_interfaces.10', 'N10', 10, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO `sys_dict_data` VALUES (130, 'trace_interfaces', 'dictData.trace_interfaces.11', 'N11', 11, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO `sys_dict_data` VALUES (131, 'trace_interfaces', 'dictData.trace_interfaces.12', 'N12', 12, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO `sys_dict_data` VALUES (132, 'trace_interfaces', 'dictData.trace_interfaces.13', 'N13', 13, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO `sys_dict_data` VALUES (133, 'trace_interfaces', 'dictData.trace_interfaces.7', 'N7', 7, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO `sys_dict_data` VALUES (134, 'trace_interfaces', 'dictData.trace_interfaces.15', 'N15', 15, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO `sys_dict_data` VALUES (135, 'trace_interfaces', 'dictData.trace_interfaces.17', 'N17', 17, '', '', '0', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO `sys_dict_data` VALUES (136, 'trace_interfaces', 'dictData.trace_interfaces.20', 'N20', 20, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO `sys_dict_data` VALUES (137, 'trace_interfaces', 'dictData.trace_interfaces.22', 'N22', 22, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO `sys_dict_data` VALUES (138, 'trace_interfaces', 'dictData.trace_interfaces.40', 'N40', 40, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); INSERT INTO `sys_dict_data` VALUES (139, 'cdr_sip_code', 'dictData.cdr_sip_code.302', '302', 3, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); INSERT INTO `sys_dict_data` VALUES (140, 'cdr_sip_code', 'dictData.cdr_sip_code.402', '402', 4, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); INSERT INTO `sys_dict_data` VALUES (141, 'cdr_sip_code', 'dictData.cdr_sip_code.480', '480', 7, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); diff --git a/database/install/sys_dict_type.sql b/build/database/std/install/sys_dict_type.sql similarity index 92% rename from database/install/sys_dict_type.sql rename to build/database/std/install/sys_dict_type.sql index 6c6ffc74..750c56d1 100644 --- a/database/install/sys_dict_type.sql +++ b/build/database/std/install/sys_dict_type.sql @@ -52,7 +52,10 @@ INSERT INTO `sys_dict_type` VALUES (67, 'dictType.ne_host_cmd_groupId', 'ne_host INSERT INTO `sys_dict_type` VALUES (68, 'dictType.ne_info_status', 'ne_info_status', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); INSERT INTO `sys_dict_type` VALUES (69, 'dictType.ne_license_status', 'ne_license_status', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); INSERT INTO `sys_dict_type` VALUES (70, 'dictType.cdr_cause_code', 'cdr_cause_code', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); -INSERT INTO `sys_dict_type` VALUES (71, 'dictType.cdr_sip_code_cause', 'cdr_sip_code_cause', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO `sys_dict_type` VALUES (71, 'dictType.trace_msg_type', 'trace_msg_type', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO `sys_dict_type` VALUES (72, 'dictType.trace_msg_direct', 'trace_msg_direct', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO `sys_dict_type` VALUES (73, 'dictType.trace_interfaces', 'trace_interfaces', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); +INSERT INTO `sys_dict_type` VALUES (74, 'dictType.cdr_sip_code_cause', 'cdr_sip_code_cause', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); UNLOCK TABLES; diff --git a/build/database/std/install/sys_i18n.sql b/build/database/std/install/sys_i18n.sql new file mode 100644 index 00000000..1a97cc8f --- /dev/null +++ b/build/database/std/install/sys_i18n.sql @@ -0,0 +1,768 @@ +-- +-- Table structure for table `sys_i18n` +-- + +DROP TABLE IF EXISTS `sys_i18n`; +CREATE TABLE `sys_i18n` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID', + `key_lable` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '多语言属性名', + `value_zh` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '-' COMMENT '中文', + `value_en` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '-' COMMENT '英文', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='系统_多语言'; + +-- +-- Dumping data for table `sys_i18n` +-- + +INSERT INTO `sys_i18n` VALUES (1, 'i18n', '中文', 'English'); +INSERT INTO `sys_i18n` VALUES (2, 'hello', '你好', 'Hello'); +INSERT INTO `sys_i18n` VALUES (3, 'menu.system', '系统', 'System'); +INSERT INTO `sys_i18n` VALUES (4, 'menu.monitor', '监控', 'Monitor'); +INSERT INTO `sys_i18n` VALUES (5, 'menu.tools', '工具', 'Tools'); +INSERT INTO `sys_i18n` VALUES (6, 'menu.ne', '网元', 'NE'); +INSERT INTO `sys_i18n` VALUES (7, 'menu.ue', '终端', 'UE'); +INSERT INTO `sys_i18n` VALUES (8, 'menu.systemRemark', '系统管理目录', 'System Management Catalog'); +INSERT INTO `sys_i18n` VALUES (9, 'menu.monitorRemark', '系统监控目录', 'System Monitor Catalog'); +INSERT INTO `sys_i18n` VALUES (10, 'menu.toolsRemark', '系统工具目录', 'System Tools Catalog'); +INSERT INTO `sys_i18n` VALUES (11, 'menu.neRemark', '网元配置管理目录', 'NE Configuration Management Catalog'); +INSERT INTO `sys_i18n` VALUES (12, 'menu.ueRemark', '网元终端信息目录', 'Network Element Terminal Information Catalog'); +INSERT INTO `sys_i18n` VALUES (13, 'menu.security.user', '用户管理', 'User Management'); +INSERT INTO `sys_i18n` VALUES (14, 'menu.security.role', '角色管理', 'Role Management'); +INSERT INTO `sys_i18n` VALUES (15, 'menu.security.roleUser', '分配角色', 'Assigning Roles'); +INSERT INTO `sys_i18n` VALUES (16, 'menu.system.menu', '菜单管理', 'Menu Management'); +INSERT INTO `sys_i18n` VALUES (17, 'menu.security.dept', '部门管理', 'Department Management'); +INSERT INTO `sys_i18n` VALUES (18, 'menu.security.post', '岗位管理', 'Position Management'); +INSERT INTO `sys_i18n` VALUES (19, 'menu.system.dictType', '字典管理', 'Dictionary Management'); +INSERT INTO `sys_i18n` VALUES (20, 'menu.system.dictData', '字典数据', 'Dictionary Data'); +INSERT INTO `sys_i18n` VALUES (21, 'menu.system.paramSet', '参数设置', 'Parameter Settings'); +INSERT INTO `sys_i18n` VALUES (22, 'menu.system.systemLog', '系统日志', 'System Log'); +INSERT INTO `sys_i18n` VALUES (23, 'menu.system.systemInfo', '系统信息', 'System Information'); +INSERT INTO `sys_i18n` VALUES (24, 'menu.system.cacheInfo', '缓存信息', 'Cache Information'); +INSERT INTO `sys_i18n` VALUES (25, 'menu.system.cache', '缓存管理', 'Cache Management'); +INSERT INTO `sys_i18n` VALUES (26, 'menu.security.onlineUser', '在线用户', 'Online Users'); +INSERT INTO `sys_i18n` VALUES (27, 'menu.system.job', '调度任务', 'Scheduling Tasks'); +INSERT INTO `sys_i18n` VALUES (28, 'menu.system.jobLog', '调度日志', 'Scheduling Logs'); +INSERT INTO `sys_i18n` VALUES (29, 'menu.tools.help', '帮助文档', 'Help Documentation'); +INSERT INTO `sys_i18n` VALUES (30, 'menu.log.operat', '操作日志', 'Operation logs'); +INSERT INTO `sys_i18n` VALUES (31, 'menu.log.login', '安全日志', 'Security logs'); +INSERT INTO `sys_i18n` VALUES (32, 'menu.security.userRemark', '用户管理菜单', 'User Management Menu'); +INSERT INTO `sys_i18n` VALUES (33, 'menu.security.roleRemark', '角色管理菜单', 'Role Management Menu'); +INSERT INTO `sys_i18n` VALUES (34, 'menu.security.roleUserRemark', '分配角色内嵌隐藏菜单', 'Assign Roles Embedded Hidden Menu'); +INSERT INTO `sys_i18n` VALUES (35, 'menu.system.menuRemark', '菜单管理菜单', 'Menu Management Menu'); +INSERT INTO `sys_i18n` VALUES (36, 'menu.security.deptRemark', '部门管理菜单', 'Department management menu'); +INSERT INTO `sys_i18n` VALUES (37, 'menu.security.postRemark', '岗位管理菜单', 'Job Management Menu'); +INSERT INTO `sys_i18n` VALUES (38, 'menu.system.dictTypeRemark', '字典管理菜单', 'Dictionary management menu'); +INSERT INTO `sys_i18n` VALUES (39, 'menu.system.dictDataRemark', '字典数据内嵌隐藏菜单', 'Dictionary data embedded hidden menu'); +INSERT INTO `sys_i18n` VALUES (40, 'menu.system.paramSetRemark', '参数设置菜单', 'Parameter setting menu'); +INSERT INTO `sys_i18n` VALUES (41, 'menu.system.systemLogRemark', '系统日志目录', 'System Log Catalog'); +INSERT INTO `sys_i18n` VALUES (42, 'menu.system.systemInfoRemark', '系统信息菜单', 'System information menu'); +INSERT INTO `sys_i18n` VALUES (43, 'menu.system.cacheInfoRemark', '缓存信息菜单', 'Cache Information Menu'); +INSERT INTO `sys_i18n` VALUES (44, 'menu.system.cacheRemark', '缓存列表菜单', 'Cache List Menu'); +INSERT INTO `sys_i18n` VALUES (45, 'menu.security.onlineUserRemark', '在线用户菜单', 'Online User Menu'); +INSERT INTO `sys_i18n` VALUES (46, 'menu.system.jobRemark', '调度任务菜单', 'Scheduling Tasks menu'); +INSERT INTO `sys_i18n` VALUES (47, 'menu.system.jobLogRemark', '调度日志内嵌隐藏菜单', 'Scheduling Log Embedded Hidden Menu'); +INSERT INTO `sys_i18n` VALUES (48, 'menu.tools.helpRemark', '帮助文档菜单', 'Help file menu'); +INSERT INTO `sys_i18n` VALUES (49, 'menu.log.operatRemark', '操作日志菜单', 'Operation log menu'); +INSERT INTO `sys_i18n` VALUES (50, 'menu.log.loginRemark', '登录日志菜单', 'Login log menu'); +INSERT INTO `sys_i18n` VALUES (51, 'menu.common.query', '查询', 'Inquiry'); +INSERT INTO `sys_i18n` VALUES (52, 'menu.common.add', '新增', 'Add'); +INSERT INTO `sys_i18n` VALUES (53, 'menu.common.edit', '修改', 'Modify'); +INSERT INTO `sys_i18n` VALUES (54, 'menu.common.delete', '删除', 'Delete'); +INSERT INTO `sys_i18n` VALUES (55, 'menu.common.export', '导出', 'Export'); +INSERT INTO `sys_i18n` VALUES (56, 'menu.common.import', '导入', 'Import'); +INSERT INTO `sys_i18n` VALUES (57, 'menu.common.resetPwd', '重置密码', 'Reset Password'); +INSERT INTO `sys_i18n` VALUES (58, 'menu.common.unlock', '账户解锁', 'Account Unlock'); +INSERT INTO `sys_i18n` VALUES (59, 'menu.forcedQuit.batch ', '批量强退', 'Batch Undo'); +INSERT INTO `sys_i18n` VALUES (60, 'menu.forcedQuit.single', '单条强退', 'Individual Forced Retirement'); +INSERT INTO `sys_i18n` VALUES (61, 'menu.neData.udmAuth', 'UDM鉴权用户', 'UDM Authentication'); +INSERT INTO `sys_i18n` VALUES (62, 'menu.neData.udmSub', 'UDM签约用户', 'UDM Subscribers'); +INSERT INTO `sys_i18n` VALUES (63, 'menu.neData.udmVOIP', 'VOIP鉴权用户', 'VOIP Authentication'); +INSERT INTO `sys_i18n` VALUES (64, 'menu.neData.udmVolte', 'IMS签约用户', 'IMS Subscribers'); +INSERT INTO `sys_i18n` VALUES (65, 'menu.neData.imsSub', 'IMS在线用户', 'IMS Online Users'); +INSERT INTO `sys_i18n` VALUES (66, 'menu.neData.smfSub', 'UE在线信息', 'UE Online Information'); +INSERT INTO `sys_i18n` VALUES (67, 'menu.neData.baseOnline', '基站在线', 'Radio Online'); +INSERT INTO `sys_i18n` VALUES (68, 'menu.trace', '跟踪', 'Trace'); +INSERT INTO `sys_i18n` VALUES (69, 'menu.trace.task', '网元跟踪任务', 'NE Trace Task'); +INSERT INTO `sys_i18n` VALUES (70, 'menu.trace.taskData', '网元跟踪任务数据', 'NE Trace Task Data'); +INSERT INTO `sys_i18n` VALUES (71, 'menu.trace.pcap', '信令抓包', 'Signaling Capture'); +INSERT INTO `sys_i18n` VALUES (72, 'menu.fault', '监控', 'Monitor'); +INSERT INTO `sys_i18n` VALUES (73, 'config.neData.backupDataFTP', '备份网元数据-同步FTP服务', 'Backup NE Data - Sync Data FTP Service'); +INSERT INTO `sys_i18n` VALUES (74, 'config.neData.backupDataFTPRemark', '请通过系统页面进行设置FTP信息', 'Please set the FTP information through the system page.'); +INSERT INTO `sys_i18n` VALUES (75, 'job.backup_export_table_sys_log_operate_remark', 'hour: 数据时间从任务执行时间前的小时数\ntableName: 数据表名\ncolumns: 支持字段\nbackupPath: 备份输出路径 /usr/local/omc/backup/{backupPath}', 'hour: data time from the hour before the task execution time \ntableName: data table name \ncolumns: support fields \nbackupPath: backup output path /usr/local/omc/backup/{backupPath}'); +INSERT INTO `sys_i18n` VALUES (76, 'job.backup_export_table_cdr_event_ims_remark', 'hour: 数据时间从任务执行时间前的小时数\ntableName: 数据表名\ncolumns: 支持字段\nbackupPath: 备份输出路径 /usr/local/omc/backup/{backupPath}', 'hour: data time from the hour before the task execution time \ntableName: data table name \ncolumns: support fields \nbackupPath: backup output path /usr/local/omc/backup/{backupPath}'); +INSERT INTO `sys_i18n` VALUES (77, 'job.backup_export_table_cdr_event_smf_remark', 'hour: 数据时间从任务执行时间前的小时数\ntableName: 数据表名\ncolumns: 支持字段\nbackupPath: 备份输出路径 /usr/local/omc/backup/{backupPath}', 'hour: data time from the hour before the task execution time \ntableName: data table name \ncolumns: support fields \nbackupPath: backup output path /usr/local/omc/backup/{backupPath}'); +INSERT INTO `sys_i18n` VALUES (78, 'menu.traceRemark', '跟踪管理目录', 'Tracking Management Menu'); +INSERT INTO `sys_i18n` VALUES (79, 'menu.trace.taskRemark', '跟踪任务菜单', 'Tracking Task Menu'); +INSERT INTO `sys_i18n` VALUES (80, 'config.sys.user.fristPasswdChange', '用户管理-首次登录密码修改', 'User Management-First Login Password Change'); +INSERT INTO `sys_i18n` VALUES (81, 'menu.trace.pcapRemark', '信令抓包菜单', 'Signaling Capture Menu'); +INSERT INTO `sys_i18n` VALUES (82, 'menu.faultRemark', '故障管理目录', 'Fault Management Catalog'); +INSERT INTO `sys_i18n` VALUES (83, 'menu.fault.active', '活动告警', 'Active Alarms'); +INSERT INTO `sys_i18n` VALUES (84, 'menu.log', '日志', 'Logs'); +INSERT INTO `sys_i18n` VALUES (85, 'menu.log.mml', 'MML日志', 'MML Logs'); +INSERT INTO `sys_i18n` VALUES (86, 'menu.log.alarm', '告警日志', 'Alarm Logs'); +INSERT INTO `sys_i18n` VALUES (87, 'menu.log.forwarding', '告警前转日志', 'Alarm Forwarding Logs'); +INSERT INTO `sys_i18n` VALUES (88, 'menu.log.set', '日志设置', 'Log Settings'); +INSERT INTO `sys_i18n` VALUES (89, 'menu.monitor.sessionUser', '用户会话', 'User Sessions'); +INSERT INTO `sys_i18n` VALUES (90, 'menu.fault.history', '历史告警', 'Historical Alarms'); +INSERT INTO `sys_i18n` VALUES (91, 'menu.fault.set', '设置', 'Settings'); +INSERT INTO `sys_i18n` VALUES (92, 'menu.perf', '性能', 'Performance'); +INSERT INTO `sys_i18n` VALUES (93, 'menu.fault.activemRemark', '活动告警菜单', 'Active Alarm Menu'); +INSERT INTO `sys_i18n` VALUES (94, 'menu.logRemark', '日志管理目录', 'Log Management Catalog'); +INSERT INTO `sys_i18n` VALUES (95, 'menu.log.operatOldRemark', '操作日志旧layui菜单', 'Operation log old layui menu'); +INSERT INTO `sys_i18n` VALUES (96, 'menu.log.mmlRemark', '操作MML日志', 'Operation MML Log'); +INSERT INTO `sys_i18n` VALUES (97, 'menu.log.alarmRemark', '告警日志菜单', 'Alarm Log Menu'); +INSERT INTO `sys_i18n` VALUES (98, 'menu.log.securityOldRemark', '安全日志旧layui菜单', 'Security Log Old Layui Menu'); +INSERT INTO `sys_i18n` VALUES (99, 'menu.log.forwardingRemark', '告警前转日志菜单', 'Alarm forward log menu'); +INSERT INTO `sys_i18n` VALUES (100, 'menu.log.setRemark', '日志设置菜单', 'Log Settings menu'); +INSERT INTO `sys_i18n` VALUES (101, 'menu.monitor.sessionUserRemark', '用户会话旧layui菜单', 'User Session Old Layui Menu'); +INSERT INTO `sys_i18n` VALUES (102, 'menu.fault.historyRemark', '历史告警菜单', 'Alarm history menu'); +INSERT INTO `sys_i18n` VALUES (103, 'menu.fault.setRemark', '故障通用设置菜单', 'Fault General Setup Menu'); +INSERT INTO `sys_i18n` VALUES (104, 'menu.perfRemark', '性能目录', 'Performance Catalog'); +INSERT INTO `sys_i18n` VALUES (105, 'menu.perf.task', '任务管理', 'Performance Tasks'); +INSERT INTO `sys_i18n` VALUES (106, 'menu.perf.data', '性能数据', 'Performance Data'); +INSERT INTO `sys_i18n` VALUES (107, 'menu.perf.kpiOverView', '关键指标概览', 'Key Performance Overview'); +INSERT INTO `sys_i18n` VALUES (108, 'menu.perf.threshold', '性能门限', 'Performance Thresholds'); +INSERT INTO `sys_i18n` VALUES (109, 'menu.perf.kpi', '关键指标', 'Key Performance Indicators'); +INSERT INTO `sys_i18n` VALUES (110, 'menu.perf.customTarget', '自定义指标', 'Custom Indicator Management'); +INSERT INTO `sys_i18n` VALUES (111, 'menu.perf.kpiKeyTarget', '关键指标报表', 'Key Performance Reports'); +INSERT INTO `sys_i18n` VALUES (112, 'menu.mml', 'MML', 'MML'); +INSERT INTO `sys_i18n` VALUES (113, 'menu.mml.ne', '网元操作', 'NE Operation'); +INSERT INTO `sys_i18n` VALUES (114, 'menu.mml.udm', 'UDM操作', 'UDM Operation'); +INSERT INTO `sys_i18n` VALUES (115, 'menu.mml.set', 'MML设置', 'MML Settings'); +INSERT INTO `sys_i18n` VALUES (116, 'menu.mml.omc', 'OMC操作', 'OMC Operation'); +INSERT INTO `sys_i18n` VALUES (117, 'menu.perf.taskRemark', '任务管理菜单', 'Task Management Menu'); +INSERT INTO `sys_i18n` VALUES (118, 'menu.perf.dataRemark', '性能数据菜单', 'Performance Data Menu'); +INSERT INTO `sys_i18n` VALUES (119, 'menu.dashboard.smscCDR.content', '可见短信内容', 'Visible SMS content'); +INSERT INTO `sys_i18n` VALUES (120, 'menu.perf.thresholdRemark', '性能门限菜单', 'Performance Threshold Menu'); +INSERT INTO `sys_i18n` VALUES (121, 'menu.perf.kpiRemark', '黄金指标菜单', 'Key Performance Indicator Menu'); +INSERT INTO `sys_i18n` VALUES (122, 'menu.perf.customTargetRemark', '自定义指标菜单', 'Custom Indicator Management Menu'); +INSERT INTO `sys_i18n` VALUES (123, 'menu.dashboard.smfCDRByIMSI', '数据流量报表', 'Data Usage Report'); +INSERT INTO `sys_i18n` VALUES (124, 'menu.mmlRemark', 'MML管理目录', 'MML Management Catalog'); +INSERT INTO `sys_i18n` VALUES (125, 'menu.mml.neRemark', '网元操作菜单', 'Network Element Operations Menu'); +INSERT INTO `sys_i18n` VALUES (126, 'menu.mml.udmRemark', '网元UDM用户数据菜单', 'Network Element UDM User Data Menu'); +INSERT INTO `sys_i18n` VALUES (127, 'menu.mml.setRemark', 'MML设置菜单', 'MML Setup Menu'); +INSERT INTO `sys_i18n` VALUES (128, 'menu.mml.omcRemark', 'OMC操作菜单', 'OMC Operation Menu'); +INSERT INTO `sys_i18n` VALUES (129, 'menu.dashboard.sgwcCDR', '漫游数据话单', 'Roaming Data CDR'); +INSERT INTO `sys_i18n` VALUES (130, 'menu.security', '安全', 'Security'); +INSERT INTO `sys_i18n` VALUES (131, 'menu.system.systemSet', '系统设置', 'System Settings'); +INSERT INTO `sys_i18n` VALUES (132, 'menu.system.systemResource', '系统资源', 'System Resources'); +INSERT INTO `sys_i18n` VALUES (133, 'log.operate.title.sgwcCDR', '漫游数据话单', 'Roaming Data CDR'); +INSERT INTO `sys_i18n` VALUES (134, 'menu.securityRemark', '安全管理目录', 'Security Management Catalog'); +INSERT INTO `sys_i18n` VALUES (135, 'menu.system.systemSetRemark', '系统设置菜单', 'System Settings Menu'); +INSERT INTO `sys_i18n` VALUES (136, 'menu.system.systemResourceRemark', '系统资源 cpu io network菜单', 'System Resources cpu io network menu'); +INSERT INTO `sys_i18n` VALUES (137, 'dictData.offline', '离线', 'Offline'); +INSERT INTO `sys_i18n` VALUES (138, 'dictData.online', '在线', 'Online'); +INSERT INTO `sys_i18n` VALUES (139, 'menu.neData.baseStation', '基站状态', 'Radio State'); +INSERT INTO `sys_i18n` VALUES (140, 'menu.noData', '没有可访问菜单数据!', 'There is no accessible menu data!'); +INSERT INTO `sys_i18n` VALUES (141, 'menu.errNameExists', '操作菜单【{name}】失败,菜单名称已存在', 'Failed to operate menu [{name}], menu name already exists!'); +INSERT INTO `sys_i18n` VALUES (142, 'menu.errPathExists', '操作菜单【{name}】失败,菜单路由地址已存在', 'Failed to operate menu [{name}], menu routing address already exists!'); +INSERT INTO `sys_i18n` VALUES (143, 'menu.errFramePath', '操作菜单【{name}】失败,非内部地址请以http(s)://开头', 'Failed to manipulate menu [{name}], non-internal address should start with http(s)://'); +INSERT INTO `sys_i18n` VALUES (144, 'menu.errParentStatus', '上级菜单未启用!', 'The parent menu is not enabled!'); +INSERT INTO `sys_i18n` VALUES (145, 'menu.errHasChildUse', '操作菜单【{name}】失败,存在使用子菜单数:{num}', 'Operation menu [{name}] failed, number of submenus in use exists: {num}'); +INSERT INTO `sys_i18n` VALUES (146, 'menu.errHasRoleUse', '操作菜单【{name}】失败,菜单已分配给角色数:{num}', 'Operation menu [{name}] failed, number of roles the menu has been assigned to: {num}'); +INSERT INTO `sys_i18n` VALUES (147, 'dictData.sex.un', '未选择', 'Not Selected'); +INSERT INTO `sys_i18n` VALUES (148, 'dictData.sex.male', '男', 'Male'); +INSERT INTO `sys_i18n` VALUES (149, 'dictData.sex.female', '女', 'Female'); +INSERT INTO `sys_i18n` VALUES (150, 'dictData.show', '显示', 'Show'); +INSERT INTO `sys_i18n` VALUES (151, 'dictData.hide', '隐藏', 'Hide'); +INSERT INTO `sys_i18n` VALUES (152, 'dictData.normal', '正常', 'Active'); +INSERT INTO `sys_i18n` VALUES (153, 'dictData.disable', '停用', 'Inactive'); +INSERT INTO `sys_i18n` VALUES (154, 'dictData.yes', '是', 'Yes'); +INSERT INTO `sys_i18n` VALUES (155, 'dictData.no', '否', 'No'); +INSERT INTO `sys_i18n` VALUES (156, 'dictData.success', '成功', 'Successful'); +INSERT INTO `sys_i18n` VALUES (157, 'dictData.fail', '失败', 'Failed'); +INSERT INTO `sys_i18n` VALUES (158, 'dictData.jobStatus.normal', '正常', 'Active'); +INSERT INTO `sys_i18n` VALUES (159, 'dictData.jobStatus.pause', '暂停', 'Inactive'); +INSERT INTO `sys_i18n` VALUES (160, 'dictData.jobGroup.Default', '默认', 'Default'); +INSERT INTO `sys_i18n` VALUES (161, 'dictData.jobGroup.System', '系统', 'System'); +INSERT INTO `sys_i18n` VALUES (162, 'dictData.operType.other', '其他', 'Other'); +INSERT INTO `sys_i18n` VALUES (163, 'dictData.operType.add', '新增', 'New'); +INSERT INTO `sys_i18n` VALUES (164, 'dictData.operType.edit', '修改', 'Modify'); +INSERT INTO `sys_i18n` VALUES (165, 'dictData.operType.delete', '删除', 'Delete'); +INSERT INTO `sys_i18n` VALUES (166, 'dictData.operType.auth', '授权', 'Authorization'); +INSERT INTO `sys_i18n` VALUES (167, 'dictData.operType.export', '导出', 'Export'); +INSERT INTO `sys_i18n` VALUES (168, 'dictData.operType.import', '导入', 'Import'); +INSERT INTO `sys_i18n` VALUES (169, 'dictData.operType.forced quit', '强退', 'Forced Retirement'); +INSERT INTO `sys_i18n` VALUES (170, 'dictData.operType.clear', '清空', 'Clear'); +INSERT INTO `sys_i18n` VALUES (171, 'dictData.trace.interface', '接口跟踪', 'Interface Tracing'); +INSERT INTO `sys_i18n` VALUES (172, 'dictData.trace.device', '设备跟踪', 'Module Tracing'); +INSERT INTO `sys_i18n` VALUES (173, 'dictData.trace.user', '用户跟踪', 'User Tracing'); +INSERT INTO `sys_i18n` VALUES (174, 'nbState.export.id', '编号', 'ID'); +INSERT INTO `sys_i18n` VALUES (175, 'nbState.export.name', '基站名称', 'Name'); +INSERT INTO `sys_i18n` VALUES (176, 'nbState.export.position', '基站位置', 'Position'); +INSERT INTO `sys_i18n` VALUES (177, 'nbState.export.address', 'IP地址', 'IP Address'); +INSERT INTO `sys_i18n` VALUES (178, 'nbState.export.nbName', '设备名称', 'RanNodeName'); +INSERT INTO `sys_i18n` VALUES (179, 'nbState.export.ueNum', '在线用户数', 'UE Number'); +INSERT INTO `sys_i18n` VALUES (180, 'nbState.export.state', '基站状态', 'State'); +INSERT INTO `sys_i18n` VALUES (181, 'nbState.export.time', '变更时间', 'Change Time'); +INSERT INTO `sys_i18n` VALUES (182, 'neHost.okBySSHLink', '设置免密直连成功', 'Setting up a password-free direct connection is successful'); +INSERT INTO `sys_i18n` VALUES (183, 'neHost.banNE', '禁止操作网元', 'Do not operate the NE'); +INSERT INTO `sys_i18n` VALUES (184, 'dictData.ne_host_type.redis', 'Redis', 'Redis'); +INSERT INTO `sys_i18n` VALUES (185, 'menu.tools.ping', '网络探测测试', 'Net Probing Test'); +INSERT INTO `sys_i18n` VALUES (186, 'menu.tools.iperf', '网络性能测试', 'Net Performance Test'); +INSERT INTO `sys_i18n` VALUES (187, 'dictData.jobSaveLog.no', '不记录', 'No Record'); +INSERT INTO `sys_i18n` VALUES (188, 'dictData.jobSaveLog.yes', '记录', 'Recorded'); +INSERT INTO `sys_i18n` VALUES (189, 'dictData.neVersionStatus.upload', '已上传', 'Uploaded'); +INSERT INTO `sys_i18n` VALUES (190, 'dictData.neVersionStatus.inactive', '未激活', 'Inactivated'); +INSERT INTO `sys_i18n` VALUES (191, 'dictData.neVersionStatus.active', '已激活', 'Activated'); +INSERT INTO `sys_i18n` VALUES (192, 'dictData.alarmStatus.history', '历史告警', 'Historical Alarm'); +INSERT INTO `sys_i18n` VALUES (193, 'dictData.alarmStatus.active', '活动告警', 'Active Alarm'); +INSERT INTO `sys_i18n` VALUES (194, 'dictData.export.code', '数据代码', 'Data Code'); +INSERT INTO `sys_i18n` VALUES (195, 'dictData.export.sort', '数据排序', 'Data Sort'); +INSERT INTO `sys_i18n` VALUES (196, 'dictData.export.label', '数据标签', 'Data Key'); +INSERT INTO `sys_i18n` VALUES (197, 'dictData.export.value', '数据键值', 'Data Value'); +INSERT INTO `sys_i18n` VALUES (198, 'dictData.export.type', '数据排序', 'Data Type'); +INSERT INTO `sys_i18n` VALUES (199, 'dictData.export.status', '数据状态', 'Status'); +INSERT INTO `sys_i18n` VALUES (200, 'dictData.datascope.all', '全部数据权限', 'All data permissions'); +INSERT INTO `sys_i18n` VALUES (201, 'dictData.datascope.custom', '自定数据权限', 'Customized Data Rights'); +INSERT INTO `sys_i18n` VALUES (202, 'dictData.datascope.dept', '部门数据权限', 'Departmental Data Permissions'); +INSERT INTO `sys_i18n` VALUES (203, 'dictData.datascope.deptAndChid', '部门及以下数据权限', 'Department and below'); +INSERT INTO `sys_i18n` VALUES (204, 'dictData.datascope.self', '仅本人数据权限', 'Personal data access only'); +INSERT INTO `sys_i18n` VALUES (205, 'dictData.noData', '没有可访问字典编码数据!', 'There is no accessible dictionary code data!'); +INSERT INTO `sys_i18n` VALUES (206, 'dictData.errLabelExists', '操作数据【{name}】失败,该字典类型下标签名已存在', 'Failed to manipulate data [{name}], tag name already exists under this dictionary type!'); +INSERT INTO `sys_i18n` VALUES (207, 'dictType.sys_user_sex', '用户性别', 'User Gender'); +INSERT INTO `sys_i18n` VALUES (208, 'dictType.sys_show_hide', '菜单状态', 'Menu Status'); +INSERT INTO `sys_i18n` VALUES (209, 'dictType.sys_normal_disable', '系统开关', 'System switches'); +INSERT INTO `sys_i18n` VALUES (210, 'dictType.sys_job_status', '任务状态', 'Task Status'); +INSERT INTO `sys_i18n` VALUES (211, 'dictType.sys_job_group', '任务分组', 'Task Grouping'); +INSERT INTO `sys_i18n` VALUES (212, 'dictType.sys_yes_no', '系统是否', 'System or not'); +INSERT INTO `sys_i18n` VALUES (213, 'dictType.sys_oper_type', '操作类型', 'Operation Type'); +INSERT INTO `sys_i18n` VALUES (214, 'dictType.sys_common_status', '系统状态', 'System Status'); +INSERT INTO `sys_i18n` VALUES (215, 'dictType.trace_type', '跟踪类型', 'Trace Types'); +INSERT INTO `sys_i18n` VALUES (216, 'menu.tools.ps', '进程运行程序', 'Process Running Program'); +INSERT INTO `sys_i18n` VALUES (217, 'dictType.alarm_status', '告警日志类型', 'Alarm Log Type'); +INSERT INTO `sys_i18n` VALUES (218, 'menu.tools.net', '进程网络连接', 'Process Net Connection'); +INSERT INTO `sys_i18n` VALUES (219, 'dictType.ne_version_status', '网元软件版本状态', 'Network element software version status'); +INSERT INTO `sys_i18n` VALUES (220, 'dictType.sys_user_sex_remark', '用户性别列表', 'User gender list'); +INSERT INTO `sys_i18n` VALUES (221, 'dictType.sys_show_hide_remark', '菜单状态列表', 'Menu Status List'); +INSERT INTO `sys_i18n` VALUES (222, 'dictType.sys_normal_disable_remark', '系统开关列表', 'System switch list'); +INSERT INTO `sys_i18n` VALUES (223, 'dictType.sys_job_status_remark', '任务状态列表', 'Task Status List'); +INSERT INTO `sys_i18n` VALUES (224, 'dictType.sys_job_group_remark', '任务分组列表', 'Task Grouping List'); +INSERT INTO `sys_i18n` VALUES (225, 'dictType.sys_yes_no_remark', '系统是否列表', 'System whether list'); +INSERT INTO `sys_i18n` VALUES (226, 'dictType.sys_oper_type_remark', '操作类型列表', 'Operation type list'); +INSERT INTO `sys_i18n` VALUES (227, 'dictType.sys_common_status_remark', '登录状态列表', 'Login Status List'); +INSERT INTO `sys_i18n` VALUES (228, 'dictType.trace_type_remark', '跟踪类型', 'Trace Types'); +INSERT INTO `sys_i18n` VALUES (229, 'dictType.alarm_status_remark', '告警日志状态类型', 'Alarm Log Status Type'); +INSERT INTO `sys_i18n` VALUES (230, 'menu.trace.tshark', '信令分析', 'Signaling Analysis'); +INSERT INTO `sys_i18n` VALUES (231, 'menu.trace.wireshark', '信令跟踪', 'Signaling Trace'); +INSERT INTO `sys_i18n` VALUES (232, 'dictType.ne_version_status_remark', '网元软件版本状态', 'Network element software version status'); +INSERT INTO `sys_i18n` VALUES (233, 'dictType.export.id', '字典编号', 'Dictionary Number'); +INSERT INTO `sys_i18n` VALUES (234, 'dictType.export.name', '字典名称', 'Dictionary Name'); +INSERT INTO `sys_i18n` VALUES (235, 'dictType.export.type', '字典类型', 'Dictionary Type'); +INSERT INTO `sys_i18n` VALUES (236, 'dictType.export.status', '字典状态', 'Status'); +INSERT INTO `sys_i18n` VALUES (237, 'dictType.sys_role_datascope', '系统角色数据范围', 'System Role Data Range'); +INSERT INTO `sys_i18n` VALUES (238, 'dictType.sys_role_datascope_remark', '系统角色数据范围映射', 'System Role Data Range Mapping'); +INSERT INTO `sys_i18n` VALUES (239, 'dictType.noData', '没有可访问字典类型数据!', 'There is no accessible dictionary type data!'); +INSERT INTO `sys_i18n` VALUES (240, 'dictType.errNameExists', '操作字典【{name}】失败,字典名称已存在', 'Failed to manipulate dictionary [{name}], dictionary name already exists!'); +INSERT INTO `sys_i18n` VALUES (241, 'dictType.errTypeExists', '操作字典【{name}】失败,字典类型已存在', 'Failed to manipulate dictionary [{name}], dictionary type already exists!'); +INSERT INTO `sys_i18n` VALUES (242, 'dept.root', '系统', 'System'); +INSERT INTO `sys_i18n` VALUES (243, 'dept.root.item1', '未分配', 'Unallocated'); +INSERT INTO `sys_i18n` VALUES (244, 'dept.noData', '没有可访问部门数据!', 'There is no accessible department data!'); +INSERT INTO `sys_i18n` VALUES (245, 'dept.errParentDelFlag', '上级部门【{name}】已删除,不允许新增', 'The parent department [{name}] has been deleted and is not allowed to be added.'); +INSERT INTO `sys_i18n` VALUES (246, 'dept.errParentStatus', '上级部门【{name}】停用,不允许新增', 'Parent department [{name}] is deactivated, additions are not allowed!'); +INSERT INTO `sys_i18n` VALUES (247, 'dept.errNameExists', '操作部门【{name}】失败,部门名称已存在', 'Manipulate department [{name}] failed, department name already exists!'); +INSERT INTO `sys_i18n` VALUES (248, 'dept.errParentID', '操作部门【{name}】失败,上级部门不能是自己', 'Failed to operate department [{name}], the parent department cannot be itself.'); +INSERT INTO `sys_i18n` VALUES (249, 'dept.errHasChildUse', '操作失败,该部门包含未停用的子部门数量:{num}', 'Operation failed, the department contains undeactivated sub-departments number: {num}'); +INSERT INTO `sys_i18n` VALUES (250, 'dept.errHasUserUse', '不允许删除,部门已分配给用户数:{num}', 'Deletion is not allowed, number of users the department has been assigned to: {num}'); +INSERT INTO `sys_i18n` VALUES (251, 'config.sys.user.initPassword', '用户管理-账号初始密码', 'User Management-Account Initial Password'); +INSERT INTO `sys_i18n` VALUES (252, 'config.sys.account.captchaEnabled', '账号自助-验证码开关', 'Account self-help-Certification code switch'); +INSERT INTO `sys_i18n` VALUES (253, 'config.sys.account.registerUser', '账号自助-是否开启用户注册功能', 'Account self-service-Whether to enable the user registration function'); +INSERT INTO `sys_i18n` VALUES (254, 'config.sys.user.maxRetryCount', '用户管理-密码最大错误次数', 'User Management-Maximum number of password errors'); +INSERT INTO `sys_i18n` VALUES (255, 'config.sys.user.lockTime', '用户管理-密码锁定时间', 'User Management-Password Lock Time'); +INSERT INTO `sys_i18n` VALUES (256, 'config.monitor.sysResource.storeDays', '监控-系统资源-数据保留时长', 'Monitor-System Resources-Data retention time'); +INSERT INTO `sys_i18n` VALUES (257, 'config.sys.logo.type', '系统设置-LOGO类型', 'System Settings-Logo Type'); +INSERT INTO `sys_i18n` VALUES (258, 'config.sys.logo.filePathIcon', '系统设置-LOGO文件icon', 'System Settings-Logo File icon'); +INSERT INTO `sys_i18n` VALUES (259, 'config.sys.logo.filePathBrand', '系统设置-LOGO文件brand', 'System Settings-Logo File Brand'); +INSERT INTO `sys_i18n` VALUES (260, 'config.sys.loginBackground', '系统设置-登录界面背景', 'System Settings-Login Interface Background'); +INSERT INTO `sys_i18n` VALUES (261, 'config.sys.title', '系统设置-系统名称', 'System Settings-System Name'); +INSERT INTO `sys_i18n` VALUES (262, 'config.sys.copyright', '系统设置-版权声明', 'System Settings-Copyright Notice'); +INSERT INTO `sys_i18n` VALUES (263, 'config.sys.user.initPasswordRemark', '导入用户初始化密码', 'Import user initialization password'); +INSERT INTO `sys_i18n` VALUES (264, 'config.sys.account.captchaEnabledRemark', '是否开启验证码功能(true开启,false关闭)', 'Whether to enable the verification code function (true on, false off)'); +INSERT INTO `sys_i18n` VALUES (265, 'config.sys.account.registerUserRemark', '是否开启注册用户功能(true开启,false关闭)', 'Whether to enable the function of registered users (true on, false off)'); +INSERT INTO `sys_i18n` VALUES (266, 'config.sys.user.maxRetryCountRemark', '密码最大错误次数', 'Maximum number of password errors'); +INSERT INTO `sys_i18n` VALUES (267, 'config.sys.user.lockTimeRemark', '密码锁定时间,单位分钟(默认10分钟)', 'Password lock time in minutes (default 10 minutes)'); +INSERT 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.'); +INSERT INTO `sys_i18n` VALUES (269, 'config.sys.logo.typeRemark', '全图:brand\n小图:icon', 'Full image: brand\nSmall image: icon'); +INSERT INTO `sys_i18n` VALUES (270, 'config.sys.logo.filePathIconRemark', '文件支持网络地址图片和内部上传的文件路径', 'File support for web address images and file paths for internal uploads'); +INSERT INTO `sys_i18n` VALUES (271, 'config.sys.logo.filePathBrandRemark', '文件支持网络地址图片和内部上传的文件路径', 'File support for web address images and paths to internally uploaded files'); +INSERT 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'); +INSERT INTO `sys_i18n` VALUES (273, 'config.sys.titleRemark', '系统名称长度限制20位字符串', 'System name length limit of 20-digit string'); +INSERT INTO `sys_i18n` VALUES (274, 'config.sys.copyrightRemark', '底脚固定条,左侧放置版权声明', 'Footer fixing strip with copyright notice on the left side'); +INSERT INTO `sys_i18n` VALUES (275, 'config..export.id', '参数编号', 'ID'); +INSERT INTO `sys_i18n` VALUES (276, 'config..export.name', '参数名称', 'Config Name'); +INSERT INTO `sys_i18n` VALUES (277, 'config..export.key', '参数键名', 'Config Key'); +INSERT INTO `sys_i18n` VALUES (278, 'config..export.value', '参数键值', 'Config Value'); +INSERT INTO `sys_i18n` VALUES (279, 'config..export.type', '系统内置', 'Built In'); +INSERT INTO `sys_i18n` VALUES (280, 'config..export.remark', '参数说明', 'Config Description'); +INSERT INTO `sys_i18n` VALUES (281, 'config.sys.titleValue', '5G Core Network', '5G Core Network'); +INSERT INTO `sys_i18n` VALUES (282, 'config.sys.copyrightValue', 'Copyright ©2025 5G Core Network', 'Copyright ©2025 5G Core Network'); +INSERT INTO `sys_i18n` VALUES (283, 'config.noData', '没有可访问参数配置数据!', 'No parameter configuration data is accessible!'); +INSERT INTO `sys_i18n` VALUES (284, 'config.errKey', '无效 key', 'Invalid key'); +INSERT INTO `sys_i18n` VALUES (285, 'config.errValueEq', '变更状态与旧值相等!', 'Change state is equal to the old value!'); +INSERT INTO `sys_i18n` VALUES (286, 'config.errKeyExists', '操作参数配置【{name}】失败,参数键名已存在', 'Failed to manipulate parameter configuration [{name}], parameter key name already exists!'); +INSERT INTO `sys_i18n` VALUES (287, 'config.errDelete', '删除参数配置信息失败!', 'Deletion of parameter configuration information failed!'); +INSERT INTO `sys_i18n` VALUES (288, 'config.errType', '操作含有内置参数,禁止删除!', 'The operation contains built-in parameters and deletion is prohibited!'); +INSERT INTO `sys_i18n` VALUES (289, 'job.monitor_sys_resource', '监控-系统资源', 'Monitor-System Resources'); +INSERT INTO `sys_i18n` VALUES (290, 'job.monitor_sys_resource_remark', '系统资源CPU/IO/Netword收集\ninterval单位分钟,平均分钟资源情况\n注:请根据cron表达式的时间单位分钟,传入参数interva值', 'System Resource CPU/IO/Netword Collection\ninterval unit minutes, average minute resource situation\nNote: Please pass the value of the parameter interva according to the time unit minutes of the cron expression'); +INSERT INTO `sys_i18n` VALUES (291, 'job.delete_ne_config_backup', '删除-过期配置文件备份', 'Delete-Expired NE ETC Backup File'); +INSERT INTO `sys_i18n` VALUES (292, 'job.delete_ne_config_backup_remark', 'storeDays:表示保留最近天数的数据记录', 'storeDays: indicates that the most recent days of data records are kept.'); +INSERT INTO `sys_i18n` VALUES (293, 'job.delete_alarm_record', '删除-过期告警记录', 'Delete-Expired Alarm Records'); +INSERT INTO `sys_i18n` VALUES (294, 'job.delete_alarm_record_remark', 'storeDays:表示保留最近天数的数据记录\r\nstoreNum:保留数量,默认保留7个', 'storeDays: indicates that the most recent days of data records are kept.\r\nstoreNum: the number of reservations, the default reservation is 7.'); +INSERT INTO `sys_i18n` VALUES (295, 'job.delete_kpi_record', '删除-过期指标记录', 'Delete-Expired KPI Records'); +INSERT INTO `sys_i18n` VALUES (296, 'job.delete_kpi_record_remark', 'storeDays:表示保留最近天数的数据记录\r\nneList:表示匹配的网元类型', 'storeDays: Indicates the most recent days of data records retained\r\nneList: Indicates the type of network elements matched'); +INSERT INTO `sys_i18n` VALUES (297, 'menu.neData.backupData', '导出文件', 'Exponted File'); +INSERT INTO `sys_i18n` VALUES (298, 'config.sys.user.passwordPolicyNot', '未配置密码策略', 'Password policy not configured'); +INSERT INTO `sys_i18n` VALUES (299, 'job.export.jobID', '任务编号', 'ID'); +INSERT INTO `sys_i18n` VALUES (300, 'job.export.jobName', '任务名称', 'Name'); +INSERT INTO `sys_i18n` VALUES (301, 'job.export.jobGroupName', '任务组名', 'Group'); +INSERT INTO `sys_i18n` VALUES (302, 'job.export.invokeTarget', '调用目标', 'Invoke'); +INSERT INTO `sys_i18n` VALUES (303, 'job.export.targetParams', '传入参数', 'Incoming Parameters'); +INSERT INTO `sys_i18n` VALUES (304, 'job.export.cronExpression', 'cron表达式', 'Cron'); +INSERT INTO `sys_i18n` VALUES (305, 'job.export.status', '状态', 'Status'); +INSERT INTO `sys_i18n` VALUES (306, 'job.export.remark', '备注说明', 'Description'); +INSERT INTO `sys_i18n` VALUES (307, 'job.export.jobLogID', '任务日志编号', 'ID'); +INSERT INTO `sys_i18n` VALUES (308, 'job.export.jobLogStatus', '任务日志状态', 'Status'); +INSERT INTO `sys_i18n` VALUES (309, 'job.export.jobLogTime', '任务日志时间', 'Time'); +INSERT INTO `sys_i18n` VALUES (310, 'job.noData', '没有可访问调度任务数据!', 'There is no accessible scheduling task data!'); +INSERT INTO `sys_i18n` VALUES (311, 'job.errTargetParams', '操作调度任务【{name}】失败,任务传入参数json字符串不正确', 'Failed to operate scheduling task [{name}] with incorrect task incoming parameter json string!'); +INSERT INTO `sys_i18n` VALUES (312, 'job.errCronExpression', '操作调度任务【{name}】失败,Cron表达式不正确', 'Scheduled task [{name}] failed with incorrect Cron expression!'); +INSERT 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'); +INSERT INTO `sys_i18n` VALUES (314, 'job.statusEq', '变更状态与旧值相等!', 'The change state is equal to the old value!'); +INSERT INTO `sys_i18n` VALUES (315, 'role.system', '系统', 'System'); +INSERT INTO `sys_i18n` VALUES (316, 'role.admin', '管理人员', 'Administrator'); +INSERT INTO `sys_i18n` VALUES (317, 'role.operator', '运维人员', 'Operators'); +INSERT INTO `sys_i18n` VALUES (318, 'role.monitor', '监控人员', 'Monitor'); +INSERT INTO `sys_i18n` VALUES (319, 'role.vistor', '普通用户', 'General Users'); +INSERT INTO `sys_i18n` VALUES (320, 'role.systemRemark', '系统,无法修改删除', 'System, cannot modify or delete'); +INSERT INTO `sys_i18n` VALUES (321, 'role.adminRemark', '管理人员 可以对设备进行任何操作', 'Administrators can perform any operation on the device'); +INSERT 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.'); +INSERT INTO `sys_i18n` VALUES (323, 'role.monitorRemark', '监控人员 只能从设备读取数据,而不能对设备进行任何设置', 'Monitoring personnel Can only read data from the device, but cannot make any settings on the device'); +INSERT INTO `sys_i18n` VALUES (324, 'role.vistorRemark', '普通用户 只可看系统相关信息', 'Ordinary users can only see system-related information'); +INSERT INTO `sys_i18n` VALUES (325, 'role.export.id', '角色编号', 'Role Number'); +INSERT INTO `sys_i18n` VALUES (326, 'role.export.name', '角色名称 ', 'Role Name'); +INSERT INTO `sys_i18n` VALUES (327, 'role.export.key', '角色键值', 'Role Key'); +INSERT INTO `sys_i18n` VALUES (328, 'role.export.sort', '角色顺序', 'Role Sort'); +INSERT INTO `sys_i18n` VALUES (329, 'role.export.dataScope', '角色数据范围', 'Role Data Range'); +INSERT INTO `sys_i18n` VALUES (330, 'role.export.status', '角色状态', 'Role Status'); +INSERT INTO `sys_i18n` VALUES (331, 'role.noData', '没有可访问角色数据!', 'There is no accessible role data!'); +INSERT INTO `sys_i18n` VALUES (332, 'role.statusEq', '变更状态与旧值相等!', 'The change status is equal to the old value!'); +INSERT INTO `sys_i18n` VALUES (333, 'role.errNameExists', '操作角色【{name}】失败,角色名称已存在', 'Manipulating role [{name}] failed, role name already exists!'); +INSERT INTO `sys_i18n` VALUES (334, 'role.errKeyExists', '操作角色【{name}】失败,角色键值已存在', 'Failed to manipulate role [{name}], role key already exists!'); +INSERT INTO `sys_i18n` VALUES (335, 'post.admin', '系统', 'Systems'); +INSERT INTO `sys_i18n` VALUES (336, 'post.operator', '管理', 'Management'); +INSERT INTO `sys_i18n` VALUES (337, 'post.monitor', '运维', 'Operation & Maintenance'); +INSERT INTO `sys_i18n` VALUES (338, 'post.visitor', '监控', 'Monitoring'); +INSERT INTO `sys_i18n` VALUES (339, 'post.export.id', '岗位编号 ', 'Position Number'); +INSERT INTO `sys_i18n` VALUES (340, 'post.export.code', '岗位编码', 'Position Code'); +INSERT INTO `sys_i18n` VALUES (341, 'post.export.name', '岗位名称', 'Position Name'); +INSERT INTO `sys_i18n` VALUES (342, 'post.export.sort', '岗位排序', 'Position Sort'); +INSERT INTO `sys_i18n` VALUES (343, 'post.export.status', '岗位状态', 'Position Status'); +INSERT INTO `sys_i18n` VALUES (344, 'post.noData', '没有可访问岗位数据!', 'There is no accessible post data!'); +INSERT INTO `sys_i18n` VALUES (345, 'post.errNameExists', '操作岗位【{name}】失败,岗位名称已存在已存在', 'Failed to manipulate post [{name}], post name already exists already exists'); +INSERT INTO `sys_i18n` VALUES (346, 'post.errCodeExists', '操作角色【{name}】失败,角色键值已存在', 'Failed to manipulate role [{name}], role key already exists.'); +INSERT INTO `sys_i18n` VALUES (347, 'user.export.id', '用户编号', 'User Number'); +INSERT INTO `sys_i18n` VALUES (348, 'user.export.name', '登录账号', 'Account'); +INSERT INTO `sys_i18n` VALUES (349, 'user.export.nick', '用户昵称', 'Nick Name'); +INSERT INTO `sys_i18n` VALUES (350, 'user.export.email', '电子邮箱', 'E-Mail'); +INSERT INTO `sys_i18n` VALUES (351, 'user.export.phone', '手机号码', 'Cell phone number'); +INSERT INTO `sys_i18n` VALUES (352, 'user.export.sex', '用户性别', 'Gender'); +INSERT INTO `sys_i18n` VALUES (353, 'user.export.status', '用户状态', 'Status'); +INSERT INTO `sys_i18n` VALUES (354, 'user.export.deptID', '部门编号', 'Department number'); +INSERT INTO `sys_i18n` VALUES (355, 'user.export.deptName', '部门名称', 'Department'); +INSERT INTO `sys_i18n` VALUES (356, 'user.export.deptLeader', '部门负责人', 'Department Head'); +INSERT INTO `sys_i18n` VALUES (357, 'user.export.loginIP', '用户登录IP', 'Login Address'); +INSERT INTO `sys_i18n` VALUES (358, 'user.export.loginDate', '用户登录时间', 'Login Time'); +INSERT INTO `sys_i18n` VALUES (359, 'user.noData', '没有可访问用户数据!', 'No accessible user data!'); +INSERT INTO `sys_i18n` VALUES (360, 'user.statusEq', '变更状态与旧值相等!', 'The change status is equal to the old value!'); +INSERT INTO `sys_i18n` VALUES (361, 'user.errPasswdOld', '修改密码失败,旧密码错误', 'Change password failed, old password is wrong'); +INSERT INTO `sys_i18n` VALUES (362, 'user.errPasswdEqOld', '新密码不能与旧密码相同', 'New password cannot be the same as the old one'); +INSERT 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.'); +INSERT INTO `sys_i18n` VALUES (364, 'user.errEmailFormat', '操作用户【{name}】失败,邮箱格式错误', 'Failed to operate user [{name}], mailbox format error'); +INSERT INTO `sys_i18n` VALUES (365, 'user.errEmailExists', '操作用户【{name}】失败,邮箱已存在', 'Failed to operate user [{name}], mailbox already exists.'); +INSERT INTO `sys_i18n` VALUES (366, 'user.errPhoneFormat', '操作用户【{name}】失败,手机号码格式错误', 'Failed to operate user [{name}], cell phone number format is wrong.'); +INSERT INTO `sys_i18n` VALUES (367, 'user.errPhoneExists', '操作用户【{name}】失败,手机号码已存在', 'Failed to operate user [{name}], cell phone number already exists.'); +INSERT INTO `sys_i18n` VALUES (368, 'user.errNameExists', '操作用户【{name}】失败,登录账号已存在', 'Failed to operate user [{name}], login account already exists.'); +INSERT INTO `sys_i18n` VALUES (369, 'user.import.mustItem', '表格中必填列表项,{text}', 'Required list item in form, {text}'); +INSERT INTO `sys_i18n` VALUES (370, 'user.import.phoneExist', '用户编号:{id} 手机号码 {phone} 已存在', 'User ID: {id} cell phone number {phone} Existing'); +INSERT INTO `sys_i18n` VALUES (371, 'user.import.phoneFormat', '用户编号:{id} 手机号码 {phone} 格式错误', 'User ID: {id} cell phone number {phone} Wrong format'); +INSERT INTO `sys_i18n` VALUES (372, 'user.import.emailExist', '用户编号:{id} 用户邮箱:{email} 已存在', 'User ID: {id} User Email: {email} Existing'); +INSERT INTO `sys_i18n` VALUES (373, 'user.import.emailFormat', '用户编号:{id} 用户邮箱:{email} 格式错误', 'User ID: {id} Email: {email} Wrong Format'); +INSERT INTO `sys_i18n` VALUES (374, 'user.import.success', '用户编号:{id} 登录名称:{name} 导入成功', 'User ID:{id} Login name:{name} Imported successfully!'); +INSERT INTO `sys_i18n` VALUES (375, 'user.import.fail', '用户编号:{id} 登录名称:{name} 导入失败', 'User ID: {id} Login name: {name} Import failed'); +INSERT INTO `sys_i18n` VALUES (376, 'user.import.successUpdate', '用户编号:{id} 登录名称:{name} 更新成功', 'User ID: {id} Login name: {name} Update success'); +INSERT INTO `sys_i18n` VALUES (377, 'user.import.failUpdate', '用户编号:{id} 登录名称:{name} 更新失败', 'User ID: {id} Login Name: {name} Update Failed'); +INSERT 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:'); +INSERT INTO `sys_i18n` VALUES (379, 'user.import.successTip', '恭喜您,数据已全部导入成功!共 {num} 条,数据如下:', 'Congratulations, the data has been imported successfully! There are {num} entries with the following data:'); +INSERT INTO `sys_i18n` VALUES (380, 'app.common.err403', '无权访问 {method} {requestURI}', 'Unauthorized access {method} {requestURI}'); +INSERT INTO `sys_i18n` VALUES (381, 'app.common.err401', '无效身份授权', 'Invalid authorization'); +INSERT INTO `sys_i18n` VALUES (382, 'app.common.err400', '参数错误', 'Parameter error'); +INSERT INTO `sys_i18n` VALUES (383, 'app.common.exportEmpty', '导出数据记录为空', 'Export data record is empty'); +INSERT INTO `sys_i18n` VALUES (384, 'app.common.errOperateAdmin', '不允许操作内置用户', 'Built-in users are not allowed to operate'); +INSERT INTO `sys_i18n` VALUES (385, 'app.common.errOperateRole', '不允许操作内置角色', 'Built-in roles are not allowed to be operated'); +INSERT INTO `sys_i18n` VALUES (386, 'app.common.deleteSuccess', '删除成功:{num}', 'Deleted successfully: {num}'); +INSERT INTO `sys_i18n` VALUES (387, 'app.common.loginSuccess', '登录成功', 'Login Success'); +INSERT INTO `sys_i18n` VALUES (388, 'app.common.logoutSuccess', '注销成功', 'Logout Successful'); +INSERT INTO `sys_i18n` VALUES (389, 'app.common.errUnlock', '该用户未被锁定', 'The user is not locked'); +INSERT INTO `sys_i18n` VALUES (390, 'app.common.noLoginUser', '登录用户信息无效', 'Invalid login user information'); +INSERT INTO `sys_i18n` VALUES (391, 'app.common.rateLimitTip', '访问过于频繁,请稍候再试', 'Access too often, please try again later'); +INSERT INTO `sys_i18n` VALUES (392, 'log.operate.export.id', '操作编号', 'Log ID'); +INSERT INTO `sys_i18n` VALUES (393, 'log.operate.export.title', '模块名称', 'Module Name'); +INSERT INTO `sys_i18n` VALUES (394, 'log.operate.export.businessType', '业务类型', 'Business Type'); +INSERT INTO `sys_i18n` VALUES (395, 'log.operate.export.method', '操作方法', 'Operation Method'); +INSERT INTO `sys_i18n` VALUES (396, 'log.operate.export.requestMethod', '请求方式 ', 'Request Method'); +INSERT INTO `sys_i18n` VALUES (397, 'log.operate.export.operatorType', '操作类型', 'Operation Type'); +INSERT INTO `sys_i18n` VALUES (398, 'log.operate.export.operName', '操作人员', 'Operator'); +INSERT INTO `sys_i18n` VALUES (399, 'log.operate.export.deptName', '操作人员部门名称', 'Operator Department Name'); +INSERT INTO `sys_i18n` VALUES (400, 'log.operate.export.url', '请求链接地址', 'Request URL'); +INSERT INTO `sys_i18n` VALUES (401, 'log.operate.export.ip', '请求主机 ', 'Request Host'); +INSERT INTO `sys_i18n` VALUES (402, 'log.operate.export.location', '请求地址', 'Request Address'); +INSERT INTO `sys_i18n` VALUES (403, 'log.operate.export.param', '请求参数', 'Request Parameters'); +INSERT INTO `sys_i18n` VALUES (404, 'log.operate.export.msg', '操作信息', 'Operation Information'); +INSERT INTO `sys_i18n` VALUES (405, 'log.operate.export.status', '操作状态', 'Status'); +INSERT INTO `sys_i18n` VALUES (406, 'log.operate.export.costTime', '消耗时间(毫秒)', 'Time Consumption (ms)'); +INSERT INTO `sys_i18n` VALUES (407, 'log.operate.export.operTime', '操作时间', 'Time'); +INSERT INTO `sys_i18n` VALUES (408, 'log.login.export.id', '记录编号', 'Log ID'); +INSERT INTO `sys_i18n` VALUES (409, 'log.login.export.userName', '登录账号', 'Login Account'); +INSERT INTO `sys_i18n` VALUES (410, 'log.login.export.status', '登录状态', 'Status'); +INSERT INTO `sys_i18n` VALUES (411, 'log.login.export.ip', '登录地址', 'Login Address'); +INSERT INTO `sys_i18n` VALUES (412, 'log.login.export.location', '登录地点', 'Login Location'); +INSERT INTO `sys_i18n` VALUES (413, 'log.login.export.browser', '浏览器', 'Browser'); +INSERT INTO `sys_i18n` VALUES (414, 'log.login.export.os', '操作系统', 'Operating System'); +INSERT INTO `sys_i18n` VALUES (415, 'log.login.export.msg', '登录信息', 'Login Information'); +INSERT INTO `sys_i18n` VALUES (416, 'log.login.export.time', '登录时间', 'Login Time'); +INSERT INTO `sys_i18n` VALUES (417, 'trace.tcpdump.noData', '找不到 {type} {id} 对应网元信息', 'Can it find {type} {id} information of the corresponding network element.'); +INSERT 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.'); +INSERT INTO `sys_i18n` VALUES (419, 'login.errPasswdExpire', '登录密码已过期', 'Login password has expired'); +INSERT INTO `sys_i18n` VALUES (420, 'register.errPasswdNotEq', '用户确认输入密码不一致', 'User confirms password inconsistency'); +INSERT INTO `sys_i18n` VALUES (421, 'register.success', '注册成功', 'Successful registration'); +INSERT INTO `sys_i18n` VALUES (422, 'register.successMsg', '{name} 注册成功 {id}', '{name} Register Successful {id}'); +INSERT INTO `sys_i18n` VALUES (423, 'log.operate.title.sysJobLog', '调度任务日志', 'Scheduling Task Logs'); +INSERT INTO `sys_i18n` VALUES (424, 'log.operate.title.sysJob', '调度任务', 'Scheduling Tasks'); +INSERT INTO `sys_i18n` VALUES (425, 'log.operate.title.tcpdump', '信令抓包', 'Signaling Capture'); +INSERT INTO `sys_i18n` VALUES (426, 'log.operate.title.sysConfig', '参数配置', 'Parameter Configuration'); +INSERT INTO `sys_i18n` VALUES (427, 'log.operate.title.sysDept', '部门', 'Sector'); +INSERT INTO `sys_i18n` VALUES (428, 'log.operate.title.sysDictData', '字典数据', 'Dictionary Data'); +INSERT INTO `sys_i18n` VALUES (429, 'log.operate.title.sysDictType', '字典类型', 'Dictionary type'); +INSERT INTO `sys_i18n` VALUES (430, 'log.operate.title.sysMenu', '菜单', 'Menu'); +INSERT INTO `sys_i18n` VALUES (431, 'log.operate.title.sysPost', '岗位', 'Positions'); +INSERT INTO `sys_i18n` VALUES (432, 'log.operate.title.sysProfile', '个人信息', 'Personal Information'); +INSERT INTO `sys_i18n` VALUES (433, 'log.operate.title.sysProfileAvatar', '个人头像', 'Personal avatar'); +INSERT INTO `sys_i18n` VALUES (434, 'log.operate.title.sysRole', '角色', 'Roles'); +INSERT INTO `sys_i18n` VALUES (435, 'log.operate.title.sysUser', '用户', 'User'); +INSERT INTO `sys_i18n` VALUES (436, 'log.operate.title.sysLogOper', '操作日志记录', 'Operation Logging'); +INSERT INTO `sys_i18n` VALUES (437, 'log.operate.title.sysLogLogin', '登录日志记录', 'Operation Logging'); +INSERT INTO `sys_i18n` VALUES (438, 'login.errNameOrPasswd', '用户不存在或密码错误', 'User does not exist or password is wrong'); +INSERT INTO `sys_i18n` VALUES (439, 'login.errDelFlag', '对不起,您的账号已被删除', 'Sorry, your account has been deleted'); +INSERT INTO `sys_i18n` VALUES (440, 'login.errStatus', '对不起,您的帐户已被禁用', 'Sorry, your account has been disabled'); +INSERT INTO `sys_i18n` VALUES (441, 'login.errRetryPasswd', '密码输入错误多次,帐户已被锁定', 'Password was entered incorrectly several times, account has been locked'); +INSERT INTO `sys_i18n` VALUES (442, 'captcha.err', '验证码错误', 'Captcha Error'); +INSERT INTO `sys_i18n` VALUES (443, 'captcha.errValid', '验证码已失效', 'Captcha is invalid'); +INSERT INTO `sys_i18n` VALUES (444, 'app.common.noUaOsBrowser', '未知 未知', 'Unknown Unknown'); +INSERT INTO `sys_i18n` VALUES (445, 'app.common.noIPregion', '内网', 'Intranet'); +INSERT INTO `sys_i18n` VALUES (446, 'app.common.unknown', '未知', 'Unknown'); +INSERT INTO `sys_i18n` VALUES (447, 'app.common.noNEInfo', '未找到匹配网元信息', 'No matching network element information found'); +INSERT 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'); +INSERT INTO `sys_i18n` VALUES (449, 'ne.udm.errExportType', '导出文件类型支持CSV和txt', 'Export file types support CSV and txt'); +INSERT 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'); +INSERT INTO `sys_i18n` VALUES (451, 'log.operate.title.udmAuth', 'UDM鉴权用户', 'UDM Authentication'); +INSERT INTO `sys_i18n` VALUES (452, 'log.operate.title.udmSub', 'UDM签约用户', 'UDM Subscriber'); +INSERT INTO `sys_i18n` VALUES (453, 'dictType.active_alarm_type', '活动告警类型', 'Event Alarm Types'); +INSERT INTO `sys_i18n` VALUES (454, 'dictType.active_alarm_type_remark', '活动告警类型列表', 'List of Active Alarm Types'); +INSERT INTO `sys_i18n` VALUES (455, 'dictData.active_alarm_type.communication', '通信告警', 'Communication Alarm'); +INSERT INTO `sys_i18n` VALUES (456, 'dictData.active_alarm_type.equipment', '设备告警', 'Equipment Alarm'); +INSERT INTO `sys_i18n` VALUES (457, 'dictData.active_alarm_type.processing', '处理错误', 'Processing Failure Alarm'); +INSERT INTO `sys_i18n` VALUES (458, 'dictData.active_alarm_type.environmental', '环境告警', 'Environmental Alarm'); +INSERT INTO `sys_i18n` VALUES (459, 'dictData.active_alarm_type.qualityOfService', '服务质量', 'Quality of Service Alarm'); +INSERT INTO `sys_i18n` VALUES (460, 'dictType.active_clear_type', '告警清除类型', 'Alarm Clearing Types'); +INSERT INTO `sys_i18n` VALUES (461, 'dictType.active_clear_type_remark', '告警清除类型列表', 'List of Alarm Clearing Types'); +INSERT INTO `sys_i18n` VALUES (462, 'dictData.active_clear_type.notCleared', '告警未清除', 'Not cleared'); +INSERT INTO `sys_i18n` VALUES (463, 'dictData.active_clear_type.hand', '手动清除', 'Manually cleared'); +INSERT INTO `sys_i18n` VALUES (464, 'dictData.active_clear_type.auto', '自动清除', 'Automatically cleared'); +INSERT INTO `sys_i18n` VALUES (465, 'dictType.active_ack_state', '告警确认类型', 'Alarm Acknowledgement Types'); +INSERT INTO `sys_i18n` VALUES (466, 'dictType.active_ack_state_remark', '告警确认类型列表', 'Alarm Acknowledgement Type List'); +INSERT INTO `sys_i18n` VALUES (467, 'dictData.active_ack_state.unconfirmed', '未确认', 'Not Confirm'); +INSERT INTO `sys_i18n` VALUES (468, 'dictData.active_ack_state.confirmed', '已确认', 'Confirm'); +INSERT INTO `sys_i18n` VALUES (469, 'dictType.active_alarm_severity', '严重程度', 'Severity'); +INSERT INTO `sys_i18n` VALUES (470, 'dictType.active_alarm_severity_remark', '严重程度列表', 'Severity List'); +INSERT INTO `sys_i18n` VALUES (471, 'dictData.active_alarm_severity.critical', '严重告警', 'Critical'); +INSERT INTO `sys_i18n` VALUES (472, 'dictData.active_alarm_severity.major', '主要告警', 'Major'); +INSERT INTO `sys_i18n` VALUES (473, 'dictData.active_alarm_severity.minor', '次要告警', 'Minor'); +INSERT INTO `sys_i18n` VALUES (474, 'dictData.active_alarm_severity.warning', '警告告警', 'Warning'); +INSERT INTO `sys_i18n` VALUES (475, 'dictData.active_alarm_severity.event', '事件告警', 'Event'); +INSERT INTO `sys_i18n` VALUES (476, 'config.sys.officialUrl', '系统设置-官网链接', 'System Settings - Official Website Links'); +INSERT INTO `sys_i18n` VALUES (477, 'config.sys.helpDoc', '系统设置-系统使用文档', 'System Settings-System Documentation'); +INSERT INTO `sys_i18n` VALUES (478, 'config.sys.officialUrlRemark', '默认无地址用#号', 'Default no address with # sign'); +INSERT INTO `sys_i18n` VALUES (479, 'config.sys.helpDocRemark', '静态文件目录地址,使用{language}区分语言文件', 'Static file directory address, use {language} to distinguish language files'); +INSERT INTO `sys_i18n` VALUES (480, 'log.operate.title.neAction', '网元处理', 'Network Element Processing'); +INSERT INTO `sys_i18n` VALUES (481, 'log.operate.title.helpDoc', '系统使用文档', 'System Usage Documentation'); +INSERT INTO `sys_i18n` VALUES (482, 'menu.ueUser.n3iwf', 'N3IWF在线用户', 'N3IWF Online User'); +INSERT INTO `sys_i18n` VALUES (483, 'menu.neData.pcfSub', '用户策略控制信息', 'User PCC Information'); +INSERT INTO `sys_i18n` VALUES (484, 'menu.system.user.editRole', '修改用户角色', 'Modifying User Role'); +INSERT INTO `sys_i18n` VALUES (485, 'config.sys.i18nOpen', '国际化切换', 'Internationalization Switching'); +INSERT INTO `sys_i18n` VALUES (486, 'config.sys.i18nDefault', '国际化默认语言', 'Internationalization Default Language'); +INSERT INTO `sys_i18n` VALUES (487, 'user.export.role', '用户角色', 'Role'); +INSERT INTO `sys_i18n` VALUES (488, 'menu.system.setting.i18n', '国际化切换', 'Internationalization Switch'); +INSERT INTO `sys_i18n` VALUES (489, 'menu.system.setting.i18nRemark', '国际化多语言的切换选择', 'Internationalized multilingual switching options'); +INSERT INTO `sys_i18n` VALUES (490, 'dictType.index_status', '首页状态', 'Home Status'); +INSERT INTO `sys_i18n` VALUES (491, 'dictType.index_status_remark', '首页的网元状态颜色', 'Network element status colors on the home page'); +INSERT INTO `sys_i18n` VALUES (492, 'dictType.index_status.normal', '正常', 'Normal'); +INSERT INTO `sys_i18n` VALUES (493, 'dictType.index_status.abnormal', '异常', 'Abnormal'); +INSERT INTO `sys_i18n` VALUES (494, 'menu.log.neFile', '网元日志文件', 'NE Log File'); +INSERT INTO `sys_i18n` VALUES (495, 'menu.dashboard.overview.smfUeNum', '展示数据会话数', 'Display data session number'); +INSERT INTO `sys_i18n` VALUES (496, 'menu.dashboard.overview.imsUeNum', '展示语音会话数', 'Display the number of voice sessions'); +INSERT INTO `sys_i18n` VALUES (497, 'menu.dashboard.overview.gnbBase', '展示5G基站在线信息', 'Display 5G base station online information'); +INSERT INTO `sys_i18n` VALUES (498, 'menu.dashboard.overview.enbBase', '展示4G基站在线信息', 'Display 4G base station online information'); +INSERT INTO `sys_i18n` VALUES (499, 'job.ne_alarm_state_check', '网元告警-状态检查', 'NE Alarm-Health State Check'); +INSERT INTO `sys_i18n` VALUES (500, 'job.ne_alarm_state_check_remark', '检查网元的健康状况,在出现异常时发出警报。\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', 'Checks the health of network elements and sends alerts in case of anomalies.\n\nAlarm type:\nCommunicationAlarm=1\nEquipmentAlarm=2\nProcessingFailure=3\nEnvironmentalAlarm=4\nQualityOfServiceAlarm=5\n\nSeverity:\nCritical=1\nMajor=2\nMinor=3\nWarning=4'); +INSERT INTO `sys_i18n` VALUES (501, 'menu.neUser.nssf', 'NSSF在线订阅数', 'NSSF Subscription Info'); +INSERT INTO `sys_i18n` VALUES (502, 'menu.neUser.nssfAmf', 'NSSF可用的注册AMF', 'NSSF Available AMFs'); +INSERT INTO `sys_i18n` VALUES (503, 'menu.monitor.topology', '拓扑信息', 'Topology Info'); +INSERT INTO `sys_i18n` VALUES (504, 'menu.monitor.topologyBuild', '拓扑图组编辑', 'Topological Graph Build'); +INSERT INTO `sys_i18n` VALUES (505, 'log.operate.title.chartGraph', '拓扑图组', 'Topological Graph'); +INSERT INTO `sys_i18n` VALUES (506, 'menu.monitor.topologyArchitecture', '网元拓扑组网', 'NE System Topology'); +INSERT INTO `sys_i18n` VALUES (507, 'menu.alarm', '告警', 'Alarm'); +INSERT INTO `sys_i18n` VALUES (508, 'menu.topology', '拓扑', 'Topology'); +INSERT INTO `sys_i18n` VALUES (509, 'config.sys.lockTime', '系统设置-锁屏超时时长', 'System Settings - Screen Lock Timeout Duration'); +INSERT 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'); +INSERT INTO `sys_i18n` VALUES (511, 'sys.account.captchaType', '账号自助-验证码类型', 'Account Self Service - Captcha Type'); +INSERT INTO `sys_i18n` VALUES (512, 'sys.account.captchaTypeRemark', '使用验证码类型(math数值计算,char字符验证)', 'Using CAPTCHA types (math numeric calculation, char character validation)'); +INSERT INTO `sys_i18n` VALUES (513, 'menu.dashboard', '仪表盘', 'Dashboard'); +INSERT INTO `sys_i18n` VALUES (514, 'menu.dashboard.overview', '总览', 'Overview'); +INSERT INTO `sys_i18n` VALUES (515, 'menu.dashboard.imsCDR', '语音话单', 'Voice CDR'); +INSERT INTO `sys_i18n` VALUES (516, 'dictType.cdr_sip_code', 'IMS-Voice-SIP响应代码类别类型', 'IMS-Voice-SIP Response Code Category Type'); +INSERT INTO `sys_i18n` VALUES (517, 'dictType.cdr_call_type', 'IMS-呼叫类型', 'IMS-Call Type'); +INSERT INTO `sys_i18n` VALUES (518, 'dictType.ue_auth_code', 'UE 事件认证代码类型', 'UE Event Authentication Code Type'); +INSERT INTO `sys_i18n` VALUES (519, 'dictType.ue_event_type', 'UE 事件类型', 'UE Event Type'); +INSERT INTO `sys_i18n` VALUES (520, 'dictData.cdr_sip_code.200', '200 正常通话', '200 OK'); +INSERT INTO `sys_i18n` VALUES (521, 'dictData.cdr_sip_code.403', '403 禁止访问', '403 Forbidden'); +INSERT INTO `sys_i18n` VALUES (522, 'dictData.cdr_sip_code.408', '408 请求超时', '408 Request Timeout'); +INSERT INTO `sys_i18n` VALUES (523, 'dictData.cdr_sip_code.500', '500 内部服务器错误', '500 Internal Server Error'); +INSERT INTO `sys_i18n` VALUES (524, 'dictData.cdr_call_type.audio', '语音', 'Voice'); +INSERT INTO `sys_i18n` VALUES (525, 'dictData.cdr_call_type.video', '视频', 'Video'); +INSERT INTO `sys_i18n` VALUES (526, 'dictData.ue_auth_code.200', '成功', 'Success'); +INSERT INTO `sys_i18n` VALUES (527, 'dictData.ue_auth_code.001', '网络失败', 'Network Failure'); +INSERT INTO `sys_i18n` VALUES (528, 'dictData.ue_auth_code.002', '接口失败', 'Interface Failure'); +INSERT INTO `sys_i18n` VALUES (529, 'dictData.ue_auth_code.003', 'MAC失败', 'MAC Failure'); +INSERT INTO `sys_i18n` VALUES (530, 'dictData.ue_auth_code.004', '同步失败', 'Synchronization failure'); +INSERT INTO `sys_i18n` VALUES (531, 'dictData.ue_auth_code.005', '不接受非5G认证', 'Non-5G Authentication Not Accepted'); +INSERT INTO `sys_i18n` VALUES (532, 'dictData.ue_auth_code.006', '响应失败', 'Response Failure'); +INSERT INTO `sys_i18n` VALUES (533, 'dictData.ue_auth_code.007', '未知', 'Unknown'); +INSERT INTO `sys_i18n` VALUES (534, 'dictData.ue_event_type.auth', '认证', 'Authentication'); +INSERT INTO `sys_i18n` VALUES (535, 'dictData.ue_event_type.detach', '注销', 'Detach'); +INSERT INTO `sys_i18n` VALUES (536, 'dictData.ue_event_type.state', 'CM状态', 'CM Status'); +INSERT INTO `sys_i18n` VALUES (537, 'dictType.ue_event_cm_state', 'UE 事件CM状态', 'UE Event CM Status'); +INSERT INTO `sys_i18n` VALUES (538, 'dictData.ue_event_cm_state.connected', '连接', 'Connected'); +INSERT INTO `sys_i18n` VALUES (539, 'dictData.ue_event_cm_state.idle', '空闲', 'Idle'); +INSERT INTO `sys_i18n` VALUES (540, 'dictData.ue_event_cm_state.inactive', '不活动', 'Inactive'); +INSERT INTO `sys_i18n` VALUES (541, 'dictData.cdr_sip_code.404', '404 找不到', '404 Not Found'); +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 (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'); +INSERT INTO `sys_i18n` VALUES (549, 'cache.name.sys_dict', '字典管理', 'Dictionary Management'); +INSERT INTO `sys_i18n` VALUES (550, 'cache.name.captcha_codes', '验证码', 'Captcha'); +INSERT INTO `sys_i18n` VALUES (551, 'cache.name.repeat_submit', '防重提交', 'Resubmit'); +INSERT INTO `sys_i18n` VALUES (552, 'cache.name.rate_limit', '限流', 'Limit Traffic'); +INSERT INTO `sys_i18n` VALUES (553, 'cache.name.pwd_err_cnt', '登录账户密码错误次数', 'Number of Password Errors'); +INSERT INTO `sys_i18n` VALUES (554, 'cache.name.ne_info', '网元信息管理', 'NE Info Management'); +INSERT INTO `sys_i18n` VALUES (555, 'cache.name.ne_data', '网元数据管理', 'NE Data Management'); +INSERT INTO `sys_i18n` VALUES (556, 'dictData.cdr_call_type.sms', '短信', 'SMS'); +INSERT INTO `sys_i18n` VALUES (557, 'dictData.cdr_sip_code.202', '202 已接受', '202 Accepted'); +INSERT INTO `sys_i18n` VALUES (558, 'dictData.cdr_sip_code.488', '488 这里不接受', '488 Not Acceptable Here'); +INSERT INTO `sys_i18n` VALUES (559, 'dictData.cdr_sip_code.0', '0 原因不明', '0 Unknown Reason'); +INSERT INTO `sys_i18n` VALUES (560, 'log.operate.title.ws', 'WS会话', 'WS Sessions'); +INSERT INTO `sys_i18n` VALUES (561, 'log.operate.title.neHost', '网元主机', 'NE Host'); +INSERT INTO `sys_i18n` VALUES (562, 'neHost.noData', '没有可访问主机信息数据!', 'There is no accessible host information data!'); +INSERT INTO `sys_i18n` VALUES (563, 'neHost.errKeyExists', '主机信息操作【{name}】失败,同组内名称已存在', 'Host information operation [{name}] failed, name already exists in the same group'); +INSERT INTO `sys_i18n` VALUES (564, 'neHost.errByHostInfo', '连接失败,请检查连接参数后重试', 'Connection Failed, Please check connection parameters and retry'); +INSERT INTO `sys_i18n` VALUES (565, 'dictType.ne_host_type', '网元主机连接类型', 'Network element host connection type'); +INSERT INTO `sys_i18n` VALUES (566, 'dictType.ne_host_groupId', '网元主机分组', 'Network element host grouping'); +INSERT INTO `sys_i18n` VALUES (567, 'dictType.ne_host_authMode', '网元主机认证模式', 'Network element host authentication mode'); +INSERT INTO `sys_i18n` VALUES (568, 'dictData.ne_host_type.ssh', 'SSH', 'SSH'); +INSERT INTO `sys_i18n` VALUES (569, 'dictData.ne_host_type.telnet', 'Telnet', 'Telnet'); +INSERT INTO `sys_i18n` VALUES (570, 'dictData.ne_host_groupId.0', '其他', 'Other'); +INSERT INTO `sys_i18n` VALUES (571, 'dictData.ne_host_groupId.1', '网元', 'Network Elements'); +INSERT INTO `sys_i18n` VALUES (572, 'dictData.ne_host_groupId.2', '系统', 'System'); +INSERT INTO `sys_i18n` VALUES (573, 'dictData.ne_host_authMode.0', '密码认证', 'Password Authentication'); +INSERT INTO `sys_i18n` VALUES (574, 'dictData.ne_host_authMode.1', '私钥认证', 'Private key authentication'); +INSERT INTO `sys_i18n` VALUES (575, 'menu.tools.terminal', '主机终端', 'Host Terminal'); +INSERT INTO `sys_i18n` VALUES (576, 'menu.ne.neHost', '网元主机', 'NE Host'); +INSERT INTO `sys_i18n` VALUES (577, 'menu.ne.neHostCommand', '网元主机命令', 'NE Host CMD'); +INSERT INTO `sys_i18n` VALUES (578, 'log.operate.title.neHostCmd', '网元主机命令', 'NE Host CMD'); +INSERT INTO `sys_i18n` VALUES (579, 'neHostCmd.noData', '没有可访问主机命令数据!', 'No accessible host command data!'); +INSERT INTO `sys_i18n` VALUES (580, 'neHostCmd.errKeyExists', '主机命令操作【{name}】失败,同组内名称已存在', 'Host command operation [{name}] failed, name already exists in the same group'); +INSERT INTO `sys_i18n` VALUES (581, 'dictType.ne_host_cmd_groupId', '网元主机命令分组', 'Network element host command grouping'); +INSERT INTO `sys_i18n` VALUES (582, 'dictData.ne_host_cmd_groupId.0', '默认', 'Default'); +INSERT INTO `sys_i18n` VALUES (583, 'dictData.ne_host_cmd_groupId.1', '快速命令', 'Quick Commands'); +INSERT INTO `sys_i18n` VALUES (584, 'menu.ne.neInfo', '网元信息', 'NE Information'); +INSERT INTO `sys_i18n` VALUES (585, 'log.operate.title.neInfo', '网元信息', 'NE Information'); +INSERT INTO `sys_i18n` VALUES (586, 'neInfo.noData', '没有可访问网元信息数据!', 'There is no accessible network element information data!'); +INSERT INTO `sys_i18n` VALUES (587, 'neInfo.errKeyExists', '网元信息操作【{key}】失败,同类型下标识已存在', 'NE info operation [{key}] failed, identifier already exists under the same type'); +INSERT INTO `sys_i18n` VALUES (588, 'log.operate.title.imsCDR', '通话话单', 'Voice CDR'); +INSERT INTO `sys_i18n` VALUES (589, 'menu.dashboard.amfUE', '5G 终端事件', '5G UE Events'); +INSERT INTO `sys_i18n` VALUES (590, 'log.operate.title.amfUE', '5G 终端事件', '5G UE Events'); +INSERT INTO `sys_i18n` VALUES (591, 'dictData.ne_info_status.0', '离线', 'Offline'); +INSERT INTO `sys_i18n` VALUES (592, 'dictData.ne_info_status.1', '在线', 'Active'); +INSERT INTO `sys_i18n` VALUES (593, 'dictData.ne_info_status.2', '等待同步', 'Wait Sync'); +INSERT INTO `sys_i18n` VALUES (594, 'dictData.ne_info_status.3', '待机', 'Standby'); +INSERT INTO `sys_i18n` VALUES (595, 'dictType.ne_info_status', '网元信息状态', 'NE Info State'); +INSERT INTO `sys_i18n` VALUES (596, 'menu.ne.neQuickSetup', '网元快速安装', 'NE Quick Setup'); +INSERT INTO `sys_i18n` VALUES (597, 'log.operate.title.neConfig', '网元参数配置', 'NE Parameter Configuration'); +INSERT INTO `sys_i18n` VALUES (598, 'menu.ne.neLicense', '网元许可', 'NE License'); +INSERT INTO `sys_i18n` VALUES (599, 'log.operate.title.neLicense', '网元许可', 'NE License'); +INSERT INTO `sys_i18n` VALUES (600, 'menu.ne.neSoftware', '网元软件包', 'NE Software'); +INSERT INTO `sys_i18n` VALUES (601, 'log.operate.title.neSoftware', '网元软件包', 'NE Software'); +INSERT INTO `sys_i18n` VALUES (602, 'log.operate.title.neVersion', '网元版本', 'NE Version'); +INSERT INTO `sys_i18n` VALUES (603, 'menu.ne.neVersion', '网元版本', 'NE Version'); +INSERT INTO `sys_i18n` VALUES (604, 'dictType.ne_license_status', '网元许可状态', 'NE License Status'); +INSERT INTO `sys_i18n` VALUES (605, 'dictData.ne_license_status.0', '无效', 'Invalid'); +INSERT INTO `sys_i18n` VALUES (606, 'dictData.ne_license_status.1', '有效', 'Valid'); +INSERT INTO `sys_i18n` VALUES (607, 'menu.dashboard.mocn', 'MOCN', 'MOCN'); +INSERT INTO `sys_i18n` VALUES (608, 'menu.monitor.cdr', '话单', 'CDR'); +INSERT INTO `sys_i18n` VALUES (609, 'menu.monitor.event', '事件', 'Events'); +INSERT INTO `sys_i18n` VALUES (610, 'post.export.time', '创建时间', 'Creation Time'); +INSERT INTO `sys_i18n` VALUES (611, 'role.export.time', '创建时间', 'Creation Time'); +INSERT INTO `sys_i18n` VALUES (612, 'dictData.ne_host_authMode.2', '免密认证', 'Confidentiality Auth Mode'); +INSERT INTO `sys_i18n` VALUES (613, 'menu.ne.neConfig', '网元配置', 'NE Config'); +INSERT INTO `sys_i18n` VALUES (614, 'dictData.ne_version_status.0', '无', 'Nothing'); +INSERT INTO `sys_i18n` VALUES (615, 'dictData.ne_version_status.1', '已是最新', 'Updated'); +INSERT INTO `sys_i18n` VALUES (616, 'dictData.ne_version_status.2', '上一版本', 'Previous'); +INSERT INTO `sys_i18n` VALUES (617, 'dictData.ne_version_status.3', '有新版本', 'Has New'); +INSERT INTO `sys_i18n` VALUES (618, 'menu.fault.event', '事件通知', 'Event Notification'); +INSERT INTO `sys_i18n` VALUES (619, 'menu.dashboard.smfCDR', '数据话单', 'Data CDR'); +INSERT INTO `sys_i18n` VALUES (620, 'log.operate.title.smfCDR', '数据话单', 'Data CDR'); +INSERT INTO `sys_i18n` VALUES (621, 'config.sys.i18nDefaultRemark', '国际化默认语言可选择 en_US、zh_CN', 'Internationalization default language selectable en_US、zh_CN'); +INSERT INTO `sys_i18n` VALUES (622, 'config.sys.i18nOpenRemark', '是否显示切换的控件 true/false', 'Whether to display switched controls true/false'); +INSERT INTO `sys_i18n` VALUES (623, 'menu.dashboard.mmeUE', '4G 终端事件', '4G UE Events'); +INSERT INTO `sys_i18n` VALUES (624, 'log.operate.title.mmeUE', '4G 终端事件', '4G UE Events'); +INSERT INTO `sys_i18n` VALUES (625, 'menu.system.user.editPost', '修改用户岗位', 'Modify User Post'); +INSERT INTO `sys_i18n` VALUES (626, 'menu.dashboard.smscCDR', '短信话单', 'SMS CDR'); +INSERT INTO `sys_i18n` VALUES (627, 'log.operate.title.smscCDR', '短信话单', 'SMS CDR'); +INSERT INTO `sys_i18n` VALUES (628, 'menu.trace.pcapFile', '信令抓包文件', 'Signaling Capture File'); +INSERT INTO `sys_i18n` VALUES (629, 'menu.trace.taskAnalyze', '网元跟踪任务分析', 'NE Trace Task Analysis'); +INSERT INTO `sys_i18n` VALUES (630, 'job.ne_data_udm', '网元数据-UDM用户数据同步', 'NE Data-Sync UDM Data'); +INSERT INTO `sys_i18n` VALUES (631, 'menu.system.setting.doc', '系统使用文档', 'System User Documentation'); +INSERT INTO `sys_i18n` VALUES (632, 'menu.system.setting.official', '官网链接', 'Official Website'); +INSERT INTO `sys_i18n` VALUES (633, 'menu.system.setting.lock', '锁屏操作', 'Lockscreen Operation'); +INSERT INTO `sys_i18n` VALUES (634, 'menu.ne.neConfigBackup', '网元配置备份', 'NE Config Backups'); +INSERT INTO `sys_i18n` VALUES (635, 'job.ne_config_backup', '网元-配置文件定期备份', 'NE-Config Backup Regularly'); +INSERT INTO `sys_i18n` VALUES (636, 'job.ne_config_backup_remark', '网元配置文件定期备份到网管服务器\n可查看网元配置备份记录进行下载或通过网元信息操作导入配置', 'Network Element Configuration files are regularly backed up to the OMC\nView network element configuration backup records for downloading or importing configurations through network element information operations.'); +INSERT INTO `sys_i18n` VALUES (637, 'job.backup_export_table_sys_log_operate', '备份-操作日志表定期导出', 'Backup-Operation Log Table Periodic Export'); +INSERT INTO `sys_i18n` VALUES (638, 'job.backup_export_table_cdr_event_ims', '备份-语音话单表定期导出', 'Backup-Regular Export of voice bill forms'); +INSERT INTO `sys_i18n` VALUES (639, 'job.backup_export_table_cdr_event_smf', '备份-数据话单表定期导出', 'Backup-Regular Export of data sheet tables'); +INSERT INTO `sys_i18n` VALUES (640, 'cache.name.oauth2_codes', '客户端授权码', 'Oauth2 Client Code'); +INSERT INTO `sys_i18n` VALUES (641, 'cache.name.oauth2_devices', '客户端令牌', 'Oauth2 Token'); +-- INSERT INTO `sys_i18n` VALUES (642, 'table.cdr_event_smf', '数据话单', 'Data CDR'); +-- INSERT INTO `sys_i18n` VALUES (643, 'table.cdr_event_smsc', '短信话单', 'SMS CDR'); +INSERT INTO `sys_i18n` VALUES (644, 'menu.log.exportFile', '导出文件', 'Exported File'); +INSERT INTO `sys_i18n` VALUES (645, 'menu.perf.kpiCReport', '自定义指标数据', 'Custom Indicator Data'); +INSERT INTO `sys_i18n` VALUES (646, 'menu.trace.taskHLR', 'HLR 跟踪任务', 'HLR Trace Task'); +INSERT INTO `sys_i18n` VALUES (647, 'dictType.cdr_cause_code', 'CDR 响应原因代码类别类型', 'CDR Response Reason Code Category Type'); +INSERT INTO `sys_i18n` VALUES (648, 'dictData.cdr_cause_code.0', '未知错误', 'Unknown Error'); +INSERT INTO `sys_i18n` VALUES (649, 'dictData.cdr_cause_code.8', '运营者确定的禁止', 'Operator determined barring'); +INSERT INTO `sys_i18n` VALUES (650, 'dictData.cdr_cause_code.10', '禁止呼叫', 'Call Barred'); +INSERT INTO `sys_i18n` VALUES (651, 'dictData.cdr_cause_code.21', '呼叫被拒', 'Call rejected'); +INSERT INTO `sys_i18n` VALUES (652, 'dictData.cdr_cause_code.22', '数量已更改', 'Number changed'); +INSERT INTO `sys_i18n` VALUES (653, 'dictData.cdr_cause_code.27', '目的地出错', 'Destination out of order'); +INSERT INTO `sys_i18n` VALUES (654, 'dictData.cdr_cause_code.28', '数字格式无效(数字不完整)', 'Invalid number format (incomplete number)'); +INSERT INTO `sys_i18n` VALUES (655, 'dictData.cdr_cause_code.29', '设施被拒', 'Facility rejected'); +INSERT INTO `sys_i18n` VALUES (656, 'dictData.cdr_cause_code.30', '回复状态查询', 'Response to STATUS ENQUIRY'); +INSERT INTO `sys_i18n` VALUES (657, 'dictData.cdr_cause_code.38', '网络故障', 'Network out of order'); +INSERT INTO `sys_i18n` VALUES (658, 'dictData.cdr_cause_code.41', '临时故障', 'Temporary failure'); +INSERT INTO `sys_i18n` VALUES (659, 'dictData.cdr_cause_code.42', '交换设备拥塞', 'Switching equipment congestion'); +INSERT INTO `sys_i18n` VALUES (660, 'dictData.cdr_cause_code.47', '资源不可用', 'Resource unavailable, unspecified'); +INSERT INTO `sys_i18n` VALUES (661, 'dictData.cdr_cause_code.50', '请求的设施未订阅', 'Requested facility not subscribed'); +INSERT INTO `sys_i18n` VALUES (662, 'job.backup_export_table_cdr_event_smsc', '备份-短信话单表定期导出', 'Backup-Regular Export of SMS call list'); +INSERT INTO `sys_i18n` VALUES (663, 'job.backup_remove_file', '备份-定期删除备份目录下文件', 'Backup-Periodically Delete Directory Files'); +INSERT INTO `sys_i18n` VALUES (664, 'config.sys.homePage', '自定义主页', 'Custom Home Page'); +INSERT INTO `sys_i18n` VALUES (665, 'config.sys.homePageRemark', '选择列表中的任一页面作为主页路径', 'Select any page in the list as the homepage'); +INSERT INTO `sys_i18n` VALUES (666, 'menu.ne.neOverview', '网元概览', 'NE Overview'); +INSERT INTO `sys_i18n` VALUES (667, 'menu.ne.neOverviewRemark', '显示所有网元状态配置和license等概览信息', 'Displays overview information such as status, configuration and license of all network elements'); +INSERT INTO `sys_i18n` VALUES (668, 'job.backup_export_table_cdr_event_sgwc', '备份-漫游数据话单表定期导出', 'Backup-Regular Export of Roaming Data table'); +INSERT INTO `sys_i18n` VALUES (669, 'cache.name.i18n', '国际化语言管理', 'Internationalized Language Management'); +INSERT INTO `sys_i18n` VALUES (670, 'config.sys.user.passwordPolicy', '用户管理-默认密码策略强度', 'User Management-Default Password Policy Strength'); +INSERT INTO `sys_i18n` VALUES (671, 'config.sys.user.passwordPolicyRemark', 'minLength:密码至少8个字符\nspecialChars:至少包含2个特殊字符(例如:!@#$%^&*())\nuppercase:至少包含一个大写字母\nlowercase:至少包含一个小写字母', 'minLength: password should be at least 8 characters long\nspecialChars: at least 2 special characters (e.g. ! @#$%^&*())\nuppercase: contain at least one uppercase letter\nlowercase: contains at least one lowercase letter'); +INSERT INTO `sys_i18n` VALUES (672, 'config.sys.user.passwdExpire', '用户管理-密码有效期', 'User Management-Password Expiration Date'); +INSERT INTO `sys_i18n` VALUES (673, 'config.sys.user.passwdExpireRemark', '数值单位(小时)\nexpHours为过期时间,0表示不启用\nalertHours即将到期提醒时间', 'Numerical unit (hours) \nexpHours for the expiration time, 0 means not enabled \nalertHours upcoming expiration reminder time'); +INSERT INTO `sys_i18n` VALUES (674, 'config.sys.user.passwdNotAllowedHistory', '用户管理-不允许使用最近密码次数', 'User Management-Not Allowed Recent Passwords'); +INSERT 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'); +INSERT INTO `sys_i18n` VALUES (676, 'login.errPasswdHistory', '不允许使用最近密码', 'Recent passwords not allowed'); +INSERT INTO `sys_i18n` VALUES (677, 'log.operate.title.oauth2client', 'Oauth2客户端授权', 'Oauth2 Client Authorization'); +-- INSERT INTO `sys_i18n` VALUES (678, 'config.ne.neConfigBackupFTPRemark', '请通过配置文件备份页面进行设置FTP信息', 'Please set the FTP information through the configuration file backup page.'); +INSERT INTO `sys_i18n` VALUES (679, 'dictType.trace_msg_type', '跟踪消息类型', 'Trace Message Type'); +INSERT INTO `sys_i18n` VALUES (680, 'dictData.trace_msg_type.0', '请求', 'Request'); +INSERT INTO `sys_i18n` VALUES (681, 'dictData.trace_msg_type.1', '响应', 'Response'); +INSERT INTO `sys_i18n` VALUES (682, 'dictType.trace_msg_direct', '跟踪消息方向', 'Track Message Direction'); +INSERT INTO `sys_i18n` VALUES (683, 'dictData.trace_msg_direct.0', '接收', 'Receive'); +INSERT INTO `sys_i18n` VALUES (684, 'dictData.trace_msg_direct.1', '发送', 'Send'); +INSERT INTO `sys_i18n` VALUES (685, 'dictData.trace_interfaces.1', 'N1', 'N1'); +INSERT INTO `sys_i18n` VALUES (686, 'dictData.trace_interfaces.2', 'N2', 'N2'); +INSERT INTO `sys_i18n` VALUES (687, 'dictData.trace_interfaces.3', 'N1/N2', 'N1/N2'); +INSERT INTO `sys_i18n` VALUES (688, 'dictData.trace_interfaces.4', 'N4', 'N4'); +INSERT INTO `sys_i18n` VALUES (689, 'dictData.trace_interfaces.8', 'N8', 'N8'); +INSERT INTO `sys_i18n` VALUES (690, 'dictData.trace_interfaces.10', 'N10', 'N10'); +INSERT INTO `sys_i18n` VALUES (691, 'dictData.trace_interfaces.11', 'N11', 'N11'); +INSERT INTO `sys_i18n` VALUES (692, 'dictData.trace_interfaces.12', 'N12', 'N12'); +INSERT INTO `sys_i18n` VALUES (693, 'dictData.trace_interfaces.13', 'N13', 'N13'); +INSERT INTO `sys_i18n` VALUES (694, 'dictData.trace_interfaces.7', 'N7', 'N7'); +INSERT INTO `sys_i18n` VALUES (695, 'dictData.trace_interfaces.15', 'N15', 'N15'); +INSERT INTO `sys_i18n` VALUES (696, 'dictData.trace_interfaces.17', 'N17', 'N17'); +INSERT INTO `sys_i18n` VALUES (697, 'dictData.trace_interfaces.20', 'N20', 'N20'); +INSERT INTO `sys_i18n` VALUES (698, 'dictData.trace_interfaces.22', 'N22', 'N22'); +INSERT INTO `sys_i18n` VALUES (699, 'dictData.trace_interfaces.40', 'N40', 'N40'); +INSERT INTO `sys_i18n` VALUES (700, 'dictData.cdr_sip_code.302', '302 原因不明', '302 Unknown Reason'); +INSERT INTO `sys_i18n` VALUES (701, 'dictData.cdr_sip_code.402', '402 原因不明', '402 Unknown Reason'); +INSERT INTO `sys_i18n` VALUES (702, 'dictData.cdr_sip_code.480', '480 被叫挂断/拒接', '480 Temporarily Unavailable'); +INSERT INTO `sys_i18n` VALUES (703, 'dictData.cdr_sip_code.481', '481 原因不明', '481 Unknown Reason'); +INSERT INTO `sys_i18n` VALUES (704, 'dictData.cdr_sip_code.482', '482 发现环路', '482 Loop Detected'); +INSERT INTO `sys_i18n` VALUES (705, 'dictData.cdr_sip_code.486', '486 这里很忙', '486 Busy Here'); +INSERT INTO `sys_i18n` VALUES (706, 'dictData.cdr_sip_code.489', '489 原因不明', '489 Unknown Reason'); +INSERT INTO `sys_i18n` VALUES (707, 'dictData.cdr_sip_code.580', '580 原因不明', '580 Unknown Reason'); +INSERT INTO `sys_i18n` VALUES (708, 'alarm.export.alarmType', '告警类型', 'Alarm Type'); +INSERT INTO `sys_i18n` VALUES (709, 'alarm.export.origSeverity', '告警级别', 'Severity'); +INSERT INTO `sys_i18n` VALUES (710, 'alarm.export.alarmTitle', '告警标题', 'Alarm Title'); +INSERT INTO `sys_i18n` VALUES (711, 'alarm.export.eventTime', '告警产生时间', 'Event Time'); +INSERT INTO `sys_i18n` VALUES (712, 'alarm.export.alarmId', '告警唯一标识', 'Alarm ID'); +INSERT INTO `sys_i18n` VALUES (713, 'alarm.export.clearUser', '告警清除用户', 'Clear User'); +INSERT INTO `sys_i18n` VALUES (714, 'alarm.export.clearType', '告警清除类型', 'Clear Type'); +INSERT INTO `sys_i18n` VALUES (715, 'alarm.export.clearTime', '告警清除时间', 'Clear Time'); +INSERT INTO `sys_i18n` VALUES (716, 'log.operate.title.alarm', '告警', 'Alarm'); +INSERT INTO `sys_i18n` VALUES (717, 'ne.common.neType', '网元类型', 'NE Type'); +INSERT INTO `sys_i18n` VALUES (718, 'ne.common.neName', '网元名称', 'NE Name'); +INSERT INTO `sys_i18n` VALUES (719, 'ne.common.neId', '网元标识', 'NE ID'); +INSERT INTO `sys_i18n` VALUES (720, 'log.operate.title.udmVOIP', 'VOIP用户', 'UDM VOIP'); +INSERT INTO `sys_i18n` VALUES (721, 'log.operate.title.udmVolteIMS', 'VolteIMS用户', 'UDM VolteIMS'); +INSERT INTO `sys_i18n` VALUES (722, 'log.operate.title.backup', '备份', 'Backup'); +INSERT INTO `sys_i18n` VALUES (723, 'job.backup_export_table_cdr_event_smsc_remark', 'hour: 数据时间从任务执行时间前的小时数\ntableName: 数据表名\ncolumns: 支持字段\nbackupPath: 备份输出路径 /usr/local/omc/backup/{backupPath}', 'hour: data time from the hour before the task execution time \ntableName: data table name \ncolumns: support fields \nbackupPath: backup output path /usr/local/omc/backup/{backupPath}'); +INSERT INTO `sys_i18n` VALUES (724, 'job.backup_export_table_cdr_event_sgwc_remark', 'hour: 数据时间从任务执行时间前的小时数\ntableName: 数据表名\ncolumns: 支持字段\nbackupPath: 备份输出路径 /usr/local/omc/backup/{backupPath}', 'hour: data time from the hour before the task execution time \ntableName: data table name \ncolumns: support fields \nbackupPath: backup output path /usr/local/omc/backup/{backupPath}'); +INSERT INTO `sys_i18n` VALUES (725, 'job.backup_remove_file_remark', 'backupPath: 备份路径 /usr/local/omc/backup/{backupPath}\nstoreDays: 保留天数\nstoreNum: 保留数量,默认保留7', 'backupPath: backup path /usr/local/omc/backup/{backupPath}\nstoreDays: retention days\nstoreNum: retention number, default retention 7'); +INSERT INTO `sys_i18n` VALUES (726, 'job.backup_export_udm', '备份-UDM数据定期导出', 'Backup-Periodic export of UDM Data'); +INSERT INTO `sys_i18n` VALUES (727, 'job.backup_export_udm_remark', 'dataType: 类型支持 auth/sub/voip/volte\nfileType: 文件类型 csv/txt', 'Backup-Periodic export of dataType: type support auth/sub/voip/volte\nfileType: file type csv/txtUDM Data'); +INSERT INTO `sys_i18n` VALUES (728, 'dictData.cdr_sip_code_cause.0', '因其他原因呼叫失败', 'Call failure for other reason'); +INSERT INTO `sys_i18n` VALUES (729, 'dictData.cdr_sip_code_cause.200', '正常通话清除', 'Normal Call Clearing'); +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 (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 (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'); +INSERT INTO `sys_i18n` VALUES (743, 'dictData.cdr_sip_code_cause.500', '服务器本身出了问题', 'Something went wrong inside the server itself'); +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 (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'); + +-- 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 new file mode 100644 index 00000000..aa0f534e --- /dev/null +++ b/build/database/std/install/sys_job.sql @@ -0,0 +1,49 @@ +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for sys_job +-- ---------------------------- +DROP TABLE IF EXISTS `sys_job`; +CREATE TABLE `sys_job` ( + `job_id` bigint NOT NULL AUTO_INCREMENT COMMENT '任务ID', + `job_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '任务名称', + `job_group` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'DEFAULT' COMMENT '任务组名', + `invoke_target` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '调用目标字符串', + `target_params` varchar(2048) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '调用目标传入参数', + `cron_expression` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT 'cron执行表达式', + `misfire_policy` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '3' COMMENT '计划执行错误策略(1立即执行 2执行一次 3放弃执行)', + `concurrent` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '是否并发执行(0禁止 1允许)', + `status_flag` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '任务状态(0暂停 1正常)', + `save_log` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '是否记录任务日志(0不记录 1记录)', + `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 (`job_id`) USING BTREE, + UNIQUE INDEX `uk_name_group`(`job_name` ASC, `job_group` ASC) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 50 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '系统_调度任务调度表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sys_job +-- ---------------------------- +INSERT 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'); +INSERT INTO `sys_job` VALUES (2, 'job.ne_config_backup', 'SYSTEM', 'ne_config_backup', '', '0 30 0 * * ?', '3', '0', '1', '1', 'system', 1698478134839, 'system', 1698478134839, 'job.ne_config_backup_remark'); +INSERT 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, ''); +INSERT INTO `sys_job` VALUES (4, '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 (5, '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 (6, '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 (7, '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'); + +INSERT INTO `sys_job` VALUES (21, 'job.backup_export_table_sys_log_operate', 'SYSTEM', 'backup_export_table', '{\"hour\":1,\"columns\":[\"id\",\"title\",\"business_type\",\"opera_by\",\"opera_url_method\",\"opera_url\",\"opera_ip\",\"status\",\"opera_time\",\"cost_time\"],\"tableName\":\"sys_log_operate\",\"backupPath\":\"/log/operate_log\"}', '0 0 0/1 * * ?', '3', '0', '1', '1', 'system', 1698478134839, 'system', 1698478134839, 'job.backup_export_table_sys_log_operate_remark'); +INSERT INTO `sys_job` VALUES (22, 'job.backup_export_table_cdr_event_ims', 'SYSTEM', 'backup_export_table', '{\"hour\":1,\"columns\":[\"id\",\"record_type\",\"call_type\",\"caller_party\",\"called_party\",\"call_duration\",\"cause\",\"seizure_time\",\"release_time\"],\"tableName\":\"cdr_event_ims\",\"backupPath\":\"/cdr/ims_cdr\"}', '0 0 0/1 * * ?', '3', '0', '1', '1', 'system', 1698478134839, 'system', 1698478134839, 'job.backup_export_table_cdr_event_ims_remark'); +INSERT INTO `sys_job` VALUES (23, 'job.backup_export_table_cdr_event_smf', 'SYSTEM', 'backup_export_table', '{\"hour\":1,\"columns\":[\"id\",\"charging_id\",\"subscription_id_data\",\"subscription_id_type\",\"data_volume_uplink\",\"data_volume_downlink\",\"data_total_volume\",\"invocation_timestamp\",\"user_identifier\",\"ssc_mode\",\"dnn_id\",\"pdu_type\",\"rat_type\",\"pdu_ipv4\",\"pdu_ipv6\",\"network_function_ipv4_address\",\"record_nfId\",\"record_type\",\"record_opening_time\"],\"tableName\":\"cdr_event_smf\",\"backupPath\":\"/cdr/smf_cdr\"}', '0 0 0/1 * * ?', '3', '0', '1', '1', 'system', 1698478134839, 'system', 1698478134839, 'job.backup_export_table_cdr_event_smf_remark'); +INSERT INTO `sys_job` VALUES (24, 'job.backup_export_table_cdr_event_smsc', 'SYSTEM', 'backup_export_table', '{\"hour\":1,\"columns\":[\"id\",\"record_type\",\"service_type\",\"caller_party\",\"called_party\",\"result\",\"update_time\"],\"tableName\":\"cdr_event_smsc\",\"backupPath\":\"/cdr/smsc_cdr\"}', '0 0 0/1 * * ?', '3', '0', '1', '1', 'system', 1698478134839, 'system', 1698478134839, 'job.backup_export_table_cdr_event_smsc_remark'); +INSERT INTO `sys_job` VALUES (25, 'job.backup_export_table_cdr_event_sgwc', 'SYSTEM', 'backup_export_table', '{\"hour\":1,\"columns\":[\"charging_id\",\"served_imsi\",\"served_msisdn\",\"data_volume_gprs_uplink\",\"data_volume_gprs_downlink\",\"duration\",\"invocation_timestamp\",\"pgw_address_used\",\"sgw_address\",\"rat_type\",\"pdp_pdn_type\",\"served_pdppdn_address\",\"serving_node_address\",\"serving_node_type\",\"access_point_name_ni\",\"cause_for_rec_closing\",\"record_sequence_number\",\"local_record_sequence_number\",\"record_type\",\"record_opening_time\"],\"tableName\":\"cdr_event_sgwc\",\"backupPath\":\"/cdr/sgwc_cdr\"}', '0 0 0/1 * * ?', '3', '0', '1', '1', 'system', 1698478134839, 'system', 1698478134839, 'job.backup_export_table_cdr_event_sgwc_remark'); +INSERT INTO `sys_job` VALUES (26, 'job.backup_remove_file', 'SYSTEM', 'backup_remove_file', '[{\"backupPath\":\"/log/operate_log\",\"storeDays\":30,\"storeNum\":7},{\"backupPath\":\"/cdr/ims_cdr\",\"storeDays\":30},{\"backupPath\":\"/cdr/smf_cdr\",\"storeDays\":30},{\"backupPath\":\"/cdr/smsc_cdr\",\"storeDays\":30},{\"backupPath\":\"/cdr/sgwc_cdr\",\"storeDays\":30},{\"backupPath\":\"/udm_data/auth\",\"storeDays\":30},{\"backupPath\":\"/udm_data/sub\",\"storeDays\":30},{\"backupPath\":\"/udm_data/voip\",\"storeDays\":30},{\"backupPath\":\"/udm_data/volte\",\"storeDays\":30}]', '0 10 0 * * ?', '3', '0', '1', '1', 'system', 1698478134839, 'system', 1698478134839,'job.backup_remove_file_remark'); +INSERT INTO `sys_job` VALUES (27, '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'); + +SET FOREIGN_KEY_CHECKS = 1; + +-- Dump completed on 2025-02-14 15:26:56 diff --git a/database/install/sys_job_log.sql b/build/database/std/install/sys_job_log.sql similarity index 100% rename from database/install/sys_job_log.sql rename to build/database/std/install/sys_job_log.sql diff --git a/database/install/sys_log_login.sql b/build/database/std/install/sys_log_login.sql similarity index 91% rename from database/install/sys_log_login.sql rename to build/database/std/install/sys_log_login.sql index ed0bb5fa..33141a33 100644 --- a/database/install/sys_log_login.sql +++ b/build/database/std/install/sys_log_login.sql @@ -12,7 +12,7 @@ CREATE TABLE `sys_log_login` ( `browser` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '浏览器类型', `os` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '操作系统', `status_flag` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '登录状态(0失败 1成功)', - `msg` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '提示消息', + `msg` varchar(2048) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '提示消息', `login_time` bigint NULL DEFAULT 0 COMMENT '登录时间', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '系统_系统登录日志表' ROW_FORMAT = Dynamic; diff --git a/database/install/sys_log_operate.sql b/build/database/std/install/sys_log_operate.sql similarity index 100% rename from database/install/sys_log_operate.sql rename to build/database/std/install/sys_log_operate.sql diff --git a/build/database/std/install/sys_log_user_password.sql b/build/database/std/install/sys_log_user_password.sql new file mode 100644 index 00000000..1519d3a1 --- /dev/null +++ b/build/database/std/install/sys_log_user_password.sql @@ -0,0 +1,17 @@ +-- +-- Table structure for table `sys_log_user_password` +-- + +DROP TABLE IF EXISTS `sys_log_user_password`; +CREATE TABLE `sys_log_user_password` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID', + `user_id` bigint DEFAULT '0' COMMENT '用户ID', + `user_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '用户账号', + `password` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '密码', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '创建者', + `create_time` bigint DEFAULT '0' COMMENT '创建时间', + PRIMARY KEY (`id`) USING BTREE, + KEY `idx_id_name_time` (`user_id`,`user_name`,`create_time`) USING BTREE COMMENT '用户ID_用户名_创建时间' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='系统_用户密码变更日志表'; + +-- Dump completed on 2025-03-31 17:24:56 diff --git a/database/install/sys_menu.sql b/build/database/std/install/sys_menu.sql similarity index 64% rename from database/install/sys_menu.sql rename to build/database/std/install/sys_menu.sql index 0fb356b7..7ba981f8 100644 --- a/database/install/sys_menu.sql +++ b/build/database/std/install/sys_menu.sql @@ -31,171 +31,178 @@ CREATE TABLE `sys_menu` ( -- ---------------------------- -- Records of sys_menu -- ---------------------------- -INSERT INTO `sys_menu` VALUES (1, 'menu.system', 0, 16, 'system', '', '1', '1', 'D', '1', '1', '', 'icon-xiangmu', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.systemRemark'); -INSERT INTO `sys_menu` VALUES (4, 'menu.ne', 0, 3, 'configManage', '', '1', '0', 'D', '1', '1', '', 'icon-huizhiguize', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.configRemark'); -INSERT INTO `sys_menu` VALUES (5, 'menu.ueUser', 0, 7, 'neUser', '', '1', '0', 'D', '1', '1', '', 'icon-wocanyu', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.ueUserRemark'); -INSERT INTO `sys_menu` VALUES (60, 'menu.tools', 0, 60, 'tool', '', '1', '1', 'D', '1', '1', '', 'icon-wenjian', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.toolsRemark'); -INSERT 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, ''); -INSERT 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'); -INSERT 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, ''); -INSERT 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, ''); -INSERT 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, ''); -INSERT 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, ''); -INSERT 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'); -INSERT 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'); -INSERT 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'); -INSERT 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'); -INSERT 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'); -INSERT 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'); -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 (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'); -INSERT 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'); -INSERT 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'); -INSERT 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'); -INSERT 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'); -INSERT 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'); -INSERT 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'); -INSERT INTO `sys_menu` VALUES (1000, 'menu.common.query', 100, 1, '', '', '1', '1', 'B', '1', '1', 'system:user:query', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (1001, 'menu.common.add', 100, 2, '', '', '1', '1', 'B', '1', '1', 'system:user:add', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (1002, 'menu.common.edit', 100, 3, '', '', '1', '1', 'B', '1', '1', 'system:user:edit', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (1003, 'menu.common.delete', 100, 4, '', '', '1', '1', 'B', '1', '1', 'system:user:remove', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (1004, 'menu.common.export', 100, 5, '', '', '1', '1', 'B', '1', '1', 'system:user:export', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (1005, 'menu.common.import', 100, 6, '', '', '1', '1', 'B', '1', '1', 'system:user:import', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (1006, 'menu.common.resetPwd', 100, 7, '', '', '1', '1', 'B', '1', '1', 'system:user:resetPwd', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (1007, 'menu.common.query', 101, 1, '', '', '1', '1', 'B', '1', '1', 'system:role:query', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (1008, 'menu.common.add', 101, 2, '', '', '1', '1', 'B', '1', '1', 'system:role:add', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (1009, 'menu.common.edit', 101, 3, '', '', '1', '1', 'B', '1', '1', 'system:role:edit', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (1010, 'menu.common.delete', 101, 4, '', '', '1', '1', 'B', '1', '1', 'system:role:remove', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (1011, 'menu.common.export', 101, 5, '', '', '1', '1', 'B', '1', '1', 'system:role:export', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (1012, 'menu.common.query', 103, 1, '', '', '1', '1', 'B', '1', '1', 'system:menu:query', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (1013, 'menu.common.add', 103, 2, '', '', '1', '1', 'B', '1', '1', 'system:menu:add', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (1014, 'menu.common.edit', 103, 3, '', '', '1', '1', 'B', '1', '1', 'system:menu:edit', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (1015, 'menu.common.delete', 103, 4, '', '', '1', '1', 'B', '1', '1', 'system:menu:remove', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (1016, 'menu.common.query', 104, 1, '', '', '1', '1', 'B', '1', '1', 'system:dept:query', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (1017, 'menu.common.add', 104, 2, '', '', '1', '1', 'B', '1', '1', 'system:dept:add', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (1018, 'menu.common.edit', 104, 3, '', '', '1', '1', 'B', '1', '1', 'system:dept:edit', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (1019, 'menu.common.delete', 104, 4, '', '', '1', '1', 'B', '1', '1', 'system:dept:remove', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (1020, 'menu.common.query', 105, 1, '', '', '1', '1', 'B', '1', '1', 'system:post:query', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (1021, 'menu.common.add', 105, 2, '', '', '1', '1', 'B', '1', '1', 'system:post:add', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (1022, 'menu.common.edit', 105, 3, '', '', '1', '1', 'B', '1', '1', 'system:post:edit', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (1023, 'menu.common.delete', 105, 4, '', '', '1', '1', 'B', '1', '1', 'system:post:remove', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (1024, 'menu.common.export', 105, 5, '', '', '1', '1', 'B', '1', '1', 'system:post:export', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (1025, 'menu.common.query', 106, 1, '#', '', '1', '1', 'B', '1', '1', 'system:dict:query', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (1026, 'menu.common.add', 106, 2, '#', '', '1', '1', 'B', '1', '1', 'system:dict:add', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (1027, 'menu.common.edit', 106, 3, '#', '', '1', '1', 'B', '1', '1', 'system:dict:edit', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (1028, 'menu.common.delete', 106, 4, '#', '', '1', '1', 'B', '1', '1', 'system:dict:remove', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (1029, 'menu.common.export', 106, 5, '#', '', '1', '1', 'B', '1', '1', 'system:dict:export', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (1030, 'menu.common.query', 108, 1, '#', '', '1', '1', 'B', '1', '1', 'system:config:query', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (1031, 'menu.common.add', 108, 2, '#', '', '1', '1', 'B', '1', '1', 'system:config:add', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (1032, 'menu.common.edit', 108, 3, '#', '', '1', '1', 'B', '1', '1', 'system:config:edit', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (1033, 'menu.common.delete', 108, 4, '#', '', '1', '1', 'B', '1', '1', 'system:config:remove', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (1034, 'menu.common.export', 108, 5, '#', '', '1', '1', 'B', '1', '1', 'system:config:export', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (1039, 'menu.common.query', 500, 1, '#', '', '1', '1', 'B', '1', '1', 'system:log:operate:query', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (1040, 'menu.common.delete', 500, 2, '#', '', '1', '1', 'B', '1', '1', 'system:log:operate:remove', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (1041, 'menu.common.export', 500, 3, '#', '', '1', '1', 'B', '1', '1', 'system:log:operate:export', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (1042, 'menu.common.query', 501, 1, '#', '', '1', '1', 'B', '1', '1', 'system:log:login:query', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (1043, 'menu.common.delete', 501, 2, '#', '', '1', '1', 'B', '1', '1', 'system:log:login:remove', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (1044, 'menu.common.export', 501, 3, '#', '', '1', '1', 'B', '1', '1', 'system:log:login:export', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (1045, 'menu.common.unlock', 501, 4, '#', '', '1', '1', 'B', '1', '1', 'system:log:login:unlock', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (1046, 'menu.common.query', 114, 1, '#', '', '1', '1', 'B', '1', '1', 'monitor:cache:query', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (1047, 'menu.common.delete', 114, 2, '#', '', '1', '1', 'B', '1', '1', 'monitor:cache:remove', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (1048, 'menu.common.query', 115, 1, '#', '', '1', '1', 'B', '1', '1', 'monitor:online:query', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (1049, 'menu.forcedQuit.batch ', 115, 2, '#', '', '1', '1', 'B', '1', '1', 'monitor:online:batchLogout', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (1050, 'menu.forcedQuit.single', 115, 3, '#', '', '1', '1', 'B', '1', '1', 'monitor:online:forceLogout', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (1051, 'menu.common.query', 116, 1, '#', '', '1', '1', 'B', '1', '1', 'monitor:job:query', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (1052, 'menu.common.add', 116, 2, '#', '', '1', '1', 'B', '1', '1', 'monitor:job:add', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (1053, 'menu.common.edit', 116, 3, '#', '', '1', '1', 'B', '1', '1', 'monitor:job:edit', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -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 (2009, 'menu.ueUser.authUDM', 5, 1, 'auth', 'neUser/auth/index', '1', '1', 'M', '1', '1', 'neUser:auth:index', 'icon-xiangmuchengyuan', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.ueUser.authUDMRemark'); -INSERT INTO `sys_menu` VALUES (2010, 'menu.ueUser.subUDM', 5, 2, 'sub', 'neUser/sub/index', '1', '1', 'M', '1', '1', 'neUser:sub:index', 'icon-xiangmuchengyuan', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.ueUser.subUDMRemark'); -INSERT INTO `sys_menu` VALUES (2080, 'menu.ueUser.onlineIMS', 5, 4, 'ims', 'neUser/ims/index', '1', '0', 'M', '1', '1', 'neUser:ims:index', 'icon-xiangmuchengyuan', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.ueUser.onlineIMSRemark'); -INSERT INTO `sys_menu` VALUES (2081, 'menu.ueUser.onlineUE', 5, 6, 'ue', 'neUser/ue/index', '1', '0', 'M', '1', '1', 'neUser:ue:index', 'icon-xiangmuchengyuan', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.ueUser.onlineUERemark'); -INSERT INTO `sys_menu` VALUES (2082, 'menu.ueUser.base5G', 5, 7, 'base5G', 'neUser/base5G/index', '1', '0', 'M', '0', '1', 'neUser:base5G:index', 'icon-paixu', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.ueUser.base5GRemark'); -INSERT INTO `sys_menu` VALUES (2083, 'menu.trace', 2087, 30, 'traceManage', '', '1', '0', 'D', '1', '1', '', 'icon-paixu', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.traceRemark'); -INSERT INTO `sys_menu` VALUES (2084, 'menu.trace.task', 2083, 1, 'task', 'traceManage/task/index', '1', '0', 'M', '0', '1', 'traceManage:task:index', 'icon-chexiao', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.trace.taskRemark'); -INSERT INTO `sys_menu` VALUES (2085, 'menu.trace.analysis', 2083, 4, 'analysis', 'traceManage/analysis/index', '1', '0', 'M', '0', '1', 'traceManage:analysis:index', 'icon-gongnengjieshao', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.trace.analysisRemark'); -INSERT INTO `sys_menu` VALUES (2086, 'menu.trace.pcap', 2083, 11, 'pcap', 'traceManage/pcap/index', '1', '1', 'M', '1', '1', 'traceManage:pcap:index', 'icon-soutubiao', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.trace.pcapRemark'); -INSERT INTO `sys_menu` VALUES (2087, 'menu.fault', 0, 2, 'faultManage', '', '1', '0', 'D', '1', '1', '', 'icon-jinggao', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.faultRemark'); -INSERT INTO `sys_menu` VALUES (2088, 'menu.fault.active', 2129, 1, 'active-alarm', 'faultManage/active-alarm/index', '1', '1', 'M', '1', '1', 'faultManage:active-alarm:index', 'icon-wenjian', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.fault.activemRemark'); -INSERT INTO `sys_menu` VALUES (2089, 'menu.log', 0, 9, 'logManage', '', '1', '0', 'D', '1', '1', '', 'icon-fuzhidaima', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.logRemark'); -INSERT 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'); -INSERT 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'); -INSERT 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'); -INSERT 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'); -INSERT INTO `sys_menu` VALUES (2096, 'menu.neData.baseStation', 5, 12, 'base-station', 'ne-data/base-station/index', '1', '0', 'M', '1', '1', 'ne-data:base-station:list', 'icon-fenxiang', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT 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'); -INSERT 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'); -INSERT INTO `sys_menu` VALUES (2099, 'menu.perf', 0, 5, 'perfManage', '', '1', '0', 'D', '1', '1', '', 'icon-soutubiao', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.perfRemark'); -INSERT 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'); -INSERT 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'); -INSERT 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, ''); -INSERT 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'); -INSERT 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'); -INSERT 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'); -INSERT 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, ''); -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 (2112, 'menu.dashboard.sgwcCDR', 2140, 12, 'sgwcCDR', 'dashboard/sgwcCDR/index', '1', '0', 'M', '1', '1', 'dashboard: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'); -INSERT 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'); -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', 'dashboard: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 (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', '0', '0', 'system:setting:i18n', '#', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.system.setting.i18nRemark'); -INSERT INTO `sys_menu` VALUES (2123, 'menu.log.neFile', 2089, 9, 'neFile', 'logManage/neFile/index', '1', '0', 'M', '1', '1', 'logManage:neFile:index', 'icon-tubiaohuizhi', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (2124, 'menu.neUser.nssf', 5, 10, 'nssf', 'neUser/nssf/index', '1', '0', 'M', '0', '1', 'neUser:nssf:index', 'icon-daimayingyong', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (2125, 'menu.neUser.nssfAmf', 5, 11, 'nssfAmf', 'neUser/nssfAmf/index', '1', '0', 'M', '0', '1', 'neUser:nssfAmf:index', 'icon-paixu', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT 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, ''); -INSERT 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, ''); -INSERT 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, ''); -INSERT INTO `sys_menu` VALUES (2129, 'menu.alarm', 2087, 20, 'alarm', '', '1', '0', 'D', '1', '1', '', 'icon-jinggao', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (2130, 'menu.topology', 2087, 10, 'topology', '', '1', '0', 'D', '1', '1', '', 'icon-anzhuo', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (2131, 'menu.dashboard', 2087, 15, 'dashboard', '', '1', '1', 'D', '0', '0', '', 'icon-soutubiao', '0', 'system', 1728641403588, 'supervisor', 1742196488718, ''); -INSERT INTO `sys_menu` VALUES (2132, 'menu.dashboard.overview', 2087, 1, 'overview', 'dashboard/overview/index', '1', '0', 'M', '1', '1', 'dashboard:overview:index', 'icon-paixu', '0', 'system', 1728641403588, 'supervisor', 1742196480463, ''); -INSERT INTO `sys_menu` VALUES (2133, 'menu.dashboard.imsCDR', 2140, 3, 'imsCDR', 'dashboard/imsCDR/index', '1', '0', 'M', '1', '1', 'dashboard:cdr:index', 'icon-paixu', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT 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, ''); -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', 'dashboard:amfUE:index', 'icon-paixu', '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, ''); -INSERT 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, ''); -INSERT 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, ''); -INSERT 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, ''); -INSERT 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, ''); -INSERT 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, ''); -INSERT INTO `sys_menu` VALUES (2148, 'menu.dashboard.smfCDR', 2140, 6, 'smfCDR', 'dashboard/smfCDR/index', '1', '0', 'M', '1', '1', 'dashboard:cdr:index', 'icon-paixu', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (2149, 'menu.dashboard.mmeUE', 2141, 5, 'mmeUE', 'dashboard/mmeUE/index', '1', '0', 'M', '1', '1', 'dashboard:mmeUE:index', 'icon-paixu', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (2150, 'menu.system.user.editPost', 100, 9, '', '', '1', '1', 'B', '1', '1', 'system:user:editPost', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (2151, 'menu.system.setting.doc', 2114, 2, '', '', '1', '1', 'B', '1', '1', 'system:setting:doc', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (2152, 'menu.system.setting.official', 2114, 3, '', '', '1', '1', 'B', '1', '1', 'system:setting:official', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (2153, 'menu.system.setting.lock', 2114, 4, '', '', '1', '1', 'B', '1', '1', 'system:setting:lock', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT 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, ''); -INSERT INTO `sys_menu` VALUES (2155, 'menu.common.delete', 2154, 1, '#', '', '1', '1', 'B', '1', '1', 'ne:neConfigBackup:remove', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (2156, 'menu.common.edit', 2154, 2, '#', '', '1', '1', 'B', '1', '1', 'ne:neConfigBackup:edit', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (2157, 'menu.dashboard.smscCDR', 2140, 9, 'smscCDR', 'dashboard/smscCDR/index', '1', '0', 'M', '1', '1', 'dashboard:cdr:index', 'icon-paixu', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (2158, 'menu.trace.pcapFile', 2083, 12, 'pcap/inline/file', 'traceManage/pcap/file', '1', '1', 'M', '0', '1', 'traceManage:pcap:index', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (2159, 'menu.log.exportFile', 2089, 100, 'exportFile', 'logManage/exportFile/index', '1', '1', 'M', '1', '1', 'logManage:exportFile:index', 'icon-wenjian', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (2160, 'menu.perf.kpiCReport', 2099, 100, 'kpiCReport', 'perfManage/kpiCReport/index', '1', '0', 'M', '1', '1', 'perfManage:kpiCReport:index', 'icon-tubiaoku', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (2161, 'menu.trace.taskHLR', 2083, 6, 'taskHLR', 'traceManage/task-hlr/index', '1', '0', 'M', '0', '1', 'traceManage:taskHLR:index', 'icon-chexiao', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (2162, 'menu.trace.taskAnalyze', 2083, 2, 'task/inline/analyze', 'traceManage/task/analyze', '1', '0', 'M', '0', '1', 'traceManage:taskAnalyze:index', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (2163, 'menu.trace.tshark', 2083, 14, 'tshark', 'traceManage/tshark/index', '1', '0', 'M', '1', '1', 'traceManage:tshark:index', 'icon-gengduo', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT INTO `sys_menu` VALUES (2164, 'menu.trace.wireshark', 2083, 16, 'wireshark', 'traceManage/wireshark/index', '1', '0', 'M', '1', '1', 'traceManage:wireshark:index', 'icon-gengduo', '0', 'system', 1728641403588, 'system', 1728641403588, ''); -INSERT 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'); +INSERT INTO `sys_menu` VALUES (1, 'menu.system', 0, 16, 'system', '', '1', '1', 'D', '1', '1', '', 'icon-xiangmu', '0', 'system', 1728641403588,'system', 1728641403588, 'menu.systemRemark'); +INSERT INTO `sys_menu` VALUES (4, 'menu.ne', 0, 3, 'ne', '', '1', '0', 'D', '1', '1', '', 'icon-huizhiguize', '0', 'system', 1728641403588,'system', 1728641403588, 'menu.configRemark'); +INSERT INTO `sys_menu` VALUES (5, 'menu.ue', 0, 7, 'ue', '', '1', '0', 'D', '1', '1', '', 'icon-wocanyu', '0', 'system', 1728641403588,'system', 1728641403588, 'menu.ueRemark'); +INSERT INTO `sys_menu` VALUES (60, 'menu.tools', 0, 60, 'tool', '', '1', '1', 'D', '1', '1', '', 'icon-wenjian', '0', 'system', 1728641403588,'system', 1728641403588, 'menu.toolsRemark'); +INSERT 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, ''); +INSERT 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'); +INSERT 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, ''); +INSERT 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, ''); +INSERT 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, ''); +INSERT 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, ''); +INSERT 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'); +INSERT 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'); +INSERT 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'); +INSERT 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'); +INSERT 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'); +INSERT 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'); +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 (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'); +INSERT 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'); +INSERT 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'); +INSERT 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'); +INSERT 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'); +INSERT 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'); +INSERT 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'); +INSERT INTO `sys_menu` VALUES (1000, 'menu.common.query', 100, 1, '', '', '1', '1', 'B', '1', '1', 'system:user:query', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (1001, 'menu.common.add', 100, 2, '', '', '1', '1', 'B', '1', '1', 'system:user:add', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (1002, 'menu.common.edit', 100, 3, '', '', '1', '1', 'B', '1', '1', 'system:user:edit', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (1003, 'menu.common.delete', 100, 4, '', '', '1', '1', 'B', '1', '1', 'system:user:remove', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (1004, 'menu.common.export', 100, 5, '', '', '1', '1', 'B', '1', '1', 'system:user:export', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (1005, 'menu.common.import', 100, 6, '', '', '1', '1', 'B', '1', '1', 'system:user:import', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (1006, 'menu.common.resetPwd', 100, 7, '', '', '1', '1', 'B', '1', '1', 'system:user:resetPwd', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (1007, 'menu.common.query', 101, 1, '', '', '1', '1', 'B', '1', '1', 'system:role:query', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (1008, 'menu.common.add', 101, 2, '', '', '1', '1', 'B', '1', '1', 'system:role:add', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (1009, 'menu.common.edit', 101, 3, '', '', '1', '1', 'B', '1', '1', 'system:role:edit', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (1010, 'menu.common.delete', 101, 4, '', '', '1', '1', 'B', '1', '1', 'system:role:remove', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (1011, 'menu.common.export', 101, 5, '', '', '1', '1', 'B', '1', '1', 'system:role:export', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (1012, 'menu.common.query', 103, 1, '', '', '1', '1', 'B', '1', '1', 'system:menu:query', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (1013, 'menu.common.add', 103, 2, '', '', '1', '1', 'B', '1', '1', 'system:menu:add', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (1014, 'menu.common.edit', 103, 3, '', '', '1', '1', 'B', '1', '1', 'system:menu:edit', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (1015, 'menu.common.delete', 103, 4, '', '', '1', '1', 'B', '1', '1', 'system:menu:remove', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (1016, 'menu.common.query', 104, 1, '', '', '1', '1', 'B', '1', '1', 'system:dept:query', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (1017, 'menu.common.add', 104, 2, '', '', '1', '1', 'B', '1', '1', 'system:dept:add', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (1018, 'menu.common.edit', 104, 3, '', '', '1', '1', 'B', '1', '1', 'system:dept:edit', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (1019, 'menu.common.delete', 104, 4, '', '', '1', '1', 'B', '1', '1', 'system:dept:remove', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (1020, 'menu.common.query', 105, 1, '', '', '1', '1', 'B', '1', '1', 'system:post:query', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (1021, 'menu.common.add', 105, 2, '', '', '1', '1', 'B', '1', '1', 'system:post:add', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (1022, 'menu.common.edit', 105, 3, '', '', '1', '1', 'B', '1', '1', 'system:post:edit', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (1023, 'menu.common.delete', 105, 4, '', '', '1', '1', 'B', '1', '1', 'system:post:remove', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (1024, 'menu.common.export', 105, 5, '', '', '1', '1', 'B', '1', '1', 'system:post:export', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (1025, 'menu.common.query', 106, 1, '#', '', '1', '1', 'B', '1', '1', 'system:dict:query', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (1026, 'menu.common.add', 106, 2, '#', '', '1', '1', 'B', '1', '1', 'system:dict:add', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (1027, 'menu.common.edit', 106, 3, '#', '', '1', '1', 'B', '1', '1', 'system:dict:edit', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (1028, 'menu.common.delete', 106, 4, '#', '', '1', '1', 'B', '1', '1', 'system:dict:remove', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (1029, 'menu.common.export', 106, 5, '#', '', '1', '1', 'B', '1', '1', 'system:dict:export', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (1030, 'menu.common.query', 108, 1, '#', '', '1', '1', 'B', '1', '1', 'system:config:query', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (1031, 'menu.common.add', 108, 2, '#', '', '1', '1', 'B', '1', '1', 'system:config:add', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (1032, 'menu.common.edit', 108, 3, '#', '', '1', '1', 'B', '1', '1', 'system:config:edit', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (1033, 'menu.common.delete', 108, 4, '#', '', '1', '1', 'B', '1', '1', 'system:config:remove', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (1034, 'menu.common.export', 108, 5, '#', '', '1', '1', 'B', '1', '1', 'system:config:export', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (1039, 'menu.common.query', 500, 1, '#', '', '1', '1', 'B', '1', '1', 'system:log:operate:query', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (1040, 'menu.common.delete', 500, 2, '#', '', '1', '1', 'B', '1', '1', 'system:log:operate:remove', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (1041, 'menu.common.export', 500, 3, '#', '', '1', '1', 'B', '1', '1', 'system:log:operate:export', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (1042, 'menu.common.query', 501, 1, '#', '', '1', '1', 'B', '1', '1', 'system:log:login:query', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (1043, 'menu.common.delete', 501, 2, '#', '', '1', '1', 'B', '1', '1', 'system:log:login:remove', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (1044, 'menu.common.export', 501, 3, '#', '', '1', '1', 'B', '1', '1', 'system:log:login:export', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (1045, 'menu.common.unlock', 501, 4, '#', '', '1', '1', 'B', '1', '1', 'system:log:login:unlock', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (1046, 'menu.common.query', 114, 1, '#', '', '1', '1', 'B', '1', '1', 'monitor:cache:query', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (1047, 'menu.common.delete', 114, 2, '#', '', '1', '1', 'B', '1', '1', 'monitor:cache:remove', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (1048, 'menu.common.query', 115, 1, '#', '', '1', '1', 'B', '1', '1', 'monitor:online:query', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (1049, 'menu.forcedQuit.batch ', 115, 2, '#', '', '1', '1', 'B', '1', '1', 'monitor:online:batchLogout', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (1050, 'menu.forcedQuit.single', 115, 3, '#', '', '1', '1', 'B', '1', '1', 'monitor:online:forceLogout', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (1051, 'menu.common.query', 116, 1, '#', '', '1', '1', 'B', '1', '1', 'monitor:job:query', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (1052, 'menu.common.add', 116, 2, '#', '', '1', '1', 'B', '1', '1', 'monitor:job:add', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (1053, 'menu.common.edit', 116, 3, '#', '', '1', '1', 'B', '1', '1', 'monitor:job:edit', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +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 (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, ''); +INSERT INTO `sys_menu` VALUES (2003, 'menu.neData.udmVolte', 5, 7, 'udm-volte', 'neData/udm-volte/index', '1', '0', 'M', '1', '1', 'udm:volte:list', 'icon-xiangmuchengyuan', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT 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, ''); +INSERT 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, ''); +INSERT 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, ''); +INSERT 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, ''); +INSERT INTO `sys_menu` VALUES (2008, 'menu.ueUser.n3iwf', 5, 20, 'n3iwf', 'neUser/n3iwf/index', '1', '0', 'M', '0', '1', 'neUser:n3iwf:index', 'icon-paixu', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT 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, ''); +INSERT INTO `sys_menu` VALUES (2010, 'menu.neUser.nssf', 5, 26, 'nssf', 'neUser/nssf/index', '1', '0', 'M', '0', '1', 'neUser:nssf:index', 'icon-daimayingyong', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (2011, 'menu.neUser.nssfAmf', 5, 28, 'nssfAmf', 'neUser/nssfAmf/index', '1', '0', 'M', '0', '1', 'neUser:nssfAmf:index', 'icon-paixu', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (2083, 'menu.trace', 2087, 30, 'traceManage', '', '1', '0', 'D', '1', '1', '', 'icon-paixu', '0', 'system', 1728641403588,'system', 1728641403588, 'menu.traceRemark'); +INSERT INTO `sys_menu` VALUES (2084, 'menu.trace.task', 2083, 1, 'task', 'traceManage/task/index', '1', '0', 'M', '1', '1', 'traceManage:task:index', 'icon-chexiao', '0', 'system', 1728641403588, 'system', 1744453890548, 'menu.trace.taskRemark'); +INSERT INTO `sys_menu` VALUES (2085, 'menu.trace.taskData', 2083, 4, 'task/inline/data', 'traceManage/task/data', '1', '0', 'M', '0', '1', 'traceManage:task:data', '#', '0', 'system', 1728641403588, 'system', 1744453921381, ''); +INSERT INTO `sys_menu` VALUES (2086, 'menu.trace.pcap', 2083, 11, 'pcap', 'traceManage/pcap/index', '1', '1', 'M', '1', '1', 'traceManage:pcap:index', 'icon-soutubiao', '0', 'system', 1728641403588,'system', 1728641403588, 'menu.trace.pcapRemark'); +INSERT INTO `sys_menu` VALUES (2087, 'menu.fault', 0, 2, 'faultManage', '', '1', '0', 'D', '1', '1', '', 'icon-jinggao', '0', 'system', 1728641403588,'system', 1728641403588, 'menu.faultRemark'); +INSERT INTO `sys_menu` VALUES (2088, 'menu.fault.active', 2129, 1, 'active-alarm', 'faultManage/active-alarm/index', '1', '1', 'M', '1', '1', 'faultManage:active-alarm:index', 'icon-wenjian', '0', 'system', 1728641403588,'system', 1728641403588, 'menu.fault.activemRemark'); +INSERT INTO `sys_menu` VALUES (2089, 'menu.log', 0, 9, 'logManage', '', '1', '0', 'D', '1', '1', '', 'icon-fuzhidaima', '0', 'system', 1728641403588,'system', 1728641403588, 'menu.logRemark'); +INSERT 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'); +INSERT 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'); +INSERT 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'); +INSERT 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'); +INSERT 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, ''); +INSERT 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'); +INSERT 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'); +INSERT INTO `sys_menu` VALUES (2099, 'menu.perf', 0, 5, 'perfManage', '', '1', '0', 'D', '1', '1', '', 'icon-soutubiao', '0', 'system', 1728641403588,'system', 1728641403588, 'menu.perfRemark'); +INSERT 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'); +INSERT 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'); +INSERT 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, ''); +INSERT 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'); +INSERT 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'); +INSERT 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'); +INSERT 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, ''); +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 (2112, 'menu.dashboard.sgwcCDR', 2140, 12, 'sgwcCDR', 'dashboard/sgwcCDR/index', '1', '0', 'M', '1', '1', 'dashboard: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'); +INSERT 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'); +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', 'dashboard: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 (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, ''); +-- INSERT INTO `sys_menu` VALUES (2124, 'menu.neUser.nssf', 5, 10, 'nssf', 'neUser/nssf/index', '1', '0', 'M', '0', '1', 'neUser:nssf:index', 'icon-daimayingyong', '0', 'system', 1728641403588,'system', 1728641403588, ''); +-- INSERT INTO `sys_menu` VALUES (2125, 'menu.neUser.nssfAmf', 5, 11, 'nssfAmf', 'neUser/nssfAmf/index', '1', '0', 'M', '0', '1', 'neUser:nssfAmf:index', 'icon-paixu', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT 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, ''); +INSERT 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, ''); +INSERT 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, ''); +INSERT INTO `sys_menu` VALUES (2129, 'menu.alarm', 2087, 20, 'alarm', '', '1', '0', 'D', '1', '1', '', 'icon-jinggao', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (2130, 'menu.topology', 2087, 10, 'topology', '', '1', '0', 'D', '1', '1', '', 'icon-anzhuo', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (2131, 'menu.dashboard', 2087, 15, 'dashboard', '', '1', '0', 'D', '0', '0', '', 'icon-soutubiao', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (2132, 'menu.dashboard.overview', 2087, 1, 'overview', 'dashboard/overview/index', '1', '0', 'M', '1', '1', 'dashboard:overview:index', 'icon-paixu', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (2133, 'menu.dashboard.imsCDR', 2140, 3, 'imsCDR', 'dashboard/imsCDR/index', '1', '0', 'M', '1', '1', 'dashboard:cdr:index', 'icon-paixu', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT 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, ''); +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', 'dashboard:amfUE:index', 'icon-paixu', '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, ''); +INSERT 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, ''); +INSERT 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, ''); +INSERT 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, ''); +INSERT 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, ''); +INSERT 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, ''); +INSERT INTO `sys_menu` VALUES (2148, 'menu.dashboard.smfCDR', 2140, 6, 'smfCDR', 'dashboard/smfCDR/index', '1', '0', 'M', '1', '1', 'dashboard:cdr:index', 'icon-paixu', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (2149, 'menu.dashboard.mmeUE', 2141, 5, 'mmeUE', 'dashboard/mmeUE/index', '1', '0', 'M', '1', '1', 'dashboard:mmeUE:index', 'icon-paixu', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (2150, 'menu.system.user.editPost', 100, 9, '', '', '1', '1', 'B', '1', '1', 'system:user:editPost', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (2151, 'menu.system.setting.doc', 2114, 2, '', '', '1', '1', 'B', '1', '1', 'system:setting:doc', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (2152, 'menu.system.setting.official', 2114, 3,'', '', '1', '1', 'B', '1', '1', 'system:setting:official', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (2153, 'menu.system.setting.lock', 2114, 4, '', '', '1', '1', 'B', '1', '1', 'system:setting:lock', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT 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, ''); +INSERT INTO `sys_menu` VALUES (2155, 'menu.common.delete', 2154, 1, '#', '', '1', '1', 'B', '1', '1', 'ne:neConfigBackup:remove', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (2156, 'menu.common.edit', 2154, 2, '#', '', '1', '1', 'B', '1', '1', 'ne:neConfigBackup:edit', '#', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (2157, 'menu.dashboard.smscCDR', 2140, 9, 'smscCDR', 'dashboard/smscCDR/index', '1', '0', 'M', '1', '1', 'dashboard:cdr:index', 'icon-paixu', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT 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, ''); +INSERT 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, ''); +INSERT INTO `sys_menu` VALUES (2160, 'menu.perf.kpiCReport', 2099, 100, 'kpiCReport', 'perfManage/kpiCReport/index', '1', '0', 'M', '1', '1', 'perfManage:kpiCReport:index', 'icon-tubiaoku', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (2161, 'menu.trace.taskHLR', 2083, 6, 'taskHLR', 'traceManage/task-hlr/index', '1', '0', 'M', '0', '1', 'traceManage:taskHLR:index', 'icon-chexiao', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (2162, 'menu.trace.taskAnalyze', 2083, 2, 'task/inline/analyze', 'traceManage/task/analyze', '1', '0', 'M', '0', '1', 'traceManage:task:analyze', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (2163, 'menu.trace.tshark', 2083, 14, 'tshark', 'traceManage/tshark/index', '1', '0', 'M', '1', '1', 'traceManage:tshark:index', 'icon-gengduo', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT INTO `sys_menu` VALUES (2164, 'menu.trace.wireshark', 2083, 16, 'wireshark', 'traceManage/wireshark/index', '1', '0', 'M', '1', '1', 'traceManage:wireshark:index', 'icon-gengduo', '0', 'system', 1728641403588,'system', 1728641403588, ''); +INSERT 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'); INSERT INTO `sys_menu` VALUES (2166, 'menu.dashboard.overview.smfUeNum', 2132, 4, '', '', '1', '1', 'B', '1', '1', 'dashboard:overview:smfUeNum', '#', '0', 'system', 1728641403588, 'system', 1728641403588, ''); 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, ''); diff --git a/database/install/sys_post.sql b/build/database/std/install/sys_post.sql similarity index 100% rename from database/install/sys_post.sql rename to build/database/std/install/sys_post.sql diff --git a/database/install/sys_role.sql b/build/database/std/install/sys_role.sql similarity index 100% rename from database/install/sys_role.sql rename to build/database/std/install/sys_role.sql diff --git a/database/install/sys_role_dept.sql b/build/database/std/install/sys_role_dept.sql similarity index 100% rename from database/install/sys_role_dept.sql rename to build/database/std/install/sys_role_dept.sql diff --git a/build/database/std/install/sys_role_menu.sql b/build/database/std/install/sys_role_menu.sql new file mode 100644 index 00000000..455e1f03 --- /dev/null +++ b/build/database/std/install/sys_role_menu.sql @@ -0,0 +1,200 @@ +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for sys_role_menu +-- ---------------------------- +DROP TABLE IF EXISTS `sys_role_menu`; +CREATE TABLE `sys_role_menu` ( + `role_id` bigint(20) NOT NULL COMMENT '角色ID', + `menu_id` bigint(20) NOT NULL COMMENT '菜单ID', + PRIMARY KEY (`role_id`, `menu_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '系统_角色和菜单关联表' ROW_FORMAT = Dynamic; + +-- +-- Dumping data for table `sys_role_menu` +-- + +LOCK TABLES `sys_role_menu` WRITE; + +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 4); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 5); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 60); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 61); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 65); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 66); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 100); +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, 111); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 116); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 117); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1000); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1001); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1002); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1003); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1004); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1005); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1006); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1007); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1008); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1009); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1010); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1011); +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, 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, 2000); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2001); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2002); +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, 2083); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2084); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2086); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2087); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2088); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2089); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2092); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2094); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2096); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2097); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2099); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2102); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2107); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2109); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2113); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2114); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2116); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2117); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2118); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2121); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2122); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2123); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2126); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2128); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2129); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2130); +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, 2140); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2141); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2143); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2145); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2146); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2147); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2148); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2150); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2151); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2152); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2153); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2154); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2155); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2156); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2157); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2158); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2159); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2162); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2163); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2164); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2165); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2166); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2167); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2168); + +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 4); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 5); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 60); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 65); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 66); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2000); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2001); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2002); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2003); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2004); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2005); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2007); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2009); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2083); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2086); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2087); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2088); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2089); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2092); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2094); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 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, 2114); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2116); +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); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2129); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2130); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2132); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2133); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2137); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2138); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2140); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2141); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2143); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2146); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2147); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2148); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2151); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2152); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2157); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2158); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2165); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2166); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2167); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2168); + +INSERT IGNORE INTO `sys_role_menu` VALUES (4, 4); +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, 2097); +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, 2126); +INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2128); +INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2129); +INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2130); +INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2132); +INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2133); +INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2138); +INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2140); +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, 2157); +INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2165); +INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2166); +INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2167); +INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2168); + +INSERT IGNORE INTO `sys_role_menu` VALUES (5, 4); +INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2087); +INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2126); +INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2130); +INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2165); + +UNLOCK TABLES; + +-- Dump completed on 2025-02-14 15:26:56 diff --git a/database/install/sys_user.sql b/build/database/std/install/sys_user.sql similarity index 87% rename from database/install/sys_user.sql rename to build/database/std/install/sys_user.sql index 869f7fd5..7a237952 100644 --- a/database/install/sys_user.sql +++ b/build/database/std/install/sys_user.sql @@ -16,6 +16,8 @@ CREATE TABLE `sys_user` ( `password` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '密码', `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 '密码更新时间', + `login_count` bigint NULL DEFAULT 0 COMMENT '登录次数', `login_ip` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '最后登录IP', `login_time` bigint NULL DEFAULT 0 COMMENT '最后登录时间', `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', @@ -32,10 +34,10 @@ CREATE 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', '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', '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', '127.0.0.1', 0, 'system', 0, '', 0, ''); -INSERT INTO `sys_user` VALUES (4, 100, 'monitor', 'monitor', '', '', '0', '', '$2a$10$t3zpKQ0olECotFyI1yO43.tCoS0EXoSRBDcqwl09xvrsmn14qFHHy', '1', '0', '127.0.0.1', 0, 'system', 0, '', 0, ''); +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; diff --git a/database/install/sys_user_post.sql b/build/database/std/install/sys_user_post.sql similarity index 100% rename from database/install/sys_user_post.sql rename to build/database/std/install/sys_user_post.sql diff --git a/database/install/sys_user_role.sql b/build/database/std/install/sys_user_role.sql similarity index 100% rename from database/install/sys_user_role.sql rename to build/database/std/install/sys_user_role.sql diff --git a/build/database/std/install/trace_data.sql b/build/database/std/install/trace_data.sql new file mode 100644 index 00000000..299cf01b --- /dev/null +++ b/build/database/std/install/trace_data.sql @@ -0,0 +1,25 @@ +-- +-- Table structure for table `trace_data` +-- + +DROP TABLE IF EXISTS `trace_data`; +CREATE TABLE `trace_data` ( + `id` int NOT NULL AUTO_INCREMENT, + `trace_id` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '跟踪任务ID', + `imsi` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'UE类型 IMSI', + `msisdn` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'UE类型 可能存在', + `src_addr` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '源地址', + `dst_addr` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '目标地址', + `if_type` varchar(16) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '接口类型,未分类', + `msg_type` int DEFAULT NULL COMMENT '消息类型,0-req, 1-rsp', + `msg_direct` int DEFAULT NULL COMMENT '消息方向,0-recv,1-send', + `msg_ne` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '消息网元', + `msg_event` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '消息事件,e.g: CreateContextReq', + `length` int DEFAULT NULL COMMENT '原始数据byte长度', + `timestamp` bigint DEFAULT '0' COMMENT '纳秒时间戳', + `raw_msg` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '原始数据byteBase64', + PRIMARY KEY (`id`) USING BTREE, + KEY `idx_task_id_time` (`trace_id`,`timestamp`) COMMENT '任务DI时间' +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='跟踪_任务数据'; + +-- Dump completed on 2025-04-14 14:26:59 diff --git a/database/install/trace_task.sql b/build/database/std/install/trace_task.sql similarity index 63% rename from database/install/trace_task.sql rename to build/database/std/install/trace_task.sql index 6f4c4668..ea5ca574 100644 --- a/database/install/trace_task.sql +++ b/build/database/std/install/trace_task.sql @@ -6,26 +6,20 @@ DROP TABLE IF EXISTS `trace_task`; CREATE TABLE `trace_task` ( `id` int NOT NULL AUTO_INCREMENT COMMENT 'ID', `trace_id` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '任务编号', - `trace_type` varchar(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '1-Interface,2-Device,3-User', + `trace_type` varchar(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '1-Interface,2-Device,3-UE', `start_time` bigint DEFAULT '0' COMMENT '开始时间 毫秒', `end_time` bigint DEFAULT '0' COMMENT '结束时间 毫秒', `interfaces` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '接口跟踪必须 例如 N8,N10', `imsi` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '用户跟踪必须', `msisdn` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '用户跟踪可选', - `ue_ip` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '设备跟踪必须 IP', `src_ip` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '源地址IP', `dst_ip` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '目标地址IP', - `signal_port` int DEFAULT '0' COMMENT '地址IP端口', `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '创建者', `create_time` bigint DEFAULT '0' COMMENT '创建时间', - `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '更新者', - `update_time` bigint DEFAULT '0' COMMENT '更新时间', `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '备注', - `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元类型', - `ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元ID', - `notify_url` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '信息数据通知回调地址UDP 例如udp:192.168.5.58:29500', - `fetch_msg` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '任务下发请求响应消息', + `ne_list` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元列表 neType_neId 例如 UDM_001,AMF_001', + `notify_url` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '信息数据通知回调地址UDP 例如udp:192.168.5.58:33033', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='跟踪_任务'; +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='跟踪_任务'; --- Dump completed on 2024-09-19 14:26:59 +-- Dump completed on 2025-04-14 14:26:59 diff --git a/database/install/trace_task_hlr.sql b/build/database/std/install/trace_task_hlr.sql similarity index 100% rename from database/install/trace_task_hlr.sql rename to build/database/std/install/trace_task_hlr.sql diff --git a/database/install/udm_auth.sql b/build/database/std/install/udm_auth.sql similarity index 100% rename from database/install/udm_auth.sql rename to build/database/std/install/udm_auth.sql diff --git a/database/install/udm_extend.sql b/build/database/std/install/udm_extend.sql similarity index 100% rename from database/install/udm_extend.sql rename to build/database/std/install/udm_extend.sql diff --git a/database/install/udm_sub.sql b/build/database/std/install/udm_sub.sql similarity index 100% rename from database/install/udm_sub.sql rename to build/database/std/install/udm_sub.sql diff --git a/build/database/std/install/udm_voip.sql b/build/database/std/install/udm_voip.sql new file mode 100644 index 00000000..37837eea --- /dev/null +++ b/build/database/std/install/udm_voip.sql @@ -0,0 +1,15 @@ +-- +-- Table structure for table `udm_voip` +-- + +DROP TABLE IF EXISTS `udm_voip`; +CREATE TABLE `udm_voip` ( + `id` int NOT NULL AUTO_INCREMENT COMMENT '主键', + `ne_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'UDM网元标识', + `username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '用户名', + `password` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '密码', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE KEY `uk_voip_user_ne` (`username`,`ne_id`) USING BTREE COMMENT 'user_neid唯一主键' +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='UDM用户数据_VOIP'; + +-- Dump completed on 2025-04-22 15:26:56 diff --git a/build/database/std/install/udm_volte_ims.sql b/build/database/std/install/udm_volte_ims.sql new file mode 100644 index 00000000..b2debc57 --- /dev/null +++ b/build/database/std/install/udm_volte_ims.sql @@ -0,0 +1,18 @@ +-- +-- Table structure for table `udm_volte_ims` +-- + +DROP TABLE IF EXISTS `udm_volte_ims`; +CREATE TABLE `udm_volte_ims` ( + `id` int NOT NULL AUTO_INCREMENT COMMENT '主键', + `imsi` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'SIM卡/USIM卡ID', + `msisdn` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '用户电话号码', + `ne_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'UDM网元标识', + `tag` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '0=VoIP, 1=VoLTE', + `vni` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'VNI', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE KEY `uk_volte_imsi_ne` (`imsi`,`msisdn`,`ne_id`) USING BTREE COMMENT 'imsi_msisdn_neid唯一主键', + KEY `idx_volte_tag` (`tag`) USING BTREE COMMENT 'tag索引' +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='UDM用户数据_VolteIMS用户'; + +-- Dump completed on 2025-04-22 15:26:56 diff --git a/database/install/ue_event.sql b/build/database/std/install/ue_event.sql similarity index 100% rename from database/install/ue_event.sql rename to build/database/std/install/ue_event.sql diff --git a/database/install/ue_event_amf.sql b/build/database/std/install/ue_event_amf.sql similarity index 100% rename from database/install/ue_event_amf.sql rename to build/database/std/install/ue_event_amf.sql diff --git a/database/install/ue_event_mme.sql b/build/database/std/install/ue_event_mme.sql similarity index 100% rename from database/install/ue_event_mme.sql rename to build/database/std/install/ue_event_mme.sql diff --git a/database/install/zinstall.sql b/build/database/std/install/zinstall.sql similarity index 100% rename from database/install/zinstall.sql rename to build/database/std/install/zinstall.sql diff --git a/database/upgrade/zupgrade.sql b/build/database/std/upgrade/zupgrade.sql similarity index 100% rename from database/upgrade/zupgrade.sql rename to build/database/std/upgrade/zupgrade.sql diff --git a/build/default/omc.conf b/build/default/omc.conf new file mode 100644 index 00000000..a3bb118e --- /dev/null +++ b/build/default/omc.conf @@ -0,0 +1,9 @@ +## Command Configuration + +### omc ba +VENDORS=ba + +### std lite +MODE=lite + +## Other diff --git a/config/etc/default/restconf.yaml b/build/default/omc.yaml similarity index 69% rename from config/etc/default/restconf.yaml rename to build/default/omc.yaml index db965bd1..26686b84 100644 --- a/config/etc/default/restconf.yaml +++ b/build/default/omc.yaml @@ -1,43 +1,92 @@ +# server version: std/lite +serverVersion: "lite" +# operation mode system/docker +# serverMode: "system" +# login authentication, default true +# serverLoginAuth: true +# interface encryption, default false +# serverCryptoApi: false + + +# 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 + schema: http + - ipv4: 0.0.0.0 + ipv6: "" + port: 33443 + 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 +webServer: + enabled: true + 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 + + +# track configuration for NE +trace: + enabled: false + host: "172.16.5.100" # fill in the specific IP address + port: 33033 + + +# data source +database: + # default data source name + defaultDataSourceName: "lite" + # dataSource: + # # std: standard + # std: + # type: "mysql" + # host: "127.0.0.1" + # port: 3306 + # username: "" + # password: "" + # database: "" + # logging: false + # # lite: lite + # lite: + # type: "sqlite" + # database: "" + # logging: false + + +# redis cached data +redis: + # default data source name + defaultDataSourceName: "default" + # dataSource: + # default: + # port: 6379 # port + # host: "127.0.0.1" # host + # password: "" + # db: 10 # db_num + + # 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: /usr/local/omc/log/restagent.log + file: /var/log/omc_restagent.log level: warn duration: 24 count: 90 -# rest agent listen ipv4/v6 and port, support multiple routines -# ip: 0.0.0.0 or ::0, support IPv4/v6 -# clientAuthType: 0:NoClientCert (default), 1:RequestClientCert, 2:RequireAnyClientCert, -# 3:VerifyClientCertIfGiven, 4:RequireAndVerifyClientCerts -rest: - - ipv4: 0.0.0.0 - ipv6: - port: 33080 - - ipv4: 0.0.0.0 - ipv6: - port: 33443 - schema: https - clientAuthType: 0 - caFile: /usr/local/omc/etc/certs/omc-ca.crt - certFile: /usr/local/omc/etc/certs/omc-server.crt - keyFile: /usr/local/omc/etc/certs/omc-server.key - -webServer: - enabled: true - rootDir: /usr/local/omc/htdocs/front - listen: - - addr: :44080 - schema: http - - addr: :44443 - schema: https - clientAuthType: 0 - caFile: /usr/local/omc/etc/certs/omc-ca.crt - certFile: /usr/local/omc/etc/certs/omc-server.crt - keyFile: /usr/local/omc/etc/certs/omc-server.key - # sleep: time delay for after write buffer (millisecond) # deadLine: timeout for io read and write (second) mml: @@ -48,12 +97,6 @@ mml: bufferSize: 65535 mmlHome: ./mmlhome -# Tracking configuration -trace: - enabled: false - host: "127.0.0.100" # Fill in the specific IP address - port: 33033 - # NE config ne: user: omcuser diff --git a/build/default/omc_db.sqlite b/build/default/omc_db.sqlite new file mode 100644 index 00000000..e69de29b diff --git a/config/etc/default/sshsvc.yaml b/build/default/sshsvc.yaml similarity index 93% rename from config/etc/default/sshsvc.yaml rename to build/default/sshsvc.yaml index 414c397e..cf555d98 100644 --- a/config/etc/default/sshsvc.yaml +++ b/build/default/sshsvc.yaml @@ -3,7 +3,7 @@ # duration: rotation time with xx hours, example: 1/12/24 hours # count: rotation count of log, default is 30 rotation logger: - file: /usr/local/omc/log/sshsvc.log + file: /var/log/omc_sshsvc.log level: warn duration: 24 count: 30 @@ -13,7 +13,7 @@ logger: # count: rotation count of log, default is 30 rotation # level: cmd/ret log cmd/log cmd & result logmml: - file: /usr/local/omc/mmllog/omcmml.log + file: /var/log/omc_mml.log duration: 24 count: 30 level: cmd @@ -24,7 +24,7 @@ logmml: sshd: listenAddr: 0.0.0.0 listenPort: 32222 - privateKey: /usr/local/omc/.ssh/id_rsa + privateKey: /root/.ssh/id_rsa maxConnNum: 2 timeout: 1800 session: multiple diff --git a/build/vendor/ba/database/lite/install/customized.sql b/build/vendor/ba/database/lite/install/customized.sql new file mode 100644 index 00000000..af9d74f8 --- /dev/null +++ b/build/vendor/ba/database/lite/install/customized.sql @@ -0,0 +1,12 @@ +-- sys_config +UPDATE `sys_config` SET `config_value` = 'https://www.bluearcus.com' WHERE `config_id` = 6; +UPDATE `sys_config` SET `config_value` = 'false' WHERE `config_id` = 28; +UPDATE `sys_config` SET `config_value` = 'en_US' WHERE `config_id` = 29; + +-- sys_i18n +UPDATE `sys_i18n` SET `value_zh` = 'BlueArcus EMS', `value_en` = 'BlueArcus EMS' WHERE `id` = 281; +UPDATE `sys_i18n` SET `value_zh` = 'Copyright ©2025 BlueArcus', `value_en` = 'Copyright ©2025 BlueArcus' WHERE `id` = 282; + +-- set internationalization switching to ON +UPDATE `sys_menu` SET `status_flag` = '0' WHERE `menu_id` = 2122; +DELETE FROM `sys_role_menu` WHERE `menu_id` = 2122; diff --git a/build/vendor/ba/database/lite/upgrade/zupgrade.sql b/build/vendor/ba/database/lite/upgrade/zupgrade.sql new file mode 100644 index 00000000..e69de29b diff --git a/build/vendor/ba/database/std/install/customized.sql b/build/vendor/ba/database/std/install/customized.sql new file mode 100644 index 00000000..af9d74f8 --- /dev/null +++ b/build/vendor/ba/database/std/install/customized.sql @@ -0,0 +1,12 @@ +-- sys_config +UPDATE `sys_config` SET `config_value` = 'https://www.bluearcus.com' WHERE `config_id` = 6; +UPDATE `sys_config` SET `config_value` = 'false' WHERE `config_id` = 28; +UPDATE `sys_config` SET `config_value` = 'en_US' WHERE `config_id` = 29; + +-- sys_i18n +UPDATE `sys_i18n` SET `value_zh` = 'BlueArcus EMS', `value_en` = 'BlueArcus EMS' WHERE `id` = 281; +UPDATE `sys_i18n` SET `value_zh` = 'Copyright ©2025 BlueArcus', `value_en` = 'Copyright ©2025 BlueArcus' WHERE `id` = 282; + +-- set internationalization switching to ON +UPDATE `sys_menu` SET `status_flag` = '0' WHERE `menu_id` = 2122; +DELETE FROM `sys_role_menu` WHERE `menu_id` = 2122; diff --git a/build/vendor/ba/database/std/upgrade/zupgrade.sql b/build/vendor/ba/database/std/upgrade/zupgrade.sql new file mode 100644 index 00000000..e69de29b diff --git a/build/vendor/ba/static/helpDoc/en_doc.pdf b/build/vendor/ba/static/helpDoc/en_doc.pdf new file mode 100644 index 00000000..257e76ba Binary files /dev/null and b/build/vendor/ba/static/helpDoc/en_doc.pdf differ diff --git a/build/vendor/ba/static/logo/en_brand.png b/build/vendor/ba/static/logo/en_brand.png new file mode 100644 index 00000000..5d04ab3c Binary files /dev/null and b/build/vendor/ba/static/logo/en_brand.png differ diff --git a/build/vendor/ba/static/logo/en_icon.png b/build/vendor/ba/static/logo/en_icon.png new file mode 100644 index 00000000..8ba330ea Binary files /dev/null and b/build/vendor/ba/static/logo/en_icon.png differ diff --git a/build/vendor/ba/web/dark.jpg b/build/vendor/ba/web/dark.jpg new file mode 100644 index 00000000..5daea143 Binary files /dev/null and b/build/vendor/ba/web/dark.jpg differ diff --git a/build/vendor/ba/web/light.jpg b/build/vendor/ba/web/light.jpg new file mode 100644 index 00000000..5daea143 Binary files /dev/null and b/build/vendor/ba/web/light.jpg differ diff --git a/build/vendor/omc/database/lite/install/customized.sql b/build/vendor/omc/database/lite/install/customized.sql new file mode 100644 index 00000000..6b1faf30 --- /dev/null +++ b/build/vendor/omc/database/lite/install/customized.sql @@ -0,0 +1,11 @@ +-- sys_config +UPDATE `sys_config` SET `config_value` = 'https://www.omc.com' WHERE `config_id` = 6; +UPDATE `sys_config` SET `config_value` = 'true' WHERE `config_id` = 28; +UPDATE `sys_config` SET `config_value` = 'en_US' WHERE `config_id` = 29; + +-- sys_i18n +UPDATE `sys_i18n` SET `value_zh` = 'OMC', `value_en` = 'OMC' WHERE `id` = 281; +UPDATE `sys_i18n` SET `value_zh` = 'Copyright ©2024 OMC', `value_en` = 'Copyright ©2024 OMC' WHERE `id` = 282; + +-- set internationalization switching to ON +UPDATE `sys_menu` SET `status_flag` = '1' WHERE `menu_id` = 2122; diff --git a/build/vendor/omc/database/lite/upgrade/zupgrade.sql b/build/vendor/omc/database/lite/upgrade/zupgrade.sql new file mode 100644 index 00000000..e69de29b diff --git a/build/vendor/omc/database/std/install/customized.sql b/build/vendor/omc/database/std/install/customized.sql new file mode 100644 index 00000000..34df6a62 --- /dev/null +++ b/build/vendor/omc/database/std/install/customized.sql @@ -0,0 +1,11 @@ +-- sys_config +UPDATE `sys_config` SET `config_value` = '#' WHERE `config_id` = 6; +UPDATE `sys_config` SET `config_value` = 'true' WHERE `config_id` = 28; +UPDATE `sys_config` SET `config_value` = 'en_US' WHERE `config_id` = 29; + +-- sys_i18n +UPDATE `sys_i18n` SET `value_zh` = '5G Core Network', `value_en` = '5G Core Network' WHERE `id` = 281; +UPDATE `sys_i18n` SET `value_zh` = 'Copyright ©2025 5G Core Network', `value_en` = 'Copyright ©2025 5G Core Network' WHERE `id` = 282; + +-- set internationalization switching to ON +UPDATE `sys_menu` SET `status_flag` = '1' WHERE `menu_id` = 2122; diff --git a/build/vendor/omc/database/std/upgrade/zupgrade.sql b/build/vendor/omc/database/std/upgrade/zupgrade.sql new file mode 100644 index 00000000..e69de29b diff --git a/build/vendor/omc/static/helpDoc/en_doc.pdf b/build/vendor/omc/static/helpDoc/en_doc.pdf new file mode 100644 index 00000000..257e76ba Binary files /dev/null and b/build/vendor/omc/static/helpDoc/en_doc.pdf differ diff --git a/build/vendor/omc/static/helpDoc/zh_doc.pdf b/build/vendor/omc/static/helpDoc/zh_doc.pdf new file mode 100644 index 00000000..9e2eee23 Binary files /dev/null and b/build/vendor/omc/static/helpDoc/zh_doc.pdf differ diff --git a/build/vendor/omc/static/logo/en_brand.png b/build/vendor/omc/static/logo/en_brand.png new file mode 100644 index 00000000..c5d39e40 Binary files /dev/null and b/build/vendor/omc/static/logo/en_brand.png differ diff --git a/build/vendor/omc/static/logo/en_icon.png b/build/vendor/omc/static/logo/en_icon.png new file mode 100644 index 00000000..6fb8d2b5 Binary files /dev/null and b/build/vendor/omc/static/logo/en_icon.png differ diff --git a/build/vendor/omc/static/logo/zh_brand.png b/build/vendor/omc/static/logo/zh_brand.png new file mode 100644 index 00000000..c5d39e40 Binary files /dev/null and b/build/vendor/omc/static/logo/zh_brand.png differ diff --git a/build/vendor/omc/static/logo/zh_icon.png b/build/vendor/omc/static/logo/zh_icon.png new file mode 100644 index 00000000..6fb8d2b5 Binary files /dev/null and b/build/vendor/omc/static/logo/zh_icon.png differ diff --git a/build/vendor/omc/web/dark.jpg b/build/vendor/omc/web/dark.jpg new file mode 100644 index 00000000..1b64e7df Binary files /dev/null and b/build/vendor/omc/web/dark.jpg differ diff --git a/build/vendor/omc/web/light.jpg b/build/vendor/omc/web/light.jpg new file mode 100644 index 00000000..10141832 Binary files /dev/null and b/build/vendor/omc/web/light.jpg differ diff --git a/config/.ssh/id_rsa b/config/.ssh/id_rsa deleted file mode 100644 index b9e6a0e2..00000000 --- a/config/.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/config/.ssh/id_rsa.pub b/config/.ssh/id_rsa.pub deleted file mode 100644 index 93e845fa..00000000 --- a/config/.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/config/.ssh/private_key.pem b/config/.ssh/private_key.pem deleted file mode 100644 index b9e6a0e2..00000000 --- a/config/.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/config/cm/cm-amf.yaml b/config/cm/cm-amf.yaml deleted file mode 100644 index 319a85f6..00000000 --- a/config/cm/cm-amf.yaml +++ /dev/null @@ -1,49 +0,0 @@ -ManagedElement: - Id: "" - UserLabel: "" - VendorName: "" - ManagedBy: "" - ManagementIpAddress: "" - SwVersion: "" - PatchInfo: "" - AdministrativeState: "" - OperationalState: "" - -AmfFunction: - Id: "" - UserLabel: "" - AdministrativeState: "" - OperationalState: "" - VnfInstanceId: "" - Fqdn: "" - SbiServiceList: "" - AmfGuamiList: "" - SnssaiList: "" - MaxUser: "" - RelativeCapacity: "" - MaxGnbNum: "" - -EpRpDynN8Amf: - Id: "" - UserLabel: "" - LocIpAddrList: "" - FarIpSubnetworkList: "" - -EpRpDynN11Amf: - Id: "" - UserLabel: "" - LocIpAddrList: "" - FarIpSubnetworkList: "" - -EpRpDynN12Amf: - Id: "" - UserLabel: "" - LocIpAddrList: "" - FarIpSubnetworkList: "" - -IPResource: - Id: "" - UserLabel: "" - InterfaceType: "" - LocIpV4AddrList: "" - LocIpV6AddrList: "" diff --git a/config/cm/cm-smf.yaml b/config/cm/cm-smf.yaml deleted file mode 100644 index a1ad3736..00000000 --- a/config/cm/cm-smf.yaml +++ /dev/null @@ -1,48 +0,0 @@ -ManagedElement: - Id: "" - UserLabel: "" - VendorName: "" - ManagedBy: "" - ManagementIpAddress: "" - SwVersion: "" - PatchInfo: "" - AdministrativeState: "" - OperationalState: "" - -SmfFunction: - Id: "" - UserLabel: "" - AdministrativeState: "" - OperationalState: "" - VnfInstanceId: "" - Fqdn: "" - SbiServiceList: "" - MaxPduSessions: "" - MaxQfi: "" - UpfList: "" - -AddrPool: - Id: "" - UserLabel: "" - AddrType: "Static" - IpVersion: "" - AddrSegList: "" - -EpRpDynN7Smf: - Id: "" - UserLabel: "" - LocIpAddrList: "" - FarIpSubnetworkList: "" - -EpRpDynN10Smf: - Id: "" - UserLabel: "" - LocIpAddrList: "" - FarIpSubnetworkList: "" - -IPResource: - Id: "" - UserLabel: "" - InterfaceType: "" - LocIpV4AddrList: "" - LocIpV6AddrList: "" \ No newline at end of file diff --git a/config/cm/cm-udm.yaml b/config/cm/cm-udm.yaml deleted file mode 100644 index 5e823ae5..00000000 --- a/config/cm/cm-udm.yaml +++ /dev/null @@ -1,39 +0,0 @@ -ManagedElement: - Id: "" - UserLabel: "" - VendorName: "" - ManagedBy: "" - ManagementIpAddress: "" - SwVersion: "" - PatchInfo: "" - AdministrativeState: "" - OperationalState: "" - -UdmFunction: - Id: "" - UserLabel: "" - AdministrativeState: "" - OperationalState: "" - VnfInstanceId: "" - Fqdn: "" - SbiServiceList: "" - -UdrFunction: - Id: "" - UserLabel: "" - AddrType: "Static" - IpVersion: "" - AddrSegList: "" - -AusfFunction: - Id: "" - UserLabel: "" - LocIpAddrList: "" - FarIpSubnetworkList: "" - -IPResource: - Id: "" - UserLabel: "" - InterfaceType: "" - LocIpV4AddrList: "" - LocIpV6AddrList: "" \ No newline at end of file diff --git a/config/cm/cm-upf.yaml b/config/cm/cm-upf.yaml deleted file mode 100644 index d291c686..00000000 --- a/config/cm/cm-upf.yaml +++ /dev/null @@ -1,141 +0,0 @@ -ManagedElement: - Id: "" - UserLabel: "" - VendorName: "" - ManagedBy: "" - ManagementIpAddress: "" - SwVersion: "" - PatchInfo: "" - AdministrativeState: "" - OperationalState: "" - -InventoryUnitRack: - Id: "" - UserLabel: "" - AdministrativeState: "" - OperationalState: "" - VnfInstanceId: "" - Fqdn: "" - SbiServiceList: "" - MaxPduSessions: "" - MaxQfi: "" - UpfList: "" - -InventoryUnitShelf: - Id: "" - UserLabel: "" - VendorUnitFamilyType: "" - VendorUnitTypeNumber: "" - VendorName: "" - SerialNumber: "" - VersionNumber: "" - DateOfManufacture: "" - DateOfLastService: "" - ManufacturerData: "" - RackPosition: "" - -InventoryUnitPack: - Id: "" - UserLabel: "" - VendorUnitFamilyType: "" - VendorUnitTypeNumber: "" - VendorName: "" - SerialNumber: "" - VersionNumber: "" - DateOfManufacture: "" - DateOfLastService: "" - ManufacturerData: "" - PortsInformation: "" - PackPosition: "" - SlotsOccupied: "" - -InventoryUnitHost: - Id: "" - UserLabel: "" - VendorUnitFamilyType: "" - VendorUnitTypeNumber: "" - VendorName: "" - SerialNumber: "" - VersionNumber: "" - DateOfManufacture: "" - DateOfLastService: "" - ManufacturerData: "" - HostPosition: "" - NumberOfCpu: "" - MemSize: "" - HardDiskSize: "" - -InventoryUnitAccessory: - Id: "" - UserLabel: "" - VendorUnitFamilyType: "" - VendorUnitTypeNumber: "" - VendorName: "" - SerialNumber: "" - VersionNumber: "" - DateOfManufacture: "" - DateOfLastService: "" - ManufacturerData: "" - AccessoryPosition: "" - AccessoryType: "" - AddtionalInformation: "" - -UpfFunction: - Id: "" - UserLabel: "" - AdministrativeState: "" - OperationalState: "" - VnfInstanceId: "" - MaxQosFlows: "" - MaxThroughput: "" - -EpRpDynN9Upf: - Id: "" - UserLabel: "" - LocIpAddrList: "" - FarIpSubnetworkList: "" - -EpRpDynN3Upf: - Id: "" - UserLabel: "" - LocIpAddrList: "" - FarIpSubnetworkList: "" - -AmfFunction: - Id: "" - UserLabel: "" - AdministrativeState: "" - OperationalState: "" - VnfInstanceId: "" - Fqdn: "" - -SmfFunction: - Id: "" - UserLabel: "" - AdministrativeState: "" - OperationalState: "" - VnfInstanceId: "" - Fqdn: "" - -UdrFunction: - Id: "" - UserLabel: "" - AdministrativeState: "" - OperationalState: "" - VnfInstanceId: "" - Fqdn: "" - -AusfFunction: - Id: "" - UserLabel: "" - AdministrativeState: "" - OperationalState: "" - VnfInstanceId: "" - Fqdn: "" - -IPResource: - Id: "" - UserLabel: "" - InterfaceType: "" - LocIpV4AddrList: "" - LocIpV6AddrList: "" diff --git a/config/cmxls/AMF-NRM(V1.1.5)-Company-Version00.xlsx b/config/cmxls/AMF-NRM(V1.1.5)-Company-Version00.xlsx deleted file mode 100644 index 71d35c1a..00000000 Binary files a/config/cmxls/AMF-NRM(V1.1.5)-Company-Version00.xlsx and /dev/null differ diff --git a/config/cmxls/PCF-NRM(V1.1.4)-Company-Version00.xlsx b/config/cmxls/PCF-NRM(V1.1.4)-Company-Version00.xlsx deleted file mode 100644 index ac800b5c..00000000 Binary files a/config/cmxls/PCF-NRM(V1.1.4)-Company-Version00.xlsx and /dev/null differ diff --git a/config/cmxls/SMF-NRM(V1.2.1)-Company-Version00.xlsx b/config/cmxls/SMF-NRM(V1.2.1)-Company-Version00.xlsx deleted file mode 100644 index ac1ec4c8..00000000 Binary files a/config/cmxls/SMF-NRM(V1.2.1)-Company-Version00.xlsx and /dev/null differ diff --git a/config/cmxls/UDM-NRM(V1.2.2)-Company-Version00.xlsx b/config/cmxls/UDM-NRM(V1.2.2)-Company-Version00.xlsx deleted file mode 100644 index a15f7c51..00000000 Binary files a/config/cmxls/UDM-NRM(V1.2.2)-Company-Version00.xlsx and /dev/null differ diff --git a/config/cmxls/UPF-NRM(V1.2.1)-Company-Version00.xlsx b/config/cmxls/UPF-NRM(V1.2.1)-Company-Version00.xlsx deleted file mode 100644 index 2e1fbf95..00000000 Binary files a/config/cmxls/UPF-NRM(V1.2.1)-Company-Version00.xlsx and /dev/null differ diff --git a/config/etc/certs/omc-server.crt b/config/etc/certs/omc-server.crt deleted file mode 100644 index bb91ed0b..00000000 --- a/config/etc/certs/omc-server.crt +++ /dev/null @@ -1,23 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDxTCCAq2gAwIBAgIUJLpIo8eueW/in9CvXZdr3oAVVJwwDQYJKoZIhvcNAQEL -BQAwcjELMAkGA1UEBhMCQVUxDDAKBgNVBAgMA09NQzERMA8GA1UEBwwIT01DLVRl -YW0xITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDEMMAoGA1UECwwD -T01DMREwDwYDVQQDDAhPTUMtVGVhbTAeFw0yNTAzMTQwNzQ2MTNaFw0yNjAzMTQw -NzQ2MTNaMHIxCzAJBgNVBAYTAkFVMQwwCgYDVQQIDANPTUMxETAPBgNVBAcMCE9N -Qy1UZWFtMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxDDAKBgNV -BAsMA09NQzERMA8GA1UEAwwIT01DLVRlYW0wggEiMA0GCSqGSIb3DQEBAQUAA4IB -DwAwggEKAoIBAQDbSyUIbKefOlKStnr+rRwVlkr1IXdMsXmmEV9zoapXDz4j4N0H -9pzEkpwvxbP+r5186CfKzueHBNc7HWinm4wSCDR6exaxG3YGODxMuLnKGPtG2tml -XBf7USeiMGNKYEF/KWmjjIPw4/9P+6qdIuneX7i0AdGynJI+3JPDT8Iwky2Cm5B4 -LRJTSJMfHO0ayrWPDoUCvKIst8w9GkFLjsbZU+AppjWj0rYWc04Oci7zqoUiFeBh -mnQKbCVrlZ4i2CKwgfuxQV2ieSkQ0QoTAXDjocrL/mRmnpvoH0jB2np3OfVlEPBP -pR4q71vuUNkra/F4zPQRPUlqemfo8+4/k3TPAgMBAAGjUzBRMB0GA1UdDgQWBBTN -+1JjU2yWzQMeSMzS5HItc4WMHDAfBgNVHSMEGDAWgBTN+1JjU2yWzQMeSMzS5HIt -c4WMHDAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBZV5RfuZ2R -0Nhs05apqwFFg8k0vJ26KMXr0i6YnlKpksEYqjXqmB58qHze6sOy7h3248FyTFlC -5YWWwwOAMiPjiH4NKMnqTthdUA4kiZiGs92jB4U/GS3lHTpsXzNssvQ8Dys7zKoj -HxnJlYpT8F6/waPPRakuP657BAVux5aAloRtqd6kGV3Donp4DwEmhdZpn6Q12igw -/+m1e9Xhxiv++H+OXzTXLerQOuUkTzKw7Ajj3hY93SeX6DOONMmoyuV1undxbvWp -lVZXo9iTGfrMkiyKF75LUyBRvvd7K5MVXJwxu0l5rvnpn6/aO1+2BUCf1ldd9VEw -DSbfrW2FfOmc ------END CERTIFICATE----- diff --git a/config/etc/certs/omc-server.key b/config/etc/certs/omc-server.key deleted file mode 100644 index 0e2c6add..00000000 --- a/config/etc/certs/omc-server.key +++ /dev/null @@ -1,28 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDbSyUIbKefOlKS -tnr+rRwVlkr1IXdMsXmmEV9zoapXDz4j4N0H9pzEkpwvxbP+r5186CfKzueHBNc7 -HWinm4wSCDR6exaxG3YGODxMuLnKGPtG2tmlXBf7USeiMGNKYEF/KWmjjIPw4/9P -+6qdIuneX7i0AdGynJI+3JPDT8Iwky2Cm5B4LRJTSJMfHO0ayrWPDoUCvKIst8w9 -GkFLjsbZU+AppjWj0rYWc04Oci7zqoUiFeBhmnQKbCVrlZ4i2CKwgfuxQV2ieSkQ -0QoTAXDjocrL/mRmnpvoH0jB2np3OfVlEPBPpR4q71vuUNkra/F4zPQRPUlqemfo -8+4/k3TPAgMBAAECggEACunzfuGBeiWPRH6md77/0yc2tc/OPdfmA64rqk0/yrNs -gUvzVC524OWhtlLy7AMA0IhGqrZKGZMpGb0TSfwuKBuWbl4VOV1Hg3Rls9/MXKg0 -9p11EDYZeh2GM8aQD9HjO0PsCQK48lKL5gbSwp1L4bsGg0Galna/ueHad3GkatcL -aSlFnnvzk4glAxT093F43lAxS463iPX7ueG/2322z0Ib+c6wGEFRcoYNI0/2Ax/u -6UdWxuHUs+7gDLcVa9FN7vx1UBoqAu49WlCfmtvzDTDyK7xLWlvKCx3O8uSLv4aw -/YMRg/yTulUj0dqIUcs/u/UN6AJc8Xk0H+rTpTfgcQKBgQDyq+FFvtG2xm2Ig0/9 -BLRdXPM4VgyokPxOL+j9H7LJfrjdz0cnGEuoOfBT8hDX2zFgC6dqAESSnAbPVQJP -6PaYJ8UtOWhwNUAfpRlid1/Y3iDRHWOirjeMKZRh6xN95m21FVbJUg6LfxTf8HWA -OgNwPsfjPL1Jdinw+OX++EvTBwKBgQDnVo5vRBqnLJl85Q7WXQFqjW9j7S1P8ZVL -JmAyNHlpdaNCF2VD164qDQEAi2FDLeDgV5UnAxOeDh/0Z0a3ncp8QLUkwqksBqwa -dhsUF5Jf0Dy3EjiP2w6FsTYanKGuTtV44ovlFTtXL1SSn2ijMVS17YmJgz6LhJbE -wvry6Vd1+QKBgAN7/k8PD1nNfZMhN4vNfn18sS1U5vegpU7GF1VTGDEWdbcRm9bu -3V87/bxm1GEVD59ua2f1OwbT4LEnalIVaT0EDSu6EErUKOiLaVLlneWyQsxd3Klg -UQHdMvk4892x6k9YUBex6u2L1JPmkvlVW+lHrX0QyTL91FpWaI8Bp60PAoGBAMR/ -hh7Gl2kWfg1TNyYn+9L47fvP8yQrjOc3YpBieBp2/MRfwPk+U0aOoyJGQchhSNjm -K9/mQhyH3Oapbqz6j4q5H+RooG+v/zG+zkNjvkY6R8gs5vRyWkR/APjbwI2hkrvK -mo9sWGo23rxoQOYVOeIKMUAnxdGWPsZE5Am+4DZpAoGBAJAF8MP5SlNRSF6zM3Lw -Qf5CQjsyXhll+A/ueOf1iQ+8r7xdxa6dNtcTcOZVVDsbXIBJ4/3HGTLfQCcGrhLN -KK9wljtkiYJ0h6IqcXnhp69uRV4SKRInyVEjNkiBotBPu5y6CYz5MAXFdM87q7jO -ehVc6QGJ9vLnfnwEFbAMArmv ------END PRIVATE KEY----- diff --git a/config/etc/certs/omc-web.crt b/config/etc/certs/omc-web.crt deleted file mode 100644 index bb91ed0b..00000000 --- a/config/etc/certs/omc-web.crt +++ /dev/null @@ -1,23 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDxTCCAq2gAwIBAgIUJLpIo8eueW/in9CvXZdr3oAVVJwwDQYJKoZIhvcNAQEL -BQAwcjELMAkGA1UEBhMCQVUxDDAKBgNVBAgMA09NQzERMA8GA1UEBwwIT01DLVRl -YW0xITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDEMMAoGA1UECwwD -T01DMREwDwYDVQQDDAhPTUMtVGVhbTAeFw0yNTAzMTQwNzQ2MTNaFw0yNjAzMTQw -NzQ2MTNaMHIxCzAJBgNVBAYTAkFVMQwwCgYDVQQIDANPTUMxETAPBgNVBAcMCE9N -Qy1UZWFtMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxDDAKBgNV -BAsMA09NQzERMA8GA1UEAwwIT01DLVRlYW0wggEiMA0GCSqGSIb3DQEBAQUAA4IB -DwAwggEKAoIBAQDbSyUIbKefOlKStnr+rRwVlkr1IXdMsXmmEV9zoapXDz4j4N0H -9pzEkpwvxbP+r5186CfKzueHBNc7HWinm4wSCDR6exaxG3YGODxMuLnKGPtG2tml -XBf7USeiMGNKYEF/KWmjjIPw4/9P+6qdIuneX7i0AdGynJI+3JPDT8Iwky2Cm5B4 -LRJTSJMfHO0ayrWPDoUCvKIst8w9GkFLjsbZU+AppjWj0rYWc04Oci7zqoUiFeBh -mnQKbCVrlZ4i2CKwgfuxQV2ieSkQ0QoTAXDjocrL/mRmnpvoH0jB2np3OfVlEPBP -pR4q71vuUNkra/F4zPQRPUlqemfo8+4/k3TPAgMBAAGjUzBRMB0GA1UdDgQWBBTN -+1JjU2yWzQMeSMzS5HItc4WMHDAfBgNVHSMEGDAWgBTN+1JjU2yWzQMeSMzS5HIt -c4WMHDAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBZV5RfuZ2R -0Nhs05apqwFFg8k0vJ26KMXr0i6YnlKpksEYqjXqmB58qHze6sOy7h3248FyTFlC -5YWWwwOAMiPjiH4NKMnqTthdUA4kiZiGs92jB4U/GS3lHTpsXzNssvQ8Dys7zKoj -HxnJlYpT8F6/waPPRakuP657BAVux5aAloRtqd6kGV3Donp4DwEmhdZpn6Q12igw -/+m1e9Xhxiv++H+OXzTXLerQOuUkTzKw7Ajj3hY93SeX6DOONMmoyuV1undxbvWp -lVZXo9iTGfrMkiyKF75LUyBRvvd7K5MVXJwxu0l5rvnpn6/aO1+2BUCf1ldd9VEw -DSbfrW2FfOmc ------END CERTIFICATE----- diff --git a/config/etc/certs/omc-web.key b/config/etc/certs/omc-web.key deleted file mode 100644 index 0e2c6add..00000000 --- a/config/etc/certs/omc-web.key +++ /dev/null @@ -1,28 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDbSyUIbKefOlKS -tnr+rRwVlkr1IXdMsXmmEV9zoapXDz4j4N0H9pzEkpwvxbP+r5186CfKzueHBNc7 -HWinm4wSCDR6exaxG3YGODxMuLnKGPtG2tmlXBf7USeiMGNKYEF/KWmjjIPw4/9P -+6qdIuneX7i0AdGynJI+3JPDT8Iwky2Cm5B4LRJTSJMfHO0ayrWPDoUCvKIst8w9 -GkFLjsbZU+AppjWj0rYWc04Oci7zqoUiFeBhmnQKbCVrlZ4i2CKwgfuxQV2ieSkQ -0QoTAXDjocrL/mRmnpvoH0jB2np3OfVlEPBPpR4q71vuUNkra/F4zPQRPUlqemfo -8+4/k3TPAgMBAAECggEACunzfuGBeiWPRH6md77/0yc2tc/OPdfmA64rqk0/yrNs -gUvzVC524OWhtlLy7AMA0IhGqrZKGZMpGb0TSfwuKBuWbl4VOV1Hg3Rls9/MXKg0 -9p11EDYZeh2GM8aQD9HjO0PsCQK48lKL5gbSwp1L4bsGg0Galna/ueHad3GkatcL -aSlFnnvzk4glAxT093F43lAxS463iPX7ueG/2322z0Ib+c6wGEFRcoYNI0/2Ax/u -6UdWxuHUs+7gDLcVa9FN7vx1UBoqAu49WlCfmtvzDTDyK7xLWlvKCx3O8uSLv4aw -/YMRg/yTulUj0dqIUcs/u/UN6AJc8Xk0H+rTpTfgcQKBgQDyq+FFvtG2xm2Ig0/9 -BLRdXPM4VgyokPxOL+j9H7LJfrjdz0cnGEuoOfBT8hDX2zFgC6dqAESSnAbPVQJP -6PaYJ8UtOWhwNUAfpRlid1/Y3iDRHWOirjeMKZRh6xN95m21FVbJUg6LfxTf8HWA -OgNwPsfjPL1Jdinw+OX++EvTBwKBgQDnVo5vRBqnLJl85Q7WXQFqjW9j7S1P8ZVL -JmAyNHlpdaNCF2VD164qDQEAi2FDLeDgV5UnAxOeDh/0Z0a3ncp8QLUkwqksBqwa -dhsUF5Jf0Dy3EjiP2w6FsTYanKGuTtV44ovlFTtXL1SSn2ijMVS17YmJgz6LhJbE -wvry6Vd1+QKBgAN7/k8PD1nNfZMhN4vNfn18sS1U5vegpU7GF1VTGDEWdbcRm9bu -3V87/bxm1GEVD59ua2f1OwbT4LEnalIVaT0EDSu6EErUKOiLaVLlneWyQsxd3Klg -UQHdMvk4892x6k9YUBex6u2L1JPmkvlVW+lHrX0QyTL91FpWaI8Bp60PAoGBAMR/ -hh7Gl2kWfg1TNyYn+9L47fvP8yQrjOc3YpBieBp2/MRfwPk+U0aOoyJGQchhSNjm -K9/mQhyH3Oapbqz6j4q5H+RooG+v/zG+zkNjvkY6R8gs5vRyWkR/APjbwI2hkrvK -mo9sWGo23rxoQOYVOeIKMUAnxdGWPsZE5Am+4DZpAoGBAJAF8MP5SlNRSF6zM3Lw -Qf5CQjsyXhll+A/ueOf1iQ+8r7xdxa6dNtcTcOZVVDsbXIBJ4/3HGTLfQCcGrhLN -KK9wljtkiYJ0h6IqcXnhp69uRV4SKRInyVEjNkiBotBPu5y6CYz5MAXFdM87q7jO -ehVc6QGJ9vLnfnwEFbAMArmv ------END PRIVATE KEY----- diff --git a/config/etc/cm/cm-amf.yaml b/config/etc/cm/cm-amf.yaml deleted file mode 100644 index 319a85f6..00000000 --- a/config/etc/cm/cm-amf.yaml +++ /dev/null @@ -1,49 +0,0 @@ -ManagedElement: - Id: "" - UserLabel: "" - VendorName: "" - ManagedBy: "" - ManagementIpAddress: "" - SwVersion: "" - PatchInfo: "" - AdministrativeState: "" - OperationalState: "" - -AmfFunction: - Id: "" - UserLabel: "" - AdministrativeState: "" - OperationalState: "" - VnfInstanceId: "" - Fqdn: "" - SbiServiceList: "" - AmfGuamiList: "" - SnssaiList: "" - MaxUser: "" - RelativeCapacity: "" - MaxGnbNum: "" - -EpRpDynN8Amf: - Id: "" - UserLabel: "" - LocIpAddrList: "" - FarIpSubnetworkList: "" - -EpRpDynN11Amf: - Id: "" - UserLabel: "" - LocIpAddrList: "" - FarIpSubnetworkList: "" - -EpRpDynN12Amf: - Id: "" - UserLabel: "" - LocIpAddrList: "" - FarIpSubnetworkList: "" - -IPResource: - Id: "" - UserLabel: "" - InterfaceType: "" - LocIpV4AddrList: "" - LocIpV6AddrList: "" diff --git a/config/etc/cm/cm-smf.yaml b/config/etc/cm/cm-smf.yaml deleted file mode 100644 index a1ad3736..00000000 --- a/config/etc/cm/cm-smf.yaml +++ /dev/null @@ -1,48 +0,0 @@ -ManagedElement: - Id: "" - UserLabel: "" - VendorName: "" - ManagedBy: "" - ManagementIpAddress: "" - SwVersion: "" - PatchInfo: "" - AdministrativeState: "" - OperationalState: "" - -SmfFunction: - Id: "" - UserLabel: "" - AdministrativeState: "" - OperationalState: "" - VnfInstanceId: "" - Fqdn: "" - SbiServiceList: "" - MaxPduSessions: "" - MaxQfi: "" - UpfList: "" - -AddrPool: - Id: "" - UserLabel: "" - AddrType: "Static" - IpVersion: "" - AddrSegList: "" - -EpRpDynN7Smf: - Id: "" - UserLabel: "" - LocIpAddrList: "" - FarIpSubnetworkList: "" - -EpRpDynN10Smf: - Id: "" - UserLabel: "" - LocIpAddrList: "" - FarIpSubnetworkList: "" - -IPResource: - Id: "" - UserLabel: "" - InterfaceType: "" - LocIpV4AddrList: "" - LocIpV6AddrList: "" \ No newline at end of file diff --git a/config/etc/cm/cm-udm.yaml b/config/etc/cm/cm-udm.yaml deleted file mode 100644 index 5e823ae5..00000000 --- a/config/etc/cm/cm-udm.yaml +++ /dev/null @@ -1,39 +0,0 @@ -ManagedElement: - Id: "" - UserLabel: "" - VendorName: "" - ManagedBy: "" - ManagementIpAddress: "" - SwVersion: "" - PatchInfo: "" - AdministrativeState: "" - OperationalState: "" - -UdmFunction: - Id: "" - UserLabel: "" - AdministrativeState: "" - OperationalState: "" - VnfInstanceId: "" - Fqdn: "" - SbiServiceList: "" - -UdrFunction: - Id: "" - UserLabel: "" - AddrType: "Static" - IpVersion: "" - AddrSegList: "" - -AusfFunction: - Id: "" - UserLabel: "" - LocIpAddrList: "" - FarIpSubnetworkList: "" - -IPResource: - Id: "" - UserLabel: "" - InterfaceType: "" - LocIpV4AddrList: "" - LocIpV6AddrList: "" \ No newline at end of file diff --git a/config/etc/cm/cm-upf.yaml b/config/etc/cm/cm-upf.yaml deleted file mode 100644 index d291c686..00000000 --- a/config/etc/cm/cm-upf.yaml +++ /dev/null @@ -1,141 +0,0 @@ -ManagedElement: - Id: "" - UserLabel: "" - VendorName: "" - ManagedBy: "" - ManagementIpAddress: "" - SwVersion: "" - PatchInfo: "" - AdministrativeState: "" - OperationalState: "" - -InventoryUnitRack: - Id: "" - UserLabel: "" - AdministrativeState: "" - OperationalState: "" - VnfInstanceId: "" - Fqdn: "" - SbiServiceList: "" - MaxPduSessions: "" - MaxQfi: "" - UpfList: "" - -InventoryUnitShelf: - Id: "" - UserLabel: "" - VendorUnitFamilyType: "" - VendorUnitTypeNumber: "" - VendorName: "" - SerialNumber: "" - VersionNumber: "" - DateOfManufacture: "" - DateOfLastService: "" - ManufacturerData: "" - RackPosition: "" - -InventoryUnitPack: - Id: "" - UserLabel: "" - VendorUnitFamilyType: "" - VendorUnitTypeNumber: "" - VendorName: "" - SerialNumber: "" - VersionNumber: "" - DateOfManufacture: "" - DateOfLastService: "" - ManufacturerData: "" - PortsInformation: "" - PackPosition: "" - SlotsOccupied: "" - -InventoryUnitHost: - Id: "" - UserLabel: "" - VendorUnitFamilyType: "" - VendorUnitTypeNumber: "" - VendorName: "" - SerialNumber: "" - VersionNumber: "" - DateOfManufacture: "" - DateOfLastService: "" - ManufacturerData: "" - HostPosition: "" - NumberOfCpu: "" - MemSize: "" - HardDiskSize: "" - -InventoryUnitAccessory: - Id: "" - UserLabel: "" - VendorUnitFamilyType: "" - VendorUnitTypeNumber: "" - VendorName: "" - SerialNumber: "" - VersionNumber: "" - DateOfManufacture: "" - DateOfLastService: "" - ManufacturerData: "" - AccessoryPosition: "" - AccessoryType: "" - AddtionalInformation: "" - -UpfFunction: - Id: "" - UserLabel: "" - AdministrativeState: "" - OperationalState: "" - VnfInstanceId: "" - MaxQosFlows: "" - MaxThroughput: "" - -EpRpDynN9Upf: - Id: "" - UserLabel: "" - LocIpAddrList: "" - FarIpSubnetworkList: "" - -EpRpDynN3Upf: - Id: "" - UserLabel: "" - LocIpAddrList: "" - FarIpSubnetworkList: "" - -AmfFunction: - Id: "" - UserLabel: "" - AdministrativeState: "" - OperationalState: "" - VnfInstanceId: "" - Fqdn: "" - -SmfFunction: - Id: "" - UserLabel: "" - AdministrativeState: "" - OperationalState: "" - VnfInstanceId: "" - Fqdn: "" - -UdrFunction: - Id: "" - UserLabel: "" - AdministrativeState: "" - OperationalState: "" - VnfInstanceId: "" - Fqdn: "" - -AusfFunction: - Id: "" - UserLabel: "" - AdministrativeState: "" - OperationalState: "" - VnfInstanceId: "" - Fqdn: "" - -IPResource: - Id: "" - UserLabel: "" - InterfaceType: "" - LocIpV4AddrList: "" - LocIpV6AddrList: "" diff --git a/config/etc/default/omc.conf b/config/etc/default/omc.conf deleted file mode 100644 index 00f89090..00000000 --- a/config/etc/default/omc.conf +++ /dev/null @@ -1,4 +0,0 @@ -## Command Configuration -VENDORS=CoreNet_EMS - -## Other diff --git a/config/etc/nginx/omc.conf b/config/etc/nginx/omc.conf deleted file mode 100644 index 48e69d7a..00000000 --- a/config/etc/nginx/omc.conf +++ /dev/null @@ -1,51 +0,0 @@ -server { - listen 44443 ssl http2; - server_name localhost; - - client_max_body_size 100M; - keepalive_timeout 180s; - - access_log /var/log/nginx/host.access.log; - - ssl_certificate /usr/local/omc/etc/certs/omc-server.crt; - ssl_certificate_key /usr/local/omc/etc/certs/omc-server.key; - ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; - ssl_session_timeout 5m; - ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; - - # OMC - location / { - root /usr/local/omc/htdocs/front; - - try_files $uri $uri/ /index.html; - index index.html index.htm; - } - - location /omc-api/ { - proxy_pass https://127.0.0.1:33443/; - - proxy_connect_timeout 180s; - proxy_send_timeout 180s; - proxy_read_timeout 180s; - - proxy_cache_bypass $http_upgrade; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "upgrade"; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_set_header X-Forwarded-Host $host; - proxy_set_header X-Forwarded-Port $server_port; - } - - #error_page 404 /404.html; - - # redirect server error pages to the static page /50x.html - # - error_page 500 502 503 504 /50x.html; - location = /50x.html { - root /usr/share/nginx/html; - } -} - diff --git a/config/etc/schema/cm-schema.xsd b/config/etc/schema/cm-schema.xsd deleted file mode 100644 index 5e7e46c9..00000000 --- a/config/etc/schema/cm-schema.xsd +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/config/etc/schema/pdml2html.xsl b/config/etc/schema/pdml2html.xsl deleted file mode 100644 index 37f70e21..00000000 --- a/config/etc/schema/pdml2html.xsl +++ /dev/null @@ -1,221 +0,0 @@ - - - - - - - - - -     - - - - -
-
- -
-
-
- - -
- - - - - - - - - - -
- - Frame : - - , - - [X] -
- - - - - - -
- - - Capture Filename: - PDML created: - - - - - - - - - - poor man's Wireshark - - - - - - - - - -
diff --git a/config/etc/schema/pm-schema.xsd b/config/etc/schema/pm-schema.xsd deleted file mode 100644 index bb018401..00000000 --- a/config/etc/schema/pm-schema.xsd +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/config/goldkpi/kpi_title_A.csv b/config/goldkpi/kpi_title_A.csv deleted file mode 100644 index 579c3a38..00000000 --- a/config/goldkpi/kpi_title_A.csv +++ /dev/null @@ -1,101 +0,0 @@ -"AMF","AMF.A.01","{""cn"":""AMF移动性注册更新请求次数"",""en"":""AMF.AttMobiReg""}","AMF移动性注册更新请求次数","AMF.AttMobiReg" -"AMF","AMF.A.02","{""cn"":""AMF移动性注册更新成功次数"",""en"":""AMF.SuccMobiReg""}","AMF移动性注册更新成功次数","AMF.SuccMobiReg" -"AMF","AMF.A.03","{""cn"":""AMF移动性注册更新失败次数"",""en"":""AMF.FailedMobiReg""}","AMF移动性注册更新失败次数","AMF.FailedMobiReg" -"AMF","AMF.A.04","{""cn"":""AMF紧急注册请求次数"",""en"":""AMF.AttEmergReg""}","AMF紧急注册请求次数","AMF.AttEmergReg" -"AMF","AMF.A.05","{""cn"":""AMF紧急注册成功次数"",""en"":""AMF.SuccEmergReg""}","AMF紧急注册成功次数","AMF.SuccEmergReg" -"AMF","AMF.A.06","{""cn"":""AMF紧急注册失败次数"",""en"":""AMF.FailedEmergReg""}","AMF紧急注册失败次数","AMF.FailedEmergReg" -"AMF","AMF.A.07","{""cn"":""UE发起的去注册请求次数"",""en"":""AMF.AttUeDereg""}","UE发起的去注册请求次数","AMF.AttUeDereg" -"AMF","AMF.A.08","{""cn"":""UE发起的去注册成功次数"",""en"":""AMF.SuccUeDereg""}","UE发起的去注册成功次数","AMF.SuccUeDereg" -"AMF","AMF.A.09","{""cn"":""AMF发起的去注册请求次数"",""en"":""AMF.AttAmfDereg""}","AMF发起的去注册请求次数","AMF.AttAmfDereg" -"AMF","AMF.A.10","{""cn"":""AMF发起的去注册成功次数"",""en"":""AMF.SuccAmfDereg""}","AMF发起的去注册成功次数","AMF.SuccAmfDereg" -"AMF","AMF.A.11","{""cn"":""UDM发起的去注册请求次数"",""en"":""AMF.AttUdmDereg""}","UDM发起的去注册请求次数","AMF.AttUdmDereg" -"AMF","AMF.A.12","{""cn"":""UDM发起的去注册成功次数"",""en"":""AMF.SuccUdmDereg""}","UDM发起的去注册成功次数","AMF.SuccUdmDereg" -"AMF","AMF.A.13","{""cn"":""AMF寻呼失败次数"",""en"":""AMF.PagFail""}","AMF寻呼失败次数","AMF.PagFail" -"AMF","AMF.A.14","{""cn"":""AMF隐式去注册次数"",""en"":""AMF.ImplicitDereg""}","AMF隐式去注册次数","AMF.ImplicitDereg" -"SMF","SMF.A.01","{""cn"":""PDU会话接受次数"",""en"":""SMF.PduSessAcpt""}","PDU会话接受次数","SMF.PduSessAcpt" -"SMF","SMF.A.02","{""cn"":""基站Pdu资源创建成功次数"",""en"":""SM.PduResSetupSucc""}","基站Pdu资源创建成功次数","SM.PduResSetupSucc" -"SMF","SMF.A.03","{""cn"":""查询用户SM数据失败次数"",""en"":""SM.RetrieveSmDataFail""}","查询用户SM数据失败次数","SM.RetrieveSmDataFail" -"SMF","SMF.A.04","{""cn"":""PFCP会话建立失败次数"",""en"":""SM.PfcpSessEstFail""}","PFCP会话建立失败次数","SM.PfcpSessEstFail" -"SMF","SMF.A.05","{""cn"":""基站Pdu资源创建失败次数"",""en"":""SM.PduResSetupFail""}","基站Pdu资源创建失败次数","SM.PduResSetupFail" -"SMF","SMF.A.06","{""cn"":""PFCP会话修改失败次数"",""en"":""SM.PfcpSessMdfyFail""}","PFCP会话修改失败次数","SM.PfcpSessMdfyFail" -"SMF","SMF.A.07","{""cn"":""PDU会话拒绝次数"",""en"":""SM.PduSessRejt""}","PDU会话拒绝次数","SM.PduSessRejt" -"SMF","SMF.A.08","{""cn"":""PDU会话释放指示次数"",""en"":""SM.PduSessRelCmd""}","PDU会话释放指示次数","SM.PduSessRelCmd" -"NSSF","NSSF.A.02","{""cn"":""可用AMF注册次数"",""en"":""NSSF.SuccAvailAMFPut""}","可用AMF注册成功次数","NSSF.SuccAvailAMFPut" -"NSSF","NSSF.A.03","{""cn"":""可用AMF注册更新成功次数"",""en"":""NSSF.AvailAMFPut""}","可用AMF注册次数","NSSF.AvailAMFPut" -"NSSF","NSSF.A.04","{""cn"":""可用AMF注册更新次数"",""en"":""NSSF.SuccAvailAMFPatch""}","可用AMF注册更新成功次数","NSSF.SuccAvailAMFPatch" -"NSSF","NSSF.A.01","{""cn"":""可用AMF注册成功次数"",""en"":""NSSF.AvailAMFPatch""}","可用AMF注册更新次数","NSSF.AvailAMFPatch" -"NSSF","NSSF.A.05","{""cn"":""可用AMF去注册成功次数"",""en"":""NSSF.SuccAvailAMFDelete""}","可用AMF去注册成功次数","NSSF.SuccAvailAMFDelete" -"NSSF","NSSF.A.06","{""cn"":""可用AMF去注册次数"",""en"":""NSSF.AvailAMFDelete""}","可用AMF去注册次数","NSSF.AvailAMFDelete" -"NSSF","NSSF.A.07","{""cn"":""网元订阅成功次数"",""en"":""NSSF.SuccAvailSubscription""}","网元订阅成功次数","NSSF.SuccAvailSubscription" -"NSSF","NSSF.A.08","{""cn"":""网元订阅次数"",""en"":""NSSF.AvailSubscription""}","网元订阅次数","NSSF.AvailSubscription" -"NSSF","NSSF.A.09","{""cn"":""网元去订阅成功次数"",""en"":""NSSF.SuccAvailUnsubscription""}","网元去订阅成功次数","NSSF.SuccAvailUnsubscription" -"NSSF","NSSF.A.10","{""cn"":""网元去订阅次数"",""en"":""NSSF.AvailUnsubscription""}","网元去订阅次数","NSSF.AvailUnsubscription" -"NSSF","NSSF.A.11","{""cn"":""向NRF注册成功次数"",""en"":""NSSF.SuccNRFReg""}","向NRF注册成功次数","NSSF.SuccNRFReg" -"NSSF","NSSF.A.12","{""cn"":""向NRF注册次数"",""en"":""NSSF.NRFReg""}","向NRF注册次数","NSSF.NRFReg" -"NSSF","NSSF.A.13","{""cn"":""向NRF发送心跳次数"",""en"":""NSSF.NRFHeartbeat""}","向NRF发送心跳次数","NSSF.NRFHeartbeat" -"NSSF","NSSF.A.14","{""cn"":""当前注册AMF个数"",""en"":""NSSF.CurrentAMFCount""}","当前注册AMF个数","NSSF.CurrentAMFCount" -"NSSF","NSSF.A.15","{""cn"":""当前订阅网元个数"",""en"":""NSSF.CurrentSubscriperCount""}","当前订阅网元个数","NSSF.CurrentSubscriperCount" -"MME","MME.A.01","{""cn"":""MME附着请求次数"",""en"":""EpsAttachAtt""}","MME附着请求次数","EpsAttachAtt" -"MME","MME.A.02","{""cn"":""MME附着成功次数"",""en"":""EpsAttachSucc""}","MME附着成功次数","EpsAttachSucc" -"MME","MME.A.03","{""cn"":""MME附着失败次数"",""en"":""EpsAttachFail""}","MME附着失败次数","EpsAttachFail" -"MME","MME.A.04","{""cn"":""MME组合附着请求次数"",""en"":""CombAttachAtt""}","MME组合附着请求次数","CombAttachAtt" -"MME","MME.A.05","{""cn"":""MME组合附着成功次数"",""en"":""CombAttachSucc""}","MME组合附着成功次数","CombAttachSucc" -"MME","MME.A.06","{""cn"":""MME组合附着失败次数"",""en"":""CombAttachFail""}","MME组合附着失败次数","CombAttachFail" -"MME","MME.A.07","{""cn"":""MME紧急附着请求次数"",""en"":""EmergAttachAtt""}","MME紧急附着请求次数","EmergAttachAtt" -"MME","MME.A.08","{""cn"":""MME紧急附着成功次数"",""en"":""EmergAttachSucc""}","MME紧急附着成功次数","EmergAttachSucc" -"MME","MME.A.09","{""cn"":""MME紧急附着失败次数"",""en"":""EmergAttachFail""}","MME紧急附着失败次数","EmergAttachFail" -"MME","MME.A.10","{""cn"":""UE发起的分离请求次数"",""en"":""EpsDetachUeAtt""}","UE发起的分离请求次数","EpsDetachUeAtt" -"MME","MME.A.11","{""cn"":""UE发起的分离请求成功次数"",""en"":""EpsDetachUeSucc""}","UE发起的分离请求成功次数","EpsDetachUeSucc" -"MME","MME.A.12","{""cn"":""MME发起的分离请求次数"",""en"":""EpsDetachMMEAtt""}","MME发起的分离请求次数","EpsDetachMMEAtt" -"MME","MME.A.13","{""cn"":""MME发起的分离请求成功次数"",""en"":""EpsDetachMMESucc""}","MME发起的分离请求成功次数","EpsDetachMMESucc" -"MME","MME.A.14","{""cn"":""伴随SGW内切换的TAU请求次数"",""en"":""TauIntraSgwAtt""}","伴随SGW内切换的TAU请求次数","TauIntraSgwAtt" -"MME","MME.A.15","{""cn"":""伴随SGW内切换的TAU成功请求次数"",""en"":""TauIntraSgwSucc""}","伴随SGW内切换的TAU成功请求次数","TauIntraSgwSucc" -"MME","MME.A.16","{""cn"":""伴随SGW内切换的TAU失败请求次数"",""en"":""TauIntraSgwFail""}","伴随SGW内切换的TAU失败请求次数","TauIntraSgwFail" -"MME","MME.A.17","{""cn"":""MME寻呼次数"",""en"":""PagingEpsAtt""}","MME寻呼次数","PagingEpsAtt" -"MME","MME.A.18","{""cn"":""MME寻呼成功次数"",""en"":""PagingEpsSucc""}","MME寻呼成功次数","PagingEpsSucc" -"MME","MME.A.19","{""cn"":""MME寻呼失败次数"",""en"":""PagingEpsFail""}","MME寻呼失败次数","PagingEpsFail" -"MME","MME.A.20","{""cn"":""MME隐式分离请求次数"",""en"":""EpsImplicitDetach""}","MME隐式分离请求次数","EpsImplicitDetach" -"MME","MME.A.21","{""cn"":""MME激活专用承载请求次数"",""en"":""ActDedicatedEpsBearerAtt""}","MME激活专用承载请求次数","ActDedicatedEpsBearerAtt" -"MME","MME.A.22","{""cn"":""MME激活专用承载请求成功次数"",""en"":""ActDedicatedEpsBearerSucc""}","MME激活专用承载请求成功次数","ActDedicatedEpsBearerSucc" -"MME","MME.A.23","{""cn"":""MME激活专用承载请求失败次数"",""en"":""ActDedicatedEpsBearerFail""}","MME激活专用承载请求失败次数","ActDedicatedEpsBearerFail" -"MME","MME.A.24","{""cn"":""MME去激活专用承载请求次数"",""en"":""DeactEpsDedicatedBearerAtt""}","MME去激活专用承载请求次数","DeactEpsDedicatedBearerAtt" -"MME","MME.A.25","{""cn"":""MME去激活专用承载请求成功次数"",""en"":""DeactEpsDedicatedBearerSucc""}","MME去激活专用承载请求成功次数","DeactEpsDedicatedBearerSucc" -"MME","MME.A.26","{""cn"":""MME修改专用承载请求次数"",""en"":""ModEpsBearerAtt""}","MME修改专用承载请求次数","ModEpsBearerAtt" -"MME","MME.A.27","{""cn"":""MME修改专用承载请求成功次数"",""en"":""ModEpsBearerSucc""}","MME修改专用承载请求成功次数","ModEpsBearerSucc" -"MME","MME.A.28","{""cn"":""MME修改专用承载请求失败次数"",""en"":""ModEpsBearerFail""}","MME修改专用承载请求失败次数","ModEpsBearerFail" -"MME","MME.A.29","{""cn"":""MME服务请求次数"",""en"":""EpsServiceReqAtt""}","MME服务请求次数","EpsServiceReqAtt" -"MME","MME.A.30","{""cn"":""MME服务请求成功次数"",""en"":""EpsServiceReqSucc""}","MME服务请求成功次数","EpsServiceReqSucc" -"MME","MME.A.31","{""cn"":""MME服务请求失败次数"",""en"":""EpsServiceReqFail""}","MME服务请求失败次数","EpsServiceReqFail" -"MOCNGW","MOCNGW.01","{""cn"":""AttachRequest"",""en"":""AttachRequest""}","AttachRequest","AttachRequest" -"MOCNGW","MOCNGW.02","{""cn"":""AttachAccept"",""en"":""AttachAccept""}","AttachAccept","AttachAccept" -"MOCNGW","MOCNGW.03","{""cn"":""AttachComplete"",""en"":""AttachComplete""}","AttachComplete","AttachComplete" -"MOCNGW","MOCNGW.04","{""cn"":""AttachReject"",""en"":""AttachReject""}","AttachReject","AttachReject" -"MOCNGW","MOCNGW.05","{""cn"":""DetachRequest"",""en"":""DetachRequest""}","DetachRequest","DetachRequest" -"MOCNGW","MOCNGW.06","{""cn"":""DetachAccept"",""en"":""DetachAccept""}","DetachAccept","DetachAccept" -"MOCNGW","MOCNGW.07","{""cn"":""TrackingAreaUpdateRequest"",""en"":""TrackingAreaUpdateRequest""}","TrackingAreaUpdateRequest","TrackingAreaUpdateRequest" -"MOCNGW","MOCNGW.08","{""cn"":""TrackingAreaUpdateAccept"",""en"":""TrackingAreaUpdateAccept""}","TrackingAreaUpdateAccept","TrackingAreaUpdateAccept" -"MOCNGW","MOCNGW.09","{""cn"":""TrackingAreaUpdateComplete"",""en"":""TrackingAreaUpdateComplete""}","TrackingAreaUpdateComplete","TrackingAreaUpdateComplete" -"MOCNGW","MOCNGW.10","{""cn"":""TrackingAreaUpdateReject"",""en"":""TrackingAreaUpdateReject""}","TrackingAreaUpdateReject","TrackingAreaUpdateReject" -"MOCNGW","MOCNGW.11","{""cn"":""ServiceRequest"",""en"":""ServiceRequest""}","ServiceRequest","ServiceRequest" -"MOCNGW","MOCNGW.12","{""cn"":""ExtendedServiceRequest"",""en"":""ExtendedServiceRequest""}","ExtendedServiceRequest","ExtendedServiceRequest" -"MOCNGW","MOCNGW.13","{""cn"":""ControlPlaneServiceRequest"",""en"":""ControlPlaneServiceRequest""}","ControlPlaneServiceRequest","ControlPlaneServiceRequest" -"MOCNGW","MOCNGW.14","{""cn"":""ServiceReject"",""en"":""ServiceReject""}","ServiceReject","ServiceReject" -"MOCNGW","MOCNGW.15","{""cn"":""ServiceAccept"",""en"":""ServiceAccept""}","ServiceAccept","ServiceAccept" -"MOCNGW","MOCNGW.16","{""cn"":""GutiReallocationCommand"",""en"":""GutiReallocationCommand""}","GutiReallocationCommand","GutiReallocationCommand" -"MOCNGW","MOCNGW.17","{""cn"":""GutiReallocationComplete"",""en"":""GutiReallocationComplete""}","GutiReallocationComplete","GutiReallocationComplete" -"MOCNGW","MOCNGW.18","{""cn"":""AuthenticationRequest"",""en"":""AuthenticationRequest""}","AuthenticationRequest","AuthenticationRequest" -"MOCNGW","MOCNGW.19","{""cn"":""AuthenticationResponse"",""en"":""AuthenticationResponse""}","AuthenticationResponse","AuthenticationResponse" -"MOCNGW","MOCNGW.20","{""cn"":""AuthenticationReject"",""en"":""AuthenticationReject""}","AuthenticationReject","AuthenticationReject" -"MOCNGW","MOCNGW.21","{""cn"":""AuthenticationFailure"",""en"":""AuthenticationFailure""}","AuthenticationFailure","AuthenticationFailure" -"MOCNGW","MOCNGW.22","{""cn"":""IdentityRequest"",""en"":""IdentityRequest""}","IdentityRequest","IdentityRequest" -"MOCNGW","MOCNGW.23","{""cn"":""IdentityResponse"",""en"":""IdentityResponse""}","IdentityResponse","IdentityResponse" -"MOCNGW","MOCNGW.24","{""cn"":""SecurityModeCommand"",""en"":""SecurityModeCommand""}","SecurityModeCommand","SecurityModeCommand" -"MOCNGW","MOCNGW.25","{""cn"":""SecurityModeComplete"",""en"":""SecurityModeComplete""}","SecurityModeComplete","SecurityModeComplete" -"MOCNGW","MOCNGW.26","{""cn"":""SecurityModeReject"",""en"":""SecurityModeReject""}","SecurityModeReject","SecurityModeReject" -"MOCNGW","MOCNGW.27","{""cn"":""EmmStatus"",""en"":""EmmStatus""}","EmmStatus","EmmStatus" -"MOCNGW","MOCNGW.28","{""cn"":""EmmInformation"",""en"":""EmmInformation""}","EmmInformation","EmmInformation" -"MOCNGW","MOCNGW.29","{""cn"":""DownlinkNasTransport"",""en"":""DownlinkNasTransport""}","DownlinkNasTransport","DownlinkNasTransport" -"MOCNGW","MOCNGW.30","{""cn"":""UplinkNasTransport"",""en"":""UplinkNasTransport""}","UplinkNasTransport","UplinkNasTransport" -"MOCNGW","MOCNGW.31","{""cn"":""CsServiceNotification"",""en"":""CsServiceNotification""}","CsServiceNotification","CsServiceNotification" -"MOCNGW","MOCNGW.32","{""cn"":""DownlinkGenericNasTransport"",""en"":""DownlinkGenericNasTransport""}","DownlinkGenericNasTransport","DownlinkGenericNasTransport" -"MOCNGW","MOCNGW.33","{""cn"":""UplinkGenericNasTransport"",""en"":""UplinkGenericNasTransport""}","UplinkGenericNasTransport","UplinkGenericNasTransport" diff --git a/config/goldkpi/kpi_title_all.csv b/config/goldkpi/kpi_title_all.csv deleted file mode 100644 index a8d5dbd2..00000000 --- a/config/goldkpi/kpi_title_all.csv +++ /dev/null @@ -1,252 +0,0 @@ -ne_type,kpi_id,title_json,cn_title,en_title -AMF,AMF.01,"{""cn"": ""AMF注册态用户数"", ""en"": ""AMF.RegSub""}",AMF注册态用户数,AMF.RegSub -AMF,AMF.02,"{""cn"": ""AMF初始注册请求次数"", ""en"": ""AMF.AttInitReg""}",AMF初始注册请求次数,AMF.AttInitReg -AMF,AMF.03,"{""cn"": ""AMF初始注册成功次数"", ""en"": ""AMF.SuccInitReg""}",AMF初始注册成功次数,AMF.SuccInitReg -AMF,AMF.04,"{""cn"": ""AMF初始注册失败次数_非法用户"", ""en"": ""AMF.FailedInitReg.3""}",AMF初始注册失败次数_非法用户,AMF.FailedInitReg.3 -AMF,AMF.05,"{""cn"": ""AMF初始注册失败次数_PEI不允许"", ""en"": ""AMF.FailedInitReg.5""}",AMF初始注册失败次数_PEI不允许,AMF.FailedInitReg.5 -AMF,AMF.06,"{""cn"": ""AMF初始注册失败次数_非法设备"", ""en"": ""AMF.FailedInitReg.6""}",AMF初始注册失败次数_非法设备,AMF.FailedInitReg.6 -AMF,AMF.07,"{""cn"": ""AMF初始注册失败次数_5GS服务不允许_用户原因"", ""en"": ""AMF.FailedInitReg.7.User""}",AMF初始注册失败次数_5GS服务不允许_用户原因,AMF.FailedInitReg.7.User -AMF,AMF.08,"{""cn"": ""AMF初始注册失败次数_跟踪区内无合适小区_用户原因"", ""en"": ""AMF.FailedInitReg.15.User""}",AMF初始注册失败次数_跟踪区内无合适小区_用户原因,AMF.FailedInitReg.15.User -AMF,AMF.09,"{""cn"": ""AMF初始注册失败次数_N1模式不允许"", ""en"": ""AMF.FailedInitReg.27""}",AMF初始注册失败次数_N1模式不允许,AMF.FailedInitReg.27 -AMF,AMF.10,"{""cn"": ""AMF初始注册失败次数_PLMN不允许"", ""en"": ""AMF.FailedInitReg.11""}",AMF初始注册失败次数_PLMN不允许,AMF.FailedInitReg.11 -AMF,AMF.11,"{""cn"": ""AMF初始注册失败次数_跟踪区不允许"", ""en"": ""AMF.FailedInitReg.12""}",AMF初始注册失败次数_跟踪区不允许,AMF.FailedInitReg.12 -AMF,AMF.12,"{""cn"": ""AMF初始注册失败次数_漫游跟踪区禁止接入"", ""en"": ""AMF.FailedInitReg.13""}",AMF初始注册失败次数_漫游跟踪区禁止接入,AMF.FailedInitReg.13 -AMF,AMF.13,"{""cn"": ""AMF初始注册失败次数_无可用网络切片"", ""en"": ""AMF.FailedInitReg.62""}",AMF初始注册失败次数_无可用网络切片,AMF.FailedInitReg.62 -AMF,AMF.14,"{""cn"": ""AMF初始注册失败次数_协议错误_用户原因"", ""en"": ""AMF.FailedInitReg.111.User""}",AMF初始注册失败次数_协议错误_用户原因,AMF.FailedInitReg.111.User -AMF,AMF.15,"{""cn"": ""AMF一次寻呼响应次数"", ""en"": ""AMF.FirstPagingSucc""}",AMF一次寻呼响应次数,AMF.FirstPagingSucc -AMF,AMF.16,"{""cn"": ""AMF二次寻呼响应次数"", ""en"": ""AMF.SecondPagingSucc""}",AMF二次寻呼响应次数,AMF.SecondPagingSucc -AMF,AMF.17,"{""cn"": ""AMF寻呼请求次数"", ""en"": ""AMF.PagAtt""}",AMF寻呼请求次数,AMF.PagAtt -AMF,AMF.18,"{""cn"": ""AMF业务请求被拒次数"", ""en"": ""AMF.FailServiceReq""}",AMF业务请求被拒次数,AMF.FailServiceReq -AMF,AMF.19,"{""cn"": ""AMF业务请求尝试次数"", ""en"": ""AMF.AttServiceReq""}",AMF业务请求尝试次数,AMF.AttServiceReq -SMF,SMF.01,"{""cn"": ""5G实时PDU会话数"", ""en"": ""SMF.MeanPduSession""}",5G实时PDU会话数,SMF.MeanPduSession -SMF,SMF.02,"{""cn"": ""PDU会话建立成功次数"", ""en"": ""SMF.SuccCreatePduSession""}",PDU会话建立成功次数,SMF.SuccCreatePduSession -SMF,SMF.03,"{""cn"": ""PDU会话建立请求次数"", ""en"": ""SMF.AttCreatePduSession""}",PDU会话建立请求次数,SMF.AttCreatePduSession -SMF,SMF.04,"{""cn"": ""IMS PDU会话建立成功次数"", ""en"": ""SMF.SuccCreatePduSession._Ims""}",IMS PDU会话建立成功次数,SMF.SuccCreatePduSession._Ims -SMF,SMF.05,"{""cn"": ""IMS PDU会话建立请求次数"", ""en"": ""SMF.AttCreatePduSession._Ims""}",IMS PDU会话建立请求次数,SMF.AttCreatePduSession._Ims -SMF,SMF.06,"{""cn"": ""EPS-Fallback成功数"", ""en"": ""SMF.SuccSmfModifyBearerResponse.Epsfb""}",EPS-Fallback成功数,SMF.SuccSmfModifyBearerResponse.Epsfb -SMF,SMF.07,"{""cn"": ""EPS-Fallback请求数"", ""en"": ""SMF.AttSmfModifyPduSession.Epsfb""}",EPS-Fallback请求数,SMF.AttSmfModifyPduSession.Epsfb -UDM,UDM.01,"{""cn"": ""5G注册用户数"", ""en"": ""UDR.5gActSub""}",5G注册用户数,UDR.5gActSub -UDM,UDM.02,"{""cn"": ""AMF发起的UECM注册请求次数"", ""en"": ""UDM.AmfUecmRegReq""}",AMF发起的UECM注册请求次数,UDM.AmfUecmRegReq -UDM,UDM.03,"{""cn"": ""AMF发起的UECM注册成功次数"", ""en"": ""UDM.AmfUecmRegSucc""}",AMF发起的UECM注册成功次数,UDM.AmfUecmRegSucc -UDM,UDM.04,"{""cn"": ""SMF发起的UECM注册成功次数"", ""en"": ""UDM.SmfUecmRegSucc""}",SMF发起的UECM注册成功次数,UDM.SmfUecmRegSucc -UDM,UDM.05,"{""cn"": ""SMF发起的UECM注册请求次数"", ""en"": ""UDM.SmfUecmRegReq""}",SMF发起的UECM注册请求次数,UDM.SmfUecmRegReq -UDM,UDM.06,"{""cn"": ""4G注册用户数"", ""en"": ""SUB.EpsActSubsInHss""}",4G注册用户数,SUB.EpsActSubsInHss -UDM,UDM.07,"{""cn"": ""4G鉴权信息查询成功次数"", ""en"": ""DIAM.AucInfoAnsSucc""}",4G鉴权信息查询成功次数,DIAM.AucInfoAnsSucc -UDM,UDM.08,"{""cn"": ""4G鉴权信息查询请求次数"", ""en"": ""DIAM.AucInfoReq""}",4G鉴权信息查询请求次数,DIAM.AucInfoReq -UDM,UDM.09,"{""cn"": ""4G更新位置成功次数"", ""en"": ""DIAM.UpdateLocationAnsSucc""}",4G更新位置成功次数,DIAM.UpdateLocationAnsSucc -UDM,UDM.10,"{""cn"": ""4G更新位置请求次数"", ""en"": ""DIAM.UpdateLocationReq""}",4G更新位置请求次数,DIAM.UpdateLocationReq -UDM,UDM.11,"{""cn"": ""SAR成功响应总次数"", ""en"": ""UR.SuccSAA""}",SAR成功响应总次数,UR.SuccSAA -UDM,UDM.12,"{""cn"": ""SAR请求总次数"", ""en"": ""UR.AttSAR""}",SAR请求总次数,UR.AttSAR -UDM,UDM.13,"{""cn"": ""LIR成功响应总次数"", ""en"": ""LIQ.SuccLIA""}",LIR成功响应总次数,LIQ.SuccLIA -UDM,UDM.14,"{""cn"": ""LIR请求总次数"", ""en"": ""LIQ.AttLIR""}",LIR请求总次数,LIQ.AttLIR -AUSF,AUSF.01,"{""cn"": ""鉴权成功次数"", ""en"": ""Ausf.UeAuthAnsSucc""}",鉴权成功次数,Ausf.UeAuthAnsSucc -AUSF,AUSF.02,"{""cn"": ""鉴权请求次数"", ""en"": ""Ausf.UeAuthReq""}",鉴权请求次数,Ausf.UeAuthReq -UPF,UPF.01,"{""cn"": ""PFCP会话建立成功次数"", ""en"": ""UPF.PfcpSessionEstabSucc""}",PFCP会话建立成功次数,UPF.PfcpSessionEstabSucc -UPF,UPF.02,"{""cn"": ""PFCP会话建立请求次数"", ""en"": ""UPF.PfcpSessionEstabReq""}",PFCP会话建立请求次数,UPF.PfcpSessionEstabReq -UPF,UPF.03,"{""cn"": ""N6接口上行字节数"", ""en"": ""UPF.N6OgOct""}",N6接口上行字节数,UPF.N6OgOct -UPF,UPF.04,"{""cn"": ""N6接口下行字节数"", ""en"": ""UPF.N6IncOct""}",N6接口下行字节数,UPF.N6IncOct -UPF,UPF.05,"{""cn"": ""N3接口上行字节数"", ""en"": ""UPF.N3OgOct""}",N3接口上行字节数,UPF.N3OgOct -UPF,UPF.06,"{""cn"": ""N3接口下行字节数"", ""en"": ""UPF.N3IncOct""}",N3接口下行字节数,UPF.N3IncOct -UPF,UPF.07,"{""cn"": ""SGi接口上行字节数"", ""en"": ""IP.PeakThroughputUlSgi""}",SGi接口上行字节数,IP.PeakThroughputUlSgi -UPF,UPF.08,"{""cn"": ""SGi接口下行字节数"", ""en"": ""IP.PeakThroughputDlSgi""}",SGi接口下行字节数,IP.PeakThroughputDlSgi -UPF,UPF.09,"{""cn"": ""S1-U接口上行字节数"", ""en"": ""GTP.OutOctS1uSgw""}",S1-U接口上行字节数,GTP.OutOctS1uSgw -UPF,UPF.10,"{""cn"": ""S1-U接口下行字节数"", ""en"": ""GTP.IncOctS1uSgw""}",S1-U接口下行字节数,GTP.IncOctS1uSgw -AMF,AMF.20,"{""cn"": ""EPS在线用户数"", ""en"": ""SUB.NbrSub.EcmIdle+SUB.NbrSub.EcmConnected""}",EPS在线用户数,SUB.NbrSub.EcmIdle+SUB.NbrSub.EcmConnected -AMF,AMF.21,"{""cn"": ""EPS附着成功次数"", ""en"": ""MM.SuccEpsAttach""}",EPS附着成功次数,MM.SuccEpsAttach -AMF,AMF.22,"{""cn"": ""EPS附着请求次数"", ""en"": ""MM.AttEpsAttach""}",EPS附着请求次数,MM.AttEpsAttach -AMF,AMF.23,"{""cn"": ""EPS附着失败次数_非法用户"", ""en"": ""MM.FailedEpsAttach.3""}",EPS附着失败次数_非法用户,MM.FailedEpsAttach.3 -AMF,AMF.24,"{""cn"": ""EPS附着失败次数_非法终端"", ""en"": ""MM.FailedEpsAttach.5""}",EPS附着失败次数_非法终端,MM.FailedEpsAttach.5 -AMF,AMF.25,"{""cn"": ""EPS附着失败次数_非法ME"", ""en"": ""MM.FailedEpsAttach.6""}",EPS附着失败次数_非法ME,MM.FailedEpsAttach.6 -AMF,AMF.26,"{""cn"": ""EPS附着失败次数_EPS服务不允许_用户原因"", ""en"": ""MM.FailedEpsAttach.7.User""}",EPS附着失败次数_EPS服务不允许_用户原因,MM.FailedEpsAttach.7.User -AMF,AMF.27,"{""cn"": ""EPS附着失败次数_EPS和非EPS服务不允许"", ""en"": ""MM.FailedEpsAttach.8""}",EPS附着失败次数_EPS和非EPS服务不允许,MM.FailedEpsAttach.8 -AMF,AMF.28,"{""cn"": ""EPS附着失败次数_跟踪区内无合适小区_用户原因"", ""en"": ""MM.FailedEpsAttach.15.User""}",EPS附着失败次数_跟踪区内无合适小区_用户原因,MM.FailedEpsAttach.15.User -AMF,AMF.29,"{""cn"": ""EPS附着失败次数_ESM失败_用户原因"", ""en"": ""MM.FailedEpsAttach.19.User""}",EPS附着失败次数_ESM失败_用户原因,MM.FailedEpsAttach.19.User -AMF,AMF.30,"{""cn"": ""MME一次寻呼响应次数"", ""en"": ""MM.FirstPagingSucc""}",MME一次寻呼响应次数,MM.FirstPagingSucc -AMF,AMF.31,"{""cn"": ""MME二次寻呼响应次数"", ""en"": ""MM.SecondPagingSucc""}",MME二次寻呼响应次数,MM.SecondPagingSucc -AMF,AMF.32,"{""cn"": ""MME寻呼请求次数"", ""en"": ""MM.PagAtt""}",MME寻呼请求次数,MM.PagAtt -SMF,SMF.08,"{""cn"": ""4G在线会话数"", ""en"": ""SM.MeanNbrBearerPgw.Default""}",4G在线会话数,SM.MeanNbrBearerPgw.Default -SMF,SMF.09,"{""cn"": ""PGW缺省承载建立成功个数"", ""en"": ""SM.SuccCreateDefaultEpsBearer""}",PGW缺省承载建立成功个数,SM.SuccCreateDefaultEpsBearer -SMF,SMF.10,"{""cn"": ""PGW缺省承载建立请求个数"", ""en"": ""SM.AttCreateDefaultEpsBearer""}",PGW缺省承载建立请求个数,SM.AttCreateDefaultEpsBearer -SMF,SMF.11,"{""cn"": ""PGW专用承载建立成功个数"", ""en"": ""SM.SuccCreateDedicatedEpsBearer""}",PGW专用承载建立成功个数,SM.SuccCreateDedicatedEpsBearer -SMF,SMF.12,"{""cn"": ""PGW专用承载建立请求个数"", ""en"": ""SM.AttCreateDedicatedEpsBearer""}",PGW专用承载建立请求个数,SM.AttCreateDedicatedEpsBearer -SMF,SMF.13,"{""cn"": ""IMS缺省承载成功建立个数"", ""en"": ""SM.SuccCreateDefaultEpsBearer._Ims""}",IMS缺省承载成功建立个数,SM.SuccCreateDefaultEpsBearer._Ims -SMF,SMF.14,"{""cn"": ""IMS缺省承载请求建立个数"", ""en"": ""SM.AttCreateDefaultEpsBearer._Ims""}",IMS缺省承载请求建立个数,SM.AttCreateDefaultEpsBearer._Ims -AMF,AMF.A.02,"{""cn"":""AMF移动性注册更新成功次数"",""en"":""AMF.SuccMobiReg""}",AMF移动性注册更新成功次数,AMF.SuccMobiReg -AMF,AMF.A.03,"{""cn"":""AMF移动性注册更新失败次数"",""en"":""AMF.FailedMobiReg""}",AMF移动性注册更新失败次数,AMF.FailedMobiReg -AMF,AMF.A.04,"{""cn"":""AMF紧急注册请求次数"",""en"":""AMF.AttEmergReg""}",AMF紧急注册请求次数,AMF.AttEmergReg -AMF,AMF.A.05,"{""cn"":""AMF紧急注册成功次数"",""en"":""AMF.SuccEmergReg""}",AMF紧急注册成功次数,AMF.SuccEmergReg -AMF,AMF.A.06,"{""cn"":""AMF紧急注册失败次数"",""en"":""AMF.FailedEmergReg""}",AMF紧急注册失败次数,AMF.FailedEmergReg -AMF,AMF.A.07,"{""cn"":""UE发起的去注册请求次数"",""en"":""AMF.AttUeDereg""}",UE发起的去注册请求次数,AMF.AttUeDereg -AMF,AMF.A.08,"{""cn"":""UE发起的去注册成功次数"",""en"":""AMF.SuccUeDereg""}",UE发起的去注册成功次数,AMF.SuccUeDereg -AMF,AMF.A.09,"{""cn"":""AMF发起的去注册请求次数"",""en"":""AMF.AttAmfDereg""}",AMF发起的去注册请求次数,AMF.AttAmfDereg -AMF,AMF.A.10,"{""cn"":""AMF发起的去注册成功次数"",""en"":""AMF.SuccAmfDereg""}",AMF发起的去注册成功次数,AMF.SuccAmfDereg -AMF,AMF.A.11,"{""cn"":""UDM发起的去注册请求次数"",""en"":""AMF.AttUdmDereg""}",UDM发起的去注册请求次数,AMF.AttUdmDereg -AMF,AMF.A.12,"{""cn"":""UDM发起的去注册成功次数"",""en"":""AMF.SuccUdmDereg""}",UDM发起的去注册成功次数,AMF.SuccUdmDereg -AMF,AMF.A.13,"{""cn"":""AMF寻呼失败次数"",""en"":""AMF.PagFail""}",AMF寻呼失败次数,AMF.PagFail -AMF,AMF.A.14,"{""cn"":""AMF隐式去注册次数"",""en"":""AMF.ImplicitDereg""}",AMF隐式去注册次数,AMF.ImplicitDereg -SMF,SMF.A.01,"{""cn"":""PDU会话接受次数"",""en"":""SMF.PduSessAcpt""}",PDU会话接受次数,SMF.PduSessAcpt -SMF,SMF.A.02,"{""cn"":""基站Pdu资源创建成功次数"",""en"":""SM.PduResSetupSucc""}",基站Pdu资源创建成功次数,SM.PduResSetupSucc -SMF,SMF.A.03,"{""cn"":""查询用户SM数据失败次数"",""en"":""SM.RetrieveSmDataFail""}",查询用户SM数据失败次数,SM.RetrieveSmDataFail -SMF,SMF.A.04,"{""cn"":""PFCP会话建立失败次数"",""en"":""SM.PfcpSessEstFail""}",PFCP会话建立失败次数,SM.PfcpSessEstFail -SMF,SMF.A.05,"{""cn"":""基站Pdu资源创建失败次数"",""en"":""SM.PduResSetupFail""}",基站Pdu资源创建失败次数,SM.PduResSetupFail -SMF,SMF.A.06,"{""cn"":""PFCP会话修改失败次数"",""en"":""SM.PfcpSessMdfyFail""}",PFCP会话修改失败次数,SM.PfcpSessMdfyFail -SMF,SMF.A.07,"{""cn"":""PDU会话拒绝次数"",""en"":""SM.PduSessRejt""}",PDU会话拒绝次数,SM.PduSessRejt -SMF,SMF.A.08,"{""cn"":""PDU会话释放指示次数"",""en"":""SM.PduSessRelCmd""}",PDU会话释放指示次数,SM.PduSessRelCmd -NSSF,NSSF.A.02,"{""cn"":""可用AMF注册次数"",""en"":""NSSF.SuccAvailAMFPut""}",可用AMF注册成功次数,NSSF.SuccAvailAMFPut -NSSF,NSSF.A.03,"{""cn"":""可用AMF注册更新成功次数"",""en"":""NSSF.AvailAMFPut""}",可用AMF注册次数,NSSF.AvailAMFPut -NSSF,NSSF.A.04,"{""cn"":""可用AMF注册更新次数"",""en"":""NSSF.SuccAvailAMFPatch""}",可用AMF注册更新成功次数,NSSF.SuccAvailAMFPatch -NSSF,NSSF.A.01,"{""cn"":""可用AMF注册成功次数"",""en"":""NSSF.AvailAMFPatch""}",可用AMF注册更新次数,NSSF.AvailAMFPatch -NSSF,NSSF.A.05,"{""cn"":""可用AMF去注册成功次数"",""en"":""NSSF.SuccAvailAMFDelete""}",可用AMF去注册成功次数,NSSF.SuccAvailAMFDelete -NSSF,NSSF.A.06,"{""cn"":""可用AMF去注册次数"",""en"":""NSSF.AvailAMFDelete""}",可用AMF去注册次数,NSSF.AvailAMFDelete -NSSF,NSSF.A.07,"{""cn"":""网元订阅成功次数"",""en"":""NSSF.SuccAvailSubscription""}",网元订阅成功次数,NSSF.SuccAvailSubscription -NSSF,NSSF.A.08,"{""cn"":""网元订阅次数"",""en"":""NSSF.AvailSubscription""}",网元订阅次数,NSSF.AvailSubscription -NSSF,NSSF.A.09,"{""cn"":""网元去订阅成功次数"",""en"":""NSSF.SuccAvailUnsubscription""}",网元去订阅成功次数,NSSF.SuccAvailUnsubscription -NSSF,NSSF.A.10,"{""cn"":""网元去订阅次数"",""en"":""NSSF.AvailUnsubscription""}",网元去订阅次数,NSSF.AvailUnsubscription -NSSF,NSSF.A.11,"{""cn"":""向NRF注册成功次数"",""en"":""NSSF.SuccNRFReg""}",向NRF注册成功次数,NSSF.SuccNRFReg -NSSF,NSSF.A.12,"{""cn"":""向NRF注册次数"",""en"":""NSSF.NRFReg""}",向NRF注册次数,NSSF.NRFReg -NSSF,NSSF.A.13,"{""cn"":""向NRF发送心跳次数"",""en"":""NSSF.NRFHeartbeat""}",向NRF发送心跳次数,NSSF.NRFHeartbeat -NSSF,NSSF.A.14,"{""cn"":""当前注册AMF个数"",""en"":""NSSF.CurrentAMFCount""}",当前注册AMF个数,NSSF.CurrentAMFCount -NSSF,NSSF.A.15,"{""cn"":""当前订阅网元个数"",""en"":""NSSF.CurrentSubscriperCount""}",当前订阅网元个数,NSSF.CurrentSubscriperCount -MME,MME.A.01,"{""cn"":""MME附着请求次数"",""en"":""EpsAttachAtt""}",MME附着请求次数,EpsAttachAtt -MME,MME.A.02,"{""cn"":""MME附着成功次数"",""en"":""EpsAttachSucc""}",MME附着成功次数,EpsAttachSucc -MME,MME.A.03,"{""cn"":""MME附着失败次数"",""en"":""EpsAttachFail""}",MME附着失败次数,EpsAttachFail -MME,MME.A.04,"{""cn"":""MME组合附着请求次数"",""en"":""CombAttachAtt""}",MME组合附着请求次数,CombAttachAtt -MME,MME.A.05,"{""cn"":""MME组合附着成功次数"",""en"":""CombAttachSucc""}",MME组合附着成功次数,CombAttachSucc -MME,MME.A.06,"{""cn"":""MME组合附着失败次数"",""en"":""CombAttachFail""}",MME组合附着失败次数,CombAttachFail -MME,MME.A.07,"{""cn"":""MME紧急附着请求次数"",""en"":""EmergAttachAtt""}",MME紧急附着请求次数,EmergAttachAtt -MME,MME.A.08,"{""cn"":""MME紧急附着成功次数"",""en"":""EmergAttachSucc""}",MME紧急附着成功次数,EmergAttachSucc -MME,MME.A.09,"{""cn"":""MME紧急附着失败次数"",""en"":""EmergAttachFail""}",MME紧急附着失败次数,EmergAttachFail -MME,MME.A.10,"{""cn"":""UE发起的分离请求次数"",""en"":""EpsDetachUeAtt""}",UE发起的分离请求次数,EpsDetachUeAtt -MME,MME.A.11,"{""cn"":""UE发起的分离请求成功次数"",""en"":""EpsDetachUeSucc""}",UE发起的分离请求成功次数,EpsDetachUeSucc -MME,MME.A.12,"{""cn"":""MME发起的分离请求次数"",""en"":""EpsDetachMMEAtt""}",MME发起的分离请求次数,EpsDetachMMEAtt -MME,MME.A.13,"{""cn"":""MME发起的分离请求成功次数"",""en"":""EpsDetachMMESucc""}",MME发起的分离请求成功次数,EpsDetachMMESucc -MME,MME.A.14,"{""cn"":""伴随SGW内切换的TAU请求次数"",""en"":""TauIntraSgwAtt""}",伴随SGW内切换的TAU请求次数,TauIntraSgwAtt -MME,MME.A.15,"{""cn"":""伴随SGW内切换的TAU成功请求次数"",""en"":""TauIntraSgwSucc""}",伴随SGW内切换的TAU成功请求次数,TauIntraSgwSucc -MME,MME.A.16,"{""cn"":""伴随SGW内切换的TAU失败请求次数"",""en"":""TauIntraSgwFail""}",伴随SGW内切换的TAU失败请求次数,TauIntraSgwFail -MME,MME.A.17,"{""cn"":""MME寻呼次数"",""en"":""PagingEpsAtt""}",MME寻呼次数,PagingEpsAtt -MME,MME.A.18,"{""cn"":""MME寻呼成功次数"",""en"":""PagingEpsSucc""}",MME寻呼成功次数,PagingEpsSucc -MME,MME.A.19,"{""cn"":""MME寻呼失败次数"",""en"":""PagingEpsFail""}",MME寻呼失败次数,PagingEpsFail -MME,MME.A.20,"{""cn"":""MME隐式分离请求次数"",""en"":""EpsImplicitDetach""}",MME隐式分离请求次数,EpsImplicitDetach -MME,MME.A.21,"{""cn"":""MME激活专用承载请求次数"",""en"":""ActDedicatedEpsBearerAtt""}",MME激活专用承载请求次数,ActDedicatedEpsBearerAtt -MME,MME.A.22,"{""cn"":""MME激活专用承载请求成功次数"",""en"":""ActDedicatedEpsBearerSucc""}",MME激活专用承载请求成功次数,ActDedicatedEpsBearerSucc -MME,MME.A.23,"{""cn"":""MME激活专用承载请求失败次数"",""en"":""ActDedicatedEpsBearerFail""}",MME激活专用承载请求失败次数,ActDedicatedEpsBearerFail -MME,MME.A.24,"{""cn"":""MME去激活专用承载请求次数"",""en"":""DeactEpsDedicatedBearerAtt""}",MME去激活专用承载请求次数,DeactEpsDedicatedBearerAtt -MME,MME.A.25,"{""cn"":""MME去激活专用承载请求成功次数"",""en"":""DeactEpsDedicatedBearerSucc""}",MME去激活专用承载请求成功次数,DeactEpsDedicatedBearerSucc -MME,MME.A.26,"{""cn"":""MME修改专用承载请求次数"",""en"":""ModEpsBearerAtt""}",MME修改专用承载请求次数,ModEpsBearerAtt -MME,MME.A.27,"{""cn"":""MME修改专用承载请求成功次数"",""en"":""ModEpsBearerSucc""}",MME修改专用承载请求成功次数,ModEpsBearerSucc -MME,MME.A.28,"{""cn"":""MME修改专用承载请求失败次数"",""en"":""ModEpsBearerFail""}",MME修改专用承载请求失败次数,ModEpsBearerFail -MME,MME.A.29,"{""cn"":""MME服务请求次数"",""en"":""EpsServiceReqAtt""}",MME服务请求次数,EpsServiceReqAtt -MME,MME.A.30,"{""cn"":""MME服务请求成功次数"",""en"":""EpsServiceReqSucc""}",MME服务请求成功次数,EpsServiceReqSucc -MME,MME.A.31,"{""cn"":""MME服务请求失败次数"",""en"":""EpsServiceReqFail""}",MME服务请求失败次数,EpsServiceReqFail -MOCNGW,MOCNGW.01,"{""cn"":""AttachRequest"",""en"":""AttachRequest""}",AttachRequest,AttachRequest -MOCNGW,MOCNGW.02,"{""cn"":""AttachAccept"",""en"":""AttachAccept""}",AttachAccept,AttachAccept -MOCNGW,MOCNGW.03,"{""cn"":""AttachComplete"",""en"":""AttachComplete""}",AttachComplete,AttachComplete -MOCNGW,MOCNGW.04,"{""cn"":""AttachReject"",""en"":""AttachReject""}",AttachReject,AttachReject -MOCNGW,MOCNGW.05,"{""cn"":""DetachRequest"",""en"":""DetachRequest""}",DetachRequest,DetachRequest -MOCNGW,MOCNGW.06,"{""cn"":""DetachAccept"",""en"":""DetachAccept""}",DetachAccept,DetachAccept -MOCNGW,MOCNGW.07,"{""cn"":""TrackingAreaUpdateRequest"",""en"":""TrackingAreaUpdateRequest""}",TrackingAreaUpdateRequest,TrackingAreaUpdateRequest -MOCNGW,MOCNGW.08,"{""cn"":""TrackingAreaUpdateAccept"",""en"":""TrackingAreaUpdateAccept""}",TrackingAreaUpdateAccept,TrackingAreaUpdateAccept -MOCNGW,MOCNGW.09,"{""cn"":""TrackingAreaUpdateComplete"",""en"":""TrackingAreaUpdateComplete""}",TrackingAreaUpdateComplete,TrackingAreaUpdateComplete -MOCNGW,MOCNGW.10,"{""cn"":""TrackingAreaUpdateReject"",""en"":""TrackingAreaUpdateReject""}",TrackingAreaUpdateReject,TrackingAreaUpdateReject -MOCNGW,MOCNGW.11,"{""cn"":""ServiceRequest"",""en"":""ServiceRequest""}",ServiceRequest,ServiceRequest -MOCNGW,MOCNGW.12,"{""cn"":""ExtendedServiceRequest"",""en"":""ExtendedServiceRequest""}",ExtendedServiceRequest,ExtendedServiceRequest -MOCNGW,MOCNGW.13,"{""cn"":""ControlPlaneServiceRequest"",""en"":""ControlPlaneServiceRequest""}",ControlPlaneServiceRequest,ControlPlaneServiceRequest -MOCNGW,MOCNGW.14,"{""cn"":""ServiceReject"",""en"":""ServiceReject""}",ServiceReject,ServiceReject -MOCNGW,MOCNGW.15,"{""cn"":""ServiceAccept"",""en"":""ServiceAccept""}",ServiceAccept,ServiceAccept -MOCNGW,MOCNGW.16,"{""cn"":""GutiReallocationCommand"",""en"":""GutiReallocationCommand""}",GutiReallocationCommand,GutiReallocationCommand -MOCNGW,MOCNGW.17,"{""cn"":""GutiReallocationComplete"",""en"":""GutiReallocationComplete""}",GutiReallocationComplete,GutiReallocationComplete -MOCNGW,MOCNGW.18,"{""cn"":""AuthenticationRequest"",""en"":""AuthenticationRequest""}",AuthenticationRequest,AuthenticationRequest -MOCNGW,MOCNGW.19,"{""cn"":""AuthenticationResponse"",""en"":""AuthenticationResponse""}",AuthenticationResponse,AuthenticationResponse -MOCNGW,MOCNGW.20,"{""cn"":""AuthenticationReject"",""en"":""AuthenticationReject""}",AuthenticationReject,AuthenticationReject -MOCNGW,MOCNGW.21,"{""cn"":""AuthenticationFailure"",""en"":""AuthenticationFailure""}",AuthenticationFailure,AuthenticationFailure -MOCNGW,MOCNGW.22,"{""cn"":""IdentityRequest"",""en"":""IdentityRequest""}",IdentityRequest,IdentityRequest -MOCNGW,MOCNGW.23,"{""cn"":""IdentityResponse"",""en"":""IdentityResponse""}",IdentityResponse,IdentityResponse -MOCNGW,MOCNGW.24,"{""cn"":""SecurityModeCommand"",""en"":""SecurityModeCommand""}",SecurityModeCommand,SecurityModeCommand -MOCNGW,MOCNGW.25,"{""cn"":""SecurityModeComplete"",""en"":""SecurityModeComplete""}",SecurityModeComplete,SecurityModeComplete -MOCNGW,MOCNGW.26,"{""cn"":""SecurityModeReject"",""en"":""SecurityModeReject""}",SecurityModeReject,SecurityModeReject -MOCNGW,MOCNGW.27,"{""cn"":""EmmStatus"",""en"":""EmmStatus""}",EmmStatus,EmmStatus -MOCNGW,MOCNGW.28,"{""cn"":""EmmInformation"",""en"":""EmmInformation""}",EmmInformation,EmmInformation -MOCNGW,MOCNGW.29,"{""cn"":""DownlinkNasTransport"",""en"":""DownlinkNasTransport""}",DownlinkNasTransport,DownlinkNasTransport -MOCNGW,MOCNGW.30,"{""cn"":""UplinkNasTransport"",""en"":""UplinkNasTransport""}",UplinkNasTransport,UplinkNasTransport -MOCNGW,MOCNGW.31,"{""cn"":""CsServiceNotification"",""en"":""CsServiceNotification""}",CsServiceNotification,CsServiceNotification -MOCNGW,MOCNGW.32,"{""cn"":""DownlinkGenericNasTransport"",""en"":""DownlinkGenericNasTransport""}",DownlinkGenericNasTransport,DownlinkGenericNasTransport -MOCNGW,MOCNGW.33,"{""cn"":""UplinkGenericNasTransport"",""en"":""UplinkGenericNasTransport""}",UplinkGenericNasTransport,UplinkGenericNasTransport -IMS,SCSCF.01,"{""cn"": ""LTE接入注册用户数"",""en"": ""UR.SubsLTE.fromVoLTE""}",LTE接入注册用户数,UR.SubsLTE.fromVoLTE -IMS,SCSCF.02,"{""cn"": ""5G接入注册用户数"",""en"": ""UR.Subs5G.fromVo5G""}",5G接入注册用户数,UR.Subs5G.fromVo5G -IMS,SCSCF.03,"{""cn"": ""初始注册成功次数"",""en"": ""UR.SuccInitReg""}",初始注册成功次数,UR.SuccInitReg -IMS,SCSCF.04,"{""cn"": ""初始注册请求次数"",""en"": ""UR.AttInitReg""}",初始注册请求次数,UR.AttInitReg -IMS,SCSCF.05,"{""cn"": ""主叫接通次数"",""en"": ""SC.SuccSessionOrig""}",主叫接通次数,SC.SuccSessionOrig -IMS,SCSCF.06,"{""cn"": ""主叫试呼次数"",""en"": ""SC.AttSessionOrig""}",主叫试呼次数,SC.AttSessionOrig -IMS,SCSCF.07,"{""cn"": ""被叫接通次数"",""en"": ""SC.SuccSessionTerm""}",被叫接通次数,SC.SuccSessionTerm -IMS,SCSCF.08,"{""cn"": ""被叫试呼次数"",""en"": ""SC.AttSessionTerm""}",被叫试呼次数,SC.AttSessionTerm -IMS,SCSCF.09,"{""cn"": ""主叫应答次数"",""en"": ""SC.AnsSessionOrig""}",主叫应答次数,SC.AnsSessionOrig -IMS,SCSCF.10,"{""cn"": ""主叫早释次数"",""en"": ""SC.OrigRelBeforeRing""}",主叫早释次数,SC.OrigRelBeforeRing -IMS,SCSCF.11,"{""cn"": ""主叫振铃早释次数"",""en"": ""SC.OrigRelAfterRing""}",主叫振铃早释次数,SC.OrigRelAfterRing -IMS,SCSCF.12,"{""cn"": ""主叫403请求禁止次数"",""en"": ""SC.FailSessionOrig.403""}",主叫403请求禁止次数,SC.FailSessionOrig.403 -IMS,SCSCF.13,"{""cn"": ""主叫404未找到次数"",""en"": ""SC.FailSessionOrig.404""}",主叫404未找到次数,SC.FailSessionOrig.404 -IMS,SCSCF.14,"{""cn"": ""主叫408请求超时次数"",""en"": ""SC.FailSessionOrig.408""}",主叫408请求超时次数,SC.FailSessionOrig.408 -IMS,SCSCF.15,"{""cn"": ""主叫480久叫不应次"",""en"": ""SC.FailSessionOrig.480""}",主叫480久叫不应次,SC.FailSessionOrig.480 -IMS,SCSCF.16,"{""cn"": ""主叫484Request-URI不完整次"",""en"": ""SC.FailSessionOrig.484""}",主叫484Request-URI不完整次,SC.FailSessionOrig.484 -IMS,SCSCF.17,"{""cn"": ""主叫486用户忙次数"",""en"": ""SC.FailSessionOrig.486""}",主叫486用户忙次数,SC.FailSessionOrig.486 -IMS,SCSCF.18,"{""cn"": ""主叫487请求终止次数"",""en"": ""SC.FailSessionOrig.487""}",主叫487请求终止次数,SC.FailSessionOrig.487 -IMS,SCSCF.19,"{""cn"": ""主叫600用户忙次数"",""en"": ""SC.FailSessionOrig.600""}",主叫600用户忙次数,SC.FailSessionOrig.600 -IMS,SCSCF.20,"{""cn"": ""主叫603用户拒接次数"",""en"": ""SC.FailSessionOrig.603""}",主叫603用户拒接次数,SC.FailSessionOrig.603 -IMS,SCSCF.21,"{""cn"": ""主叫604用户信息不存在次数"",""en"": ""SC.FailSessionOrig.604""}",主叫604用户信息不存在次数,SC.FailSessionOrig.604 -IMS,SCSCF.22,"{""cn"": ""被叫应答次数"",""en"": ""SC.AnsSessionTerm""}",被叫应答次数,SC.AnsSessionTerm -IMS,SCSCF.23,"{""cn"": ""被叫早释次"",""en"": ""SC.TermiRelBeforeRing""}",被叫早释次,SC.TermiRelBeforeRing -IMS,SCSCF.24,"{""cn"": ""被叫振铃早释次数"",""en"": ""SC.TermiRelAfterRing""}",被叫振铃早释次数,SC.TermiRelAfterRing -IMS,SCSCF.25,"{""cn"": ""被叫403请求禁止次数"",""en"": ""SC.FailSessionTerm.403""}",被叫403请求禁止次数,SC.FailSessionTerm.403 -IMS,SCSCF.26,"{""cn"": ""被叫404未找到次数"",""en"": ""SC.FailSessionTerm.404""}",被叫404未找到次数,SC.FailSessionTerm.404 -IMS,SCSCF.27,"{""cn"": ""被叫408请求超时次数"",""en"": ""SC.FailSessionTerm.408""}",被叫408请求超时次数,SC.FailSessionTerm.408 -IMS,SCSCF.28,"{""cn"": ""被叫480久叫不应次数"",""en"": ""SC.FailSessionTerm.480""}",被叫480久叫不应次数,SC.FailSessionTerm.480 -IMS,SCSCF.29,"{""cn"": ""被叫484Request-URI不完整次数"",""en"": ""SC.FailSessionTerm.484""}",被叫484Request-URI不完整次数,SC.FailSessionTerm.484 -IMS,SCSCF.30,"{""cn"": ""被叫486用户忙次数"",""en"": ""SC.FailSessionTerm.486""}",被叫486用户忙次数,SC.FailSessionTerm.486 -IMS,SCSCF.31,"{""cn"": ""被叫487请求终止次数"",""en"": ""SC.FailSessionTerm.487""}",被叫487请求终止次数,SC.FailSessionTerm.487 -IMS,SCSCF.32,"{""cn"": ""被叫600用户忙次数"",""en"": ""SC.FailSessionTerm.600""}",被叫600用户忙次数,SC.FailSessionTerm.600 -IMS,SCSCF.33,"{""cn"": ""被叫603用户拒接次数"",""en"": ""SC.FailSessionTerm.603""}",被叫603用户拒接次数,SC.FailSessionTerm.603 -IMS,SCSCF.34,"{""cn"": ""被叫604用户信息不存在次数"",""en"": ""SC.FailSessionTerm.604""}",被叫604用户信息不存在次数,SC.FailSessionTerm.604 -PCF,PCF.01,"{""cn"": ""在线N7会话数"", ""en"": ""PCF.SmAssocNbrMean""}",在线N7会话数,PCF.SmAssocNbrMean -PCF,PCF.02,"{""cn"": ""SM策略关联建立成功次数"", ""en"": ""PCF.PolicySmAssocCreateSucc""}",SM策略关联建立成功次数,PCF.PolicySmAssocCreateSucc -PCF,PCF.03,"{""cn"": ""SM策略关联建立请求次数"", ""en"": ""PCF.PolicySmAssocCreateReq""}",SM策略关联建立请求次数,PCF.PolicySmAssocCreateReq -PCF,PCF.04,"{""cn"": ""SM策略关联更新成功次数"", ""en"": ""PCF.PolicySmAssocUpdateSucc""}",SM策略关联更新成功次数,PCF.PolicySmAssocUpdateSucc -PCF,PCF.05,"{""cn"": ""SM策略关联更新请求次数"", ""en"": ""PCF.PolicySmAssocUpdateReq""}",SM策略关联更新请求次数,PCF.PolicySmAssocUpdateReq -PCF,PCF.06,"{""cn"": ""在线Gx会话数"", ""en"": ""SM.SessionNbrMean""}",在线Gx会话数,SM.SessionNbrMean -PCF,PCF.07,"{""cn"": ""在线Rx会话数"", ""en"": ""SM.RxSessionMean""}",在线Rx会话数,SM.RxSessionMean -PCF,PCF.08,"{""cn"": ""PCRF策略控制发起成功次数"", ""en"": ""DIAM.CcInitialSuccess""}",PCRF策略控制发起成功次数,DIAM.CcInitialSuccess -PCF,PCF.09,"{""cn"": ""PCRF策略控制发起请求次数"", ""en"": ""DIAM.CcInitialRequest""}",PCRF策略控制发起请求次数,DIAM.CcInitialRequest -PCF,PCF.10,"{""cn"": ""应用会话授权成功次数"", ""en"": ""DIAM.AuthSucc""}",应用会话授权成功次数,DIAM.AuthSucc -PCF,PCF.11,"{""cn"": ""应用会话授权尝试次数"", ""en"": ""DIAM.AuthRequest""}",应用会话授权尝试次数,DIAM.AuthRequest -PCF,PCF.12,"{""cn"": ""PCRF策略控制更新成功次数"", ""en"": ""DIAM.CcUpdateSuccess""}",PCRF策略控制更新成功次数,DIAM.CcUpdateSuccess -PCF,PCF.13,"{""cn"": ""PCRF策略控制更新请求次数"", ""en"": ""DIAM.CcUpdateRequest""}",PCRF策略控制更新请求次数,DIAM.CcUpdateRequest -SMSC,SMSC.A.01,"{""cn"": ""MS到SMSC短信请求次数"", ""en"": ""SMSC.MStoSMSCAtt""}",MS到SMSC短信请求次数,SMSC.MStoSMSCAtt -SMSC,SMSC.A.02,"{""cn"": ""MS到SMSC短信成功次数"", ""en"": ""SMSC.MStoSMSCSucc""}",MS到SMSC短信成功次数,SMSC.MStoSMSCSucc -SMSC,SMSC.A.03,"{""cn"": ""MS到SMSC短信失败次数"", ""en"": ""SMSC.MStoSMSCFail""}",MS到SMSC短信失败次数,SMSC.MStoSMSCFail -SMSC,SMSC.A.04,"{""cn"": ""MS到SMSC短信字节数"", ""en"": ""SMSC.MStoSMSCBytes""}",MS到SMSC短信字节数,SMSC.MStoSMSCBytes -SMSC,SMSC.A.05,"{""cn"": ""VSS到SMSC短信请求次数"", ""en"": ""SMSC.VSStoSMSCAtt""}",VSS到SMSC短信请求次数,SMSC.VSStoSMSCAtt -SMSC,SMSC.A.06,"{""cn"": ""VSS到SMSC短信成功次数"", ""en"": ""SMSC.VSStoSMSCSucc""}",VSS到SMSC短信成功次数,SMSC.VSStoSMSCSucc -SMSC,SMSC.A.07,"{""cn"": ""VSS到SMSC短信失败次数"", ""en"": ""SMSC.VSStoSMSCFail""}",VSS到SMSC短信失败次数,SMSC.VSStoSMSCFail -SMSC,SMSC.A.08,"{""cn"": ""VSS到SMSC短信字节数"", ""en"": ""SMSC.VSStoSMSCBytes""}",VSS到SMSC短信字节数,SMSC.VSStoSMSCBytes -SMSC,SMSC.A.09,"{""cn"": ""PPS到SMSC短信请求次数"", ""en"": ""SMSC.PPStoSMSCAtt""}",PPS到SMSC短信请求次数,SMSC.PPStoSMSCAtt -SMSC,SMSC.A.10,"{""cn"": ""PPS到SMSC短信成功次数"", ""en"": ""SMSC.PPStoSMSCSucc""}",PPS到SMSC短信成功次数,SMSC.PPStoSMSCSucc -SMSC,SMSC.A.11,"{""cn"": ""PPS到SMSC短信失败次数"", ""en"": ""SMSC.PPStoSMSCFail""}",PPS到SMSC短信失败次数,SMSC.PPStoSMSCFail -SMSC,SMSC.A.12,"{""cn"": ""PPS到SMSC短信字节数"", ""en"": ""SMSC.PPStoSMSCBytes""}",PPS到SMSC短信字节数,SMSC.PPStoSMSCBytes -SMSC,SMSC.A.13,"{""cn"": ""SMPP到SMSC短信请求次数"", ""en"": ""SMSC.SMPPtoSMSCAtt""}",SMPP到SMSC短信请求次数,SMSC.SMPPtoSMSCAtt -SMSC,SMSC.A.14,"{""cn"": ""SMPP到SMSC短信成功次数"", ""en"": ""SMSC.SMPPtoSMSCSucc""}",SMPP到SMSC短信成功次数,SMSC.SMPPtoSMSCSucc -SMSC,SMSC.A.15,"{""cn"": ""SMPP到SMSC短信失败次数"", ""en"": ""SMSC.SMPPtoSMSCFail""}",SMPP到SMSC短信失败次数,SMSC.SMPPtoSMSCFail -SMSC,SMSC.A.16,"{""cn"": ""SMPP到SMSC短信字节数"", ""en"": ""SMSC.SMPPtoSMSCBytes""}",SMPP到SMSC短信字节数,SMSC.SMPPtoSMSCBytes -SMSC,SMSC.A.17,"{""cn"": ""SMSC到MS短信请求次数"", ""en"": ""SMSC.SMSCtoMSAtt""}",SMSC到MS短信请求次数,SMSC.SMSCtoMSAtt -SMSC,SMSC.A.18,"{""cn"": ""SMSC到MS短信成功次数"", ""en"": ""SMSC.SMSCtoMSSucc""}",SMSC到MS短信成功次数,SMSC.SMSCtoMSSucc -SMSC,SMSC.A.19,"{""cn"": ""SMSC到MS短信失败次数"", ""en"": ""SMSC.SMSCtoMSFail""}",SMSC到MS短信失败次数,SMSC.SMSCtoMSFail -SMSC,SMSC.A.20,"{""cn"": ""SMSC到MS短信字节数"", ""en"": ""SMSC.SMSCtoMSBytes""}",SMSC到MS短信字节数,SMSC.SMSCtoMSBytes -SMSC,SMSC.A.21,"{""cn"": ""SMSC到VSS短信请求次数"", ""en"": ""SMSC.SMSCtoVSSAtt""}",SMSC到VSS短信请求次数,SMSC.SMSCtoVSSAtt -SMSC,SMSC.A.22,"{""cn"": ""SMSC到VSS短信成功次数"", ""en"": ""SMSC.SMSCtoVSSucc""}",SMSC到VSS短信成功次数,SMSC.SMSCtoVSSucc -SMSC,SMSC.A.23,"{""cn"": ""SMSC到VSS短信失败次数"", ""en"": ""SMSC.SMSCtoVSSFail""}",SMSC到VSS短信失败次数,SMSC.SMSCtoVSSFail -SMSC,SMSC.A.24,"{""cn"": ""SMSC到VSS短信字节数"", ""en"": ""SMSC.SMSCtoVSSBytes""}",SMSC到VSS短信字节数,SMSC.SMSCtoVSSBytes -SMSC,SMSC.A.25,"{""cn"": ""SMSC到PPS短信请求次数"", ""en"": ""SMSC.SMSCtoPPSAtt""}",SMSC到PPS短信请求次数,SMSC.SMSCtoPPSAtt -SMSC,SMSC.A.26,"{""cn"": ""SMSC到PPS短信成功次数"", ""en"": ""SMSC.SMSCtoPPSucc""}",SMSC到PPS短信成功次数,SMSC.SMSCtoPPSucc -SMSC,SMSC.A.27,"{""cn"": ""SMSC到PPS短信失败次数"", ""en"": ""SMSC.SMSCtoPPSFail""}",SMSC到PPS短信失败次数,SMSC.SMSCtoPPSFail -SMSC,SMSC.A.28,"{""cn"": ""SMSC到PPS短信字节数"", ""en"": ""SMSC.SMSCtoPPSBytes""}",SMSC到PPS短信字节数,SMSC.SMSCtoPPSBytes -SMSC,SMSC.A.29,"{""cn"": ""SMSC到SMPP短信请求次数"", ""en"": ""SMSC.SMSCtoSMPPAtt""}",SMSC到SMPP短信请求次数,SMSC.SMSCtoSMPPAtt -SMSC,SMSC.A.30,"{""cn"": ""SMSC到SMPP短信成功次数"", ""en"": ""SMSC.SMSCtoSMPPucc""}",SMSC到SMPP短信成功次数,SMSC.SMSCtoSMPPucc -SMSC,SMSC.A.31,"{""cn"": ""SMSC到SMPP短信失败次数"", ""en"": ""SMSC.SMSCtoSMPPFail""}",SMSC到SMPP短信失败次数,SMSC.SMSCtoSMPPFail -SMSC,SMSC.A.32,"{""cn"": ""SMSC到SMPP短信字节数"", ""en"": ""SMSC.SMSCtoSMPPBytes""}",SMSC到SMPP短信字节数,SMSC.SMSCtoSMPPBytes diff --git a/config/goldkpi/核心网网元黄金指标集.xlsx b/config/goldkpi/核心网网元黄金指标集.xlsx deleted file mode 100644 index dde44495..00000000 Binary files a/config/goldkpi/核心网网元黄金指标集.xlsx and /dev/null differ diff --git a/config/menu/menu-fault-management.json b/config/menu/menu-fault-management.json deleted file mode 100644 index 93be0c4d..00000000 --- a/config/menu/menu-fault-management.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 1, - "title": "故障管理", - "icon": "fa fa-telegram", - "href": "", - "target": null, - "parentId": 0, - "child": [ - { - "id": 2, - "title": "活动告警", - "icon": "fa fa-caret-right", - "href": "page/alarm/alarmListDown.html", - "target": null, - "parentId": 1, - "child": null - }, - { - "id": 3, - "title": "历史告警", - "icon": "fa fa-caret-right", - "href": "page/alarm/AlarmListHistory.html", - "target": null, - "parentId": 1, - "child": null - }, - { - "id": 4, - "title": "告警设置", - "icon": "fa fa-caret-right", - "href": "absence/list.html", - "target": null, - "parentId": 1, - "child": null - } - ] -} \ No newline at end of file diff --git a/config/menu/menu-log-management.json b/config/menu/menu-log-management.json deleted file mode 100644 index a9827c75..00000000 --- a/config/menu/menu-log-management.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "id": 1, - "title": "日志管理", - "icon": "fa fa-home", - "href": null, - "target": null, - "parentId": 0, - "child": [ - { - "id": 2, - "title": "操作日志", - "icon": "fa fa-caret-right", - "href": "building/list.html", - "target": null, - "parentId": 1, - "child": null - }, - { - "id": 3, - "title": "安全日志", - "icon": "fa fa-caret-right", - "href": "dormitoryset/list.html", - "target": null, - "parentId": 1, - "child": null - }, - { - "id": 4, - "title": "告警日志", - "icon": "fa fa-caret-right", - "href": "dormitoryset/list.html", - "target": null, - "parentId": 1, - "child": null - }, - { - "id": 5, - "title": "日志设置", - "icon": "fa fa-caret-right", - "href": "dormitory/list.html", - "target": null, - "parentId": 1, - "child": null - } - ] -} \ No newline at end of file diff --git a/config/menu/menu-operation-maintenance .json b/config/menu/menu-operation-maintenance .json deleted file mode 100644 index 39e36aab..00000000 --- a/config/menu/menu-operation-maintenance .json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 1, - "title": "操作维护", - "icon": "fa fa-home", - "href": null, - "target": null, - "parentId": 0, - "child": [ - { - "id": 2, - "title": "参数配置MML", - "icon": "fa fa-caret-right", - "href": "building/list.html", - "target": null, - "parentId": 1, - "child": null - }, - { - "id": 3, - "title": "用户管理MML", - "icon": "fa fa-caret-right", - "href": "dormitoryset/list.html", - "target": null, - "parentId": 1, - "child": null - } - ] -} \ No newline at end of file diff --git a/config/menu/menu-performance-management.json b/config/menu/menu-performance-management.json deleted file mode 100644 index 60fd6ca0..00000000 --- a/config/menu/menu-performance-management.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "id": 1, - "href": null, - "icon": "fa fa-wrench", - "title": "性能管理", - "target": null, - "parentId": 0, - "child": [ - { - "id": 1, - "href": "page/task/list.html", - "icon": "fa fa-caret-right", - "child": null, - "title": "任务管理", - "target": null, - "parentId": 1 - }, - { - "id": 2, - "href": "page/repair/list.html", - "icon": "fa fa-caret-right", - "child": null, - "title": "数据管理", - "target": null, - "parentId": 1 - }, - { - "id": 3, - "href": "page/gold/list.html", - "icon": "fa fa-caret-right", - "child": null, - "title": "黄金指标", - "target": null, - "parentId": 1 - }, - { - "id": 4, - "href": "page/task/threshold.html", - "icon": "fa fa-caret-right", - "child": null, - "title": "性能门限", - "target": null, - "parentId": 1 - } - ] -} \ No newline at end of file diff --git a/config/menu/menu-security-management.json b/config/menu/menu-security-management.json deleted file mode 100644 index 3842e58e..00000000 --- a/config/menu/menu-security-management.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 1, - "href": null, - "icon": "fa fa-users", - "child": [ - { - "id": 2, - "href": "page/user/list.html", - "icon": "fa fa-caret-right", - "child": null, - "title": "用户管理", - "target": null, - "parentId": 1 - }, - { - "id": 3, - "href": "dormitoryset/list.html", - "icon": "fa fa-caret-right", - "child": null, - "title": "群组管理", - "target": null, - "parentId": 1 - }, - { - "id": 4, - "href": "dormitory/list.html", - "icon": "fa fa-caret-right", - "child": null, - "title": "权限管理", - "target": null, - "parentId": 1 - } - ], - "title": "安全管理", - "target": null, - "parentId": 0 -} \ No newline at end of file diff --git a/config/menu/menu-system-management.json b/config/menu/menu-system-management.json deleted file mode 100644 index 3e764a0e..00000000 --- a/config/menu/menu-system-management.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "id": 1, - "title": "配置管理", - "icon": "fa fa-home", - "href": null, - "target": null, - "parentId": 0, - "child": [ - { - "id": 2, - "title": "网元管理", - "icon": "fa fa-caret-right", - "href": "building/list.html", - "target": null, - "parentId": 1, - "child": null - }, - { - "id": 3, - "title": "参数配置", - "icon": "fa fa-caret-right", - "href": "dormitoryset/list.html", - "target": null, - "parentId": 1, - "child": null - }, - { - "id": 4, - "title": "软件管理", - "icon": "fa fa-caret-right", - "href": "dormitory/list.html", - "target": null, - "parentId": 1, - "child": null - }, - { - "id": 5 , - "title": "许可证管理", - "icon": "fa fa-caret-right", - "href": "selection/list.html", - "target": null, - "parentId": 1, - "child": null - } - ] -} \ No newline at end of file diff --git a/config/menu/menu-topology-maagement.json b/config/menu/menu-topology-maagement.json deleted file mode 100644 index 3192e825..00000000 --- a/config/menu/menu-topology-maagement.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "id": 1, - "title": "拓扑管理", - "icon": "fa fa-home", - "href": null, - "target": null, - "parentId": 0, - "child": [ - { - "id": 2, - "title": "系统拓扑", - "icon": "fa fa-caret-right", - "href": "page/user/list.html", - "target": null, - "parentId": 1, - "child": null - }, - { - "id": 3, - "title": "网元状态", - "icon": "fa fa-caret-right", - "href": "page/main.html", - "target": null, - "parentId": 1, - "child": null - } - ] -} - - -{ - "id": 1, - "href": null, - "icon": "fa fa-home", - "child": [ - { - "id": 3, - "href": "page/main.html", - "icon": "fa fa-caret-right", - "child": null, - "title": "网元状态", - "target": null, - "parentId": 1 - } - ], - "title": "系统状态", - "target": null, - "parentId": 0 -} \ No newline at end of file diff --git a/config/menu/menu-trace-management.json b/config/menu/menu-trace-management.json deleted file mode 100644 index 511b7e0e..00000000 --- a/config/menu/menu-trace-management.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 1, - "title": "跟踪管理", - "icon": "fa fa-home", - "href": null, - "target": null, - "parentId": 0, - "child": [ - { - "id": 2, - "title": "任务管理", - "icon": "fa fa-caret-right", - "href": "building/list.html", - "target": null, - "parentId": 1, - "child": null - }, - { - "id": 3, - "title": "信令分析", - "icon": "fa fa-caret-right", - "href": "dormitoryset/list.html", - "target": null, - "parentId": 1, - "child": null - } - ] -} \ No newline at end of file diff --git a/config/menu/menu.json b/config/menu/menu.json deleted file mode 100644 index e8d2744a..00000000 --- a/config/menu/menu.json +++ /dev/null @@ -1,346 +0,0 @@ -{ - "parent": [ - { - "id": 1, - "title": "系统状态", - "icon": "fa fa-cog", - "href": null, - "target": null, - "parentId": 0, - "child": [ - { - "id": 2, - "title": "AMF", - "icon": "fa fa-caret-right", - "href": "page/user/list.html", - "target": null, - "parentId": 1, - "child": null - }, - { - "id": 3, - "title": "AUSF", - "icon": "fa fa-caret-right", - "href": "grade/list.html", - "target": null, - "parentId": 1, - "child": null - }, - { - "id": 4, - "title": "UDM", - "icon": "fa fa-caret-right", - "href": "org/list.html", - "target": null, - "parentId": 1, - "child": null - }, - { - "id": 5, - "title": "SMF", - "icon": "fa fa-caret-right", - "href": "student/list.html", - "target": null, - "parentId": 1, - "child": null - } - ] - }, - { - "id": 7, - "title": "配置管理", - "icon": "fa fa-home", - "href": null, - "target": null, - "parentId": 0, - "child": [ - { - "id": 8, - "title": "AMF", - "icon": "fa fa-caret-right", - "href": "building/list.html", - "target": null, - "parentId": 7, - "child": null - }, - { - "id": 9, - "title": "AUSF", - "icon": "fa fa-caret-right", - "href": "dormitoryset/list.html", - "target": null, - "parentId": 7, - "child": null - }, - { - "id": 10, - "title": "UDM", - "icon": "fa fa-caret-right", - "href": "dormitory/list.html", - "target": null, - "parentId": 7, - "child": null - }, - { - "id": 11, - "title": "SMF", - "icon": "fa fa-caret-right", - "href": "selection/list.html", - "target": null, - "parentId": 7, - "child": null - } - ] - }, - { - "id": 12, - "title": "故障管理", - "icon": "fa fa-telegram", - "href": "", - "target": null, - "parentId": 0, - "child": [ - { - "id": 13, - "title": "活动告警", - "icon": "fa fa-caret-right", - "href": "page/alarm/alarmListDown.html", - "target": null, - "parentId": 12, - "child": null - }, - { - "id": 14, - "title": "历史告警", - "icon": "fa fa-caret-right", - "href": "page/alarm/AlarmListHistory.html", - "target": null, - "parentId": 12, - "child": null - }, - { - "id": 15, - "title": "告警设置", - "icon": "fa fa-caret-right", - "href": "absence/list.html", - "target": null, - "parentId": 12, - "child": null - } - ] - }, - { - "id": 16, - "title": "业务统计", - "icon": "fa fa-wrench", - "href": null, - "target": null, - "parentId": 0, - "child": [ - { - "id": 17, - "title": "AMF", - "icon": "fa fa-caret-right", - "href": "repair/list.html", - "target": null, - "parentId": 16, - "child": null - }, - { - "id": 18, - "title": "UDM", - "icon": "fa fa-caret-right", - "href": "repair/list.html", - "target": null, - "parentId": 16, - "child": null - } - ] - }, - { - "id": 19, - "title": "日志管理", - "icon": "fa fa-truck", - "href": null, - "target": null, - "parentId": 0, - "child": [ - { - "id": 20, - "title": "操作日志", - "icon": "fa fa-caret-right", - "href": "page/log/operLogList.html", - "target": null, - "parentId": 19, - "child": null - }, - { - "id": 21, - "title": "安全日志", - "icon": "fa fa-caret-right", - "href": "page/log/securityLogList.html", - "target": null, - "parentId": 19, - "child": null - }, - { - "id": 22, - "title": "告警入库日志", - "icon": "fa fa-caret-right", - "href": "page/log/alarmLogList.html", - "target": null, - "parentId": 19, - "child": null - } - ] - }, - { - "id": 23, - "title": "系统维护", - "icon": "fa fa-truck", - "href": null, - "target": null, - "parentId": 0, - "child": [ - { - "id": 24, - "title": "设备升级", - "icon": "fa fa-caret-right", - "href": "visit/list.html", - "target": null, - "parentId": 23, - "child": [ - { - "id": 26, - "title": "AMF", - "icon": "fa fa-caret-right", - "href": "user/list.html", - "target": null, - "parentId": 23, - "child": null - }, - { - "id": 27, - "title": "AUSF", - "icon": "fa fa-caret-right", - "href": "user/list.html", - "target": null, - "parentId": 23, - "child": null - }, - { - "id": 28, - "title": "UDM", - "icon": "fa fa-caret-right", - "href": "user/list.html", - "target": null, - "parentId": 23, - "child": null - }, - { - "id": 29, - "title": "SMF", - "icon": "fa fa-caret-right", - "href": "user/list.html", - "target": null, - "parentId": 23, - "child": null - } - ] - }, - { - "id": 25, - "title": "设备控制", - "icon": "fa fa-caret-right", - "href": "visit/list.html", - "target": null, - "parentId": 22, - "child": [ - { - "id": 24, - "title": "AMF", - "icon": "fa fa-caret-right", - "href": "user/list.html", - "target": null, - "parentId": 30, - "child": null - }, - { - "id": 31, - "title": "AUSF", - "icon": "fa fa-caret-right", - "href": "user/list.html", - "target": null, - "parentId": 24, - "child": null - }, - { - "id": 32, - "title": "UDM", - "icon": "fa fa-caret-right", - "href": "user/list.html", - "target": null, - "parentId": 24, - "child": null - }, - { - "id": 33, - "title": "SMF", - "icon": "fa fa-caret-right", - "href": "user/list.html", - "target": null, - "parentId": 24, - "child": null - } - ] - }, - { - "id": 25, - "title": "许可证更新", - "icon": "fa fa-caret-right", - "href": "visit/list.html", - "target": null, - "parentId": 22, - "child": [ - { - "id": 34, - "title": "AMF", - "icon": "fa fa-caret-right", - "href": "user/list.html", - "target": null, - "parentId": 25, - "child": null - }, - { - "id": 35, - "title": "AUSF", - "icon": "fa fa-caret-right", - "href": "user/list.html", - "target": null, - "parentId": 25, - "child": null - }, - { - "id": 36, - "title": "UDM", - "icon": "fa fa-caret-right", - "href": "user/list.html", - "target": null, - "parentId": 25, - "child": null - }, - { - "id": 37, - "title": "SMF", - "icon": "fa fa-caret-right", - "href": "user/list.html", - "target": null, - "parentId": 25, - "child": null - } - ] - } - ] - } - ] -} diff --git a/config/mml/omc/omc_mml_config.yaml b/config/mml/omc/omc_mml_config.yaml deleted file mode 100644 index 8f403b6f..00000000 --- a/config/mml/omc/omc_mml_config.yaml +++ /dev/null @@ -1,1089 +0,0 @@ -omc: - mmlManagement: - display: "MML Management" - mml: - - operation: "lst" - object: "mmlcmd" - display: "List MML Command" - params: - - name: "category" - alias: "ne_type" - type: "string" - optional: "true" - apostr: "true" - filter: "" - display: "Category" - comment: "" - - name: "operation" - alias: "operation" - type: "string" - optional: "true" - apostr: "true" - filter: "" - display: "Operation" - comment: "" - - name: "object" - alias: "object" - type: "string" - optional: "true" - apostr: "true" - filter: "" - display: "Object" - comment: "" - systemManagement: - display: "System Management" - mml: - - operation: "dsp" - object: "sysinfo" - display: "Display NE System Information" - params: - - name: "netype" - alias: "neType" - type: "string" - optional: "true" - apostr: "false" - filter: "" - display: "NE type" - comment: "" - - name: "neid" - alias: "neId" - type: "string" - optional: "true" - filter: "" - display: "NE ID" - comment: "" - licenseManagement: - display: "License Management" - mml: - - operation: "dsp" - object: "licenseinfo" - display: "Display NE License Information" - status: "Inactive" - params: - - name: "netype" - alias: "neType" - type: "string" - optional: "true" - apostr: "false" - filter: "" - display: "NE type" - comment: "" - - name: "neid" - alias: "neId" - type: "string" - optional: "true" - filter: "" - display: "NE ID" - comment: "" - - operation: "lst" - object: "license" - display: "List NE License Information" - status: "Inactive" - params: - - name: "netype" - alias: "ne_type" - type: "string" - optional: "true" - apostr: "true" - filter: "" - display: "NE type" - comment: "" - - name: "neid" - alias: "ne_id" - type: "string" - optional: "true" - apostr: "true" - filter: "" - display: "NE ID" - comment: "" - - operation: "dep" - object: "license" - display: "Deployment NE License" - status: "Inactive" - params: - - name: "srcnetype" - alias: "ne_type" - type: "string" - optional: "false" - apostr: "true" - filter: "" - display: "Source NE type" - comment: "" - - name: "srcneid" - alias: "ne_id" - type: "string" - optional: "false" - filter: "" - display: "Source NE ID" - comment: "" - - name: "dstnetype" - alias: "ne_type" - type: "string" - optional: "false" - apostr: "false" - filter: "" - display: "Destination NE type" - comment: "" - - name: "dstneid" - alias: "ne_id" - type: "string" - optional: "false" - filter: "" - display: "Destination NE ID" - comment: "" - - name: "number" - alias: "dep_number" - type: "int" - optional: "false" - filter: "" - display: "Deployment number" - comment: "" - - operation: "rel" - object: "license" - display: "Batch Release NE License" - status: "Inactive" - params: - - name: "netype" - alias: "ne_type" - type: "string" - optional: "true" - apostr: "true" - loc: "true" - filter: "" - display: "NE type" - comment: "" - - name: "neid" - alias: "ne_id" - type: "string" - optional: "true" - apostr: "true" - loc: "true" - filter: "" - display: "NE ID" - comment: "" - - name: "capcity" - alias: "capcity" - type: "int" - optional: "false" - apostr: "false" - loc: "false" - filter: "" - display: "Release number" - comment: "" - - operation: "ins" - object: "license" - display: "Install NE License" - status: "Inactive" - params: - - name: "netype" - alias: "ne_type" - type: "string" - optional: "false" - apostr: "true" - loc: "true" - filter: "" - display: "NE type" - comment: "" - - name: "neid" - alias: "ne_id" - type: "string" - optional: "false" - apostr: "true" - loc: "true" - filter: "" - display: "NE ID" - comment: "" - - name: "capcity" - alias: "capcity" - type: "int" - optional: "false" - loc: "false" - filter: "" - display: "Install number" - comment: "" - - operation: "adj" - object: "license" - display: "Adjustment NE License" - status: "Inactive" - params: - - name: "netype" - alias: "ne_type" - type: "string" - optional: "true" - apostr: "true" - loc: "true" - filter: "" - display: "NE type" - comment: "" - - name: "neid" - alias: "ne_id" - type: "string" - optional: "true" - apostr: "true" - loc: "true" - filter: "" - display: "NE ID" - comment: "" - - name: "number" - alias: "number" - type: "int" - optional: "false" - loc: "false" - filter: "" - display: "Adjustment number" - comment: "" - - operation: "exp" - object: "license" - display: "Export NE License" - status: "Inactive" - params: - - name: "netype" - alias: "ne_type" - type: "string" - optional: "true" - apostr: "true" - filter: "" - display: "NE type" - comment: "" - - name: "neid" - alias: "ne_id" - type: "string" - optional: "true" - apostr: "true" - filter: "" - display: "NE ID" - comment: "" - - operation: "uni" - object: "license" - display: "Uninstall NE License" - status: "Inactive" - params: - - name: "netype" - alias: "ne_type" - type: "string" - optional: "false" - apostr: "true" - filter: "" - display: "NE type" - comment: "" - - name: "neid" - alias: "ne_id" - type: "string" - optional: "false" - apostr: "true" - filter: "" - display: "NE ID" - comment: "" - - operation: "dsp" - object: "nelink" - display: "Display NE Interface Link Status" - status: "Inactive" - params: - - name: "netype" - alias: "ne_type" - type: "string" - optional: "true" - apostr: "false" - filter: "" - display: "NE type" - comment: "" - - name: "neid" - alias: "ne_id" - type: "string" - optional: "true" - filter: "" - display: "NE ID" - comment: "" - - name: "interface" - alias: "interface" - type: "string" - optional: "true" - filter: "" - display: "Interface" - comment: "" - nrmManagement: - display: "NBI Resourece Management" - mml: - - operation: "dsp" - object: "nbicm" - display: "Display NBI Resource Management" - params: - - name: "netype" - alias: "ne_type" - type: "string" - optional: "true" - apostr: "true" - filter: "" - display: "NE type" - comment: "" - - name: "neid" - alias: "ne_id" - type: "string" - optional: "true" - apostr: "true" - filter: "" - display: "NE ID" - comment: "" - - name: "rmuid" - alias: "rm_uid" - type: "string" - optional: "true" - apostr: "true" - filter: "" - display: "Resource management UID" - comment: "" - neManagement: - display: "Network Element Management" - mml: - - operation: "lst" - object: "neinfo" - display: "List NE Information" - params: - - name: "netype" - alias: "ne_type" - type: "string" - optional: "true" - apostr: "true" - filter: "" - display: "NE type" - comment: "" - - name: "neid" - alias: "ne_id" - type: "string" - optional: "true" - apostr: "true" - filter: "" - display: "NE ID" - comment: "" - - name: "rmuid" - alias: "rm_uid" - type: "string" - optional: "true" - apostr: "true" - filter: "" - display: "Resource management UID" - comment: "" - - operation: "lst" - object: "memap" - display: "List Managed Element Map" - params: - - name: "rmuid" - alias: "rm_uid" - type: "string" - optional: "true" - apostr: "true" - filter: "" - display: "Resource management UID" - comment: "" - - operation: "add" - object: "neinfo" - display: "Add Network Element" - params: - - name: "netype" - alias: "ne_type" - type: "string" - optional: "false" - apostr: "false" - loc: "false" - filter: "" - display: "NE type" - comment: "" - - name: "neid" - alias: "ne_id" - type: "string" - optional: "false" - apostr: "false" - loc: "false" - filter: "" - display: "NE ID" - comment: "" - - name: "rmuid" - alias: "rm_uid" - type: "string" - optional: "false" - apostr: "false" - loc: "false" - filter: "" - display: "Resource management UID" - comment: "" - - name: "ip" - alias: "ip" - type: "string" - optional: "false" - apostr: "false" - loc: "false" - filter: "" - display: "IP address" - comment: "" - - name: "port" - alias: "port" - type: "string" - optional: "false" - apostr: "false" - loc: "false" - filter: "" - display: "Port" - comment: "" - - name: "nename" - alias: "ne_name" - type: "string" - optional: "false" - apostr: "false" - loc: "false" - filter: "" - display: "NE name" - comment: "" - - name: "pvflag" - alias: "pv_flag" - type: "string" - optional: "false" - apostr: "false" - loc: "false" - filter: "" - display: "PV flag" - comment: "" - - operation: "mod" - object: "neinfo" - display: "Modify Network Element" - params: - - name: "netype" - alias: "ne_type" - type: "string" - optional: "false" - apostr: "true" - loc: "true" - filter: "" - display: "NE type" - comment: "" - - name: "neid" - alias: "ne_id" - type: "string" - optional: "false" - apostr: "true" - loc: "true" - filter: "" - display: "NE ID" - comment: "" - - name: "rmuid" - alias: "rm_uid" - type: "string" - optional: "true" - apostr: "false" - loc: "false" - filter: "" - display: "Resource management UID" - comment: "" - - name: "ip" - alias: "ip" - type: "string" - optional: "true" - apostr: "false" - loc: "false" - filter: "" - display: "IP address" - comment: "" - - name: "port" - alias: "port" - type: "string" - optional: "true" - apostr: "false" - loc: "false" - filter: "" - display: "Port" - comment: "" - - name: "nename" - alias: "ne_name" - type: "string" - optional: "true" - apostr: "false" - loc: "false" - filter: "" - display: "NE name" - comment: "" - - name: "pvflag" - alias: "pv_flag" - type: "string" - optional: "true" - apostr: "false" - loc: "false" - filter: "" - display: "PV flag" - comment: "" - - operation: "del" - object: "neinfo" - display: "Delete Network Element" - params: - - name: "netype" - alias: "ne_type" - type: "string" - optional: "false" - apostr: "true" - filter: "" - display: "NE type" - comment: "" - - name: "neid" - alias: "ne_id" - type: "string" - optional: "false" - apostr: "true" - filter: "" - display: "NE ID" - comment: "" - neConfigManagement: - display: "NE Config Parameter Management" - mml: - - operation: "dsp" - object: "neconfig" - display: "Display NE Config Parameter" - params: - - name: "netype" - alias: "ne_type" - type: "string" - optional: "true" - apostr: "true" - loc: "true" - filter: "" - display: "NE type" - comment: "" - - name: "neid" - alias: "ne_id" - type: "string" - optional: "true" - apostr: "true" - loc: "true" - filter: "" - display: "NE ID" - comment: "" - - name: "tag" - alias: "top_tag" - type: "string" - optional: "true" - apostr: "true" - loc: "true" - filter: "" - display: "Parameter tag" - comment: "" - neVersionManagement: - display: "NE Version Management" - mml: - - operation: "upg" - object: "neversion" - display: "Upgrade NE Software Version" - params: - - name: "netype" - alias: "ne_type" - type: "string" - optional: "false" - apostr: "true" - loc: "true" - filter: "" - display: "NE type" - comment: "" - - name: "neid" - alias: "ne_id" - type: "string" - optional: "false" - apostr: "true" - loc: "true" - filter: "" - display: "NE ID" - comment: "" - - name: "version" - alias: "version" - type: "string" - optional: "false" - apostr: "true" - loc: "true" - filter: "" - display: "Version" - comment: "" - faultManagement: - display: "Fault Management" - mml: - - operation: "dsp" - object: "alarm" - display: "Display Alarm Information" - params: - - name: "netype" - alias: "ne_type" - type: "string" - optional: "true" - apostr: "true" - loc: "true" - filter: "" - display: "NE type" - comment: "" - - name: "neid" - alias: "ne_id" - type: "string" - optional: "true" - apostr: "true" - loc: "true" - filter: "" - display: "NE UID" - comment: "" - - name: "nename" - alias: "ne_name" - type: "string" - optional: "true" - apostr: "true" - filter: "" - display: "NE name" - comment: "" - - name: "alarmcode" - alias: "alarm_code" - type: "int" - optional: "true" - apostr: "true" - filter: "" - display: "Alarm code" - comment: "" - - name: "origseverity" - alias: "orig_severity" - type: "enum" - optional: "true" - apostr: "true" - filter: '{"Critical":"Critical","Major":"Major","Minor":"Minor","Warning":"Warning","Event":"Event"}' - display: "Original severity" - comment: "" - - name: "pvflag" - alias: "pv_flag" - type: "string" - optional: "true" - apostr: "true" - filter: "" - display: "PV flag" - comment: "" - - name: "starttime" - alias: "event_time>" - type: "string" - optional: "true" - apostr: "true" - filter: "" - display: "Alarm event start time" - comment: "" - - name: "endtime" - alias: "event_time<" - type: "string" - optional: "true" - apostr: "true" - filter: "" - display: "Alarm event end time" - comment: "" - - name: "alarmtype" - alias: "alarm_type" - type: "enum" - optional: "true" - apostr: "true" - filter: '{"CommunicationAlarm":"CommunicationAlarm","EquipmentAlarm":"EquipmentAlarm","ProcessingFailure":"ProcessingFailure","EnvironmentalAlarm":"EnvironmentalAlarm","QualityOfServiceAlarm":"QualityOfServiceAlarm"}' - display: "Alarm type" - comment: "" - - name: "alarmstatus" - alias: "alarm_status" - type: "int" - optional: "true" - apostr: "true" - filter: "" - display: "Alarm status" - comment: "" - pmTaskManagement: - display: "Performance Measure Task Management" - mml: - - operation: "lst" - object: "measuretask" - display: "List Performance Measure Task" - params: - - name: "id" - alias: "id" - type: "string" - optional: "true" - apostr: "false" - loc: "true" - filter: "" - display: "Task ID" - comment: "" - - name: "netype" - alias: "ne_type" - type: "string" - optional: "true" - apostr: "true" - filter: "" - display: "NE type" - comment: "" - - name: "granuloption" - alias: "granul_option" - type: "string" - optional: "true" - apostr: "true" - filter: "" - display: "Time granularity" - comment: "" - - operation: "add" - object: "measuretask" - display: "Add Performance Measure Task" - params: - - name: "netype" - alias: "ne_type" - type: "string" - optional: "false" - apostr: "false" - loc: "false" - filter: "" - display: "NE type" - comment: "" - - name: "neids" - alias: "ne_ids" - type: "array" - optional: "false" - apostr: "false" - loc: "false" - filter: "" - display: "NE ID set" - comment: "" - - name: "granuloption" - alias: "granul_option" - type: "string" - optional: "false" - apostr: "false" - loc: "false" - filter: "" - display: "Granularity option" - comment: "" - - name: "kpiset" - alias: "kpi_set" - type: "json" - optional: "false" - apostr: "false" - loc: "false" - filter: "" - display: "KPI set" - comment: "" - - name: "starttime" - alias: "start_time" - type: "string" - optional: "false" - apostr: "false" - loc: "false" - filter: "" - display: "Measure task start time" - comment: "" - - name: "endtime" - alias: "end_time" - type: "string" - optional: "false" - apostr: "false" - loc: "false" - filter: "" - display: "Measure task end time" - comment: "" - - operation: "mod" - object: "measuretask" - display: "Modify Performance Measure Task" - params: - - name: "id" - alias: "id" - type: "string" - optional: "false" - apostr: "false" - loc: "true" - filter: "" - display: "Task ID" - comment: "" - - name: "kpiset" - alias: "kpi_set" - type: "json" - optional: "true" - apostr: "false" - loc: "false" - filter: "" - display: "KPI set" - comment: "" - - name: "starttime" - alias: "start_time" - type: "string" - optional: "true" - apostr: "false" - loc: "false" - filter: "" - display: "Measure task start time" - comment: "" - - name: "endtime" - alias: "end_time" - type: "string" - optional: "true" - apostr: "false" - loc: "false" - filter: "" - display: "Measure task end time" - comment: "" - - name: "granuloption" - alias: "granul_option" - type: "string" - optional: "true" - apostr: "false" - loc: "false" - filter: "" - display: "granularity option" - comment: "" - - operation: "del" - object: "measuretask" - display: "Delete Performance Measure Task" - params: - - name: "id" - alias: "id" - type: "string" - optional: "false" - apostr: "false" - loc: "true" - filter: "" - display: "Task ID" - comment: "" - - operation: "act" - object: "measuretask" - display: "Active Performance Measure Task" - params: - - name: "id" - alias: "id" - type: "string" - optional: "false" - apostr: "false" - loc: "true" - filter: "" - display: "Task ID" - comment: "" - - operation: "dea" - object: "measuretask" - display: "Deactive Performance Measure Task" - params: - - name: "id" - alias: "id" - type: "string" - optional: "false" - apostr: "false" - loc: "true" - filter: "" - display: "Task ID" - comment: "" - pmDataManagement: - display: "Performance Data Management" - mml: - - operation: "lst" - object: "measuredata" - display: "List Performance Data" - params: - - name: "id" - alias: "task_id" - type: "string" - optional: "true" - apostr: "false" - loc: "true" - filter: "" - display: "Task ID" - comment: "" - - name: "netype" - alias: "ne_type" - type: "string" - optional: "true" - apostr: "true" - loc: "true" - filter: "" - display: "NE type" - comment: "" - - name: "kpiid" - alias: "kpi_id" - type: "string" - optional: "true" - apostr: "true" - loc: "true" - filter: "" - display: "NE type" - comment: "" - - name: "starttime" - alias: "start_time>" - type: "string" - optional: "true" - apostr: "false" - filter: "" - display: "Measure period start time(>=)" - comment: "" - - name: "endtime" - alias: "start_time<" - type: "string" - optional: "true" - apostr: "false" - filter: "" - display: "Measure period start time(<=)" - comment: "" - logManagement: - display: "Log Management" - mml: - - operation: "lst" - object: "systemlog" - display: "List System Log" - params: - - name: "processtype" - alias: "process_type" - type: "string" - optional: "true" - apostr: "true" - loc: "true" - filter: "" - display: "Process type" - comment: "" - - name: "starttime" - alias: "log_time>" - type: "string" - optional: "true" - apostr: "true" - filter: "" - display: "Log time more than" - comment: "" - - name: "endtime" - alias: "log_time<" - type: "string" - optional: "true" - apostr: "true" - filter: "" - display: "Log time less than" - comment: "" - - operation: "lst" - object: "operationlog" - display: "List Operation Log" - params: - - name: "accountid" - alias: "account_name" - type: "string" - optional: "true" - apostr: "true" - loc: "true" - filter: "" - display: "Account ID" - comment: "" - - name: "starttime" - alias: "log_time>" - type: "string" - optional: "true" - apostr: "true" - filter: "" - display: "Log time more than" - comment: "" - - name: "endtime" - alias: "log_time<" - type: "string" - optional: "true" - apostr: "true" - filter: "" - display: "Log Time Less Than" - comment: "" - - operation: "lst" - object: "securitylog" - display: "List Security Log" - params: - - name: "accountid" - alias: "account_name" - type: "string" - optional: "true" - apostr: "true" - loc: "true" - filter: "" - display: "Account ID" - comment: "" - - name: "starttime" - alias: "op_time>" - type: "string" - optional: "true" - apostr: "true" - filter: "" - display: "Log time more than" - comment: "" - - name: "endtime" - alias: "op_time<" - type: "string" - optional: "true" - apostr: "true" - filter: "" - display: "Log time less than" - comment: "" - - operation: "lst" - object: "alarmlog" - display: "List Alarm Log" - params: - - name: "netype" - alias: "ne_type" - type: "string" - optional: "true" - apostr: "true" - filter: "" - display: "NE type" - comment: "" - - name: "starttime" - alias: "log_time>" - type: "string" - optional: "true" - apostr: "true" - filter: "" - display: "Log time(>=)" - comment: "" - - name: "endtime" - alias: "log_time<" - type: "string" - optional: "true" - apostr: "true" - filter: "" - display: "Log time less than" - comment: "" - - operation: "lst" - object: "eventlog" - display: "List NE Event Log" - params: - - name: "netype" - alias: "ne_type" - type: "string" - optional: "true" - apostr: "true" - loc: "true" - filter: "" - display: "NE type" - comment: "" - - name: "neid" - alias: "ne_id" - type: "string" - optional: "true" - apostr: "true" - loc: "true" - filter: "" - display: "NE ID" - comment: "" - - name: "starttime" - alias: "log_time>" - type: "string" - optional: "true" - apostr: "true" - filter: "" - display: "Log time(>=)" - comment: "" - - name: "endtime" - alias: "log_time<" - type: "string" - optional: "true" - apostr: "true" - filter: "" - display: "Log time(<=)" - comment: "" - systemCommand: - display: "Linux System Command" - mml: - - operation: "run" - object: "shell" - display: "Run Shell Command" - status: "Inactive" - params: - - name: "cmd" - alias: "cmd" - type: "string" - optional: "false" - apostr: "true" - loc: "false" - filter: "" - display: "Shell command" - comment: "" \ No newline at end of file diff --git a/config/mml/subscriber/udm_sub_mml_config.yaml b/config/mml/subscriber/udm_sub_mml_config.yaml deleted file mode 100644 index 9f219e1f..00000000 --- a/config/mml/subscriber/udm_sub_mml_config.yaml +++ /dev/null @@ -1,669 +0,0 @@ -udm: - authdataManagement: - display: "Authentication Data Management" - mml: - - operation: "dsp" - object: "authdat" - display: "Display Auth Data" - params: - - name: "imsi" - type: "string" - optional: "false" - filter: "" - display: "IMSI" - comment: "" - - operation: "add" - object: "authdat" - display: "Add Auth Data" - params: - - name: "imsi" - type: "string" - optional: "false" - filter: "" - display: "IMSI" - comment: "" - - name: "ki" - type: "string" - optional: "false" - filter: "" - display: "KI" - comment: "" - - name: "amf" - type: "string" - optional: "false" - filter: "" - display: "AMF" - comment: "" - - name: "algo" - type: "int" - optional: "false" - filter: "0~15" - display: "Algo Index" - comment: "" - - name: "opc" - type: "string" - optional: "true" - filter: "" - display: "OPC" - comment: "" - - operation: "del" - object: "authdat" - display: "Delete Auth Data" - params: - - name: "imsi" - type: "string" - optional: "false" - filter: "" - display: "IMSI" - comment: "" - - operation: "baa" - object: "authdat" - display: "Batch Add Auth Data" - params: - - name: "start_imsi" - type: "string" - optional: "false" - filter: "" - display: "Starting IMSI" - comment: "" - - name: "sub_num" - type: "int" - optional: "false" - filter: "" - display: "Auth Data Number" - comment: "" - - name: "ki" - type: "string" - optional: "false" - filter: "" - display: "KI" - comment: "" - - name: "amf" - type: "string" - optional: "false" - filter: "" - display: "AMF" - comment: "" - - name: "algo" - type: "int" - optional: "false" - filter: "0~15" - display: "Algo Index" - comment: "" - - name: "opc" - type: "string" - optional: "true" - filter: "" - display: "OPC" - comment: "" - - operation: "bde" - object: "authdat" - display: "Batch Delete Auth Data" - params: - - name: "start_imsi" - type: "string" - optional: "false" - filter: "" - display: "Starting IMSI" - comment: "" - - name: "sub_num" - type: "int" - optional: "false" - filter: "" - display: "Auth Data Number" - comment: "" - - operation: "import" - object: "authdat" - display: "Import Auth Data From File" - params: - - name: "path" - type: "file" - optional: "false" - filter: ".txt" - display: "Path File" - comment: "" - - operation: "export" - object: "authdat" - display: "Export Auth Data to File" - params: - - name: "path" - type: "string" - optional: "false" - filter: "" - display: "Path File" - comment: "" - subscriberManagement: - display: "Subcriber Management" - mml: - - operation: "dsp" - object: "udmuser" - display: "Display UDM Subscriber" - params: - - name: "imsi" - type: "string" - optional: "false" - filter: "" - display: "IMSI" - comment: "" - - operation: "add" - object: "udmuser" - display: "Add UDM Subscriber" - params: - - name: "imsi" - type: "string" - optional: "false" - filter: "" - display: "IMSI" - comment: "" - - name: "msisdn" - type: "string" - optional: "false" - filter: "" - display: "MSISDN" - comment: "" - - name: "ambr" - type: "string" - optional: "true" - filter: "" - display: "5G UE AMBR" - comment: "" - - name: "nssai" - type: "string" - optional: "true" - filter: "" - display: "5G SNSSAIs" - comment: "" - - name: "arfb" - type: "string" - optional: "true" - filter: "" - display: "5G Forbidden Areas" - comment: "" - - name: "sar" - type: "string" - optional: "true" - filter: "" - display: "5G Service Area Restriction" - comment: "" - - name: "rat" - type: "string" - optional: "true" - filter: "" - display: "RAT Type" - comment: "" - - name: "cn" - type: "string" - optional: "true" - filter: "" - display: "Core Network" - comment: "" - - name: "smf_sel" - type: "string" - optional: "true" - filter: "" - display: "5G SMF Selection Data" - comment: "" - - name: "sm_data" - type: "string" - optional: "false" - filter: "" - display: "5G SM Data" - comment: "" - - name: "static_ip" - type: "string" - optional: "true" - filter: "" - display: "4G Static IP" - comment: "Specify mobile phone static IP address, and '-' indicates the use of dynamic IP address" - - name: "context_id" - type: "int" - optional: "true" - filter: "" - display: "4G Context ID" - comment: "" - - name: "apn_context" - type: "int" - optional: "true" - filter: "" - display: "4G APN Context" - comment: "" - - name: "epstpl" - type: "string" - optional: "true" - filter: "" - display: "4G EPS User Template Name" - comment: "" - - name: "eps_flag" - type: "enum" - optional: "true" - filter: "{\"0\":\"Disable\", \"1\":\"Enable\"}" - display: "4G EPS Flag" - comment: "" - - name: "eps_odb" - type: "int" - optional: "true" - filter: "" - display: "4G EPS ODB" - comment: "" - - name: "hplmn_odb" - type: "int" - optional: "true" - filter: "" - display: "4G HPLMN ODB" - comment: "" - - name: "ard" - type: "int" - optional: "true" - filter: "" - display: "4G Access Restriction Data" - comment: "" - - operation: "del" - object: "udmuser" - display: "Delete Subscriber Data" - params: - - name: "imsi" - type: "string" - optional: "false" - filter: "" - display: "IMSI" - comment: "" - - operation: "mod" - object: "udmuser" - display: "Modify Subscriber Data" - params: - - name: "imsi" - type: "string" - optional: "false" - filter: "" - display: "IMSI" - comment: "" - - name: "msisdn" - type: "string" - optional: "true" - filter: "" - display: "MSISDN" - comment: "" - - name: "ambr" - type: "string" - optional: "true" - filter: "" - display: "5G UE AMBR" - comment: "" - - name: "nssai" - type: "string" - optional: "true" - filter: "" - display: "5G SNSSAIs" - comment: "" - - name: "arfb" - type: "string" - optional: "true" - filter: "" - display: "5G Forbidden Areas" - comment: "" - - name: "sar" - type: "string" - optional: "true" - filter: "" - display: "5G Service Area Restriction" - comment: "" - - name: "rat" - type: "string" - optional: "true" - filter: "" - display: "RAT Type" - comment: "" - - name: "cn" - type: "string" - optional: "true" - filter: "" - display: "Core Network" - comment: "" - - name: "smf_sel" - type: "string" - optional: "true" - filter: "" - display: "5G SMF Selection Data" - comment: "" - - name: "sm_data" - type: "string" - optional: "true" - filter: "" - display: "5G SM Data" - comment: "" - - name: "static_ip" - type: "string" - optional: "true" - filter: "" - display: "4G Static IP" - comment: "Specify mobile phone static IP address, and '-' indicates the use of dynamic IP address" - - name: "context_id" - type: "int" - optional: "true" - filter: "" - display: "4G Context ID" - comment: "" - - name: "apn_context" - type: "int" - optional: "true" - filter: "" - display: "4G APN Context" - comment: "" - - name: "epstpl" - type: "string" - optional: "true" - filter: "" - display: "4G EPS User Template Name" - comment: "" - - name: "eps_flag" - type: "enum" - optional: "true" - filter: "{\"0\":\"Disable\", \"1\":\"Enable\"}" - display: "4G EPS Flag" - comment: "" - - name: "eps_odb" - type: "int" - optional: "true" - filter: "" - display: "4G EPS ODB" - comment: "" - - name: "hplmn_odb" - type: "int" - optional: "true" - filter: "" - display: "4G HPLMN ODB" - comment: "" - - name: "ard" - type: "int" - optional: "true" - filter: "" - display: "4G Access Restriction Data" - comment: "" - - operation: "baa" - object: "udmuser" - display: "Batch Add UDM Subscriber" - params: - - name: "start_imsi" - type: "string" - optional: "false" - filter: "" - display: "Starting IMSI" - comment: "" - - name: "start_msisdn" - type: "string" - optional: "false" - filter: "" - display: "Starting MSISDN" - comment: "" - - name: "sub_num" - type: "int" - optional: "false" - filter: "" - display: "Subscriber Number" - comment: "" - - name: "ambr" - type: "string" - optional: "true" - filter: "" - display: "5G UE AMBR" - comment: "" - - name: "nssai" - type: "string" - optional: "true" - filter: "" - display: "5G SNSSAIs" - comment: "" - - name: "arfb" - type: "string" - optional: "true" - filter: "" - display: "5G Forbidden Areas" - comment: "" - - name: "sar" - type: "string" - optional: "true" - filter: "" - display: "5G Service Area Restriction" - comment: "" - - name: "rat" - type: "string" - optional: "true" - filter: "" - display: "RAT Type" - comment: "" - - name: "cn" - type: "string" - optional: "true" - filter: "" - display: "Core Network" - comment: "" - - name: "smf_sel" - type: "string" - optional: "true" - filter: "" - display: "5G SMF Selection Data" - comment: "" - - name: "sm_data" - type: "string" - optional: "false" - filter: "" - display: "5G SM Data" - comment: "" - - name: "static_ip" - type: "string" - optional: "true" - filter: "" - display: "4G Static IP" - comment: "Specify mobile phone static IP address, and '-' indicates the use of dynamic IP address" - - name: "context_id" - type: "int" - optional: "true" - filter: "" - display: "4G Context ID" - comment: "" - - name: "apn_context" - type: "int" - optional: "true" - filter: "" - display: "4G APN Context" - comment: "" - - name: "epstpl" - type: "string" - optional: "true" - filter: "" - display: "4G EPS User Template Name" - comment: "" - - name: "eps_flag" - type: "enum" - optional: "true" - filter: "{\"0\":\"Disable\", \"1\":\"Enable\"}" - display: "4G EPS Flag" - comment: "" - - name: "eps_odb" - type: "int" - optional: "true" - filter: "" - display: "4G EPS ODB" - comment: "" - - name: "hplmn_odb" - type: "int" - optional: "true" - filter: "" - display: "4G HPLMN ODB" - comment: "" - - name: "ard" - type: "int" - optional: "true" - filter: "" - display: "4G Access Restriction Data" - comment: "" - - operation: "bde" - object: "udmuser" - display: "Batch Delete Subscriber Data" - params: - - name: "start_imsi" - type: "string" - optional: "false" - filter: "" - display: "Starting IMSI" - comment: "" - - name: "sub_num" - type: "string" - optional: "false" - filter: "" - display: "Subcribers Number" - comment: "" - - operation: "bmd" - object: "udmuser" - display: "Batch Modify Subscriber Data" - params: - - name: "start_imsi" - type: "string" - optional: "false" - filter: "" - display: "Starting IMSI" - comment: "" - - name: "sub_num" - type: "string" - optional: "false" - filter: "" - display: "Subcribers Number" - comment: "" - - name: "ambr" - type: "string" - optional: "true" - filter: "" - display: "5G UE AMBR" - comment: "" - - name: "nssai" - type: "string" - optional: "true" - filter: "" - display: "5G SNSSAIs" - comment: "" - - name: "arfb" - type: "string" - optional: "true" - filter: "" - display: "5G Forbidden Areas" - comment: "" - - name: "sar" - type: "string" - optional: "true" - filter: "" - display: "5G Service Area Restriction" - comment: "" - - name: "rat" - type: "string" - optional: "true" - filter: "" - display: "RAT Type" - comment: "" - - name: "cn" - type: "string" - optional: "true" - filter: "" - display: "Core Network" - comment: "" - - name: "smf_sel" - type: "string" - optional: "true" - filter: "" - display: "5G SMF Selection Data" - comment: "" - - name: "sm_data" - type: "string" - optional: "true" - filter: "" - display: "5G SM Data" - comment: "" - - name: "static_ip" - type: "string" - optional: "true" - filter: "" - display: "4G Static IP" - comment: "Specify mobile phone static IP address, and '-' indicates the use of dynamic IP address" - - name: "context_id" - type: "int" - optional: "true" - filter: "" - display: "4G Context ID" - comment: "" - - name: "apn_context" - type: "int" - optional: "true" - filter: "" - display: "4G APN Context" - comment: "" - - name: "epstpl" - type: "string" - optional: "true" - filter: "" - display: "4G EPS User Template Name" - comment: "" - - name: "eps_flag" - type: "enum" - optional: "true" - filter: "{\"0\":\"Disable\", \"1\":\"Enable\"}" - display: "4G EPS Flag" - comment: "" - - name: "eps_odb" - type: "int" - optional: "true" - filter: "" - display: "4G EPS ODB" - comment: "" - - name: "hplmn_odb" - type: "int" - optional: "true" - filter: "" - display: "4G HPLMN ODB" - comment: "" - - name: "ard" - type: "int" - optional: "true" - filter: "" - display: "4G Access Restriction Data" - comment: "" - - operation: "import" - object: "udmuser" - display: "Import Subscriber Data From File" - params: - - name: "path" - type: "file" - optional: "false" - filter: ".txt" - display: "Path File" - comment: "" - - operation: "upload" - object: "udmuser" - display: "Upload Subscriber Data" - status: "Inactive" - params: - - name: "path" - type: "file" - optional: "false" - filter: ".txt" - display: "Path File" - comment: "" - - operation: "export" - object: "udmuser" - display: "Export Subscriber Data to File" - params: - - name: "path" - type: "string" - optional: "false" - filter: "" - display: "Path File" - comment: "" - - operation: "sync" - object: "start" - display: "Sync UDM Data From Public UDM" - params: - - operation: "sync" - object: "state" - display: "Query State of Sync Task" - params: - - - diff --git a/config/mml/system/amf_sys_mml_config.yaml b/config/mml/system/amf_sys_mml_config.yaml deleted file mode 100644 index a7f096d9..00000000 --- a/config/mml/system/amf_sys_mml_config.yaml +++ /dev/null @@ -1,168 +0,0 @@ -amf: - amfManagement: - display: "AMF Management" - mml: - - operation: "help" - object: "" - display: "List AMF MML CMD" - params: - systemManagement: - display: "System Management" - mml: - - operation: "set" - object: "n8_ip" - display: "Set N8 IP Address" - status: "Inactive" - params: - - name: "ip" - type: "string" - optional: "false" - filter: "0~64" - display: "IP Address" - comment: "" - - operation: "set" - object: "n11_ip" - display: "Set N11 IP Address" - status: "Inactive" - params: - - name: "ip" - type: "string" - optional: "false" - filter: "0~64" - display: "IP Address" - comment: "" - - operation: "set" - object: "n12_ip" - display: "Set N12 IP Address" - status: "Inactive" - params: - - name: "ip" - type: "string" - optional: "false" - filter: "0~64" - display: "IP Address" - comment: "" - - operation: "set" - object: "relative_capacity" - display: "Set Relative Capacity" - status: "Inactive" - params: - - name: "capacity" - type: "int" - optional: "false" - filter: "" - display: "Relative Capacity" - comment: "" - - operation: "set" - object: "n2_ip" - display: "Set N2 IP Address" - status: "Inactive" - params: - - name: "ip" - type: "string" - optional: "false" - filter: "" - display: "IP Address" - comment: "" - - operation: "set" - object: "n2_port" - display: "Set N2 Port" - status: "Inactive" - params: - - name: "port" - type: "int" - optional: "false" - filter: "0~65535" - display: "Port" - comment: "" - - operation: "set" - object: "ntpversion" - display: "Set NTP Version" - status: "Inactive" - params: - - name: "version" - type: "int" - optional: "false" - filter: "" - display: "Version" - comment: "" - - operation: "set" - object: "ntpmaxdiff" - display: "Set NTP Max Diff" - status: "Inactive" - params: - - name: "value" - type: "int" - optional: "false" - filter: "100~2000" - display: "Max Value(ms)" - comment: "" - - operation: "set" - object: "ntpsynctimer" - display: "Set NTP Sync Timer" - status: "Inactive" - params: - - name: "periods" - type: "int" - optional: "false" - filter: "" - display: "Periods(second)" - comment: "" - - operation: "add" - object: "slice" - display: "Add Slice" - status: "Inactive" - params: - - name: "sst" - type: "string" - optional: "false" - filter: "" - display: "SST" - comment: "" - - name: "sd" - type: "string" - optional: "false" - filter: "" - display: "SD" - comment: "" - - operation: "deregister" - object: "imsi" - display: "Deregister IMSI" - status: "Inactive" - params: - - name: "IMSI" - type: "string" - optional: "false" - filter: "" - display: "IMSI" - comment: "" - - operation: "exec" - object: "shell" - display: "Execute Shell Command" - status: "Inactive" - params: - - name: "cmd" - type: "string" - optional: "false" - filter: "" - display: "CMD" - comment: "" - - operation: "reload" - object: "" - display: "Reload Config" - status: "Inactive" - params: - subsManagement: - display: "Subscriber Management" - mml: - - operation: "list" - object: "imsi" - display: "List Online IMSI" - status: "Inactive" - params: - - name: "imsi" - type: "string" - optional: "false" - filter: "32" - display: "IMSI" - comment: "" \ No newline at end of file diff --git a/config/mml/system/ausf_sys_mml_config.yaml b/config/mml/system/ausf_sys_mml_config.yaml deleted file mode 100644 index 6a9eab22..00000000 --- a/config/mml/system/ausf_sys_mml_config.yaml +++ /dev/null @@ -1,60 +0,0 @@ -ausf: - ausfManagement: - display: "AUSF Management" - mml: - - operation: "help" - object: "" - display: "List AUSF MML CMD" - params: - systemManagement: - display: "System Management" - mml: - - operation: "set" - object: "n12ip" - display: "Set N12 IP Address" - status: "Inactive" - params: - - name: "ip" - type: "string" - optional: "false" - filter: "" - display: "IP Address" - comment: "" - - operation: "set" - object: "n12port" - display: "Set N12 Port" - status: "Inactive" - params: - - name: "port" - type: "int" - optional: "false" - filter: "1~65535" - display: "Port" - comment: "" - - operation: "set" - object: "n12scheme" - display: "Set N12 Scheme" - status: "Inactive" - params: - - name: "scheme" - type: "enum" - optional: "false" - filter: '{"0":"http", "1":"https"}' - display: "Scheme" - comment: "" - - operation: "set" - object: "supirange" - display: "Set SUPI Range" - status: "Inactive" - params: - - name: "supirange" - type: "string" - optional: "false" - filter: "" - display: "SUPI Range" - comment: "" - - operation: "reload" - object: "" - display: "Reload Config" - status: "Inactive" - params: diff --git a/config/mml/system/ims_sys_mml_config.yaml b/config/mml/system/ims_sys_mml_config.yaml deleted file mode 100644 index 82714056..00000000 --- a/config/mml/system/ims_sys_mml_config.yaml +++ /dev/null @@ -1,9 +0,0 @@ -ims: - imsManagement: - display: "IMS Management" - mml: - - operation: "help" - object: "" - display: "List IMS MML CMD" - status: "Active" - params: diff --git a/config/mml/system/mme_sys_mml_config.yaml b/config/mml/system/mme_sys_mml_config.yaml deleted file mode 100644 index 6c2aff9a..00000000 --- a/config/mml/system/mme_sys_mml_config.yaml +++ /dev/null @@ -1,8 +0,0 @@ -mme: - mmeManagement: - display: "MME Management" - mml: - - operation: "help" - object: "" - display: "List MME MML CMD" - params: diff --git a/config/mml/system/n3iwf_sys_mml_config.yaml b/config/mml/system/n3iwf_sys_mml_config.yaml deleted file mode 100644 index 697ed3ae..00000000 --- a/config/mml/system/n3iwf_sys_mml_config.yaml +++ /dev/null @@ -1,8 +0,0 @@ -n3iwf: - n3iwfManagement: - display: "N3IWF Management" - mml: - - operation: "help" - object: "" - display: "List N3IWF MML CMD" - params: diff --git a/config/mml/system/nrf_sys_mml_config.yaml b/config/mml/system/nrf_sys_mml_config.yaml deleted file mode 100644 index fc717fc1..00000000 --- a/config/mml/system/nrf_sys_mml_config.yaml +++ /dev/null @@ -1,8 +0,0 @@ -nrf: - nrfManagement: - display: "NRF Management" - mml: - - operation: "help" - object: "" - display: "List NRF MML CMD" - params: diff --git a/config/mml/system/nssf_sys_mml_config.yaml b/config/mml/system/nssf_sys_mml_config.yaml deleted file mode 100644 index 23420440..00000000 --- a/config/mml/system/nssf_sys_mml_config.yaml +++ /dev/null @@ -1,8 +0,0 @@ -nssf: - nssfManagement: - display: "NSSF Management" - mml: - - operation: "help" - object: "" - display: "List NSSF MML CMD" - params: diff --git a/config/mml/system/pcf_sys_mml_config.yaml b/config/mml/system/pcf_sys_mml_config.yaml deleted file mode 100644 index a0fd4c38..00000000 --- a/config/mml/system/pcf_sys_mml_config.yaml +++ /dev/null @@ -1,8 +0,0 @@ -pcf: - pcfManagement: - display: "PCF Management" - mml: - - operation: "help" - object: "" - display: "List PCF MML CMD" - params: diff --git a/config/mml/system/smf_sys_mml_config.yaml b/config/mml/system/smf_sys_mml_config.yaml deleted file mode 100644 index 27ab7440..00000000 --- a/config/mml/system/smf_sys_mml_config.yaml +++ /dev/null @@ -1,389 +0,0 @@ -smf: - smfManagement: - display: "SMF Management" - mml: - - operation: "help" - object: "" - display: "List SMF MML CMD" - params: - systemManagement: - display: "System Management" - mml: - - operation: "set" - object: "n7 server" - display: "Set N7 Server" - status: "Inactive" - params: - - name: "scheme" - type: "enum" - optional: "false" - filter: '{"0":"http", "1":"https"}' - display: "Scheme" - comment: "" - - name: "ip" - type: "string" - optional: "false" - filter: "0~64" - display: "IP Address" - comment: "" - - name: "port" - type: "int" - optional: "false" - filter: "0~65535" - display: "Port" - comment: "" - - operation: "set" - object: "n7 client" - display: "Set N7 Client" - status: "Inactive" - params: - - name: "scheme" - type: "enum" - optional: "false" - filter: '{"0":"http", "1":"https"}' - display: "Scheme" - comment: "" - - name: "ip" - type: "string" - optional: "false" - filter: "0~64" - display: "IP Address" - comment: "" - - operation: "set" - object: "n10 server" - display: "Set N10 Server" - status: "Inactive" - params: - - name: "scheme" - type: "enum" - optional: "false" - filter: '{"0":"http", "1":"https"}' - display: "Scheme" - comment: "" - - name: "ip" - type: "string" - optional: "false" - filter: "0~64" - display: "IP Address" - comment: "" - - name: "port" - type: "int" - optional: "false" - filter: "0~65535" - display: "Port" - comment: "" - - operation: "set" - object: "n10 client" - display: "Set N10 Client" - status: "Inactive" - params: - - name: "scheme" - type: "enum" - optional: "false" - filter: '{"0":"http", "1":"https"}' - display: "Scheme" - comment: "" - - name: "ip" - type: "string" - optional: "false" - filter: "0~64" - display: "IP Address" - comment: "" - - operation: "set" - object: "n11 server" - display: "Set N11 Server" - status: "Inactive" - params: - - name: "scheme" - type: "enum" - optional: "false" - filter: '{"0":"http", "1":"https"}' - display: "Scheme" - comment: "" - - name: "ip" - type: "string" - optional: "false" - filter: "0~64" - display: "IP Address" - comment: "" - - name: "port" - type: "int" - optional: "false" - filter: "0~65535" - display: "Port" - comment: "" - - operation: "set" - object: "n11 client" - display: "Set N11 Client" - status: "Inactive" - params: - - name: "scheme" - type: "enum" - optional: "false" - filter: '{"0":"http", "1":"https"}' - display: "Scheme" - comment: "" - - name: "ip" - type: "string" - optional: "false" - filter: "0~64" - display: "IP Address" - comment: "" - - operation: "set" - object: "dnn" - display: "Set DNN" - status: "Inactive" - params: - - name: "index" - type: "int" - optional: "false" - filter: "" - display: "Index" - comment: "" - - name: "DNN" - type: "string" - optional: "false" - filter: "" - display: "DNN" - comment: "" - - operation: "set pccrule " - object: "pccrule" - display: "Set PCC Rule" - status: "Inactive" - params: - - name: "index" - type: "int" - optional: "false" - filter: "0~65535" - display: "Index" - comment: "" - - name: "precedence" - type: "int" - optional: "false" - filter: "" - display: "Precedence" - comment: "" - - name: "qosIndex" - type: "int" - optional: "false" - filter: "" - display: "QOS Index" - comment: "" - - name: "direction" - type: "int" - optional: "true" - filter: '{"0":"NA", "1":"Uplink", "2":"Downlink", "3":"Bidirectionallink"}' - display: "Filter Direction" - comment: "" - - name: "filter" - type: "string" - optional: "true" - filter: "" - display: "Filter" - comment: "" - - name: "appId" - type: "string" - optional: "true" - filter: "" - display: "Application ID" - comment: "" - - operation: "set" - object: "urr" - display: "Set URR" - status: "Inactive" - params: - - name: "index" - type: "string" - optional: "false" - filter: "" - display: "Index" - comment: "" - - name: "quotavolumetatol" - type: "string" - optional: "false" - filter: "" - display: "SD" - comment: "" - - name: "quotavolumeul" - type: "string" - optional: "false" - filter: "" - display: "quota volume ul" - comment: "" - - name: "quotavolumedl" - type: "string" - optional: "false" - filter: "" - display: "quota volume dl" - comment: "" - - name: "quotatime" - type: "string" - optional: "false" - filter: "" - display: "quota time" - comment: "" - - operation: "set" - object: "qos" - display: "Set Qos" - status: "Inactive" - params: - - name: "index" - type: "string" - optional: "false" - filter: "" - display: "Index" - comment: "" - - name: "5qi" - type: "string" - optional: "false" - filter: "" - display: "SD" - comment: "" - - name: "5qipl" - type: "string" - optional: "false" - filter: "" - display: "5qipl" - comment: "" - - name: "arppl" - type: "string" - optional: "false" - filter: "" - display: "arppl" - comment: "" - - name: "arppci" - type: "string" - optional: "false" - filter: "" - display: "arppci" - comment: "" - - name: "arppvi" - type: "string" - optional: "false" - filter: "" - display: "arppvi" - comment: "" - - name: "mfbrul" - type: "string" - optional: "false" - filter: "" - display: "mfbrul" - comment: "" - - name: "mfbrdl" - type: "string" - optional: "false" - filter: "" - display: "mfbrdl" - comment: "" - - name: "gfbrul" - type: "string" - optional: "false" - filter: "" - display: "gfbrul" - comment: "" - - name: "gfbrdl" - type: "string" - optional: "false" - filter: "" - display: "gfbrdl" - comment: "" - - operation: "set" - object: "snssai" - display: "Set Snssai" - status: "Inactive" - params: - - name: "index" - type: "string" - optional: "false" - filter: "" - display: "Index" - comment: "" - - name: "sst-sd" - type: "string" - optional: "false" - filter: "" - display: "sst-sd" - - operation: "release" - object: "imsi" - display: "Release IMSI" - status: "Inactive" - params: - - name: "imsi" - type: "string" - optional: "false" - filter: "" - display: "IMSI" - comment: "" - - name: "pduSessId" - type: "string" - optional: "false" - filter: "" - display: "PDU Session Id" - - operation: "set" - object: "urr" - display: "Set URR" - status: "Inactive" - params: - - name: "index" - type: "string" - optional: "false" - filter: "" - display: "Index" - comment: "" - - name: "quotavolumetatol" - type: "string" - optional: "false" - filter: "" - display: "Quota Volume Tatol" - comment: "" - - name: "quotavolumeul" - type: "string" - optional: "false" - filter: "" - display: "Quota Volume UL" - comment: "" - - name: "quotavolumedl" - type: "string" - optional: "false" - filter: "" - display: "Quota Volume DL" - comment: "" - - name: "quotatime" - type: "string" - optional: "false" - filter: "" - display: "Quota Time" - comment: "" - - operation: "set" - object: "dpi" - display: "Set DPI" - status: "Inactive" - params: - - name: "flag" - type: "enum" - optional: "false" - filter: '{"0":"disable", "1":"enable"}' - display: "Flag" - comment: "" - - name: "max" - type: "string" - optional: "false" - filter: "" - display: "Max Detect Packet Number" - comment: "" - - operation: "exec" - object: "shell" - display: "Execute Shell Command" - status: "Inactive" - params: - - name: "cmd" - type: "string" - optional: "false" - filter: "" - display: "CMD" - comment: "" - - operation: "reload" - object: "" - display: "Reload Config" - status: "Inactive" - params: \ No newline at end of file diff --git a/config/mml/system/udm_sys_mml_config.yaml b/config/mml/system/udm_sys_mml_config.yaml deleted file mode 100644 index 8da8c090..00000000 --- a/config/mml/system/udm_sys_mml_config.yaml +++ /dev/null @@ -1,93 +0,0 @@ -udm: - udmManagement: - display: "UDM Management" - mml: - - operation: "help" - object: "" - display: "List UDM MML CMD" - params: - systemManagement: - display: "System Management" - mml: - - operation: "set" - object: "n8ip" - display: "Set N8 IP Address" - status: "Inactive" - params: - - name: "ip" - type: "ipv4" - optional: "false" - filter: "" - display: "IP Address" - comment: "" - - operation: "set" - object: "n8port" - display: "Set N8 Port" - status: "Inactive" - params: - - name: "port" - type: "int" - optional: "false" - filter: "1~65535" - display: "Port" - comment: "" - - operation: "set" - object: "n8scheme" - display: "Set N8 Scheme" - status: "Inactive" - params: - - name: "scheme" - type: "enum" - optional: "false" - filter: '{"0":"http", "1":"https"}' - display: "Scheme" - comment: "" - - operation: "set" - object: "n10ip" - display: "Set N10 IP Address" - status: "Inactive" - params: - - name: "ip" - type: "string" - optional: "false" - filter: "" - display: "IP Address" - comment: "" - - operation: "set" - object: "n10port" - display: "Set N10 Port" - status: "Inactive" - params: - - name: "port" - type: "int" - optional: "false" - filter: "1~65535" - display: "Port" - comment: "" - - operation: "set" - object: "n10scheme" - display: "Set N10 Scheme" - status: "Inactive" - params: - - name: "scheme" - type: "enum" - optional: "false" - filter: '{"0":"http", "1":"https"}' - display: "Scheme" - comment: "" - - operation: "exec" - object: "shell" - display: "Execute Shell Command" - status: "Inactive" - params: - - name: "cmd" - type: "string" - optional: "false" - filter: "" - display: "CMD" - comment: "" - - operation: "reload" - object: "" - display: "Reload Config" - status: "Inactive" - params: diff --git a/config/mml/system/upf_sys_mml_config.yaml b/config/mml/system/upf_sys_mml_config.yaml deleted file mode 100644 index e3f8a0d5..00000000 --- a/config/mml/system/upf_sys_mml_config.yaml +++ /dev/null @@ -1,259 +0,0 @@ -upf: - upfManagement: - display: "UPF Management" - mml: - - operation: "help" - object: "" - display: "List UPF MML CMD" - params: - systemManagement: - display: "System Management" - mml: - - operation: "set" - object: "n3 driver" - display: "Set N3 Driver" - status: "Inactive" - params: - - name: "type" - type: "int" - optional: "false" - filter: "" - display: "Type" - comment: "" - - name: "ip" - type: "string" - optional: "false" - filter: "" - display: "IP address" - comment: "" - - name: "mask" - type: "string" - optional: "false" - filter: "" - display: "Mask" - comment: "" - - name: "mac" - type: "string" - optional: "false" - filter: "" - display: "Mac address" - comment: "" - - name: "pci" - type: "string" - optional: "false" - filter: "" - display: "PCI address" - comment: "" - - operation: "set" - object: "n4 ip" - display: "Set N4 IP Address" - status: "Inactive" - params: - - name: "ip" - type: "string" - optional: "false" - filter: "" - display: "IP Address" - comment: "" - - operation: "set" - object: "n6 driver" - display: "Set N6 Driver" - status: "Inactive" - params: - - name: "type" - type: "int" - optional: "false" - filter: "" - display: "Type" - comment: "" - - name: "ip" - type: "string" - optional: "false" - filter: "" - display: "IP address" - comment: "" - - name: "mask" - type: "string" - optional: "false" - filter: "" - display: "Mask" - comment: "" - - name: "mac" - type: "string" - optional: "false" - filter: "" - display: "Mac address" - comment: "" - - name: "pci" - type: "string" - optional: "false" - filter: "" - display: "PCI address" - comment: "" - - operation: "set" - object: "n9 driver" - display: "Set N9 Driver" - status: "Inactive" - params: - - name: "type" - type: "int" - optional: "false" - filter: "" - display: "Type" - comment: "" - - name: "ip" - type: "string" - optional: "false" - filter: "" - display: "IP address" - comment: "" - - name: "mask" - type: "string" - optional: "false" - filter: "" - display: "Mask" - comment: "" - - name: "mac" - type: "string" - optional: "false" - filter: "" - display: "Mac address" - comment: "" - - name: "pci" - type: "string" - optional: "false" - filter: "" - display: "PCI address" - comment: "" - - operation: "set" - object: "dnn" - display: "Set DNN" - status: "Inactive" - params: - - name: "dnn" - type: "string" - optional: "false" - filter: "" - display: "DNN" - comment: "" - - name: "ip" - type: "string" - optional: "false" - filter: "" - display: "IP Address" - comment: "" - - operation: "set" - object: "pfcp" - display: "Set PFCP" - status: "Inactive" - params: - - name: "path" - type: "string" - optional: "false" - filter: "" - display: "Path" - comment: "" - - name: "local" - type: "string" - optional: "false" - filter: "" - display: "Local IP Address" - comment: "" - - name: "remote" - type: "string" - optional: "false" - filter: "" - display: "Remote IP Address" - comment: "" - - operation: "set" - object: "qos" - display: "Set Qos" - status: "Inactive" - params: - - name: "index" - type: "string" - optional: "false" - filter: "" - display: "Index" - comment: "" - - name: "5qi" - type: "string" - optional: "false" - filter: "" - display: "5qi" - comment: "" - - name: "priority" - type: "int" - optional: "false" - filter: "" - display: "Priority Level" - comment: "" - - name: "mbr" - type: "string" - optional: "false" - filter: "" - display: "MBR" - comment: "" - - name: "gbr" - type: "string" - optional: "false" - filter: "" - display: "GBR" - comment: "" - - operation: "set" - object: "pccrule" - display: "Set PCC Rule" - status: "Inactive" - params: - - name: "index" - type: "int" - optional: "false" - filter: "0~65535" - display: "Index" - comment: "" - - name: "precedence" - type: "int" - optional: "false" - filter: "" - display: "Precedence" - comment: "" - - name: "qosindex" - type: "int" - optional: "false" - filter: "" - display: "QOS Index" - comment: "" - - name: "direction" - type: "int" - optional: "true" - filter: '{"0":"NA", "1":"Uplink", "2":"Downlink", "3":"Bidirectionallink"}' - display: "Filter Direction" - comment: "" - - name: "filter" - type: "string" - optional: "true" - filter: "" - display: "Filter" - comment: "" - - name: "appid" - type: "string" - optional: "true" - filter: "" - display: "Application ID" - comment: "" - - operation: "exec" - object: "shell" - display: "Execute Shell Command" - status: "Inactive" - params: - - name: "cmd" - type: "string" - optional: "false" - filter: "" - display: "CMD" - comment: "" - - operation: "reload" - object: "" - display: "Reload Config" - status: "Inactive" - params: \ No newline at end of file diff --git a/config/pm/AMF-PM(V1.1.5)-Company-Version00.xlsx b/config/pm/AMF-PM(V1.1.5)-Company-Version00.xlsx deleted file mode 100644 index be4519dd..00000000 Binary files a/config/pm/AMF-PM(V1.1.5)-Company-Version00.xlsx and /dev/null differ diff --git a/config/pm/PCF-PM(V1.1.4)-Company-Version00.xlsx b/config/pm/PCF-PM(V1.1.4)-Company-Version00.xlsx deleted file mode 100644 index 70923dfa..00000000 Binary files a/config/pm/PCF-PM(V1.1.4)-Company-Version00.xlsx and /dev/null differ diff --git a/config/pm/SMF-PM(V1.2.1))-Company-Version00.xlsx b/config/pm/SMF-PM(V1.2.1))-Company-Version00.xlsx deleted file mode 100644 index 86d9363e..00000000 Binary files a/config/pm/SMF-PM(V1.2.1))-Company-Version00.xlsx and /dev/null differ diff --git a/config/pm/UDM-PM(V1.2.2)-Company-Version00.xlsx b/config/pm/UDM-PM(V1.2.2)-Company-Version00.xlsx deleted file mode 100644 index 6567e5d3..00000000 Binary files a/config/pm/UDM-PM(V1.2.2)-Company-Version00.xlsx and /dev/null differ diff --git a/config/pm/UPF-PM(V1.2.1)-Company-Version00.xlsx b/config/pm/UPF-PM(V1.2.1)-Company-Version00.xlsx deleted file mode 100644 index 3a87b61f..00000000 Binary files a/config/pm/UPF-PM(V1.2.1)-Company-Version00.xlsx and /dev/null differ diff --git a/config/schema/cm-schema.xsd b/config/schema/cm-schema.xsd deleted file mode 100644 index 5e7e46c9..00000000 --- a/config/schema/cm-schema.xsd +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/config/schema/pm-schema.xsd b/config/schema/pm-schema.xsd deleted file mode 100644 index bb018401..00000000 --- a/config/schema/pm-schema.xsd +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/config/sh/cb_sms.sh b/config/sh/cb_sms.sh deleted file mode 100644 index 64e93480..00000000 --- a/config/sh/cb_sms.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/expect - -#This script is to invoke CB_SMS via debug command - -spawn telnet 192.168.1.51 4965 - -send "x\n" -send "n\n" -sleep 1 -send "\033\n" -send "vlr start cb_sms\n" -sleep 1 -send "q\n" - -exit diff --git a/config/sh/check_cfg.sh b/config/sh/check_cfg.sh deleted file mode 100644 index a6765347..00000000 --- a/config/sh/check_cfg.sh +++ /dev/null @@ -1,53 +0,0 @@ -#!/bin/bash - -while true; do - -timestamp=`date +%s` - -filepath=~altouser/imsi.txt -if [ -f $filepath ]; -then - filetimestamp=`stat -c %Y $filepath` - timegap=$(($timestamp-$filetimestamp)) - if [ $timegap -gt 2 ]; then - mv $filepath /etc/edge/white_list.cfg - fi -fi - -filepath=~altouser/dns.txt -if [ -f $filepath ]; -then - filetimestamp=`stat -c %Y $filepath` - timegap=$(($timestamp-$filetimestamp)) - if [ $timegap -gt 2 ]; then - mv $filepath /etc/edge/dns.txt - fi -fi - -filepath=~altouser/osmo-bsc.cfg -if [ -f $filepath ]; -then - filetimestamp=`stat -c %Y $filepath` - timegap=$(($timestamp-$filetimestamp)) - if [ $timegap -gt 2 ]; then - mv $filepath /etc/edge/osmo-bsc.cfg - fi -fi - - -filepath=~altouser/cb_sms.cfg -if [ -f $filepath ]; -then - filetimestamp=`stat -c %Y $filepath` - timegap=$(($timestamp-$filetimestamp)) - if [ $timegap -gt 2 ]; then - mv $filepath /etc/edge/cb_sms.cfg - /usr/bin/cb_sms.sh - fi -fi - - - -sleep 1 - -done diff --git a/config/systemState.json b/config/systemState.json deleted file mode 100644 index ed7c58e4..00000000 --- a/config/systemState.json +++ /dev/null @@ -1,495 +0,0 @@ - -EXP #1: "Get all smf systemState" - -URI: 192.168.30.20: 3030/api/rest/systemManagement/v1/elementType/smf/objectType/systemState - -RETURN: - -{ - "data": [ - "SMF_0": { - "ipAddress": "192.168.1.232", - "systemState": { - "version": "1.5.3.2", - "capability": 10000, - "serialNum": "13740126", - "expiryDate": "2025-02-28", - "cpuUsage": { - "nfCpuUsage": 41, - "sysCpuUsage": 78 - }, - "memUsage": { - "totalMem": 4025608, - "nfUsedMem": 160872, - "sysMemUsage": 1341 - }, - "diskSpace": { - "partitionNum": 19, - "partitionInfo": [ - { - "total": 1920, - "used": 0 - }, - { - "total": 393, - "used": 11 - }, - { - "total": 48700, - "used": 32360 - }, - { - "total": 1965, - "used": 0 - }, - { - "total": 5, - "used": 0 - }, - { - "total": 1965, - "used": 0 - }, - { - "total": 55, - "used": 55 - }, - { - "total": 63, - "used": 63 - }, - { - "total": 91, - "used": 91 - }, - { - "total": 49, - "used": 49 - }, - { - "total": 55, - "used": 55 - }, - { - "total": 73, - "used": 73 - }, - { - "total": 91, - "used": 91 - }, - { - "total": 1475, - "used": 206 - }, - { - "total": 49, - "used": 49 - }, - { - "total": 393, - "used": 11 - }, - { - "total": 393, - "used": 0 - }, - { - "total": 73, - "used": 73 - }, - { - "total": 63, - "used": 63 - } - ] - } - } - }, - "SMF_1": { - "ipAddress": "192.168.1.73", - "systemState": { - "version": "1.5.3.2", - "capability": 10000, - "serialNum": "13740126", - "expiryDate": "2025-02-28", - "cpuUsage": { - "nfCpuUsage": 41, - "sysCpuUsage": 78 - }, - "memUsage": { - "totalMem": 4025608, - "nfUsedMem": 160872, - "sysMemUsage": 1341 - }, - "diskSpace": { - "partitionNum": 19, - "partitionInfo": [ - { - "total": 1920, - "used": 0 - }, - { - "total": 393, - "used": 11 - }, - { - "total": 48700, - "used": 32360 - }, - { - "total": 1965, - "used": 0 - }, - { - "total": 5, - "used": 0 - }, - { - "total": 1965, - "used": 0 - }, - { - "total": 55, - "used": 55 - }, - { - "total": 63, - "used": 63 - }, - { - "total": 91, - "used": 91 - }, - { - "total": 49, - "used": 49 - }, - { - "total": 55, - "used": 55 - }, - { - "total": 73, - "used": 73 - }, - { - "total": 91, - "used": 91 - }, - { - "total": 1475, - "used": 206 - }, - { - "total": 49, - "used": 49 - }, - { - "total": 393, - "used": 11 - }, - { - "total": 393, - "used": 0 - }, - { - "total": 73, - "used": 73 - }, - { - "total": 63, - "used": 63 - } - ] - } - } - } - ] -} - - -EXP #2: "Get single smf systemState" - -URI: 192.168.30.20: 3030/api/rest/systemManagement/v1/elementType/smf/objectType/systemState?subsys_no=0 - -RETURN: - -{ - "data": [ - "SMF_0": { - "ipAddress": "192.168.1.232", - "systemState": { - "version": "1.5.3.2", - "capability": 10000, - "serialNum": "13740126", - "expiryDate": "2025-02-28", - "cpuUsage": { - "nfCpuUsage": 41, - "sysCpuUsage": 78 - }, - "memUsage": { - "totalMem": 4025608, - "nfUsedMem": 160872, - "sysMemUsage": 1341 - }, - "diskSpace": { - "partitionNum": 19, - "partitionInfo": [ - { - "total": 1920, - "used": 0 - }, - { - "total": 393, - "used": 11 - }, - { - "total": 48700, - "used": 32360 - }, - { - "total": 1965, - "used": 0 - }, - { - "total": 5, - "used": 0 - }, - { - "total": 1965, - "used": 0 - }, - { - "total": 55, - "used": 55 - }, - { - "total": 63, - "used": 63 - }, - { - "total": 91, - "used": 91 - }, - { - "total": 49, - "used": 49 - }, - { - "total": 55, - "used": 55 - }, - { - "total": 73, - "used": 73 - }, - { - "total": 91, - "used": 91 - }, - { - "total": 1475, - "used": 206 - }, - { - "total": 49, - "used": 49 - }, - { - "total": 393, - "used": 11 - }, - { - "total": 393, - "used": 0 - }, - { - "total": 73, - "used": 73 - }, - { - "total": 63, - "used": 63 - } - ] - } - } - } - ] -} - -EXP #2: "Get all NFs systemState" - -URI: 192.168.30.20: 3030/api/rest/systemManagement/v1/elementType/all/objectType/systemState - -RETURN: - -{ - "data": [ - { - "AMF_0": { - "error": { - "errorCode": "1", - "errorInfo": "Internal server error, NF connnect refused" - }, - "ipAddress": "192.168.2.188" - } - }, - { - "SMF_0": { - "ipAddress": "192.168.1.232", - "systemState": { - "capability": 10000, - "cpuUsage": { - "nfCpuUsage": 2, - "sysCpuUsage": 52 - }, - "diskSpace": { - "partitionInfo": [ - { - "total": 1920, - "used": 0 - }, - { - "total": 393, - "used": 13 - }, - { - "total": 48700, - "used": 32431 - }, - { - "total": 1965, - "used": 0 - }, - { - "total": 5, - "used": 0 - }, - { - "total": 1965, - "used": 0 - }, - { - "total": 55, - "used": 55 - }, - { - "total": 63, - "used": 63 - }, - { - "total": 91, - "used": 91 - }, - { - "total": 49, - "used": 49 - }, - { - "total": 55, - "used": 55 - }, - { - "total": 73, - "used": 73 - }, - { - "total": 91, - "used": 91 - }, - { - "total": 1475, - "used": 206 - }, - { - "total": 49, - "used": 49 - }, - { - "total": 393, - "used": 13 - }, - { - "total": 393, - "used": 0 - }, - { - "total": 73, - "used": 73 - }, - { - "total": 63, - "used": 63 - } - ], - "partitionNum": 19 - }, - "expiryDate": "2025-02-28", - "memUsage": { - "nfUsedMem": 163992, - "sysMemUsage": 1345, - "totalMem": 4025608 - }, - "serialNum": "13740126", - "version": "1.5.3.2" - } - } - }, - { - "SMF_1": { - "ipAddress": "192.168.1.173", - "systemState": { - "capability": 10000, - "cpuUsage": { - "nfCpuUsage": 0, - "sysCpuUsage": 69 - }, - "diskSpace": { - "partitionInfo": [ - { - "total": 3966, - "used": 0 - }, - { - "total": 797, - "used": 0 - }, - { - "total": 200559, - "used": 5968 - }, - { - "total": 3987, - "used": 0 - }, - { - "total": 5, - "used": 0 - }, - { - "total": 3987, - "used": 0 - }, - { - "total": 797, - "used": 0 - } - ], - "partitionNum": 7 - }, - "expiryDate": "2024-12-31", - "memUsage": { - "nfUsedMem": 212136, - "sysMemUsage": 720, - "totalMem": 8167360 - }, - "serialNum": "13740272", - "version": "1.5.3.3" - } - } - } - ] -} - diff --git a/config/systemd/omc.service b/config/systemd/omc.service deleted file mode 100644 index 2dfc6c7c..00000000 --- a/config/systemd/omc.service +++ /dev/null @@ -1,17 +0,0 @@ -[Unit] -Description=OMC Service -After=network-online.target mysql.service kvdb.service - -[Service] -Type=simple -LimitNOFILE=65535 -LimitNPROC=65535 - -Restart=always -ExecStart=/usr/local/omc/bin/restagent -c /usr/local/omc/etc/restconf.yaml -RestartSec=2 -RestartPreventExitStatus=SIGTERM SIGKILL -ExecReload=/bin/kill -HUP $MAINPID - -[Install] -WantedBy=multi-user.target diff --git a/config/systemd/restagent.service b/config/systemd/restagent.service deleted file mode 100644 index 61eb41fa..00000000 --- a/config/systemd/restagent.service +++ /dev/null @@ -1,17 +0,0 @@ -[Unit] -Description=OMC rest agent daemon -After=network-online.target mysql.service kvdb.service - -[Service] -Type=simple -LimitNOFILE=65535 -LimitNPROC=65535 - -Restart=always -ExecStart=/usr/local/omc/bin/restagent -c /usr/local/omc/etc/restconf.yaml -RestartSec=2 -RestartPreventExitStatus=SIGTERM SIGKILL -ExecReload=/bin/kill -HUP $MAINPID - -[Install] -WantedBy=multi-user.target \ No newline at end of file diff --git a/config/systemd/sshsvc.service b/config/systemd/sshsvc.service deleted file mode 100644 index 13bdd267..00000000 --- a/config/systemd/sshsvc.service +++ /dev/null @@ -1,17 +0,0 @@ -[Unit] -Description=OMC SSH MML service daemon -After=network-online.target mysql.service - -[Service] -Type=simple -LimitNOFILE=65535 -LimitNPROC=65535 - -Restart=always -ExecStart=/usr/local/omc/bin/sshsvc -c /usr/local/omc/etc/sshsvc.yaml -RestartSec=2 -RestartPreventExitStatus=SIGTERM SIGKILL -ExecReload=/bin/kill -HUP $MAINPID - -[Install] -WantedBy=multi-user.target \ No newline at end of file diff --git a/config/temp.json b/config/temp.json deleted file mode 100644 index d936656d..00000000 --- a/config/temp.json +++ /dev/null @@ -1,516 +0,0 @@ -{ - "array": [ - { - "access": "read-only", - "comment": "1~32", - "display": "Index", - "filter": "1~32", - "name": "Index", - "type": "int", - "value": "1" - }, - { - "access": "read-write", - "comment": "N3|N6|N9|N19", - "display": "Interface Type", - "filter": "", - "name": "InterfaceType", - "type": "string", - "value": "N3" - }, - { - "access": "read-write", - "comment": "Interface Id", - "display": "Interface Id", - "filter": "1~32", - "name": "InterfaceId", - "type": "int", - "value": "1" - }, - { - "access": "read-write", - "comment": "host|vmxnet3|dpdk|socket|uds", - "display": "Driver Type", - "filter": "", - "name": "DriverType", - "type": "string", - "value": "host" - }, - { - "access": "read-write", - "comment": "null|bak|sub|xor|round|lacp", - "display": "Bond Type", - "filter": "", - "name": "BondType", - "type": "string", - "value": "0" - }, - { - "access": "read-write", - "comment": "Bond Id", - "display": "Bond Id", - "filter": "1~32", - "name": "BondId", - "type": "int", - "value": "1" - }, - { - "access": "read-write", - "comment": "Bfd Tx Interval Ms", - "display": "Bfd Tx Interval Ms", - "filter": "", - "name": "BfdTxIntervalMs", - "type": "int", - "value": "1" - }, - { - "access": "read-write", - "comment": "Bfd Rx Interval Ms", - "display": "Bfd Rx Interval Ms", - "filter": "", - "name": "BfdRxIntervalMs", - "type": "int", - "value": "1" - }, - { - "access": "read-write", - "comment": "Dnn Name", - "display": "Dnn Name", - "filter": "", - "name": "DnnName", - "type": "string", - "value": "default" - }, - { - "access": "read-write", - "comment": "ipv4|ipv6|ipv4v6", - "display": "Ip Type", - "filter": "", - "name": "IpType", - "type": "string", - "value": "ipv4" - }, - { - "access": "read-write", - "array": [ - { - "access": "read-only", - "comment": "1~8", - "display": "Index", - "filter": "1~8", - "name": "Index", - "type": "int", - "value": "1" - }, - { - "access": "read-write", - "comment": "Ipv4", - "display": "Ipv4", - "filter": "", - "name": "Ipv4", - "type": "string", - "value": "0.0.0.0" - }, - { - "access": "read-write", - "comment": "Ipv4 Mask", - "display": "Ipv4 Mask", - "filter": "", - "name": "Ipv4Mask", - "type": "string", - "value": "0.0.0.0" - } - ], - "comment": "Ipv4 Addr List", - "display": "Ipv4 Addr List", - "filter": "1~8", - "name": "Ipv4AddrList", - "type": "int", - "value": "1" - }, - { - "access": "read-write", - "array": [ - { - "access": "read-only", - "comment": "1~8", - "display": "Index", - "filter": "1~8", - "name": "Index", - "type": "int", - "value": "1" - }, - { - "access": "read-write", - "comment": "Ipv6", - "display": "Ipv6", - "filter": "", - "name": "Ipv6", - "type": "string", - "value": "" - }, - { - "access": "read-write", - "comment": "Ipv6 Prefix", - "display": "Ipv6 Prefix", - "filter": "", - "name": "Ipv6Prefix", - "type": "int", - "value": "64" - } - ], - "comment": "Ipv6 Addr List", - "display": "Ipv6 Addr List", - "filter": "1~8", - "name": "Ipv6AddrList", - "type": "int", - "value": "1" - }, - { - "access": "read-write", - "comment": "Mac Address", - "display": "Mac Address", - "filter": "", - "name": "MacAddr", - "type": "string", - "value": "00:00:00:00:00:00" - }, - { - "access": "read-write", - "comment": "Interface PCI Value", - "display": "Interface PCI", - "filter": "", - "name": "InterfacePCI", - "type": "string", - "value": "0000:00:00.0" - }, - { - "access": "read-write", - "comment": "System Network Card Name", - "display": "System Network Card Name", - "filter": "", - "name": "SystemNetworkCardName", - "type": "string", - "value": "" - }, - { - "access": "read-write", - "comment": "Gateway Ipv4 Value", - "display": "Gateway Ipv4", - "filter": "", - "name": "GatewayIpv4", - "type": "string", - "value": "0.0.0.0" - }, - { - "access": "read-write", - "comment": "Gateway Ipv6 Value", - "display": "Gateway Ipv6", - "filter": "", - "name": "GatewayIpv6", - "type": "string", - "value": "" - }, - { - "access": "read-write", - "comment": "Bfd Gateway Ipv4 Value", - "display": "Bfd Gateway Ipv4", - "filter": "", - "name": "BfdGatewayIpv4", - "type": "string", - "value": "0.0.0.0" - }, - { - "access": "read-write", - "comment": "Bfd Gateway Ipv6 Value", - "display": "Bfd Gateway Ipv6", - "filter": "", - "name": "BfdGatewayIpv6", - "type": "string", - "value": "" - }, - { - "access": "read-write", - "comment": "Mtu", - "display": "Mtu", - "filter": "1~65536", - "name": "Mtu", - "type": "int", - "value": "1500" - }, - { - "access": "read-write", - "comment": "Vlan Id Min Value", - "display": "Vlan Id Min", - "filter": "", - "name": "VlanIdMin", - "type": "int", - "value": "0" - }, - { - "access": "read-write", - "comment": "Vlan Id Max Value", - "display": "Vlan Id Max", - "filter": "", - "name": "VlanIdMax", - "type": "int", - "value": "" - }, - { - "access": "read-write", - "comment": "Udp Src Port", - "display": "Udp Src Port", - "filter": "1~65536", - "name": "UdpSrcPort", - "type": "int", - "value": "0" - }, - { - "access": "read-write", - "comment": "Udp Listen Port Value", - "display": "Udp Listen Port", - "filter": "1~65536", - "name": "UdpListenPort", - "type": "string", - "value": "2152" - }, - { - "access": "read-write", - "comment": "Uds Local File Full Path", - "display": "Uds Local File Full Path", - "filter": "", - "name": "UdsLocalFileFullPath", - "type": "string", - "value": "" - }, - { - "access": "read-write", - "comment": "Uds Remote File Full Path", - "display": "Uds Remote File Full Path", - "filter": "", - "name": "UdsRemoteFileFullPath", - "type": "string", - "value": "" - }, - { - "access": "read-write", - "comment": "Link Detection Type", - "display": "Link Detection Type", - "filter": "0~1", - "name": "LinkDetectionType", - "type": "int", - "value": "0" - }, - { - "access": "read-write", - "comment": "Nat Interface Id", - "display": "Nat Interface Id", - "filter": "0~1", - "name": "NatInterfaceId", - "type": "int", - "value": "0" - }, - { - "access": "read-write", - "comment": "Ue Ipv4 Address", - "display": "Ipv4", - "filter": "", - "name": "UeIpv4", - "type": "string", - "value": "0.0.0.0" - }, - { - "access": "read-write", - "comment": "Ue Ipv4 Mask Address", - "display": "Ue Ipv4 Mask", - "filter": "", - "name": "UeIpv4Mask", - "type": "string", - "value": "255.255.255.0" - }, - { - "access": "read-write", - "comment": "Ue Ipv6 Address", - "display": "Ue Ipv6", - "filter": "", - "name": "UeIpv6", - "type": "string", - "value": "" - }, - { - "access": "read-write", - "comment": "Ue Ipv6 Prefix Value", - "display": "Ue Ipv6 Prefix", - "filter": "1~128", - "name": "UeIpv6Prefix", - "type": "int", - "value": "64" - }, - { - "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": "Ipv4", - "display": "Ipv4", - "filter": "", - "name": "Ipv4", - "type": "string", - "value": "0.0.0.0" - }, - { - "access": "read-write", - "comment": "Ipv4 Mask", - "display": "Ipv4 Mask", - "filter": "", - "name": "Ipv4Mask", - "type": "string", - "value": "0.0.0.0" - } - ], - "comment": "Gtpu Remote Ipv4 Pool List", - "display": "Gtpu Remote Ipv4 Pool List", - "filter": "1~32", - "name": "GtpuRemoteIpv4PoolList", - "type": "int", - "value": "1" - }, - { - "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": "Ipv6", - "display": "Ipv6", - "filter": "", - "name": "Ipv6", - "type": "string", - "value": "" - }, - { - "access": "read-write", - "comment": "Ipv6 Prefix", - "display": "Ipv6 Prefix", - "filter": "", - "name": "Ipv6Prefix", - "type": "int", - "value": "64" - } - ], - "comment": "Gtpu Remote Ipv6 Pool List", - "display": "Gtpu Remote Ipv6 Pool List", - "filter": "1~32", - "name": "GtpuRemoteIpv6PoolList", - "type": "int", - "value": "1" - }, - { - "access": "read-write", - "comment": "Gtpu Signaling Handle", - "display": "Gtpu Signaling Handle", - "filter": "0~1", - "name": "GtpuSignalingHandle", - "type": "int", - "value": "0" - }, - { - "access": "read-write", - "comment": "Ims Default DSCP Value", - "display": "Ims Default DSCP Value", - "filter": "0~1", - "name": "ImsDefaultDSCPValue", - "type": "int", - "value": "0" - }, - { - "access": "read-write", - "comment": "Data Default DSCP Value", - "display": "Data Default DSCP Value", - "filter": "0~1", - "name": "DataDefaultDSCPValue", - "type": "int", - "value": "0" - }, - { - "access": "read-write", - "comment": "Inner DSCP Value Map", - "display": "Inner DSCP Value Map", - "filter": "0~1", - "name": "InnerDSCPValueMap", - "type": "int", - "value": "0" - }, - { - "access": "read-write", - "comment": "Max Support Speed Mbps", - "display": "Max Support Speed Mbps", - "filter": "0~65536", - "name": "MaxSupportSpeedMbps", - "type": "int", - "value": "0" - }, - { - "access": "read-write", - "comment": "Dpdk Rx Queues Number", - "display": "Dpdk Rx Queues Number", - "filter": "0~127", - "name": "DpdkRxQueuesNumber", - "type": "int", - "value": "0" - }, - { - "access": "read-write", - "comment": "Dpdk Tx Queues Number", - "display": "Dpdk Tx Queues Number", - "filter": "0~127", - "name": "DpdkTxQueuesNumber", - "type": "int", - "value": "0" - }, - { - "access": "read-write", - "comment": "Dpdk Rx Desc Number", - "display": "Dpdk Rx Desc Number", - "filter": "0~32768", - "name": "DpdkRxDescNumber", - "type": "int", - "value": "0" - }, - { - "access": "read-write", - "comment": "Dpdk Tx Desc Number", - "display": "Dpdk Tx Desc Number", - "filter": "0~32768", - "name": "DpdkTxDescNumber", - "type": "int", - "value": "0" - }, - { - "access": "read-write", - "comment": "Dpdk Workers", - "display": "Dpdk Workers", - "filter": "", - "name": "Dpdkworkers", - "type": "string", - "value": "" - } - ] -} \ No newline at end of file diff --git a/config/temp1.json b/config/temp1.json deleted file mode 100644 index d936656d..00000000 --- a/config/temp1.json +++ /dev/null @@ -1,516 +0,0 @@ -{ - "array": [ - { - "access": "read-only", - "comment": "1~32", - "display": "Index", - "filter": "1~32", - "name": "Index", - "type": "int", - "value": "1" - }, - { - "access": "read-write", - "comment": "N3|N6|N9|N19", - "display": "Interface Type", - "filter": "", - "name": "InterfaceType", - "type": "string", - "value": "N3" - }, - { - "access": "read-write", - "comment": "Interface Id", - "display": "Interface Id", - "filter": "1~32", - "name": "InterfaceId", - "type": "int", - "value": "1" - }, - { - "access": "read-write", - "comment": "host|vmxnet3|dpdk|socket|uds", - "display": "Driver Type", - "filter": "", - "name": "DriverType", - "type": "string", - "value": "host" - }, - { - "access": "read-write", - "comment": "null|bak|sub|xor|round|lacp", - "display": "Bond Type", - "filter": "", - "name": "BondType", - "type": "string", - "value": "0" - }, - { - "access": "read-write", - "comment": "Bond Id", - "display": "Bond Id", - "filter": "1~32", - "name": "BondId", - "type": "int", - "value": "1" - }, - { - "access": "read-write", - "comment": "Bfd Tx Interval Ms", - "display": "Bfd Tx Interval Ms", - "filter": "", - "name": "BfdTxIntervalMs", - "type": "int", - "value": "1" - }, - { - "access": "read-write", - "comment": "Bfd Rx Interval Ms", - "display": "Bfd Rx Interval Ms", - "filter": "", - "name": "BfdRxIntervalMs", - "type": "int", - "value": "1" - }, - { - "access": "read-write", - "comment": "Dnn Name", - "display": "Dnn Name", - "filter": "", - "name": "DnnName", - "type": "string", - "value": "default" - }, - { - "access": "read-write", - "comment": "ipv4|ipv6|ipv4v6", - "display": "Ip Type", - "filter": "", - "name": "IpType", - "type": "string", - "value": "ipv4" - }, - { - "access": "read-write", - "array": [ - { - "access": "read-only", - "comment": "1~8", - "display": "Index", - "filter": "1~8", - "name": "Index", - "type": "int", - "value": "1" - }, - { - "access": "read-write", - "comment": "Ipv4", - "display": "Ipv4", - "filter": "", - "name": "Ipv4", - "type": "string", - "value": "0.0.0.0" - }, - { - "access": "read-write", - "comment": "Ipv4 Mask", - "display": "Ipv4 Mask", - "filter": "", - "name": "Ipv4Mask", - "type": "string", - "value": "0.0.0.0" - } - ], - "comment": "Ipv4 Addr List", - "display": "Ipv4 Addr List", - "filter": "1~8", - "name": "Ipv4AddrList", - "type": "int", - "value": "1" - }, - { - "access": "read-write", - "array": [ - { - "access": "read-only", - "comment": "1~8", - "display": "Index", - "filter": "1~8", - "name": "Index", - "type": "int", - "value": "1" - }, - { - "access": "read-write", - "comment": "Ipv6", - "display": "Ipv6", - "filter": "", - "name": "Ipv6", - "type": "string", - "value": "" - }, - { - "access": "read-write", - "comment": "Ipv6 Prefix", - "display": "Ipv6 Prefix", - "filter": "", - "name": "Ipv6Prefix", - "type": "int", - "value": "64" - } - ], - "comment": "Ipv6 Addr List", - "display": "Ipv6 Addr List", - "filter": "1~8", - "name": "Ipv6AddrList", - "type": "int", - "value": "1" - }, - { - "access": "read-write", - "comment": "Mac Address", - "display": "Mac Address", - "filter": "", - "name": "MacAddr", - "type": "string", - "value": "00:00:00:00:00:00" - }, - { - "access": "read-write", - "comment": "Interface PCI Value", - "display": "Interface PCI", - "filter": "", - "name": "InterfacePCI", - "type": "string", - "value": "0000:00:00.0" - }, - { - "access": "read-write", - "comment": "System Network Card Name", - "display": "System Network Card Name", - "filter": "", - "name": "SystemNetworkCardName", - "type": "string", - "value": "" - }, - { - "access": "read-write", - "comment": "Gateway Ipv4 Value", - "display": "Gateway Ipv4", - "filter": "", - "name": "GatewayIpv4", - "type": "string", - "value": "0.0.0.0" - }, - { - "access": "read-write", - "comment": "Gateway Ipv6 Value", - "display": "Gateway Ipv6", - "filter": "", - "name": "GatewayIpv6", - "type": "string", - "value": "" - }, - { - "access": "read-write", - "comment": "Bfd Gateway Ipv4 Value", - "display": "Bfd Gateway Ipv4", - "filter": "", - "name": "BfdGatewayIpv4", - "type": "string", - "value": "0.0.0.0" - }, - { - "access": "read-write", - "comment": "Bfd Gateway Ipv6 Value", - "display": "Bfd Gateway Ipv6", - "filter": "", - "name": "BfdGatewayIpv6", - "type": "string", - "value": "" - }, - { - "access": "read-write", - "comment": "Mtu", - "display": "Mtu", - "filter": "1~65536", - "name": "Mtu", - "type": "int", - "value": "1500" - }, - { - "access": "read-write", - "comment": "Vlan Id Min Value", - "display": "Vlan Id Min", - "filter": "", - "name": "VlanIdMin", - "type": "int", - "value": "0" - }, - { - "access": "read-write", - "comment": "Vlan Id Max Value", - "display": "Vlan Id Max", - "filter": "", - "name": "VlanIdMax", - "type": "int", - "value": "" - }, - { - "access": "read-write", - "comment": "Udp Src Port", - "display": "Udp Src Port", - "filter": "1~65536", - "name": "UdpSrcPort", - "type": "int", - "value": "0" - }, - { - "access": "read-write", - "comment": "Udp Listen Port Value", - "display": "Udp Listen Port", - "filter": "1~65536", - "name": "UdpListenPort", - "type": "string", - "value": "2152" - }, - { - "access": "read-write", - "comment": "Uds Local File Full Path", - "display": "Uds Local File Full Path", - "filter": "", - "name": "UdsLocalFileFullPath", - "type": "string", - "value": "" - }, - { - "access": "read-write", - "comment": "Uds Remote File Full Path", - "display": "Uds Remote File Full Path", - "filter": "", - "name": "UdsRemoteFileFullPath", - "type": "string", - "value": "" - }, - { - "access": "read-write", - "comment": "Link Detection Type", - "display": "Link Detection Type", - "filter": "0~1", - "name": "LinkDetectionType", - "type": "int", - "value": "0" - }, - { - "access": "read-write", - "comment": "Nat Interface Id", - "display": "Nat Interface Id", - "filter": "0~1", - "name": "NatInterfaceId", - "type": "int", - "value": "0" - }, - { - "access": "read-write", - "comment": "Ue Ipv4 Address", - "display": "Ipv4", - "filter": "", - "name": "UeIpv4", - "type": "string", - "value": "0.0.0.0" - }, - { - "access": "read-write", - "comment": "Ue Ipv4 Mask Address", - "display": "Ue Ipv4 Mask", - "filter": "", - "name": "UeIpv4Mask", - "type": "string", - "value": "255.255.255.0" - }, - { - "access": "read-write", - "comment": "Ue Ipv6 Address", - "display": "Ue Ipv6", - "filter": "", - "name": "UeIpv6", - "type": "string", - "value": "" - }, - { - "access": "read-write", - "comment": "Ue Ipv6 Prefix Value", - "display": "Ue Ipv6 Prefix", - "filter": "1~128", - "name": "UeIpv6Prefix", - "type": "int", - "value": "64" - }, - { - "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": "Ipv4", - "display": "Ipv4", - "filter": "", - "name": "Ipv4", - "type": "string", - "value": "0.0.0.0" - }, - { - "access": "read-write", - "comment": "Ipv4 Mask", - "display": "Ipv4 Mask", - "filter": "", - "name": "Ipv4Mask", - "type": "string", - "value": "0.0.0.0" - } - ], - "comment": "Gtpu Remote Ipv4 Pool List", - "display": "Gtpu Remote Ipv4 Pool List", - "filter": "1~32", - "name": "GtpuRemoteIpv4PoolList", - "type": "int", - "value": "1" - }, - { - "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": "Ipv6", - "display": "Ipv6", - "filter": "", - "name": "Ipv6", - "type": "string", - "value": "" - }, - { - "access": "read-write", - "comment": "Ipv6 Prefix", - "display": "Ipv6 Prefix", - "filter": "", - "name": "Ipv6Prefix", - "type": "int", - "value": "64" - } - ], - "comment": "Gtpu Remote Ipv6 Pool List", - "display": "Gtpu Remote Ipv6 Pool List", - "filter": "1~32", - "name": "GtpuRemoteIpv6PoolList", - "type": "int", - "value": "1" - }, - { - "access": "read-write", - "comment": "Gtpu Signaling Handle", - "display": "Gtpu Signaling Handle", - "filter": "0~1", - "name": "GtpuSignalingHandle", - "type": "int", - "value": "0" - }, - { - "access": "read-write", - "comment": "Ims Default DSCP Value", - "display": "Ims Default DSCP Value", - "filter": "0~1", - "name": "ImsDefaultDSCPValue", - "type": "int", - "value": "0" - }, - { - "access": "read-write", - "comment": "Data Default DSCP Value", - "display": "Data Default DSCP Value", - "filter": "0~1", - "name": "DataDefaultDSCPValue", - "type": "int", - "value": "0" - }, - { - "access": "read-write", - "comment": "Inner DSCP Value Map", - "display": "Inner DSCP Value Map", - "filter": "0~1", - "name": "InnerDSCPValueMap", - "type": "int", - "value": "0" - }, - { - "access": "read-write", - "comment": "Max Support Speed Mbps", - "display": "Max Support Speed Mbps", - "filter": "0~65536", - "name": "MaxSupportSpeedMbps", - "type": "int", - "value": "0" - }, - { - "access": "read-write", - "comment": "Dpdk Rx Queues Number", - "display": "Dpdk Rx Queues Number", - "filter": "0~127", - "name": "DpdkRxQueuesNumber", - "type": "int", - "value": "0" - }, - { - "access": "read-write", - "comment": "Dpdk Tx Queues Number", - "display": "Dpdk Tx Queues Number", - "filter": "0~127", - "name": "DpdkTxQueuesNumber", - "type": "int", - "value": "0" - }, - { - "access": "read-write", - "comment": "Dpdk Rx Desc Number", - "display": "Dpdk Rx Desc Number", - "filter": "0~32768", - "name": "DpdkRxDescNumber", - "type": "int", - "value": "0" - }, - { - "access": "read-write", - "comment": "Dpdk Tx Desc Number", - "display": "Dpdk Tx Desc Number", - "filter": "0~32768", - "name": "DpdkTxDescNumber", - "type": "int", - "value": "0" - }, - { - "access": "read-write", - "comment": "Dpdk Workers", - "display": "Dpdk Workers", - "filter": "", - "name": "Dpdkworkers", - "type": "string", - "value": "" - } - ] -} \ No newline at end of file diff --git a/config/trace/msgType.txt b/config/trace/msgType.txt deleted file mode 100644 index a2c1978a..00000000 --- a/config/trace/msgType.txt +++ /dev/null @@ -1,96 +0,0 @@ -// N12 -const ( - N12PostUeAuthentications uint8= 1 - N12Put5gAkaConfirmations uint8= 2 - N12Delete5gAkaConfirmation uint8= 3 - N12PostEapSession uint8= 4 - N12DeleteEapSession uint8= 5 -) - -var n12MsgStr = []string{"null", - "Nausf_AUTH_Post ue-authentications", - "Nausf_AUTH_Put 5g-aka-confirmation", - "Nausf_AUTH_Delete 5g-aka-confirmation", - "Nausf_AUTH_Post eap-session", - "Nausf_AUTH_Delete eap-session", -} - -// N13 -const ( - N13PostGenerateAuthData uint8= 1 - N13PostAuthEvents uint8= 2 -) - -var n13MsgStr = [3]string{"null", - "Nudm_UEAU_Post generate-auth-data", - "Nudm_UEAU_Post auth-events", -} - -// N8 -const ( - N8GetSupi uint8= 1 - N8GetNssai uint8= 2 - N8GetAmData uint8= 3 - N8PutAmDataCagAck uint8= 4 - N8GetSmfSelectData uint8= 5 - N8PostSdmSubscriptions uint8= 6 - N8PatchSdmSubscriptions uint8= 7 - N8DeleteSdmSubscriptions uint8= 8 - N8GETIdTranslationResult uint8= 9 - - N8PutAmf3GppAccessRegistration uint8= 10 - N8PatchAmf3GppAccessRegistration uint8= 11 - N8GetAmf3GppAccessRegistration uint8= 12 - - N8DeregistrationCallback uint8= 13 -) - -var n8MsgStr = []string{"null", - "Nudm_SDM_Get supi", - "Nudm_SDM_Get nssai", - "Nudm_SDM_Get am-data", - "Nudm_SDM_Put am-data cag-ack", - "Nudm_SDM_Get smf-select-data", - "Nudm_SDM_Post sdm-subscriptions", - "Nudm_SDM_Patch sdm-subscriptions", - "Nudm_SDM_Delete sdm-subscriptions", - "Nudm_SDM_Get id-translation-result", - - "Nudm_UECM_Put amf-3gpp-access", - "Nudm_UECM_Patch amf-3gpp-access", - "Nudm_UECM_Get amf-3gpp-access", - - "Namf_Callback Deregistraion", -} - -// N10 -const ( - N10GetSmData uint8= 1 - - N10PostSdmSubscriptions uint8= 2 - N10PatchSdmSubscriptions uint8= 3 - N10DeleteSdmSubscriptions uint8= 4 - N10GETIdTranslationResult uint8= 5 - - N10GetSmfRegistrations uint8= 6 - N10PutIndividualSmfRegistration uint8= 7 - N10PatchIndividualSmfRegistration uint8= 8 - N10GetIndividualSmfRegistration uint8= 9 - N10DeleteIndividualSmfRegistration uint8= 10 -) - -var n10MsgStr = []string{"null", -"Nudm_SDM_Get sm-data", - -"Nudm_SDM_Post sdm-subscriptions", -"Nudm_SDM_Patch sdm-subscriptions", -"Nudm_SDM_Delete sdm-subscriptions", -"Nudm_SDM_Get id-translation-result", - -"Nudm_UECM_Get smf-registrations", -"Nudm_UECM_Put smf-registrations", -"Nudm_UECM_Patch smf-3gpp-access", -"Nudm_UECM_Get smf-3gpp-access", -"Nudm_UECM_Delete smf-3gpp-access", -} - diff --git a/database/install/operation_log.sql b/database/install/operation_log.sql deleted file mode 100644 index b9479b5b..00000000 --- a/database/install/operation_log.sql +++ /dev/null @@ -1,51 +0,0 @@ --- 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 `operation_log` --- - -DROP TABLE IF EXISTS `operation_log`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `operation_log` ( - `op_id` int(11) NOT NULL AUTO_INCREMENT, - `account_name` varchar(32) NOT NULL, - `account_type` varchar(16) NOT NULL COMMENT 'group_name', - `op_ip` varchar(64) DEFAULT NULL, - `subsys_tag` varchar(32) DEFAULT NULL, - `op_type` varchar(32) DEFAULT NULL, - `op_content` text DEFAULT NULL, - `op_result` varchar(64) DEFAULT NULL, - `begin_time` datetime DEFAULT NULL, - `end_time` datetime DEFAULT NULL, - `vnf_flag` tinyint(4) DEFAULT NULL, - `log_time` datetime DEFAULT current_timestamp() ON UPDATE current_timestamp(), - PRIMARY KEY (`op_id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=7546 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; -/*!40101 SET character_set_client = @saved_cs_client */; -/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; - -/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; -/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; -/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; -/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; -/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; -/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; - --- Dump completed on 2024-03-06 17:26:57 diff --git a/database/install/sys_i18n.sql b/database/install/sys_i18n.sql deleted file mode 100644 index d9c94079..00000000 --- a/database/install/sys_i18n.sql +++ /dev/null @@ -1,725 +0,0 @@ --- --- Table structure for table `sys_i18n` --- - -DROP TABLE IF EXISTS `sys_i18n`; -CREATE TABLE `sys_i18n` ( - `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID', - `del_flag` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '删除标记(0存在 1删除)', - `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '创建者', - `create_time` bigint DEFAULT '0' COMMENT '创建时间', - `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '更新者', - `update_time` bigint DEFAULT '0' COMMENT '更新时间', - `key_lable` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '多语言属性名', - `value_zh` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '-' COMMENT '中文', - `value_en` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '-' COMMENT '英文', - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='系统_多语言'; - --- --- Dumping data for table `sys_i18n` --- - -INSERT INTO `sys_i18n` VALUES (1, '0', 'system', 1699348237468, 'system', 1699348237468, 'i18n', '中文', 'English'); -INSERT INTO `sys_i18n` VALUES (2, '0', 'system', 1699348237468, 'system', 1699348237468, 'hello', '你好', 'Hello'); -INSERT INTO `sys_i18n` VALUES (3, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.system', '系统', 'System'); -INSERT INTO `sys_i18n` VALUES (4, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.monitor', '监控', 'Monitor'); -INSERT INTO `sys_i18n` VALUES (5, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.tools', '工具', 'Tools'); -INSERT INTO `sys_i18n` VALUES (6, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.ne', '网元', 'NE'); -INSERT INTO `sys_i18n` VALUES (7, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.ueUser', '终端', 'UE'); -INSERT INTO `sys_i18n` VALUES (8, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.systemRemark', '系统管理目录', 'System Management Catalog'); -INSERT INTO `sys_i18n` VALUES (9, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.monitorRemark', '系统监控目录', 'System Monitor Catalog'); -INSERT INTO `sys_i18n` VALUES (10, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.toolsRemark', '系统工具目录', 'System Tools Catalog'); -INSERT INTO `sys_i18n` VALUES (11, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.neRemark', '网元配置管理目录', 'NE Configuration Management Catalog'); -INSERT INTO `sys_i18n` VALUES (12, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.ueUserRemark', '网元终端信息目录', 'Network Element Terminal Information Catalog'); -INSERT INTO `sys_i18n` VALUES (13, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.security.user', '用户管理', 'User Management'); -INSERT INTO `sys_i18n` VALUES (14, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.security.role', '角色管理', 'Role Management'); -INSERT INTO `sys_i18n` VALUES (15, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.security.roleUser', '分配角色', 'Assigning Roles'); -INSERT INTO `sys_i18n` VALUES (16, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.system.menu', '菜单管理', 'Menu Management'); -INSERT INTO `sys_i18n` VALUES (17, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.security.dept', '部门管理', 'Department Management'); -INSERT INTO `sys_i18n` VALUES (18, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.security.post', '岗位管理', 'Position Management'); -INSERT INTO `sys_i18n` VALUES (19, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.system.dictType', '字典管理', 'Dictionary Management'); -INSERT INTO `sys_i18n` VALUES (20, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.system.dictData', '字典数据', 'Dictionary Data'); -INSERT INTO `sys_i18n` VALUES (21, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.system.paramSet', '参数设置', 'Parameter Settings'); -INSERT INTO `sys_i18n` VALUES (22, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.system.systemLog', '系统日志', 'System Log'); -INSERT INTO `sys_i18n` VALUES (23, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.system.systemInfo', '系统信息', 'System Information'); -INSERT INTO `sys_i18n` VALUES (24, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.system.cacheInfo', '缓存信息', 'Cache Information'); -INSERT INTO `sys_i18n` VALUES (25, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.system.cache', '缓存管理', 'Cache Management'); -INSERT INTO `sys_i18n` VALUES (26, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.security.onlineUser', '在线用户', 'Online Users'); -INSERT INTO `sys_i18n` VALUES (27, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.system.job', '调度任务', 'Scheduling Tasks'); -INSERT INTO `sys_i18n` VALUES (28, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.system.jobLog', '调度日志', 'Scheduling Logs'); -INSERT INTO `sys_i18n` VALUES (29, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.tools.help', '帮助文档', 'Help Documentation'); -INSERT INTO `sys_i18n` VALUES (30, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.log.operat', '操作日志', 'Operation logs'); -INSERT INTO `sys_i18n` VALUES (31, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.log.login', '安全日志', 'Security logs'); -INSERT INTO `sys_i18n` VALUES (32, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.security.userRemark', '用户管理菜单', 'User Management Menu'); -INSERT INTO `sys_i18n` VALUES (33, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.security.roleRemark', '角色管理菜单', 'Role Management Menu'); -INSERT INTO `sys_i18n` VALUES (34, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.security.roleUserRemark', '分配角色内嵌隐藏菜单', 'Assign Roles Embedded Hidden Menu'); -INSERT INTO `sys_i18n` VALUES (35, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.system.menuRemark', '菜单管理菜单', 'Menu Management Menu'); -INSERT INTO `sys_i18n` VALUES (36, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.security.deptRemark', '部门管理菜单', 'Department management menu'); -INSERT INTO `sys_i18n` VALUES (37, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.security.postRemark', '岗位管理菜单', 'Job Management Menu'); -INSERT INTO `sys_i18n` VALUES (38, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.system.dictTypeRemark', '字典管理菜单', 'Dictionary management menu'); -INSERT INTO `sys_i18n` VALUES (39, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.system.dictDataRemark', '字典数据内嵌隐藏菜单', 'Dictionary data embedded hidden menu'); -INSERT INTO `sys_i18n` VALUES (40, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.system.paramSetRemark', '参数设置菜单', 'Parameter setting menu'); -INSERT INTO `sys_i18n` VALUES (41, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.system.systemLogRemark', '系统日志目录', 'System Log Catalog'); -INSERT INTO `sys_i18n` VALUES (42, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.system.systemInfoRemark', '系统信息菜单', 'System information menu'); -INSERT INTO `sys_i18n` VALUES (43, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.system.cacheInfoRemark', '缓存信息菜单', 'Cache Information Menu'); -INSERT INTO `sys_i18n` VALUES (44, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.system.cacheRemark', '缓存列表菜单', 'Cache List Menu'); -INSERT INTO `sys_i18n` VALUES (45, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.security.onlineUserRemark', '在线用户菜单', 'Online User Menu'); -INSERT INTO `sys_i18n` VALUES (46, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.system.jobRemark', '调度任务菜单', 'Scheduling Tasks menu'); -INSERT INTO `sys_i18n` VALUES (47, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.system.jobLogRemark', '调度日志内嵌隐藏菜单', 'Scheduling Log Embedded Hidden Menu'); -INSERT INTO `sys_i18n` VALUES (48, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.tools.helpRemark', '帮助文档菜单', 'Help file menu'); -INSERT INTO `sys_i18n` VALUES (49, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.log.operatRemark', '操作日志菜单', 'Operation log menu'); -INSERT INTO `sys_i18n` VALUES (50, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.log.loginRemark', '登录日志菜单', 'Login log menu'); -INSERT INTO `sys_i18n` VALUES (51, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.common.query', '查询', 'Inquiry'); -INSERT INTO `sys_i18n` VALUES (52, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.common.add', '新增', 'Add'); -INSERT INTO `sys_i18n` VALUES (53, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.common.edit', '修改', 'Modify'); -INSERT INTO `sys_i18n` VALUES (54, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.common.delete', '删除', 'Delete'); -INSERT INTO `sys_i18n` VALUES (55, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.common.export', '导出', 'Export'); -INSERT INTO `sys_i18n` VALUES (56, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.common.import', '导入', 'Import'); -INSERT INTO `sys_i18n` VALUES (57, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.common.resetPwd', '重置密码', 'Reset Password'); -INSERT INTO `sys_i18n` VALUES (58, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.common.unlock', '账户解锁', 'Account Unlock'); -INSERT INTO `sys_i18n` VALUES (59, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.forcedQuit.batch ', '批量强退', 'Batch Undo'); -INSERT INTO `sys_i18n` VALUES (60, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.forcedQuit.single', '单条强退', 'Individual Forced Retirement'); -INSERT INTO `sys_i18n` VALUES (61, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.ueUser.authUDM', 'UDM鉴权用户', 'UDM Authentication'); -INSERT INTO `sys_i18n` VALUES (62, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.ueUser.subUDM', 'UDM签约用户', 'UDM Subscribers'); -INSERT INTO `sys_i18n` VALUES (63, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.ueUser.authUDMRemark', 'UDM鉴权用户菜单', 'UDM Authentication Menu'); -INSERT INTO `sys_i18n` VALUES (64, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.ueUser.subUDMRemark', 'UDM签约用户菜单', 'UDM Subscriber Menu'); -INSERT INTO `sys_i18n` VALUES (65, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.ueUser.onlineIMS', 'IMS在线用户', 'IMS Online Users'); -INSERT INTO `sys_i18n` VALUES (66, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.ueUser.onlineUE', 'UE在线信息', 'UE Online Information'); -INSERT INTO `sys_i18n` VALUES (67, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.ueUser.base5G', '基站信息', 'Radio Information'); -INSERT INTO `sys_i18n` VALUES (68, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.trace', '跟踪', 'Trace'); -INSERT INTO `sys_i18n` VALUES (69, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.trace.task', '网元跟踪任务', 'NE Trace Task'); -INSERT INTO `sys_i18n` VALUES (70, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.trace.analysis', '网元跟踪数据', 'NE Trace Task Data'); -INSERT INTO `sys_i18n` VALUES (71, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.trace.pcap', '信令抓包', 'Signaling Capture'); -INSERT INTO `sys_i18n` VALUES (72, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.fault', '监控', 'Monitor'); -INSERT INTO `sys_i18n` VALUES (73, '0', 'system', 1699348237468, 'system', 1699348237468, 'config.neData.exportTableFTP', '网元数据导出备份文件FTP服务', 'NeData Backup file FTP service'); -INSERT INTO `sys_i18n` VALUES (74, '0', 'system', 1699348237468, 'system', 1699348237468, 'config.neData.exportTableFTPRemark', '请通过网元数据导出列表页面进行设置FTP信息', 'Please set the FTP information through the export list page.'); -INSERT INTO `sys_i18n` VALUES (75, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.ueUser.onlineIMSRemark', 'IMS在线用户菜单', 'IMS Online User Menu'); -INSERT INTO `sys_i18n` VALUES (76, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.ueUser.onlineUERemark', 'UE在线信息菜单', 'UE Online Information Menu'); -INSERT INTO `sys_i18n` VALUES (77, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.ueUser.base5GRemark', '5G基站信息菜单', '5G Base Station Information Menu'); -INSERT INTO `sys_i18n` VALUES (78, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.traceRemark', '跟踪管理目录', 'Tracking Management Menu'); -INSERT INTO `sys_i18n` VALUES (79, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.trace.taskRemark', '跟踪任务菜单', 'Tracking Task Menu'); -INSERT INTO `sys_i18n` VALUES (80, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.trace.analysisRemark', '信令分析菜单', 'Signaling Analysis Menu'); -INSERT INTO `sys_i18n` VALUES (81, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.trace.pcapRemark', '信令抓包菜单', 'Signaling Capture Menu'); -INSERT INTO `sys_i18n` VALUES (82, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.faultRemark', '故障管理目录', 'Fault Management Catalog'); -INSERT INTO `sys_i18n` VALUES (83, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.fault.active', '活动告警', 'Active Alarms'); -INSERT INTO `sys_i18n` VALUES (84, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.log', '日志', 'Logs'); -INSERT INTO `sys_i18n` VALUES (85, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.log.mml', 'MML日志', 'MML Logs'); -INSERT INTO `sys_i18n` VALUES (86, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.log.alarm', '告警日志', 'Alarm Logs'); -INSERT INTO `sys_i18n` VALUES (87, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.log.forwarding', '告警前转日志', 'Alarm Forwarding Logs'); -INSERT INTO `sys_i18n` VALUES (88, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.log.set', '日志设置', 'Log Settings'); -INSERT INTO `sys_i18n` VALUES (89, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.monitor.sessionUser', '用户会话', 'User Sessions'); -INSERT INTO `sys_i18n` VALUES (90, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.fault.history', '历史告警', 'Historical Alarms'); -INSERT INTO `sys_i18n` VALUES (91, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.fault.set', '设置', 'Settings'); -INSERT INTO `sys_i18n` VALUES (92, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.perf', '性能', 'Performance'); -INSERT INTO `sys_i18n` VALUES (93, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.fault.activemRemark', '活动告警菜单', 'Active Alarm Menu'); -INSERT INTO `sys_i18n` VALUES (94, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.logRemark', '日志管理目录', 'Log Management Catalog'); -INSERT INTO `sys_i18n` VALUES (95, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.log.operatOldRemark', '操作日志旧layui菜单', 'Operation log old layui menu'); -INSERT INTO `sys_i18n` VALUES (96, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.log.mmlRemark', '操作MML日志', 'Operation MML Log'); -INSERT INTO `sys_i18n` VALUES (97, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.log.alarmRemark', '告警日志菜单', 'Alarm Log Menu'); -INSERT INTO `sys_i18n` VALUES (98, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.log.securityOldRemark', '安全日志旧layui菜单', 'Security Log Old Layui Menu'); -INSERT INTO `sys_i18n` VALUES (99, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.log.forwardingRemark', '告警前转日志菜单', 'Alarm forward log menu'); -INSERT INTO `sys_i18n` VALUES (100, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.log.setRemark', '日志设置菜单', 'Log Settings menu'); -INSERT INTO `sys_i18n` VALUES (101, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.monitor.sessionUserRemark', '用户会话旧layui菜单', 'User Session Old Layui Menu'); -INSERT INTO `sys_i18n` VALUES (102, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.fault.historyRemark', '历史告警菜单', 'Alarm history menu'); -INSERT INTO `sys_i18n` VALUES (103, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.fault.setRemark', '故障通用设置菜单', 'Fault General Setup Menu'); -INSERT INTO `sys_i18n` VALUES (104, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.perfRemark', '性能目录', 'Performance Catalog'); -INSERT INTO `sys_i18n` VALUES (105, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.perf.task', '任务管理', 'Performance Tasks'); -INSERT INTO `sys_i18n` VALUES (106, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.perf.data', '性能数据', 'Performance Data'); -INSERT INTO `sys_i18n` VALUES (107, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.perf.kpiOverView', '关键指标概览', 'Key Performance Overview'); -INSERT INTO `sys_i18n` VALUES (108, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.perf.threshold', '性能门限', 'Performance Thresholds'); -INSERT INTO `sys_i18n` VALUES (109, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.perf.kpi', '关键指标', 'Key Performance Indicators'); -INSERT INTO `sys_i18n` VALUES (110, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.perf.customTarget', '自定义指标', 'Custom Indicator Management'); -INSERT INTO `sys_i18n` VALUES (111, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.perf.kpiKeyTarget', '关键指标报表', 'Key Performance Reports'); -INSERT INTO `sys_i18n` VALUES (112, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.mml', 'MML', 'MML'); -INSERT INTO `sys_i18n` VALUES (113, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.mml.ne', '网元操作', 'NE Operation'); -INSERT INTO `sys_i18n` VALUES (114, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.mml.udm', 'UDM操作', 'UDM Operation'); -INSERT INTO `sys_i18n` VALUES (115, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.mml.set', 'MML设置', 'MML Settings'); -INSERT INTO `sys_i18n` VALUES (116, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.mml.omc', 'OMC操作', 'OMC Operation'); -INSERT INTO `sys_i18n` VALUES (117, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.perf.taskRemark', '任务管理菜单', 'Task Management Menu'); -INSERT INTO `sys_i18n` VALUES (118, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.perf.dataRemark', '性能数据菜单', 'Performance Data Menu'); -INSERT INTO `sys_i18n` VALUES (119, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.dashboard.smscCDR.content', '可见短信内容', 'Visible SMS content'); -INSERT INTO `sys_i18n` VALUES (120, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.perf.thresholdRemark', '性能门限菜单', 'Performance Threshold Menu'); -INSERT INTO `sys_i18n` VALUES (121, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.perf.kpiRemark', '黄金指标菜单', 'Key Performance Indicator Menu'); -INSERT INTO `sys_i18n` VALUES (122, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.perf.customTargetRemark', '自定义指标菜单', 'Custom Indicator Management Menu'); -INSERT INTO `sys_i18n` VALUES (123, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.dashboard.smfCDRByIMSI', '数据流量报表', 'Data Usage Report'); -INSERT INTO `sys_i18n` VALUES (124, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.mmlRemark', 'MML管理目录', 'MML Management Catalog'); -INSERT INTO `sys_i18n` VALUES (125, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.mml.neRemark', '网元操作菜单', 'Network Element Operations Menu'); -INSERT INTO `sys_i18n` VALUES (126, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.mml.udmRemark', '网元UDM用户数据菜单', 'Network Element UDM User Data Menu'); -INSERT INTO `sys_i18n` VALUES (127, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.mml.setRemark', 'MML设置菜单', 'MML Setup Menu'); -INSERT INTO `sys_i18n` VALUES (128, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.mml.omcRemark', 'OMC操作菜单', 'OMC Operation Menu'); -INSERT INTO `sys_i18n` VALUES (129, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.dashboard.sgwcCDR', '漫游数据话单', 'Roaming Data CDR'); -INSERT INTO `sys_i18n` VALUES (130, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.security', '安全', 'Security'); -INSERT INTO `sys_i18n` VALUES (131, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.system.systemSet', '系统设置', 'System Settings'); -INSERT INTO `sys_i18n` VALUES (132, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.system.systemResource', '系统资源', 'System Resources'); -INSERT INTO `sys_i18n` VALUES (133, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.operate.title.sgwcCDR', '漫游数据话单', 'Roaming Data CDR'); -INSERT INTO `sys_i18n` VALUES (134, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.securityRemark', '安全管理目录', 'Security Management Catalog'); -INSERT INTO `sys_i18n` VALUES (135, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.system.systemSetRemark', '系统设置菜单', 'System Settings Menu'); -INSERT INTO `sys_i18n` VALUES (136, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.system.systemResourceRemark', '系统资源 cpu io network菜单', 'System Resources cpu io network menu'); -INSERT INTO `sys_i18n` VALUES (137, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.offline', '离线', 'Offline'); -INSERT INTO `sys_i18n` VALUES (138, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.online', '在线', 'Online'); -INSERT INTO `sys_i18n` VALUES (139, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.neData.baseStation', '基站状态', 'Radio State'); -INSERT INTO `sys_i18n` VALUES (140, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.noData', '没有可访问菜单数据!', 'There is no accessible menu data!'); -INSERT INTO `sys_i18n` VALUES (141, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.errNameExists', '操作菜单【{name}】失败,菜单名称已存在', 'Failed to operate menu [{name}], menu name already exists!'); -INSERT INTO `sys_i18n` VALUES (142, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.errPathExists', '操作菜单【{name}】失败,菜单路由地址已存在', 'Failed to operate menu [{name}], menu routing address already exists!'); -INSERT INTO `sys_i18n` VALUES (143, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.errFramePath', '操作菜单【{name}】失败,非内部地址请以http(s)://开头', 'Failed to manipulate menu [{name}], non-internal address should start with http(s)://'); -INSERT INTO `sys_i18n` VALUES (144, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.errParentStatus', '上级菜单未启用!', 'The parent menu is not enabled!'); -INSERT INTO `sys_i18n` VALUES (145, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.errHasChildUse', '操作菜单【{name}】失败,存在使用子菜单数:{num}', 'Operation menu [{name}] failed, number of submenus in use exists: {num}'); -INSERT INTO `sys_i18n` VALUES (146, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.errHasRoleUse', '操作菜单【{name}】失败,菜单已分配给角色数:{num}', 'Operation menu [{name}] failed, number of roles the menu has been assigned to: {num}'); -INSERT INTO `sys_i18n` VALUES (147, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.sex.un', '未选择', 'Not Selected'); -INSERT INTO `sys_i18n` VALUES (148, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.sex.male', '男', 'Male'); -INSERT INTO `sys_i18n` VALUES (149, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.sex.female', '女', 'Female'); -INSERT INTO `sys_i18n` VALUES (150, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.show', '显示', 'Show'); -INSERT INTO `sys_i18n` VALUES (151, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.hide', '隐藏', 'Hide'); -INSERT INTO `sys_i18n` VALUES (152, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.normal', '正常', 'Active'); -INSERT INTO `sys_i18n` VALUES (153, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.disable', '停用', 'Inactive'); -INSERT INTO `sys_i18n` VALUES (154, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.yes', '是', 'Yes'); -INSERT INTO `sys_i18n` VALUES (155, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.no', '否', 'No'); -INSERT INTO `sys_i18n` VALUES (156, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.success', '成功', 'Successful'); -INSERT INTO `sys_i18n` VALUES (157, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.fail', '失败', 'Failed'); -INSERT INTO `sys_i18n` VALUES (158, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.jobStatus.normal', '正常', 'Active'); -INSERT INTO `sys_i18n` VALUES (159, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.jobStatus.pause', '暂停', 'Inactive'); -INSERT INTO `sys_i18n` VALUES (160, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.jobGroup.Default', '默认', 'Default'); -INSERT INTO `sys_i18n` VALUES (161, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.jobGroup.System', '系统', 'System'); -INSERT INTO `sys_i18n` VALUES (162, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.operType.other', '其他', 'Other'); -INSERT INTO `sys_i18n` VALUES (163, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.operType.add', '新增', 'New'); -INSERT INTO `sys_i18n` VALUES (164, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.operType.edit', '修改', 'Modify'); -INSERT INTO `sys_i18n` VALUES (165, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.operType.delete', '删除', 'Delete'); -INSERT INTO `sys_i18n` VALUES (166, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.operType.auth', '授权', 'Authorization'); -INSERT INTO `sys_i18n` VALUES (167, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.operType.export', '导出', 'Export'); -INSERT INTO `sys_i18n` VALUES (168, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.operType.import', '导入', 'Import'); -INSERT INTO `sys_i18n` VALUES (169, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.operType.forced quit', '强退', 'Forced Retirement'); -INSERT INTO `sys_i18n` VALUES (170, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.operType.clear', '清空', 'Clear'); -INSERT INTO `sys_i18n` VALUES (171, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.trace.interface', '接口跟踪', 'Interface Tracing'); -INSERT INTO `sys_i18n` VALUES (172, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.trace.device', '设备跟踪', 'Module Tracing'); -INSERT INTO `sys_i18n` VALUES (173, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.trace.user', '用户跟踪', 'User Tracing'); -INSERT INTO `sys_i18n` VALUES (174, '0', 'system', 1699348237468, 'system', 1699348237468, 'nbState.export.id', '编号', 'ID'); -INSERT INTO `sys_i18n` VALUES (175, '0', 'system', 1699348237468, 'system', 1699348237468, 'nbState.export.name', '基站名称', 'Name'); -INSERT INTO `sys_i18n` VALUES (176, '0', 'system', 1699348237468, 'system', 1699348237468, 'nbState.export.position', '基站位置', 'Position'); -INSERT INTO `sys_i18n` VALUES (177, '0', 'system', 1699348237468, 'system', 1699348237468, 'nbState.export.address', 'IP地址', 'IP Address'); -INSERT INTO `sys_i18n` VALUES (178, '0', 'system', 1699348237468, 'system', 1699348237468, 'nbState.export.nbName', '设备名称', 'RanNodeName'); -INSERT INTO `sys_i18n` VALUES (179, '0', 'system', 1699348237468, 'system', 1699348237468, 'nbState.export.ueNum', '在线用户数', 'UE Number'); -INSERT INTO `sys_i18n` VALUES (180, '0', 'system', 1699348237468, 'system', 1699348237468, 'nbState.export.state', '基站状态', 'State'); -INSERT INTO `sys_i18n` VALUES (181, '0', 'system', 1699348237468, 'system', 1699348237468, 'nbState.export.time', '变更时间', 'Change Time'); -INSERT INTO `sys_i18n` VALUES (182, '0', 'system', 1699348237468, 'system', 1699348237468, 'neHost.okBySSHLink', '设置免密直连成功', 'Setting up a password-free direct connection is successful'); -INSERT INTO `sys_i18n` VALUES (183, '0', 'system', 1699348237468, 'system', 1699348237468, 'neHost.banNE', '禁止操作网元', 'Do not operate the NE'); -INSERT INTO `sys_i18n` VALUES (184, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.ne_host_type.redis', 'Redis', 'Redis'); -INSERT INTO `sys_i18n` VALUES (185, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.tools.ping', '网络探测测试', 'Net Probing Test'); -INSERT INTO `sys_i18n` VALUES (186, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.tools.iperf', '网络性能测试', 'Net Performance Test'); -INSERT INTO `sys_i18n` VALUES (187, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.jobSaveLog.no', '不记录', 'No Record'); -INSERT INTO `sys_i18n` VALUES (188, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.jobSaveLog.yes', '记录', 'Recorded'); -INSERT INTO `sys_i18n` VALUES (189, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.neVersionStatus.upload', '已上传', 'Uploaded'); -INSERT INTO `sys_i18n` VALUES (190, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.neVersionStatus.inactive', '未激活', 'Inactivated'); -INSERT INTO `sys_i18n` VALUES (191, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.neVersionStatus.active', '已激活', 'Activated'); -INSERT INTO `sys_i18n` VALUES (192, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.alarmStatus.history', '历史告警', 'Historical Alarm'); -INSERT INTO `sys_i18n` VALUES (193, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.alarmStatus.active', '活动告警', 'Active Alarm'); -INSERT INTO `sys_i18n` VALUES (194, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.export.code', '数据代码', 'Data Code'); -INSERT INTO `sys_i18n` VALUES (195, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.export.sort', '数据排序', 'Data Sort'); -INSERT INTO `sys_i18n` VALUES (196, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.export.label', '数据标签', 'Data Key'); -INSERT INTO `sys_i18n` VALUES (197, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.export.value', '数据键值', 'Data Value'); -INSERT INTO `sys_i18n` VALUES (198, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.export.type', '数据排序', 'Data Type'); -INSERT INTO `sys_i18n` VALUES (199, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.export.status', '数据状态', 'Status'); -INSERT INTO `sys_i18n` VALUES (200, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.datascope.all', '全部数据权限', 'All data permissions'); -INSERT INTO `sys_i18n` VALUES (201, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.datascope.custom', '自定数据权限', 'Customized Data Rights'); -INSERT INTO `sys_i18n` VALUES (202, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.datascope.dept', '部门数据权限', 'Departmental Data Permissions'); -INSERT INTO `sys_i18n` VALUES (203, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.datascope.deptAndChid', '部门及以下数据权限', 'Department and below'); -INSERT INTO `sys_i18n` VALUES (204, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.datascope.self', '仅本人数据权限', 'Personal data access only'); -INSERT INTO `sys_i18n` VALUES (205, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.noData', '没有可访问字典编码数据!', 'There is no accessible dictionary code data!'); -INSERT INTO `sys_i18n` VALUES (206, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.errLabelExists', '操作数据【{name}】失败,该字典类型下标签名已存在', 'Failed to manipulate data [{name}], tag name already exists under this dictionary type!'); -INSERT INTO `sys_i18n` VALUES (207, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_user_sex', '用户性别', 'User Gender'); -INSERT INTO `sys_i18n` VALUES (208, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_show_hide', '菜单状态', 'Menu Status'); -INSERT INTO `sys_i18n` VALUES (209, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_normal_disable', '系统开关', 'System switches'); -INSERT INTO `sys_i18n` VALUES (210, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_job_status', '任务状态', 'Task Status'); -INSERT INTO `sys_i18n` VALUES (211, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_job_group', '任务分组', 'Task Grouping'); -INSERT INTO `sys_i18n` VALUES (212, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_yes_no', '系统是否', 'System or not'); -INSERT INTO `sys_i18n` VALUES (213, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_oper_type', '操作类型', 'Operation Type'); -INSERT INTO `sys_i18n` VALUES (214, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_common_status', '系统状态', 'System Status'); -INSERT INTO `sys_i18n` VALUES (215, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.trace_type', '跟踪类型', 'Trace Types'); -INSERT INTO `sys_i18n` VALUES (216, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.tools.ps', '进程运行程序', 'Process Running Program'); -INSERT INTO `sys_i18n` VALUES (217, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.alarm_status', '告警日志类型', 'Alarm Log Type'); -INSERT INTO `sys_i18n` VALUES (218, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.tools.net', '进程网络连接', 'Process Net Connection'); -INSERT INTO `sys_i18n` VALUES (219, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.ne_version_status', '网元软件版本状态', 'Network element software version status'); -INSERT INTO `sys_i18n` VALUES (220, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_user_sex_remark', '用户性别列表', 'User gender list'); -INSERT INTO `sys_i18n` VALUES (221, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_show_hide_remark', '菜单状态列表', 'Menu Status List'); -INSERT INTO `sys_i18n` VALUES (222, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_normal_disable_remark', '系统开关列表', 'System switch list'); -INSERT INTO `sys_i18n` VALUES (223, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_job_status_remark', '任务状态列表', 'Task Status List'); -INSERT INTO `sys_i18n` VALUES (224, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_job_group_remark', '任务分组列表', 'Task Grouping List'); -INSERT INTO `sys_i18n` VALUES (225, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_yes_no_remark', '系统是否列表', 'System whether list'); -INSERT INTO `sys_i18n` VALUES (226, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_oper_type_remark', '操作类型列表', 'Operation type list'); -INSERT INTO `sys_i18n` VALUES (227, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_common_status_remark', '登录状态列表', 'Login Status List'); -INSERT INTO `sys_i18n` VALUES (228, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.trace_type_remark', '跟踪类型', 'Trace Types'); -INSERT INTO `sys_i18n` VALUES (229, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.alarm_status_remark', '告警日志状态类型', 'Alarm Log Status Type'); -INSERT INTO `sys_i18n` VALUES (230, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.trace.tshark', '信令分析', 'Signaling Analysis'); -INSERT INTO `sys_i18n` VALUES (231, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.trace.wireshark', '信令跟踪', 'Signaling Trace'); -INSERT INTO `sys_i18n` VALUES (232, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.ne_version_status_remark', '网元软件版本状态', 'Network element software version status'); -INSERT INTO `sys_i18n` VALUES (233, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.export.id', '字典编号', 'Dictionary Number'); -INSERT INTO `sys_i18n` VALUES (234, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.export.name', '字典名称', 'Dictionary Name'); -INSERT INTO `sys_i18n` VALUES (235, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.export.type', '字典类型', 'Dictionary Type'); -INSERT INTO `sys_i18n` VALUES (236, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.export.status', '字典状态', 'Status'); -INSERT INTO `sys_i18n` VALUES (237, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_role_datascope', '系统角色数据范围', 'System Role Data Range'); -INSERT INTO `sys_i18n` VALUES (238, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_role_datascope_remark', '系统角色数据范围映射', 'System Role Data Range Mapping'); -INSERT INTO `sys_i18n` VALUES (239, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.noData', '没有可访问字典类型数据!', 'There is no accessible dictionary type data!'); -INSERT INTO `sys_i18n` VALUES (240, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.errNameExists', '操作字典【{name}】失败,字典名称已存在', 'Failed to manipulate dictionary [{name}], dictionary name already exists!'); -INSERT INTO `sys_i18n` VALUES (241, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.errTypeExists', '操作字典【{name}】失败,字典类型已存在', 'Failed to manipulate dictionary [{name}], dictionary type already exists!'); -INSERT INTO `sys_i18n` VALUES (242, '0', 'system', 1699348237468, 'system', 1699348237468, 'dept.root', '系统', 'System'); -INSERT INTO `sys_i18n` VALUES (243, '0', 'system', 1699348237468, 'system', 1699348237468, 'dept.root.item1', '未分配', 'Unallocated'); -INSERT INTO `sys_i18n` VALUES (244, '0', 'system', 1699348237468, 'system', 1699348237468, 'dept.noData', '没有可访问部门数据!', 'There is no accessible department data!'); -INSERT INTO `sys_i18n` VALUES (245, '0', 'system', 1699348237468, 'system', 1699348237468, 'dept.errParentDelFlag', '上级部门【{name}】已删除,不允许新增', 'The parent department [{name}] has been deleted and is not allowed to be added.'); -INSERT INTO `sys_i18n` VALUES (246, '0', 'system', 1699348237468, 'system', 1699348237468, 'dept.errParentStatus', '上级部门【{name}】停用,不允许新增', 'Parent department [{name}] is deactivated, additions are not allowed!'); -INSERT INTO `sys_i18n` VALUES (247, '0', 'system', 1699348237468, 'system', 1699348237468, 'dept.errNameExists', '操作部门【{name}】失败,部门名称已存在', 'Manipulate department [{name}] failed, department name already exists!'); -INSERT INTO `sys_i18n` VALUES (248, '0', 'system', 1699348237468, 'system', 1699348237468, 'dept.errParentID', '操作部门【{name}】失败,上级部门不能是自己', 'Failed to operate department [{name}], the parent department cannot be itself.'); -INSERT INTO `sys_i18n` VALUES (249, '0', 'system', 1699348237468, 'system', 1699348237468, 'dept.errHasChildUse', '操作失败,该部门包含未停用的子部门数量:{num}', 'Operation failed, the department contains undeactivated sub-departments number: {num}'); -INSERT INTO `sys_i18n` VALUES (250, '0', 'system', 1699348237468, 'system', 1699348237468, 'dept.errHasUserUse', '不允许删除,部门已分配给用户数:{num}', 'Deletion is not allowed, number of users the department has been assigned to: {num}'); -INSERT INTO `sys_i18n` VALUES (251, '0', 'system', 1699348237468, 'system', 1699348237468, 'config.sys.user.initPassword', '用户管理-账号初始密码', 'User Management-Account Initial Password'); -INSERT INTO `sys_i18n` VALUES (252, '0', 'system', 1699348237468, 'system', 1699348237468, 'config.sys.account.captchaEnabled', '账号自助-验证码开关', 'Account self-help-Certification code switch'); -INSERT INTO `sys_i18n` VALUES (253, '0', 'system', 1699348237468, 'system', 1699348237468, 'config.sys.account.registerUser', '账号自助-是否开启用户注册功能', 'Account self-service-Whether to enable the user registration function'); -INSERT INTO `sys_i18n` VALUES (254, '0', 'system', 1699348237468, 'system', 1699348237468, 'config.sys.user.maxRetryCount', '用户管理-密码最大错误次数', 'User Management-Maximum number of password errors'); -INSERT INTO `sys_i18n` VALUES (255, '0', 'system', 1699348237468, 'system', 1699348237468, 'config.sys.user.lockTime', '用户管理-密码锁定时间', 'User Management-Password Lock Time'); -INSERT INTO `sys_i18n` VALUES (256, '0', 'system', 1699348237468, 'system', 1699348237468, 'config.monitor.sysResource.storeDays', '监控-系统资源-数据保留时长', 'Monitor-System Resources-Data retention time'); -INSERT INTO `sys_i18n` VALUES (257, '0', 'system', 1699348237468, 'system', 1699348237468, 'config.sys.logo.type', '系统设置-LOGO类型', 'System Settings-Logo Type'); -INSERT INTO `sys_i18n` VALUES (258, '0', 'system', 1699348237468, 'system', 1699348237468, 'config.sys.logo.filePathIcon', '系统设置-LOGO文件icon', 'System Settings-Logo File icon'); -INSERT INTO `sys_i18n` VALUES (259, '0', 'system', 1699348237468, 'system', 1699348237468, 'config.sys.logo.filePathBrand', '系统设置-LOGO文件brand', 'System Settings-Logo File Brand'); -INSERT INTO `sys_i18n` VALUES (260, '0', 'system', 1699348237468, 'system', 1699348237468, 'config.sys.loginBackground', '系统设置-登录界面背景', 'System Settings-Login Interface Background'); -INSERT INTO `sys_i18n` VALUES (261, '0', 'system', 1699348237468, 'system', 1699348237468, 'config.sys.title', '系统设置-系统名称', 'System Settings-System Name'); -INSERT INTO `sys_i18n` VALUES (262, '0', 'system', 1699348237468, 'system', 1699348237468, 'config.sys.copyright', '系统设置-版权声明', 'System Settings-Copyright Notice'); -INSERT INTO `sys_i18n` VALUES (263, '0', 'system', 1699348237468, 'system', 1699348237468, 'config.sys.user.initPasswordRemark', '导入用户初始化密码', 'Import user initialization password'); -INSERT INTO `sys_i18n` VALUES (264, '0', 'system', 1699348237468, 'system', 1699348237468, 'config.sys.account.captchaEnabledRemark', '是否开启验证码功能(true开启,false关闭)', 'Whether to enable the verification code function (true on, false off)'); -INSERT INTO `sys_i18n` VALUES (265, '0', 'system', 1699348237468, 'system', 1699348237468, 'config.sys.account.registerUserRemark', '是否开启注册用户功能(true开启,false关闭)', 'Whether to enable the function of registered users (true on, false off)'); -INSERT INTO `sys_i18n` VALUES (266, '0', 'system', 1699348237468, 'system', 1699348237468, 'config.sys.user.maxRetryCountRemark', '密码最大错误次数', 'Maximum number of password errors'); -INSERT INTO `sys_i18n` VALUES (267, '0', 'system', 1699348237468, 'system', 1699348237468, 'config.sys.user.lockTimeRemark', '密码锁定时间,单位分钟(默认10分钟)', 'Password lock time in minutes (default 10 minutes)'); -INSERT INTO `sys_i18n` VALUES (268, '0', 'system', 1699348237468, 'system', 1699348237468, '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.'); -INSERT INTO `sys_i18n` VALUES (269, '0', 'system', 1699348237468, 'system', 1699348237468, 'config.sys.logo.typeRemark', '全图:brand\n小图:icon', 'Full image: brand\nSmall image: icon'); -INSERT INTO `sys_i18n` VALUES (270, '0', 'system', 1699348237468, 'system', 1699348237468, 'config.sys.logo.filePathIconRemark', '文件支持网络地址图片和内部上传的文件路径', 'File support for web address images and file paths for internal uploads'); -INSERT INTO `sys_i18n` VALUES (271, '0', 'system', 1699348237468, 'system', 1699348237468, 'config.sys.logo.filePathBrandRemark', '文件支持网络地址图片和内部上传的文件路径', 'File support for web address images and paths to internally uploaded files'); -INSERT INTO `sys_i18n` VALUES (272, '0', 'system', 1699348237468, 'system', 1699348237468, 'config.sys.loginBackgroundRemark', '文件支持网络地址图片和内部上传的文件路径,默认背景用#号', 'The file supports web address images and internal upload file paths with a # in the default background'); -INSERT INTO `sys_i18n` VALUES (273, '0', 'system', 1699348237468, 'system', 1699348237468, 'config.sys.titleRemark', '系统名称长度限制20位字符串', 'System name length limit of 20-digit string'); -INSERT INTO `sys_i18n` VALUES (274, '0', 'system', 1699348237468, 'system', 1699348237468, 'config.sys.copyrightRemark', '底脚固定条,左侧放置版权声明', 'Footer fixing strip with copyright notice on the left side'); -INSERT INTO `sys_i18n` VALUES (275, '0', 'system', 1699348237468, 'system', 1699348237468, 'config..export.id', '参数编号', 'ID'); -INSERT INTO `sys_i18n` VALUES (276, '0', 'system', 1699348237468, 'system', 1699348237468, 'config..export.name', '参数名称', 'Config Name'); -INSERT INTO `sys_i18n` VALUES (277, '0', 'system', 1699348237468, 'system', 1699348237468, 'config..export.key', '参数键名', 'Config Key'); -INSERT INTO `sys_i18n` VALUES (278, '0', 'system', 1699348237468, 'system', 1699348237468, 'config..export.value', '参数键值', 'Config Value'); -INSERT INTO `sys_i18n` VALUES (279, '0', 'system', 1699348237468, 'system', 1699348237468, 'config..export.type', '系统内置', 'Built In'); -INSERT INTO `sys_i18n` VALUES (280, '0', 'system', 1699348237468, 'system', 1699348237468, 'config..export.remark', '参数说明', 'Config Description'); -INSERT INTO `sys_i18n` VALUES (281, '0', 'system', 1699348237468, 'system', 1699348237468, 'config.sys.titleValue', 'BlueArcus EMS', 'BlueArcus EMS'); -INSERT INTO `sys_i18n` VALUES (282, '0', 'system', 1699348237468, 'system', 1699348237468, 'config.sys.copyrightValue', 'Copyright ©2025 BlueArcus', 'Copyright ©2025 BlueArcus'); -INSERT INTO `sys_i18n` VALUES (283, '0', 'system', 1699348237468, 'system', 1699348237468, 'config.noData', '没有可访问参数配置数据!', 'No parameter configuration data is accessible!'); -INSERT INTO `sys_i18n` VALUES (284, '0', 'system', 1699348237468, 'system', 1699348237468, 'config.errKey', '无效 key', 'Invalid key'); -INSERT INTO `sys_i18n` VALUES (285, '0', 'system', 1699348237468, 'system', 1699348237468, 'config.errValueEq', '变更状态与旧值相等!', 'Change state is equal to the old value!'); -INSERT INTO `sys_i18n` VALUES (286, '0', 'system', 1699348237468, 'system', 1699348237468, 'config.errKeyExists', '操作参数配置【{name}】失败,参数键名已存在', 'Failed to manipulate parameter configuration [{name}], parameter key name already exists!'); -INSERT INTO `sys_i18n` VALUES (287, '0', 'system', 1699348237468, 'system', 1699348237468, 'config.errDelete', '删除参数配置信息失败!', 'Deletion of parameter configuration information failed!'); -INSERT INTO `sys_i18n` VALUES (288, '0', 'system', 1699348237468, 'system', 1699348237468, 'config.errType', '操作含有内置参数,禁止删除!', 'The operation contains built-in parameters and deletion is prohibited!'); -INSERT INTO `sys_i18n` VALUES (289, '0', 'system', 1699348237468, 'system', 1699348237468, 'job.monitor_sys_resource', '监控-系统资源', 'Monitor-System Resources'); -INSERT INTO `sys_i18n` VALUES (290, '0', 'system', 1699348237468, 'system', 1699348237468, 'job.monitor_sys_resource_remark', '系统资源CPU/IO/Netword收集\ninterval单位分钟,平均分钟资源情况\n注:请根据cron表达式的时间单位分钟,传入参数interva值', 'System Resource CPU/IO/Netword Collection\ninterval unit minutes, average minute resource situation\nNote: Please pass the value of the parameter interva according to the time unit minutes of the cron expression'); -INSERT INTO `sys_i18n` VALUES (291, '0', 'system', 1699348237468, 'system', 1699348237468, 'job.delete_ne_config_backup', '删除-过期配置文件备份', 'Delete expired NE etc backup file'); -INSERT INTO `sys_i18n` VALUES (292, '0', 'system', 1699348237468, 'system', 1699348237468, 'job.delete_ne_config_backup_remark', 'storeDays:表示保留最近天数的数据记录', 'storeDays: indicates that the most recent days of data records are kept.'); -INSERT INTO `sys_i18n` VALUES (293, '0', 'system', 1699348237468, 'system', 1699348237468, 'job.delete_alarm_record', '删除-过期告警记录', 'Delete-Expired Alarm Records'); -INSERT INTO `sys_i18n` VALUES (294, '0', 'system', 1699348237468, 'system', 1699348237468, 'job.delete_alarm_record_remark', 'storeDays:表示保留最近天数的数据记录', 'storeDays: indicates that the most recent days of data records are kept.'); -INSERT INTO `sys_i18n` VALUES (295, '0', 'system', 1699348237468, 'system', 1699348237468, 'job.delete_kpi_record', '删除-过期指标记录', 'Delete expired KPI records'); -INSERT INTO `sys_i18n` VALUES (296, '0', 'system', 1699348237468, 'system', 1699348237468, 'job.delete_kpi_record_remark', 'storeDays:表示保留最近天数的数据记录\r\nneList:表示匹配的网元类型', 'storeDays: Indicates the most recent days of data records retained\r\nneList: Indicates the type of network elements matched'); -INSERT INTO `sys_i18n` VALUES (297, '0', 'system', 1699348237468, 'system', 1699348237468, 'table.cdr_event_sgwc', '漫游数据话单', 'Roaming Data CDR'); --- INSERT INTO `sys_i18n` VALUES (298, '0', 'system', 1699348237468, 'system', 1699348237468, 'job.backupEtcFromNERemark', '自动备份网元etc目录下的配置文件', 'Automatically backs up the configuration files in the NE etc directory.'); -INSERT INTO `sys_i18n` VALUES (299, '0', 'system', 1699348237468, 'system', 1699348237468, 'job.export.jobID', '任务编号', 'ID'); -INSERT INTO `sys_i18n` VALUES (300, '0', 'system', 1699348237468, 'system', 1699348237468, 'job.export.jobName', '任务名称', 'Name'); -INSERT INTO `sys_i18n` VALUES (301, '0', 'system', 1699348237468, 'system', 1699348237468, 'job.export.jobGroupName', '任务组名', 'Group'); -INSERT INTO `sys_i18n` VALUES (302, '0', 'system', 1699348237468, 'system', 1699348237468, 'job.export.invokeTarget', '调用目标', 'Invoke'); -INSERT INTO `sys_i18n` VALUES (303, '0', 'system', 1699348237468, 'system', 1699348237468, 'job.export.targetParams', '传入参数', 'Incoming Parameters'); -INSERT INTO `sys_i18n` VALUES (304, '0', 'system', 1699348237468, 'system', 1699348237468, 'job.export.cronExpression', 'cron表达式', 'Cron'); -INSERT INTO `sys_i18n` VALUES (305, '0', 'system', 1699348237468, 'system', 1699348237468, 'job.export.status', '状态', 'Status'); -INSERT INTO `sys_i18n` VALUES (306, '0', 'system', 1699348237468, 'system', 1699348237468, 'job.export.remark', '备注说明', 'Description'); -INSERT INTO `sys_i18n` VALUES (307, '0', 'system', 1699348237468, 'system', 1699348237468, 'job.export.jobLogID', '任务日志编号', 'ID'); -INSERT INTO `sys_i18n` VALUES (308, '0', 'system', 1699348237468, 'system', 1699348237468, 'job.export.jobLogStatus', '任务日志状态', 'Status'); -INSERT INTO `sys_i18n` VALUES (309, '0', 'system', 1699348237468, 'system', 1699348237468, 'job.export.jobLogTime', '任务日志时间', 'Time'); -INSERT INTO `sys_i18n` VALUES (310, '0', 'system', 1699348237468, 'system', 1699348237468, 'job.noData', '没有可访问调度任务数据!', 'There is no accessible scheduling task data!'); -INSERT INTO `sys_i18n` VALUES (311, '0', 'system', 1699348237468, 'system', 1699348237468, 'job.errTargetParams', '操作调度任务【{name}】失败,任务传入参数json字符串不正确', 'Failed to operate scheduling task [{name}] with incorrect task incoming parameter json string!'); -INSERT INTO `sys_i18n` VALUES (312, '0', 'system', 1699348237468, 'system', 1699348237468, 'job.errCronExpression', '操作调度任务【{name}】失败,Cron表达式不正确', 'Scheduled task [{name}] failed with incorrect Cron expression!'); -INSERT INTO `sys_i18n` VALUES (313, '0', 'system', 1699348237468, 'system', 1699348237468, 'job.errJobExists', '调度任务新增【{name}】失败,同任务组内有相同任务名称', 'Failed to add a new task [{name}] to a scheduling task, same task name in the same task group'); -INSERT INTO `sys_i18n` VALUES (314, '0', 'system', 1699348237468, 'system', 1699348237468, 'job.statusEq', '变更状态与旧值相等!', 'The change state is equal to the old value!'); -INSERT INTO `sys_i18n` VALUES (315, '0', 'system', 1699348237468, 'system', 1699348237468, 'role.system', '系统', 'System'); -INSERT INTO `sys_i18n` VALUES (316, '0', 'system', 1699348237468, 'system', 1699348237468, 'role.admin', '管理人员', 'Administrator'); -INSERT INTO `sys_i18n` VALUES (317, '0', 'system', 1699348237468, 'system', 1699348237468, 'role.operator', '运维人员', 'Operators'); -INSERT INTO `sys_i18n` VALUES (318, '0', 'system', 1699348237468, 'system', 1699348237468, 'role.monitor', '监控人员', 'Monitor'); -INSERT INTO `sys_i18n` VALUES (319, '0', 'system', 1699348237468, 'system', 1699348237468, 'role.vistor', '普通用户', 'General Users'); -INSERT INTO `sys_i18n` VALUES (320, '0', 'system', 1699348237468, 'system', 1699348237468, 'role.systemRemark', '系统,无法修改删除', 'System, cannot modify or delete'); -INSERT INTO `sys_i18n` VALUES (321, '0', 'system', 1699348237468, 'system', 1699348237468, 'role.adminRemark', '管理人员 可以对设备进行任何操作', 'Administrators can perform any operation on the device'); -INSERT INTO `sys_i18n` VALUES (322, '0', 'system', 1699348237468, 'system', 1699348237468, '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.'); -INSERT INTO `sys_i18n` VALUES (323, '0', 'system', 1699348237468, 'system', 1699348237468, 'role.monitorRemark', '监控人员 只能从设备读取数据,而不能对设备进行任何设置', 'Monitoring personnel Can only read data from the device, but cannot make any settings on the device'); -INSERT INTO `sys_i18n` VALUES (324, '0', 'system', 1699348237468, 'system', 1699348237468, 'role.vistorRemark', '普通用户 只可看系统相关信息', 'Ordinary users can only see system-related information'); -INSERT INTO `sys_i18n` VALUES (325, '0', 'system', 1699348237468, 'system', 1699348237468, 'role.export.id', '角色编号', 'Role Number'); -INSERT INTO `sys_i18n` VALUES (326, '0', 'system', 1699348237468, 'system', 1699348237468, 'role.export.name', '角色名称 ', 'Role Name'); -INSERT INTO `sys_i18n` VALUES (327, '0', 'system', 1699348237468, 'system', 1699348237468, 'role.export.key', '角色键值', 'Role Key'); -INSERT INTO `sys_i18n` VALUES (328, '0', 'system', 1699348237468, 'system', 1699348237468, 'role.export.sort', '角色顺序', 'Role Sort'); -INSERT INTO `sys_i18n` VALUES (329, '0', 'system', 1699348237468, 'system', 1699348237468, 'role.export.dataScope', '角色数据范围', 'Role Data Range'); -INSERT INTO `sys_i18n` VALUES (330, '0', 'system', 1699348237468, 'system', 1699348237468, 'role.export.status', '角色状态', 'Role Status'); -INSERT INTO `sys_i18n` VALUES (331, '0', 'system', 1699348237468, 'system', 1699348237468, 'role.noData', '没有可访问角色数据!', 'There is no accessible role data!'); -INSERT INTO `sys_i18n` VALUES (332, '0', 'system', 1699348237468, 'system', 1699348237468, 'role.statusEq', '变更状态与旧值相等!', 'The change status is equal to the old value!'); -INSERT INTO `sys_i18n` VALUES (333, '0', 'system', 1699348237468, 'system', 1699348237468, 'role.errNameExists', '操作角色【{name}】失败,角色名称已存在', 'Manipulating role [{name}] failed, role name already exists!'); -INSERT INTO `sys_i18n` VALUES (334, '0', 'system', 1699348237468, 'system', 1699348237468, 'role.errKeyExists', '操作角色【{name}】失败,角色键值已存在', 'Failed to manipulate role [{name}], role key already exists!'); -INSERT INTO `sys_i18n` VALUES (335, '0', 'system', 1699348237468, 'system', 1699348237468, 'post.admin', '系统', 'Systems'); -INSERT INTO `sys_i18n` VALUES (336, '0', 'system', 1699348237468, 'system', 1699348237468, 'post.operator', '管理', 'Management'); -INSERT INTO `sys_i18n` VALUES (337, '0', 'system', 1699348237468, 'system', 1699348237468, 'post.monitor', '运维', 'Operation & Maintenance'); -INSERT INTO `sys_i18n` VALUES (338, '0', 'system', 1699348237468, 'system', 1699348237468, 'post.visitor', '监控', 'Monitoring'); -INSERT INTO `sys_i18n` VALUES (339, '0', 'system', 1699348237468, 'system', 1699348237468, 'post.export.id', '岗位编号 ', 'Position Number'); -INSERT INTO `sys_i18n` VALUES (340, '0', 'system', 1699348237468, 'system', 1699348237468, 'post.export.code', '岗位编码', 'Position Code'); -INSERT INTO `sys_i18n` VALUES (341, '0', 'system', 1699348237468, 'system', 1699348237468, 'post.export.name', '岗位名称', 'Position Name'); -INSERT INTO `sys_i18n` VALUES (342, '0', 'system', 1699348237468, 'system', 1699348237468, 'post.export.sort', '岗位排序', 'Position Sort'); -INSERT INTO `sys_i18n` VALUES (343, '0', 'system', 1699348237468, 'system', 1699348237468, 'post.export.status', '岗位状态', 'Position Status'); -INSERT INTO `sys_i18n` VALUES (344, '0', 'system', 1699348237468, 'system', 1699348237468, 'post.noData', '没有可访问岗位数据!', 'There is no accessible post data!'); -INSERT INTO `sys_i18n` VALUES (345, '0', 'system', 1699348237468, 'system', 1699348237468, 'post.errNameExists', '操作岗位【{name}】失败,岗位名称已存在已存在', 'Failed to manipulate post [{name}], post name already exists already exists'); -INSERT INTO `sys_i18n` VALUES (346, '0', 'system', 1699348237468, 'system', 1699348237468, 'post.errCodeExists', '操作角色【{name}】失败,角色键值已存在', 'Failed to manipulate role [{name}], role key already exists.'); -INSERT INTO `sys_i18n` VALUES (347, '0', 'system', 1699348237468, 'system', 1699348237468, 'user.export.id', '用户编号', 'User Number'); -INSERT INTO `sys_i18n` VALUES (348, '0', 'system', 1699348237468, 'system', 1699348237468, 'user.export.name', '登录账号', 'Account'); -INSERT INTO `sys_i18n` VALUES (349, '0', 'system', 1699348237468, 'system', 1699348237468, 'user.export.nick', '用户昵称', 'Nick Name'); -INSERT INTO `sys_i18n` VALUES (350, '0', 'system', 1699348237468, 'system', 1699348237468, 'user.export.email', '电子邮箱', 'E-Mail'); -INSERT INTO `sys_i18n` VALUES (351, '0', 'system', 1699348237468, 'system', 1699348237468, 'user.export.phone', '手机号码', 'Cell phone number'); -INSERT INTO `sys_i18n` VALUES (352, '0', 'system', 1699348237468, 'system', 1699348237468, 'user.export.sex', '用户性别', 'Gender'); -INSERT INTO `sys_i18n` VALUES (353, '0', 'system', 1699348237468, 'system', 1699348237468, 'user.export.status', '用户状态', 'Status'); -INSERT INTO `sys_i18n` VALUES (354, '0', 'system', 1699348237468, 'system', 1699348237468, 'user.export.deptID', '部门编号', 'Department number'); -INSERT INTO `sys_i18n` VALUES (355, '0', 'system', 1699348237468, 'system', 1699348237468, 'user.export.deptName', '部门名称', 'Department'); -INSERT INTO `sys_i18n` VALUES (356, '0', 'system', 1699348237468, 'system', 1699348237468, 'user.export.deptLeader', '部门负责人', 'Department Head'); -INSERT INTO `sys_i18n` VALUES (357, '0', 'system', 1699348237468, 'system', 1699348237468, 'user.export.loginIP', '用户登录IP', 'Login Address'); -INSERT INTO `sys_i18n` VALUES (358, '0', 'system', 1699348237468, 'system', 1699348237468, 'user.export.loginDate', '用户登录时间', 'Login Time'); -INSERT INTO `sys_i18n` VALUES (359, '0', 'system', 1699348237468, 'system', 1699348237468, 'user.noData', '没有可访问用户数据!', 'No accessible user data!'); -INSERT INTO `sys_i18n` VALUES (360, '0', 'system', 1699348237468, 'system', 1699348237468, 'user.statusEq', '变更状态与旧值相等!', 'The change status is equal to the old value!'); -INSERT INTO `sys_i18n` VALUES (361, '0', 'system', 1699348237468, 'system', 1699348237468, 'user.errPasswdOld', '修改密码失败,旧密码错误', 'Change password failed, old password is wrong'); -INSERT INTO `sys_i18n` VALUES (362, '0', 'system', 1699348237468, 'system', 1699348237468, 'user.errPasswdEqOld', '新密码不能与旧密码相同', 'New password cannot be the same as the old one'); -INSERT INTO `sys_i18n` VALUES (363, '0', 'system', 1699348237468, 'system', 1699348237468, 'user.errPasswd', '登录密码至少包含大小写字母、数字、特殊符号,且不少于6位', 'Login password contains at least upper and lower case letters, numbers, special symbols, and not less than 6 digits.'); -INSERT INTO `sys_i18n` VALUES (364, '0', 'system', 1699348237468, 'system', 1699348237468, 'user.errEmailFormat', '操作用户【{name}】失败,邮箱格式错误', 'Failed to operate user [{name}], mailbox format error'); -INSERT INTO `sys_i18n` VALUES (365, '0', 'system', 1699348237468, 'system', 1699348237468, 'user.errEmailExists', '操作用户【{name}】失败,邮箱已存在', 'Failed to operate user [{name}], mailbox already exists.'); -INSERT INTO `sys_i18n` VALUES (366, '0', 'system', 1699348237468, 'system', 1699348237468, 'user.errPhoneFormat', '操作用户【{name}】失败,手机号码格式错误', 'Failed to operate user [{name}], cell phone number format is wrong.'); -INSERT INTO `sys_i18n` VALUES (367, '0', 'system', 1699348237468, 'system', 1699348237468, 'user.errPhoneExists', '操作用户【{name}】失败,手机号码已存在', 'Failed to operate user [{name}], cell phone number already exists.'); -INSERT INTO `sys_i18n` VALUES (368, '0', 'system', 1699348237468, 'system', 1699348237468, 'user.errNameExists', '操作用户【{name}】失败,登录账号已存在', 'Failed to operate user [{name}], login account already exists.'); -INSERT INTO `sys_i18n` VALUES (369, '0', 'system', 1699348237468, 'system', 1699348237468, 'user.import.mustItem', '表格中必填列表项,{text}', 'Required list item in form, {text}'); -INSERT INTO `sys_i18n` VALUES (370, '0', 'system', 1699348237468, 'system', 1699348237468, 'user.import.phoneExist', '用户编号:{id} 手机号码 {phone} 已存在', 'User ID: {id} cell phone number {phone} Existing'); -INSERT INTO `sys_i18n` VALUES (371, '0', 'system', 1699348237468, 'system', 1699348237468, 'user.import.phoneFormat', '用户编号:{id} 手机号码 {phone} 格式错误', 'User ID: {id} cell phone number {phone} Wrong format'); -INSERT INTO `sys_i18n` VALUES (372, '0', 'system', 1699348237468, 'system', 1699348237468, 'user.import.emailExist', '用户编号:{id} 用户邮箱:{email} 已存在', 'User ID: {id} User Email: {email} Existing'); -INSERT INTO `sys_i18n` VALUES (373, '0', 'system', 1699348237468, 'system', 1699348237468, 'user.import.emailFormat', '用户编号:{id} 用户邮箱:{email} 格式错误', 'User ID: {id} Email: {email} Wrong Format'); -INSERT INTO `sys_i18n` VALUES (374, '0', 'system', 1699348237468, 'system', 1699348237468, 'user.import.success', '用户编号:{id} 登录名称:{name} 导入成功', 'User ID:{id} Login name:{name} Imported successfully!'); -INSERT INTO `sys_i18n` VALUES (375, '0', 'system', 1699348237468, 'system', 1699348237468, 'user.import.fail', '用户编号:{id} 登录名称:{name} 导入失败', 'User ID: {id} Login name: {name} Import failed'); -INSERT INTO `sys_i18n` VALUES (376, '0', 'system', 1699348237468, 'system', 1699348237468, 'user.import.successUpdate', '用户编号:{id} 登录名称:{name} 更新成功', 'User ID: {id} Login name: {name} Update success'); -INSERT INTO `sys_i18n` VALUES (377, '0', 'system', 1699348237468, 'system', 1699348237468, 'user.import.failUpdate', '用户编号:{id} 登录名称:{name} 更新失败', 'User ID: {id} Login Name: {name} Update Failed'); -INSERT INTO `sys_i18n` VALUES (378, '0', 'system', 1699348237468, 'system', 1699348237468, 'user.import.failTip', '很抱歉,导入失败!共 {num} 条数据格式不正确,错误如下:', 'Sorry, the import failed! A total of {num} entries were not formatted correctly, the error is below:'); -INSERT INTO `sys_i18n` VALUES (379, '0', 'system', 1699348237468, 'system', 1699348237468, 'user.import.successTip', '恭喜您,数据已全部导入成功!共 {num} 条,数据如下:', 'Congratulations, the data has been imported successfully! There are {num} entries with the following data:'); -INSERT INTO `sys_i18n` VALUES (380, '0', 'system', 1699348237468, 'system', 1699348237468, 'app.common.err403', '无权访问 {method} {requestURI}', 'Unauthorized access {method} {requestURI}'); -INSERT INTO `sys_i18n` VALUES (381, '0', 'system', 1699348237468, 'system', 1699348237468, 'app.common.err401', '无效身份授权', 'Invalid authorization'); -INSERT INTO `sys_i18n` VALUES (382, '0', 'system', 1699348237468, 'system', 1699348237468, 'app.common.err400', '参数错误', 'Parameter error'); -INSERT INTO `sys_i18n` VALUES (383, '0', 'system', 1699348237468, 'system', 1699348237468, 'app.common.exportEmpty', '导出数据记录为空', 'Export data record is empty'); -INSERT INTO `sys_i18n` VALUES (384, '0', 'system', 1699348237468, 'system', 1699348237468, 'app.common.errOperateAdmin', '不允许操作内置用户', 'Built-in users are not allowed to operate'); -INSERT INTO `sys_i18n` VALUES (385, '0', 'system', 1699348237468, 'system', 1699348237468, 'app.common.errOperateRole', '不允许操作内置角色', 'Built-in roles are not allowed to be operated'); -INSERT INTO `sys_i18n` VALUES (386, '0', 'system', 1699348237468, 'system', 1699348237468, 'app.common.deleteSuccess', '删除成功:{num}', 'Deleted successfully: {num}'); -INSERT INTO `sys_i18n` VALUES (387, '0', 'system', 1699348237468, 'system', 1699348237468, 'app.common.loginSuccess', '登录成功', 'Login Success'); -INSERT INTO `sys_i18n` VALUES (388, '0', 'system', 1699348237468, 'system', 1699348237468, 'app.common.logoutSuccess', '注销成功', 'Logout Successful'); -INSERT INTO `sys_i18n` VALUES (389, '0', 'system', 1699348237468, 'system', 1699348237468, 'app.common.errUnlock', '该用户未被锁定', 'The user is not locked'); -INSERT INTO `sys_i18n` VALUES (390, '0', 'system', 1699348237468, 'system', 1699348237468, 'app.common.noLoginUser', '登录用户信息无效', 'Invalid login user information'); -INSERT INTO `sys_i18n` VALUES (391, '0', 'system', 1699348237468, 'system', 1699348237468, 'app.common.rateLimitTip', '访问过于频繁,请稍候再试', 'Access too often, please try again later'); -INSERT INTO `sys_i18n` VALUES (392, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.operate.export.id', '操作编号', 'Log ID'); -INSERT INTO `sys_i18n` VALUES (393, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.operate.export.title', '模块名称', 'Module Name'); -INSERT INTO `sys_i18n` VALUES (394, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.operate.export.businessType', '业务类型', 'Business Type'); -INSERT INTO `sys_i18n` VALUES (395, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.operate.export.method', '操作方法', 'Operation Method'); -INSERT INTO `sys_i18n` VALUES (396, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.operate.export.requestMethod', '请求方式 ', 'Request Method'); -INSERT INTO `sys_i18n` VALUES (397, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.operate.export.operatorType', '操作类型', 'Operation Type'); -INSERT INTO `sys_i18n` VALUES (398, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.operate.export.operName', '操作人员', 'Operator'); -INSERT INTO `sys_i18n` VALUES (399, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.operate.export.deptName', '操作人员部门名称', 'Operator Department Name'); -INSERT INTO `sys_i18n` VALUES (400, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.operate.export.url', '请求链接地址', 'Request URL'); -INSERT INTO `sys_i18n` VALUES (401, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.operate.export.ip', '请求主机 ', 'Request Host'); -INSERT INTO `sys_i18n` VALUES (402, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.operate.export.location', '请求地址', 'Request Address'); -INSERT INTO `sys_i18n` VALUES (403, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.operate.export.param', '请求参数', 'Request Parameters'); -INSERT INTO `sys_i18n` VALUES (404, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.operate.export.msg', '操作信息', 'Operation Information'); -INSERT INTO `sys_i18n` VALUES (405, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.operate.export.status', '操作状态', 'Status'); -INSERT INTO `sys_i18n` VALUES (406, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.operate.export.costTime', '消耗时间(毫秒)', 'Time Consumption (ms)'); -INSERT INTO `sys_i18n` VALUES (407, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.operate.export.operTime', '操作时间', 'Time'); -INSERT INTO `sys_i18n` VALUES (408, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.login.export.id', '记录编号', 'Log ID'); -INSERT INTO `sys_i18n` VALUES (409, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.login.export.userName', '登录账号', 'Login Account'); -INSERT INTO `sys_i18n` VALUES (410, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.login.export.status', '登录状态', 'Status'); -INSERT INTO `sys_i18n` VALUES (411, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.login.export.ip', '登录地址', 'Login Address'); -INSERT INTO `sys_i18n` VALUES (412, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.login.export.location', '登录地点', 'Login Location'); -INSERT INTO `sys_i18n` VALUES (413, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.login.export.browser', '浏览器', 'Browser'); -INSERT INTO `sys_i18n` VALUES (414, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.login.export.os', '操作系统', 'Operating System'); -INSERT INTO `sys_i18n` VALUES (415, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.login.export.msg', '登录信息', 'Login Information'); -INSERT INTO `sys_i18n` VALUES (416, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.login.export.time', '登录时间', 'Login Time'); -INSERT INTO `sys_i18n` VALUES (417, '0', 'system', 1699348237468, 'system', 1699348237468, 'trace.tcpdump.noData', '找不到 {type} {id} 对应网元信息', 'Can it find {type} {id} information of the corresponding network element.'); -INSERT INTO `sys_i18n` VALUES (418, '0', 'system', 1699348237468, 'system', 1699348237468, '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.'); -INSERT INTO `sys_i18n` VALUES (419, '0', 'system', 1699348237468, 'system', 1699348237468, 'register.errPasswd', '登录密码至少包含大小写字母、数字、特殊符号,且不少于6位', 'The password must contain at least 6 upper and lower case letters, numbers, and special symbols.'); -INSERT INTO `sys_i18n` VALUES (420, '0', 'system', 1699348237468, 'system', 1699348237468, 'register.errPasswdNotEq', '用户确认输入密码不一致', 'User confirms password inconsistency'); -INSERT INTO `sys_i18n` VALUES (421, '0', 'system', 1699348237468, 'system', 1699348237468, 'register.success', '注册成功', 'Successful registration'); -INSERT INTO `sys_i18n` VALUES (422, '0', 'system', 1699348237468, 'system', 1699348237468, 'register.successMsg', '{name} 注册成功 {id}', '{name} Register Successful {id}'); -INSERT INTO `sys_i18n` VALUES (423, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.operate.title.sysJobLog', '调度任务日志', 'Scheduling Task Logs'); -INSERT INTO `sys_i18n` VALUES (424, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.operate.title.sysJob', '调度任务', 'Scheduling Tasks'); -INSERT INTO `sys_i18n` VALUES (425, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.operate.title.tcpdump', '信令抓包', 'Signaling Capture'); -INSERT INTO `sys_i18n` VALUES (426, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.operate.title.sysConfig', '参数配置', 'Parameter Configuration'); -INSERT INTO `sys_i18n` VALUES (427, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.operate.title.sysDept', '部门', 'Sector'); -INSERT INTO `sys_i18n` VALUES (428, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.operate.title.sysDictData', '字典数据', 'Dictionary Data'); -INSERT INTO `sys_i18n` VALUES (429, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.operate.title.sysDictType', '字典类型', 'Dictionary type'); -INSERT INTO `sys_i18n` VALUES (430, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.operate.title.sysMenu', '菜单', 'Menu'); -INSERT INTO `sys_i18n` VALUES (431, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.operate.title.sysPost', '岗位', 'Positions'); -INSERT INTO `sys_i18n` VALUES (432, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.operate.title.sysProfile', '个人信息', 'Personal Information'); -INSERT INTO `sys_i18n` VALUES (433, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.operate.title.sysProfileAvatar', '个人头像', 'Personal avatar'); -INSERT INTO `sys_i18n` VALUES (434, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.operate.title.sysRole', '角色', 'Roles'); -INSERT INTO `sys_i18n` VALUES (435, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.operate.title.sysUser', '用户', 'User'); -INSERT INTO `sys_i18n` VALUES (436, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.operate.title.sysLogOper', '操作日志记录', 'Operation Logging'); -INSERT INTO `sys_i18n` VALUES (437, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.operate.title.sysLogLogin', '登录日志记录', 'Operation Logging'); -INSERT INTO `sys_i18n` VALUES (438, '0', 'system', 1699348237468, 'system', 1699348237468, 'login.errNameOrPasswd', '用户不存在或密码错误', 'User does not exist or password is wrong'); -INSERT INTO `sys_i18n` VALUES (439, '0', 'system', 1699348237468, 'system', 1699348237468, 'login.errDelFlag', '对不起,您的账号已被删除', 'Sorry, your account has been deleted'); -INSERT INTO `sys_i18n` VALUES (440, '0', 'system', 1699348237468, 'system', 1699348237468, 'login.errStatus', '对不起,您的帐户已被禁用', 'Sorry, your account has been disabled'); -INSERT INTO `sys_i18n` VALUES (441, '0', 'system', 1699348237468, 'system', 1699348237468, 'login.errRetryPasswd', '密码输入错误多次,帐户已被锁定', 'Password was entered incorrectly several times, account has been locked'); -INSERT INTO `sys_i18n` VALUES (442, '0', 'system', 1699348237468, 'system', 1699348237468, 'captcha.err', '验证码错误', 'Captcha Error'); -INSERT INTO `sys_i18n` VALUES (443, '0', 'system', 1699348237468, 'system', 1699348237468, 'captcha.errValid', '验证码已失效', 'Captcha is invalid'); -INSERT INTO `sys_i18n` VALUES (444, '0', 'system', 1699348237468, 'system', 1699348237468, 'app.common.noUaOsBrowser', '未知 未知', 'Unknown Unknown'); -INSERT INTO `sys_i18n` VALUES (445, '0', 'system', 1699348237468, 'system', 1699348237468, 'app.common.noIPregion', '内网', 'Intranet'); -INSERT INTO `sys_i18n` VALUES (446, '0', 'system', 1699348237468, 'system', 1699348237468, 'app.common.unknown', '未知', 'Unknown'); -INSERT INTO `sys_i18n` VALUES (447, '0', 'system', 1699348237468, 'system', 1699348237468, 'app.common.noNEInfo', '未找到匹配网元信息', 'No matching network element information found'); -INSERT INTO `sys_i18n` VALUES (448, '0', 'system', 1699348237468, 'system', 1699348237468, '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'); -INSERT INTO `sys_i18n` VALUES (449, '0', 'system', 1699348237468, 'system', 1699348237468, 'ne.udm.errExportType', '导出文件类型支持CSV和txt', 'Export file types support CSV and txt'); -INSERT INTO `sys_i18n` VALUES (450, '0', 'system', 1699348237468, 'system', 1699348237468, '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'); -INSERT INTO `sys_i18n` VALUES (451, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.operate.title.udmAuth', 'UDM鉴权用户', 'UDM Authentication User'); -INSERT INTO `sys_i18n` VALUES (452, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.operate.title.udmSub', 'UDM签约用户', 'UDM Subscribers'); -INSERT INTO `sys_i18n` VALUES (453, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.active_alarm_type', '活动告警类型', 'Event Alarm Types'); -INSERT INTO `sys_i18n` VALUES (454, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.active_alarm_type_remark', '活动告警类型列表', 'List of Active Alarm Types'); -INSERT INTO `sys_i18n` VALUES (455, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.active_alarm_type.communication', '通信告警', 'Communication Alarm'); -INSERT INTO `sys_i18n` VALUES (456, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.active_alarm_type.equipment', '设备告警', 'Equipment Alarm'); -INSERT INTO `sys_i18n` VALUES (457, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.active_alarm_type.processing', '处理错误', 'Processing Failure Alarm'); -INSERT INTO `sys_i18n` VALUES (458, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.active_alarm_type.environmental', '环境告警', 'Environmental Alarm'); -INSERT INTO `sys_i18n` VALUES (459, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.active_alarm_type.qualityOfService', '服务质量', 'Quality of Service Alarm'); -INSERT INTO `sys_i18n` VALUES (460, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.active_clear_type', '告警清除类型', 'Alarm Clearing Types'); -INSERT INTO `sys_i18n` VALUES (461, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.active_clear_type_remark', '告警清除类型列表', 'List of Alarm Clearing Types'); -INSERT INTO `sys_i18n` VALUES (462, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.active_clear_type.notCleared', '告警未清除', 'Not cleared'); -INSERT INTO `sys_i18n` VALUES (463, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.active_clear_type.hand', '手动清除', 'Manually cleared'); -INSERT INTO `sys_i18n` VALUES (464, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.active_clear_type.auto', '自动清除', 'Automatically cleared'); -INSERT INTO `sys_i18n` VALUES (465, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.active_ack_state', '告警确认类型', 'Alarm Acknowledgement Types'); -INSERT INTO `sys_i18n` VALUES (466, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.active_ack_state_remark', '告警确认类型列表', 'Alarm Acknowledgement Type List'); -INSERT INTO `sys_i18n` VALUES (467, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.active_ack_state.unconfirmed', '未确认', 'Not Confirm'); -INSERT INTO `sys_i18n` VALUES (468, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.active_ack_state.confirmed', '已确认', 'Confirm'); -INSERT INTO `sys_i18n` VALUES (469, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.active_alarm_severity', '严重程度', 'Severity'); -INSERT INTO `sys_i18n` VALUES (470, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.active_alarm_severity_remark', '严重程度列表', 'Severity List'); -INSERT INTO `sys_i18n` VALUES (471, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.active_alarm_severity.critical', '严重告警', 'Critical'); -INSERT INTO `sys_i18n` VALUES (472, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.active_alarm_severity.major', '主要告警', 'Major'); -INSERT INTO `sys_i18n` VALUES (473, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.active_alarm_severity.minor', '次要告警', 'Minor'); -INSERT INTO `sys_i18n` VALUES (474, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.active_alarm_severity.warning', '警告告警', 'Warning'); -INSERT INTO `sys_i18n` VALUES (475, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.active_alarm_severity.event', '事件告警', 'Event'); -INSERT INTO `sys_i18n` VALUES (476, '0', 'system', 1699348237468, 'system', 1699348237468, 'config.sys.officialUrl', '系统设置-官网链接', 'System Settings - Official Website Links'); -INSERT INTO `sys_i18n` VALUES (477, '0', 'system', 1699348237468, 'system', 1699348237468, 'config.sys.helpDoc', '系统设置-系统使用文档', 'System Settings-System Documentation'); -INSERT INTO `sys_i18n` VALUES (478, '0', 'system', 1699348237468, 'system', 1699348237468, 'config.sys.officialUrlRemark', '默认无地址用#号', 'Default no address with # sign'); -INSERT INTO `sys_i18n` VALUES (479, '0', 'system', 1699348237468, 'system', 1699348237468, 'config.sys.helpDocRemark', '静态文件目录地址,使用{language}区分语言文件', 'Static file directory address, use {language} to distinguish language files'); -INSERT INTO `sys_i18n` VALUES (480, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.operate.title.neAction', '网元处理', 'Network Element Processing'); -INSERT INTO `sys_i18n` VALUES (481, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.operate.title.helpDoc', '系统使用文档', 'System Usage Documentation'); -INSERT INTO `sys_i18n` VALUES (482, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.ueUser.n3iwf', 'N3IWF在线用户', 'N3IWF Online User'); -INSERT INTO `sys_i18n` VALUES (483, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.ueUser.pcf', '用户策略控制信息', 'User PCC Information'); -INSERT INTO `sys_i18n` VALUES (484, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.system.user.editRole', '修改用户角色', 'Modifying User Role'); -INSERT INTO `sys_i18n` VALUES (485, '0', 'system', 1699348237468, 'system', 1699348237468, 'config.sys.i18nOpen', '国际化切换', 'Internationalization Switching'); -INSERT INTO `sys_i18n` VALUES (486, '0', 'system', 1699348237468, 'system', 1699348237468, 'config.sys.i18nDefault', '国际化默认语言', 'Internationalization Default Language'); -INSERT INTO `sys_i18n` VALUES (487, '0', 'system', 1699348237468, 'system', 1699348237468, 'user.export.role', '用户角色', 'Role'); -INSERT INTO `sys_i18n` VALUES (488, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.system.setting.i18n', '国际化切换', 'Internationalization Switch'); -INSERT INTO `sys_i18n` VALUES (489, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.system.setting.i18nRemark', '国际化多语言的切换选择', 'Internationalized multilingual switching options'); -INSERT INTO `sys_i18n` VALUES (490, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.index_status', '首页状态', 'Home Status'); -INSERT INTO `sys_i18n` VALUES (491, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.index_status_remark', '首页的网元状态颜色', 'Network element status colors on the home page'); -INSERT INTO `sys_i18n` VALUES (492, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.index_status.normal', '正常', 'Normal'); -INSERT INTO `sys_i18n` VALUES (493, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.index_status.abnormal', '异常', 'Abnormal'); -INSERT INTO `sys_i18n` VALUES (494, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.log.neFile', '网元日志文件', 'NE Log File'); -INSERT INTO `sys_i18n` VALUES (495, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.dashboard.overview.smfUeNum', '展示数据会话数', 'Display data session number'); -INSERT INTO `sys_i18n` VALUES (496, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.dashboard.overview.imsUeNum', '展示语音会话数', 'Display the number of voice sessions'); -INSERT INTO `sys_i18n` VALUES (497, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.dashboard.overview.gnbBase', '展示5G基站在线信息', 'Display 5G base station online information'); -INSERT INTO `sys_i18n` VALUES (498, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.dashboard.overview.enbBase', '展示4G基站在线信息', 'Display 4G base station online information'); -INSERT INTO `sys_i18n` VALUES (499, '0', 'system', 1699348237468, 'system', 1699348237468, 'job.ne_alarm_state_check', '网元告警-状态检查', 'NE Health Check'); -INSERT INTO `sys_i18n` VALUES (500, '0', 'system', 1699348237468, 'system', 1699348237468, 'job.ne_alarm_state_check_remark', '检查网元的健康状况,在出现异常时发出警报。\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', 'Checks the health of network elements and sends alerts in case of anomalies.\n\nAlarm type:\nCommunicationAlarm=1\nEquipmentAlarm=2\nProcessingFailure=3\nEnvironmentalAlarm=4\nQualityOfServiceAlarm=5\n\nSeverity:\nCritical=1\nMajor=2\nMinor=3\nWarning=4'); -INSERT INTO `sys_i18n` VALUES (501, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.neUser.nssf', 'NSSF在线订阅数', 'NSSF Subscription Info'); -INSERT INTO `sys_i18n` VALUES (502, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.neUser.nssfAmf', 'NSSF可用的注册AMF', 'NSSF Available AMFs'); -INSERT INTO `sys_i18n` VALUES (503, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.monitor.topology', '拓扑信息', 'Topology Info'); -INSERT INTO `sys_i18n` VALUES (504, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.monitor.topologyBuild', '拓扑图组编辑', 'Topological Graph Build'); -INSERT INTO `sys_i18n` VALUES (505, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.operate.title.chartGraph', '拓扑图组', 'Topological Graph'); -INSERT INTO `sys_i18n` VALUES (506, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.monitor.topologyArchitecture', '网元拓扑组网', 'NE System Topology'); -INSERT INTO `sys_i18n` VALUES (507, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.alarm', '告警', 'Alarm'); -INSERT INTO `sys_i18n` VALUES (508, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.topology', '拓扑', 'Topology'); -INSERT INTO `sys_i18n` VALUES (509, '0', 'system', 1699348237468, 'system', 1699348237468, 'config.sys.lockTime', '系统设置-锁屏超时时长', 'System Settings - Screen Lock Timeout Duration'); -INSERT INTO `sys_i18n` VALUES (510, '0', 'system', 1699348237468, 'system', 1699348237468, 'config.sys.lockTimeRemark', '无操作时锁屏超时时长,单位(秒)。0表示无锁屏超时', 'Timeout of lock screen when no operation, unit (sec), 0 means no timeout of lock screen'); -INSERT INTO `sys_i18n` VALUES (511, '0', 'system', 1699348237468, 'system', 1699348237468, 'sys.account.captchaType', '账号自助-验证码类型', 'Account Self Service - Captcha Type'); -INSERT INTO `sys_i18n` VALUES (512, '0', 'system', 1699348237468, 'system', 1699348237468, 'sys.account.captchaTypeRemark', '使用验证码类型(math数值计算,char字符验证)', 'Using CAPTCHA types (math numeric calculation, char character validation)'); -INSERT INTO `sys_i18n` VALUES (513, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.dashboard', '仪表盘', 'Dashboard'); -INSERT INTO `sys_i18n` VALUES (514, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.dashboard.overview', '总览', 'Overview'); -INSERT INTO `sys_i18n` VALUES (515, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.dashboard.imsCDR', '语音话单', 'Voice CDR'); -INSERT INTO `sys_i18n` VALUES (516, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.cdr_sip_code', 'IMS-Voice-SIP响应代码类别类型', 'IMS-Voice-SIP Response Code Category Type'); -INSERT INTO `sys_i18n` VALUES (517, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.cdr_call_type', 'IMS-呼叫类型', 'IMS-Call Type'); -INSERT INTO `sys_i18n` VALUES (518, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.ue_auth_code', 'UE 事件认证代码类型', 'UE Event Authentication Code Type'); -INSERT INTO `sys_i18n` VALUES (519, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.ue_event_type', 'UE 事件类型', 'UE Event Type'); -INSERT INTO `sys_i18n` VALUES (520, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code.200', '200 正常通话', '200 OK'); -INSERT INTO `sys_i18n` VALUES (521, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code.403', '403 禁止访问', '403 Forbidden'); -INSERT INTO `sys_i18n` VALUES (522, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code.408', '408 请求超时', '408 Request Timeout'); -INSERT INTO `sys_i18n` VALUES (523, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code.500', '500 内部服务器错误', '500 Internal Server Error'); -INSERT INTO `sys_i18n` VALUES (524, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_call_type.audio', '语音', 'Voice'); -INSERT INTO `sys_i18n` VALUES (525, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_call_type.video', '视频', 'Video'); -INSERT INTO `sys_i18n` VALUES (526, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.ue_auth_code.200', '成功', 'Success'); -INSERT INTO `sys_i18n` VALUES (527, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.ue_auth_code.001', '网络失败', 'Network Failure'); -INSERT INTO `sys_i18n` VALUES (528, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.ue_auth_code.002', '接口失败', 'Interface Failure'); -INSERT INTO `sys_i18n` VALUES (529, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.ue_auth_code.003', 'MAC失败', 'MAC Failure'); -INSERT INTO `sys_i18n` VALUES (530, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.ue_auth_code.004', '同步失败', 'Synchronization failure'); -INSERT INTO `sys_i18n` VALUES (531, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.ue_auth_code.005', '不接受非5G认证', 'Non-5G Authentication Not Accepted'); -INSERT INTO `sys_i18n` VALUES (532, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.ue_auth_code.006', '响应失败', 'Response Failure'); -INSERT INTO `sys_i18n` VALUES (533, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.ue_auth_code.007', '未知', 'Unknown'); -INSERT INTO `sys_i18n` VALUES (534, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.ue_event_type.auth', '认证', 'Authentication'); -INSERT INTO `sys_i18n` VALUES (535, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.ue_event_type.detach', '注销', 'Detach'); -INSERT INTO `sys_i18n` VALUES (536, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.ue_event_type.state', 'CM状态', 'CM Status'); -INSERT INTO `sys_i18n` VALUES (537, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.ue_event_cm_state', 'UE 事件CM状态', 'UE Event CM Status'); -INSERT INTO `sys_i18n` VALUES (538, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.ue_event_cm_state.connected', '连接', 'Connected'); -INSERT INTO `sys_i18n` VALUES (539, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.ue_event_cm_state.idle', '空闲', 'Idle'); -INSERT INTO `sys_i18n` VALUES (540, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.ue_event_cm_state.inactive', '不活动', 'Inactive'); -INSERT INTO `sys_i18n` VALUES (541, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code.404', '404 找不到', '404 Not Found'); -INSERT INTO `sys_i18n` VALUES (542, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code.487', '487 请求已终止', '487 Request Terminated'); -INSERT INTO `sys_i18n` VALUES (543, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code.503', '503 服务不可用', '503 Service Unavailable'); -INSERT INTO `sys_i18n` VALUES (544, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code.504', '504 服务器超时', '504 Server Timeout'); -INSERT INTO `sys_i18n` VALUES (545, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code.603', '603 下降', '603 Decline'); -INSERT INTO `sys_i18n` VALUES (546, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code.606', '606 不可接受', '606 Not Acceptable'); -INSERT INTO `sys_i18n` VALUES (547, '0', 'system', 1699348237468, 'system', 1699348237468, 'cache.name.user', '登录用户', 'Login User'); -INSERT INTO `sys_i18n` VALUES (548, '0', 'system', 1699348237468, 'system', 1699348237468, 'cache.name.sys_config', '参数管理', 'Parameters Management'); -INSERT INTO `sys_i18n` VALUES (549, '0', 'system', 1699348237468, 'system', 1699348237468, 'cache.name.sys_dict', '字典管理', 'Dictionary Management'); -INSERT INTO `sys_i18n` VALUES (550, '0', 'system', 1699348237468, 'system', 1699348237468, 'cache.name.captcha_codes', '验证码', 'Captcha'); -INSERT INTO `sys_i18n` VALUES (551, '0', 'system', 1699348237468, 'system', 1699348237468, 'cache.name.repeat_submit', '防重提交', 'Resubmit'); -INSERT INTO `sys_i18n` VALUES (552, '0', 'system', 1699348237468, 'system', 1699348237468, 'cache.name.rate_limit', '限流', 'Limit Traffic'); -INSERT INTO `sys_i18n` VALUES (553, '0', 'system', 1699348237468, 'system', 1699348237468, 'cache.name.pwd_err_cnt', '登录账户密码错误次数', 'Number of Password Errors'); -INSERT INTO `sys_i18n` VALUES (554, '0', 'system', 1699348237468, 'system', 1699348237468, 'cache.name.ne_info', '网元信息管理', 'NE Info Management'); -INSERT INTO `sys_i18n` VALUES (555, '0', 'system', 1699348237468, 'system', 1699348237468, 'cache.name.ne_data', '网元数据管理', 'NE Data Management'); -INSERT INTO `sys_i18n` VALUES (556, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_call_type.sms', '短信', 'SMS'); -INSERT INTO `sys_i18n` VALUES (557, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code.202', '202 已接受', '202 Accepted'); -INSERT INTO `sys_i18n` VALUES (558, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code.488', '488 这里不接受', '488 Not Acceptable Here'); -INSERT INTO `sys_i18n` VALUES (559, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code.0', '0 原因不明', '0 Unknown Reason'); -INSERT INTO `sys_i18n` VALUES (560, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.operate.title.ws', 'WS会话', 'WS Sessions'); -INSERT INTO `sys_i18n` VALUES (561, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.operate.title.neHost', '网元主机', 'NE Host'); -INSERT INTO `sys_i18n` VALUES (562, '0', 'system', 1699348237468, 'system', 1699348237468, 'neHost.noData', '没有可访问主机信息数据!', 'There is no accessible host information data!'); -INSERT INTO `sys_i18n` VALUES (563, '0', 'system', 1699348237468, 'system', 1699348237468, 'neHost.errKeyExists', '主机信息操作【{name}】失败,同组内名称已存在', 'Host information operation [{name}] failed, name already exists in the same group'); -INSERT INTO `sys_i18n` VALUES (564, '0', 'system', 1699348237468, 'system', 1699348237468, 'neHost.errByHostInfo', '连接失败,请检查连接参数后重试', 'Connection Failed, Please check connection parameters and retry'); -INSERT INTO `sys_i18n` VALUES (565, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.ne_host_type', '网元主机连接类型', 'Network element host connection type'); -INSERT INTO `sys_i18n` VALUES (566, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.ne_host_groupId', '网元主机分组', 'Network element host grouping'); -INSERT INTO `sys_i18n` VALUES (567, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.ne_host_authMode', '网元主机认证模式', 'Network element host authentication mode'); -INSERT INTO `sys_i18n` VALUES (568, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.ne_host_type.ssh', 'SSH', 'SSH'); -INSERT INTO `sys_i18n` VALUES (569, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.ne_host_type.telnet', 'Telnet', 'Telnet'); -INSERT INTO `sys_i18n` VALUES (570, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.ne_host_groupId.0', '其他', 'Other'); -INSERT INTO `sys_i18n` VALUES (571, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.ne_host_groupId.1', '网元', 'Network Elements'); -INSERT INTO `sys_i18n` VALUES (572, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.ne_host_groupId.2', '系统', 'System'); -INSERT INTO `sys_i18n` VALUES (573, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.ne_host_authMode.0', '密码认证', 'Password Authentication'); -INSERT INTO `sys_i18n` VALUES (574, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.ne_host_authMode.1', '私钥认证', 'Private key authentication'); -INSERT INTO `sys_i18n` VALUES (575, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.tools.terminal', '主机终端', 'Host Terminal'); -INSERT INTO `sys_i18n` VALUES (576, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.ne.neHost', '网元主机', 'NE Host'); -INSERT INTO `sys_i18n` VALUES (577, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.ne.neHostCommand', '网元主机命令', 'NE Host CMD'); -INSERT INTO `sys_i18n` VALUES (578, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.operate.title.neHostCmd', '网元主机命令', 'NE Host CMD'); -INSERT INTO `sys_i18n` VALUES (579, '0', 'system', 1699348237468, 'system', 1699348237468, 'neHostCmd.noData', '没有可访问主机命令数据!', 'No accessible host command data!'); -INSERT INTO `sys_i18n` VALUES (580, '0', 'system', 1699348237468, 'system', 1699348237468, 'neHostCmd.errKeyExists', '主机命令操作【{name}】失败,同组内名称已存在', 'Host command operation [{name}] failed, name already exists in the same group'); -INSERT INTO `sys_i18n` VALUES (581, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.ne_host_cmd_groupId', '网元主机命令分组', 'Network element host command grouping'); -INSERT INTO `sys_i18n` VALUES (582, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.ne_host_cmd_groupId.0', '默认', 'Default'); -INSERT INTO `sys_i18n` VALUES (583, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.ne_host_cmd_groupId.1', '快速命令', 'Quick Commands'); -INSERT INTO `sys_i18n` VALUES (584, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.ne.neInfo', '网元信息', 'NE Information'); -INSERT INTO `sys_i18n` VALUES (585, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.operate.title.neInfo', '网元信息', 'NE Information'); -INSERT INTO `sys_i18n` VALUES (586, '0', 'system', 1699348237468, 'system', 1699348237468, 'neInfo.noData', '没有可访问网元信息数据!', 'There is no accessible network element information data!'); -INSERT INTO `sys_i18n` VALUES (587, '0', 'system', 1699348237468, 'system', 1699348237468, 'neInfo.errKeyExists', '网元信息操作【{key}】失败,同类型下标识已存在', 'NE info operation [{key}] failed, identifier already exists under the same type'); -INSERT INTO `sys_i18n` VALUES (588, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.operate.title.imsCDR', '通话话单', 'Voice CDR'); -INSERT INTO `sys_i18n` VALUES (589, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.dashboard.amfUE', '5G 终端事件', '5G UE Events'); -INSERT INTO `sys_i18n` VALUES (590, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.operate.title.amfUE', '5G 终端事件', '5G UE Events'); -INSERT INTO `sys_i18n` VALUES (591, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.ne_info_status.0', '离线', 'Offline'); -INSERT INTO `sys_i18n` VALUES (592, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.ne_info_status.1', '在线', 'Active'); -INSERT INTO `sys_i18n` VALUES (593, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.ne_info_status.2', '等待同步', 'Wait Sync'); -INSERT INTO `sys_i18n` VALUES (594, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.ne_info_status.3', '待机', 'Standby'); -INSERT INTO `sys_i18n` VALUES (595, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.ne_info_status', '网元信息状态', 'NE Info State'); -INSERT INTO `sys_i18n` VALUES (596, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.ne.neQuickSetup', '网元快速安装', 'NE Quick Setup'); -INSERT INTO `sys_i18n` VALUES (597, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.operate.title.neConfig', '网元参数配置', 'NE Parameter Configuration'); -INSERT INTO `sys_i18n` VALUES (598, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.ne.neLicense', '网元许可', 'NE License'); -INSERT INTO `sys_i18n` VALUES (599, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.operate.title.neLicense', '网元许可', 'NE License'); -INSERT INTO `sys_i18n` VALUES (600, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.ne.neSoftware', '网元软件包', 'NE Software'); -INSERT INTO `sys_i18n` VALUES (601, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.operate.title.neSoftware', '网元软件包', 'NE Software'); -INSERT INTO `sys_i18n` VALUES (602, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.operate.title.neVersion', '网元版本', 'NE Version'); -INSERT INTO `sys_i18n` VALUES (603, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.ne.neVersion', '网元版本', 'NE Version'); -INSERT INTO `sys_i18n` VALUES (604, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.ne_license_status', '网元许可状态', 'NE License Status'); -INSERT INTO `sys_i18n` VALUES (605, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.ne_license_status.0', '无效', 'Invalid'); -INSERT INTO `sys_i18n` VALUES (606, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.ne_license_status.1', '有效', 'Valid'); -INSERT INTO `sys_i18n` VALUES (607, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.dashboard.mocn', 'MOCN', 'MOCN'); -INSERT INTO `sys_i18n` VALUES (608, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.monitor.cdr', '话单', 'CDR'); -INSERT INTO `sys_i18n` VALUES (609, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.monitor.event', '事件', 'Events'); -INSERT INTO `sys_i18n` VALUES (610, '0', 'system', 1699348237468, 'system', 1699348237468, 'post.export.time', '创建时间', 'Creation Time'); -INSERT INTO `sys_i18n` VALUES (611, '0', 'system', 1699348237468, 'system', 1699348237468, 'role.export.time', '创建时间', 'Creation Time'); -INSERT INTO `sys_i18n` VALUES (612, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.ne_host_authMode.2', '免密认证', 'Confidentiality Auth Mode'); -INSERT INTO `sys_i18n` VALUES (613, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.ne.neConfig', '网元配置', 'NE Config'); -INSERT INTO `sys_i18n` VALUES (614, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.ne_version_status.0', '无', 'Nothing'); -INSERT INTO `sys_i18n` VALUES (615, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.ne_version_status.1', '已是最新', 'Updated'); -INSERT INTO `sys_i18n` VALUES (616, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.ne_version_status.2', '上一版本', 'Previous'); -INSERT INTO `sys_i18n` VALUES (617, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.ne_version_status.3', '有新版本', 'Has New'); -INSERT INTO `sys_i18n` VALUES (618, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.fault.event', '事件通知', 'Event Notification'); -INSERT INTO `sys_i18n` VALUES (619, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.dashboard.smfCDR', '数据话单', 'Data CDR'); -INSERT INTO `sys_i18n` VALUES (620, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.operate.title.smfCDR', '数据话单', 'Data CDR'); -INSERT INTO `sys_i18n` VALUES (621, '0', 'system', 1699348237468, 'system', 1699348237468, 'config.sys.i18nDefaultRemark', '国际化默认语言可选择 en_US、zh_CN', 'Internationalization default language selectable en_US、zh_CN'); -INSERT INTO `sys_i18n` VALUES (622, '0', 'system', 1699348237468, 'system', 1699348237468, 'config.sys.i18nOpenRemark', '是否显示切换的控件 true/false', 'Whether to display switched controls true/false'); -INSERT INTO `sys_i18n` VALUES (623, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.dashboard.mmeUE', '4G 终端事件', '4G UE Events'); -INSERT INTO `sys_i18n` VALUES (624, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.operate.title.mmeUE', '4G 终端事件', '4G UE Events'); -INSERT INTO `sys_i18n` VALUES (625, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.system.user.editPost', '修改用户岗位', 'Modify User Post'); -INSERT INTO `sys_i18n` VALUES (626, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.dashboard.smscCDR', '短信话单', 'SMS CDR'); -INSERT INTO `sys_i18n` VALUES (627, '0', 'system', 1699348237468, 'system', 1699348237468, 'log.operate.title.smscCDR', '短信话单', 'SMS CDR'); -INSERT INTO `sys_i18n` VALUES (628, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.trace.pcapFile', '信令抓包文件', 'Signaling Capture File'); -INSERT INTO `sys_i18n` VALUES (629, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.trace.taskAnalyze', '跟踪数据分析', 'Tracking Data Analysis'); -INSERT INTO `sys_i18n` VALUES (630, '0', 'system', 1699348237468, 'system', 1699348237468, 'job.ne_data_udm', '网元数据-UDM数据刷新同步', 'NE Data Sync UDM'); -INSERT INTO `sys_i18n` VALUES (631, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.system.setting.doc', '系统使用文档', 'System User Documentation'); -INSERT INTO `sys_i18n` VALUES (632, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.system.setting.official', '官网链接', 'Official Website'); -INSERT INTO `sys_i18n` VALUES (633, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.system.setting.lock', '锁屏操作', 'Lockscreen Operation'); -INSERT INTO `sys_i18n` VALUES (634, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.ne.neConfigBackup', '网元配置备份', 'NE Config Backups'); -INSERT INTO `sys_i18n` VALUES (635, '0', 'system', 1699348237468, 'system', 1699348237468, 'job.ne_config_backup', '网元-配置文件定期备份', 'NE-Config Backup Regularly'); -INSERT INTO `sys_i18n` VALUES (636, '0', 'system', 1699348237468, 'system', 1699348237468, 'job.ne_config_backup_remark', '网元配置文件定期备份到网管服务器\n可查看网元配置备份记录进行下载或通过网元信息操作导入配置', 'Network Element Configuration files are regularly backed up to the OMC\nView network element configuration backup records for downloading or importing configurations through network element information operations.'); -INSERT INTO `sys_i18n` VALUES (637, '0', 'system', 1699348237468, 'system', 1699348237468, 'job.exportOperateLog', '定期从操作日志表导出文件到指定目录', 'Export regularly from operation log table'); -INSERT INTO `sys_i18n` VALUES (638, '0', 'system', 1699348237468, 'system', 1699348237468, 'job.exportIMSCDR', '定期从语音话单表导出文件至指定目录', 'Export regularly from IMS CDR table'); -INSERT INTO `sys_i18n` VALUES (639, '0', 'system', 1699348237468, 'system', 1699348237468, 'job.exportSMFCDR', '定期从数据话单表导出文件至指定目录', 'Export regularly from SMF CDR table'); -INSERT INTO `sys_i18n` VALUES (640, '0', 'system', 1699348237468, 'system', 1699348237468, 'table.sys_log_operate', '操作日志', 'Operation Log'); -INSERT INTO `sys_i18n` VALUES (641, '0', 'system', 1699348237468, 'system', 1699348237468, 'table.cdr_event_ims', '语音话单', 'Voice CDR'); -INSERT INTO `sys_i18n` VALUES (642, '0', 'system', 1699348237468, 'system', 1699348237468, 'table.cdr_event_smf', '数据话单', 'Data CDR'); -INSERT INTO `sys_i18n` VALUES (643, '0', 'system', 1699348237468, 'system', 1699348237468, 'table.cdr_event_smsc', '短信话单', 'SMS CDR'); -INSERT INTO `sys_i18n` VALUES (644, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.log.exportFile', '导出文件', 'Exported File'); -INSERT INTO `sys_i18n` VALUES (645, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.perf.kpiCReport', '自定义指标数据', 'Custom Indicator Data'); -INSERT INTO `sys_i18n` VALUES (646, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.trace.taskHLR', 'HLR 跟踪任务', 'HLR Trace Task'); -INSERT INTO `sys_i18n` VALUES (647, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.cdr_cause_code', 'CDR 响应原因代码类别类型', 'CDR Response Reason Code Category Type'); -INSERT INTO `sys_i18n` VALUES (648, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_cause_code.0', '未知错误', 'Unknown Error'); -INSERT INTO `sys_i18n` VALUES (649, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_cause_code.8', '运营者确定的禁止', 'Operator determined barring'); -INSERT INTO `sys_i18n` VALUES (650, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_cause_code.10', '禁止呼叫', 'Call Barred'); -INSERT INTO `sys_i18n` VALUES (651, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_cause_code.21', '呼叫被拒', 'Call rejected'); -INSERT INTO `sys_i18n` VALUES (652, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_cause_code.22', '数量已更改', 'Number changed'); -INSERT INTO `sys_i18n` VALUES (653, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_cause_code.27', '目的地出错', 'Destination out of order'); -INSERT INTO `sys_i18n` VALUES (654, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_cause_code.28', '数字格式无效(数字不完整)', 'Invalid number format (incomplete number)'); -INSERT INTO `sys_i18n` VALUES (655, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_cause_code.29', '设施被拒', 'Facility rejected'); -INSERT INTO `sys_i18n` VALUES (656, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_cause_code.30', '回复状态查询', 'Response to STATUS ENQUIRY'); -INSERT INTO `sys_i18n` VALUES (657, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_cause_code.38', '网络故障', 'Network out of order'); -INSERT INTO `sys_i18n` VALUES (658, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_cause_code.41', '临时故障', 'Temporary failure'); -INSERT INTO `sys_i18n` VALUES (659, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_cause_code.42', '交换设备拥塞', 'Switching equipment congestion'); -INSERT INTO `sys_i18n` VALUES (660, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_cause_code.47', '资源不可用', 'Resource unavailable, unspecified'); -INSERT INTO `sys_i18n` VALUES (661, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_cause_code.50', '请求的设施未订阅', 'Requested facility not subscribed'); -INSERT INTO `sys_i18n` VALUES (662, '0', 'system', 1699348237468, 'system', 1699348237468, 'job.exportSMSCCDR', '定期从短信话单表导出文件至指定目录', 'Export regularly from SMSC CDR table'); -INSERT INTO `sys_i18n` VALUES (663, '0', 'system', 1699348237468, 'system', 1699348237468, 'job.removeExportedFiles', '定期删除指定目录过期文件', 'Regularly delete expired files in the specified directory'); -INSERT INTO `sys_i18n` VALUES (664, '0', 'system', 1699348237468, 'system', 1699348237468, 'config.sys.homePage', '自定义主页', 'Custom Home Page'); -INSERT INTO `sys_i18n` VALUES (665, '0', 'system', 1699348237468, 'system', 1699348237468, 'config.sys.homePageRemark', '选择列表中的任一页面作为主页路径', 'Select any page in the list as the homepage'); -INSERT INTO `sys_i18n` VALUES (666, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.ne.neOverview', '网元概览', 'NE Overview'); -INSERT INTO `sys_i18n` VALUES (667, '0', 'system', 1699348237468, 'system', 1699348237468, 'menu.ne.neOverviewRemark', '显示所有网元状态配置和license等概览信息', 'Displays overview information such as status, configuration and license of all network elements'); -INSERT INTO `sys_i18n` VALUES (668, '0', 'system', 1699348237468, 'system', 1699348237468, 'job.exportSGWCCDR', '定期从漫游数据话单表导出文件至指定目录', 'Export regularly from Roaming Data CDR table'); -INSERT INTO `sys_i18n` VALUES (669, '0', 'system', 1699348237468, 'system', 1699348237468, 'cache.name.i18n', '国际化语言管理', 'Internationalized Language Management'); -INSERT INTO `sys_i18n` VALUES (670, '0', 'system', 1699348237468, 'system', 1699348237468, 'config.ne.neConfigBackupFTP', '配置文件备份FTP服务', 'NE Config Backup file FTP service'); -INSERT INTO `sys_i18n` VALUES (671, '0', 'system', 1699348237468, 'system', 1699348237468, 'config.ne.neConfigBackupFTPRemark', '请通过配置文件备份页面进行设置FTP信息', 'Please set the FTP information through the configuration file backup page.'); -INSERT INTO `sys_i18n` VALUES (672, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code.302', '302 原因不明', '302 Unknown Reason'); -INSERT INTO `sys_i18n` VALUES (673, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code.402', '402 原因不明', '402 Unknown Reason'); -INSERT INTO `sys_i18n` VALUES (674, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code.480', '480 被叫挂断/拒接', '480 Temporarily Unavailable'); -INSERT INTO `sys_i18n` VALUES (675, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code.481', '481 原因不明', '481 Unknown Reason'); -INSERT INTO `sys_i18n` VALUES (676, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code.482', '482 发现环路', '482 Loop Detected'); -INSERT INTO `sys_i18n` VALUES (677, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code.486', '486 这里很忙', '486 Busy Here'); -INSERT INTO `sys_i18n` VALUES (678, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code.489', '489 原因不明', '489 Unknown Reason'); -INSERT INTO `sys_i18n` VALUES (679, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code.580', '580 原因不明', '580 Unknown Reason'); -INSERT INTO `sys_i18n` VALUES (700, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code_cause.0', '因其他原因呼叫失败', 'Call failure for other reason'); -INSERT INTO `sys_i18n` VALUES (701, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code_cause.200', '正常通话清除', 'Normal Call Clearing'); -INSERT INTO `sys_i18n` VALUES (702, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code_cause.202', '申请已被接受处理,但尚未完成 ', 'The request has been accepted for processing, but it hasn it completed yet'); -INSERT INTO `sys_i18n` VALUES (703, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code_cause.302', '因其他原因呼叫失败', 'Call failure for other reason'); -INSERT INTO `sys_i18n` VALUES (704, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code_cause.402', '因其他原因呼叫失败', 'Call failure for other reason'); -INSERT INTO `sys_i18n` VALUES (705, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code_cause.403', '拒绝 MO 用户', 'MO User Rejected'); -INSERT INTO `sys_i18n` VALUES (706, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code_cause.404', 'MT 用户离线', 'MT User Offline'); -INSERT INTO `sys_i18n` VALUES (707, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code_cause.480', '因其他原因呼叫失败', 'Call failure for other reason'); -INSERT INTO `sys_i18n` VALUES (708, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code_cause.481', '电话无法拨出', 'Call cannot be dialed'); -INSERT INTO `sys_i18n` VALUES (709, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code_cause.482', '闪断', 'Flashback'); -INSERT INTO `sys_i18n` VALUES (710, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code_cause.486', 'MT 用户忙', 'MT User Busy'); -INSERT INTO `sys_i18n` VALUES (711, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code_cause.487', 'MO 用户断线', 'MO User Disconnected'); -INSERT INTO `sys_i18n` VALUES (712, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code_cause.408', '服务器等待响应的时间过长', 'The server waits too long for a response'); -INSERT INTO `sys_i18n` VALUES (713, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code_cause.488', '媒体详细信息与服务器支持的内容不匹配', 'Media details didn’t match what the server supports'); -INSERT INTO `sys_i18n` VALUES (714, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code_cause.489', '因其他原因呼叫失败', 'Call failure for other reason'); -INSERT INTO `sys_i18n` VALUES (715, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code_cause.500', '服务器本身出了问题', 'Something went wrong inside the server itself'); -INSERT INTO `sys_i18n` VALUES (716, '0', 'system', 1699348237468, 'system', 1699348237468, '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 (717, '0', 'system', 1699348237468, 'system', 1699348237468, '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 (718, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code_cause.580', '因其他原因呼叫失败', 'Call failure for other reason'); -INSERT INTO `sys_i18n` VALUES (719, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code_cause.603', 'MT 明确拒绝通话', 'MT explicitly rejected the call'); -INSERT INTO `sys_i18n` VALUES (720, '0', 'system', 1699348237468, 'system', 1699348237468, '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 (721, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.cdr_sip_code_cause', 'IMS-Voice-SIP响应代码类别类型原因', 'IMS-Voice-SIP Response Code Category Type Cause'); - --- Dump completed on 2025-02-14 15:26:56 diff --git a/database/install/sys_job.sql b/database/install/sys_job.sql deleted file mode 100644 index efd60b56..00000000 --- a/database/install/sys_job.sql +++ /dev/null @@ -1,48 +0,0 @@ -SET NAMES utf8mb4; -SET FOREIGN_KEY_CHECKS = 0; - --- ---------------------------- --- Table structure for sys_job --- ---------------------------- -DROP TABLE IF EXISTS `sys_job`; -CREATE TABLE `sys_job` ( - `job_id` bigint NOT NULL AUTO_INCREMENT COMMENT '任务ID', - `job_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '任务名称', - `job_group` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'DEFAULT' COMMENT '任务组名', - `invoke_target` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '调用目标字符串', - `target_params` varchar(2048) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '调用目标传入参数', - `cron_expression` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT 'cron执行表达式', - `misfire_policy` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '3' COMMENT '计划执行错误策略(1立即执行 2执行一次 3放弃执行)', - `concurrent` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '是否并发执行(0禁止 1允许)', - `status_flag` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '任务状态(0暂停 1正常)', - `save_log` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '是否记录任务日志(0不记录 1记录)', - `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 (`job_id`) USING BTREE, - UNIQUE INDEX `uk_name_group`(`job_name` ASC, `job_group` ASC) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 50 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '系统_调度任务调度表' ROW_FORMAT = Dynamic; - --- ---------------------------- --- Records of sys_job --- ---------------------------- -INSERT 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'); -INSERT INTO `sys_job` VALUES (2, 'job.ne_config_backup', 'SYSTEM', 'ne_config_backup', '', '0 30 0 * * ?', '3', '0', '1', '1', 'system', 1698478134839, 'system', 1698478134839, 'job.ne_config_backup_remark'); -INSERT 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, ''); -INSERT INTO `sys_job` VALUES (4, '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 (5, '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 (6, '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 (7, 'job.delete_ne_config_backup', 'SYSTEM', 'delete_ne_config_backup', '{\"storeDays\":7}', '0 20 0 * * ?', '3', '0', '1', '1', 'system', 1698478134839, 'system', 1698478134839, 'job.delete_ne_config_backup_remark'); - -INSERT INTO `sys_job` VALUES (21, 'job.exportOperateLog', 'SYSTEM', 'exportTable', '{\"hour\":1,\"columns\":[\"id\",\"title\",\"business_type\",\"opera_by\",\"opera_url_method\",\"opera_url\",\"opera_ip\",\"status\",\"opera_time\",\"cost_time\"],\"tableName\":\"sys_log_operate\",\"filePath\":\"/usr/local/omc/backup/operate_log\"}', '0 0 0/1 * * ?', '3', '0', '1', '1', 'system', 1698478134839, 'system', 1698478134839, ''); -INSERT INTO `sys_job` VALUES (22, 'job.exportIMSCDR', 'SYSTEM', 'exportTable', '{\"hour\":1,\"columns\":[\"id\",\"record_type\",\"call_type\",\"caller_party\",\"called_party\",\"call_duration\",\"cause\",\"seizure_time\",\"release_time\"],\"tableName\":\"cdr_event_ims\",\"filePath\":\"/usr/local/omc/backup/ims_cdr\"}', '0 0 0/1 * * ?', '3', '0', '1', '1', 'system', 1698478134839, 'system', 1698478134839, ''); -INSERT INTO `sys_job` VALUES (23, 'job.exportSMFCDR', 'SYSTEM', 'exportTable', '{\"hour\":1,\"columns\":[\"id\",\"charging_id\",\"subscription_id_data\",\"subscription_id_type\",\"data_volume_uplink\",\"data_volume_downlink\",\"data_total_volume\",\"invocation_timestamp\",\"user_identifier\",\"ssc_mode\",\"dnn_id\",\"pdu_type\",\"rat_type\",\"pdu_ipv4\",\"pdu_ipv6\",\"network_function_ipv4_address\",\"record_nfId\",\"record_type\",\"record_opening_time\"],\"tableName\":\"cdr_event_smf\",\"filePath\":\"/usr/local/omc/backup/smf_cdr\"}', '0 0 0/1 * * ?', '3', '0', '1', '1', 'system', 1698478134839, 'system', 1698478134839, ''); -INSERT INTO `sys_job` VALUES (24, 'job.exportSMSCCDR', 'SYSTEM', 'exportTable', '{\"hour\":1,\"columns\":[\"id\",\"record_type\",\"service_type\",\"caller_party\",\"called_party\",\"result\",\"update_time\"],\"tableName\":\"cdr_event_smsc\",\"filePath\":\"/usr/local/omc/backup/smsc_cdr\"}', '0 0 0/1 * * ?', '3', '0', '1', '1', 'system', 1698478134839, 'system', 1698478134839, ''); --- INSERT INTO `sys_job` VALUES (25, 'job.exportSGWCCDR', 'SYSTEM', 'exportTable', '{\"hour\":1,\"columns\":[\"charging_id\",\"served_imsi\",\"served_msisdn\",\"data_volume_gprs_uplink\",\"data_volume_gprs_downlink\",\"duration\",\"invocation_timestamp\",\"pgw_address_used\",\"sgw_address\",\"rat_type\",\"pdp_pdn_type\",\"served_pdppdn_address\",\"serving_node_address\",\"serving_node_type\",\"access_point_name_ni\",\"cause_for_rec_closing\",\"record_sequence_number\",\"local_record_sequence_number\",\"record_type\",\"record_opening_time\"],\"tableName\":\"cdr_event_sgwc\",\"filePath\":\"/usr/local/omc/backup/sgwc_cdr\"}', '0 0 0/1 * * ?', '3', '0', '1', '1', 'system', 1698478134839, 'system', 1698478134839, ''); -INSERT INTO `sys_job` VALUES (26, 'job.removeExportedFiles', 'SYSTEM', 'removeFile', '[{\"filePath\":\"/usr/local/omc/backup/operate_log\",\"maxDays\":30},{\"filePath\":\"/usr/local/omc/backup/ims_cdr\",\"maxDays\":30},{\"filePath\":\"/usr/local/omc/backup/smf_cdr\",\"maxDays\":30},{\"filePath\":\"/usr/local/omc/backup/smsc_cdr\",\"maxDays\":30},{\"filePath\":\"/usr/local/omc/backup/sgwc_cdr\",\"maxDays\":30}]', '0 10 0 * * ?', '3', '0', '1', '1', 'system', 1698478134839, 'system', 1698478134839, ''); - -SET FOREIGN_KEY_CHECKS = 1; - --- Dump completed on 2025-02-14 15:26:56 diff --git a/database/install/sys_role_menu.sql b/database/install/sys_role_menu.sql deleted file mode 100644 index 14fe515e..00000000 --- a/database/install/sys_role_menu.sql +++ /dev/null @@ -1,150 +0,0 @@ -SET NAMES utf8mb4; -SET FOREIGN_KEY_CHECKS = 0; - --- ---------------------------- --- Table structure for sys_role_menu --- ---------------------------- -DROP TABLE IF EXISTS `sys_role_menu`; -CREATE TABLE `sys_role_menu` ( - `role_id` bigint(20) NOT NULL COMMENT '角色ID', - `menu_id` bigint(20) NOT NULL COMMENT '菜单ID', - PRIMARY KEY (`role_id`, `menu_id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '系统_角色和菜单关联表' ROW_FORMAT = Dynamic; - --- --- Dumping data for table `sys_role_menu` --- - -LOCK TABLES `sys_role_menu` WRITE; - -INSERT INTO `sys_role_menu` VALUES (2, 1); -INSERT INTO `sys_role_menu` VALUES (2, 4); -INSERT INTO `sys_role_menu` VALUES (2, 5); -INSERT INTO `sys_role_menu` VALUES (2, 60); -INSERT INTO `sys_role_menu` VALUES (2, 61); -INSERT INTO `sys_role_menu` VALUES (2, 65); -INSERT INTO `sys_role_menu` VALUES (2, 66); -INSERT INTO `sys_role_menu` VALUES (2, 100); -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, 116); -INSERT INTO `sys_role_menu` VALUES (2, 117); -INSERT INTO `sys_role_menu` VALUES (2, 1000); -INSERT INTO `sys_role_menu` VALUES (2, 1001); -INSERT INTO `sys_role_menu` VALUES (2, 1002); -INSERT INTO `sys_role_menu` VALUES (2, 1003); -INSERT INTO `sys_role_menu` VALUES (2, 1004); -INSERT INTO `sys_role_menu` VALUES (2, 1005); -INSERT INTO `sys_role_menu` VALUES (2, 1006); -INSERT INTO `sys_role_menu` VALUES (2, 1007); -INSERT INTO `sys_role_menu` VALUES (2, 1008); -INSERT INTO `sys_role_menu` VALUES (2, 1009); -INSERT INTO `sys_role_menu` VALUES (2, 1010); -INSERT INTO `sys_role_menu` VALUES (2, 1011); -INSERT INTO `sys_role_menu` VALUES (2, 1012); -INSERT INTO `sys_role_menu` VALUES (2, 1013); -INSERT INTO `sys_role_menu` VALUES (2, 1014); -INSERT INTO `sys_role_menu` VALUES (2, 1015); -INSERT INTO `sys_role_menu` VALUES (2, 1051); -INSERT INTO `sys_role_menu` VALUES (2, 1052); -INSERT INTO `sys_role_menu` VALUES (2, 1053); -INSERT INTO `sys_role_menu` VALUES (2, 1054); -INSERT INTO `sys_role_menu` VALUES (2, 1055); -INSERT INTO `sys_role_menu` VALUES (2, 1056); -INSERT INTO `sys_role_menu` VALUES (2, 2009); -INSERT INTO `sys_role_menu` VALUES (2, 2010); -INSERT INTO `sys_role_menu` VALUES (2, 2080); -INSERT INTO `sys_role_menu` VALUES (2, 2081); -INSERT INTO `sys_role_menu` VALUES (2, 2083); -INSERT INTO `sys_role_menu` VALUES (2, 2086); -INSERT INTO `sys_role_menu` VALUES (2, 2087); -INSERT INTO `sys_role_menu` VALUES (2, 2088); -INSERT INTO `sys_role_menu` VALUES (2, 2089); -INSERT INTO `sys_role_menu` VALUES (2, 2092); -INSERT INTO `sys_role_menu` VALUES (2, 2094); -INSERT INTO `sys_role_menu` VALUES (2, 2096); -INSERT INTO `sys_role_menu` VALUES (2, 2097); -INSERT INTO `sys_role_menu` VALUES (2, 2099); -INSERT INTO `sys_role_menu` VALUES (2, 2102); -INSERT INTO `sys_role_menu` VALUES (2, 2107); -INSERT INTO `sys_role_menu` VALUES (2, 2109); -INSERT INTO `sys_role_menu` VALUES (2, 2113); -INSERT INTO `sys_role_menu` VALUES (2, 2114); -INSERT INTO `sys_role_menu` VALUES (2, 2118); -INSERT INTO `sys_role_menu` VALUES (2, 2120); -INSERT INTO `sys_role_menu` VALUES (2, 2121); -INSERT INTO `sys_role_menu` VALUES (2, 2123); -INSERT INTO `sys_role_menu` VALUES (2, 2126); -INSERT INTO `sys_role_menu` VALUES (2, 2128); -INSERT INTO `sys_role_menu` VALUES (2, 2129); -INSERT INTO `sys_role_menu` VALUES (2, 2130); -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, 2140); -INSERT INTO `sys_role_menu` VALUES (2, 2141); -INSERT INTO `sys_role_menu` VALUES (2, 2143); -INSERT INTO `sys_role_menu` VALUES (2, 2145); -INSERT INTO `sys_role_menu` VALUES (2, 2146); -INSERT INTO `sys_role_menu` VALUES (2, 2147); -INSERT INTO `sys_role_menu` VALUES (2, 2148); -INSERT INTO `sys_role_menu` VALUES (2, 2152); -INSERT INTO `sys_role_menu` VALUES (2, 2154); -INSERT INTO `sys_role_menu` VALUES (2, 2155); -INSERT INTO `sys_role_menu` VALUES (2, 2156); -INSERT INTO `sys_role_menu` VALUES (2, 2158); -INSERT INTO `sys_role_menu` VALUES (2, 2159); -INSERT INTO `sys_role_menu` VALUES (2, 2163); -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 (3, 4); -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, 2009); -INSERT INTO `sys_role_menu` VALUES (3, 2010); -INSERT INTO `sys_role_menu` VALUES (3, 2080); -INSERT INTO `sys_role_menu` VALUES (3, 2081); -INSERT INTO `sys_role_menu` VALUES (3, 2082); -INSERT INTO `sys_role_menu` VALUES (3, 2083); -INSERT INTO `sys_role_menu` VALUES (3, 2086); -INSERT INTO `sys_role_menu` VALUES (3, 2087); -INSERT INTO `sys_role_menu` VALUES (3, 2088); -INSERT INTO `sys_role_menu` VALUES (3, 2096); -INSERT INTO `sys_role_menu` VALUES (3, 2097); -INSERT INTO `sys_role_menu` VALUES (3, 2099); -INSERT INTO `sys_role_menu` VALUES (3, 2102); -INSERT INTO `sys_role_menu` VALUES (3, 2104); -INSERT INTO `sys_role_menu` VALUES (3, 2106); -INSERT INTO `sys_role_menu` VALUES (3, 2120); -INSERT INTO `sys_role_menu` VALUES (3, 2126); -INSERT INTO `sys_role_menu` VALUES (3, 2128); -INSERT INTO `sys_role_menu` VALUES (3, 2129); -INSERT INTO `sys_role_menu` VALUES (3, 2130); -INSERT INTO `sys_role_menu` VALUES (3, 2137); -INSERT INTO `sys_role_menu` VALUES (3, 2143); -INSERT INTO `sys_role_menu` VALUES (3, 2147); -INSERT INTO `sys_role_menu` VALUES (3, 2158); -INSERT INTO `sys_role_menu` VALUES (3, 2160); -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 (4, 4); -INSERT INTO `sys_role_menu` VALUES (4, 2087); -INSERT INTO `sys_role_menu` VALUES (4, 2126); -INSERT INTO `sys_role_menu` VALUES (4, 2128); -INSERT INTO `sys_role_menu` VALUES (4, 2130); -INSERT INTO `sys_role_menu` VALUES (4, 2165); - -UNLOCK TABLES; - --- Dump completed on 2025-02-14 15:26:56 diff --git a/database/install/trace_data.sql b/database/install/trace_data.sql deleted file mode 100644 index 4b1d8c22..00000000 --- a/database/install/trace_data.sql +++ /dev/null @@ -1,23 +0,0 @@ --- --- Table structure for table `trace_data` --- - -DROP TABLE IF EXISTS `trace_data`; -CREATE TABLE `trace_data` ( - `id` int NOT NULL AUTO_INCREMENT, - `task_id` int NOT NULL COMMENT '跟踪任务ID', - `imsi` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', - `msisdn` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', - `src_addr` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '源地址带端口', - `dst_addr` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '目标地址带端口', - `if_type` int DEFAULT NULL COMMENT '接口类型,未分类', - `msg_type` int DEFAULT NULL, - `msg_direct` int DEFAULT NULL, - `length` int DEFAULT NULL COMMENT '去除头后的原始数据byte长度', - `timestamp` bigint DEFAULT '0' COMMENT '毫秒', - `raw_msg` text COLLATE utf8mb4_general_ci COMMENT '去除头后的原始数据byteBase64', - `dec_msg` text COLLATE utf8mb4_general_ci COMMENT 'TCP内容消息', - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='跟踪_任务数据'; - --- Dump completed on 2024-09-19 14:26:59 diff --git a/database/omc_db.sqlite b/database/omc_db.sqlite deleted file mode 100644 index c5ae3395..00000000 Binary files a/database/omc_db.sqlite and /dev/null differ diff --git a/database/upgrade/upg_20250327.sql b/database/upgrade/upg_20250327.sql deleted file mode 100644 index 804ba1d6..00000000 --- a/database/upgrade/upg_20250327.sql +++ /dev/null @@ -1,53 +0,0 @@ -PRAGMA foreign_keys = false; - -UPDATE "ne_host" SET "host_type" = 'ssh', "group_id" = '1', "title" = 'OMC_001_27149', "addr" = '127.0.0.10', "port" = 27149, "user" = 'new_user', "auth_mode" = '0', "password" = 't7sKsIsdh7dXKs0ErZRtGIZGRIjrFz6tJGfZGJS2h6E=', "private_key" = '', "pass_phrase" = '', "db_name" = '', "remark" = '', "create_by" = 'system', "create_time" = 1729063407329, "update_by" = '', "update_time" = 0 WHERE "id" = 1; - -UPDATE "ne_host" SET "host_type" = 'ssh', "group_id" = '1', "title" = 'IMS_001_27149', "addr" = '127.0.0.1', "port" = 27149, "user" = 'new_user', "auth_mode" = '0', "password" = 't7sKsIsdh7dXKs0ErZRtGIZGRIjrFz6tJGfZGJS2h6E=', "private_key" = '', "pass_phrase" = '', "db_name" = '', "remark" = '', "create_by" = 'system', "create_time" = 1729063407329, "update_by" = '', "update_time" = 0 WHERE "id" = 3; - -UPDATE "ne_host" SET "host_type" = 'telnet', "group_id" = '1', "title" = 'IMS_001_4100', "addr" = '127.0.0.1', "port" = 4100, "user" = 'admin', "auth_mode" = '0', "password" = 'NUBonCin4GZgl7o12YjeClE8ToQmYp9KWdhMjSNxc2M=', "private_key" = '', "pass_phrase" = '', "db_name" = '', "remark" = '', "create_by" = 'system', "create_time" = 1729063407329, "update_by" = '', "update_time" = 0 WHERE "id" = 4; - -UPDATE "ne_host" SET "host_type" = 'ssh', "group_id" = '1', "title" = 'AMF_001_27149', "addr" = '127.0.0.1', "port" = 27149, "user" = 'new_user', "auth_mode" = '0', "password" = 't7sKsIsdh7dXKs0ErZRtGIZGRIjrFz6tJGfZGJS2h6E=', "private_key" = '', "pass_phrase" = '', "db_name" = '', "remark" = '', "create_by" = 'system', "create_time" = 1729063407329, "update_by" = '', "update_time" = 0 WHERE "id" = 5; - -UPDATE "ne_host" SET "host_type" = 'telnet', "group_id" = '1', "title" = 'AMF_001_4100', "addr" = '127.0.0.9', "port" = 4100, "user" = 'admin', "auth_mode" = '0', "password" = 'NUBonCin4GZgl7o12YjeClE8ToQmYp9KWdhMjSNxc2M=', "private_key" = '', "pass_phrase" = '', "db_name" = '', "remark" = '', "create_by" = 'system', "create_time" = 1729063407329, "update_by" = '', "update_time" = 0 WHERE "id" = 6; - -UPDATE "ne_host" SET "host_type" = 'ssh', "group_id" = '1', "title" = 'AUSF_001_27149', "addr" = '127.0.0.1', "port" = 27149, "user" = 'new_user', "auth_mode" = '0', "password" = 't7sKsIsdh7dXKs0ErZRtGIZGRIjrFz6tJGfZGJS2h6E=', "private_key" = '', "pass_phrase" = '', "db_name" = '', "remark" = '', "create_by" = 'system', "create_time" = 1729063407329, "update_by" = '', "update_time" = 0 WHERE "id" = 7; - -UPDATE "ne_host" SET "host_type" = 'telnet', "group_id" = '1', "title" = 'AUSF_001_4100', "addr" = '127.0.0.4', "port" = 4100, "user" = 'admin', "auth_mode" = '0', "password" = 'NUBonCin4GZgl7o12YjeClE8ToQmYp9KWdhMjSNxc2M=', "private_key" = '', "pass_phrase" = '', "db_name" = '', "remark" = '', "create_by" = 'system', "create_time" = 1729063407329, "update_by" = '', "update_time" = 0 WHERE "id" = 8; - -UPDATE "ne_host" SET "host_type" = 'ssh', "group_id" = '1', "title" = 'UDM_001_27149', "addr" = '127.0.0.1', "port" = 27149, "user" = 'new_user', "auth_mode" = '0', "password" = 't7sKsIsdh7dXKs0ErZRtGIZGRIjrFz6tJGfZGJS2h6E=', "private_key" = '', "pass_phrase" = '', "db_name" = '', "remark" = '', "create_by" = 'system', "create_time" = 1729063407329, "update_by" = '', "update_time" = 0 WHERE "id" = 9; - -UPDATE "ne_host" SET "host_type" = 'telnet', "group_id" = '1', "title" = 'UDM_001_4100', "addr" = '127.0.0.5', "port" = 4100, "user" = 'admin', "auth_mode" = '0', "password" = 'NUBonCin4GZgl7o12YjeClE8ToQmYp9KWdhMjSNxc2M=', "private_key" = '', "pass_phrase" = '', "db_name" = '', "remark" = '', "create_by" = 'system', "create_time" = 1729063407329, "update_by" = '', "update_time" = 0 WHERE "id" = 10; - -UPDATE "ne_host" SET "host_type" = 'redis', "group_id" = '1', "title" = 'UDM_001_6379', "addr" = '127.0.0.1', "port" = 6379, "user" = 'udmdb', "auth_mode" = '0', "password" = 'nO3fEhtuKuBkQE5ozsUhNfzn02vhnyxYTEiPn2CIlr4=', "private_key" = '', "pass_phrase" = '', "db_name" = '0', "remark" = '', "create_by" = 'system', "create_time" = 1729063407329, "update_by" = '', "update_time" = 0 WHERE "id" = 11; - -UPDATE "ne_host" SET "host_type" = 'ssh', "group_id" = '1', "title" = 'SMF_001_27149', "addr" = '127.0.0.1', "port" = 27149, "user" = 'new_user', "auth_mode" = '0', "password" = 't7sKsIsdh7dXKs0ErZRtGIZGRIjrFz6tJGfZGJS2h6E=', "private_key" = '', "pass_phrase" = '', "db_name" = '', "remark" = '', "create_by" = 'system', "create_time" = 1729063407329, "update_by" = '', "update_time" = 0 WHERE "id" = 12; - -UPDATE "ne_host" SET "host_type" = 'telnet', "group_id" = '1', "title" = 'SMF_001_4100', "addr" = '127.0.0.6', "port" = 4100, "user" = 'admin', "auth_mode" = '0', "password" = 'NUBonCin4GZgl7o12YjeClE8ToQmYp9KWdhMjSNxc2M=', "private_key" = '', "pass_phrase" = '', "db_name" = '', "remark" = '', "create_by" = 'system', "create_time" = 1729063407329, "update_by" = '', "update_time" = 0 WHERE "id" = 13; - -UPDATE "ne_host" SET "host_type" = 'ssh', "group_id" = '1', "title" = 'PCF_001_27149', "addr" = '127.0.0.1', "port" = 27149, "user" = 'new_user', "auth_mode" = '0', "password" = 't7sKsIsdh7dXKs0ErZRtGIZGRIjrFz6tJGfZGJS2h6E=', "private_key" = '', "pass_phrase" = '', "db_name" = '', "remark" = '', "create_by" = 'system', "create_time" = 1729063407329, "update_by" = '', "update_time" = 0 WHERE "id" = 14; - -UPDATE "ne_host" SET "host_type" = 'telnet', "group_id" = '1', "title" = 'PCF_001_4100', "addr" = '127.0.0.7', "port" = 4100, "user" = 'admin', "auth_mode" = '0', "password" = 'NUBonCin4GZgl7o12YjeClE8ToQmYp9KWdhMjSNxc2M=', "private_key" = '', "pass_phrase" = '', "db_name" = '', "remark" = '', "create_by" = 'system', "create_time" = 1729063407329, "update_by" = '', "update_time" = 0 WHERE "id" = 15; - -UPDATE "ne_host" SET "host_type" = 'ssh', "group_id" = '1', "title" = 'UPF_001_27149', "addr" = '127.0.0.1', "port" = 27149, "user" = 'new_user', "auth_mode" = '0', "password" = 't7sKsIsdh7dXKs0ErZRtGIZGRIjrFz6tJGfZGJS2h6E=', "private_key" = '', "pass_phrase" = '', "db_name" = '', "remark" = '', "create_by" = 'system', "create_time" = 1729063407329, "update_by" = '', "update_time" = 0 WHERE "id" = 20; - -UPDATE "ne_host" SET "host_type" = 'telnet', "group_id" = '1', "title" = 'UPF_001_4100', "addr" = '127.0.0.8', "port" = 4100, "user" = 'admin', "auth_mode" = '0', "password" = 'NUBonCin4GZgl7o12YjeClE8ToQmYp9KWdhMjSNxc2M=', "private_key" = '', "pass_phrase" = '', "db_name" = '', "remark" = '', "create_by" = 'system', "create_time" = 1729063407329, "update_by" = '', "update_time" = 0 WHERE "id" = 21; - -UPDATE "ne_host" SET "host_type" = 'telnet', "group_id" = '1', "title" = 'UPF_001_5002', "addr" = '127.0.0.8', "port" = 5002, "user" = 'admin', "auth_mode" = '0', "password" = '', "private_key" = '', "pass_phrase" = '', "db_name" = '', "remark" = '', "create_by" = 'system', "create_time" = 1729063407329, "update_by" = '', "update_time" = 0 WHERE "id" = 22; - -UPDATE "ne_info" SET "ne_type" = 'OMC', "ne_id" = '001', "rm_uid" = '4400HXOMC001', "ne_name" = 'OMC_001', "ip" = '127.0.0.10', "port" = 33080, "pv_flag" = 'PNF', "province" = 'AreaNet', "vendor_name" = '-', "dn" = '-', "ne_address" = '-', "host_ids" = '1,2', "status" = 0, "remark" = '', "create_by" = 'system', "create_time" = 1713928436971, "update_by" = '', "update_time" = 0 WHERE "id" = 1; - -UPDATE "ne_info" SET "ne_type" = 'IMS', "ne_id" = '001', "rm_uid" = '4400HXIMS001', "ne_name" = 'IMS_001', "ip" = '127.0.0.1', "port" = 33030, "pv_flag" = 'PNF', "province" = 'AreaNet', "vendor_name" = '-', "dn" = '-', "ne_address" = '-', "host_ids" = '3,4', "status" = 0, "remark" = '', "create_by" = 'system', "create_time" = 1713928436971, "update_by" = '', "update_time" = 0 WHERE "id" = 2; - -UPDATE "ne_info" SET "ne_type" = 'AMF', "ne_id" = '001', "rm_uid" = '4400HXAMF001', "ne_name" = 'AMF_001', "ip" = '127.0.0.9', "port" = 33030, "pv_flag" = 'PNF', "province" = 'AreaNet', "vendor_name" = '-', "dn" = '-', "ne_address" = '', "host_ids" = '5,6', "status" = 0, "remark" = '', "create_by" = 'system', "create_time" = 1713928436971, "update_by" = '', "update_time" = 0 WHERE "id" = 3; - -UPDATE "ne_info" SET "ne_type" = 'AUSF', "ne_id" = '001', "rm_uid" = '4400HXAUSF001', "ne_name" = 'AUSF_001', "ip" = '127.0.0.4', "port" = 33030, "pv_flag" = 'PNF', "province" = 'AreaNet', "vendor_name" = '-', "dn" = '-', "ne_address" = '', "host_ids" = '7,8', "status" = 0, "remark" = '', "create_by" = 'system', "create_time" = 1713928436971, "update_by" = '', "update_time" = 0 WHERE "id" = 4; - -UPDATE "ne_info" SET "ne_type" = 'UDM', "ne_id" = '001', "rm_uid" = '4400HXUDM001', "ne_name" = 'UDM_001', "ip" = '127.0.0.5', "port" = 33030, "pv_flag" = 'PNF', "province" = 'AreaNet', "vendor_name" = '-', "dn" = '-', "ne_address" = '-', "host_ids" = '9,10,11', "status" = 0, "remark" = '', "create_by" = 'system', "create_time" = 1713928436971, "update_by" = '', "update_time" = 0 WHERE "id" = 5; - -UPDATE "ne_info" SET "ne_type" = 'SMF', "ne_id" = '001', "rm_uid" = '4400HXSMF001', "ne_name" = 'SMF_001', "ip" = '127.0.0.6', "port" = 33030, "pv_flag" = 'PNF', "province" = 'AreaNet', "vendor_name" = '-', "dn" = '-', "ne_address" = '-', "host_ids" = '12,13', "status" = 0, "remark" = '', "create_by" = 'system', "create_time" = 1713928436971, "update_by" = '', "update_time" = 0 WHERE "id" = 6; - -UPDATE "ne_info" SET "ne_type" = 'PCF', "ne_id" = '001', "rm_uid" = '4400HXPCF001', "ne_name" = 'PCF_001', "ip" = '127.0.0.7', "port" = 33030, "pv_flag" = 'PNF', "province" = 'AreaNet', "vendor_name" = '-', "dn" = '-', "ne_address" = '-', "host_ids" = '14,15', "status" = 0, "remark" = '', "create_by" = 'system', "create_time" = 1713928436971, "update_by" = '', "update_time" = 0 WHERE "id" = 7; - -UPDATE "ne_info" SET "ne_type" = 'UPF', "ne_id" = '001', "rm_uid" = '4400HXUPF001', "ne_name" = 'UPF_001', "ip" = '127.0.0.8', "port" = 33030, "pv_flag" = 'PNF', "province" = 'AreaNet', "vendor_name" = '-', "dn" = '-', "ne_address" = '', "host_ids" = '20,21,22', "status" = 0, "remark" = '', "create_by" = 'system', "create_time" = 1713928436971, "update_by" = '', "update_time" = 0 WHERE "id" = 10; - -PRAGMA foreign_keys = true; \ No newline at end of file diff --git a/database/upgrade/upg_20250409.sql b/database/upgrade/upg_20250409.sql deleted file mode 100644 index d8b0934e..00000000 --- a/database/upgrade/upg_20250409.sql +++ /dev/null @@ -1,60 +0,0 @@ -PRAGMA foreign_keys = false; - -DELETE FROM "mml_subscriber" WHERE "id" = 609; -INSERT INTO "mml_subscriber" ("id", "ne_type", "category", "cat_display", "operation", "object", "mml_display", "param_json", "status") VALUES (609, 'UDM', 'other', 'Other', 'set suci', '', 'Set SUCI', '[{"comment":"","display":"ID","filter":"","name":"id","optional":"false","type":"string"},{"comment":"","display":"Scheme","filter":"","name":"scheme","optional":"false","type":"string"},{"comment":"","display":"Private Key","filter":"","name":"privatekey","optional":"false","type":"string"},{"comment":"","display":"Public Key","filter":"","name":"publickey","optional":"false","type":"string"}]', 'Active'); - -DELETE FROM "mml_subscriber" WHERE "id" = 610; -INSERT INTO "mml_subscriber" ("id", "ne_type", "category", "cat_display", "operation", "object", "mml_display", "param_json", "status") VALUES (610, 'UDM', 'other', 'Other', 'set op', '', 'Set OP', '[{"comment":"","display":"ID","filter":"","name":"id","optional":"false","type":"string"},{"comment":"","display":"Value","filter":"","name":"value","optional":"false","type":"string"}]', 'Active'); - -DELETE FROM "mml_subscriber" WHERE "id" = 611; -INSERT INTO "mml_subscriber" ("id", "ne_type", "category", "cat_display", "operation", "object", "mml_display", "param_json", "status") VALUES (611, 'UDM', 'other', 'Other', 'dec key', '', 'Check Key Profile', 'null', 'Active'); - -UPDATE "mml_subscriber" SET "ne_type" = 'UDM', "category" = 'authdataManagement', "cat_display" = 'Authentication Data Management', "operation" = 'export', "object" = 'authdat', "mml_display" = 'Export Auth Data to File', "param_json" = '[{"comment":"","display":"Path File","filter":"","name":"path","optional":"false","type":"string"}]', "status" = 'Inactive' WHERE "id" = 596; - -UPDATE "mml_subscriber" SET "ne_type" = 'UDM', "category" = 'subscriberManagement', "cat_display" = 'Subcriber Management', "operation" = 'export', "object" = 'udmuser', "mml_display" = 'Export Subscriber Data to File', "param_json" = '[{"comment":"","display":"Path File","filter":"","name":"path","optional":"false","type":"string"}]', "status" = 'Inactive' WHERE "id" = 606; - -UPDATE "mml_subscriber" SET "ne_type" = 'UDM', "category" = 'subscriberManagement', "cat_display" = 'Subcriber Management', "operation" = 'sync', "object" = 'start', "mml_display" = 'Sync UDM Data From Public UDM', "param_json" = 'null', "status" = 'Inactive' WHERE "id" = 607; - -UPDATE "mml_subscriber" SET "ne_type" = 'UDM', "category" = 'subscriberManagement', "cat_display" = 'Subcriber Management', "operation" = 'sync', "object" = 'state', "mml_display" = 'Query State of Sync Task', "param_json" = 'null', "status" = 'Inactive' WHERE "id" = 608; - -DELETE FROM "sys_role_menu" WHERE "role_id" = 2 AND "menu_id" = 2107; -INSERT INTO `sys_role_menu` VALUES (2, 2107); -DELETE FROM "sys_role_menu" WHERE "role_id" = 2 AND "menu_id" = 2109; -INSERT INTO `sys_role_menu` VALUES (2, 2109); - -DELETE FROM "sys_role_menu" WHERE "ne_type" = 'UPF'; -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'); -INSERT INTO "ne_config" VALUES (221, 'UPF', 'logger', 'Logger', 'list', '[{"access":"read-write","comment":"","display":"Log File Full Path","filter":"","name":"logFileFullPath","type":"string","value":"/var/log/upf.log"},{"access":"read-write","comment":"error|warning|info|debug","display":"Log Level","filter":"","name":"logLevel","type":"string","value":"error"},{"access":"read-write","comment":"error|warning|info|debug","display":"Upfd Log Level","filter":"","name":"upfdLogLevel","type":"string","value":"error"},{"access":"read-write","comment":"","display":"Upfd Log Transfer","filter":"","name":"upfdLogTransfer","type":"bool","value":"false"},{"access":"read-write","comment":"","display":"Report Caller","filter":"","name":"reportCaller","type":"bool","value":"false"}]', 3, '', 1742469466510, 'public'); -INSERT INTO "ne_config" VALUES (222, 'UPF', 'pfcp', 'PFCP', 'list', '[{"access":"read-write","comment":"ipv4|ipv6|ipv46","display":"IP Type","filter":"","name":"ipType","type":"string","value":"ipv4"},{"access":"read-write","comment":"","display":"Local IPv4","filter":"","name":"localIpv4","type":"string","value":"0.0.0.0"},{"access":"read-write","comment":"","display":"Local IPv6","filter":"","name":"localIpv6","type":"string","value":""},{"access":"read-write","comment":"1~65535","display":"Local UDP Port","filter":"1~65535","name":"localUdpPort","type":"int","value":"8805"},{"access":"read-write","comment":"","display":"SMF IPv4","filter":"","name":"smfIpv4","type":"string","value":"0.0.0.0"},{"access":"read-write","comment":"","display":"SMF IPv6","filter":"","name":"smfIpv6","type":"string","value":""},{"access":"read-write","comment":"1~65535","display":"SMF UDP Port","filter":"1~65535","name":"smfUdpPort","type":"int","value":"8805"},{"access":"read-write","comment":"1~255","display":"Retry Interval","filter":"1~255","name":"retryInterval","type":"int","value":"2"},{"access":"read-write","comment":"0~255","display":"Max Retry","filter":"0~255","name":"maxRetry","type":"int","value":"3"},{"access":"read-write","comment":"1~255","display":"Heartbeat Interval","filter":"1~255","name":"heartbeatInterval","type":"int","value":"15"}]', 5, '', 1742469466514, 'public'); -INSERT INTO "ne_config" VALUES (223, 'UPF', 'telnet', 'Telnet', 'list', '[{"access":"read-write","comment":"","display":"Enabled","filter":"","name":"enabled","type":"bool","value":"false"},{"access":"read-write","comment":"ipv4|ipv6|ipv46","display":"IP Type","filter":"","name":"ipType","type":"string","value":"ipv4"},{"access":"read-write","comment":"","display":"Local IPv4","filter":"","name":"localIpv4","type":"string","value":"0.0.0.0"},{"access":"read-write","comment":"","display":"Local IPv6","filter":"","name":"localIpv6","type":"string","value":""},{"access":"read-write","comment":"1~65535","display":"Local Port","filter":"1~65535","name":"localPort","type":"int","value":"4100"}]', 7, '', 1742469466518, 'public'); -INSERT INTO "ne_config" VALUES (224, 'UPF', 'redisDb', 'Redis DB', 'list', '[{"access":"read-write","comment":"","display":"Enabled","filter":"","name":"enabled","type":"bool","value":"false"},{"access":"read-write","comment":"tcp|udp","display":"Net Type","filter":"","name":"netType","type":"string","value":"tcp"},{"access":"read-write","comment":"","display":"Server Address","filter":"","name":"serverAddr","type":"string","value":"0.0.0.0:0"}]', 9, '', 1742469466521, 'public'); -INSERT INTO "ne_config" VALUES (225, 'UPF', 'dataForwarderCommon', 'Data Forwarder Common', 'list', '[{"access":"read-write","comment":"upfd|tun","display":"Type","filter":"","name":"type","type":"string","value":"upfd"},{"access":"read-only","comment":"1~8","display":"Instance ID","filter":"1~8","name":"instanceId","type":"int","value":"1"},{"access":"read-write","comment":"1~255","display":"Main CPU","filter":"1~255","name":"mainCpu","type":"int","value":"1"},{"access":"read-write","comment":"2,3,4,5 or 2-5","display":"CPU Workers","filter":"","name":"cpuWorkers","type":"string","value":""},{"access":"read-write","comment":"data forwarder already run or not","display":"Is Run","filter":"0~1","name":"isRun","type":"int","value":"0"},{"access":"read-write","comment":"Hot Standby work or not","display":"Is Hot Standby","filter":"0~1","name":"isHotStandby","type":"int","value":"0"},{"access":"read-write","comment":"The value from which TEID is allocated","display":"TEID Start","filter":"","name":"teidStart","type":"int","value":"16777216"},{"access":"read-write","comment":"","display":"N3 Heartbeat Interval","filter":"","name":"n3HeartbeatInterval","type":"int","value":"30"},{"access":"read-write","comment":"","display":"RX TX Queue Num","filter":"","name":"rxTxQueueNum","type":"int","value":"1"},{"access":"read-write","comment":"data rx\u0026tx use C socket","display":"Use Socket","filter":"0~1","name":"useSocket","type":"int","value":"0"},{"access":"read-write","comment":"Enable 5G ethernet LAN","display":"Enable Tap","filter":"0~1","name":"enableTap","type":"int","value":"0"},{"access":"read-write","comment":"Enable PFCP Qer Control","display":"Enable Qer","filter":"0~1","name":"enableQer","type":"int","value":"0"},{"access":"read-write","comment":"Enable NAT For N6 interface","display":"Enable NAT","filter":"0~1","name":"enableNat","type":"int","value":"0"},{"access":"read-write","comment":"Enable Arp Proxy For N6 interface","display":"Enable Arp Proxy","filter":"0~1","name":"enableArpProxy","type":"int","value":"0"}]', 11, '', 1742469466525, 'public'); -INSERT INTO "ne_config" VALUES (226, 'UPF', 'dataForwarderUpfd', 'Data Forwarder Upfd', 'list', '[{"access":"read-write","comment":"Currently only support vfio-pci","display":"UIO Driver","filter":"","name":"uioDriver","type":"string","value":"vfio-pci"},{"access":"read-write","comment":"The format must be IP:Port","display":"Telnet Address IP:Port","filter":"","name":"commandlineListen","type":"string","value":"localhost:5002"},{"access":"read-write","comment":"the unit is GB","display":"Heap Size GB","filter":"1~8","name":"heapSizeGB","type":"int","value":"2"},{"access":"read-write","comment":"the unit is MB","display":"State Seg Size MB","filter":"64~512","name":"stateSegSizeMB","type":"int","value":"256"},{"access":"read-write","comment":"","display":"DPDK No PCI","filter":"0~1","name":"dpdkNoPci","type":"int","value":"0"},{"access":"read-write","comment":"","display":"Mem Channel Num","filter":"0~128","name":"memChannelNum","type":"int","value":"0"},{"access":"read-write","comment":"","display":"Session Base Va","filter":"","name":"sessionBaseVa","type":"string","value":"0x2000000000"},{"access":"read-write","comment":"","display":"Buffers Per Numa","filter":"","name":"buffersPerNuma","type":"int","value":"0"},{"access":"read-write","comment":"","display":"N3 RSS Hash","filter":"","name":"n3RssHash","type":"string","value":""}]', 13, '', 1742469466530, 'public'); -INSERT INTO "ne_config" VALUES (227, 'UPF', 'dataInterfaceList', 'Data Interface List', 'array', '[{"access":"read-only","comment":"1~32","display":"Index","filter":"1~32","name":"index","type":"int","value":"1"},{"access":"read-write","comment":"N3|N6|N9|N19","display":"Interface Type","filter":"","name":"interfaceType","type":"string","value":"N3"},{"access":"read-write","comment":"","display":"Interface ID","filter":"1~32","name":"interfaceId","type":"int","value":"1"},{"access":"read-write","comment":"host|vmxnet3|dpdk|socket|uds","display":"Driver Type","filter":"","name":"driverType","type":"string","value":"host"},{"access":"read-write","comment":"ipv4|ipv6|ipv4v6","display":"IP Type","filter":"","name":"ipType","type":"string","value":"ipv4"},{"access":"read-write","array":[{"access":"read-only","comment":"1~8","display":"Index","filter":"1~8","name":"index","type":"int","value":"1"},{"access":"read-write","comment":"IPv4","display":"IPv4","filter":"","name":"ipv4","type":"string","value":"0.0.0.0"},{"access":"read-write","comment":"","display":"IPv4 Mask","filter":"","name":"ipv4Mask","type":"string","value":"0.0.0.0"}],"comment":"","display":"IPv4 Address List","filter":"0~8","name":"ipv4AddrList","type":"int","value":"1"},{"access":"read-write","array":[{"access":"read-only","comment":"1~8","display":"Index","filter":"1~8","name":"index","type":"int","value":"1"},{"access":"read-write","comment":"","display":"IPv6","filter":"","name":"ipv6","type":"string","value":""},{"access":"read-write","comment":"","display":"IPv6 Prefix","filter":"","name":"ipv6Prefix","type":"int","value":"64"}],"comment":"","display":"IPv6 Address List","filter":"0~8","name":"ipv6AddrList","type":"int","value":"1"},{"access":"read-write","comment":"","display":"MAC Address","filter":"","name":"macAddr","type":"string","value":"00:00:00:00:00:00"},{"access":"read-write","comment":"","display":"Interface PCI","filter":"","name":"interfacePCI","type":"string","value":"0000:00:00.0"},{"access":"read-write","comment":"","display":"System Network Card Name","filter":"","name":"systemNetworkCardName","type":"string","value":""},{"access":"read-write","comment":"","display":"Gateway IPv4","filter":"","name":"gatewayIpv4","type":"string","value":"0.0.0.0"},{"access":"read-write","comment":"null|bak|sub|xor|round|lacp","display":"Bond Type","filter":"","name":"bondType","type":"string","value":"0"},{"access":"read-write","comment":"","display":"Bond ID","filter":"0~32","name":"bondId","type":"int","value":"1"},{"access":"read-write","comment":"","display":"BFD TX Interval Ms","filter":"","name":"bfdTxIntervalMs","type":"int","value":"0"},{"access":"read-write","comment":"","display":"BFD RX Interval Ms","filter":"","name":"bfdRxIntervalMs","type":"int","value":"0"},{"access":"read-write","comment":"","display":"DNN Name","filter":"","name":"dnnName","type":"string","value":"default"},{"access":"read-write","comment":"","display":"Gateway IPv6","filter":"","name":"gatewayIpv6","type":"string","value":""},{"access":"read-write","comment":"","display":"BFD Gateway IPv4","filter":"","name":"bfdGatewayIpv4","type":"string","value":"0.0.0.0"},{"access":"read-write","comment":"","display":"BFD Gateway IPv6","filter":"","name":"bfdGatewayIpv6","type":"string","value":""},{"access":"read-write","comment":"","display":"MTU","filter":"0~65535","name":"mtu","type":"int","value":"1500"},{"access":"read-write","comment":"","display":"Vlan ID Min","filter":"","name":"vlanIdMin","type":"int","value":"0"},{"access":"read-write","comment":"","display":"Vlan ID Max","filter":"","name":"vlanIdMax","type":"int","value":"0"},{"access":"read-write","comment":"","display":"UDP Src Port","filter":"1~65535","name":"udpSrcPort","type":"int","value":"0"},{"access":"read-write","comment":"","display":"UDP Listen Port","filter":"0~65536","name":"udpListenPort","type":"int","value":"2152"},{"access":"read-write","comment":"","display":"UDS Local File Full Path","filter":"","name":"udsLocalFileFullPath","type":"string","value":""},{"access":"read-write","comment":"","display":"UDS Remote File Full Path","filter":"","name":"udsRemoteFileFullPath","type":"string","value":""},{"access":"read-write","comment":"","display":"Link Detection Type","filter":"0~1","name":"linkDetectionType","type":"int","value":"0"},{"access":"read-write","comment":"","display":"NAT Interface ID","filter":"0~1","name":"natInterfaceId","type":"int","value":"0"},{"access":"read-write","comment":"","display":"IPv4","filter":"","name":"ueIpv4","type":"string","value":"0.0.0.0"},{"access":"read-write","comment":"","display":"UE IPv4 Mask","filter":"","name":"ueIpv4Mask","type":"string","value":"255.255.255.0"},{"access":"read-write","comment":"","display":"UE IPv6","filter":"","name":"ueIpv6","type":"string","value":""},{"access":"read-write","comment":"","display":"UE IPv6 Prefix","filter":"1~128","name":"ueIpv6Prefix","type":"int","value":"64"},{"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":"IPv4","filter":"","name":"ipv4","type":"string","value":"0.0.0.0"},{"access":"read-write","comment":"","display":"IPv4 Mask","filter":"","name":"ipv4Mask","type":"string","value":"0.0.0.0"}],"comment":"","display":"GTPU Remote IPv4 Pool List","filter":"1~32","name":"gtpuRemoteIpv4PoolList","type":"int","value":"1"},{"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":"IPv6","filter":"","name":"ipv6","type":"string","value":""},{"access":"read-write","comment":"","display":"IPv6 Prefix","filter":"","name":"ipv6Prefix","type":"int","value":"64"}],"comment":"","display":"GTPU Remote IPv6 Pool List","filter":"0~32","name":"gtpuRemoteIpv6PoolList","type":"int","value":"1"},{"access":"read-write","comment":"","display":"GTPU Signaling Handle","filter":"0~1","name":"gtpuSignalingHandle","type":"int","value":"0"},{"access":"read-write","comment":"","display":"IMS Default DSCP Value","filter":"0~1","name":"imsDefaultDSCPValue","type":"int","value":"0"},{"access":"read-write","comment":"","display":"Data Default DSCP Value","filter":"0~1","name":"dataDefaultDSCPValue","type":"int","value":"0"},{"access":"read-write","comment":"","display":"Inner DSCP Value Map","filter":"0~1","name":"innerDSCPValueMap","type":"int","value":"0"},{"access":"read-write","comment":"","display":"Max Support Speed Mbps","filter":"0~65536","name":"maxSupportSpeedMbps","type":"int","value":"0"},{"access":"read-write","comment":"","display":"DPDK RX Queues Number","filter":"0~127","name":"dpdkRxQueuesNumber","type":"int","value":"0"},{"access":"read-write","comment":"","display":"DPDK TX Queues Number","filter":"0~127","name":"dpdkTxQueuesNumber","type":"int","value":"0"},{"access":"read-write","comment":"","display":"DPDK RX Desc Number","filter":"0~32768","name":"dpdkRxDescNumber","type":"int","value":"0"},{"access":"read-write","comment":"","display":"DPDK TX Desc Number","filter":"0~32768","name":"dpdkTxDescNumber","type":"int","value":"0"},{"access":"read-write","comment":"","display":"DPDK Workers","filter":"","name":"dpdkworkers","type":"string","value":""}]', 15, '', 1742469466536, 'public'); -INSERT INTO "ne_config" VALUES (228, 'UPF', 'networkControlCommon', 'Network Control Common', 'list', '[{"access":"read-write","comment":"","display":"Local Switch Disabled","filter":"0~1","name":"localSwitchDisabled","type":"int","value":"0"},{"access":"read-write","comment":"","display":"Max TCP Sync Per Second","filter":"","name":"maxTCPSyncPerSecond","type":"int","value":"0"},{"access":"read-write","comment":"","display":"UPF Max Support Mbps","filter":"","name":"upfMaxSupportMbps","type":"int","value":"0"},{"access":"read-write","comment":"","display":"dscp Inner Mapping","filter":"","name":"dscpInnerMapping","type":"int","value":"0"}]', 17, '', 1742469466542, 'public'); -INSERT INTO "ne_config" VALUES (229, 'UPF', 'networkControlDnnList', 'Network Control DNN List', 'array', '[{"access":"read-only","comment":"1~32","display":"Index","filter":"1~32","name":"index","type":"int","value":"1"},{"access":"read-write","comment":"","display":"DNN Name","filter":"","name":"dnnName","type":"string","value":""},{"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","comment":"","display":"HTTP Proto Enabled","filter":"0~1","name":"httpProtoEnabled","type":"int","value":"0"},{"access":"read-write","comment":"","display":"HTTPS Proto Enabled","filter":"0~1","name":"httpsProtoEnabled","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":"Type","filter":"","name":"type","type":"int","value":"0"},{"access":"read-write","comment":"","display":"Name","filter":"","name":"name","type":"string","value":""},{"access":"read-write","comment":"","display":"Value","filter":"","name":"value","type":"string","value":""}],"comment":"","display":"Header Enrich Info List","filter":"0~32","name":"headerEnrichInfoList","type":"int","value":"1"},{"access":"read-write","comment":"","display":"Statistic Enabled","filter":"0~1","name":"statisticEnabled","type":"int","value":"0"},{"access":"read-write","comment":"","display":"Local Switch Check","filter":"0~1","name":"localSwitchCheck","type":"int","value":"0"},{"access":"read-write","comment":"","display":"QER Max Support Mbps","filter":"","name":"qerMaxSupportMbps","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":"IPv4","filter":"","name":"ipv4","type":"string","value":"0.0.0.0"},{"access":"read-write","comment":"","display":"IPv4 Mask","filter":"","name":"ipv4Mask","type":"string","value":"255.255.255.0"}],"comment":"","display":"UE IPv4 Pool List","filter":"0~32","name":"ueIpv4PoolList","type":"int","value":"1"},{"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":"IPv6","filter":"","name":"ipv6","type":"string","value":""},{"access":"read-write","comment":"","display":"IPv6 Prefix","filter":"1~128","name":"ipv6Prefix","type":"int","value":"64"}],"comment":"","display":"UE IPv6 Pool List","filter":"0~32","name":"ueIpv6PoolList","type":"int","value":"1"},{"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":"IPv4","filter":"","name":"ipv4","type":"string","value":"0.0.0.0"},{"access":"read-write","comment":"","display":"IPv4 Mask","filter":"","name":"ipv4Mask","type":"string","value":"255.255.255.0"}],"comment":"","display":"Dst Server IPv4 Pool List","filter":"0~32","name":"dstServerIpv4PoolList","type":"int","value":"1"},{"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":"IPv6","filter":"","name":"ipv6","type":"string","value":""},{"access":"read-write","comment":"","display":"IPv6 Prefix","filter":"1~128","name":"ipv6Prefix","type":"int","value":"64"}],"comment":"","display":"Dst Server IPv6 Pool List","filter":"0~32","name":"dstServerIpv6PoolList","type":"int","value":"1"},{"access":"read-write","comment":"ipv4|ipv6|ipv4v6","display":"Gateway IP Type","filter":"","name":"gatewayIpType","type":"string","value":"ipv4"},{"access":"read-write","comment":"","display":"Gateway IPv4","filter":"","name":"gatewayIpv4","type":"string","value":"0.0.0.0"},{"access":"read-write","comment":"","display":"Gateway IPv6","filter":"","name":"gatewayIpv6","type":"string","value":""},{"access":"read-write","comment":"","display":"Secondary Gateway IPv4","filter":"","name":"secondaryGatewayIpv4","type":"string","value":"0.0.0.0"},{"access":"read-write","comment":"","display":"Secondary Gateway IPv6","filter":"","name":"secondaryGatewayIpv6","type":"string","value":""}]', 19, '', 1742469466545, 'public'); -INSERT INTO "ne_config" VALUES (230, 'UPF', 'networkControlSnssaiList', 'Network Control SNSSAI List', 'array', '[{"access":"read-only","comment":"1~32","display":"Index","filter":"1~32","name":"index","type":"int","value":"1"},{"access":"read-write","comment":"","display":"SST","filter":"","name":"sst","type":"int","value":"1"},{"access":"read-write","comment":"","display":"SD","filter":"","name":"sd","type":"int","value":"1"},{"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","comment":"","display":"QER Max Support Mbps","filter":"","name":"qerMaxSupportMbps","type":"int","value":"0"},{"access":"read-write","comment":"","display":"Statistic Enabled","filter":"0~1","name":"statisticEnabled","type":"int","value":"0"},{"access":"read-write","comment":"","display":"Vlan ID Min","filter":"","name":"vlanIdMin","type":"int","value":"0"},{"access":"read-write","comment":"","display":"Vlan ID Max","filter":"","name":"vlanIdMax","type":"int","value":"0"}]', 21, '', 1742469466549, 'public'); -INSERT INTO "ne_config" VALUES (231, 'UPF', 'networkControlAclWhiteList', 'Network Control ACL White List', 'array', '[{"access":"read-only","comment":"1~32","display":"Index","filter":"1~32","name":"index","type":"int","value":"1"},{"access":"read-write","comment":"","display":"UE IPv4","filter":"","name":"ueIpv4","type":"string","value":"0.0.0.0"},{"access":"read-write","comment":"","display":"UE IPv4 Mask","filter":"","name":"ueIpv4Mask","type":"string","value":"255.255.255.0"},{"access":"read-write","comment":"","display":"UE IPv6","filter":"","name":"ueIpv6","type":"string","value":""},{"access":"read-write","comment":"","display":"UE IPv6 Prefix","filter":"1~128","name":"ueIpv6Prefix","type":"int","value":"64"},{"access":"read-write","comment":"","display":"Dst Server IPv4","filter":"","name":"dstServerIpv4","type":"string","value":"0.0.0.0"},{"access":"read-write","comment":"","display":"Dst Server IPv4 Mask","filter":"","name":"dstServerIpv4Mask","type":"string","value":"255.255.255.0"},{"access":"read-write","comment":"","display":"Dst Server IPv6","filter":"","name":"dstServerIpv6","type":"string","value":""},{"access":"read-write","comment":"","display":"Dst Server IPv6 Prefix","filter":"1~128","name":"dstServerIpv6Prefix","type":"int","value":"64"}]', 23, '', 1742469466554, 'public'); -INSERT INTO "ne_config" VALUES (232, 'UPF', 'networkControlAclBlackList', 'Network Control ACL Black List', 'array', '[{"access":"read-only","comment":"1~32","display":"Index","filter":"1~32","name":"index","type":"int","value":"1"},{"access":"read-write","comment":"","display":"UE IPv4","filter":"","name":"ueIpv4","type":"string","value":"0.0.0.0"},{"access":"read-write","comment":"","display":"UE IPv4 Mask","filter":"","name":"ueIpv4Mask","type":"string","value":"255.255.255.0"},{"access":"read-write","comment":"","display":"UE IPv6","filter":"","name":"ueIpv6","type":"string","value":""},{"access":"read-write","comment":"","display":"UE IPv6 Prefix","filter":"1~128","name":"ueIpv6Prefix","type":"int","value":"64"},{"access":"read-write","comment":"","display":"Dst Server IPv4","filter":"","name":"dstServerIpv4","type":"string","value":"0.0.0.0"},{"access":"read-write","comment":"","display":"Dst Server IPv4 Mask","filter":"","name":"dstServerIpv4Mask","type":"string","value":"255.255.255.0"},{"access":"read-write","comment":"","display":"Dst Server IPv6","filter":"","name":"dstServerIpv6","type":"string","value":""},{"access":"read-write","comment":"","display":"Dst Server IPv6 Prefix","filter":"1~128","name":"dstServerIpv6Prefix","type":"int","value":"64"}]', 25, '', 1742469466558, 'public'); -INSERT INTO "ne_config" VALUES (233, 'UPF', 'networkControlDnsServerList', 'Network Control DNS Server List', 'array', '[{"access":"read-only","comment":"1~32","display":"Index","filter":"1~32","name":"index","type":"int","value":"1"},{"access":"read-write","comment":"0~1","display":"Enabled","filter":"0~1","name":"enabled","type":"int","value":"0"},{"access":"read-write","comment":"","display":"DNS Name","filter":"","name":"dnsName","type":"string","value":""},{"access":"read-write","comment":"","display":"Server IPv4","filter":"","name":"serverIpv4","type":"string","value":"0.0.0.0"},{"access":"read-write","comment":"","display":"Server IPv6","filter":"","name":"serverIpv6","type":"string","value":""}]', 29, '', 1742469466567, 'public'); -INSERT INTO "ne_config" VALUES (234, 'UPF', 'dpiCommon', 'DPI Common', 'list', '[{"access":"read-write","comment":"","display":"Max Detect Packet Num","filter":"","name":"maxDetectPacketNum","type":"int","value":"20"},{"access":"read-write","comment":"","display":"HTTP Proto Enabled","filter":"0~1","name":"httpProtoEnabled","type":"int","value":"0"},{"access":"read-write","comment":"","display":"HTTPS Proto Enabled","filter":"0~1","name":"httpsProtoEnabled","type":"int","value":"0"}]', 31, '', 1742469466572, 'public'); -INSERT INTO "ne_config" VALUES (235, 'UPF', 'dpiHeaderEnrichInfoList', 'DPI Header Enrich Info List', 'array', '[{"access":"read-only","comment":"1~32","display":"Index","filter":"1~32","name":"index","type":"int","value":"1"},{"access":"read-write","comment":"","display":"Type","filter":"","name":"type","type":"int","value":"0"},{"access":"read-write","comment":"","display":"Name","filter":"","name":"name","type":"string","value":""},{"access":"read-write","comment":"","display":"Value","filter":"","name":"value","type":"string","value":""}]', 33, '', 1742469466576, 'public'); -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'); - -DELETE FROM "sys_config" WHERE "id" = 32; -INSERT INTO "sys_config" VALUES (32, 'config.neData.exportTableFTP', 'neData.exportTableFTP', 'VXEECeDMoYhX29pqsb753ecJOnPfxB6XrEa9QdUrRqwKI7EmJei5HlvehvL+wL0Osjo3Y2Qs7ADA6eL3SrisiVXAVVXv38KMhvcSU9eaAzl/jrY4ahsq6a/eSbzxFDgE21US7/YnsyDRG7eGAc7W5Q==', 'Y', '0', 'system', 1704960008300, 'system', 1704960008300, 'config.neData.exportTableFTPRemark'); -DELETE FROM "sys_config" WHERE "id" = 33; -INSERT INTO "sys_config" VALUES (33, 'config.ne.neConfigBackupFTP', 'ne.neConfigBackupFTP', 'DMb1TFtE/4yBjh/5HX41sMjkaBjIA/Wfqj+w/T0QC6zmYIA/sEHs4THOluwNyR0EEupRQWJI0xY9kUomhynu/lDd8QDtCWsKpFhzXyBofL1qAvruSnJMGP3uYrgFJGqaQ4pBGQpndyUvjiJE80Mo+w==', 'Y', '0', 'system', 1744265760822, 'admin', 1744265760822, 'config.ne.neConfigBackupFTPRemark'); - -DELETE FROM "sys_i18n" WHERE "id" = 73; -DELETE FROM "sys_i18n" WHERE "id" = 74; -INSERT INTO "sys_i18n" VALUES (73, '0', 'system', 1699348237468, 'system', 1699348237468, 'config.neData.exportTableFTP', '网元数据导出备份文件FTP服务', 'NeData Backup file FTP service'); -INSERT INTO "sys_i18n" VALUES (74, '0', 'system', 1699348237468, 'system', 1699348237468, 'config.neData.exportTableFTPRemark', '请通过网元数据导出列表页面进行设置FTP信息', 'Please set the FTP information through the export list page.'); - -DELETE FROM "sys_i18n" WHERE "id" = 670; -INSERT INTO "sys_i18n" VALUES (670, '0', 'system', 1699348237468, 'system', 1699348237468, 'config.ne.neConfigBackupFTP', '配置文件备份FTP服务', 'NE Config Backup file FTP service'); -DELETE FROM "sys_i18n" WHERE "id" = 671; -INSERT INTO "sys_i18n" VALUES (671, '0', 'system', 1699348237468, 'system', 1699348237468, 'config.ne.neConfigBackupFTPRemark', '请通过配置文件备份页面进行设置FTP信息', 'Please set the FTP information through the configuration file backup page.'); - -PRAGMA foreign_keys = true; \ No newline at end of file diff --git a/database/upgrade/upg_20250429.sql b/database/upgrade/upg_20250429.sql deleted file mode 100644 index 85c737a2..00000000 --- a/database/upgrade/upg_20250429.sql +++ /dev/null @@ -1,182 +0,0 @@ -PRAGMA foreign_keys = false; - - -INSERT INTO "sys_dict_data" VALUES (139, 'cdr_sip_code', 'dictData.cdr_sip_code.302', '302', 3, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); - -INSERT INTO "sys_dict_data" VALUES (140, 'cdr_sip_code', 'dictData.cdr_sip_code.402', '402', 4, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); - -INSERT INTO "sys_dict_data" VALUES (141, 'cdr_sip_code', 'dictData.cdr_sip_code.480', '480', 7, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); - -INSERT INTO "sys_dict_data" VALUES (142, 'cdr_sip_code', 'dictData.cdr_sip_code.481', '481', 8, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); - -INSERT INTO "sys_dict_data" VALUES (143, 'cdr_sip_code', 'dictData.cdr_sip_code.482', '482', 9, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); - -INSERT INTO "sys_dict_data" VALUES (144, 'cdr_sip_code', 'dictData.cdr_sip_code.486', '486', 11, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); - -INSERT INTO "sys_dict_data" VALUES (145, 'cdr_sip_code', 'dictData.cdr_sip_code.489', '489', 15, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); - -INSERT INTO "sys_dict_data" VALUES (146, 'cdr_sip_code', 'dictData.cdr_sip_code.580', '580', 19, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); - -INSERT INTO "sys_dict_data" VALUES (147, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.0', '0', 99, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); - -INSERT INTO "sys_dict_data" VALUES (148, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.200', '200', 1, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); - -INSERT INTO "sys_dict_data" VALUES (149, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.202', '202', 2, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); - -INSERT INTO "sys_dict_data" VALUES (150, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.302', '302', 3, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); - -INSERT INTO "sys_dict_data" VALUES (151, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.402', '402', 4, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); - -INSERT INTO "sys_dict_data" VALUES (152, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.403', '403', 5, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); - -INSERT INTO "sys_dict_data" VALUES (153, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.404', '404', 6, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); - -INSERT INTO "sys_dict_data" VALUES (154, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.480', '480', 7, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); - -INSERT INTO "sys_dict_data" VALUES (155, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.481', '481', 8, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); - -INSERT INTO "sys_dict_data" VALUES (156, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.482', '482', 9, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); - -INSERT INTO "sys_dict_data" VALUES (157, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.486', '486', 11, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); - -INSERT INTO "sys_dict_data" VALUES (158, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.487', '487', 12, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); - -INSERT INTO "sys_dict_data" VALUES (159, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.408', '408', 13, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); - -INSERT INTO "sys_dict_data" VALUES (160, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.488', '488', 14, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); - -INSERT INTO "sys_dict_data" VALUES (161, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.489', '489', 15, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); - -INSERT INTO "sys_dict_data" VALUES (162, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.500', '500', 16, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); - -INSERT INTO "sys_dict_data" VALUES (163, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.503', '503', 17, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); - -INSERT INTO "sys_dict_data" VALUES (164, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.504', '504', 18, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); - -INSERT INTO "sys_dict_data" VALUES (165, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.580', '580', 19, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); - -INSERT INTO "sys_dict_data" VALUES (166, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.603', '603', 21, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); - -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, ''); - -UPDATE "sys_dict_data" SET "dict_type" = 'cdr_sip_code', "data_label" = 'dictData.cdr_sip_code.403', "data_value" = '403', "data_sort" = 5, "tag_class" = '', "tag_type" = '', "status_flag" = '1', "del_flag" = '0', "create_by" = 'system', "create_time" = 1699348237468, "update_by" = 'system', "update_time" = 1699348237468, "remark" = '' WHERE "data_id" = 56; - -UPDATE "sys_dict_data" SET "dict_type" = 'cdr_sip_code', "data_label" = 'dictData.cdr_sip_code.408', "data_value" = '408', "data_sort" = 13, "tag_class" = '', "tag_type" = '', "status_flag" = '1', "del_flag" = '0', "create_by" = 'system', "create_time" = 1699348237468, "update_by" = 'system', "update_time" = 1699348237468, "remark" = '' WHERE "data_id" = 57; - -UPDATE "sys_dict_data" SET "dict_type" = 'cdr_sip_code', "data_label" = 'dictData.cdr_sip_code.500', "data_value" = '500', "data_sort" = 16, "tag_class" = '', "tag_type" = '', "status_flag" = '1', "del_flag" = '0', "create_by" = 'system', "create_time" = 1699348237468, "update_by" = 'system', "update_time" = 1699348237468, "remark" = '' WHERE "data_id" = 58; - -UPDATE "sys_dict_data" SET "dict_type" = 'cdr_sip_code', "data_label" = 'dictData.cdr_sip_code.404', "data_value" = '404', "data_sort" = 6, "tag_class" = '', "tag_type" = '', "status_flag" = '1', "del_flag" = '0', "create_by" = 'system', "create_time" = 1699348237468, "update_by" = 'system', "update_time" = 1699348237468, "remark" = '' WHERE "data_id" = 75; - -UPDATE "sys_dict_data" SET "dict_type" = 'cdr_sip_code', "data_label" = 'dictData.cdr_sip_code.487', "data_value" = '487', "data_sort" = 12, "tag_class" = '', "tag_type" = '', "status_flag" = '1', "del_flag" = '0', "create_by" = 'system', "create_time" = 1699348237468, "update_by" = 'system', "update_time" = 1699348237468, "remark" = '' WHERE "data_id" = 76; - -UPDATE "sys_dict_data" SET "dict_type" = 'cdr_sip_code', "data_label" = 'dictData.cdr_sip_code.503', "data_value" = '503', "data_sort" = 17, "tag_class" = '', "tag_type" = '', "status_flag" = '1', "del_flag" = '0', "create_by" = 'system', "create_time" = 1699348237468, "update_by" = 'system', "update_time" = 1699348237468, "remark" = '' WHERE "data_id" = 77; - -UPDATE "sys_dict_data" SET "dict_type" = 'cdr_sip_code', "data_label" = 'dictData.cdr_sip_code.504', "data_value" = '504', "data_sort" = 18, "tag_class" = '', "tag_type" = '', "status_flag" = '1', "del_flag" = '0', "create_by" = 'system', "create_time" = 1699348237468, "update_by" = 'system', "update_time" = 1699348237468, "remark" = '' WHERE "data_id" = 78; - -UPDATE "sys_dict_data" SET "dict_type" = 'cdr_sip_code', "data_label" = 'dictData.cdr_sip_code.603', "data_value" = '603', "data_sort" = 21, "tag_class" = '', "tag_type" = '', "status_flag" = '1', "del_flag" = '0', "create_by" = 'system', "create_time" = 1699348237468, "update_by" = 'system', "update_time" = 1699348237468, "remark" = '' WHERE "data_id" = 79; - -UPDATE "sys_dict_data" SET "dict_type" = 'cdr_sip_code', "data_label" = 'dictData.cdr_sip_code.606', "data_value" = '606', "data_sort" = 22, "tag_class" = '', "tag_type" = '', "status_flag" = '1', "del_flag" = '0', "create_by" = 'system', "create_time" = 1699348237468, "update_by" = 'system', "update_time" = 1699348237468, "remark" = '' WHERE "data_id" = 80; - -UPDATE "sys_dict_data" SET "dict_type" = 'cdr_sip_code', "data_label" = 'dictData.cdr_sip_code.202', "data_value" = '202', "data_sort" = 2, "tag_class" = '', "tag_type" = '', "status_flag" = '1', "del_flag" = '0', "create_by" = 'system', "create_time" = 1699348237468, "update_by" = 'system', "update_time" = 1699348237468, "remark" = '' WHERE "data_id" = 81; - -UPDATE "sys_dict_data" SET "dict_type" = 'cdr_sip_code', "data_label" = 'dictData.cdr_sip_code.488', "data_value" = '488', "data_sort" = 14, "tag_class" = '', "tag_type" = '', "status_flag" = '1', "del_flag" = '0', "create_by" = 'system', "create_time" = 1699348237468, "update_by" = 'system', "update_time" = 1699348237468, "remark" = '' WHERE "data_id" = 83; - -UPDATE "sys_dict_data" SET "dict_type" = 'cdr_sip_code', "data_label" = 'dictData.cdr_sip_code.0', "data_value" = '0', "data_sort" = 99, "tag_class" = '', "tag_type" = '', "status_flag" = '1', "del_flag" = '0', "create_by" = 'system', "create_time" = 1699348237468, "update_by" = 'system', "update_time" = 1699348237468, "remark" = '' WHERE "data_id" = 84; - -INSERT INTO "sys_dict_type" VALUES (71, 'dictType.cdr_sip_code_cause', 'cdr_sip_code_cause', '1', '0', 'system', 1699348237468, 'system', 1699348237468, ''); - -INSERT INTO "sys_i18n" VALUES (672, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code.302', '302 原因不明', '302 Unknown Reason'); - -INSERT INTO "sys_i18n" VALUES (673, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code.402', '402 原因不明', '402 Unknown Reason'); - -INSERT INTO "sys_i18n" VALUES (674, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code.480', '480 被叫挂断/拒接', '480 Temporarily Unavailable'); - -INSERT INTO "sys_i18n" VALUES (675, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code.481', '481 原因不明', '481 Unknown Reason'); - -INSERT INTO "sys_i18n" VALUES (676, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code.482', '482 发现环路', '482 Loop Detected'); - -INSERT INTO "sys_i18n" VALUES (677, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code.486', '486 这里很忙', '486 Busy Here'); - -INSERT INTO "sys_i18n" VALUES (678, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code.489', '489 原因不明', '489 Unknown Reason'); - -INSERT INTO "sys_i18n" VALUES (679, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code.580', '580 原因不明', '580 Unknown Reason'); - -INSERT INTO "sys_i18n" VALUES (700, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code_cause.0', '因其他原因呼叫失败', 'Call failure for other reason'); - -INSERT INTO "sys_i18n" VALUES (701, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code_cause.200', '正常通话清除', 'Normal Call Clearing'); - -INSERT INTO "sys_i18n" VALUES (702, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code_cause.202', '申请已被接受处理,但尚未完成 ', 'The request has been accepted for processing, but it hasn it completed yet'); - -INSERT INTO "sys_i18n" VALUES (703, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code_cause.302', '因其他原因呼叫失败', 'Call failure for other reason'); - -INSERT INTO "sys_i18n" VALUES (704, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code_cause.402', '因其他原因呼叫失败', 'Call failure for other reason'); - -INSERT INTO "sys_i18n" VALUES (705, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code_cause.403', '拒绝 MO 用户', 'MO User Rejected'); - -INSERT INTO "sys_i18n" VALUES (706, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code_cause.404', 'MT 用户离线', 'MT User Offline'); - -INSERT INTO "sys_i18n" VALUES (707, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code_cause.480', '因其他原因呼叫失败', 'Call failure for other reason'); - -INSERT INTO "sys_i18n" VALUES (708, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code_cause.481', '电话无法拨出', 'Call cannot be dialed'); - -INSERT INTO "sys_i18n" VALUES (709, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code_cause.482', '闪断', 'Flashback'); - -INSERT INTO "sys_i18n" VALUES (710, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code_cause.486', 'MT 用户忙', 'MT User Busy'); - -INSERT INTO "sys_i18n" VALUES (711, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code_cause.487', 'MO 用户断线', 'MO User Disconnected'); - -INSERT INTO "sys_i18n" VALUES (712, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code_cause.408', '服务器等待响应的时间过长', 'The server waits too long for a response'); - -INSERT INTO "sys_i18n" VALUES (713, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code_cause.488', '媒体详细信息与服务器支持的内容不匹配', 'Media details didn’t match what the server supports'); - -INSERT INTO "sys_i18n" VALUES (714, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code_cause.489', '因其他原因呼叫失败', 'Call failure for other reason'); - -INSERT INTO "sys_i18n" VALUES (715, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code_cause.500', '服务器本身出了问题', 'Something went wrong inside the server itself'); - -INSERT INTO "sys_i18n" VALUES (716, '0', 'system', 1699348237468, 'system', 1699348237468, '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 (717, '0', 'system', 1699348237468, 'system', 1699348237468, '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 (718, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code_cause.580', '因其他原因呼叫失败', 'Call failure for other reason'); - -INSERT INTO "sys_i18n" VALUES (719, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictData.cdr_sip_code_cause.603', 'MT 明确拒绝通话', 'MT explicitly rejected the call'); - -INSERT INTO "sys_i18n" VALUES (720, '0', 'system', 1699348237468, 'system', 1699348237468, '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 (721, '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.cdr_sip_code_cause', 'IMS-Voice-SIP响应代码类别类型原因', 'IMS-Voice-SIP Response Code Category Type Cause'); - -UPDATE "sys_i18n" SET "del_flag" = '0', "create_by" = 'system', "create_time" = 1699348237468, "update_by" = 'system', "update_time" = 1745898491745, "key_lable" = 'config.sys.titleValue', "value_zh" = 'BlueArcus EMS', "value_en" = 'BlueArcus EMS' WHERE "id" = 281; - -UPDATE "sys_i18n" SET "del_flag" = '0', "create_by" = 'system', "create_time" = 1699348237468, "update_by" = 'system', "update_time" = 1699348237468, "key_lable" = 'dictType.cdr_sip_code', "value_zh" = 'IMS-Voice-SIP响应代码类别类型', "value_en" = 'IMS-Voice-SIP Response Code Category Type' WHERE "id" = 516; - -UPDATE "sys_i18n" SET "del_flag" = '0', "create_by" = 'system', "create_time" = 1699348237468, "update_by" = 'system', "update_time" = 1699348237468, "key_lable" = 'dictType.cdr_call_type', "value_zh" = 'IMS-呼叫类型', "value_en" = 'IMS-Call Type' WHERE "id" = 517; - -UPDATE "sys_i18n" SET "del_flag" = '0', "create_by" = 'system', "create_time" = 1699348237468, "update_by" = 'system', "update_time" = 1699348237468, "key_lable" = 'dictData.cdr_sip_code.200', "value_zh" = '200 正常通话', "value_en" = '200 OK' WHERE "id" = 520; - -UPDATE "sys_i18n" SET "del_flag" = '0', "create_by" = 'system', "create_time" = 1699348237468, "update_by" = 'system', "update_time" = 1699348237468, "key_lable" = 'dictData.cdr_sip_code.403', "value_zh" = '403 禁止访问', "value_en" = '403 Forbidden' WHERE "id" = 521; - -UPDATE "sys_i18n" SET "del_flag" = '0', "create_by" = 'system', "create_time" = 1699348237468, "update_by" = 'system', "update_time" = 1699348237468, "key_lable" = 'dictData.cdr_sip_code.408', "value_zh" = '408 请求超时', "value_en" = '408 Request Timeout' WHERE "id" = 522; - -UPDATE "sys_i18n" SET "del_flag" = '0', "create_by" = 'system', "create_time" = 1699348237468, "update_by" = 'system', "update_time" = 1699348237468, "key_lable" = 'dictData.cdr_sip_code.500', "value_zh" = '500 内部服务器错误', "value_en" = '500 Internal Server Error' WHERE "id" = 523; - -UPDATE "sys_i18n" SET "del_flag" = '0', "create_by" = 'system', "create_time" = 1699348237468, "update_by" = 'system', "update_time" = 1699348237468, "key_lable" = 'dictData.cdr_sip_code.404', "value_zh" = '404 找不到', "value_en" = '404 Not Found' WHERE "id" = 541; - -UPDATE "sys_i18n" SET "del_flag" = '0', "create_by" = 'system', "create_time" = 1699348237468, "update_by" = 'system', "update_time" = 1699348237468, "key_lable" = 'dictData.cdr_sip_code.487', "value_zh" = '487 请求已终止', "value_en" = '487 Request Terminated' WHERE "id" = 542; - -UPDATE "sys_i18n" SET "del_flag" = '0', "create_by" = 'system', "create_time" = 1699348237468, "update_by" = 'system', "update_time" = 1699348237468, "key_lable" = 'dictData.cdr_sip_code.503', "value_zh" = '503 服务不可用', "value_en" = '503 Service Unavailable' WHERE "id" = 543; - -UPDATE "sys_i18n" SET "del_flag" = '0', "create_by" = 'system', "create_time" = 1699348237468, "update_by" = 'system', "update_time" = 1699348237468, "key_lable" = 'dictData.cdr_sip_code.504', "value_zh" = '504 服务器超时', "value_en" = '504 Server Timeout' WHERE "id" = 544; - -UPDATE "sys_i18n" SET "del_flag" = '0', "create_by" = 'system', "create_time" = 1699348237468, "update_by" = 'system', "update_time" = 1699348237468, "key_lable" = 'dictData.cdr_sip_code.603', "value_zh" = '603 下降', "value_en" = '603 Decline' WHERE "id" = 545; - -UPDATE "sys_i18n" SET "del_flag" = '0', "create_by" = 'system', "create_time" = 1699348237468, "update_by" = 'system', "update_time" = 1699348237468, "key_lable" = 'dictData.cdr_sip_code.606', "value_zh" = '606 不可接受', "value_en" = '606 Not Acceptable' WHERE "id" = 546; - -UPDATE "sys_i18n" SET "del_flag" = '0', "create_by" = 'system', "create_time" = 1699348237468, "update_by" = 'system', "update_time" = 1699348237468, "key_lable" = 'dictData.cdr_sip_code.202', "value_zh" = '202 已接受', "value_en" = '202 Accepted' WHERE "id" = 557; - -UPDATE "sys_i18n" SET "del_flag" = '0', "create_by" = 'system', "create_time" = 1699348237468, "update_by" = 'system', "update_time" = 1699348237468, "key_lable" = 'dictData.cdr_sip_code.488', "value_zh" = '488 这里不接受', "value_en" = '488 Not Acceptable Here' WHERE "id" = 558; - -UPDATE "sys_i18n" SET "del_flag" = '0', "create_by" = 'system', "create_time" = 1699348237468, "update_by" = 'system', "update_time" = 1699348237468, "key_lable" = 'dictData.cdr_sip_code.0', "value_zh" = '0 原因不明', "value_en" = '0 Unknown Reason' WHERE "id" = 559; - -UPDATE "sys_i18n" SET "del_flag" = '0', "create_by" = 'system', "create_time" = 1699348237468, "update_by" = 'system', "update_time" = 1699348237468, "key_lable" = 'menu.ne.neVersion', "value_zh" = '网元版本', "value_en" = 'NE Version' WHERE "id" = 603; - -PRAGMA foreign_keys = true; \ No newline at end of file diff --git a/features/cm/ne.go b/features/cm/ne.go index 18b2ce30..f9cc9670 100644 --- a/features/cm/ne.go +++ b/features/cm/ne.go @@ -863,7 +863,7 @@ func PostNeServiceAction(w http.ResponseWriter, r *http.Request) { // 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 restagent", action) + actionCmd := fmt.Sprintf("sudo systemctl %s omc", action) go RunSSHCmd(sshHost, actionCmd) return // cmd := exec.Command("ssh", sshHost, actionCmd) diff --git a/features/cm/omc/route.go b/features/cm/omc/route.go index 906cb1e7..e97f7b5f 100644 --- a/features/cm/omc/route.go +++ b/features/cm/omc/route.go @@ -11,19 +11,19 @@ func Register(r *gin.RouterGroup) { { var o *ConfigOMC cmOMC.GET("/config/:paramName", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), o.Get, ) cmOMC.POST("/config/:paramName", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), o.Post, ) cmOMC.PUT("/config/:paramName", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), o.Put, ) cmOMC.DELETE("/config/:paramName", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), o.Delete, ) } diff --git a/features/lm/file_export/controller.go b/features/lm/file_export/controller.go index 60c09fbf..54eeed7c 100644 --- a/features/lm/file_export/controller.go +++ b/features/lm/file_export/controller.go @@ -4,7 +4,6 @@ import ( "encoding/json" "net/http" "os" - "path" "path/filepath" "be.ems/lib/file" @@ -13,9 +12,6 @@ import ( "be.ems/src/framework/database/db" "be.ems/src/framework/i18n" "be.ems/src/framework/reqctx" - "be.ems/src/framework/resp" - "be.ems/src/framework/ssh" - systemService "be.ems/src/modules/system/service" "github.com/gin-gonic/gin" ) @@ -140,133 +136,3 @@ func (m *FileExport) Delete(c *gin.Context) { } c.JSON(http.StatusNoContent, nil) // 204 No Content } - -// 设置FTP配置 -// POST /table/ftp -func (m *SysJob) SetFTPConfig(c *gin.Context) { - language := reqctx.AcceptLanguage(c) - var body struct { - Password string `json:"password" ` - Username string `json:"username" binding:"required"` - ToIp string `json:"toIp" binding:"required"` - ToPort int64 `json:"toPort" binding:"required"` - Enable bool `json:"enable"` - Dir string `json:"dir" binding:"required"` - } - if err := c.ShouldBindBodyWithJSON(&body); err != nil { - c.JSON(400, resp.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) - return - } - - // 获取配置 - cfg := systemService.NewSysConfig.FindByKey("neData.exportTableFTP") - if cfg.ConfigId > 0 { - byteData, err := json.Marshal(body) - if err != nil { - c.JSON(200, resp.ErrMsg(err.Error())) - return - } - cfg.ConfigValue = string(byteData) - cfg.UpdateBy = reqctx.LoginUserToUserName(c) - systemService.NewSysConfig.UpdateEncryptValue(cfg) - } - - c.JSON(200, resp.Ok(nil)) -} - -// 获取FTP配置 -// GET /table/ftp -func (m *SysJob) GetFTPConfig(c *gin.Context) { - // 获取配置 - cfg := systemService.NewSysConfig.FindByKeyDecryptValue("neData.exportTableFTP") - if cfg.ConfigId > 0 { - var body struct { - Password string `json:"password" ` - Username string `json:"username" binding:"required"` - ToIp string `json:"toIp" binding:"required"` - ToPort int64 `json:"toPort" binding:"required"` - Enable bool `json:"enable"` - Dir string `json:"dir" binding:"required"` - } - if err := json.Unmarshal([]byte(cfg.ConfigValue), &body); err != nil { - c.JSON(200, resp.ErrMsg(err.Error())) - return - } - c.JSON(200, resp.OkData(body)) - return - } - - c.JSON(200, resp.Ok(nil)) -} - -// FTP发送 -// PUT /table/ftp -func (m *SysJob) PutFTP(c *gin.Context) { - language := reqctx.AcceptLanguage(c) - var body struct { - FilePath string `json:"filePath" binding:"required"` - FileName string `json:"fileName" binding:"required"` - } - if err := c.ShouldBindBodyWithJSON(&body); err != nil { - c.JSON(400, resp.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) - return - } - - localFilePath := filepath.Join(body.FilePath, body.FileName) - - // 判断文件是否存在 - if _, err := os.Stat(localFilePath); os.IsNotExist(err) { - c.JSON(200, resp.ErrMsg(err.Error())) - return - } - - // 获取配置 - var cfgData struct { - Password string `json:"password" ` - Username string `json:"username" binding:"required"` - ToIp string `json:"toIp" binding:"required"` - ToPort int64 `json:"toPort" binding:"required"` - Enable bool `json:"enable"` - Dir string `json:"dir" binding:"required"` - } - cfg := systemService.NewSysConfig.FindByKeyDecryptValue("neData.exportTableFTP") - if cfg.ConfigId > 0 { - if err := json.Unmarshal([]byte(cfg.ConfigValue), &cfgData); err != nil { - c.JSON(200, resp.ErrMsg(err.Error())) - return - } - } - if !cfgData.Enable { - c.JSON(200, resp.ErrMsg("Setting Remote Backup is disabled")) - return - } - - connSSH := ssh.ConnSSH{ - User: cfgData.Username, - Password: cfgData.Password, - Addr: cfgData.ToIp, - Port: cfgData.ToPort, - AuthMode: "0", - } - sshClient, err := connSSH.NewClient() - if err != nil { - c.JSON(200, resp.ErrMsg(err.Error())) - return - } - defer sshClient.Close() - // 网元主机的SSH客户端进行文件传输 - sftpClient, err := sshClient.NewClientSFTP() - if err != nil { - c.JSON(200, resp.ErrMsg(err.Error())) - return - } - defer sftpClient.Close() - // 远程文件 - remotePath := filepath.Join(cfgData.Dir, path.Base(body.FilePath), body.FileName) - // 复制到远程 - if err = sftpClient.CopyFileLocalToRemote(localFilePath, remotePath); err != nil { - c.JSON(200, resp.ErrMsg("error uploading file")) - return - } - c.JSON(200, resp.Ok(nil)) -} diff --git a/features/lm/file_export/route.go b/features/lm/file_export/route.go index d0f618f5..de9a05e6 100644 --- a/features/lm/file_export/route.go +++ b/features/lm/file_export/route.go @@ -12,41 +12,27 @@ func Register(r *gin.RouterGroup) { { var m *SysJob lmTable.GET("/list", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), m.GetFileExportTable, ) - lmTable.POST("/ftp", - middleware.PreAuthorize(nil), - middleware.CryptoApi(true, false), - m.SetFTPConfig, - ) - lmTable.GET("/ftp", - middleware.PreAuthorize(nil), - middleware.CryptoApi(false, true), - m.GetFTPConfig, - ) - lmTable.PUT("/ftp", - middleware.PreAuthorize(nil), - m.PutFTP, - ) } lmFile := r.Group("/file") { var f *FileExport lmFile.GET("/list", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), f.GetFileList, ) lmFile.GET("/total", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), f.Total, ) lmFile.GET("/:fileName", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), f.DownloadHandler, ) lmFile.DELETE("/:fileName", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), f.Delete, ) } diff --git a/features/mml/mml.go b/features/mml/mml.go index 97a23de6..867c41e6 100644 --- a/features/mml/mml.go +++ b/features/mml/mml.go @@ -101,7 +101,7 @@ func PostMML2ToNF(w http.ResponseWriter, r *http.Request) { buf := make([]byte, BUFFER_SIZE) var n int var mmlResult []string - hostMML := fmt.Sprintf("%s:%d", telnetHost.Addr, telnetHost.Port) + 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) @@ -345,7 +345,7 @@ func PostMMLToNF(w http.ResponseWriter, r *http.Request) { // log.Debug(string(buf[0:n])) for _, mml := range mmlRequest.MML { - hostMML := fmt.Sprintf("%s:%d", telnetHost.Addr, telnetHost.Port) + 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) @@ -410,7 +410,7 @@ func PostMMLToNF(w http.ResponseWriter, r *http.Request) { // mmlResult = append(mmlResult, "COMMAND OK\n") } case "ims": - hostMML := fmt.Sprintf("%s:%d", telnetHost.Addr, telnetHost.Port) + 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) @@ -529,7 +529,7 @@ func PostMMLToNF(w http.ResponseWriter, r *http.Request) { mmlResult = append(mmlResult, result) } default: - hostMML := fmt.Sprintf("%s:%d", telnetHost.Addr, telnetHost.Port) + 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) @@ -618,7 +618,7 @@ func PostMMLToNF(w http.ResponseWriter, r *http.Request) { mmlResult = append(mmlResult, result) // UDM 特殊命令处理 - if neType == "UDM" && strings.Contains(mml, "dec key") { + 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()) diff --git a/features/nbi/file/route.go b/features/nbi/file/route.go index f0cb58f6..45c87e62 100644 --- a/features/nbi/file/route.go +++ b/features/nbi/file/route.go @@ -11,15 +11,15 @@ func Register(r *gin.RouterGroup) { { var f *FileNBI fileNBI.GET("/:category/:type/list", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), f.GetFileList, ) fileNBI.GET("/:category/:type/:dateIndex", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), f.GetSingleFileHandler, ) fileNBI.GET("/:category/:type", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), f.GetMultiFileHandler, ) } diff --git a/features/pm/kpi_c_report/route.go b/features/pm/kpi_c_report/route.go index 7e64f95b..037d936c 100644 --- a/features/pm/kpi_c_report/route.go +++ b/features/pm/kpi_c_report/route.go @@ -12,31 +12,31 @@ func Register(r *gin.RouterGroup) { { var k *KpiCReport pmKPIC.GET("/report", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), k.GetReport2FE, ) pmKPIC.GET("/report/list", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), k.Get, ) pmKPIC.GET("/report/totalList", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), k.Total, ) pmKPIC.GET("/report/total", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), k.Total, ) pmKPIC.POST("/report", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), k.Post, ) pmKPIC.PUT("/report/:id", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), k.Put, ) pmKPIC.DELETE("/report/:id", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), k.Delete, ) } diff --git a/features/pm/kpi_c_title/route.go b/features/pm/kpi_c_title/route.go index f058dbe0..485f3f93 100644 --- a/features/pm/kpi_c_title/route.go +++ b/features/pm/kpi_c_title/route.go @@ -12,27 +12,27 @@ func Register(r *gin.RouterGroup) { { var k *KpiCTitle pmKPIC.GET("/title", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), k.Get, ) pmKPIC.GET("/title/total", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), k.Total, ) pmKPIC.GET("/title/totalList", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), k.GetToalList, ) pmKPIC.POST("/title", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), k.Post, ) pmKPIC.PUT("/title/:id", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), k.Put, ) pmKPIC.DELETE("/title/:id", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), k.Delete, ) } diff --git a/features/pm/performance.go b/features/pm/performance.go index ab4eba18..13771af8 100644 --- a/features/pm/performance.go +++ b/features/pm/performance.go @@ -695,7 +695,7 @@ func PostMeasureTaskToNF(w http.ResponseWriter, r *http.Request) { } log.Debug("ips:", ips) - measureTask.NotifyUrl = global.SetNotifyUrl(ips[0], config.GetYamlConfig().Rest[0].Port, fmt.Sprintf(MeasureReportFmt, neType)) + measureTask.NotifyUrl = global.SetNotifyUrl(ips[0], 33030, fmt.Sprintf(MeasureReportFmt, neType)) log.Debug("Measure Task to NF:", measureTask) if len(task.NeIds) == 0 { @@ -1124,9 +1124,9 @@ func PostMeasurementFromNF(w http.ResponseWriter, r *http.Request) { log.Debug("measurement:", measurement) // layout := global.DateTime - // layout := time.RFC3339 - // measurement.Date = GetDateFromTimeString(layout, measurement.StartTime) - // measurement.StartTime = GetDateTimeFromTimeString(layout, measurement.StartTime) + 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) @@ -1207,12 +1207,12 @@ func GetMeasurementFromNF(w http.ResponseWriter, r *http.Request) { 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 - } + // 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{}) diff --git a/features/state/getstate.go b/features/state/getstate.go index bcb9135c..40cb1a3b 100644 --- a/features/state/getstate.go +++ b/features/state/getstate.go @@ -21,6 +21,7 @@ import ( 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 { @@ -914,7 +915,15 @@ func GetEMSState(ip string) *SysState { 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{ @@ -922,7 +931,7 @@ func GetEMSState(ip string) *SysState { OsInfo: getUnameStr(), DbInfo: dbInfo, IpAddr: ipAddrs, - Port: config.GetYamlConfig().Rest[0].Port, + Port: port, Version: global.Version, Capability: CapabilityInt, SerialNum: snStr, diff --git a/go.mod b/go.mod index f2670ab7..373d24b3 100644 --- a/go.mod +++ b/go.mod @@ -1,153 +1,140 @@ module be.ems -go 1.22.0 +go 1.24.0 require ( - github.com/dlclark/regexp2 v1.11.4 + github.com/dlclark/regexp2 v1.11.5 github.com/gin-gonic/gin v1.10.0 - github.com/go-resty/resty/v2 v2.14.0 - github.com/go-sql-driver/mysql v1.8.1 - github.com/golang-jwt/jwt/v5 v5.2.1 - github.com/gopacket/gopacket v1.2.0 + 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/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/gorilla/websocket v1.5.3 - github.com/gosnmp/gosnmp v1.38.0 + github.com/gosnmp/gosnmp v1.40.0 github.com/lestrrat/go-file-rotatelogs v0.0.0-20180223000712-d3151e2a480f - github.com/linxGnu/gosmpp v0.3.0 + github.com/linxGnu/gosmpp v0.3.1 github.com/matoous/go-nanoid/v2 v2.1.0 - github.com/metaleap/go-xsd v0.0.0-20180330193350-61f7638f502f - github.com/mojocn/base64Captcha v1.3.6 + github.com/mojocn/base64Captcha v1.3.8 github.com/mssola/useragent v1.0.0 - github.com/patrickmn/go-cache v2.1.0+incompatible - github.com/pkg/sftp v1.13.6 - github.com/prometheus-community/pro-bing v0.5.0 - github.com/redis/go-redis/v9 v9.7.0 + 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.7.3 github.com/robfig/cron/v3 v3.0.1 - github.com/shirou/gopsutil/v4 v4.24.12 + github.com/shirou/gopsutil/v4 v4.25.3 github.com/slayercat/GoSNMPServer v0.5.2 - github.com/spf13/pflag v1.0.5 - github.com/spf13/viper v1.19.0 + github.com/spf13/pflag v1.0.6 + 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/xuri/excelize/v2 v2.9.0 - github.com/xuri/xgen v0.0.0-20240722131518-d0691b701898 - golang.org/x/crypto v0.31.0 - golang.org/x/net v0.33.0 - golang.org/x/term v0.28.0 - golang.org/x/text v0.21.0 + golang.org/x/crypto v0.37.0 + golang.org/x/term v0.31.0 + golang.org/x/text v0.24.0 gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df gopkg.in/yaml.v3 v3.0.1 gorm.io/driver/mysql v1.5.7 - gorm.io/gorm v1.25.11 + gorm.io/gorm v1.25.12 xorm.io/xorm v1.3.9 ) -require ( - github.com/dustin/go-humanize v1.0.1 // indirect - github.com/glebarez/go-sqlite v1.21.2 // indirect - github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect - modernc.org/libc v1.22.5 // indirect - modernc.org/mathutil v1.5.0 // indirect - modernc.org/memory v1.5.0 // indirect -) - require ( filippo.io/edwards25519 v1.1.0 // indirect github.com/KyleBanks/depth v1.2.1 // indirect github.com/beorn7/perks v1.0.1 // indirect - github.com/bytedance/sonic v1.12.1 // indirect - github.com/bytedance/sonic/loader v0.2.0 // indirect + github.com/bits-and-blooms/bitset v1.2.0 // indirect + github.com/bytedance/sonic v1.13.2 // indirect + github.com/bytedance/sonic/loader v0.2.4 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect - github.com/chenjiandongx/ginprom v0.0.0-20210617023641-6c809602c38a - github.com/cloudwego/base64x v0.1.4 // indirect - github.com/cloudwego/iasm v0.2.0 // indirect + github.com/cloudwego/base64x v0.1.5 // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect - github.com/ebitengine/purego v0.8.1 // 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/fsnotify/fsnotify v1.7.0 // indirect - github.com/gabriel-vasile/mimetype v1.4.5 // indirect - github.com/gin-contrib/sse v0.1.0 // indirect - github.com/glebarez/sqlite v1.11.0 - github.com/go-forks/fsnotify v1.4.7 // 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-ole/go-ole v1.3.0 // indirect - github.com/go-openapi/jsonpointer v0.21.0 // indirect + github.com/go-openapi/jsonpointer v0.21.1 // indirect github.com/go-openapi/jsonreference v0.21.0 // indirect github.com/go-openapi/spec v0.21.0 // indirect - github.com/go-openapi/swag v0.23.0 // indirect + github.com/go-openapi/swag v0.23.1 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect - github.com/go-playground/validator/v10 v10.22.0 - github.com/goccy/go-json v0.10.3 // indirect + github.com/go-playground/validator/v10 v10.26.0 + github.com/go-viper/mapstructure/v2 v2.2.1 // indirect + github.com/goccy/go-json v0.10.5 // indirect github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect - github.com/golang/snappy v0.0.4 // indirect + github.com/golang/snappy v1.0.0 // indirect github.com/google/uuid v1.6.0 // indirect - github.com/hashicorp/hcl v1.0.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.4.0 // 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/compress v1.17.9 // indirect - github.com/klauspost/cpuid/v2 v2.2.8 // indirect - github.com/konsorten/go-windows-terminal-sequences v1.0.1 // 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-20240513124658-fba389f38bae // indirect - github.com/magiconair/properties v1.8.7 // 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.22 // indirect - github.com/metaleap/go-util v0.0.0-20180330192724-a09253046f73 // indirect - github.com/mitchellh/mapstructure v1.5.0 // 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.21.1 // 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.2 // indirect + github.com/pelletier/go-toml/v2 v2.2.4 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect - github.com/prometheus/client_golang v1.20.0 - github.com/prometheus/client_model v0.6.1 // indirect - github.com/prometheus/common v0.55.0 // indirect - github.com/prometheus/procfs v0.15.1 // indirect + github.com/prometheus/client_golang v1.22.0 + github.com/prometheus/client_model v0.6.2 // indirect + github.com/prometheus/common v0.63.0 // indirect + github.com/prometheus/procfs v0.16.0 // indirect + github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/richardlehane/mscfb v1.0.4 // indirect github.com/richardlehane/msoleps v1.0.4 // indirect - github.com/sagikazarmark/locafero v0.6.0 // indirect - github.com/sagikazarmark/slog-shim v0.1.0 // indirect - github.com/shirou/gopsutil/v3 v3.23.11 // 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.4.2 // indirect + github.com/sirupsen/logrus v1.9.3 // indirect github.com/sourcegraph/conc v0.3.0 // indirect - github.com/spf13/afero v1.11.0 // indirect - github.com/spf13/cast v1.7.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.14 // indirect - github.com/tklauser/numcpus v0.8.0 // 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 github.com/ugorji/go/codec v1.2.12 // indirect - github.com/xuri/efp v0.0.0-20240408161823-9ad904a10d6d // indirect - github.com/xuri/nfp v0.0.0-20240318013403-ab9948c2c4a7 // indirect + github.com/xuri/efp v0.0.0-20250227110027-3491fafc2b79 // indirect + github.com/xuri/nfp v0.0.0-20250226145837-86d5fc24b2ba // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/arch v0.9.0 // indirect - golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa // indirect - golang.org/x/image v0.19.0 // indirect - golang.org/x/sync v0.10.0 // indirect - golang.org/x/sys v0.29.0 // indirect - golang.org/x/tools v0.28.0 // indirect - golang.org/x/tools/cmd/guru v0.1.1-deprecated // indirect - google.golang.org/protobuf v1.34.2 // indirect + 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.13.0 // indirect + golang.org/x/sys v0.32.0 // indirect + golang.org/x/tools v0.32.0 // indirect + google.golang.org/protobuf v1.36.6 // indirect gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect - gopkg.in/ini.v1 v1.67.0 // indirect - modernc.org/sqlite v1.23.1 // 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 5130a032..47e3fb30 100644 --- a/go.sum +++ b/go.sum @@ -7,87 +7,87 @@ github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE= 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= +github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs= github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c= github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA= github.com/bsm/gomega v1.27.10/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0= -github.com/bytedance/sonic v1.12.1 h1:jWl5Qz1fy7X1ioY74WqO0KjAMtAGQs4sYnjiEBiyX24= -github.com/bytedance/sonic v1.12.1/go.mod h1:B8Gt/XvtZ3Fqj+iSKMypzymZxw/FVwgIGKzMzT9r/rk= +github.com/bytedance/sonic v1.13.2 h1:8/H1FempDZqC4VqjptGo14QQlJx8VdZJegxs6wwfqpQ= +github.com/bytedance/sonic v1.13.2/go.mod h1:o68xyaF9u2gvVBuGHPlUVCy+ZfmNNO5ETf1+KgkJhz4= github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= -github.com/bytedance/sonic/loader v0.2.0 h1:zNprn+lsIP06C/IqCHs3gPQIvnvpKbbxyXQP1iU4kWM= -github.com/bytedance/sonic/loader v0.2.0/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= +github.com/bytedance/sonic/loader v0.2.4 h1:ZWCw4stuXUsn1/+zQDqeE7JKP+QO47tz7QCNan80NzY= +github.com/bytedance/sonic/loader v0.2.4/go.mod h1:N8A3vUdtUebEY2/VQC0MyhYeKUFosQU6FxH2JmUe6VI= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/chenjiandongx/ginprom v0.0.0-20210617023641-6c809602c38a h1:yTfhjWYoPomJkHVArtNHpo36FuOa6Kc2ZjTLvyyQ5Lg= -github.com/chenjiandongx/ginprom v0.0.0-20210617023641-6c809602c38a/go.mod h1:lINNCb1ZH3c0uL/9ApaQ8muR4QILsi0STj8Ojt8ZmwU= -github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/0Y= -github.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w= -github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg= +github.com/cloudwego/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/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= -github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= -github.com/dlclark/regexp2 v1.11.4 h1:rPYF9/LECdNymJufQKmri9gV604RvvABwgOA8un7yAo= -github.com/dlclark/regexp2 v1.11.4/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= +github.com/dlclark/regexp2 v1.11.5 h1:Q/sSnsKerHeCkc/jSTNq1oCm7KiVgUMZRDUoRu0JQZQ= +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.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE= -github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= +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/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.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= -github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= -github.com/gabriel-vasile/mimetype v1.4.5 h1:J7wGKdGu33ocBOhGy0z653k/lFKLFDPJMG8Gql0kxn4= -github.com/gabriel-vasile/mimetype v1.4.5/go.mod h1:ibHel+/kbxn9x2407k1izTA1S81ku1z/DlgOW2QE0M4= +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= +github.com/gabriel-vasile/mimetype v1.4.8/go.mod h1:ByKUIKGjh1ODkGM1asKUbQZOLGrPjydw3hYPU2YU9t8= github.com/gin-contrib/gzip v0.0.6 h1:NjcunTcGAj5CO1gn4N8jHOSIeRFHIbn51z6K+xaN4d4= github.com/gin-contrib/gzip v0.0.6/go.mod h1:QOJlmV2xmayAjkNS2Y8NQsMneuRShOU/kjovCXNuzzk= -github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= -github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= +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/glebarez/go-sqlite v1.21.2 h1:3a6LFC4sKahUunAmynQKLZceZCOzUthkRkEAl9gAXWo= -github.com/glebarez/go-sqlite v1.21.2/go.mod h1:sfxdZyhQjTM2Wry3gVYWaW072Ri1WMdWJi0k6+3382k= +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-forks/fsnotify v1.4.7 h1:lyiU2Wqd4fNGCQDn9dZ4UxSiSFgeU1rM6yIfahk8haY= -github.com/go-forks/fsnotify v1.4.7/go.mod h1:AU8mot+GznW5+B4jRJHxKg/2EeO+jMORGRkKSxs0biw= github.com/go-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= -github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ= -github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY= +github.com/go-openapi/jsonpointer v0.21.1 h1:whnzv/pNXtK2FbX/W9yJfRmE2gsmkfahjMKB0fZvcic= +github.com/go-openapi/jsonpointer v0.21.1/go.mod h1:50I1STOfbY1ycR8jGz8DaMeLCdXiI6aDteEdRNNzpdk= github.com/go-openapi/jsonreference v0.21.0 h1:Rs+Y7hSXT83Jacb7kFyjn4ijOuVGSvOdF2+tg1TRrwQ= github.com/go-openapi/jsonreference v0.21.0/go.mod h1:LmZmgsrTkVg9LG4EaHeY8cBDslNPMo06cago5JNLkm4= github.com/go-openapi/spec v0.21.0 h1:LTVzPc3p/RzRnkQqLRndbAzjY0d0BCL72A6j3CdL9ZY= github.com/go-openapi/spec v0.21.0/go.mod h1:78u6VdPw81XU44qEWGhtr982gJ5BWg2c0I5XwVMotYk= -github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE= -github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ= +github.com/go-openapi/swag v0.23.1 h1:lpsStH0n2ittzTnbaSloVZLuB5+fvSY/+hnagBjSNZU= +github.com/go-openapi/swag v0.23.1/go.mod h1:STZs8TbRvEQQKUA+JZNAm3EWlgaOBGpyFDqQnDHMef0= github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= -github.com/go-playground/validator/v10 v10.22.0 h1:k6HsTZ0sTnROkhS//R0O+55JgM8C4Bx7ia+JlgcnOao= -github.com/go-playground/validator/v10 v10.22.0/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM= -github.com/go-resty/resty/v2 v2.14.0 h1:/rhkzsAqGQkozwfKS5aFAbb6TyKd3zyFRWcdRXLPCAU= -github.com/go-resty/resty/v2 v2.14.0/go.mod h1:IW6mekUOsElt9C7oWr0XRt9BNSD6D5rr9mhk6NjmNHg= +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.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y= -github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg= +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/goccy/go-json v0.10.3 h1:KZ5WoDbxAIgm2HNbYckL0se1fHD6rz5j4ywS6ebzDqA= -github.com/goccy/go-json v0.10.3/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= -github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk= -github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= +github.com/go-viper/mapstructure/v2 v2.2.1 h1:ZAaOCxANMuZx5RCeg0mBdEZk7DZasvvZIxtHqx8aGss= +github.com/go-viper/mapstructure/v2 v2.2.1/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/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= @@ -99,32 +99,31 @@ github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:W 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 v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= -github.com/golang/snappy v0.0.4/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 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= 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-20221118152302-e6195bd50e26 h1:Xim43kblpZXfIBQsbuBVKCudVG457BR2GZFIz3uw3hQ= -github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26/go.mod h1:dDKJzRmX4S37WGHujM7tX//fmj1uioxKzKxz3lo4HJo= +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.2.0 h1:eXbzFad7f73P1n2EJHQlsKuvIMJjVXK5tXoSca78I3A= -github.com/gopacket/gopacket v1.2.0/go.mod h1:BrAKEy5EOGQ76LSqh7DMAr7z0NNPdczWm2GxCG7+I8M= +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/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.38.0 h1:I5ZOMR8kb0DXAFg/88ACurnuwGwYkXWq3eLpJPHMEYc= -github.com/gosnmp/gosnmp v1.38.0/go.mod h1:FE+PEZvKrFz9afP9ii1W3cprXuVZ17ypCcyyfYuu5LY= -github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/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= @@ -132,21 +131,18 @@ github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD 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.4.0 h1:p4Cf1aMWXnXAUh8lVfewRBx1zaTSYKrKMF2g3ST4RZ4= -github.com/jonboulle/clockwork v0.4.0/go.mod h1:xgRqUGwRcjKCO1vbZUEtSLrqKoPSsUpK7fnezOII0kc= +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= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= -github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs= -github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= -github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= -github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= +github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= +github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.2.8 h1:+StwCXwm9PdpiEkPyzBXIy+M9KUb4ODm0Zarf1kS5BM= -github.com/klauspost/cpuid/v2 v2.2.8/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= +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 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk= 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= @@ -164,27 +160,19 @@ github.com/lestrrat/go-file-rotatelogs v0.0.0-20180223000712-d3151e2a480f h1:sgU github.com/lestrrat/go-file-rotatelogs v0.0.0-20180223000712-d3151e2a480f/go.mod h1:UGmTpUd3rjbtfIpwAPrcfmGf/Z1HS95TATB+m57TPB8= github.com/lestrrat/go-strftime v0.0.0-20180220042222-ba3bf9c1d042 h1:Bvq8AziQ5jFF4BHGAEDSqwPW1NJS3XshxbRCxtjFAZc= github.com/lestrrat/go-strftime v0.0.0-20180220042222-ba3bf9c1d042/go.mod h1:TPpsiPUEh0zFL1Snz4crhMlBe60PYxRHr5oFF3rRYg0= -github.com/linxGnu/gosmpp v0.3.0 h1:LL+eY+zc9Ei/YY0po9A6L6SHf8nPyGvqsLddttr/y/4= -github.com/linxGnu/gosmpp v0.3.0/go.mod h1:Ba6SULQql3IbF2A5Mtj3DqMKoFbx1pEz/8xyiOh8ZOs= +github.com/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-20240513124658-fba389f38bae h1:dIZY4ULFcto4tAFlj1FYZl8ztUZ13bdq+PLY+NOfbyI= -github.com/lufia/plan9stats v0.0.0-20240513124658-fba389f38bae/go.mod h1:ilwx/Dta8jXAgpFYFvSWEMwxmbWXyiUHkd5FwyKhb5k= -github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= -github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= +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= github.com/mailru/easyjson v0.9.0/go.mod h1:1+xMtQp2MRNVL/V1bOzuP3aP8VNwRW55fQUto+XFtTU= github.com/matoous/go-nanoid/v2 v2.1.0 h1:P64+dmq21hhWdtvZfEAofnvJULaRR1Yib0+PnU669bE= github.com/matoous/go-nanoid/v2 v2.1.0/go.mod h1:KlbGNQ+FhrUNIHUxZdL63t7tl4LaPkZNpUULS8H4uVM= github.com/mattn/go-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.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU= -github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= -github.com/metaleap/go-util v0.0.0-20180330192724-a09253046f73 h1:4vKVhAdype/dejZjdQZZXVTKLz8mD0oakKz128L+IFQ= -github.com/metaleap/go-util v0.0.0-20180330192724-a09253046f73/go.mod h1:l71/5fppWP5A6nqhcxz6wQAYok6pr/vM2+KHIy50/LY= -github.com/metaleap/go-xsd v0.0.0-20180330193350-61f7638f502f h1:eeJGcYszuvOpmuJxeq57LaOO8mJurfjpOHJJMfQSD0s= -github.com/metaleap/go-xsd v0.0.0-20180330193350-61f7638f502f/go.mod h1:WK3zEKtwVd/v+NM3lh1ZE6MdDfHsdOFFOD5Ezi4Hutg= -github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= -github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +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= @@ -192,12 +180,14 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw= github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= -github.com/mojocn/base64Captcha v1.3.6 h1:gZEKu1nsKpttuIAQgWHO+4Mhhls8cAKyiV2Ew03H+Tw= -github.com/mojocn/base64Captcha v1.3.6/go.mod h1:i5CtHvm+oMbj1UzEPXaA8IH/xHFZ3DGY3Wh3dBpZ28E= +github.com/mojocn/base64Captcha v1.3.8 h1:rrN9BhCwXKS8ht1e21kvR3iTaMgf4qPC9sRoV52bqEg= +github.com/mojocn/base64Captcha v1.3.8/go.mod h1:QFZy927L8HVP3+VV5z2b1EAEiv1KxVJKZbAucVgLUy4= github.com/mssola/useragent v1.0.0 h1:WRlDpXyxHDNfvZaPEut5Biveq86Ze4o4EMffyMxmH5o= github.com/mssola/useragent v1.0.0/go.mod h1:hz9Cqz4RXusgg1EdI4Al0INR62kP7aPSRNHnpU+b85Y= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/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= @@ -209,38 +199,36 @@ github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042 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.21.1 h1:OB/euWYIExnPBohllTicTHmGTrMaqJ67nIu80j0/uEM= -github.com/onsi/gomega v1.21.1/go.mod h1:iYAIXgPSaDHak0LCMA+AWBpIKBr8WZicMxnE8luStNc= +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/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc= -github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= -github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM= -github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs= +github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4= +github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= +github.com/penglongli/gin-metrics v0.1.13 h1:a1wyrXcbUVxL5w4c2TSv+9kyQA9qM1o23h0V6SdSHgQ= +github.com/penglongli/gin-metrics v0.1.13/go.mod h1:VEmSyx/9TwUG50IsPCgjMKOUuGO74V2lmkLZ6x1Dlko= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/sftp v1.13.6 h1:JFZT4XbOU7l77xGSpOdW+pwIMqP044IyjXX6FGyEKFo= -github.com/pkg/sftp v1.13.6/go.mod h1:tz1ryNURKu77RL+GuCzmoJYxQczL3wLNNpPWagdg4Qk= +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/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= -github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/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.5.0 h1:Fq+4BUXKIvsPtXUY8K+04ud9dkAuFozqGmRAyNUpffY= -github.com/prometheus-community/pro-bing v0.5.0/go.mod h1:1joR9oXdMEAcAJJvhs+8vNDvTg5thfAZcRFhcUozG2g= -github.com/prometheus/client_golang v1.20.0 h1:jBzTZ7B099Rg24tny+qngoynol8LtVYlA2bqx3vEloI= -github.com/prometheus/client_golang v1.20.0/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE= -github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= -github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= -github.com/prometheus/common v0.55.0 h1:KEi6DK7lXW/m7Ig5i47x0vRzuBsHuvJdi5ee6Y3G1dc= -github.com/prometheus/common v0.55.0/go.mod h1:2SECS4xJG1kd8XF9IcM1gMX6510RAEL65zxzNImwdc8= +github.com/prometheus-community/pro-bing v0.7.0 h1:KFYFbxC2f2Fp6c+TyxbCOEarf7rbnzr9Gw8eIb0RfZA= +github.com/prometheus-community/pro-bing v0.7.0/go.mod h1:Moob9dvlY50Bfq6i88xIwfyw7xLFHH69LUgx9n5zqCE= +github.com/prometheus/client_golang v1.22.0 h1:rb93p9lokFEsctTys46VnV1kLCDpVZ0a/Y92Vm0Zc6Q= +github.com/prometheus/client_golang v1.22.0/go.mod h1:R7ljNsLXhuQXYZYtw6GAE9AZg8Y7vEW5scdCXrWRXC0= +github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk= +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.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= -github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= -github.com/redis/go-redis/v9 v9.7.0 h1:HhLSs+B6O021gwzl+locl0zEDnyNkxMtf/Z3NNBMa9E= -github.com/redis/go-redis/v9 v9.7.0/go.mod h1:f6zhXITC7JUJIlPEiBOTXxJgPLdZcA93GewI7inzyWw= -github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +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.7.3 h1:YpPyAayJV+XErNsatSElgRZZVCwXX9QzkKYNvO7x0wM= +github.com/redis/go-redis/v9 v9.7.3/go.mod h1:bGUrSggJ9X9GUmZpZNEOQKaANxSGgOEBRltRTZHSvrA= 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= @@ -253,38 +241,37 @@ github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzG github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/sagikazarmark/locafero v0.6.0 h1:ON7AQg37yzcRPU69mt7gwhFEBwxI6P9T4Qu3N51bwOk= -github.com/sagikazarmark/locafero v0.6.0/go.mod h1:77OmuIc6VTraTXKXIs/uvUxKGUXjE1GbemJYHqdNjX0= -github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= -github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= -github.com/shirou/gopsutil/v3 v3.23.11 h1:i3jP9NjCPUz7FiZKxlMnODZkdSIp2gnzfrvsu9CuWEQ= +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/v4 v4.24.12 h1:qvePBOk20e0IKA1QXrIIU+jmk+zEiYVVx06WjBRlZo4= -github.com/shirou/gopsutil/v4 v4.24.12/go.mod h1:DCtMPAad2XceTeIAbGyVfycbYQNBGk2P8cvDi7/VN9o= +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.3 h1:SeA68lsu8gLggyMbmCn8cmp97V1TI9ld9sVzAUcKcKE= +github.com/shirou/gopsutil/v4 v4.25.3/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 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4= 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/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.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= -github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= -github.com/spf13/cast v1.7.0 h1:ntdiHjuueXFgm5nzDRdOS4yfT43P5Fnud6DH50rz/7w= -github.com/spf13/cast v1.7.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= -github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= -github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI= -github.com/spf13/viper v1.19.0/go.mod h1:GQUN9bilAbhU/jgc1bKs99f/suXKeUMct8Adx5+Ntkg= +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/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/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= 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= @@ -293,7 +280,6 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ 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.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= 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= @@ -309,11 +295,11 @@ github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpP 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/tklauser/go-sysconf v0.3.14 h1:g5vzr9iPFFz24v2KZXs/pvpvh8/V9Fw6vQK5ZZb78yU= -github.com/tklauser/go-sysconf v0.3.14/go.mod h1:1ym4lWMLUOhuBOPGtRcJm7tEGX4SCYNEEEtghGG/8uY= +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.8.0 h1:Mx4Wwe/FjZLeQsK/6kt2EOepwwSl7SmJrK5bV/dXYgY= -github.com/tklauser/numcpus v0.8.0/go.mod h1:ZJZlAY+dmR4eut8epnzf0u/VwodKmryxR8txiloSqBE= +github.com/tklauser/numcpus v0.10.0 h1:18njr6LDBk1zuna922MgdjQuJFjrdppsZG60sHGfjso= +github.com/tklauser/numcpus v0.10.0/go.mod h1:BiTKazU708GQTYF4mB+cmlpT2Is1gLk7XVuEeem8LsQ= 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= @@ -323,14 +309,12 @@ github.com/vishvananda/netlink v1.1.0 h1:1iyaYNBLmP6L0220aDnYQpo1QEV4t4hJ+xEEhhJ 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/xuri/efp v0.0.0-20240408161823-9ad904a10d6d h1:llb0neMWDQe87IzJLS4Ci7psK/lVsjIS2otl+1WyRyY= -github.com/xuri/efp v0.0.0-20240408161823-9ad904a10d6d/go.mod h1:ybY/Jr0T0GTCnYjKqmdwxyxn2BQf2RcQIIvex5QldPI= +github.com/xuri/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-20240318013403-ab9948c2c4a7 h1:hPVCafDV85blFTabnqKgNhDCkJX25eik94Si9cTER4A= -github.com/xuri/nfp v0.0.0-20240318013403-ab9948c2c4a7/go.mod h1:WwHg+CVyzlv/TX9xqBFXEZAuxOPxn2k1GNHwG41IIUQ= -github.com/xuri/xgen v0.0.0-20240722131518-d0691b701898 h1:qqSByV3qojIVp1XbrFgD3nO38w1m6aePzmknorZQmRc= -github.com/xuri/xgen v0.0.0-20240722131518-d0691b701898/go.mod h1:tBkmlRf8JH62H5fAW+BPFj0LNZWRmKglWTLFfpXhhbg= +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= @@ -339,24 +323,23 @@ github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= -golang.org/x/arch v0.9.0 h1:ub9TgUInamJ8mrZIGlBG6/4TqWeMszd4N8lNorbrr6k= -golang.org/x/arch v0.9.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= +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.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= 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.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M= -golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= -golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa h1:ELnwvuAXPNtPk1TJRuGkI9fDTwym6AYBu0qzT8AcHdI= -golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa/go.mod h1:akd2r19cwCdwSwWeIdzYQGa/EZZyqcOdwWiwj5L5eKQ= -golang.org/x/image v0.13.0/go.mod h1:6mmbMOeV28HuMTgA6OSRkdXKYw/t5W9Uwn2Yv1r3Yxk= -golang.org/x/image v0.19.0 h1:D9FX4QWkLfkeqaC62SonffIIuYdOk/UE2XKUBgRIBIQ= -golang.org/x/image v0.19.0/go.mod h1:y0zrRqlQRWQ5PXaYCOMLTW2fpsxZ8Qh9I/ohnInJEys= +golang.org/x/crypto v0.37.0 h1:kJNSjF/Xp7kU0iB2Z+9viTPMW4EqqsrywMXLJOOsXSE= +golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc= +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= @@ -366,8 +349,8 @@ 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.22.0 h1:D4nJWe9zXqHOmWqj4VMOJhvzj7bEZg4wEYa759z1pH4= -golang.org/x/mod v0.22.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= +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/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -376,16 +359,14 @@ golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwY 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.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= 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= 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.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE= -golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I= -golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4= +golang.org/x/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/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= @@ -396,8 +377,9 @@ 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 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.13.0 h1:AauUjRAJ9OSnvULf/ARrrVywoJDy0YS2AwQ98I37610= +golang.org/x/sync v0.13.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 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= @@ -415,6 +397,7 @@ golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7w 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= @@ -426,33 +409,31 @@ 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.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= -golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20= +golang.org/x/sys v0.32.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= -golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= 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.22.0/go.mod h1:F3qCibpT5AMpCRfhfT53vVJwhLtIVHhB9XDjfFvnMI4= -golang.org/x/term v0.28.0 h1:/Ts8HFuMR2E6IP/jlo7QVLZHggjKQbhu/7H0LJFr3Gg= -golang.org/x/term v0.28.0/go.mod h1:Sw/lC2IAUZ92udQNf3WodGtn4k/XoLyZoh8v/8uiwek= +golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= +golang.org/x/term v0.31.0 h1:erwDkOK1Msy6offm1mOgvspSkslFnIGsFnxOKoufg3o= +golang.org/x/term v0.31.0/go.mod h1:R4BeIy7D95HzImkxGkTW1UQTtP54tio2RyHz7PwK0aw= 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= -golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= 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.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= -golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= +golang.org/x/text v0.24.0 h1:dd5Bzh4yt5KYA8f9CJHCP4FB4D51c2c6JvN37xJJkJ0= +golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU= 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/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -464,10 +445,8 @@ 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.28.0 h1:WuB6qZ4RPCQo5aP3WdKZS7i595EdWqWR8vqJTlwTVK8= -golang.org/x/tools v0.28.0/go.mod h1:dcIOrVd3mfQKTgrDVQHqCPMWy6lnhfhtX3hLXYVLfRw= -golang.org/x/tools/cmd/guru v0.1.1-deprecated h1:WiL3pQGXG71u4N45C0eRkE2IcEMAiQdDZ2H5lGspNjM= -golang.org/x/tools/cmd/guru v0.1.1-deprecated/go.mod h1:yFb7vixnH8+ByFZ63niwlvUUxyTE/6ULZ6AiEHZwlTk= +golang.org/x/tools v0.32.0 h1:Q7N1vhpkQv7ybVzLFtTjvQya2ewbwNDZzUgfXGqtMWU= +golang.org/x/tools v0.32.0/go.mod h1:ZxrU41P/wAbZD8EDa6dDCa6XfpkhJ7HFMjHJXfBDu8s= 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= @@ -478,8 +457,8 @@ google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQ 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.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= -google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= +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= @@ -488,8 +467,6 @@ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EV 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/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= -gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= 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= @@ -497,34 +474,37 @@ 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.0/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.25.11 h1:/Wfyg1B/je1hnDx3sMkX+gAlxrlZpn6X0BXRlwXlvHg= -gorm.io/gorm v1.25.11/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ= -lukechampine.com/uint128 v1.2.0 h1:mBi/5l91vocEN8otkC5bDLhi2KdCticRiwbdB0O+rjI= -lukechampine.com/uint128 v1.2.0/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= -modernc.org/cc/v3 v3.40.0 h1:P3g79IUS/93SYhtoeaHW+kRCIrYaxJ27MFPv+7kaTOw= -modernc.org/cc/v3 v3.40.0/go.mod h1:/bTg4dnWkSXowUO6ssQKnOV0yMVxDYNIsIrzqTFDGH0= -modernc.org/ccgo/v3 v3.16.13 h1:Mkgdzl46i5F/CNR/Kj80Ri59hC8TKAhZrYSaqvkwzUw= -modernc.org/ccgo/v3 v3.16.13/go.mod h1:2Quk+5YgpImhPjv2Qsob1DnZ/4som1lJTodubIcoUkY= -modernc.org/libc v1.22.5 h1:91BNch/e5B0uPbJFgqbxXuOnxBQjlS//icfQEGmvyjE= -modernc.org/libc v1.22.5/go.mod h1:jj+Z7dTNX8fBScMVNRAYZ/jF91K8fdT2hYMThc3YjBY= -modernc.org/mathutil v1.5.0 h1:rV0Ko/6SfM+8G+yKiyI830l3Wuz1zRutdslNoQ0kfiQ= -modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= -modernc.org/memory v1.5.0 h1:N+/8c5rE6EqugZwHii4IFsaJ7MUhoWX07J5tC/iI5Ds= -modernc.org/memory v1.5.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= -modernc.org/opt v0.1.3 h1:3XOZf2yznlhC+ibLltsDGzABUGVx8J6pnFMS3E4dcq4= -modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= -modernc.org/sqlite v1.23.1 h1:nrSBg4aRQQwq59JpvGEQ15tNxoO5pX/kUjcRNwSAGQM= -modernc.org/sqlite v1.23.1/go.mod h1:OrDj17Mggn6MhE+iPbBNf7RGKODDE9NFT0f3EwDzJqk= -modernc.org/strutil v1.1.3 h1:fNMm+oJklMGYfU9Ylcywl0CO5O6nTfaowNsh2wpPjzY= -modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw= -modernc.org/token v1.0.1 h1:A3qvTqOwexpfZZeyI0FeGPDlSWX5pjZu9hF4lU+EKWg= -modernc.org/token v1.0.1/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= +gorm.io/gorm v1.25.12 h1:I0u8i2hWQItBq1WfE0o2+WuL9+8L21K9e2HHSTE/0f8= +gorm.io/gorm v1.25.12/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ= +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= +modernc.org/ccgo/v4 v4.25.1/go.mod h1:njjuAYiPflywOOrm3B7kCB444ONP5pAVr8PIEoE0uDw= +modernc.org/fileutil v1.3.0 h1:gQ5SIzK3H9kdfai/5x41oQiKValumqNTDXMvKo62HvE= +modernc.org/fileutil v1.3.0/go.mod h1:XatxS8fZi3pS8/hKG2GH/ArUogfxjpEKs3Ku3aK4JyQ= +modernc.org/gc/v2 v2.6.5 h1:nyqdV8q46KvTpZlsw66kWqwXRHdjIlJOhG6kxiV/9xI= +modernc.org/gc/v2 v2.6.5/go.mod h1:YgIahr1ypgfe7chRuJi2gD7DBQiKSLMPgBQe9oIiito= +modernc.org/libc v1.62.1 h1:s0+fv5E3FymN8eJVmnk0llBe6rOxCu/DEU+XygRbS8s= +modernc.org/libc v1.62.1/go.mod h1:iXhATfJQLjG3NWy56a6WVU73lWOcdYVxsvwCgoPljuo= +modernc.org/mathutil v1.7.1 h1:GCZVGXdaN8gTqB1Mf/usp1Y/hSqgI2vAGGP4jZMCxOU= +modernc.org/mathutil v1.7.1/go.mod h1:4p5IwJITfppl0G4sUEDtCr4DthTaT47/N3aT6MhfgJg= +modernc.org/memory v1.9.1 h1:V/Z1solwAVmMW1yttq3nDdZPJqV1rM05Ccq6KMSZ34g= +modernc.org/memory v1.9.1/go.mod h1:/JP4VbVC+K5sU2wZi9bHoq2MAkCnrt2r98UGeSK7Mjw= +modernc.org/opt v0.1.4 h1:2kNGMRiUjrp4LcaPuLY2PzUfqM/w9N23quVwhKt5Qm8= +modernc.org/opt v0.1.4/go.mod h1:03fq9lsNfvkYSfxrfUhZCWPk1lm4cq4N+Bh//bEtgns= +modernc.org/sortutil v1.2.1 h1:+xyoGf15mM3NMlPDnFqrteY07klSFxLElE2PVuWIJ7w= +modernc.org/sortutil v1.2.1/go.mod h1:7ZI3a3REbai7gzCLcotuw9AC4VZVpYMjDzETGsSMqJE= +modernc.org/sqlite v1.37.0 h1:s1TMe7T3Q3ovQiK2Ouz4Jwh7dw4ZDqbebSDTlSJdfjI= +modernc.org/sqlite v1.37.0/go.mod h1:5YiWv+YviqGMuGw4V+PNplcyaJ5v+vQd7TQOgkACoJM= +modernc.org/strutil v1.2.1 h1:UneZBkQA+DX2Rp35KcM69cSsNES9ly8mQWD71HKlOA0= +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= diff --git a/lib/config/config.go b/lib/config/config.go index 31656d7f..25818264 100644 --- a/lib/config/config.go +++ b/lib/config/config.go @@ -22,39 +22,6 @@ type YamlConfig struct { Count int `yaml:"count"` } `yaml:"logger"` - Pprof struct { - Enabled bool `yaml:"enabled"` - Addr string `yaml:"addr"` - } `yaml:"pprof"` - - // Rest []struct { - // IPv4 string `yaml:"ipv4"` - // IPv6 string `yaml:"ipv6"` - // Port uint16 `yaml:"port"` - // Scheme string `yaml:"scheme"` - // ClientAuthType int `yaml:"clientAuthType"` - // CaFile string `yaml:"caFile"` - // CertFile string `yaml:"certFile"` - // KeyFile string `yaml:"keyFile"` - // } `yaml:"rest"` - - Rest []RestParam - - WebServer struct { - Enabled bool `yaml:"enabled"` - RootDir string `yaml:"rootDir"` - Listen []struct { - Addr string `yaml:"addr"` - Scheme string `yaml:"scheme"` - ClientAuthType int `yaml:"clientAuthType"` - CaFile string `yaml:"caFile"` - CertFile string `yaml:"certFile"` - KeyFile string `yaml:"keyFile"` - } `yaml:"listen"` - } `yaml:"webServer"` - - // Database DbConfig `yaml:"database"` - OMC struct { UriPrefix string `yaml:"uriPrefix"` NeType string `yaml:"neType"` @@ -128,17 +95,6 @@ type YamlConfig struct { } `yaml:"testConfig"` } -type RestParam struct { - IPv4 string `yaml:"ipv4"` - IPv6 string `yaml:"ipv6"` - Port uint16 `yaml:"port"` - Scheme string `yaml:"scheme,omitempty" default:"http"` - ClientAuthType int `yaml:"clientAuthType"` - CaFile string `yaml:"caFile"` - CertFile string `yaml:"certFile"` - KeyFile string `yaml:"keyFile"` -} - // type DbConfig struct { // Type string `yaml:"type"` // User string `yaml:"user"` @@ -483,24 +439,7 @@ func ReadTestConfigYaml(pfile string) (ret error) { } func GetDefaultUserAgent() string { - return "OMC-restagent/" + global.Version -} - -func GetOMCHostUrl() string { - var omcip string = "127.0.0.1" - var rest RestParam = yamlConfig.Rest[0] - var port uint16 = rest.Port - if rest.IPv4 != "0.0.0.0" && rest.IPv4 != "" { - omcip = rest.IPv4 - } else if rest.IPv6 != "::" && rest.IPv6 != "" { - omcip = "[" + rest.IPv6 + "]" - } - var scheme string = "http" - if rest.Scheme != "" { - scheme = rest.Scheme - } - - return fmt.Sprintf("%s://%s:%d", scheme, omcip, port) + return "OMC/" + global.Version } // const defaultConfigFile = "./etc/restconf.yaml" diff --git a/lib/core/cache/lcoal.go b/lib/core/cache/lcoal.go deleted file mode 100644 index f6f12af0..00000000 --- a/lib/core/cache/lcoal.go +++ /dev/null @@ -1,56 +0,0 @@ -package cache - -import ( - "strings" - "time" - - "github.com/patrickmn/go-cache" -) - -// 创建一个全局的不过期缓存对象 -var cNoExpiration = cache.New(cache.NoExpiration, cache.NoExpiration) - -// 将数据放入缓存,并设置永不过期 -func SetLocal(key string, value any) { - cNoExpiration.Set(key, value, cache.NoExpiration) -} - -// 从缓存中获取数据 -func GetLocal(key string) (any, bool) { - return cNoExpiration.Get(key) -} - -// 从缓存中删除数据 -func DeleteLocal(key string) { - cNoExpiration.Delete(key) -} - -// 获取指定前缀的所有键 -func GetLocalKeys(prefix string) []string { - prefix = strings.TrimSuffix(prefix, "*") - var keys []string - for key := range cNoExpiration.Items() { - if strings.HasPrefix(key, prefix) { - keys = append(keys, key) - } - } - return keys -} - -// 创建一个全局的过期缓存对象 -var cTTL = cache.New(6*time.Hour, 12*time.Hour) - -// 设置具有过期时间的缓存项 -func SetLocalTTL(key string, value any, expiration time.Duration) { - cTTL.Set(key, value, expiration) -} - -// 从缓存中获取数据 -func GetLocalTTL(key string) (any, bool) { - return cTTL.Get(key) -} - -// 从缓存中删除数据 -func DeleteLocalTTL(key string) { - cTTL.Delete(key) -} diff --git a/lib/core/ctx/ctx.go b/lib/core/ctx/ctx.go index 0bbf3c1f..be5823a1 100644 --- a/lib/core/ctx/ctx.go +++ b/lib/core/ctx/ctx.go @@ -13,7 +13,6 @@ import ( "be.ems/src/framework/constants" "be.ems/src/framework/token" "github.com/gorilla/mux" - "golang.org/x/text/language" ) // GetParam 地址栏参数{id} @@ -147,63 +146,33 @@ func Authorization(r *http.Request) string { return arr[1] } -// AcceptLanguage 解析客户端接收语言 zh:中文 en: 英文 -func AcceptLanguage(r *http.Request) string { - preferredLanguage := language.English - - // Query请求查询 - if v := GetQuery(r, "language"); v != "" { - tags, _, _ := language.ParseAcceptLanguage(v) - if len(tags) > 0 { - preferredLanguage = tags[0] - } - } - // Header请求头 - if v := GetHeader(r, "Accept-Language"); v != "" { - tags, _, _ := language.ParseAcceptLanguage(v) - if len(tags) > 0 { - preferredLanguage = tags[0] - } - } - - // 只取前缀 - lang := preferredLanguage.String() - arr := strings.Split(lang, "-") - return arr[0] -} - // ContextKey 定义自定义类型作为键 type ContextKey string // LoginUser 登录用户信息需要Authorize中间件 -func LoginUser(r *http.Request) (token.TokenInfo, error) { +func LoginUser(r *http.Request) (token.UserInfo, error) { // 获取请求头标识信息 tokenStr := Authorization(r) if tokenStr == "" { - return token.TokenInfo{}, fmt.Errorf("not token info") + return token.UserInfo{}, fmt.Errorf("not token info") } + if tokenStr == "" { + return token.UserInfo{}, fmt.Errorf("authorization token is empty") + } + // 验证令牌 - claims, err := token.Verify(tokenStr) + claims, err := token.UserTokenVerify(tokenStr, "access") if err != nil { - return token.TokenInfo{}, fmt.Errorf("token verify fail") + return token.UserInfo{}, err } // 获取缓存的用户信息 - loginUser := token.Info(claims) - if loginUser.UserId <= 0 { - return token.TokenInfo{}, fmt.Errorf("not user info") + info := token.UserInfoGet(claims) + if info.UserId <= 0 { + return token.UserInfo{}, fmt.Errorf("invalid login user information") } - return loginUser, nil -} - -// LoginUserToUserID 登录用户信息-用户ID -func LoginUserToUserID(r *http.Request) int64 { - loginUser, err := LoginUser(r) - if err != nil { - return 0 - } - return loginUser.UserId + return info, nil } // LoginUserToUserName 登录用户信息-用户名称 diff --git a/lib/dborm/dborm.go b/lib/dborm/dborm.go index 499388ec..cfe12f29 100644 --- a/lib/dborm/dborm.go +++ b/lib/dborm/dborm.go @@ -207,8 +207,8 @@ type NeInfo struct { } func XormGetNeInfo(neType string, neId string) (*NeInfo, error) { - neInfox := neService.NewNeInfo.FindByNeTypeAndNeID(neType, neId) log.Debug("XormGetNeInfo processing... ") + neInfox := neService.NewNeInfo.FindByNeTypeAndNeID(neType, neId) neInfo := new(NeInfo) neInfo.NeType = neType diff --git a/lib/services/response.go b/lib/services/response.go index a7d9e73e..2bdacf1a 100644 --- a/lib/services/response.go +++ b/lib/services/response.go @@ -1,8 +1,10 @@ package services +import "be.ems/src/framework/resp" + const ( - CODE_FAIL = 0 - CODE_SUCC = 1 + CODE_FAIL = resp.CODE_ERROR + CODE_SUCC = resp.CODE_SUCCESS ) func ErrResp(msg string) map[string]any { diff --git a/local/certs/www.omc.net.crt b/local/certs/www.omc.net.crt new file mode 100644 index 00000000..33918fe4 --- /dev/null +++ b/local/certs/www.omc.net.crt @@ -0,0 +1,33 @@ +-----BEGIN CERTIFICATE----- +MIIFqzCCA5OgAwIBAgIUd84SMrVmGfyUArN/y78WQY518DIwDQYJKoZIhvcNAQEL +BQAwZTELMAkGA1UEBhMCQ04xDDAKBgNVBAgMAzVHQzEMMAoGA1UEBwwDNUdDMREw +DwYDVQQKDAhPTUMtVGVhbTERMA8GA1UECwwIT01DLVRlYW0xFDASBgNVBAMMC3d3 +dy5vbWMubmV0MB4XDTI1MDQyNzA4NDEzMloXDTM1MDQyNTA4NDEzMlowZTELMAkG +A1UEBhMCQ04xDDAKBgNVBAgMAzVHQzEMMAoGA1UEBwwDNUdDMREwDwYDVQQKDAhP +TUMtVGVhbTERMA8GA1UECwwIT01DLVRlYW0xFDASBgNVBAMMC3d3dy5vbWMubmV0 +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAm+870e0lMn8f9P/340HS +cXdEoCWsBGRSuYTZVymY3qeX2uRCfxgrV+y0l5HBYS7jfER6Fd58Ixesd9UXPH06 +mWCycl2U1HTxE0miUMVeD37QPYldehy52R/TqXnsCJRBteYvLUlIr1xC0cZR+LYE +4uK0h4VrcANnHrU1c0r1EZIMU1ANZU0EqEOtjUU/+IT/fOUR8MHzTnu20/DpogHU +4v4nG2H94nj5MTzwvjLlTx5EU1VD0J93qHZHkzw+kOWCLDWHf/AkDmBJNHwHPiWK +BC8g7/GENeP8FQY9ZmNtn5whsWOGsjaK4zpiifYz9jpWvDFioDK1CFr0901DRr2q +g2U0qMoMrOFucGIEWLm7ecdWefIjdhWVdhqBP9o1SBtJ1WUIVHfB7ujg8fpA0N8R +o+T4EhSnfwbdJxTvjEZtVPgxBKtrxL47AAjl+TdbY+2f6IU7xBIZn2XLxAiGBFSD +oTL1fm7XOPGKT/NuxOXPCbYiCEeZcipkTFHXXSu274Npwz1xl7rjS2EEaIy6b3QQ +0ks5UquLOP44Wl1IIYwxR+WBQDDXYbklZUHh22lmb02XFc10Cs1m4a/xMFamAklz +hn4WDJTiW5fRgCTJDw6cmCncpvuw5cGjdo9fnsMQYOSLOsg9zzQ5WVjJC3oCu6xJ +p0T2mByiBnwoBK76dhddyF8CAwEAAaNTMFEwHQYDVR0OBBYEFO2829icz/VewU6Q +b9TSwDiG8rFaMB8GA1UdIwQYMBaAFO2829icz/VewU6Qb9TSwDiG8rFaMA8GA1Ud +EwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggIBAIEdlrw1w+d6LgjA6kuf8pmo +yfopjQmFfN4vfJ8sPiTSoY5KdetPmxTc04knpWn9qrUhgtpxoW7ZAXNct3ltGiI/ +zAPDB6jzXFoXfbhYEPpZYLpuGGWr/J9p2fkXTqdzHODcGFoOJuGlMrvxqIWL1raL +BDHajs1ETuyxJEZFXc1NO6LBeJ07eaLykEsyfUy9x7MCbZ0CkuefTnj6MuBchqAn +oxrNupw1G5+36wnFeyK43FAUWHclP4t/S2VvVHYg1U/2qZcRV6Ddxz/Yra/+TRIP +wBU6kMi+2GMjWVDgURfniKXpBfDkE77GKj3OphMZ+EEPXSKHnOF2Un8Mj5fVk86h +F4rSJ4J6LRcyEFf/pB5LT6usk3Buxq5OZjlD9UqGIbakcwCR6grxO7JPab2G8kwr +M6tYxVzW0wDbfm4YNakkpjpcwPHraVvOY1VV6DIfdFuiRP61HdkMu6WxUnd/DXsr +AOGB7gLya8+EtyydgaABolU0y3lZZaR9XCNSe1tTtTQkjik/SWGxxhue6QNR/Rr2 +IGKu2oYtjwnCpir342Bc/OLyTudtYxxHbPXj6/GO1tApYKgG+50KJKx5TXUz9BGM +mqOtLSZLGs3FWKybGmZvPvgurewQqr+inRPYM5Llkeiyis1bg5CVdHL6Bb68VZaJ ++Qv3f5EhOiZfu5jcjdxb +-----END CERTIFICATE----- diff --git a/local/certs/www.omc.net.key b/local/certs/www.omc.net.key new file mode 100644 index 00000000..0ed634b7 --- /dev/null +++ b/local/certs/www.omc.net.key @@ -0,0 +1,52 @@ +-----BEGIN PRIVATE KEY----- +MIIJQgIBADANBgkqhkiG9w0BAQEFAASCCSwwggkoAgEAAoICAQCb7zvR7SUyfx/0 +//fjQdJxd0SgJawEZFK5hNlXKZjep5fa5EJ/GCtX7LSXkcFhLuN8RHoV3nwjF6x3 +1Rc8fTqZYLJyXZTUdPETSaJQxV4PftA9iV16HLnZH9OpeewIlEG15i8tSUivXELR +xlH4tgTi4rSHhWtwA2cetTVzSvURkgxTUA1lTQSoQ62NRT/4hP985RHwwfNOe7bT +8OmiAdTi/icbYf3iePkxPPC+MuVPHkRTVUPQn3eodkeTPD6Q5YIsNYd/8CQOYEk0 +fAc+JYoELyDv8YQ14/wVBj1mY22fnCGxY4ayNorjOmKJ9jP2Ola8MWKgMrUIWvT3 +TUNGvaqDZTSoygys4W5wYgRYubt5x1Z58iN2FZV2GoE/2jVIG0nVZQhUd8Hu6ODx ++kDQ3xGj5PgSFKd/Bt0nFO+MRm1U+DEEq2vEvjsACOX5N1tj7Z/ohTvEEhmfZcvE +CIYEVIOhMvV+btc48YpP827E5c8JtiIIR5lyKmRMUdddK7bvg2nDPXGXuuNLYQRo +jLpvdBDSSzlSq4s4/jhaXUghjDFH5YFAMNdhuSVlQeHbaWZvTZcVzXQKzWbhr/Ew +VqYCSXOGfhYMlOJbl9GAJMkPDpyYKdym+7DlwaN2j1+ewxBg5Is6yD3PNDlZWMkL +egK7rEmnRPaYHKIGfCgErvp2F13IXwIDAQABAoICAB0PDxHG5LitUhJBJTvXh1UX +ydUiUBUdcQEbjbkdilxr1PO4t9+hbGpdNSZNxkDLER+WTz4GERIlFkHalxLxr1rn +1zlS0SpqhIZ4oWP189plYn8lOyNHeSbKNJKPovnSTxCLzdzdnEr5oYYgNCRqHyz8 +3HGo3mWobK4fTM+od1UH534bG/P1z1lgC1aZQhuZBVeMBLTeH+5PRbnnWlKTjs2i +WT1UHJD4xE91sNNw/qSo2kjBSfr1zMG7EQmSH4K3EnQUoaSo5r87GElMl7jwG/E9 +qyCr3FyCmPZ+DDEpdENbQDgjePV7DpTby4M0O2i2ZHV7qop6CJx+/smbP19Odxjs +6roI2z0N/AzQmohHe1enBLGCIgJDVS9TCTC1EARgceEM+EAbUiwOlWpuSIuhqFwI +AwzHtZoilL9O0zvKv1Et9HWvScXtWvVkmNFmDJbsjn1li2fMC/SvsHElx7ZRUgvQ ++pNG6QVSfqHwd6+e4+E0nV1DSzWsXWJL8KXofFWx2xt5HBiFLS19AM8IupaNsLBC +CEeZO1MiqS68YhRar5QMTUm121qq4zNBRXjMWJ6mXOJ2M+pbAj+QfKrwMbZsnvhU +KfxFQLFQ+aD+/rHp+cwRflSVGj7nK1GMZXLJQlcMGfl/15Zl3vbcnbzOq+jC/hyV +Jnz8lAge2E7szo2E7lMpAoIBAQDILUUXL5f3tK/h/aMOCygdjFWSDMHtLe0GAGfK +qhsz6kFBISEDEtqHPwGV/NJF/nD9pWHxI4M2raFkH7QZlMHhgvKEBmjXldfQ2a7p +aP+EGYSf+xHmfomJCie04dyrbvfznzp/CkIRRAUatCpe5kk8PgWbRi5gtueXrQbA +Wdm1hOXIGcz0eh2FnXwpR3ilpjV3PzPi9Pkz3c52efocpBLeFwht3IIOppKAmsyB +LFrEzJBysmKpjhBRvSae1oGsSS+ut7PZx92IjaJRu2zUuAj4z9TRMKf3OEppBHJp +H3U23bf2+sjn1swoAnJXOuIEv+bWWzJjmDt8st11ChD/+MLlAoIBAQDHa3sEMAb9 +cq0uWpQBrggKKYv4NvnOEquj/k11oX1tZPSQtO8sRx/vp/8c3zxIX9GdU/iV/32f +Xopqebj8NqvWkSbjzqSXiioNSFgppGVaNu1RH6IFSzUk3EF/M6H9YRqgW8XYMSeE +MVJutvRa2+vrIelhS4KDScWKX/WuKX7mbD8891YJOIObFi4HJMBtTD2mFN/jli24 +3YZwlmxsmPN28VrZB6YqBsvJNOeA9oBL7eg/elsWhh0V7Ie4FyKTHd5CSugJwD4C +So3CoEfZGYcNcxGF2pA5AXMhc4bDb8A3afCzQ7C5kIvQ3Yq6FcZvXVKcR7eTPqSD +/JwanOY5QBXzAoIBAQCPdmpS0KhQPe3jwDyw3uwUKTRWpNADZOu/ZmD8jWdLkLLN +s6mOI1/8l/pR/UzSHyXpkzKbeMEcWdoWAOa5grRlI80dM97Fyz1OEATcgYTGrucv +JOhSUhPN5DpK16ioMLKBpnds/vQUnbQuzDqlotOP2j94Zhbs94kJWldBWeO+xQ1N +mLgb6rznutN2XiOoTHN7EA/ms306X9gNbyQCjNB83PMMkYGgcF8EzmyMkzZGXvmT +SieNryQhALgCFGgBCr6isEO0bBpoOGHBw9qepXrAn2q9tepbMruZgjdhAcum08Z5 +uohsJ7RPZFmADNJZZxNQQzHc0QipOSOgMuO2IBnFAoIBAEyWuO5Iy8Z3To/o9cMX +ZbsRbdJsutAsV4NqXbF5zkQ/a7ZP5zOoNVnDubUK/4oEUusLnwNs1oBovNxb13H2 +RVTo9nizmn8g7zmeuU10+AAH7GklrwI9ejGn7fe+is5XhvRjir6XUkfw8WnYFkz2 +/cqWgZ1+dKebo6Sbai3zfetdU4REseRkshbUE+VmdgkEKQEqLzqnKPRBECsZepbS +v17FH1EPIQAvEAE8slTTVz7SJkqK4YTrCSysZQuMxxiddgkb37YvASG8JGnFSRLW +PQorUWWJJa7fIaqNRgq1VqtxoqIWsz7xhuE21NrXFhkbTGj9GkIQ4vpWAFYwQDNo +q4UCggEAD5C079b8ZrrZAPaB62CFW6s5HibiSjI5YTS++eCJSi9TOmi8yAdipZgD +CmuEzfw060VOflyNAAck9vZc1NHkANgpt1StZmo0CQikKjua7u7NPtBIwKF/OMMv +gcYduoTCmntMe85DSviZD0bZ5Ez5ocsT2cTMBvltT1YZjU5F91H87qhzZlVqP9C5 +Sml2mY+QYi9yifEYqp5Qth5W5bcp+QV/LecAS6Rv3xbkd5nV4v0oN8ekp40iA3+q +bqoyWol6pHym+3X0j3bHwWbBz1QG6H1rzi6n6fM08lfvT7bHvh+4iOQEm/ph/Alh +RNodAySNybYrYHj6i4VkgDxYg+FhYg== +-----END PRIVATE KEY----- diff --git a/restagent/etc/restconf.yaml b/local/omc.yaml similarity index 68% rename from restagent/etc/restconf.yaml rename to local/omc.yaml index 56224b80..4463fd0a 100644 --- a/restagent/etc/restconf.yaml +++ b/local/omc.yaml @@ -1,53 +1,50 @@ -# 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: ./log/restagent.log - level: trace - duration: 24 - count: 2 +# server version: std/lite +serverVersion: "std" +# operation mode system/docker +# serverMode: "system" +# login authentication, default true +# serverLoginAuth: true +# interface encryption, default false +# serverCryptoApi: false -# pprof: false(default)/true to disable/enable pprof -pprof: - enabled: true - addr: :33060 - -# rest agent listen ipv4/v6 and port, support multiple routines +# service listen ipv4/v6 and port, support multiple routines # ip: 0.0.0.0 or ::0, support IPv4/v6 -# clientAuthType: 0:NoClientCert (default), 1:RequestClientCert, 2:RequireAnyClientCert, -# 3:VerifyClientCertIfGiven, 4:RequireAndVerifyClientCerts -rest: - - ipv4: 0.0.0.0 - ipv6: +server: + - ipv4: "0.0.0.0" + ipv6: "" port: 33040 - - ipv4: 0.0.0.0 - ipv6: + schema: http + - ipv4: "0.0.0.0" + ipv6: "" port: 33443 schema: https - clientAuthType: 0 - caFile: ./etc/certs/omc-ca.crt - certFile: ./etc/certs/omc-server.crt - keyFile: ./etc/certs/omc-server.key + certFile: ./local/certs/www.omc.net.crt + keyFile: ./local/certs/www.omc.net.key +# web service configuration +# if you are using nginx to take over, you can disable the webServer: enabled: false - rootDir: d:/omc.git/fe.ems.vue3/dist + rootDir: ./local/web listen: - - addr: :80 + - addr: "0.0.0.0:80" schema: http - - addr: :443 + - addr: "0.0.0.0:443" schema: https - clientAuthType: 0 - caFile: ./etc/certs/omc-ca.crt - certFile: ./etc/certs/omc-web.crt - keyFile: ./etc/certs/omc-web.key + certFile: ./local/certs/www.omc.net.crt + keyFile: ./local/certs/www.omc.net.key + +# track configuration for NE +trace: + enabled: true + host: "192.168.5.58" # fill in the specific IP address + port: 33033 # data sources database: dataSource: # Default database instance - default: + std: type: "mysql" host: "192.168.9.58" port: 13306 @@ -55,26 +52,51 @@ database: password: "1000omc@kp!" database: "omc_db_lite" logging: true - # Built-in lightweight database + # SQLite database instance lite: type: "sqlite" - database: "../database/omc_db.sqlite" + database: "./local/omc_db.sqlite" logging: true # used to specify the default data source for multiple data resourece - defaultDataSourceName: "default" + defaultDataSourceName: "std" -# Redis data cache +# redis cached data redis: dataSource: - # OMC system db default: - port: 16379 # Redis port - host: "192.168.9.58" # Redis host + port: 16379 # port + host: "192.168.9.58" # host password: "helloearth" - db: 10 # Redis db_num - # used to specify the default data source for multiple data resourece + db: 10 # db_num + # 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 +logger: + file: "C:/var/log/omc_restagent.log" + level: warn + duration: 24 + count: 90 + +# pprof grafana Performance Monitor +pprof: + enabled: true + addr: "0.0.0.0:33060" + +# 静态文件配置, 相对项目根路径或填绝对路径 +staticFile: + # 默认资源,dir目录需要预先创建 + default: + prefix: "/static" + dir: "C:/usr/local/omc/static" + # 文件上传资源目录映射,与项目目录同级 + upload: + prefix: "/upload" + dir: "C:/usr/local/omc/upload" + # sleep: time delay for after write buffer (millisecond) # deadLine: timeout for io read and write (second) mml: @@ -85,12 +107,6 @@ mml: bufferSize: 65535 mmlHome: ./mmlhome -# Tracking configuration -trace: - enabled: true - host: "192.168.5.58" # Fill in the specific IP address - port: 33033 - # NE config ne: user: omcuser @@ -155,10 +171,10 @@ alarm: tlsSkipVerify: true alarmSMSForward: enable: true - mobileList: "1006,1008" - smscAddr: "192.168.14.212:2775" - systemID: "123456" - password: "123456" + mobileList: + smscAddr: "192.168.13.114:2775" + systemID: "omc" + password: "omc123" systemType: "UTRAN" dataCoding: 0 serviceNumber: "OMC" @@ -181,8 +197,8 @@ auth: token: true expires: 1800 session: multiple - publicKey: ./etc/certs/omc_pub.key - privateKey: ./etc/certs/omc_pri.key + 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 @@ -201,4 +217,4 @@ params: testConfig: enabled: false - file: ./etc/testconfig.yaml + file: /usr/local/omc/etc/testconfig.yaml diff --git a/config/param/amf_param_config.yaml b/local/param/amf_param_config.yaml similarity index 100% rename from config/param/amf_param_config.yaml rename to local/param/amf_param_config.yaml diff --git a/config/param/ausf_param_config.yaml b/local/param/ausf_param_config.yaml similarity index 100% rename from config/param/ausf_param_config.yaml rename to local/param/ausf_param_config.yaml diff --git a/config/param/cbc_param_config.yaml b/local/param/cbc_param_config.yaml similarity index 100% rename from config/param/cbc_param_config.yaml rename to local/param/cbc_param_config.yaml diff --git a/config/param/ims_param_config.yaml b/local/param/ims_param_config.yaml similarity index 100% rename from config/param/ims_param_config.yaml rename to local/param/ims_param_config.yaml diff --git a/config/param/mme_param_config.yaml b/local/param/mme_param_config.yaml similarity index 100% rename from config/param/mme_param_config.yaml rename to local/param/mme_param_config.yaml diff --git a/config/param/mocngw_param_config.yaml b/local/param/mocngw_param_config.yaml similarity index 100% rename from config/param/mocngw_param_config.yaml rename to local/param/mocngw_param_config.yaml diff --git a/config/param/n3iwf_param_config.yaml b/local/param/n3iwf_param_config.yaml similarity index 100% rename from config/param/n3iwf_param_config.yaml rename to local/param/n3iwf_param_config.yaml diff --git a/config/param/nrf_param_config.yaml b/local/param/nrf_param_config.yaml similarity index 100% rename from config/param/nrf_param_config.yaml rename to local/param/nrf_param_config.yaml diff --git a/config/param/nssf_param_config.yaml b/local/param/nssf_param_config.yaml similarity index 100% rename from config/param/nssf_param_config.yaml rename to local/param/nssf_param_config.yaml diff --git a/config/param/omc_param_config.yaml b/local/param/omc_param_config.yaml similarity index 100% rename from config/param/omc_param_config.yaml rename to local/param/omc_param_config.yaml diff --git a/config/param/pcf_param_config.yaml b/local/param/pcf_param_config.yaml similarity index 100% rename from config/param/pcf_param_config.yaml rename to local/param/pcf_param_config.yaml diff --git a/config/param/sgwc_param_config.yaml b/local/param/sgwc_param_config.yaml similarity index 100% rename from config/param/sgwc_param_config.yaml rename to local/param/sgwc_param_config.yaml diff --git a/config/param/smf_param_config.yaml b/local/param/smf_param_config.yaml similarity index 93% rename from config/param/smf_param_config.yaml rename to local/param/smf_param_config.yaml index 35e02063..0393cc73 100644 --- a/config/param/smf_param_config.yaml +++ b/local/param/smf_param_config.yaml @@ -542,9 +542,59 @@ smf: filter: "1~64" display: "UPF ID" comment: "upf1-id;upf2-id;upf3-id" + localDhcpCfg: + display: "Local DHCP Config" + sort: 13 + list: + - name: "enable" + type: "bool" + value: "false" + access: "read-write" + filter: "" + display: "Enable" + comment: "" + - name: "localIp" + type: "string" + value: "" + access: "read-write" + filter: "" + display: "Local IP" + comment: "" + dnnselectdhcpserver: + display: "DNN Select DHCP Server" + sort: 15 + array: + - name: "index" + type: "int" + value: "" + access: "read-only" + filter: "0~65535" + display: "Index" + comment: "" + - name: "enable" + type: "bool" + value: "false" + access: "read-write" + filter: "" + display: "Enable" + comment: "" + - name: "dnn" + type: "string" + value: "" + access: "read-write" + filter: "1~64" + display: "DNN" + comment: "" + - name: "dhcpServerAddr" + type: "string" + value: "" + access: "read-write" + filter: "" + display: "DHCP Server IP" + comment: "e.g. 192.168.1.1" offlineChargingConfig: display: "Offline Charging Config" - sort: 13 + sort: 17 list: - name: "cdrFileName" type: "string" diff --git a/config/param/smsc_param_config.yaml b/local/param/smsc_param_config.yaml similarity index 100% rename from config/param/smsc_param_config.yaml rename to local/param/smsc_param_config.yaml diff --git a/config/param/udm_param_config.yaml b/local/param/udm_param_config.yaml similarity index 100% rename from config/param/udm_param_config.yaml rename to local/param/udm_param_config.yaml diff --git a/config/param/upf_param_config.yaml b/local/param/upf_param_config.yaml similarity index 94% rename from config/param/upf_param_config.yaml rename to local/param/upf_param_config.yaml index 0da0be98..281dc6c4 100644 --- a/config/param/upf_param_config.yaml +++ b/local/param/upf_param_config.yaml @@ -338,6 +338,20 @@ upf: filter: "0~1" display: "Enable Qer" comment: "Enable PFCP Qer Control" + - name: "enableNat" + type: "int" + value: "0" + access: "read-write" + filter: "0~1" + display: "Enable NAT" + comment: "Enable NAT For N6 interface" + - name: "enableArpProxy" + type: "int" + value: "0" + access: "read-write" + filter: "0~1" + display: "Enable Arp Proxy" + comment: "Enable Arp Proxy For N6 interface" dataForwarderUpfd: display: "Data Forwarder Upfd" sort: 13 @@ -546,14 +560,14 @@ upf: comment: "" - name: "bfdTxIntervalMs" type: "int" - value: "1" + value: "0" access: "read-write" filter: "" display: "BFD TX Interval Ms" comment: "" - name: "bfdRxIntervalMs" type: "int" - value: "1" + value: "0" access: "read-write" filter: "" display: "BFD RX Interval Ms" @@ -602,7 +616,7 @@ upf: comment: "" - name: "vlanIdMax" type: "int" - value: "" + value: "0" access: "read-write" filter: "" display: "Vlan ID Max" @@ -1292,9 +1306,70 @@ upf: filter: "1~128" display: "Dst Server IPv6 Prefix" comment: "" + networkControlFreeServerList: + display: "Free Server List" + sort: 27 + array: + - name: "index" + type: "int" + value: "1" + access: "read-write" + filter: "1~32" + display: "Index" + comment: "1~32" + - name: "enabled" + type: "int" + value: "0" + access: "read-write" + filter: "0~1" + display: "Enabled" + comment: "" + - name: "freeServerAddrList" + type: "int" + value: "1" + access: "read-write" + filter: "0~32" + display: "Free Server Address List" + comment: "" + array: + - name: "index" + type: "int" + value: "1" + access: "read-only" + filter: "1~32" + display: "Index" + comment: "1~32" + - name: "serverIpv4" + type: "string" + value: "0.0.0.0" + access: "read-write" + filter: "" + display: "Server IPv4" + comment: "" + - name: "serverIpv4Mask" + type: "string" + value: "255.255.255.0" + access: "read-write" + filter: "" + display: "Server IPv4 Mask" + comment: "" + - name: "serverIpv6" + type: "string" + value: "" + access: "read-write" + filter: "" + display: "Server IPv6" + comment: "" + - name: "serverIpv6Prefix" + type: "int" + value: "64" + access: "read-write" + filter: "" + display: "Server IPv6 Prefix" + comment: "" networkControlDnsServerList: display: "Network Control DNS Server List" - sort: 27 + sort: 29 array: - name: "index" type: "int" @@ -1333,7 +1408,7 @@ upf: comment: "" dpiCommon: display: "DPI Common" - sort: 29 + sort: 31 list: - name: "maxDetectPacketNum" type: "int" @@ -1358,7 +1433,7 @@ upf: comment: "" dpiHeaderEnrichInfoList: display: "DPI Header Enrich Info List" - sort: 31 + sort: 33 array: - name: "index" type: "int" @@ -1390,7 +1465,7 @@ upf: comment: "" dpiAppList: display: "DPI APP List" - sort: 33 + sort: 35 array: - name: "index" type: "int" diff --git a/restagent/restagent.go b/main.go similarity index 88% rename from restagent/restagent.go rename to main.go index 76a74f43..2486b597 100644 --- a/restagent/restagent.go +++ b/main.go @@ -7,8 +7,9 @@ import ( _ "net/http/pprof" - "github.com/chenjiandongx/ginprom" "github.com/gin-gonic/gin" + "github.com/godoes/ginprom" + "github.com/penglongli/gin-metrics/ginmetrics" "github.com/prometheus/client_golang/prometheus/promhttp" swaggerFiles "github.com/swaggo/files" ginSwagger "github.com/swaggo/gin-swagger" @@ -17,7 +18,6 @@ import ( "be.ems/features/event" "be.ems/features/mml" featuresCfg "be.ems/lib/config" - "be.ems/lib/global" "be.ems/lib/log" "be.ems/lib/routes" "be.ems/src" @@ -25,7 +25,7 @@ import ( "be.ems/src/framework/logger" "be.ems/src/framework/middleware" "be.ems/src/framework/utils/parse" - _ "be.ems/swagger2docs" + _ "be.ems/swagger_docs" ) var wg sync.WaitGroup @@ -145,15 +145,20 @@ func main() { src.ConfigurationInit() app := src.AppEngine() + src.DefeatConfig(app) + + loadGlobalPre(app) + + src.ModulesRoute(app) loadFeatures(app) - loadDev(app) - loadServer(app) - loadWebServer() + loadServerWeb() + // 首次安装启动记录 + // machine.Launch() wg.Wait() } @@ -162,9 +167,9 @@ func loadFeatures(app *gin.Engine) { conf := featuresCfg.GetYamlConfig() log.InitLogger(conf.Logger.File, conf.Logger.Duration, conf.Logger.Count, "omc:restagent", featuresCfg.GetLogLevel()) - fmt.Printf("OMC restagent version: %s\n", global.Version) - log.Infof("========================= OMC restagent startup =========================") - log.Infof("OMC restagent version: %s %s %s", global.Version, global.BuildTime, global.GoVer) + fmt.Printf("OMC Version: %s\n", config.Version) + log.Infof("========================= OMC Startup =========================") + log.Infof("OMC Version: %s %s %s", config.Version, config.BuildTime, config.GoVer) mml.InitMML() @@ -172,7 +177,7 @@ func loadFeatures(app *gin.Engine) { // 默认路由组 defaultUriGroup := app.Group(featuresCfg.DefaultUriPrefix) - defaultUriGroup.Use(middleware.PreAuthorize(nil)) + defaultUriGroup.Use(middleware.AuthorizeUser(nil)) defaultUriGroup.Any("/*any", gin.WrapH(routes.NewRouter())) // 可配置前缀路由组 uriGroup := app.Group(featuresCfg.UriPrefix) @@ -184,8 +189,8 @@ func loadFeatures(app *gin.Engine) { features.InitServiceEngine(app) } -// loadDev 开发环境调试 -func loadDev(app *gin.Engine) { +// loadGlobalPre 全局预加载 +func loadGlobalPre(app *gin.Engine) { // Swagger 接口文档 if config.Env() == "local" { app.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler)) @@ -193,12 +198,17 @@ func loadDev(app *gin.Engine) { //性能分析监控 Prometheus pprofEnabled := config.Get("pprof.enabled") - if pprofEnabled != nil && pprofEnabled.(bool) { + if parse.Boolean(pprofEnabled) { + // Grafana Monitor 1 + m := ginmetrics.GetMonitor() + m.UseWithoutExposingEndpoint(app) + // Grafana Monitor 2 app.Use(ginprom.PromMiddleware(nil)) app.GET("/metrics", ginprom.PromHandler(promhttp.Handler())) - pprofAddr := config.Get("pprof.addr").(string) + wg.Add(1) // 启用pprof HTTP服务 + pprofAddr := config.Get("pprof.addr").(string) go func(addr string) { defer wg.Done() fmt.Println(http.ListenAndServe(addr, nil)) @@ -208,20 +218,20 @@ func loadDev(app *gin.Engine) { // loadServer 多个HTTP服务启动 func loadServer(app *gin.Engine) { - httpArr := config.Get("rest") + httpArr := config.Get("server") if httpArr == nil { - logger.Errorf("rest config not found") + logger.Errorf("server config not found") return } for _, v := range httpArr.([]any) { - rest := v.(map[string]any) - port := parse.Number(rest["port"]) - ipv4 := fmt.Sprint(rest["ipv4"]) - ipv6 := fmt.Sprint(rest["ipv6"]) - schema := fmt.Sprint(rest["schema"]) + item := v.(map[string]any) + port := parse.Number(item["port"]) + ipv4 := fmt.Sprint(item["ipv4"]) + ipv6 := fmt.Sprint(item["ipv6"]) + schema := fmt.Sprint(item["schema"]) if schema == "https" && schema != "" { - certFile := fmt.Sprint(rest["certfile"]) - keyFile := fmt.Sprint(rest["keyfile"]) + certFile := fmt.Sprint(item["certfile"]) + keyFile := fmt.Sprint(item["keyfile"]) addr := "" if ipv4 != "" && ipv4 != "" { addr = fmt.Sprintf("%s:%d", ipv4, port) @@ -261,8 +271,8 @@ func loadServer(app *gin.Engine) { } } -// loadWebServer 前端静态资源服务 -func loadWebServer() { +// loadServerWeb 多个HTTP服务启动-前端静态资源 +func loadServerWeb() { webEnabled := config.Get("webServer.enabled") if webEnabled == nil { logger.Errorf("webServer config not found") diff --git a/makefile b/makefile deleted file mode 100644 index 7725c311..00000000 --- a/makefile +++ /dev/null @@ -1,153 +0,0 @@ -# Makefile for AGrandTech EMS project - -ProjectL = omc -ProjectU = OMC -PROJECT = $(ProjectL) -VERSION = 2.2503.9 -RelDate = `date +%Y%m%d` -Release = $(RelDate) -RelVer = $(VERSION)-$(RelDate) -PLATFORM = amd64 -ARMPLATFORM = aarch64 -GitLocalRoot = $(HOME)/omc.git -EmsBuildRoot=$(GitLocalRoot)/build.ems -BuildDir = $(EmsBuildRoot)/build -CustomizedDir = $(EmsBuildRoot)/customized -BuildOMCDir = $(BuildDir)/usr/local/omc -BuildOMCBinDir = $(BuildOMCDir)/bin -BuildOMCEtcDir = $(BuildOMCDir)/etc -BuildLibDir = $(BuildDir)/lib -BuildLibSystemDir = $(BuildLibDir)/systemd/system -DebBuildDir = $(EmsBuildRoot)/debbuild -DebBuildOMCDir = $(EmsBuildRoot)/debbuild/usr/local/omc -DebFEBuildDir = $(EmsBuildRoot)/debbuild/usr/local/omc/htdocs -DebBuild2204Dir = $(EmsBuildRoot)/debbuild/22.04 -DebBuild2204OMCDir = $(EmsBuildRoot)/debbuild/22.04/usr/local/omc -DebFEBuild2204Dir = $(EmsBuildRoot)/debbuild/22.04/usr/local/omc/htdocs -RpmBuildDir = $(EmsBuildRoot)/rpmbuild -RpmFEBuildDir = $(RpmBuildDir)/BUILD/usr/local/omc/htdocs -OmcInstallDir = /usr/local/omc -ReleaseDir = $(EmsBuildRoot)/release -EmsBEDir = $(GitLocalRoot)/be.ems -ConfigEtcDir = $(EmsBEDir)/config/etc -ConfigSystemdDir = $(EmsBEDir)/config/systemd -EmsFEDir = $(GitLocalRoot)/fe.ems -EmsFEVue3Dir = $(GitLocalRoot)/fe.ems.vue3/dist -LibDir = $(EmsBEDir)/lib -RESTAGENT = restagent -SshSvcBin = sshsvc -RestagentDir = $(EmsBEDir)/$(RESTAGENT) -SshSvcDir = $(EmsBEDir)/$(SshSvcBin) -DBSQLSrcDir = $(EmsBEDir)/database -MiscDir = $(EmsBEDir)/misc -FrontBuildDir = $(BuildOMCDir)/htdocs -FrontSrcDir = $(EmsBEDir)/front -ReleaseDebs = $(ReleaseDir)/debs/$(PLATFORM) -BinWriterDir = $(HOME)/bin -ifeq ($(shell grep VERSION_ID /etc/os-release), VERSION_ID="22.04") -DebBuildDir := $(DebBuild2204Dir) -DebBuildOMCDir := $(DebBuild2204OMCDir) -DebFEBuildDir := $(DebFEBuild2204Dir) -#DebPkgFile := $(PROJECT)-$(VERSION)-22.04-$(Release).$(PLATFORM).deb -DebPkgFile := $(PROJECT)-r$(VERSION)-$(Release)-ub22.deb -DebPkgFileBA := $(PROJECT)-r$(VERSION)-$(Release)-ub22-ba.deb -else ifeq ($(shell grep VERSION_ID /etc/os-release), VERSION_ID="18.04") -DebPkgFile := $(PROJECT)-r$(VERSION)-$(Release)-ub18.deb -DebPkgFileBA := $(PROJECT)-r$(VERSION)-$(Release)-ub18-ba.deb -endif - -.PHONY: all $(RESTAGENT) $(SshSvcBin) -all: $(RESTAGENT) $(SshSvcBin) - cd $(RestagentDir) - go build -o $(RESTAGENT) -v -ldflags "-s -w -X 'be.ems/lib/conifg.Version=$(RelVer)' \ - -X '$(LibDir)/conifg.BuildTime=`date`' \ - -X '$(LibDir)/conifg.GoVer=`go version`'" - cd $(SshSvcDir) - go build -o $(SshSvcBin) -v -ldflags "-s -w -X '$(LibDir)/conifg.Version=$(RelVer)' \ - -X '$(LibDir)/conifg.BuildTime=`date`' \ - -X '$(LibDir)/conifg.GoVer=`go version`'" - -clean: - rm ./restagent/$(RESTAGENT) $(SshSvcDir)/$(SshSvcBin) - -dist: - tar -zvcPf $(ReleaseDir)/$(PROJECT)-src-$(VERSION).tar.gz \ - ../lib \ - ../restagent \ - ../initems \ - ../database \ - ../docs \ - ../misc \ - ../config \ - --exclude=../restagent/restagent \ - --exclude=../initems/initems - -pre_build: $(BINNAME) - # clear build cache - rm -rf $(FrontBuildDir)/front/* - rm -rf $(DebFEBuildDir)/front/* - rm -rf $(DebBuildDir)/usr/local/omc/etc/db/* - - cp -rf $(RestagentDir)/$(RESTAGENT) $(BuildOMCBinDir) - cp -rf $(SshSvcDir)/$(SshSvcBin) $(BuildOMCBinDir) - cp -rf $(MiscDir)/* $(BuildOMCBinDir) - cp -rf $(ConfigEtcDir)/* $(BuildOMCEtcDir) - rm -rf $(BuildOMCEtcDir)/db/* - cp -rf $(DBSQLSrcDir)/* $(BuildOMCEtcDir)/db/ - cp -rf $(ConfigSystemdDir)/* $(BuildLibSystemDir) - cp -rf $(EmsFEVue3Dir)/* $(FrontBuildDir)/front >/dev/null - chmod 755 $(BuildOMCBinDir)/* - chmod 755 $(DebBuildDir)/DEBIAN/preinst - chmod 755 $(DebBuildDir)/DEBIAN/postinst - chmod 755 $(DebBuildDir)/DEBIAN/postrm - cp -rf $(BuildDir)/* $(DebBuildDir)/ - -replace_chinese: - @find $(DebBuildOMCDir)/etc/db -type f -name '*.sql' -exec sed -i '' 's/[一-龥]//g' {} + - @echo "Replace all chinese charecter." - -deb: pre_build - cp -rf $(CustomizedDir)/agt.d $(DebBuildOMCDir)/static - cp -rf $(CustomizedDir)/omc.d $(DebBuildOMCDir)/static - #cp -rf $(BuildDir)/nginx/* $(DebBuildDir)/etc/nginx/conf.d - #cp -rf $(BuildDir)/systemd/*.service $(DebBuildDir)/lib/systemd/system/ - chmod +x $(DebBuildDir)/usr/local/omc/bin/* - #sed -i.bak 's/YYYYMMDD/$(shell date +"%Y%m%d")/g' $(DebBuildDir)/DEBIAN/control - sed -i 's/YYYYMMDD/$(shell date +"%Y%m%d")/g' $(DebBuildDir)/DEBIAN/control - perl -0777 -i -pe 's/ne:\n user: root/ne:\n user: omcuser/g' $(DebBuildDir)/usr/local/omc/etc/default/restconf.yaml - dpkg -b $(DebBuildDir) $(ReleaseDebs)/$(DebPkgFile) - -badeb: pre_build replace_chinese - cp -rf $(CustomizedDir)/ba.d $(DebBuildOMCDir)/static - #cp -rf $(BuildDir)/nginx/* $(DebBuildDir)/etc/nginx/conf.d - #cp -rf $(BuildDir)/systemd/*.service $(DebBuildDir)/lib/systemd/system/ - chmod +x $(DebBuildDir)/usr/local/omc/bin/* - #sed -i.bak 's/YYYYMMDD/$(shell date +"%Y%m%d")/g' $(DebBuildDir)/DEBIAN/control - sed -i 's/YYYYMMDD/$(shell date +"%Y%m%d")/g' $(DebBuildDir)/DEBIAN/control - perl -0777 -i -pe 's/ne:\n user: root/ne:\n user: omcuser/g' $(DebBuildDir)/usr/local/omc/etc/default/restconf.yaml - dpkg -b $(DebBuildDir) $(ReleaseDebs)/$(DebPkgFileBA) - -rpm: $(BINNAME) - # clear build cache - rm -rf $(FrontBuildDir)/front/* - rm -rf $(RpmFEBuildDir)/front/* - rm -rf $(RpmBuildDir)/BUILD/usr/local/omc/etc/db/* - - cp -rf $(RestagentDir)/$(RESTAGENT) $(BuildOMCBinDir) - cp -rf $(SshSvcDir)/$(SshSvcBin) $(BuildOMCBinDir) - cp -rf $(MiscDir)/* $(BuildOMCBinDir) -# rm -rf $(BinDir2)/ne-hosts - cp -rf $(ConfigEtcDir)/* $(BuildOMCEtcDir) - rm -rf $(BuildOMCEtcDir)/db/* - cp -rf $(DBSQLSrcDir)/* $(BuildOMCEtcDir)/db/ - cp -rf $(ConfigSystemdDir)/* $(BuildLibSystemDir) - #unzip $(FrontSrcDir)/front.zip -d $(FrontBuildDir) >/dev/null - mkdir -p $(FrontBuildDir)/front - cp -rf $(EmsFEVue3Dir)/* $(FrontBuildDir)/front >/dev/null - chmod 755 $(BuildOMCBinDir)/* -# chmod 755 $(BinDir2)/* - cp -rf $(BuildDir)/* $(RpmBuildDir)/BUILD/ - #cp -rf $(BuildDir)/nginx $(RpmBuildDir)/BUILD/etc/ - #cp -rf $(BuildDir)/systemd $(RpmBuildDir)/BUILD/lib/ - cd $(RpmBuildDir) - rpmbuild -bb -D "_topdir $(RpmBuildDir)" $(RpmBuildDir)/SPECS/omc.spec diff --git a/misc/actpkg.sh b/misc/actpkg.sh deleted file mode 100755 index 1a5fb2c9..00000000 --- a/misc/actpkg.sh +++ /dev/null @@ -1,54 +0,0 @@ -#!/bin/bash - -filename="$1" -neType="$2" -duration=180 -expectBin=/usr/bin/expect -omcBin=/usr/local/omc/bin -logFile=/tmp/actpkg`date +%Y%m%d`.log -extension=$(basename "${1}" | awk -F . '{print $NF}') - -if [ ! -f ${expectBin} ]; then - echo "Please install software expect first" - exit 99 -fi - -case "${extension}" in - deb) - if [ ${neType} == "OMC" ]; then - systemctl stop restagent.service - fi - expect < ${logFile} - spawn dpkg -i --force-all "$filename" - set timeout ${duration} - expect { - "y/n" { send "y\n"; exp_continue } - } -EOF - if [ ${neType} == "OMC" ]; then - ${omcBin}/setomc.sh -m upgrade >> ${logFile} - ${omcBin}/omcsvc.sh restart >> ${logFile} - fi - ;; - rpm) - if [ ${neType} == "OMC" ]; then - systemctl stop restagent.service - fi - expect < ${logFile} - spawn rpm -Uvh "$filename" - set timeout ${duration} - expect { - "y/n" { send "y\n"; exp_continue } - } -EOF - if [ ${neType} == "OMC" ]; then - ${omcBin}/setomc.sh -m upgrade >> ${logFile} - ${omcBin}/omcsvc.sh restart >> ${logFile} - fi - ;; - *) - - echo "The file does not have a .deb or .rpm extension" - exit 100 - ;; -esac diff --git a/misc/checkdisk.sh b/misc/checkdisk.sh deleted file mode 100755 index 23587d77..00000000 --- a/misc/checkdisk.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash - -threshold=99 # 设置硬盘使用率的阈值 - -disk_usage=$(df -h | awk '$NF=="/"{print $(NF-1)}' | sed 's/%//') # 获取根目录的硬盘使用率 - -if [ $disk_usage -gt $threshold ]; then - echo "Disk usage is above $threshold%. Taking action..." - systemctl restart keepalived -fi \ No newline at end of file diff --git a/misc/checkproc.sh b/misc/checkproc.sh deleted file mode 100755 index 70509991..00000000 --- a/misc/checkproc.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash - -process_name="restagent" - -if ! pgrep -x "$process_name" >/dev/null; then - echo "$process_name is not running. Restarting..." - systemctl restart keepalived -fi \ No newline at end of file diff --git a/misc/cpnetools.sh b/misc/cpnetools.sh deleted file mode 100755 index ce2249e2..00000000 --- a/misc/cpnetools.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/bash - -tooldir=/usr/local/bin -toollist="zip unzip" - -# distribute to hosts in file nehosts -while read line - do - if [[ "$line" =~ ^[^[:space:]]*# || -z "$line" ]]; then - continue - fi - user=`echo $line | cut -d " " -f 2` - ip=`echo $line | cut -d " " -f 1` - passwd=`echo $line | cut -d " " -f 3` - - for toolname in $toollist;do - expect < ${logFile} - spawn dpkg -i --force-all "$filename" - set timeout ${duration} - expect { - "y/n" { send "y\n"; exp_continue } - } -EOF - if [ ${neType} == "OMC" ]; then - ${omcBin}/setomc.sh -m upgrade >> ${logFile} - ${omcBin}/omcsvc.sh restart >> ${logFile} - fi - ;; - rpm) - if [ ${neType} == "OMC" ]; then - systemctl stop restagent.service - fi - expect < ${logFile} - spawn rpm -Uvh "$filename" - set timeout ${duration} - expect { - "y/n" { send "y\n"; exp_continue } - } -EOF - if [ ${neType} == "OMC" ]; then - ${omcBin}/setomc.sh -m upgrade >> ${logFile} - ${omcBin}/omcsvc.sh restart >> ${logFile} - fi - ;; - *) - - echo "The file does not have a .deb or .rpm extension" - exit 100 - ;; -esac - diff --git a/misc/rmexpfiles.sh b/misc/rmexpfiles.sh deleted file mode 100755 index 881f44f8..00000000 --- a/misc/rmexpfiles.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash - -# rm expired file with filename like *20231028111213.zip" - -filepath=$1 -duration=$2 - -find $filepath -maxdepth 1 -type f -name "*[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]*" -printf "%f\n" | while read filename; do - datestr=$(echo "$filename" | grep -oE '[0-9]{8}') - filedate=$(date -d "$datestr" +%s) - sevendaysago=$(date -d "$duration days ago" +%s) - if [ "$filedate" -lt "$sevendaysago" ]; then - rm -f "$filepath/$filename" - echo "rm file: $filename" - fi -done \ No newline at end of file diff --git a/misc/setomc.sh b/misc/setomc.sh deleted file mode 100755 index 619d3206..00000000 --- a/misc/setomc.sh +++ /dev/null @@ -1,112 +0,0 @@ -#!/bin/bash - -# Read the value of the variable from file -source /usr/local/omc/etc/omc.conf - -C_ARG_LOWER="omc" -C_ARG_UPPER="OMC" -M_ARG_LOWER="*" - -check_args() { - while getopts "c:m:" option; do - case $option in - c) - C_ARG_LOWER=$(echo $OPTARG | tr '[:upper:]' '[:lower:]') - C_ARG_UPPER=$(echo $OPTARG | tr '[:lower:]' '[:upper:]') - # Modifying Script Variables - if [ "${C_ARG_LOWER}" == "ba" ]; then - C_ARG_UPPER="BA" - sed -i 's/VENDORS=.*/VENDORS=BA/' /usr/local/omc/etc/omc.conf - elif [ "${C_ARG_LOWER}" == "omc" ]; then - C_ARG_UPPER="OMC" - sed -i 's/VENDORS=.*/VENDORS=OMC/' /usr/local/omc/etc/omc.conf - elif [ "${C_ARG_LOWER}" == "agt" ]; then - C_ARG_UPPER="AGT" - sed -i 's/VENDORS=.*/VENDORS=AGT/' /usr/local/omc/etc/omc.conf - fi - ;; - m) - M_ARG=$(echo $OPTARG | tr '[:upper:]' '[:lower:]') - if [ "${VENDORS}" == "BA" ]; then - C_ARG_LOWER="ba" - C_ARG_UPPER="BA" - fi - ;; - \?) - echo "Invalid option: -$OPTARG" >&2 - ;; - esac - done -} - -USER="root" -PASSWORD="1000omc@kp!" -PORT="33066" -DBNAME="omc_db" -OMCRootDir=/usr/local/omc -OMCBinDir=${OMCRootDir}/bin -UpgradeSQLDir=${OMCRootDir}/etc/db/upgrade -Upgvue3SQLDir=${OMCRootDir}/etc/db/upgvue3 -InstallSQLDir=${OMCRootDir}/etc/db/install -OMCStaticDir=${OMCRootDir}/static - -check_args "$@" - -case "${M_ARG}" in - install) - ${OMCBinDir}/importdb.sh ${M_ARG} - - if [ "${C_ARG_LOWER}" != "" ]; then - CustomizedDir=${OMCStaticDir}/${C_ARG_LOWER}.d - if [ ! -d "${CustomizedDir}" ]; then - echo "Not found ${C_ARG_UPPER} customized directory, nothing to be done" - exit 1 - fi - echo -n "Setting ${C_ARG_UPPER} customized OMC ..." - for SQL in ${CustomizedDir}/db/*.sql; do - mysql -u${USER} -p${PASSWORD} -P ${PORT} --protocol tcp -D ${DBNAME} < ${SQL}; - done - cp -rf ${CustomizedDir}/logo/* ${OMCStaticDir}/logo - cp -rf ${CustomizedDir}/doc/* ${OMCStaticDir}/helpDoc - if [ "${C_ARG_LOWER}" == "ba" ]; then - rm -rf ${OMCStaticDir}/logo/zh_* - rm -rf ${OMCStaticDir}/helpDoc/zh_* - fi - #perl -0777 -i -pe 's/omcuser/bluearcus/g' ${OMCRootDir}/etc/default/restconf.yaml - #perl -0777 -i -pe 's/omcuser/bluearcus/g' ${OMCBinDir}/nehosts - if [ $? = 0 ]; then - echo "done" - fi - fi - ;; - upgrade | upgvue3) - ${OMCBinDir}/importdb.sh ${M_ARG} - ;; - skip) - if [ "${C_ARG_LOWER}" != "" ]; then - CustomizedDir=${OMCStaticDir}/${C_ARG_LOWER}.d - if [ ! -d "${CustomizedDir}" ]; then - echo "Not found ${C_ARG_UPPER} customized directory, nothing to be done" - exit 1 - fi - echo -n "Setting ${C_ARG_UPPER} customized OMC ..." - for SQL in ${CustomizedDir}/db/*.sql; do - mysql -u${USER} -p${PASSWORD} -P ${PORT} --protocol tcp -D ${DBNAME} < ${SQL}; - done - cp -rf ${CustomizedDir}/logo/* ${OMCStaticDir}/logo - cp -rf ${CustomizedDir}/doc/* ${OMCStaticDir}/helpDoc - if [ "${C_ARG_LOWER}" == "ba" ]; then - rm -rf ${OMCStaticDir}/logo/zh_* - rm -rf ${OMCStaticDir}/helpDoc/zh_* - fi - if [ $? = 0 ]; then - echo "done" - fi - fi - ;; - *) - ${OMCBinDir}/importdb.sh - ;; -esac - -exit 0 \ No newline at end of file diff --git a/misc/sshcpid.sh b/misc/sshcpid.sh deleted file mode 100755 index 830ce919..00000000 --- a/misc/sshcpid.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash - -# 判断id_rsa密钥文件是否存在 -if [ ! -f ~/.ssh/id_rsa ];then - ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa -else - echo "id_rsa has created ..." -fi - -ip=$1 -user=$2 -passwd=$3 - -#分发到$ip主机. -expect <"$temp_file" && mv "$temp_file" "$config_file" - if [ $? = 0 ]; then - echo "done" - fi - else - echo "Exist '$line_content' at line ${line_number}" - fi -} - -# function:update line content -update_lines_content() { - local old_line="$1" - local new_line="$2" - echo -n "Updating '$old_line' to line '$new_line' ..." - sed -i "s/$old_line/$new_line/" "$config_file" - if [ $? = 0 ]; then - echo "done" - fi -} - -#line_numbers=(156 157) -line_numbers=$(for key in "${!insert_lines[@]}"; do echo "$key"; done | sort -n) - -# insert process -#for line_number in "${line_numbers[@]}"; do -#for line_number in "${!insert_lines[@]}"; do -for line_number in $line_numbers; do - insert_if_missing "$line_number" "${insert_lines[$line_number]}" -done - -# update process -for old_line in "${!update_lines[@]}"; do - update_lines_content "$old_line" "${update_lines[$old_line]}" -done diff --git a/mkpkg.sh b/mkpkg.sh deleted file mode 100755 index e0dab82d..00000000 --- a/mkpkg.sh +++ /dev/null @@ -1,69 +0,0 @@ -#!/bin/bash - -ProcList="restagent sshsvc" -ProjectL=omc -VERSION=2.2503.9 -RelDate=`date +%Y%m%d` -Release=${RelDate} -RelVer=${VERSION}-${RelDate} -Ky10Arch=ky10.aarch64 -RpmPkgName=${ProjectL}-${RelVer}.ky10.aarch64.rpm -RpmPkgRename=${ProjectL}-r${RelVer}-ky10.rpm -DebPkgName=${ProjectL}-r${RelVer}-ub*.deb -GitLocalRoot=${HOME}/omc.git -EmsBEDir=${GitLocalRoot}/be.ems -EmsBuildRoot=${GitLocalRoot}/build.ems -RpmArch=`arch` -RpmsDir=${EmsBuildRoot}/rpmbuild/RPMS/ -ReleaseDir=${EmsBuildRoot}/release -DumpToolDir=${EmsBEDir}/tools/misc - -if [[ ${RpmArch} =~ "x86_64" ]];then - RelArch=amd64 -elif [[ $RpmArch =~ "aarch64" ]];then - RelArch=arm64 -fi - -cd $EmsBEDir -for procName in $ProcList;do - cd $EmsBEDir/$procName - echo "Make $procName ..." - make -done - -#Get SQL from database -if [ "$2" = "db" ]; then - cd ${DumpToolDir} - chmod +x ${DumpToolDir}/dumpdb.sh - ${DumpToolDir}/dumpdb.sh -fi - -case "$1" in - rpm) - cd $EmsBEDir - make rpm - mv -f $RpmsDir/$RpmArch/$RpmPkgName $ReleaseDir/"$1"s/$RelArch/$RpmPkgRename - cd $ReleaseDir/"$1"s/$RelArch - rm -f omc-md5sum.txt -# rpm --addsign *.rpm - md5sum $RpmPkgRename >omc-md5sum.txt - ;; - deb) - cd $EmsBEDir - make deb - cd $ReleaseDir/"$1"s/$RelArch - rm -f omc-md5sum.txt - md5sum $DebPkgName >omc-md5sum.txt - ;; - badeb) - cd $EmsBEDir - make badeb - cd $ReleaseDir/"$1"s/$RelArch - rm -f omc-md5sum.txt - md5sum $DebPkgName >omc-md5sum.txt - ;; - *) - echo "make omc package" - echo "Usage: $0 rpm|deb|badeb " - ;; -esac \ No newline at end of file diff --git a/restagent/etc/certs/omc-server.crt b/restagent/etc/certs/omc-server.crt deleted file mode 100644 index bb91ed0b..00000000 --- a/restagent/etc/certs/omc-server.crt +++ /dev/null @@ -1,23 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDxTCCAq2gAwIBAgIUJLpIo8eueW/in9CvXZdr3oAVVJwwDQYJKoZIhvcNAQEL -BQAwcjELMAkGA1UEBhMCQVUxDDAKBgNVBAgMA09NQzERMA8GA1UEBwwIT01DLVRl -YW0xITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDEMMAoGA1UECwwD -T01DMREwDwYDVQQDDAhPTUMtVGVhbTAeFw0yNTAzMTQwNzQ2MTNaFw0yNjAzMTQw -NzQ2MTNaMHIxCzAJBgNVBAYTAkFVMQwwCgYDVQQIDANPTUMxETAPBgNVBAcMCE9N -Qy1UZWFtMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxDDAKBgNV -BAsMA09NQzERMA8GA1UEAwwIT01DLVRlYW0wggEiMA0GCSqGSIb3DQEBAQUAA4IB -DwAwggEKAoIBAQDbSyUIbKefOlKStnr+rRwVlkr1IXdMsXmmEV9zoapXDz4j4N0H -9pzEkpwvxbP+r5186CfKzueHBNc7HWinm4wSCDR6exaxG3YGODxMuLnKGPtG2tml -XBf7USeiMGNKYEF/KWmjjIPw4/9P+6qdIuneX7i0AdGynJI+3JPDT8Iwky2Cm5B4 -LRJTSJMfHO0ayrWPDoUCvKIst8w9GkFLjsbZU+AppjWj0rYWc04Oci7zqoUiFeBh -mnQKbCVrlZ4i2CKwgfuxQV2ieSkQ0QoTAXDjocrL/mRmnpvoH0jB2np3OfVlEPBP -pR4q71vuUNkra/F4zPQRPUlqemfo8+4/k3TPAgMBAAGjUzBRMB0GA1UdDgQWBBTN -+1JjU2yWzQMeSMzS5HItc4WMHDAfBgNVHSMEGDAWgBTN+1JjU2yWzQMeSMzS5HIt -c4WMHDAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBZV5RfuZ2R -0Nhs05apqwFFg8k0vJ26KMXr0i6YnlKpksEYqjXqmB58qHze6sOy7h3248FyTFlC -5YWWwwOAMiPjiH4NKMnqTthdUA4kiZiGs92jB4U/GS3lHTpsXzNssvQ8Dys7zKoj -HxnJlYpT8F6/waPPRakuP657BAVux5aAloRtqd6kGV3Donp4DwEmhdZpn6Q12igw -/+m1e9Xhxiv++H+OXzTXLerQOuUkTzKw7Ajj3hY93SeX6DOONMmoyuV1undxbvWp -lVZXo9iTGfrMkiyKF75LUyBRvvd7K5MVXJwxu0l5rvnpn6/aO1+2BUCf1ldd9VEw -DSbfrW2FfOmc ------END CERTIFICATE----- diff --git a/restagent/etc/certs/omc-server.key b/restagent/etc/certs/omc-server.key deleted file mode 100644 index 0e2c6add..00000000 --- a/restagent/etc/certs/omc-server.key +++ /dev/null @@ -1,28 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDbSyUIbKefOlKS -tnr+rRwVlkr1IXdMsXmmEV9zoapXDz4j4N0H9pzEkpwvxbP+r5186CfKzueHBNc7 -HWinm4wSCDR6exaxG3YGODxMuLnKGPtG2tmlXBf7USeiMGNKYEF/KWmjjIPw4/9P -+6qdIuneX7i0AdGynJI+3JPDT8Iwky2Cm5B4LRJTSJMfHO0ayrWPDoUCvKIst8w9 -GkFLjsbZU+AppjWj0rYWc04Oci7zqoUiFeBhmnQKbCVrlZ4i2CKwgfuxQV2ieSkQ -0QoTAXDjocrL/mRmnpvoH0jB2np3OfVlEPBPpR4q71vuUNkra/F4zPQRPUlqemfo -8+4/k3TPAgMBAAECggEACunzfuGBeiWPRH6md77/0yc2tc/OPdfmA64rqk0/yrNs -gUvzVC524OWhtlLy7AMA0IhGqrZKGZMpGb0TSfwuKBuWbl4VOV1Hg3Rls9/MXKg0 -9p11EDYZeh2GM8aQD9HjO0PsCQK48lKL5gbSwp1L4bsGg0Galna/ueHad3GkatcL -aSlFnnvzk4glAxT093F43lAxS463iPX7ueG/2322z0Ib+c6wGEFRcoYNI0/2Ax/u -6UdWxuHUs+7gDLcVa9FN7vx1UBoqAu49WlCfmtvzDTDyK7xLWlvKCx3O8uSLv4aw -/YMRg/yTulUj0dqIUcs/u/UN6AJc8Xk0H+rTpTfgcQKBgQDyq+FFvtG2xm2Ig0/9 -BLRdXPM4VgyokPxOL+j9H7LJfrjdz0cnGEuoOfBT8hDX2zFgC6dqAESSnAbPVQJP -6PaYJ8UtOWhwNUAfpRlid1/Y3iDRHWOirjeMKZRh6xN95m21FVbJUg6LfxTf8HWA -OgNwPsfjPL1Jdinw+OX++EvTBwKBgQDnVo5vRBqnLJl85Q7WXQFqjW9j7S1P8ZVL -JmAyNHlpdaNCF2VD164qDQEAi2FDLeDgV5UnAxOeDh/0Z0a3ncp8QLUkwqksBqwa -dhsUF5Jf0Dy3EjiP2w6FsTYanKGuTtV44ovlFTtXL1SSn2ijMVS17YmJgz6LhJbE -wvry6Vd1+QKBgAN7/k8PD1nNfZMhN4vNfn18sS1U5vegpU7GF1VTGDEWdbcRm9bu -3V87/bxm1GEVD59ua2f1OwbT4LEnalIVaT0EDSu6EErUKOiLaVLlneWyQsxd3Klg -UQHdMvk4892x6k9YUBex6u2L1JPmkvlVW+lHrX0QyTL91FpWaI8Bp60PAoGBAMR/ -hh7Gl2kWfg1TNyYn+9L47fvP8yQrjOc3YpBieBp2/MRfwPk+U0aOoyJGQchhSNjm -K9/mQhyH3Oapbqz6j4q5H+RooG+v/zG+zkNjvkY6R8gs5vRyWkR/APjbwI2hkrvK -mo9sWGo23rxoQOYVOeIKMUAnxdGWPsZE5Am+4DZpAoGBAJAF8MP5SlNRSF6zM3Lw -Qf5CQjsyXhll+A/ueOf1iQ+8r7xdxa6dNtcTcOZVVDsbXIBJ4/3HGTLfQCcGrhLN -KK9wljtkiYJ0h6IqcXnhp69uRV4SKRInyVEjNkiBotBPu5y6CYz5MAXFdM87q7jO -ehVc6QGJ9vLnfnwEFbAMArmv ------END PRIVATE KEY----- diff --git a/restagent/etc/certs/omc-web.crt b/restagent/etc/certs/omc-web.crt deleted file mode 100644 index bb91ed0b..00000000 --- a/restagent/etc/certs/omc-web.crt +++ /dev/null @@ -1,23 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDxTCCAq2gAwIBAgIUJLpIo8eueW/in9CvXZdr3oAVVJwwDQYJKoZIhvcNAQEL -BQAwcjELMAkGA1UEBhMCQVUxDDAKBgNVBAgMA09NQzERMA8GA1UEBwwIT01DLVRl -YW0xITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDEMMAoGA1UECwwD -T01DMREwDwYDVQQDDAhPTUMtVGVhbTAeFw0yNTAzMTQwNzQ2MTNaFw0yNjAzMTQw -NzQ2MTNaMHIxCzAJBgNVBAYTAkFVMQwwCgYDVQQIDANPTUMxETAPBgNVBAcMCE9N -Qy1UZWFtMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxDDAKBgNV -BAsMA09NQzERMA8GA1UEAwwIT01DLVRlYW0wggEiMA0GCSqGSIb3DQEBAQUAA4IB -DwAwggEKAoIBAQDbSyUIbKefOlKStnr+rRwVlkr1IXdMsXmmEV9zoapXDz4j4N0H -9pzEkpwvxbP+r5186CfKzueHBNc7HWinm4wSCDR6exaxG3YGODxMuLnKGPtG2tml -XBf7USeiMGNKYEF/KWmjjIPw4/9P+6qdIuneX7i0AdGynJI+3JPDT8Iwky2Cm5B4 -LRJTSJMfHO0ayrWPDoUCvKIst8w9GkFLjsbZU+AppjWj0rYWc04Oci7zqoUiFeBh -mnQKbCVrlZ4i2CKwgfuxQV2ieSkQ0QoTAXDjocrL/mRmnpvoH0jB2np3OfVlEPBP -pR4q71vuUNkra/F4zPQRPUlqemfo8+4/k3TPAgMBAAGjUzBRMB0GA1UdDgQWBBTN -+1JjU2yWzQMeSMzS5HItc4WMHDAfBgNVHSMEGDAWgBTN+1JjU2yWzQMeSMzS5HIt -c4WMHDAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBZV5RfuZ2R -0Nhs05apqwFFg8k0vJ26KMXr0i6YnlKpksEYqjXqmB58qHze6sOy7h3248FyTFlC -5YWWwwOAMiPjiH4NKMnqTthdUA4kiZiGs92jB4U/GS3lHTpsXzNssvQ8Dys7zKoj -HxnJlYpT8F6/waPPRakuP657BAVux5aAloRtqd6kGV3Donp4DwEmhdZpn6Q12igw -/+m1e9Xhxiv++H+OXzTXLerQOuUkTzKw7Ajj3hY93SeX6DOONMmoyuV1undxbvWp -lVZXo9iTGfrMkiyKF75LUyBRvvd7K5MVXJwxu0l5rvnpn6/aO1+2BUCf1ldd9VEw -DSbfrW2FfOmc ------END CERTIFICATE----- diff --git a/restagent/etc/certs/omc-web.key b/restagent/etc/certs/omc-web.key deleted file mode 100644 index 0e2c6add..00000000 --- a/restagent/etc/certs/omc-web.key +++ /dev/null @@ -1,28 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDbSyUIbKefOlKS -tnr+rRwVlkr1IXdMsXmmEV9zoapXDz4j4N0H9pzEkpwvxbP+r5186CfKzueHBNc7 -HWinm4wSCDR6exaxG3YGODxMuLnKGPtG2tmlXBf7USeiMGNKYEF/KWmjjIPw4/9P -+6qdIuneX7i0AdGynJI+3JPDT8Iwky2Cm5B4LRJTSJMfHO0ayrWPDoUCvKIst8w9 -GkFLjsbZU+AppjWj0rYWc04Oci7zqoUiFeBhmnQKbCVrlZ4i2CKwgfuxQV2ieSkQ -0QoTAXDjocrL/mRmnpvoH0jB2np3OfVlEPBPpR4q71vuUNkra/F4zPQRPUlqemfo -8+4/k3TPAgMBAAECggEACunzfuGBeiWPRH6md77/0yc2tc/OPdfmA64rqk0/yrNs -gUvzVC524OWhtlLy7AMA0IhGqrZKGZMpGb0TSfwuKBuWbl4VOV1Hg3Rls9/MXKg0 -9p11EDYZeh2GM8aQD9HjO0PsCQK48lKL5gbSwp1L4bsGg0Galna/ueHad3GkatcL -aSlFnnvzk4glAxT093F43lAxS463iPX7ueG/2322z0Ib+c6wGEFRcoYNI0/2Ax/u -6UdWxuHUs+7gDLcVa9FN7vx1UBoqAu49WlCfmtvzDTDyK7xLWlvKCx3O8uSLv4aw -/YMRg/yTulUj0dqIUcs/u/UN6AJc8Xk0H+rTpTfgcQKBgQDyq+FFvtG2xm2Ig0/9 -BLRdXPM4VgyokPxOL+j9H7LJfrjdz0cnGEuoOfBT8hDX2zFgC6dqAESSnAbPVQJP -6PaYJ8UtOWhwNUAfpRlid1/Y3iDRHWOirjeMKZRh6xN95m21FVbJUg6LfxTf8HWA -OgNwPsfjPL1Jdinw+OX++EvTBwKBgQDnVo5vRBqnLJl85Q7WXQFqjW9j7S1P8ZVL -JmAyNHlpdaNCF2VD164qDQEAi2FDLeDgV5UnAxOeDh/0Z0a3ncp8QLUkwqksBqwa -dhsUF5Jf0Dy3EjiP2w6FsTYanKGuTtV44ovlFTtXL1SSn2ijMVS17YmJgz6LhJbE -wvry6Vd1+QKBgAN7/k8PD1nNfZMhN4vNfn18sS1U5vegpU7GF1VTGDEWdbcRm9bu -3V87/bxm1GEVD59ua2f1OwbT4LEnalIVaT0EDSu6EErUKOiLaVLlneWyQsxd3Klg -UQHdMvk4892x6k9YUBex6u2L1JPmkvlVW+lHrX0QyTL91FpWaI8Bp60PAoGBAMR/ -hh7Gl2kWfg1TNyYn+9L47fvP8yQrjOc3YpBieBp2/MRfwPk+U0aOoyJGQchhSNjm -K9/mQhyH3Oapbqz6j4q5H+RooG+v/zG+zkNjvkY6R8gs5vRyWkR/APjbwI2hkrvK -mo9sWGo23rxoQOYVOeIKMUAnxdGWPsZE5Am+4DZpAoGBAJAF8MP5SlNRSF6zM3Lw -Qf5CQjsyXhll+A/ueOf1iQ+8r7xdxa6dNtcTcOZVVDsbXIBJ4/3HGTLfQCcGrhLN -KK9wljtkiYJ0h6IqcXnhp69uRV4SKRInyVEjNkiBotBPu5y6CYz5MAXFdM87q7jO -ehVc6QGJ9vLnfnwEFbAMArmv ------END PRIVATE KEY----- diff --git a/restagent/etc/restconf-t.yaml b/restagent/etc/restconf-t.yaml deleted file mode 100644 index 2ec34bdc..00000000 --- a/restagent/etc/restconf-t.yaml +++ /dev/null @@ -1,195 +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/restagent/log/restagent.log - level: trace - duration: 24 - count: 2 - -# rest agent listen ipv4/v6 and port, support multiple routines -# ip: 0.0.0.0 or ::0, support IPv4/v6 -# clientAuthType: 0:NoClientCert (default), 1:RequestClientCert, 2:RequireAnyClientCert, -# 3:VerifyClientCertIfGiven, 4:RequireAndVerifyClientCerts -rest: - - ipv4: 0.0.0.0 - ipv6: - port: 33030 - - ipv4: 0.0.0.0 - ipv6: - port: 33443 - scheme: https - clientAuthType: 0 - caFile: ./etc/certs/omc-ca.crt - certFile: ./etc/certs/omc-server.crt - keyFile: ./etc/certs/omc-server.key - -webServer: - enabled: false - rootDir: d:/omc.git/fe.ems.vue3/dist - listen: - - addr: :80 - schema: http - - addr: :443 - scheme: https - clientAuthType: 0 - caFile: ./etc/certs/omc-ca.crt - certFile: ./etc/certs/omc-server.crt - keyFile: ./etc/certs/omc-server.key - -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 - backup: d:/omc.git/be.ems/restagent/database - -# Redis 缓存数据,数据源声明全小写 -redis: - dataSource: - # OMC系统使用库 - default: - port: 6379 # Redis port - host: "127.0.0.1" # Redis host - password: "helloearth" - db: 10 # Redis db_num - # UDM网元用户库 - udmuser: - port: 6379 # Redis port - host: "127.0.0.1" - password: "helloearth" - db: 0 # Redis db_num - # 多个数据源时可以用这个指定默认的数据源 - defaultDataSourceName: "default" - -# sleep: time delay for after write buffer (millisecond) -# deadLine: timeout for io read and write (second) -mml: - port: 4100 - port2: 5002 - sleep: 200 - deadLine: 10 - sizeRow: 600 - sizeCol: 128 - bufferSize: 65535 - user: admin - password: admin - mmlHome: ./mmlhome - -# NE config -ne: - user: root - 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,no space - 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: GD - vendor: "" - dn: 4600 - chk2ne: false - sn: "-" - checksign: false - rootDir: ./ - binDir: ./bin - backup: ./backup - upload: ./upload - frontUpload: d:/omc.git/fe.ems/upload - frontTraceDir: d:/omc.git/fe.ems/trace - software: ./software - license: ./license - gtpUri: gtp:192.168.2.219:2152 - checkContentType: false - testMode: false - rbacMode: true - runDir: - cmdTimeout: 120 - -# Alarm module setting -# Forward interface: -# email/sms -# smProxy: sms(Short Message Service)/smsc(SMS Centre) -alarm: - forwardAlarm: true - email: - smtp: mail.agrandtech.com - port: 25 - user: smtpext@agrandtech.com - password: "1000smtp@omc!" - # TLS skip verify: true/false - tlsSkipVerify: true - smProxy: smsc - sms: - apiURL: http://smsc.xxx.com/ - accessKeyID: xxxx - accessKeySecret: xxxx - signName: xxx SMSC - templateCode: 1000 - smsc: - addr: "192.168.13.114:2775" - systemID: "omc" - password: "omc123" - systemType: "UTRAN" - -#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: ./etc/certs/omc_pub.key - privateKey: ./etc/certs/omc_pri.key - -# 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: true - file: ./etc/testconfig.yaml - -# 静态文件配置, 相对项目根路径或填绝对路径 -staticFile: - # 默认资源,dir目录需要预先创建 - default: - prefix: "/static" - dir: "./static" - # 文件上传资源目录映射,与项目目录同级 - upload: - prefix: "/upload" - dir: "./upload" diff --git a/restagent/etc/testconfig.yaml b/restagent/etc/testconfig.yaml deleted file mode 100644 index b0012901..00000000 --- a/restagent/etc/testconfig.yaml +++ /dev/null @@ -1,19 +0,0 @@ -UDM: - capUsed: 16 - featureEnabled: [N8,N10,N13] -AUSF: - capUsed: 16 - featureEnabled: [N12] -AMF: - capUsed: 16 - featureEnabled: [N1,N2,N8,N11,N12,N14,N15] -SMF: - capUsed: 16 - featureEnabled: [N4,N7,N10,N11] -UPF: - capUsed: 16 - featureEnabled: [N3,N4,N6,N9] -OMC: - capUsed: 0 - featureEnabled: [] - diff --git a/restagent/makefile b/restagent/makefile deleted file mode 100644 index 0c0781e8..00000000 --- a/restagent/makefile +++ /dev/null @@ -1,26 +0,0 @@ -# Makefile for rest agent project - -PROJECT = OMC -VERSION = 2.2503.9 -PLATFORM = amd64 -ARMPLATFORM = aarch64 -BUILDDIR = ../../build -DEBBUILDDIR = ../../debbuild -RPMBUILDDIR = $(HOME)/goprojects/rpmbuild -INSTALLDIR = /usr/local/omc -RELEASEDIR = ../../release -LIBDIR = be.ems/lib -BINNAME = restagent - -.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/restagent/static/helpDoc/zh_doc.pdf b/restagent/static/helpDoc/zh_doc.pdf deleted file mode 100644 index e25d5cae..00000000 Binary files a/restagent/static/helpDoc/zh_doc.pdf and /dev/null differ diff --git a/restagent/static/logo/en_brand.png b/restagent/static/logo/en_brand.png deleted file mode 100644 index 200025e2..00000000 Binary files a/restagent/static/logo/en_brand.png and /dev/null differ diff --git a/restagent/static/logo/en_icon.png b/restagent/static/logo/en_icon.png deleted file mode 100644 index 3ed445dd..00000000 Binary files a/restagent/static/logo/en_icon.png and /dev/null differ diff --git a/restagent/static/logo/zh_brand.png b/restagent/static/logo/zh_brand.png deleted file mode 100644 index 5810cf56..00000000 Binary files a/restagent/static/logo/zh_brand.png and /dev/null differ diff --git a/restagent/static/logo/zh_icon.png b/restagent/static/logo/zh_icon.png deleted file mode 100644 index a5b69077..00000000 Binary files a/restagent/static/logo/zh_icon.png and /dev/null differ diff --git a/src/app.go b/src/app.go index e3bc6847..2f47f4ed 100644 --- a/src/app.go +++ b/src/app.go @@ -7,12 +7,15 @@ import ( "be.ems/src/framework/errorcatch" "be.ems/src/framework/middleware" "be.ems/src/framework/middleware/security" + + "be.ems/src/modules/auth" "be.ems/src/modules/chart" "be.ems/src/modules/common" "be.ems/src/modules/crontask" "be.ems/src/modules/monitor" networkdata "be.ems/src/modules/network_data" networkelement "be.ems/src/modules/network_element" + "be.ems/src/modules/oauth2" "be.ems/src/modules/system" "be.ems/src/modules/tool" "be.ems/src/modules/trace" @@ -21,26 +24,8 @@ import ( "github.com/gin-gonic/gin" ) -// AppEngine 路由函数句柄,交给由 http.ListenAndServe(addr, router) -func AppEngine() *gin.Engine { - app := initAppEngine() - - // 初始全局默认 - initDefeat(app) - - // 初始模块路由 - initModulesRoute(app) - - // 首次安装启动记录 - // machine.Launch() - - // 读取服务配置 - app.ForwardedByClientIP = config.Get("server.proxy").(bool) - return app -} - // 初始应用引擎 -func initAppEngine() *gin.Engine { +func AppEngine() *gin.Engine { var app *gin.Engine // 禁止控制台日志输出的颜色 @@ -54,12 +39,12 @@ func initAppEngine() *gin.Engine { } else { app = gin.Default() } - + app.ForwardedByClientIP = true return app } // 初始全局默认 -func initDefeat(app *gin.Engine) { +func DefeatConfig(app *gin.Engine) { // 全局中间件 if config.Env() == "local" { app.Use(middleware.Report()) @@ -94,15 +79,21 @@ func initDefeat(app *gin.Engine) { } // 初始模块路由 -func initModulesRoute(app *gin.Engine) { - // 通用模块 - common.Setup(app) +func ModulesRoute(app *gin.Engine) { // 系统模块 system.Setup(app) + // 认证模块 + auth.Setup(app) + // 开放客户端模块 + oauth2.Setup(app) + // 通用模块 + common.Setup(app) + // 网元功能模块 networkelement.Setup(app) // 网元数据模块 networkdata.Setup(app) + // 跟踪模块 trace.Setup(app) // 图表模块 @@ -111,6 +102,7 @@ func initModulesRoute(app *gin.Engine) { tool.Setup(app) // ws 模块 ws.Setup(app) + // 调度任务模块--暂无接口 crontask.Setup(app) // 监控模块 - 含调度处理加入队列,放最后 diff --git a/src/config/config.default.yaml b/src/config/config.default.yaml index 9d324f4a..c98c4678 100644 --- a/src/config/config.default.yaml +++ b/src/config/config.default.yaml @@ -1,7 +1,11 @@ -# 应用服务配置 -server: - # 是否开启代理 - proxy: false +# 运行版本 std/lite +serverVersion: "std" +# 运行模式 system/docker +serverMode: "system" +# 登录认证,默认打开 +serverLoginAuth: true +# 接口加密,默认关闭 +serverCryptoApi: false # 日志 logger: @@ -131,33 +135,33 @@ security: # JWT 令牌配置 jwt: # 令牌算法 HS256 HS384 HS512 - algorithm: "HS512" + algorithm: "HS256" # 令牌密钥 secret: "217a0481c7f9cfe1cb547d32ee012b0f" - # 令牌有效期(默认120分钟) - expiresIn: 120 - # 验证令牌有效期,相差不足xx分钟,自动刷新缓存 - refreshIn: 20 + # 访问令牌有效期(默认15分钟) + expiresIn: 15 + # 刷新令牌有效期(默认7*24*60分钟) + refreshIn: 10080 # DB 数据源 database: dataSource: # 默认数据库实例 - # default: - # type: "mysql" - # host: "127.0.0.1" - # port: 3306 - # username: "" - # password: "" - # database: "" - # logging: false + std: + type: "mysql" + host: "127.0.0.1" + port: 3306 + username: "" + password: "" + database: "" + logging: false # 内置轻量级数据库 lite: type: "sqlite" database: "" logging: false # 多个数据源时可以用这个指定默认的数据源 - defaultDataSourceName: "default" + defaultDataSourceName: "std" # Redis 缓存数据 redis: @@ -179,21 +183,9 @@ aes: # 应用密钥 appKey: "E83dbfeb35BA4839232e2761b0FE5f32" -# 用户配置 -user: - # 登录认证,默认打开 - loginAuth: true - # 接口加密,默认打开 - cryptoApi: false - # 密码 - password: - # 密码最大错误次数 - maxRetryCount: 5 - # 密码锁定时间,单位分钟(默认10分钟) - lockTime: 10 - # 设定为系统管理员的用户ID - system: - - 1 +# 设定为系统管理员的用户ID +systemUser: + - 1 # char 字符验证码配置 charCaptcha: diff --git a/src/config/config.local.yaml b/src/config/config.local.yaml index f765eddb..92189351 100644 --- a/src/config/config.local.yaml +++ b/src/config/config.local.yaml @@ -1,10 +1,6 @@ -# 应用服务配置 -server: - proxy: true - # 日志 logger: - fileDir: "C:/var/log" + fileDir: "/var/log" fileName: "omc.log" level: 0 # 日志记录的等级 0:silent<1:info<2:warn<3:error maxDay: 7 # 日志会保留 180 天 @@ -15,31 +11,31 @@ staticFile: # 默认资源,dir目录需要预先创建 default: prefix: "/static" - dir: "C:/usr/local/omc/static" + dir: "/usr/local/omc/static" # 文件上传资源目录映射,与项目目录同级 upload: prefix: "/upload" - dir: "C:/usr/local/omc/upload" + dir: "/usr/local/omc/upload" # DB 数据源 database: dataSource: # 默认数据库实例 - # default: - # type: "mysql" - # host: "127.0.0.1" - # port: 3306 - # username: "" - # password: "" - # database: "" - # logging: false + std: + type: "mysql" + host: "127.0.0.1" + port: 3306 + username: "root" + password: "1000omc@kp!" + database: "omc_db" + logging: true # 内置轻量级数据库 lite: type: "sqlite" - database: "" - logging: false + database: "/usr/local/etc/omc/database/omc_db.sqlite" + logging: true # 多个数据源时可以用这个指定默认的数据源 - defaultDataSourceName: "lite" + defaultDataSourceName: "std" # Redis 缓存数据 redis: @@ -47,7 +43,7 @@ redis: default: port: 6379 # Redis port host: "127.0.0.1" # Redis host - password: "" + password: "helloearth" db: 0 # Redis db_num # 多个数据源时可以用这个指定默认的数据源 defaultDataSourceName: "default" diff --git a/src/config/config.prod.yaml b/src/config/config.prod.yaml index 5deaaf72..39fda875 100644 --- a/src/config/config.prod.yaml +++ b/src/config/config.prod.yaml @@ -1,27 +1,22 @@ -# 应用服务配置 -server: - # 是否开启代理 - proxy: true - # DB 数据源 database: dataSource: # 默认数据库实例 - # default: - # type: "mysql" - # host: "127.0.0.1" - # port: 3306 - # username: "" - # password: "" - # database: "" - # logging: false + std: + type: "mysql" + host: "127.0.0.1" + port: 33066 + username: "root" + password: "1000omc@kp!" + database: "omc_db" + logging: false # 内置轻量级数据库 lite: type: "sqlite" - database: "/usr/local/omc/database/omc_db.sqlite" + database: "/usr/local/etc/omc/database/omc_db.sqlite" logging: false # 多个数据源时可以用这个指定默认的数据源 - defaultDataSourceName: "lite" + defaultDataSourceName: "std" # Redis 缓存数据 redis: @@ -30,6 +25,6 @@ redis: port: 6379 # Redis port host: "127.0.0.1" # Redis host password: "helloearth" - db: 10 # Redis db_num + db: 0 # Redis db_num # 多个数据源时可以用这个指定默认的数据源 defaultDataSourceName: "default" diff --git a/src/framework/config/config.go b/src/framework/config/config.go index c161a6f5..946b044c 100644 --- a/src/framework/config/config.go +++ b/src/framework/config/config.go @@ -12,9 +12,15 @@ import ( "github.com/spf13/viper" libConfig "be.ems/lib/config" - libGlobal "be.ems/lib/global" ) +var ( + Version string = "-" + BuildTime string = "-" + GoVer string = "-" +) + +// 程序配置 var conf *viper.Viper // 初始化程序配置 @@ -28,9 +34,9 @@ func InitConfig(configDir *embed.FS) { func initFlag() { // --env prod pflag.String("env", "prod", "Specify Run Environment Configuration local or prod") - // --c /etc/restconf.yaml - // -c /etc/restconf.yaml - pflag.StringP("config", "c", "./etc/restconf.yaml", "Specify Configuration File") + // --c /usr/local/etc/omc/omc.yaml + // -c /usr/local/etc/omc/omc.yaml + pflag.StringP("config", "c", "/usr/local/etc/omc/omc.yaml", "Specify Configuration File") // --sqlPath ./sql/20250228.sql pflag.String("sqlPath", "", "Execution SQL File Path") // --sqlSource default @@ -45,7 +51,7 @@ func initFlag() { // 参数固定输出 if *pVersion { - buildInfo := fmt.Sprintf("OMC version: %s\n%s\n%s\n\n", libGlobal.Version, libGlobal.BuildTime, libGlobal.GoVer) + buildInfo := fmt.Sprintf("OMC \nBuildVer: %s\nBuildTime: %s\nBuildEnv: %s\n", Version, BuildTime, GoVer) fmt.Println(buildInfo) os.Exit(1) } @@ -74,7 +80,7 @@ func initViper(configDir *embed.FS) { // 当期服务环境运行配置 => local env := conf.GetString("env") - log.Printf("current service environment operation configuration => %s \n", env) + log.Printf("current service environment configuration => %s \n", env) // 加载运行配置文件合并相同配置 envConfigPath := fmt.Sprintf("config/config.%s.yaml", env) @@ -160,7 +166,7 @@ func RunTime() time.Time { // Get 获取配置信息 // -// Get("server.proxy") +// Get("redis.defaultDataSourceName") func Get(key string) any { return conf.Get(key) } @@ -181,7 +187,7 @@ func IsSystemUser(userId int64) bool { return false } // 从配置中获取系统管理员ID列表 - arr := Get("user.system").([]any) + arr := Get("systemUser").([]any) for _, v := range arr { if fmt.Sprint(v) == fmt.Sprint(userId) { return true diff --git a/src/framework/constants/cache_key.go b/src/framework/constants/cache_key.go index 901aa249..58fbf785 100644 --- a/src/framework/constants/cache_key.go +++ b/src/framework/constants/cache_key.go @@ -2,8 +2,8 @@ package constants // 缓存的key常量 const ( - // CACHE_LOGIN_TOKEN 登录用户 - CACHE_LOGIN_TOKEN = "login_tokens" + // CACHE_TOKEN_DEVICE 登录用户令牌标识 + CACHE_TOKEN_DEVICE = "token_devices" // CACHE_CAPTCHA_CODE 验证码 CACHE_CAPTCHA_CODE = "captcha_codes" // CACHE_SYS_CONFIG 参数管理 @@ -16,6 +16,10 @@ const ( CACHE_RATE_LIMIT = "rate_limit" // CACHE_PWD_ERR_COUNT 登录账户密码错误次数 CACHE_PWD_ERR_COUNT = "pwd_err_count" + // CACHE_OAUTH2_DEVICE 授权客户端令牌标识 + CACHE_OAUTH2_DEVICE = "oauth2_devices" + // CACHE_OAUTH2_CODE 客户端授权码 + CACHE_OAUTH2_CODE = "oauth2_codes" // CACHE_I18N 国际化语言管理 CACHE_I18N = "i18n" // CACHE_NE_INFO 网元信息管理 diff --git a/src/framework/constants/captcha.go b/src/framework/constants/captcha.go deleted file mode 100644 index ac377fef..00000000 --- a/src/framework/constants/captcha.go +++ /dev/null @@ -1,11 +0,0 @@ -package constants - -// 验证码常量信息 -const ( - // CAPTCHA_EXPIRATION 验证码有效期,单位秒 - CAPTCHA_EXPIRATION = 2 * 60 - // CAPTCHA_TYPE_CHAR 验证码类型-数值计算 - CAPTCHA_TYPE_CHAR = "char" - // CAPTCHA_TYPE_MATH 验证码类型-字符验证 - CAPTCHA_TYPE_MATH = "math" -) diff --git a/src/framework/constants/common.go b/src/framework/constants/common.go index f14ebece..3822cbfa 100644 --- a/src/framework/constants/common.go +++ b/src/framework/constants/common.go @@ -10,5 +10,8 @@ const ( // CTX_LOGIN_USER 上下文信息-登录用户 const CTX_LOGIN_USER = "ctx:login_user" +// CTX_LOGIN_OAUTH2 上下文信息-认证客户端 +const CTX_LOGIN_OAUTH2 = "ctx:login_oauth2" + // 启动-引导系统初始 const LAUNCH_BOOTLOADER = "bootloader" diff --git a/src/framework/constants/token.go b/src/framework/constants/token.go index 70b192e3..86461080 100644 --- a/src/framework/constants/token.go +++ b/src/framework/constants/token.go @@ -3,19 +3,19 @@ package constants // 令牌常量信息 // HEADER_PREFIX 令牌-请求头标识前缀 -const HEADER_PREFIX = "Bearer " +const HEADER_PREFIX = "Bearer" // HEADER_KEY 令牌-请求头标识 const HEADER_KEY = "Authorization" -// JWT_UUID 令牌-JWT唯一标识字段 -const JWT_UUID = "uuid" +// JWT_DEVICE_ID 令牌-JWT设备标识字段 +const JWT_DEVICE_ID = "device_id" // JWT_USER_ID 令牌-JWT标识用户主键字段 const JWT_USER_ID = "user_id" -// JWT_USER_NAME 令牌-JWT标识用户登录账号字段 -const JWT_USER_NAME = "user_name" +// JWT_CLIENT_ID 令牌-JWT标识客户端ID字段 +const JWT_CLIENT_ID = "client_id" // NMS北向使用-数据响应字段和请求头授权 const ACCESS_TOKEN = "accessToken" diff --git a/src/framework/cron/cron_log.go b/src/framework/cron/cron_log.go index 45136721..b1ade2ed 100644 --- a/src/framework/cron/cron_log.go +++ b/src/framework/cron/cron_log.go @@ -96,8 +96,8 @@ func (jl *jobLogData) SaveLog(statusFlag string) { "message": jl.Result, }) jobMsg := string(jsonByte) - if len(jobMsg) > 500 { - jobMsg = jobMsg[:500] + if len(jobMsg) > 2000 { + jobMsg = jobMsg[:2000] } // 创建日志对象 diff --git a/src/framework/database/db/db.go b/src/framework/database/db/db.go index 62a099cb..971ef042 100644 --- a/src/framework/database/db/db.go +++ b/src/framework/database/db/db.go @@ -89,7 +89,8 @@ func Connect() { // 创建连接 db, err := gorm.Open(info.dialectic, opts) if err != nil { - logger.Fatalf("failed error db connect: %s", err) + logger.Errorf("failed error db connect: %s", err) + continue } // 获取底层 SQL 数据库连接 sqlDB, err := db.DB() @@ -135,7 +136,7 @@ func DB(source string) *gorm.DB { } db := dbMap[source] if db == nil { - logger.Fatalf("not database source: %s", source) + logger.Errorf("not database source: %s", source) return nil } return db diff --git a/src/framework/database/db/expand.go b/src/framework/database/db/expand.go index 7aaa51b7..7212e4ca 100644 --- a/src/framework/database/db/expand.go +++ b/src/framework/database/db/expand.go @@ -60,8 +60,8 @@ func ImportSQL() { processSQLFile(db, sqlPath) } - log.Println("Import SQL End") - os.Exit(1) + log.Println("process success") + os.Exit(0) } // 处理单个SQL文件的通用函数 diff --git a/src/framework/database/redis/redis.go b/src/framework/database/redis/redis.go index 077075bf..82ffccbf 100644 --- a/src/framework/database/redis/redis.go +++ b/src/framework/database/redis/redis.go @@ -16,6 +16,21 @@ import ( // Redis连接实例 var rdbMap = make(map[string]*redis.Client) +// 声明定义限流脚本命令 +var rateLimitCommand = redis.NewScript(` +local key = KEYS[1] +local time = tonumber(ARGV[1]) +local count = tonumber(ARGV[2]) +local current = redis.call('get', key); +if current and tonumber(current) >= count then + return tonumber(current); +end +current = redis.call('incr', key) +if tonumber(current) == 1 then + redis.call('expire', key, time) +end +return tonumber(current);`) + // Connect 连接Redis实例 func Connect() { ctx := context.Background() @@ -33,7 +48,7 @@ func Connect() { // 测试数据库连接 pong, err := rdb.Ping(ctx).Result() if err != nil { - logger.Fatalf("failed error redis connect: %s is %v", k, err) + logger.Fatalf("Ping redis %s is %v", k, err) } logger.Infof("redis %s %d %s connection is successful.", k, client["db"].(int), pong) rdbMap[k] = rdb @@ -139,6 +154,39 @@ func CommandStats(source string) []map[string]string { return statsObjArr } +// Has 判断是否存在 +func Has(source string, keys ...string) (int64, error) { + // 数据源 + rdb := RDB(source) + if rdb == nil { + return 0, fmt.Errorf("redis not client") + } + + ctx := context.Background() + exists, err := rdb.Exists(ctx, keys...).Result() + if err != nil { + return 0, err + } + return exists, nil +} + +// SetExpire 设置过期时间 +func SetExpire(source, key string, expiration time.Duration) error { + // 数据源 + rdb := RDB(source) + if rdb == nil { + return fmt.Errorf("redis not client") + } + + ctx := context.Background() + err := rdb.Expire(ctx, key, expiration).Err() + if err != nil { + logger.Errorf("redis Expire err %v", err) + return err + } + return nil +} + // GetExpire 获取键的剩余有效时间(秒) func GetExpire(source string, key string) (int64, error) { // 数据源 @@ -227,41 +275,8 @@ func Get(source, key string) (string, error) { return v, nil } -// Has 判断是否存在 -func Has(source string, keys ...string) (int64, error) { - // 数据源 - rdb := RDB(source) - if rdb == nil { - return 0, fmt.Errorf("redis not client") - } - - ctx := context.Background() - exists, err := rdb.Exists(ctx, keys...).Result() - if err != nil { - return 0, err - } - return exists, nil -} - // Set 设置缓存数据 -func Set(source, key string, value any) error { - // 数据源 - rdb := RDB(source) - if rdb == nil { - return fmt.Errorf("redis not client") - } - - ctx := context.Background() - err := rdb.Set(ctx, key, value, 0).Err() - if err != nil { - logger.Errorf("redis Set err %v", err) - return err - } - return nil -} - -// SetByExpire 设置缓存数据与过期时间 -func SetByExpire(source, key string, value any, expiration time.Duration) error { +func Set(source, key string, value any, expiration time.Duration) error { // 数据源 rdb := RDB(source) if rdb == nil { @@ -271,7 +286,7 @@ func SetByExpire(source, key string, value any, expiration time.Duration) error ctx := context.Background() err := rdb.Set(ctx, key, value, expiration).Err() if err != nil { - logger.Errorf("redis SetByExpire err %v", err) + logger.Errorf("redis Set err %v", err) return err } return nil @@ -329,18 +344,3 @@ func RateLimit(source, limitKey string, time, count int64) (int64, error) { } return result.(int64), err } - -// 声明定义限流脚本命令 -var rateLimitCommand = redis.NewScript(` -local key = KEYS[1] -local time = tonumber(ARGV[1]) -local count = tonumber(ARGV[2]) -local current = redis.call('get', key); -if current and tonumber(current) >= count then - return tonumber(current); -end -current = redis.call('incr', key) -if tonumber(current) == 1 then - redis.call('expire', key, time) -end -return tonumber(current);`) diff --git a/src/framework/errorcatch/errorcatch.go b/src/framework/errorcatch/errorcatch.go index e18843e1..83f842b7 100644 --- a/src/framework/errorcatch/errorcatch.go +++ b/src/framework/errorcatch/errorcatch.go @@ -20,14 +20,14 @@ func ErrorCatch() gin.HandlerFunc { // 返回错误响应给客户端 if config.Env() == "prod" { - c.JSON(500, resp.CodeMsg(500, "Internal Server Errors")) + c.JSON(500, resp.CodeMsg(500001, "Internal Server Errors")) } else { // 通过实现 error 接口的 Error() 方法自定义错误类型进行捕获 switch v := err.(type) { case error: - c.JSON(500, resp.CodeMsg(500, v.Error())) + c.JSON(500, resp.CodeMsg(500001, v.Error())) default: - c.JSON(500, resp.CodeMsg(500, fmt.Sprint(err))) + c.JSON(500, resp.CodeMsg(500001, fmt.Sprint(err))) } } diff --git a/src/framework/middleware/authorize_oauth2.go b/src/framework/middleware/authorize_oauth2.go new file mode 100644 index 00000000..4705d6b7 --- /dev/null +++ b/src/framework/middleware/authorize_oauth2.go @@ -0,0 +1,66 @@ +package middleware + +import ( + "fmt" + + "github.com/gin-gonic/gin" + + "be.ems/src/framework/constants" + "be.ems/src/framework/reqctx" + "be.ems/src/framework/resp" + "be.ems/src/framework/token" +) + +// AuthorizeOauth2 客户端授权认证校验 +// +// scope 客户端授权范围,例如:[]string{"read","write"} +func AuthorizeOauth2(scope []string) gin.HandlerFunc { + return func(c *gin.Context) { + // 获取请求头标识信息 + tokenStr := reqctx.Authorization(c) + if tokenStr == "" { + c.JSON(401, resp.CodeMsg(401003, "authorization token is empty")) + c.Abort() // 停止执行后续的处理函数 + return + } + + // 验证令牌 + claims, err := token.Oauth2TokenVerify(tokenStr, "access") + if err != nil { + c.JSON(401, resp.CodeMsg(401001, err.Error())) + c.Abort() // 停止执行后续的处理函数 + return + } + + // 获取缓存的用户信息 + info := token.Oauth2InfoGet(claims) + if info.ClientId == "" { + c.JSON(401, resp.CodeMsg(401002, "invalid login user information")) + c.Abort() // 停止执行后续的处理函数 + return + } + c.Set(constants.CTX_LOGIN_OAUTH2, info) + + // 客户端权限校验 + if scope != nil { + var hasScope bool = false + for _, item := range info.Scope { + for _, v := range scope { + if item == v { + hasScope = true + break + } + } + } + if !hasScope { + msg := fmt.Sprintf("unauthorized access %s %s", c.Request.Method, c.Request.RequestURI) + c.JSON(403, resp.CodeMsg(403001, msg)) + c.Abort() // 停止执行后续的处理函数 + return + } + } + + // 调用下一个处理程序 + c.Next() + } +} diff --git a/src/framework/middleware/pre_authorize.go b/src/framework/middleware/authorize_user.go similarity index 80% rename from src/framework/middleware/pre_authorize.go rename to src/framework/middleware/authorize_user.go index a19b87d6..f34d487e 100644 --- a/src/framework/middleware/pre_authorize.go +++ b/src/framework/middleware/authorize_user.go @@ -1,16 +1,17 @@ package middleware import ( + "fmt" "strings" + "github.com/gin-gonic/gin" + "be.ems/src/framework/config" "be.ems/src/framework/constants" - "be.ems/src/framework/i18n" "be.ems/src/framework/reqctx" "be.ems/src/framework/resp" "be.ems/src/framework/token" - - "github.com/gin-gonic/gin" + "be.ems/src/framework/utils/parse" ) /**无Token可访问白名单 */ @@ -26,7 +27,7 @@ var URL_WHITE_LIST = []string{ "/oauth/token", } -// PreAuthorize 用户身份授权认证校验 +// AuthorizeUser 用户身份授权认证校验 // // 只需含有其中角色 "hasRoles": {"xxx"}, // @@ -35,13 +36,10 @@ var URL_WHITE_LIST = []string{ // 同时匹配其中角色 "matchRoles": {"xxx"}, // // 同时匹配其中权限 "matchPerms": {"xxx"}, -func PreAuthorize(options map[string][]string) gin.HandlerFunc { +func AuthorizeUser(options map[string][]string) gin.HandlerFunc { return func(c *gin.Context) { // 登录认证,默认打开 - enable := true - if v := config.Get("user.loginAuth"); v != nil { - enable = v.(bool) - } + enable := parse.Boolean(config.Get("serverLoginAuth")) if !enable { loginUser, _ := reqctx.LoginUser(c) loginUser.UserId = 2 @@ -53,12 +51,9 @@ func PreAuthorize(options map[string][]string) gin.HandlerFunc { return } - language := reqctx.AcceptLanguage(c) - - requestURI := c.Request.RequestURI - // 判断白名单 isWhite := false + requestURI := c.Request.RequestURI for _, w := range URL_WHITE_LIST { if strings.Contains(requestURI, w) { isWhite = true @@ -73,42 +68,39 @@ func PreAuthorize(options map[string][]string) gin.HandlerFunc { // 获取请求头标识信息 tokenStr := reqctx.Authorization(c) if tokenStr == "" { - c.JSON(401, resp.CodeMsg(401, i18n.TKey(language, "app.common.err401"))) + c.JSON(401, resp.CodeMsg(401003, "authorization token is empty")) c.Abort() // 停止执行后续的处理函数 return } // 验证令牌 - claims, err := token.Verify(tokenStr) + claims, err := token.UserTokenVerify(tokenStr, "access") if err != nil { - c.JSON(401, resp.CodeMsg(401, err.Error())) + c.JSON(401, resp.CodeMsg(401001, err.Error())) c.Abort() // 停止执行后续的处理函数 return } // 获取缓存的用户信息 - loginUser := token.Info(claims) - if loginUser.UserId <= 0 { - c.JSON(401, resp.CodeMsg(401, i18n.TKey(language, "app.common.err401"))) + info := token.UserInfoGet(claims) + if info.UserId <= 0 { + c.JSON(401, resp.CodeMsg(401002, "invalid login user information")) c.Abort() // 停止执行后续的处理函数 return } - - // 检查刷新有效期后存入上下文 - token.RefreshIn(&loginUser) - c.Set(constants.CTX_LOGIN_USER, loginUser) + c.Set(constants.CTX_LOGIN_USER, info) // 登录用户角色权限校验 if options != nil { var roles []string - for _, item := range loginUser.User.Roles { + for _, item := range info.User.Roles { roles = append(roles, item.RoleKey) } - perms := loginUser.Permissions + perms := info.Permissions verifyOk := verifyRolePermission(roles, perms, options) if !verifyOk { - msg := i18n.TTemplate(language, "app.common.err403", map[string]any{"method": c.Request.Method, "requestURI": requestURI}) - c.JSON(403, resp.CodeMsg(403, msg)) + msg := fmt.Sprintf("unauthorized access %s %s", c.Request.Method, c.Request.RequestURI) + c.JSON(403, resp.CodeMsg(403001, msg)) c.Abort() // 停止执行后续的处理函数 return } @@ -127,7 +119,7 @@ func PreAuthorize(options map[string][]string) gin.HandlerFunc { // // options 参数 func verifyRolePermission(roles, perms []string, options map[string][]string) bool { - // 直接放行 管理员角色或任意权限 + // 直接放行 系统管理员角色或任意权限 if contains(roles, constants.SYS_ROLE_SYSTEM_KEY) || contains(perms, constants.SYS_PERMISSION_SYSTEM) { return true } diff --git a/src/framework/middleware/collectlogs/operate_log.go b/src/framework/middleware/collectlogs/operate_log.go index 6af8b444..7407ce12 100644 --- a/src/framework/middleware/collectlogs/operate_log.go +++ b/src/framework/middleware/collectlogs/operate_log.go @@ -103,7 +103,7 @@ func OperateLog(options Options) gin.HandlerFunc { // 获取登录用户信息 loginUser, err := reqctx.LoginUser(c) if err != nil { - c.JSON(401, resp.CodeMsg(401, i18n.TKey(language, err.Error()))) + c.JSON(401, resp.CodeMsg(401002, i18n.TKey(language, err.Error()))) c.Abort() // 停止执行后续的处理函数 return } diff --git a/src/framework/middleware/crypto_api.go b/src/framework/middleware/crypto_api.go index 6c0ede4c..5e98b2c5 100644 --- a/src/framework/middleware/crypto_api.go +++ b/src/framework/middleware/crypto_api.go @@ -26,10 +26,7 @@ import ( func CryptoApi(requestDecrypt, responseEncrypt bool) gin.HandlerFunc { return func(c *gin.Context) { // 登录认证,默认打开 - enable := true - if v := config.Get("user.cryptoApi"); v != nil && enable { - enable = v.(bool) - } + enable := parse.Boolean(config.Get("serverCryptoApi")) if !enable { c.Next() return @@ -54,7 +51,7 @@ func CryptoApi(requestDecrypt, responseEncrypt bool) gin.HandlerFunc { // 是否存在data字段数据 if contentDe == "" { - c.JSON(400, resp.ErrMsg("decrypt not found field data")) + c.JSON(422, resp.CodeMsg(422002, "decrypt not found field data")) c.Abort() // 停止执行后续的处理函数 return } @@ -64,7 +61,7 @@ func CryptoApi(requestDecrypt, responseEncrypt bool) gin.HandlerFunc { dataBodyStr, err := crypto.AESDecryptBase64(contentDe, apiKey) if err != nil { logger.Errorf("CryptoApi decrypt err => %v", err) - c.JSON(400, resp.ErrMsg("decrypted data could not be parsed")) + c.JSON(422, resp.CodeMsg(422001, "decrypted data could not be parsed")) c.Abort() // 停止执行后续的处理函数 return } diff --git a/src/framework/middleware/operate_log.go b/src/framework/middleware/operate_log.go index 75542f40..d31c6d63 100644 --- a/src/framework/middleware/operate_log.go +++ b/src/framework/middleware/operate_log.go @@ -88,7 +88,7 @@ func OperateLog(options Options) gin.HandlerFunc { // 获取登录用户信息 loginUser, err := reqctx.LoginUser(c) if err != nil { - c.JSON(401, resp.CodeMsg(401, "无效身份授权")) + c.JSON(401, resp.CodeMsg(401002, "invalid login user information")) c.Abort() // 停止执行后续的处理函数 return } @@ -134,7 +134,7 @@ func OperateLog(options Options) gin.HandlerFunc { contentDisposition := c.Writer.Header().Get("Content-Disposition") contentType := c.Writer.Header().Get("Content-Type") content := contentType + contentDisposition - msg := fmt.Sprintf(`{"status":"%d","size":"%d","content-type":"%s"}`, status, c.Writer.Size(), content) + msg := fmt.Sprintf(`{"status":"%d","size":%d,"content-type":"%s"}`, status, c.Writer.Size(), content) operaLog.OperaMsg = msg } diff --git a/src/framework/middleware/rate_limit.go b/src/framework/middleware/rate_limit.go index 7b650b48..d5cefe70 100644 --- a/src/framework/middleware/rate_limit.go +++ b/src/framework/middleware/rate_limit.go @@ -64,7 +64,7 @@ func RateLimit(option LimitOption) gin.HandlerFunc { if option.Type == LIMIT_USER { loginUser, err := reqctx.LoginUser(c) if err != nil { - c.JSON(401, resp.CodeMsg(40003, err.Error())) + c.JSON(401, resp.CodeMsg(401002, "invalid login user information")) c.Abort() // 停止执行后续的处理函数 return } @@ -80,13 +80,13 @@ func RateLimit(option LimitOption) gin.HandlerFunc { // 在Redis查询并记录请求次数 rateCount, err := redis.RateLimit("", limitKey, option.Time, option.Count) if err != nil { - c.JSON(200, resp.CodeMsg(4013, "访问过于频繁,请稍候再试")) + c.JSON(200, resp.ErrMsg("access too often, please try again later")) c.Abort() // 停止执行后续的处理函数 return } rateTime, err := redis.GetExpire("", limitKey) if err != nil { - c.JSON(200, resp.CodeMsg(4013, "访问过于频繁,请稍候再试")) + c.JSON(200, resp.ErrMsg("access too often, please try again later")) c.Abort() // 停止执行后续的处理函数 return } @@ -97,7 +97,7 @@ func RateLimit(option LimitOption) gin.HandlerFunc { c.Header("X-RateLimit-Reset", fmt.Sprintf("%d", time.Now().Unix()+rateTime)) // 重置时间戳 if rateCount >= option.Count { - c.JSON(200, resp.CodeMsg(4013, "访问过于频繁,请稍候再试")) + c.JSON(200, resp.ErrMsg("access too often, please try again later")) c.Abort() // 停止执行后续的处理函数 return } diff --git a/src/framework/middleware/repeat/repeat.go b/src/framework/middleware/repeat/repeat.go index 78a09447..dd238852 100644 --- a/src/framework/middleware/repeat/repeat.go +++ b/src/framework/middleware/repeat/repeat.go @@ -77,7 +77,7 @@ func RepeatSubmit(interval int64) gin.HandlerFunc { logger.Errorf("RepeatSubmit rp json marshal err: %v", err) } // 保存请求时间和参数 - redis.SetByExpire("", repeatKey, string(rpJSON), time.Duration(interval)*time.Second) + redis.Set("", repeatKey, string(rpJSON), time.Duration(interval)*time.Second) // 调用下一个处理程序 c.Next() diff --git a/src/framework/middleware/repeat_submit.go b/src/framework/middleware/repeat_submit.go index 79753319..ccc69043 100644 --- a/src/framework/middleware/repeat_submit.go +++ b/src/framework/middleware/repeat_submit.go @@ -60,7 +60,7 @@ func RepeatSubmit(interval int64) gin.HandlerFunc { // 小于间隔时间且参数内容一致 if compareTime < interval && compareParams { - c.JSON(200, resp.ErrMsg("不允许重复提交,请稍候再试")) + c.JSON(200, resp.ErrMsg("repeat submissions are not allowed. Please try again later.")) c.Abort() return } @@ -76,7 +76,7 @@ func RepeatSubmit(interval int64) gin.HandlerFunc { logger.Errorf("RepeatSubmit rp json marshal err: %v", err) } // 保存请求时间和参数 - _ = redis.SetByExpire("", repeatKey, string(rpJSON), time.Duration(interval)*time.Second) + _ = redis.Set("", repeatKey, string(rpJSON), time.Duration(interval)*time.Second) // 调用下一个处理程序 c.Next() diff --git a/src/framework/reqctx/auth.go b/src/framework/reqctx/auth.go index f88149a7..20fd5552 100644 --- a/src/framework/reqctx/auth.go +++ b/src/framework/reqctx/auth.go @@ -12,12 +12,12 @@ import ( ) // LoginUser 登录用户信息 -func LoginUser(c *gin.Context) (token.TokenInfo, error) { +func LoginUser(c *gin.Context) (token.UserInfo, error) { value, exists := c.Get(constants.CTX_LOGIN_USER) if exists && value != nil { - return value.(token.TokenInfo), nil + return value.(token.UserInfo), nil } - return token.TokenInfo{}, fmt.Errorf("invalid login user information") + return token.UserInfo{}, fmt.Errorf("invalid login user information") } // LoginUserToUserID 登录用户信息-用户ID @@ -58,14 +58,14 @@ func LoginUserByContainRoles(c *gin.Context, target string) bool { // LoginUserByContainPerms 登录用户信息-包含权限标识 func LoginUserByContainPerms(c *gin.Context, target string) bool { - loginUser, err := LoginUser(c) + info, err := LoginUser(c) if err != nil { return false } - if config.IsSystemUser(loginUser.UserId) { + if config.IsSystemUser(info.UserId) { return true } - perms := loginUser.Permissions + perms := info.Permissions for _, str := range perms { if str == target { return true diff --git a/src/framework/reqctx/context.go b/src/framework/reqctx/context.go index dc597025..85f27e3b 100644 --- a/src/framework/reqctx/context.go +++ b/src/framework/reqctx/context.go @@ -73,11 +73,11 @@ func Authorization(c *gin.Context) string { return "" } // 拆分 Authorization 请求头,提取 JWT 令牌部分 - arr := strings.SplitN(authHeader, constants.HEADER_PREFIX, 2) - if len(arr) < 2 { - return "" + tokenStr := strings.Replace(authHeader, constants.HEADER_PREFIX, "", 1) + if len(tokenStr) > 64 { + return strings.TrimSpace(tokenStr) // 去除可能存在的空格 } - return arr[1] + return "" } // AcceptLanguage 解析客户端接收语言 zh:中文 en: 英文 diff --git a/src/framework/reqctx/param.go b/src/framework/reqctx/param.go index a74390c8..400605d2 100644 --- a/src/framework/reqctx/param.go +++ b/src/framework/reqctx/param.go @@ -1,9 +1,12 @@ package reqctx import ( + "fmt" + "github.com/gin-gonic/gin" "be.ems/src/framework/ip2region" + "be.ems/src/framework/utils/crypto" "be.ems/src/framework/utils/ua" ) @@ -33,3 +36,9 @@ func UaOsBrowser(c *gin.Context) (string, string) { } return os, browser } + +// DeviceFingerprint 设备指纹信息 +func DeviceFingerprint(c *gin.Context, v any) string { + str := fmt.Sprintf("%v:%s", v, c.Request.UserAgent()) + return crypto.SHA256ToBase64(str) +} diff --git a/src/framework/resp/api.go b/src/framework/resp/api.go index 1136512a..4b6422cf 100644 --- a/src/framework/resp/api.go +++ b/src/framework/resp/api.go @@ -2,17 +2,17 @@ package resp const ( // CODE_ERROR 响应-code错误失败 - CODE_ERROR = 0 + CODE_ERROR = 400001 // MSG_ERROR 响应-msg错误失败 MSG_ERROR = "error" // CODE_SUCCESS 响应-msg正常成功 - CODE_SUCCESS = 1 + CODE_SUCCESS = 200001 // MSG_SUCCCESS 响应-code正常成功 MSG_SUCCCESS = "success" // 响应-code加密数据 - CODE_ENCRYPT = 2 + CODE_ENCRYPT = 200999 // 响应-msg加密数据 MSG_ENCRYPT = "encrypt" ) @@ -54,8 +54,8 @@ func OkData(data any) Resp { // Err 响应失败结果 map[string]any{} func Err(v map[string]any) map[string]any { args := make(map[string]any) - args["code"] = CODE_SUCCESS - args["msg"] = MSG_SUCCCESS + args["code"] = CODE_ERROR + args["msg"] = MSG_ERROR // v合并到args for key, value := range v { args[key] = value diff --git a/src/framework/ssh/files.go b/src/framework/ssh/files.go index e681ee99..8081877a 100644 --- a/src/framework/ssh/files.go +++ b/src/framework/ssh/files.go @@ -16,7 +16,7 @@ type FileListRow struct { LinkCount int64 `json:"linkCount"` // 硬链接数目 Owner string `json:"owner"` // 所属用户 Group string `json:"group"` // 所属组 - Size string `json:"size"` // 文件的大小 + Size int64 `json:"size"` // 文件的大小 ModifiedTime int64 `json:"modifiedTime"` // 最后修改时间,单位为秒 FileName string `json:"fileName"` // 文件的名称 } @@ -34,10 +34,10 @@ func FileList(sshClient *ConnSSH, path, search string) ([]FileListRow, error) { if search != "" { searchStr = search + searchStr } - // cd /var/log && find. -maxdepth 1 -name'mme*' -exec ls -lthd --time-style=+%s {} + - cmdStr := fmt.Sprintf("cd %s && find . -maxdepth 1 -name '%s' -exec ls -lthd --time-style=+%%s {} +", path, searchStr) - // cd /var/log && ls -lthd --time-style=+%s mme* - // cmdStr := fmt.Sprintf("cd %s && ls -lthd --time-style=+%%s %s", path, searchStr) + // cd /var/log && find. -maxdepth 1 -name'mme*' -exec ls -ltd --time-style=+%s {} + + cmdStr := fmt.Sprintf("cd %s && find . -maxdepth 1 -name '%s' -exec ls -ltd --time-style=+%%s {} +", path, searchStr) + // cd /var/log && ls -ltd --time-style=+%s mme* + // cmdStr := fmt.Sprintf("cd %s && ls -ltd --time-style=+%%s %s", path, searchStr) // 是否远程客户端读取 if sshClient == nil { @@ -94,7 +94,7 @@ func FileList(sshClient *ConnSSH, path, search string) ([]FileListRow, error) { LinkCount: parse.Number(fields[1]), Owner: fields[2], Group: fields[3], - Size: fields[4], + Size: parse.Number(fields[4]), ModifiedTime: parse.Number(fields[5]), FileName: fileName, }) diff --git a/src/framework/telnet/parse.go b/src/framework/telnet/parse.go index 31e46bcf..fc6847a8 100644 --- a/src/framework/telnet/parse.go +++ b/src/framework/telnet/parse.go @@ -24,7 +24,7 @@ func ConvertToStr(telnetClient *ConnTelnet, cmd string) (string, error) { return str, nil } - return "", fmt.Errorf(str) + return "", fmt.Errorf("%s", str) } // ConvertToMap 转换为map @@ -41,7 +41,7 @@ func ConvertToMap(telnetClient *ConnTelnet, cmd string) (map[string]string, erro if index != -1 { output = output[:index] } - return nil, fmt.Errorf(output) + return nil, fmt.Errorf("%s", output) } // 初始化一个map用于存储拆分后的键值对 diff --git a/src/framework/token/oauth2_info.go b/src/framework/token/oauth2_info.go new file mode 100644 index 00000000..bc962ec5 --- /dev/null +++ b/src/framework/token/oauth2_info.go @@ -0,0 +1,14 @@ +package token + +// Oauth2Info 第三方客户端令牌信息对象 +type Oauth2Info struct { + DeviceId string `json:"deviceId"` // 用户设备标识 + ClientId string `json:"clientId"` // 客户端ID + LoginTime int64 `json:"loginTime"` // 登录时间时间戳 + ExpireTime int64 `json:"expireTime"` // 过期时间时间戳 + LoginIp string `json:"loginIp"` // 登录IP地址 x.x.x.x + LoginLocation string `json:"loginLocation"` // 登录地点 xx xx + Browser string `json:"browser"` // 浏览器类型 + OS string `json:"os"` // 操作系统 + Scope []string `json:"scope"` // 权限列表 +} diff --git a/src/framework/token/oauth2_token.go b/src/framework/token/oauth2_token.go new file mode 100644 index 00000000..cfac0fd5 --- /dev/null +++ b/src/framework/token/oauth2_token.go @@ -0,0 +1,167 @@ +package token + +import ( + "encoding/json" + "fmt" + "time" + + "github.com/golang-jwt/jwt/v5" + + "be.ems/src/framework/config" + "be.ems/src/framework/constants" + "be.ems/src/framework/database/redis" + "be.ems/src/framework/logger" + "be.ems/src/framework/utils/parse" +) + +// Oauth2TokenCreate 生成令牌 +// clientId 客户端ID +// deviceFingerprint 设备指纹 SHA256 +// tokenType 令牌类型 access:访问令牌 refresh:刷新令牌 +func Oauth2TokenCreate(clientId, deviceFingerprint, tokenType string) (string, int64) { + // 令牌算法 HS256 HS384 HS512 + algorithm := config.Get("jwt.algorithm").(string) + var method *jwt.SigningMethodHMAC + switch algorithm { + case "HS512": + method = jwt.SigningMethodHS512 + case "HS384": + method = jwt.SigningMethodHS384 + default: // 包含HS256和其他所有情况 + method = jwt.SigningMethodHS256 + } + + // 生成令牌设置密钥 + secret := fmt.Sprint(config.Get("jwt.secret")) + // 设置令牌过期时间 + now := time.Now() + exp := now + if tokenType == "access" { + expiresIn := time.Duration(parse.Number(config.Get("jwt.expiresIn"))) + exp = now.Add(expiresIn * time.Minute) + secret = "Oauth2_Access:" + secret + } + if tokenType == "refresh" { + refreshIn := time.Duration(parse.Number(config.Get("jwt.refreshIn"))) + exp = now.Add(refreshIn * time.Minute) + secret = "Oauth2_Refresh:" + secret + } + + // 生成令牌负荷绑定uuid标识 + jwtToken := jwt.NewWithClaims(method, jwt.MapClaims{ + constants.JWT_DEVICE_ID: deviceFingerprint, + constants.JWT_CLIENT_ID: clientId, + "exp": exp.Unix(), // 过期时间 + "iat": now.Unix(), // 签发时间 + "nbf": now.Unix(), // 生效时间 + }) + + tokenStr, err := jwtToken.SignedString([]byte(secret)) + if err != nil { + logger.Infof("jwt sign err : %v", err) + return "", 0 + } + expSeconds := int64(exp.Sub(now).Seconds()) + return tokenStr, expSeconds +} + +// Oauth2TokenVerify 校验令牌是否有效 +// tokenType 令牌类型 access:访问令牌 refresh:刷新令牌 +func Oauth2TokenVerify(tokenStr, tokenType string) (jwt.MapClaims, error) { + jwtToken, err := jwt.Parse(tokenStr, func(jToken *jwt.Token) (any, error) { + // 判断加密算法是预期的加密算法 + if _, ok := jToken.Method.(*jwt.SigningMethodHMAC); ok { + secret := config.Get("jwt.secret").(string) + if tokenType == "access" { + secret = "Oauth2_Access:" + secret + } + if tokenType == "refresh" { + secret = "Oauth2_Refresh:" + secret + } + return []byte(secret), nil + } + return nil, jwt.ErrSignatureInvalid + }) + if err != nil { + logger.Errorf("Token Verify Err: %v", err) + return nil, fmt.Errorf("token invalid") + } + // 如果解析负荷成功并通过签名校验 + claims, ok := jwtToken.Claims.(jwt.MapClaims) + if ok && jwtToken.Valid { + return claims, nil + } + return nil, fmt.Errorf("token valid error") +} + +// Oauth2InfoRemove 清除登录第三方客户端信息 +func Oauth2InfoRemove(tokenStr string) (string, error) { + claims, err := Oauth2TokenVerify(tokenStr, "access") + if err != nil { + logger.Errorf("token verify err %v", err) + return "", err + } + deviceId, ok := claims[constants.JWT_DEVICE_ID] + if ok && deviceId != "" { + // 清除缓存KEY + tokenKey := constants.CACHE_OAUTH2_DEVICE + ":" + fmt.Sprint(deviceId) + return fmt.Sprint(claims[constants.JWT_CLIENT_ID]), redis.Del("", tokenKey) + } + return "", fmt.Errorf("token invalid") +} + +// Oauth2InfoCreate 生成访问第三方客户端信息缓存 +func Oauth2InfoCreate(info *Oauth2Info, deviceFingerprint string, ilobArr [4]string) { + info.DeviceId = deviceFingerprint + + // 设置请求登录客户端 + info.LoginIp = ilobArr[0] + info.LoginLocation = ilobArr[1] + info.OS = ilobArr[2] + info.Browser = ilobArr[3] + + expiresIn := time.Duration(parse.Number(config.Get("jwt.expiresIn"))) + now := time.Now() + exp := now.Add(expiresIn * time.Minute) + info.LoginTime = now.UnixMilli() + info.ExpireTime = exp.UnixMilli() + // 登录信息标识缓存 + tokenKey := constants.CACHE_OAUTH2_DEVICE + ":" + info.DeviceId + jsonBytes, err := json.Marshal(info) + if err != nil { + return + } + _ = redis.Set("", tokenKey, string(jsonBytes), expiresIn*time.Minute) +} + +// Oauth2InfoUpdate 更新访问第三方客户端信息缓存 +func Oauth2InfoUpdate(info Oauth2Info) { + // 登录信息标识缓存 + tokenKey := constants.CACHE_OAUTH2_DEVICE + ":" + info.DeviceId + jsonBytes, err := json.Marshal(info) + if err != nil { + return + } + expiresIn, _ := redis.GetExpire("", tokenKey) + expiration := time.Duration(expiresIn) * time.Second + _ = redis.Set("", tokenKey, string(jsonBytes), expiration) +} + +// Oauth2InfoGet 缓存的登录第三方客户端信息 +func Oauth2InfoGet(claims jwt.MapClaims) Oauth2Info { + info := Oauth2Info{} + deviceId := fmt.Sprint(claims[constants.JWT_DEVICE_ID]) + tokenKey := constants.CACHE_OAUTH2_DEVICE + ":" + deviceId + hasKey, err := redis.Has("", tokenKey) + if hasKey > 0 && err == nil { + infoStr, err := redis.Get("", tokenKey) + if infoStr == "" || err != nil { + return info + } + if err := json.Unmarshal([]byte(infoStr), &info); err != nil { + logger.Errorf("info json err : %v", err) + return info + } + } + return info +} diff --git a/src/framework/token/token.go b/src/framework/token/token.go deleted file mode 100644 index 2b7d5a69..00000000 --- a/src/framework/token/token.go +++ /dev/null @@ -1,152 +0,0 @@ -package token - -import ( - "encoding/json" - "fmt" - "time" - - "github.com/golang-jwt/jwt/v5" - - "be.ems/src/framework/config" - "be.ems/src/framework/constants" - "be.ems/src/framework/database/redis" - "be.ems/src/framework/logger" - "be.ems/src/framework/utils/generate" -) - -// Remove 清除登录用户信息UUID -func Remove(token string) string { - claims, err := Verify(token) - if err != nil { - logger.Errorf("token verify err %v", err) - return "" - } - // 清除缓存KEY - uuid := claims[constants.JWT_UUID].(string) - tokenKey := constants.CACHE_LOGIN_TOKEN + ":" + uuid - hasKey, err := redis.Has("", tokenKey) - if hasKey > 0 && err == nil { - _ = redis.Del("", tokenKey) - } - return claims[constants.JWT_USER_NAME].(string) -} - -// Create 令牌生成 -func Create(tokenInfo *TokenInfo, ilobArr [4]string) string { - // 生成用户唯一token 32位 - tokenInfo.UUID = generate.Code(32) - tokenInfo.LoginTime = time.Now().UnixMilli() - - // 设置请求用户登录客户端 - tokenInfo.LoginIp = ilobArr[0] - tokenInfo.LoginLocation = ilobArr[1] - tokenInfo.OS = ilobArr[2] - tokenInfo.Browser = ilobArr[3] - - // 设置新登录IP和登录时间 - tokenInfo.User.LoginIp = tokenInfo.LoginIp - tokenInfo.User.LoginTime = tokenInfo.LoginTime - - // 设置用户令牌有效期并存入缓存 - Cache(tokenInfo) - - // 令牌算法 HS256 HS384 HS512 - algorithm := config.Get("jwt.algorithm").(string) - var method *jwt.SigningMethodHMAC - switch algorithm { - case "HS512": - method = jwt.SigningMethodHS512 - case "HS384": - method = jwt.SigningMethodHS384 - case "HS256": - default: - method = jwt.SigningMethodHS256 - } - // 生成令牌负荷绑定uuid标识 - jwtToken := jwt.NewWithClaims(method, jwt.MapClaims{ - constants.JWT_UUID: tokenInfo.UUID, - constants.JWT_USER_ID: tokenInfo.UserId, - constants.JWT_USER_NAME: tokenInfo.User.UserName, - "ait": tokenInfo.LoginTime, - }) - - // 生成令牌设置密钥 - secret := config.Get("jwt.secret").(string) - tokenStr, err := jwtToken.SignedString([]byte(secret)) - if err != nil { - logger.Infof("jwt sign err : %v", err) - return "" - } - return tokenStr -} - -// Cache 缓存登录用户信息 -func Cache(tokenInfo *TokenInfo) { - // 计算配置的有效期 - expTime := config.Get("jwt.expiresIn").(int) - expTimestamp := time.Duration(expTime) * time.Minute - iatTimestamp := time.Now().UnixMilli() - tokenInfo.LoginTime = iatTimestamp - tokenInfo.ExpireTime = iatTimestamp + expTimestamp.Milliseconds() - tokenInfo.User.Password = "" - // 登录信息标识缓存 - tokenKey := constants.CACHE_LOGIN_TOKEN + ":" + tokenInfo.UUID - jsonBytes, err := json.Marshal(tokenInfo) - if err != nil { - return - } - _ = redis.SetByExpire("", tokenKey, string(jsonBytes), expTimestamp) -} - -// RefreshIn 验证令牌有效期,相差不足xx分钟,自动刷新缓存 -func RefreshIn(loginUser *TokenInfo) { - // 相差不足xx分钟,自动刷新缓存 - refreshTime := config.Get("jwt.refreshIn").(int) - refreshTimestamp := time.Duration(refreshTime) * time.Minute - // 过期时间 - expireTimestamp := loginUser.ExpireTime - currentTimestamp := time.Now().UnixMilli() - if expireTimestamp-currentTimestamp <= refreshTimestamp.Milliseconds() { - Cache(loginUser) - } -} - -// Verify 校验令牌是否有效 -func Verify(token string) (jwt.MapClaims, error) { - jwtToken, err := jwt.Parse(token, func(jToken *jwt.Token) (any, error) { - // 判断加密算法是预期的加密算法 - if _, ok := jToken.Method.(*jwt.SigningMethodHMAC); ok { - secret := config.Get("jwt.secret").(string) - return []byte(secret), nil - } - return nil, jwt.ErrSignatureInvalid - }) - if err != nil { - logger.Errorf("Token Verify Err: %v", err) - return nil, fmt.Errorf("token invalid") - } - // 如果解析负荷成功并通过签名校验 - if claims, ok := jwtToken.Claims.(jwt.MapClaims); ok && jwtToken.Valid { - return claims, nil - } - return nil, fmt.Errorf("token valid error") -} - -// Info 缓存的登录用户信息 -func Info(claims jwt.MapClaims) TokenInfo { - tokenInfo := TokenInfo{} - uuid := claims[constants.JWT_UUID].(string) - tokenKey := constants.CACHE_LOGIN_TOKEN + ":" + uuid - hasKey, err := redis.Has("", tokenKey) - if hasKey > 0 && err == nil { - infoStr, err := redis.Get("", tokenKey) - if infoStr == "" || err != nil { - return tokenInfo - } - if err := json.Unmarshal([]byte(infoStr), &tokenInfo); err != nil { - logger.Errorf("info json err : %v", err) - return tokenInfo - } - } - return tokenInfo -} diff --git a/src/framework/token/token_info.go b/src/framework/token/user_info.go similarity index 85% rename from src/framework/token/token_info.go rename to src/framework/token/user_info.go index 77ef68a8..918858db 100644 --- a/src/framework/token/token_info.go +++ b/src/framework/token/user_info.go @@ -2,9 +2,9 @@ package token import systemModel "be.ems/src/modules/system/model" -// TokenInfo 令牌信息对象 -type TokenInfo struct { - UUID string `json:"uuid"` // 用户唯一标识 +// UserInfo 系统用户令牌信息对象 +type UserInfo struct { + DeviceId string `json:"deviceId"` // 用户设备标识 UserId int64 `json:"userId"` // 用户ID DeptId int64 `json:"deptId"` // 部门ID LoginTime int64 `json:"loginTime"` // 登录时间时间戳 diff --git a/src/framework/token/user_token.go b/src/framework/token/user_token.go new file mode 100644 index 00000000..e068a111 --- /dev/null +++ b/src/framework/token/user_token.go @@ -0,0 +1,173 @@ +package token + +import ( + "encoding/json" + "fmt" + "time" + + "github.com/golang-jwt/jwt/v5" + + "be.ems/src/framework/config" + "be.ems/src/framework/constants" + "be.ems/src/framework/database/redis" + "be.ems/src/framework/logger" + "be.ems/src/framework/utils/parse" +) + +// UserTokenCreate 生成令牌 +// userId 用户ID +// deviceFingerprint 设备指纹 SHA256 +// tokenType 令牌类型 access:访问令牌 refresh:刷新令牌 +func UserTokenCreate(userId int64, deviceFingerprint, tokenType string) (string, int64) { + // 令牌算法 HS256 HS384 HS512 + algorithm := config.Get("jwt.algorithm").(string) + var method *jwt.SigningMethodHMAC + switch algorithm { + case "HS512": + method = jwt.SigningMethodHS512 + case "HS384": + method = jwt.SigningMethodHS384 + default: // 包含HS256和其他所有情况 + method = jwt.SigningMethodHS256 + } + + // 生成令牌设置密钥 + secret := fmt.Sprint(config.Get("jwt.secret")) + // 设置令牌过期时间 + now := time.Now() + exp := now + if tokenType == "access" { + expiresIn := time.Duration(parse.Number(config.Get("jwt.expiresIn"))) + exp = now.Add(expiresIn * time.Minute) + secret = "User_Access:" + secret + } + if tokenType == "refresh" { + refreshIn := time.Duration(parse.Number(config.Get("jwt.refreshIn"))) + exp = now.Add(refreshIn * time.Minute) + secret = "User_Refresh:" + secret + } + + // 生成令牌负荷绑定uuid标识 + jwtToken := jwt.NewWithClaims(method, jwt.MapClaims{ + constants.JWT_DEVICE_ID: deviceFingerprint, + constants.JWT_USER_ID: userId, + "exp": exp.Unix(), // 过期时间 + "iat": now.Unix(), // 签发时间 + "nbf": now.Add(-10 * time.Second).Unix(), // 生效时间 + }) + + tokenStr, err := jwtToken.SignedString([]byte(secret)) + if err != nil { + logger.Infof("jwt sign err : %v", err) + return "", 0 + } + expSeconds := int64(exp.Sub(now).Seconds()) + return tokenStr, expSeconds +} + +// UserTokenVerify 校验令牌是否有效 +// tokenType 令牌类型 access:访问令牌 refresh:刷新令牌 +func UserTokenVerify(tokenStr string, tokenType string) (jwt.MapClaims, error) { + jwtToken, err := jwt.Parse(tokenStr, func(jToken *jwt.Token) (any, error) { + // 判断加密算法是预期的加密算法 + if _, ok := jToken.Method.(*jwt.SigningMethodHMAC); ok { + secret := config.Get("jwt.secret").(string) + if tokenType == "access" { + secret = "User_Access:" + secret + } + if tokenType == "refresh" { + secret = "User_Refresh:" + secret + } + return []byte(secret), nil + } + return nil, jwt.ErrSignatureInvalid + }) + if err != nil { + logger.Errorf("Token Verify Err: %v", err) + return nil, fmt.Errorf("token invalid") + } + // 如果解析负荷成功并通过签名校验 + claims, ok := jwtToken.Claims.(jwt.MapClaims) + if ok && jwtToken.Valid { + return claims, nil + } + return nil, fmt.Errorf("token valid error") +} + +// UserInfoRemove 清除访问用户信息缓存 +func UserInfoRemove(tokenStr string) (string, error) { + claims, err := UserTokenVerify(tokenStr, "access") + if err != nil { + logger.Errorf("token verify err %v", err) + return "", err + } + info := UserInfoGet(claims) + if info.User.UserName != "" { + // 清除缓存KEY + deviceId := fmt.Sprint(claims[constants.JWT_DEVICE_ID]) + tokenKey := constants.CACHE_TOKEN_DEVICE + ":" + deviceId + return info.User.UserName, redis.Del("", tokenKey) + } + return "", fmt.Errorf("token invalid") +} + +// UserInfoCreate 生成访问用户信息缓存 +func UserInfoCreate(info *UserInfo, deviceFingerprint string, ilobArr [4]string) { + info.DeviceId = deviceFingerprint + + // 设置请求用户登录客户端 + info.LoginIp = ilobArr[0] + info.LoginLocation = ilobArr[1] + info.OS = ilobArr[2] + info.Browser = ilobArr[3] + + expiresIn := time.Duration(parse.Number(config.Get("jwt.expiresIn"))) + now := time.Now() + exp := now.Add(expiresIn * time.Minute) + info.LoginTime = now.UnixMilli() + info.ExpireTime = exp.UnixMilli() + // 设置新登录IP和登录时间 + info.User.LoginIp = info.LoginIp + info.User.LoginTime = info.LoginTime + info.User.Password = "" + // 登录信息标识缓存 + tokenKey := constants.CACHE_TOKEN_DEVICE + ":" + info.DeviceId + jsonBytes, err := json.Marshal(info) + if err != nil { + return + } + _ = redis.Set("", tokenKey, string(jsonBytes), expiresIn*time.Minute) +} + +// UserInfoUpdate 更新访问用户信息缓存 +func UserInfoUpdate(info UserInfo) { + info.User.Password = "" + // 登录信息标识缓存 + tokenKey := constants.CACHE_TOKEN_DEVICE + ":" + info.DeviceId + jsonBytes, err := json.Marshal(info) + if err != nil { + return + } + expiresIn, _ := redis.GetExpire("", tokenKey) + expiration := time.Duration(expiresIn) * time.Second + _ = redis.Set("", tokenKey, string(jsonBytes), expiration) +} + +// UserInfoGet 缓存的访问用户信息 +func UserInfoGet(claims jwt.MapClaims) UserInfo { + info := UserInfo{} + deviceId := fmt.Sprint(claims[constants.JWT_DEVICE_ID]) + tokenKey := constants.CACHE_TOKEN_DEVICE + ":" + deviceId + hasKey, err := redis.Has("", tokenKey) + if hasKey > 0 && err == nil { + infoStr, err := redis.Get("", tokenKey) + if infoStr == "" || err != nil { + return info + } + if err := json.Unmarshal([]byte(infoStr), &info); err != nil { + logger.Errorf("info json err : %v", err) + return info + } + } + return info +} diff --git a/src/framework/utils/crypto/hash.go b/src/framework/utils/crypto/hash.go new file mode 100644 index 00000000..9cf95c84 --- /dev/null +++ b/src/framework/utils/crypto/hash.go @@ -0,0 +1,31 @@ +package crypto + +import ( + "crypto/hmac" + "crypto/md5" + "crypto/sha256" + "encoding/base64" + "encoding/hex" + "fmt" +) + +// SHA256ToBase64 编码字符串 +func SHA256ToBase64(str string) string { + hash := sha256.Sum256([]byte(str)) + return base64.URLEncoding.EncodeToString(hash[:]) +} + +// SHA256Hmac HMAC-SHA256算法 +func SHA256Hmac(key string, data string) string { + mac := hmac.New(sha256.New, []byte(key)) + mac.Write([]byte(data)) + return hex.EncodeToString(mac.Sum(nil)) +} + +// MD5 md5加密 +func MD5(str string) (md5str string) { + data := []byte(str) + has := md5.Sum(data) + md5str = fmt.Sprintf("%x", has) + return md5str +} diff --git a/src/framework/utils/fetch/fetch.go b/src/framework/utils/fetch/fetch.go index d0075b0f..83965f3b 100644 --- a/src/framework/utils/fetch/fetch.go +++ b/src/framework/utils/fetch/fetch.go @@ -13,11 +13,11 @@ import ( "strings" "time" - libGlobal "be.ems/lib/global" + "be.ems/src/framework/config" ) // userAgent 自定义 User-Agent -var userAgent = fmt.Sprintf("OMC/%s", libGlobal.Version) +var userAgent = fmt.Sprintf("OMC/%s", config.Version) // Get 发送 GET 请求 // timeout 超时时间(毫秒) diff --git a/src/framework/utils/file/files.go b/src/framework/utils/file/files.go new file mode 100644 index 00000000..9f45e47a --- /dev/null +++ b/src/framework/utils/file/files.go @@ -0,0 +1,78 @@ +package file + +import ( + "os" + "path/filepath" +) + +// FileListRow 文件列表行数据 +type FileListRow struct { + FileType string `json:"fileType"` // 文件类型 dir, file, symlink + FileMode string `json:"fileMode"` // 文件的权限 + LinkCount int64 `json:"linkCount"` // 硬链接数目 + Owner string `json:"owner"` // 所属用户 + Group string `json:"group"` // 所属组 + Size int64 `json:"size"` // 文件的大小 + ModifiedTime int64 `json:"modifiedTime"` // 最后修改时间,单位为秒 + FileName string `json:"fileName"` // 文件的名称 +} + +// 文件列表 +// search 文件名后模糊* +// +// return 行记录,异常 +func FileList(path, search string) ([]FileListRow, error) { + var rows []FileListRow + + // 构建搜索模式 + pattern := "*" + if search != "" { + pattern = search + pattern + } + + // 读取目录内容 + entries, err := os.ReadDir(path) + if err != nil { + return nil, err + } + + // 遍历目录项 + for _, entry := range entries { + // 匹配文件名 + matched, err := filepath.Match(pattern, entry.Name()) + if err != nil || !matched { + continue + } + + // 获取文件详细信息 + info, err := entry.Info() + if err != nil { + continue + } + + // 确定文件类型 + fileType := "file" + if info.IsDir() { + fileType = "dir" + } else if info.Mode()&os.ModeSymlink != 0 { + fileType = "symlink" + } + + // 获取系统特定的文件信息 + linkCount, owner, group := getFileInfo(info) + + // 组装文件信息 + rows = append(rows, FileListRow{ + FileMode: info.Mode().String(), + FileType: fileType, + LinkCount: linkCount, + Owner: owner, + Group: group, + Size: info.Size(), + ModifiedTime: info.ModTime().UnixMilli(), + FileName: entry.Name(), + }) + } + + return rows, nil +} diff --git a/src/framework/utils/file/files_unix.go b/src/framework/utils/file/files_unix.go new file mode 100644 index 00000000..e7fd8c79 --- /dev/null +++ b/src/framework/utils/file/files_unix.go @@ -0,0 +1,36 @@ +//go:build !windows +// +build !windows + +package file + +import ( + "fmt" + "os" + "os/user" + "syscall" +) + +// getFileInfo 获取系统特定的文件信息s +func getFileInfo(info os.FileInfo) (linkCount int64, owner, group string) { + // Unix-like 系统 (Linux, macOS) + if stat, ok := info.Sys().(*syscall.Stat_t); ok { + // 获取用户名 + ownerName := "root" + if stat.Uid != 0 { + if u, err := user.LookupId(fmt.Sprint(stat.Uid)); err == nil { + ownerName = u.Username + } + } + + // 获取组名 + groupName := "root" + if stat.Gid != 0 { + if g, err := user.LookupGroupId(fmt.Sprint(stat.Gid)); err == nil { + groupName = g.Name + } + } + + return int64(stat.Nlink), ownerName, groupName + } + return 1, "", "" +} diff --git a/src/framework/utils/file/files_windows.go b/src/framework/utils/file/files_windows.go new file mode 100644 index 00000000..efaf414b --- /dev/null +++ b/src/framework/utils/file/files_windows.go @@ -0,0 +1,13 @@ +//go:build windows +// +build windows + +package file + +import ( + "os" +) + +// getFileInfo 获取系统特定的文件信息 +func getFileInfo(_ os.FileInfo) (linkCount int64, owner, group string) { + return 1, "Administrator", "Administrators" +} diff --git a/src/framework/utils/machine/launch.go b/src/framework/utils/machine/launch.go index 5d9d6b63..388ddd96 100644 --- a/src/framework/utils/machine/launch.go +++ b/src/framework/utils/machine/launch.go @@ -163,11 +163,11 @@ func Reset() error { // return fmt.Errorf("not support window") } else { // 重置数据库 - if _, err := cmd.Execf("sudo cp -rf /usr/local/omc/etc/db/omc_db.sqlite /usr/local/omc/database/omc_db.sqlite"); err != nil { + if _, err := cmd.Execf("/usr/local/etc/omc/script/setup.sh -i"); err != nil { return err } // 重启服务 - if _, err := cmd.Execf("nohup sh -c \"sleep 1s && %s\" > /dev/null 2>&1 &", "sudo systemctl restart restagent"); err != nil { + if _, err := cmd.Execf("nohup sh -c \"sleep 1s && %s\" > /dev/null 2>&1 &", "sudo systemctl restart omc"); err != nil { return err } } diff --git a/src/modules/auth/auth.go b/src/modules/auth/auth.go new file mode 100644 index 00000000..cf01e504 --- /dev/null +++ b/src/modules/auth/auth.go @@ -0,0 +1,85 @@ +package auth + +import ( + "be.ems/src/framework/logger" + "be.ems/src/framework/middleware" + "be.ems/src/modules/auth/controller" + + "github.com/gin-gonic/gin" +) + +// 模块路由注册 +func Setup(router *gin.Engine) { + logger.Infof("开始加载 ====> auth 模块路由") + + // 系统可暴露的配置信息 + router.GET("/sys-conf", controller.NewSysConf.Handler) + + // 系统引导初始化 + guideGroup := router.Group("/bootloader") + { + guideGroup.POST("", controller.NewBootloader.Start) + guideGroup.PUT("", middleware.AuthorizeUser(nil), controller.NewBootloader.Done) + guideGroup.DELETE("", middleware.AuthorizeUser(nil), controller.NewBootloader.Reset) + guideGroup.PUT("/account", middleware.AuthorizeUser(nil), controller.NewBootloader.Account) + } + + // 验证码操作 + router.GET("/captcha-image", + middleware.RateLimit(middleware.LimitOption{ + Time: 300, + Count: 60, + Type: middleware.LIMIT_IP, + }), + controller.NewCaptcha.Image, + ) + + // 账号身份操作 + { + router.POST("/auth/login", + middleware.RateLimit(middleware.LimitOption{ + Time: 180, + Count: 15, + Type: middleware.LIMIT_IP, + }), + controller.NewAccount.Login, + ) + router.POST("/auth/logout", + middleware.RateLimit(middleware.LimitOption{ + Time: 120, + Count: 15, + Type: middleware.LIMIT_IP, + }), + controller.NewAccount.Logout, + ) + router.POST("/auth/refresh-token", + middleware.RateLimit(middleware.LimitOption{ + Time: 60, + Count: 5, + Type: middleware.LIMIT_IP, + }), + controller.NewAccount.RefreshToken, + ) + router.GET("/me", + middleware.AuthorizeUser(nil), + controller.NewAccount.Me, + ) + router.GET("/router", + middleware.AuthorizeUser(nil), + controller.NewAccount.Router, + ) + } + + // 账号注册操作 + { + router.POST("/auth/register", + middleware.RateLimit(middleware.LimitOption{ + Time: 300, + Count: 10, + Type: middleware.LIMIT_IP, + }), + controller.NewRegister.Register, + ) + } + +} diff --git a/src/modules/auth/controller/account.go b/src/modules/auth/controller/account.go new file mode 100644 index 00000000..8592b597 --- /dev/null +++ b/src/modules/auth/controller/account.go @@ -0,0 +1,303 @@ +package controller + +import ( + "fmt" + "time" + + "be.ems/src/framework/config" + "be.ems/src/framework/constants" + "be.ems/src/framework/i18n" + "be.ems/src/framework/reqctx" + "be.ems/src/framework/resp" + "be.ems/src/framework/token" + "be.ems/src/framework/utils/parse" + "be.ems/src/modules/auth/model" + "be.ems/src/modules/auth/service" + systemModelVO "be.ems/src/modules/system/model/vo" + systemService "be.ems/src/modules/system/service" + + "github.com/gin-gonic/gin" +) + +// 实例化控制层 AccountController 结构体 +var NewAccount = &AccountController{ + accountService: service.NewAccount, + sysLogLoginService: systemService.NewSysLogLogin, +} + +// 账号身份操作处理 +// +// PATH / +type AccountController struct { + accountService *service.Account // 账号身份操作服务 + sysLogLoginService *systemService.SysLogLogin // 系统登录访问 +} + +// Login 系统登录 +// +// POST /auth/login +// +// @Tags common/authorization +// @Accept json +// @Produce json +// @Param data body object true "Request Param" +// @Success 200 {object} object "Response Results" +// @Summary System Login +// @Description System Login +// @Router /auth/login [post] +func (s AccountController) Login(c *gin.Context) { + language := reqctx.AcceptLanguage(c) + var body model.LoginBody + if err := c.ShouldBindJSON(&body); err != nil { + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) + return + } + + // 当前请求信息 + ipaddr, location := reqctx.IPAddrLocation(c) + os, browser := reqctx.UaOsBrowser(c) + + // 校验验证码 根据错误信息,创建系统访问记录 + if err := s.accountService.ValidateCaptcha(body.Code, body.UUID); err != nil { + msg := fmt.Sprintf("%s code %s", err.Error(), body.Code) + s.sysLogLoginService.Insert( + body.Username, constants.STATUS_NO, msg, + [4]string{ipaddr, location, os, browser}, + ) + c.JSON(200, resp.ErrMsg(i18n.TKey(language, err.Error()))) + return + } + + // 登录用户信息 + info, err := s.accountService.ByUsername(body.Username, body.Password) + if err != nil { + s.sysLogLoginService.Insert( + body.Username, constants.STATUS_NO, err.Error(), + [4]string{ipaddr, location, os, browser}, + ) + c.JSON(200, resp.ErrMsg(i18n.TKey(language, err.Error()))) + return + } + + data := map[string]any{} + + if !config.IsSystemUser(info.UserId) { + // 强制改密码 + forcePasswdChange, err := s.accountService.PasswordCountOrExpireTime(info.User.LoginCount, info.User.PasswordUpdateTime) + if err != nil { + c.JSON(200, resp.ErrMsg(i18n.TKey(language, err.Error()))) + return + } + if forcePasswdChange { + data["forcePasswdChange"] = true + } + } + + deviceFingerprint := reqctx.DeviceFingerprint(c, info.UserId) + + // 生成访问令牌 + accessToken, expiresIn := token.UserTokenCreate(info.UserId, deviceFingerprint, "access") + if accessToken == "" || expiresIn == 0 { + c.JSON(200, resp.ErrMsg("token generation failed")) + return + } + // 生成刷新令牌 + refreshToken, refreshExpiresIn := token.UserTokenCreate(info.UserId, deviceFingerprint, "refresh") + + // 记录令牌,创建系统访问记录 + token.UserInfoCreate(&info, deviceFingerprint, [4]string{ipaddr, location, os, browser}) + s.accountService.UpdateLoginDateAndIP(info) + s.sysLogLoginService.Insert( + body.Username, constants.STATUS_YES, "app.common.loginSuccess", + [4]string{ipaddr, location, os, browser}, + ) + + data["tokenType"] = constants.HEADER_PREFIX + data["accessToken"] = accessToken + data["expiresIn"] = expiresIn + data["refreshToken"] = refreshToken + data["refreshExpiresIn"] = refreshExpiresIn + data["userId"] = info.UserId + c.JSON(200, resp.OkData(data)) +} + +// Logout 系统登出 +// +// POST /auth/logout +func (s AccountController) Logout(c *gin.Context) { + language := reqctx.AcceptLanguage(c) + tokenStr := reqctx.Authorization(c) + if tokenStr != "" { + // 存在token时记录退出信息 + userName, err := token.UserInfoRemove(tokenStr) + if err != nil { + // 当前请求信息 + ipaddr, location := reqctx.IPAddrLocation(c) + os, browser := reqctx.UaOsBrowser(c) + // 创建系统访问记录 + s.sysLogLoginService.Insert( + userName, constants.STATUS_YES, "app.common.logoutSuccess", + [4]string{ipaddr, location, os, browser}, + ) + } + } + c.JSON(200, resp.OkMsg(i18n.TKey(language, "app.common.logoutSuccess"))) +} + +// RefreshToken 刷新Token +// +// POST /auth/refresh-token +func (s AccountController) RefreshToken(c *gin.Context) { + var body struct { + RefreshToken string `json:"refreshToken" binding:"required"` // 刷新令牌 + } + if err := c.ShouldBindJSON(&body); err != nil { + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) + return + } + + // 验证刷新令牌是否有效 + claims, err := token.UserTokenVerify(body.RefreshToken, "refresh") + if err != nil { + c.JSON(401, resp.CodeMsg(401001, err.Error())) + return + } + userId := parse.Number(claims[constants.JWT_USER_ID]) + + // 登录用户信息 + info, err := s.accountService.ByUserId(userId) + if err != nil { + c.JSON(200, resp.ErrMsg(err.Error())) + return + } + + // 设备指纹信息是否一致 + deviceId := fmt.Sprint(claims[constants.JWT_DEVICE_ID]) + deviceFingerprint := reqctx.DeviceFingerprint(c, userId) + if deviceId != deviceFingerprint { + c.JSON(200, resp.ErrMsg("device fingerprint mismatch")) + return + } + + // 生成访问令牌 + accessToken, expiresIn := token.UserTokenCreate(userId, deviceFingerprint, "access") + if accessToken == "" || expiresIn == 0 { + c.JSON(200, resp.ErrMsg("token generation failed")) + return + } + // 生成刷新令牌 + now := time.Now() + exp, _ := claims.GetExpirationTime() + iat, _ := claims.GetIssuedAt() + refreshExpiresIn := int64(exp.Sub(now).Seconds()) + refreshToken := body.RefreshToken + + // 如果当前时间大于过期时间的一半,则生成新令牌 + halfExp := exp.Add(-(exp.Sub(iat.Time)) / 2) + if now.After(halfExp) { + refreshToken, refreshExpiresIn = token.UserTokenCreate(userId, deviceFingerprint, "refresh") + } + + // 当前请求信息 + ipaddr, location := reqctx.IPAddrLocation(c) + os, browser := reqctx.UaOsBrowser(c) + // 记录令牌,创建系统访问记录 + token.UserInfoCreate(&info, deviceFingerprint, [4]string{ipaddr, location, os, browser}) + s.accountService.UpdateLoginDateAndIP(info) + s.sysLogLoginService.Insert( + info.User.UserName, constants.STATUS_YES, "Refresh Access Token Successful", + [4]string{ipaddr, location, os, browser}, + ) + + // 返回访问令牌和刷新令牌 + c.JSON(200, resp.OkData(map[string]any{ + "tokenType": constants.HEADER_PREFIX, + "accessToken": accessToken, + "expiresIn": expiresIn, + "refreshToken": refreshToken, + "refreshExpiresIn": refreshExpiresIn, + "userId": userId, + })) +} + +// Me 登录用户信息 +// +// GET /me +// +// @Tags common/authorization +// @Accept json +// @Produce json +// @Success 200 {object} object "Response Results" +// @Security TokenAuth +// @Summary Login User Information +// @Description Login User Information +// @Router /me [get] +func (s AccountController) Me(c *gin.Context) { + language := reqctx.AcceptLanguage(c) + info, err := reqctx.LoginUser(c) + if err != nil { + c.JSON(401, resp.CodeMsg(401002, err.Error())) + return + } + + // 角色权限集合,系统管理员拥有所有权限 + isSystemUser := config.IsSystemUser(info.UserId) + roles, perms := s.accountService.RoleAndMenuPerms(info.UserId, isSystemUser) + + info.User.NickName = i18n.TKey(language, info.User.NickName) + info.User.Remark = i18n.TKey(language, info.User.Remark) + info.User.Dept.DeptName = i18n.TKey(language, info.User.Dept.DeptName) + for ri := range info.User.Roles { + info.User.Roles[ri].RoleName = i18n.TKey(language, info.User.Roles[ri].RoleName) + } + + data := map[string]any{ + "user": info.User, + "roles": roles, + "permissions": perms, + } + if !isSystemUser { + // 强制改密码 + forcePasswdChange, _ := s.accountService.PasswordCountOrExpireTime(info.User.LoginCount, info.User.PasswordUpdateTime) + if forcePasswdChange { + data["forcePasswdChange"] = true + } + } + c.JSON(200, resp.OkData(data)) +} + +// Router 登录用户路由信息 +// +// GET /router +// +// @Tags common/authorization +// @Accept json +// @Produce json +// @Success 200 {object} object "Response Results" +// @Security TokenAuth +// @Summary Login User Routing Information +// @Description Login User Routing Information +// @Router /router [get] +func (s AccountController) Router(c *gin.Context) { + loginUserId := reqctx.LoginUserToUserID(c) + + // 前端路由,系统管理员拥有所有 + isSystemUser := config.IsSystemUser(loginUserId) + buildMenus := s.accountService.RouteMenus(loginUserId, isSystemUser) + // 闭包函数处理多语言 + language := reqctx.AcceptLanguage(c) + var converI18n func(language string, arr *[]systemModelVO.Router) + converI18n = func(language string, arr *[]systemModelVO.Router) { + for i := range *arr { + (*arr)[i].Meta.Title = i18n.TKey(language, (*arr)[i].Meta.Title) + if len((*arr)[i].Children) > 0 { + converI18n(language, &(*arr)[i].Children) + } + } + } + converI18n(language, &buildMenus) + + c.JSON(200, resp.OkData(buildMenus)) +} diff --git a/src/modules/common/controller/bootloader.go b/src/modules/auth/controller/bootloader.go similarity index 75% rename from src/modules/common/controller/bootloader.go rename to src/modules/auth/controller/bootloader.go index 048ca18c..9efadcee 100644 --- a/src/modules/common/controller/bootloader.go +++ b/src/modules/auth/controller/bootloader.go @@ -1,18 +1,16 @@ package controller import ( + "fmt" "runtime" - "strings" "be.ems/src/framework/constants" - "be.ems/src/framework/i18n" "be.ems/src/framework/reqctx" "be.ems/src/framework/resp" "be.ems/src/framework/token" "be.ems/src/framework/utils/cmd" "be.ems/src/framework/utils/machine" - "be.ems/src/framework/utils/regular" - "be.ems/src/modules/common/service" + "be.ems/src/modules/auth/service" systemService "be.ems/src/modules/system/service" "github.com/gin-gonic/gin" @@ -55,7 +53,7 @@ func (s *BootloaderController) Start(c *gin.Context) { } // 登录用户信息 - loginUser := token.TokenInfo{ + info := token.UserInfo{ UserId: sysUser.UserId, DeptId: sysUser.DeptId, User: sysUser, @@ -65,21 +63,26 @@ func (s *BootloaderController) Start(c *gin.Context) { // 当前请求信息 ipaddr, location := reqctx.IPAddrLocation(c) os, browser := reqctx.UaOsBrowser(c) + deviceFingerprint := reqctx.DeviceFingerprint(c, info.UserId) - // 生成令牌,创建系统访问记录 - tokenStr := token.Create(&loginUser, [4]string{ipaddr, location, os, browser}) - if tokenStr == "" { - c.JSON(200, resp.Err(nil)) + // 生成访问令牌 + accessToken, expiresIn := token.UserTokenCreate(info.UserId, deviceFingerprint, "access") + if accessToken == "" || expiresIn == 0 { + c.JSON(200, resp.ErrMsg("token generation failed")) return - } else { - s.accountService.UpdateLoginDateAndIP(loginUser) } + // 记录令牌,创建系统访问记录 + token.UserInfoCreate(&info, deviceFingerprint, [4]string{ipaddr, location, os, browser}) + // 创建系统访问记录 + s.accountService.UpdateLoginDateAndIP(info) c.JSON(200, resp.OkData(map[string]any{ - "accessToken": tokenStr, - "tokenType": strings.TrimRight(constants.HEADER_PREFIX, " "), - "expiresIn": (loginUser.ExpireTime - loginUser.LoginTime) / 1000, - "userId": loginUser.UserId, + "tokenType": constants.HEADER_PREFIX, + "accessToken": accessToken, + "expiresIn": expiresIn, + "refreshToken": "", + "refreshExpiresIn": 0, + "userId": info.UserId, })) } @@ -105,7 +108,7 @@ func (s *BootloaderController) Done(c *gin.Context) { } // 清除授权信息 - token.Remove(reqctx.Authorization(c)) + token.UserInfoRemove(reqctx.Authorization(c)) c.JSON(200, resp.Ok(nil)) } @@ -146,7 +149,7 @@ func (s *BootloaderController) Reset(c *gin.Context) { } // 清除授权信息 - token.Remove(reqctx.Authorization(c)) + token.UserInfoRemove(reqctx.Authorization(c)) c.JSON(200, resp.Ok(nil)) } @@ -160,15 +163,22 @@ func (s *BootloaderController) Account(c *gin.Context) { Password string `json:"password" binding:"required"` } if err := c.ShouldBindJSON(&body); err != nil { - c.JSON(400, resp.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } - if !regular.ValidPassword(body.Password) { - // 登录密码至少包含大小写字母、数字、特殊符号,且不少于6位 - c.JSON(200, resp.ErrMsg(i18n.TKey(language, "user.errPasswd"))) + // 检查用户密码策略强度 + ok, errMsg := s.sysUserService.ValidatePasswordPolicy(body.Password, language) + if !ok { + c.JSON(200, resp.ErrMsg(errMsg)) return } + // if !regular.ValidPassword(body.Password) { + // // 登录密码至少包含大小写字母、数字、特殊符号,且不少于6位 + // c.JSON(200, resp.ErrMsg(i18n.TKey(language, "user.errPasswd"))) + // return + // } // 是否完成引导 launchInfo := machine.LaunchInfo diff --git a/src/modules/common/controller/captcha.go b/src/modules/auth/controller/captcha.go similarity index 74% rename from src/modules/common/controller/captcha.go rename to src/modules/auth/controller/captcha.go index 03180113..d3208f4f 100644 --- a/src/modules/common/controller/captcha.go +++ b/src/modules/auth/controller/captcha.go @@ -1,8 +1,12 @@ package controller import ( + "strings" "time" + "github.com/gin-gonic/gin" + "github.com/mojocn/base64Captcha" + "be.ems/src/framework/config" "be.ems/src/framework/constants" "be.ems/src/framework/database/redis" @@ -10,42 +14,30 @@ import ( "be.ems/src/framework/resp" "be.ems/src/framework/utils/parse" systemService "be.ems/src/modules/system/service" - - "github.com/gin-gonic/gin" - "github.com/mojocn/base64Captcha" ) -// 实例化控制层 CaptchaController 结构体 +// NewCaptcha 实例化控制层 var NewCaptcha = &CaptchaController{ sysConfigService: systemService.NewSysConfig, } -// 验证码操作处理 +// CaptchaController 验证码操作 控制层处理 // // PATH / type CaptchaController struct { sysConfigService *systemService.SysConfig // 参数配置服务 } -// 获取验证码 +// Image 获取验证码-图片 // -// GET /captchaImage -// -// @Tags common -// @Accept json -// @Produce json -// @Success 200 {object} object "Response Results" -// @Security TokenAuth -// @Summary Get CAPTCHA -// @Description Get CAPTCHA -// @Router /captchaImage [get] -func (s *CaptchaController) Image(c *gin.Context) { +// GET /captcha-image +func (s CaptchaController) Image(c *gin.Context) { // 从数据库配置获取验证码开关 true开启,false关闭 captchaEnabledStr := s.sysConfigService.FindValueByKey("sys.account.captchaEnabled") captchaEnabled := parse.Boolean(captchaEnabledStr) if !captchaEnabled { - c.JSON(200, resp.Ok(map[string]any{ - "captchaEnabled": captchaEnabled, + c.JSON(200, resp.OkData(map[string]any{ + "enabled": captchaEnabled, })) return } @@ -53,14 +45,16 @@ func (s *CaptchaController) Image(c *gin.Context) { // 生成唯一标识 verifyKey := "" data := map[string]any{ - "captchaEnabled": captchaEnabled, - "uuid": "", - "img": "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7", + "enabled": captchaEnabled, + "uuid": "", + "img": "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7", } + // 验证码有效期,单位秒 + captchaExpiration := 2 * 60 * time.Second // 从数据库配置获取验证码类型 math 数值计算 char 字符验证 captchaType := s.sysConfigService.FindValueByKey("sys.account.captchaType") - if captchaType == constants.CAPTCHA_TYPE_MATH { + if captchaType == "math" { math := config.Get("mathCaptcha").(map[string]any) driverCaptcha := &base64Captcha.DriverMath{ //Height png height in pixel. @@ -81,16 +75,15 @@ func (s *CaptchaController) Image(c *gin.Context) { // 验证码表达式解析输出 item, err := driverCaptcha.DrawCaptcha(question) if err != nil { - logger.Infof("Generate Id Question Answer %s %s : %v", captchaType, question, err) + logger.Infof("generate id question answer %s %s : %v", captchaType, question, err) } else { data["uuid"] = id data["img"] = item.EncodeB64string() - expiration := constants.CAPTCHA_EXPIRATION * time.Second verifyKey = constants.CACHE_CAPTCHA_CODE + ":" + id - redis.SetByExpire("", verifyKey, answer, expiration) + _ = redis.Set("", verifyKey, answer, captchaExpiration) } } - if captchaType == constants.CAPTCHA_TYPE_CHAR { + if captchaType == "char" { char := config.Get("charCaptcha").(map[string]any) driverCaptcha := &base64Captcha.DriverString{ //Height png height in pixel. @@ -115,13 +108,12 @@ func (s *CaptchaController) Image(c *gin.Context) { // 验证码表达式解析输出 item, err := driverCaptcha.DrawCaptcha(question) if err != nil { - logger.Infof("Generate Id Question Answer %s %s : %v", captchaType, question, err) + logger.Infof("generate id question answer %s %s : %v", captchaType, question, err) } else { data["uuid"] = id data["img"] = item.EncodeB64string() - expiration := constants.CAPTCHA_EXPIRATION * time.Second verifyKey = constants.CACHE_CAPTCHA_CODE + ":" + id - redis.SetByExpire("", verifyKey, answer, expiration) + _ = redis.Set("", verifyKey, strings.ToLower(answer), captchaExpiration) } } @@ -129,8 +121,8 @@ func (s *CaptchaController) Image(c *gin.Context) { if config.Env() == "local" { text, _ := redis.Get("", verifyKey) data["text"] = text - c.JSON(200, resp.Ok(data)) + c.JSON(200, resp.OkData(data)) return } - c.JSON(200, resp.Ok(data)) + c.JSON(200, resp.OkData(data)) } diff --git a/src/modules/common/controller/register.go b/src/modules/auth/controller/register.go similarity index 86% rename from src/modules/common/controller/register.go rename to src/modules/auth/controller/register.go index 1280e457..ba436ed4 100644 --- a/src/modules/common/controller/register.go +++ b/src/modules/auth/controller/register.go @@ -8,8 +8,8 @@ import ( "be.ems/src/framework/reqctx" "be.ems/src/framework/resp" "be.ems/src/framework/utils/regular" - "be.ems/src/modules/common/model" - "be.ems/src/modules/common/service" + "be.ems/src/modules/auth/model" + "be.ems/src/modules/auth/service" systemService "be.ems/src/modules/system/service" "github.com/gin-gonic/gin" @@ -29,15 +29,32 @@ type RegisterController struct { sysLogLoginService *systemService.SysLogLogin // 系统登录访问服务 } -// 账号注册 +// Register 账号注册 // -// GET /register -func (s *RegisterController) Register(c *gin.Context) { +// POST /auth/register +func (s RegisterController) Register(c *gin.Context) { language := reqctx.AcceptLanguage(c) var body model.RegisterBody if err := c.ShouldBindJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) + return + } + + // 当前请求信息 + ipaddr, location := reqctx.IPAddrLocation(c) + os, browser := reqctx.UaOsBrowser(c) + + // 校验验证码 + err := s.registerService.ValidateCaptcha(body.Code, body.UUID) + // 根据错误信息,创建系统访问记录 + if err != nil { + msg := fmt.Sprintf("%s code %s", err.Error(), body.Code) + s.sysLogLoginService.Insert( + body.Username, constants.STATUS_NO, msg, + [4]string{ipaddr, location, os, browser}, + ) + c.JSON(200, resp.ErrMsg(err.Error())) return } @@ -58,26 +75,7 @@ func (s *RegisterController) Register(c *gin.Context) { return } - // 当前请求信息 - ipaddr, location := reqctx.IPAddrLocation(c) - os, browser := reqctx.UaOsBrowser(c) - - // 校验验证码 - err := s.registerService.ValidateCaptcha( - body.Code, - body.UUID, - ) - // 根据错误信息,创建系统访问记录 - if err != nil { - msg := err.Error() + " code: " + body.Code - s.sysLogLoginService.Insert( - body.Username, constants.STATUS_NO, msg, - [4]string{ipaddr, location, os, browser}, - ) - c.JSON(200, resp.ErrMsg(err.Error())) - return - } - + // 进行注册 userId, err := s.registerService.ByUserName(body.Username, body.Password) if err == nil { msg := i18n.TTemplate(language, "register.successMsg", map[string]any{"name": body.Username, "id": userId}) diff --git a/src/modules/common/service/commont.go b/src/modules/auth/controller/sys_conf.go similarity index 67% rename from src/modules/common/service/commont.go rename to src/modules/auth/controller/sys_conf.go index d1669df8..883e848b 100644 --- a/src/modules/common/service/commont.go +++ b/src/modules/auth/controller/sys_conf.go @@ -1,31 +1,47 @@ -package service +package controller import ( "fmt" - "be.ems/lib/global" "be.ems/src/framework/config" + "be.ems/src/framework/i18n" + "be.ems/src/framework/reqctx" + "be.ems/src/framework/resp" systemService "be.ems/src/modules/system/service" + "github.com/gin-gonic/gin" ) -// 实例化服务层 Commont 结构体 -var NewCommont = &Commont{ +// 实例化控制层 SysConfController 结构体 +var NewSysConf = &SysConfController{ sysUserService: systemService.NewSysUser, sysConfigService: systemService.NewSysConfig, } -// 通用请求 服务层处理 -type Commont struct { +// 系统的配置信息 +// +// PATH /sys-conf +type SysConfController struct { sysUserService *systemService.SysUser // 用户信息服务 sysConfigService *systemService.SysConfig // 参数配置服务 } -// SystemConfigInfo 系统配置信息 -func (s *Commont) SystemConfigInfo() map[string]string { +// 系统的配置信息 +// +// GET / +// +// @Tags common +// @Accept json +// @Produce json +// @Success 200 {object} object "Response Results" +// @Summary Configuration information for the system +// @Description Configuration information for the system +// @Router /sys-conf [get] +func (s SysConfController) Handler(c *gin.Context) { + language := reqctx.AcceptLanguage(c) + infoMap := map[string]string{} // 获取打包注入的全局变量信息 - infoMap["version"] = global.Version - // infoMap["buildTime"] = global.BuildTime + infoMap["version"] = config.Version // 系统首次使用标记 // launchInfo := machine.LaunchInfo // if launchInfo != nil { @@ -37,10 +53,12 @@ func (s *Commont) SystemConfigInfo() map[string]string { // } else { // infoMap[constants.LAUNCH_BOOTLOADER] = "true" // } + // 服务版本 + infoMap["serverVersion"] = fmt.Sprint(config.Get("serverVersion")) // 用户登录认证 - infoMap["loginAuth"] = fmt.Sprint(config.Get("user.loginAuth")) + infoMap["loginAuth"] = fmt.Sprint(config.Get("serverLoginAuth")) // 用户接口加密 - infoMap["cryptoApi"] = fmt.Sprint(config.Get("user.cryptoApi")) + infoMap["cryptoApi"] = fmt.Sprint(config.Get("serverCryptoApi")) // 序列号 infoMap["serialNum"] = fmt.Sprint(config.Get("omc.sn")) // 获取LOGO类型 @@ -53,10 +71,10 @@ func (s *Commont) SystemConfigInfo() map[string]string { infoMap["filePathBrand"] = filePathBrand // 获取系统名称 title := s.sysConfigService.FindValueByKey("sys.title") - infoMap["title"] = title + infoMap["title"] = i18n.TKey(language, title) // 获取版权声明 copyright := s.sysConfigService.FindValueByKey("sys.copyright") - infoMap["copyright"] = copyright + infoMap["copyright"] = i18n.TKey(language, copyright) // 获取是否开启用户注册功能 registerUser := s.sysConfigService.FindValueByKey("sys.account.registerUser") infoMap["registerUser"] = registerUser @@ -75,5 +93,6 @@ func (s *Commont) SystemConfigInfo() map[string]string { // 国际化默认语言 i18nDefault := s.sysConfigService.FindValueByKey("sys.i18n.default") infoMap["i18nDefault"] = i18nDefault - return infoMap + + c.JSON(200, resp.OkData(infoMap)) } diff --git a/src/modules/common/model/login_body.go b/src/modules/auth/model/login_body.go similarity index 100% rename from src/modules/common/model/login_body.go rename to src/modules/auth/model/login_body.go diff --git a/src/modules/common/model/register_body.go b/src/modules/auth/model/register_body.go similarity index 100% rename from src/modules/common/model/register_body.go rename to src/modules/auth/model/register_body.go diff --git a/src/modules/common/service/account.go b/src/modules/auth/service/account.go similarity index 67% rename from src/modules/common/service/account.go rename to src/modules/auth/service/account.go index 102bad66..bc8d605a 100644 --- a/src/modules/common/service/account.go +++ b/src/modules/auth/service/account.go @@ -56,25 +56,25 @@ func (s *Account) ValidateCaptcha(code, uuid string) error { } // ByUsername 登录创建用户信息 -func (s Account) ByUsername(username, password string) (token.TokenInfo, error) { - tokenInfo := token.TokenInfo{} +func (s Account) ByUsername(username, password string) (token.UserInfo, error) { + info := token.UserInfo{} // 检查密码重试次数 retryKey, retryCount, lockTime, err := s.passwordRetryCount(username) if err != nil { - return tokenInfo, err + return info, err } // 查询用户登录账号 sysUser := s.sysUserService.FindByUserName(username) if sysUser.UserName != username { - return tokenInfo, fmt.Errorf("login.errNameOrPasswd") + return info, fmt.Errorf("login.errNameOrPasswd") } if sysUser.DelFlag == constants.STATUS_YES { - return tokenInfo, fmt.Errorf("login.errDelFlag") + return info, fmt.Errorf("login.errDelFlag") } if sysUser.StatusFlag == constants.STATUS_NO { - return tokenInfo, fmt.Errorf("login.errStatus") + return info, fmt.Errorf("login.errStatus") } // 检验用户密码 @@ -82,30 +82,61 @@ func (s Account) ByUsername(username, password string) (token.TokenInfo, error) if compareBool { s.CleanLoginRecordCache(sysUser.UserName) // 清除错误记录次数 } else { - _ = redis.SetByExpire("", retryKey, retryCount+1, lockTime) - return tokenInfo, fmt.Errorf("login.errNameOrPasswd") + _ = redis.Set("", retryKey, retryCount+1, lockTime) + return info, fmt.Errorf("login.errNameOrPasswd") } // 登录用户信息 - tokenInfo.UserId = sysUser.UserId - tokenInfo.DeptId = sysUser.DeptId - tokenInfo.User = sysUser + info.UserId = sysUser.UserId + info.DeptId = sysUser.DeptId + info.User = sysUser // 用户权限组标识 if config.IsSystemUser(sysUser.UserId) { - tokenInfo.Permissions = []string{constants.SYS_PERMISSION_SYSTEM} + info.Permissions = []string{constants.SYS_PERMISSION_SYSTEM} } else { perms := s.sysMenuService.FindPermsByUserId(sysUser.UserId) - tokenInfo.Permissions = parse.RemoveDuplicates(perms) + info.Permissions = parse.RemoveDuplicates(perms) } - return tokenInfo, nil + return info, nil +} + +// ByUserId 用户ID刷新令牌创建用户信息 +func (s Account) ByUserId(userId int64) (token.UserInfo, error) { + info := token.UserInfo{} + + // 查询用户登录账号 + sysUser := s.sysUserService.FindById(userId) + if sysUser.UserId != userId { + return info, fmt.Errorf("user does not exist") + } + if sysUser.DelFlag == constants.STATUS_YES { + return info, fmt.Errorf("sorry, your account has been deleted. Sorry, your account has been deleted") + } + if sysUser.StatusFlag == constants.STATUS_NO { + return info, fmt.Errorf("sorry, your account has been disabled") + } + + // 登录用户信息 + info.UserId = sysUser.UserId + info.DeptId = sysUser.DeptId + info.User = sysUser + // 用户权限组标识 + if config.IsSystemUser(sysUser.UserId) { + info.Permissions = []string{constants.SYS_PERMISSION_SYSTEM} + } else { + perms := s.sysMenuService.FindPermsByUserId(sysUser.UserId) + info.Permissions = parse.RemoveDuplicates(perms) + } + return info, nil } // UpdateLoginDateAndIP 更新登录时间和IP -func (s Account) UpdateLoginDateAndIP(tokenInfo token.TokenInfo) bool { - user := s.sysUserService.FindById(tokenInfo.UserId) +func (s Account) UpdateLoginDateAndIP(info token.UserInfo) bool { + user := s.sysUserService.FindById(info.UserId) user.Password = "" // 密码不更新 - user.LoginIp = tokenInfo.LoginIp - user.LoginTime = tokenInfo.LoginTime + user.LoginCount += 1 + user.LoginIp = info.LoginIp + user.LoginTime = info.LoginTime return s.sysUserService.Update(user) > 0 } @@ -127,9 +158,6 @@ func (s Account) passwordRetryCount(userName string) (string, int64, time.Durati // 验证登录次数和错误锁定时间 maxRetryCount := parse.Number(maxRetryCountStr) lockTime := parse.Number(lockTimeStr) - // 验证登录次数和错误锁定时间 - // maxRetryCount := config.Get("user.password.maxRetryCount").(int) - // lockTime := config.Get("user.password.lockTime").(int) // 验证缓存记录次数 retryKey := fmt.Sprintf("%s:%s", constants.CACHE_PWD_ERR_COUNT, userName) @@ -147,6 +175,26 @@ func (s Account) passwordRetryCount(userName string) (string, int64, time.Durati return retryKey, retryCountInt64, time.Duration(lockTime) * time.Minute, nil } +// PasswordCountOrExpireTime 首次登录或密码过期时间 +func (s Account) PasswordCountOrExpireTime(loginCount, passwordUpdateTime int64) (bool, error) { + forcePasswdChange := false + // 从数据库配置获取-首次登录密码修改 + fristPasswdChangeStr := s.sysConfigService.FindValueByKey("sys.user.fristPasswdChange") + if parse.Boolean(fristPasswdChangeStr) { + forcePasswdChange = loginCount < 1 || passwordUpdateTime == 0 + } + + // 非首次登录,判断密码是否过期 + if !forcePasswdChange { + alert, err := s.sysUserService.ValidatePasswordExpireTime(passwordUpdateTime) + if err != nil { + return alert, err + } + forcePasswdChange = alert + } + return forcePasswdChange, nil +} + // RoleAndMenuPerms 角色和菜单数据权限 func (s Account) RoleAndMenuPerms(userId int64, isSystemUser bool) ([]string, []string) { if isSystemUser { diff --git a/src/modules/common/service/register.go b/src/modules/auth/service/register.go similarity index 98% rename from src/modules/common/service/register.go rename to src/modules/auth/service/register.go index 7cea853a..39903be2 100644 --- a/src/modules/common/service/register.go +++ b/src/modules/auth/service/register.go @@ -78,7 +78,7 @@ func (s Register) ByUserName(username, password string) (int64, error) { if insertId > 0 { return insertId, nil } - return 0, fmt.Errorf("failed to register user [%s]. Please contact the system administrator", username) + return 0, fmt.Errorf("failed to register user [%s]. Please contact the GM", username) } // registerRoleInit 注册初始角色 diff --git a/src/modules/chart/chart.go b/src/modules/chart/chart.go index 83455e2b..9f5cd577 100644 --- a/src/modules/chart/chart.go +++ b/src/modules/chart/chart.go @@ -17,20 +17,20 @@ func Setup(router *gin.Engine) { chartGraphGroup := router.Group("/chart/graph") { chartGraphGroup.GET("", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewChartGraph.Load, ) chartGraphGroup.GET("/groups", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewChartGraph.GroupNames, ) chartGraphGroup.POST("", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.chartGraph", collectlogs.BUSINESS_TYPE_UPDATE)), controller.NewChartGraph.Save, ) chartGraphGroup.DELETE("/:group", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.chartGraph", collectlogs.BUSINESS_TYPE_DELETE)), controller.NewChartGraph.Delete, ) diff --git a/src/modules/chart/controller/chart_graph.go b/src/modules/chart/controller/chart_graph.go index 30f70e03..e55b4e9c 100644 --- a/src/modules/chart/controller/chart_graph.go +++ b/src/modules/chart/controller/chart_graph.go @@ -3,8 +3,6 @@ package controller import ( "fmt" - "be.ems/src/framework/i18n" - "be.ems/src/framework/reqctx" "be.ems/src/framework/resp" "be.ems/src/modules/chart/service" @@ -62,7 +60,7 @@ func (s *ChartGraphController) Load(c *gin.Context) { } if err := c.ShouldBindQuery(&querys); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -94,7 +92,7 @@ func (s *ChartGraphController) Save(c *gin.Context) { } if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -125,10 +123,9 @@ func (s *ChartGraphController) Save(c *gin.Context) { // @Description Deleting Relationship Diagram Data // @Router /chart/graph/{group} [delete] func (s *ChartGraphController) Delete(c *gin.Context) { - language := reqctx.AcceptLanguage(c) group := c.Param("group") if group == "" { - c.JSON(400, resp.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + c.JSON(422, resp.CodeMsg(422002, "bind err: group is empty")) return } diff --git a/src/modules/common/common.go b/src/modules/common/common.go index 4b43a267..7a054bc2 100644 --- a/src/modules/common/common.go +++ b/src/modules/common/common.go @@ -22,78 +22,24 @@ func Setup(router *gin.Engine) { controller.NewIndex.Handler, ) - // 系统可暴露的配置信息 - router.GET("/sys-conf", controller.NewCommon.SysConfig) - // 系统引导初始化 - guideGroup := router.Group("/bootloader") - { - guideGroup.POST("", controller.NewBootloader.Start) - guideGroup.PUT("", middleware.PreAuthorize(nil), controller.NewBootloader.Done) - guideGroup.DELETE("", middleware.PreAuthorize(nil), controller.NewBootloader.Reset) - guideGroup.PUT("/account", middleware.PreAuthorize(nil), controller.NewBootloader.Account) - } - - // 验证码操作 - router.GET("/captcha-image", - middleware.RateLimit(middleware.LimitOption{ - Time: 300, - Count: 60, - Type: middleware.LIMIT_IP, - }), - controller.NewCaptcha.Image, - ) - - // 账号身份操作处理 - { - router.POST("/login", - middleware.RateLimit(middleware.LimitOption{ - Time: 180, - Count: 15, - Type: middleware.LIMIT_IP, - }), - middleware.CryptoApi(true, true), - controller.NewAccount.Login, - ) - router.GET("/me", middleware.PreAuthorize(nil), controller.NewAccount.Me) - router.GET("/router", middleware.PreAuthorize(nil), controller.NewAccount.Router) - router.POST("/logout", - middleware.RateLimit(middleware.LimitOption{ - Time: 120, - Count: 15, - Type: middleware.LIMIT_IP, - }), - controller.NewAccount.Logout, - ) - } - - // 账号注册操作 - { - router.POST("/register", - middleware.RateLimit(middleware.LimitOption{ - Time: 300, - Count: 10, - Type: middleware.LIMIT_IP, - }), - middleware.CryptoApi(true, true), - controller.NewRegister.Register, - ) - } - // 通用请求 commonGroup := router.Group("/common") { - commonGroup.POST("/hash", middleware.PreAuthorize(nil), controller.NewCommon.Hash) + commonGroup.POST("/hash", middleware.AuthorizeUser(nil), controller.NewCommon.Hash) commonGroup.GET("/i18n", controller.NewCommon.I18n) } // 文件操作处理 fileGroup := router.Group("/file") { - fileGroup.POST("/upload", middleware.PreAuthorize(nil), controller.NewFile.Upload) - fileGroup.POST("/chunk-check", middleware.PreAuthorize(nil), controller.NewFile.ChunkCheck) - fileGroup.POST("/chunk-upload", middleware.PreAuthorize(nil), controller.NewFile.ChunkUpload) - fileGroup.POST("/chunk-merge", middleware.PreAuthorize(nil), controller.NewFile.ChunkMerge) - fileGroup.GET("/download/:filePath", middleware.PreAuthorize(nil), controller.NewFile.Download) - fileGroup.POST("/transfer-static-file", middleware.PreAuthorize(nil), controller.NewFile.TransferStaticFile) + fileGroup.POST("/upload", middleware.AuthorizeUser(nil), controller.NewFile.Upload) + fileGroup.POST("/chunk-check", middleware.AuthorizeUser(nil), controller.NewFile.ChunkCheck) + fileGroup.POST("/chunk-upload", middleware.AuthorizeUser(nil), controller.NewFile.ChunkUpload) + fileGroup.POST("/chunk-merge", middleware.AuthorizeUser(nil), controller.NewFile.ChunkMerge) + fileGroup.GET("/download/:filePath", middleware.AuthorizeUser(nil), controller.NewFile.Download) + fileGroup.GET("/list", middleware.AuthorizeUser(nil), controller.NewFile.List) + fileGroup.GET("", middleware.AuthorizeUser(nil), controller.NewFile.File) + fileGroup.DELETE("", middleware.AuthorizeUser(nil), controller.NewFile.Remove) + fileGroup.POST("/transfer-static-file", middleware.AuthorizeUser(nil), controller.NewFile.TransferStaticFile) } } diff --git a/src/modules/common/controller/account.go b/src/modules/common/controller/account.go deleted file mode 100644 index 2e018dd6..00000000 --- a/src/modules/common/controller/account.go +++ /dev/null @@ -1,203 +0,0 @@ -package controller - -import ( - "fmt" - "strings" - - "be.ems/src/framework/config" - "be.ems/src/framework/constants" - "be.ems/src/framework/i18n" - "be.ems/src/framework/reqctx" - "be.ems/src/framework/resp" - "be.ems/src/framework/token" - "be.ems/src/modules/common/model" - "be.ems/src/modules/common/service" - systemModelVO "be.ems/src/modules/system/model/vo" - systemService "be.ems/src/modules/system/service" - - "github.com/gin-gonic/gin" -) - -// 实例化控制层 AccountController 结构体 -var NewAccount = &AccountController{ - accountService: service.NewAccount, - sysLogLoginService: systemService.NewSysLogLogin, -} - -// 账号身份操作处理 -// -// PATH / -type AccountController struct { - accountService *service.Account // 账号身份操作服务 - sysLogLoginService *systemService.SysLogLogin // 系统登录访问 -} - -// Login 系统登录 -// -// POST /login -// -// @Tags common/authorization -// @Accept json -// @Produce json -// @Param data body object true "Request Param" -// @Success 200 {object} object "Response Results" -// @Summary System Login -// @Description System Login -// @Router /login [post] -func (s AccountController) Login(c *gin.Context) { - language := reqctx.AcceptLanguage(c) - var body model.LoginBody - if err := c.ShouldBindJSON(&body); err != nil { - errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) - return - } - - // 当前请求信息 - ipaddr, location := reqctx.IPAddrLocation(c) - os, browser := reqctx.UaOsBrowser(c) - - // 校验验证码 根据错误信息,创建系统访问记录 - if err := s.accountService.ValidateCaptcha(body.Code, body.UUID); err != nil { - msg := fmt.Sprintf("%s code: %s", err.Error(), body.Code) - s.sysLogLoginService.Insert( - body.Username, constants.STATUS_NO, msg, - [4]string{ipaddr, location, os, browser}, - ) - c.JSON(400, resp.CodeMsg(40012, i18n.TKey(language, err.Error()))) - return - } - - // 登录用户信息 - loginUser, err := s.accountService.ByUsername(body.Username, body.Password) - if err != nil { - c.JSON(200, resp.ErrMsg(i18n.TKey(language, err.Error()))) - return - } - - // 生成令牌,创建系统访问记录 - tokenStr := token.Create(&loginUser, [4]string{ipaddr, location, os, browser}) - if tokenStr == "" { - c.JSON(200, resp.Err(nil)) - return - } else { - s.accountService.UpdateLoginDateAndIP(loginUser) - // 登录成功 - s.sysLogLoginService.Insert( - body.Username, constants.STATUS_YES, "app.common.loginSuccess", - [4]string{ipaddr, location, os, browser}, - ) - } - - c.JSON(200, resp.OkData(map[string]any{ - "accessToken": tokenStr, - "tokenType": strings.TrimRight(constants.HEADER_PREFIX, " "), - "expiresIn": (loginUser.ExpireTime - loginUser.LoginTime) / 1000, - "userId": loginUser.UserId, - })) -} - -// Me 登录用户信息 -// -// GET /me -// -// @Tags common/authorization -// @Accept json -// @Produce json -// @Success 200 {object} object "Response Results" -// @Security TokenAuth -// @Summary Login User Information -// @Description Login User Information -// @Router /me [get] -func (s AccountController) Me(c *gin.Context) { - language := reqctx.AcceptLanguage(c) - info, err := reqctx.LoginUser(c) - if err != nil { - c.JSON(401, resp.CodeMsg(40003, err.Error())) - return - } - - // 角色权限集合,系统管理员拥有所有权限 - isSystemUser := config.IsSystemUser(info.UserId) - roles, perms := s.accountService.RoleAndMenuPerms(info.UserId, isSystemUser) - - info.User.NickName = i18n.TKey(language, info.User.NickName) - info.User.Remark = i18n.TKey(language, info.User.Remark) - info.User.Dept.DeptName = i18n.TKey(language, info.User.Dept.DeptName) - for ri := range info.User.Roles { - info.User.Roles[ri].RoleName = i18n.TKey(language, info.User.Roles[ri].RoleName) - } - c.JSON(200, resp.OkData(map[string]any{ - "user": info.User, - "roles": roles, - "permissions": perms, - })) -} - -// Router 登录用户路由信息 -// -// GET /router -// -// @Tags common/authorization -// @Accept json -// @Produce json -// @Success 200 {object} object "Response Results" -// @Security TokenAuth -// @Summary Login User Routing Information -// @Description Login User Routing Information -// @Router /router [get] -func (s AccountController) Router(c *gin.Context) { - userId := reqctx.LoginUserToUserID(c) - - // 前端路由,系统管理员拥有所有 - isSystemUser := config.IsSystemUser(userId) - buildMenus := s.accountService.RouteMenus(userId, isSystemUser) - - // 闭包函数处理多语言 - language := reqctx.AcceptLanguage(c) - var converI18n func(language string, arr *[]systemModelVO.Router) - converI18n = func(language string, arr *[]systemModelVO.Router) { - for i := range *arr { - (*arr)[i].Meta.Title = i18n.TKey(language, (*arr)[i].Meta.Title) - if len((*arr)[i].Children) > 0 { - converI18n(language, &(*arr)[i].Children) - } - } - } - converI18n(language, &buildMenus) - - c.JSON(200, resp.OkData(buildMenus)) -} - -// Logout 系统登出 -// -// POST /logout -// -// @Tags common/authorization -// @Accept json -// @Produce json -// @Success 200 {object} object "Response Results" -// @Security TokenAuth -// @Summary System Logout -// @Description System Logout -// @Router /logout [post] -func (s AccountController) Logout(c *gin.Context) { - language := reqctx.AcceptLanguage(c) - tokenStr := reqctx.Authorization(c) - if tokenStr != "" { - // 存在token时记录退出信息 - userName := token.Remove(tokenStr) - if userName != "" { - // 当前请求信息 - ipaddr, location := reqctx.IPAddrLocation(c) - os, browser := reqctx.UaOsBrowser(c) - // 创建系统访问记录 - s.sysLogLoginService.Insert( - userName, constants.STATUS_YES, "app.common.logoutSuccess", - [4]string{ipaddr, location, os, browser}, - ) - } - } - - c.JSON(200, resp.OkMsg(i18n.TKey(language, "app.common.logoutSuccess"))) -} diff --git a/src/modules/common/controller/common.go b/src/modules/common/controller/common.go index 5d7d4745..a8ae0708 100644 --- a/src/modules/common/controller/common.go +++ b/src/modules/common/controller/common.go @@ -12,21 +12,16 @@ import ( "be.ems/src/framework/i18n" "be.ems/src/framework/reqctx" "be.ems/src/framework/resp" - commonService "be.ems/src/modules/common/service" "github.com/gin-gonic/gin" ) // 实例化控制层 CommonController 结构体 -var NewCommon = &CommonController{ - commontService: commonService.NewCommont, -} +var NewCommon = &CommonController{} // 通用请求 // // PATH / -type CommonController struct { - commontService *commonService.Commont // 通用请求服务 -} +type CommonController struct{} // Hash 哈希编码 // @@ -37,10 +32,8 @@ func (s CommonController) Hash(c *gin.Context) { Str string `json:"str" binding:"required"` } if err := c.ShouldBindJSON(&body); err != nil { - c.JSON(200, gin.H{ - "code": 400, - "msg": "参数错误", - }) + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -100,29 +93,3 @@ func (s *CommonController) I18n(c *gin.Context) { "errorFields": errorFields, }) } - -// 系统的配置信息 -// -// GET /sys-conf -// -// @Tags common -// @Accept json -// @Produce json -// @Success 200 {object} object "Response Results" -// @Summary Configuration information for the system -// @Description Configuration information for the system -// @Router /sys-conf [get] -func (s CommonController) SysConfig(c *gin.Context) { - data := s.commontService.SystemConfigInfo() - - // 闭包函数处理多语言 - language := reqctx.AcceptLanguage(c) - converI18n := func(language string, arr *map[string]string) { - for k, v := range *arr { - (*arr)[k] = i18n.TKey(language, v) - } - } - converI18n(language, &data) - - c.JSON(200, resp.OkData(data)) -} diff --git a/src/modules/common/controller/file.go b/src/modules/common/controller/file.go index e7e46746..52ad5b87 100644 --- a/src/modules/common/controller/file.go +++ b/src/modules/common/controller/file.go @@ -4,7 +4,9 @@ import ( "encoding/base64" "fmt" "net/url" + "os" "path/filepath" + "runtime" "strings" "be.ems/src/framework/config" @@ -32,13 +34,13 @@ func (s *FileController) Download(c *gin.Context) { language := reqctx.AcceptLanguage(c) filePath := c.Param("filePath") if len(filePath) < 8 { - c.JSON(400, resp.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + c.JSON(422, resp.CodeMsg(422002, i18n.TKey(language, "app.common.err400"))) return } // base64解析出地址 decodedBytes, err := base64.StdEncoding.DecodeString(filePath) if err != nil { - c.JSON(400, resp.CodeMsg(400, err.Error())) + c.JSON(422, resp.CodeMsg(422002, err.Error())) return } routerPath := string(decodedBytes) @@ -85,14 +87,14 @@ func (s *FileController) Upload(c *gin.Context) { // 上传的文件 formFile, err := c.FormFile("file") if err != nil { - c.JSON(400, resp.CodeMsg(40010, "bind err: file is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: file is empty")) return } // 子路径需要在指定范围内 subPath := c.PostForm("subPath") _, ok := constants.UPLOAD_SUB_PATH[subPath] if subPath != "" && !ok { - c.JSON(400, resp.CodeMsg(40010, "bind err: subPath not in range")) + c.JSON(422, resp.CodeMsg(422002, "bind err: subPath not in range")) return } if subPath == "" { @@ -132,9 +134,9 @@ func (s *FileController) ChunkCheck(c *gin.Context) { Identifier string `json:"identifier" binding:"required"` // 唯一标识 FileName string `json:"fileName" binding:"required"` // 文件名 } - if err := c.ShouldBindJSON(&body); err != nil { + if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -166,14 +168,14 @@ func (s *FileController) ChunkMerge(c *gin.Context) { FileName string `json:"fileName" binding:"required"` // 文件名 SubPath string `json:"subPath"` // 子路径类型 } - if err := c.ShouldBindJSON(&body); err != nil { + if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } // 子路径需要在指定范围内 if _, ok := constants.UPLOAD_SUB_PATH[body.SubPath]; body.SubPath != "" && !ok { - c.JSON(400, resp.CodeMsg(40010, "bind err: subPath not in range")) + c.JSON(422, resp.CodeMsg(422002, "bind err: subPath not in range")) return } if body.SubPath == "" { @@ -216,13 +218,13 @@ func (s *FileController) ChunkUpload(c *gin.Context) { // 切片唯一标识 identifier := c.PostForm("identifier") if index == "" || identifier == "" { - c.JSON(400, resp.CodeMsg(40010, "bind err: index and identifier must be set")) + c.JSON(422, resp.CodeMsg(422002, "bind err: index and identifier must be set")) return } // 上传的文件 formFile, err := c.FormFile("file") if err != nil { - c.JSON(400, resp.CodeMsg(40010, "bind err: file is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: file is empty")) return } @@ -235,6 +237,176 @@ func (s *FileController) ChunkUpload(c *gin.Context) { c.JSON(206, resp.OkData(chunkFilePath)) } +// 本地文件列表 +// +// GET /list +// +// @Tags common/file +// @Accept json +// @Produce json +// @Param path query string true "file path" default(/var/log) +// @Param pageNum query number true "pageNum" default(1) +// @Param pageSize query number true "pageSize" default(10) +// @Param search query string false "search prefix" default(upf) +// @Success 200 {object} object "Response Results" +// @Security TokenAuth +// @Summary Local file list +// @Description Local file list +// @Router /file/list [get] +func (s *FileController) List(c *gin.Context) { + var querys struct { + Path string `form:"path" binding:"required"` + PageNum int64 `form:"pageNum" binding:"required"` + PageSize int64 `form:"pageSize" binding:"required"` + Search string `form:"search"` + } + if err := c.ShouldBindQuery(&querys); err != nil { + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) + return + } + + // 获取文件列表 + localFilePath := querys.Path + if runtime.GOOS == "windows" { + localFilePath = fmt.Sprintf("C:%s", localFilePath) + } + rows, err := file.FileList(localFilePath, querys.Search) + if err != nil { + c.JSON(200, resp.OkData(map[string]any{ + "path": querys.Path, + "total": len(rows), + "rows": []file.FileListRow{}, + })) + return + } + + // 对数组进行切片分页 + lenNum := int64(len(rows)) + start := (querys.PageNum - 1) * querys.PageSize + end := start + querys.PageSize + var splitRows []file.FileListRow + if start >= lenNum { + splitRows = []file.FileListRow{} + } else if end >= lenNum { + splitRows = rows[start:] + } else { + splitRows = rows[start:end] + } + + c.JSON(200, resp.OkData(map[string]any{ + "path": querys.Path, + "total": lenNum, + "rows": splitRows, + })) +} + +// 本地文件获取下载 +// +// DELETE / +// +// @Tags common/file +// @Accept json +// @Produce json +// @Param path query string true "file path" default(/var/log) +// @Param fileName query string true "file name" default(omc.log) +// @Success 200 {object} object "Response Results" +// @Security TokenAuth +// @Summary Local files for download +// @Description Local files for download +// @Router /file [get] +func (s *FileController) File(c *gin.Context) { + var querys struct { + Path string `form:"path" binding:"required"` + Filename string `form:"fileName" binding:"required"` + } + if err := c.ShouldBindQuery(&querys); err != nil { + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) + return + } + + // 检查路径是否在允许的目录范围内 + allowedPaths := []string{"/var/log", "/tmp", "/usr/local/omc/backup"} + allowed := false + for _, p := range allowedPaths { + if strings.HasPrefix(querys.Path, p) { + allowed = true + break + } + } + if !allowed { + c.JSON(200, resp.ErrMsg("operation path is not within the allowed range")) + return + } + + // 获取文件路径并下载 + localFilePath := filepath.Join(querys.Path, querys.Filename) + if runtime.GOOS == "windows" { + localFilePath = fmt.Sprintf("C:%s", localFilePath) + } + if _, err := os.Stat(localFilePath); os.IsNotExist(err) { + c.JSON(200, resp.ErrMsg("file does not exist")) + return + } + c.FileAttachment(localFilePath, querys.Filename) +} + +// 本地文件删除 +// +// DELETE / +// +// @Tags common/file +// @Accept json +// @Produce json +// @Param path query string true "file path" default(/var/log) +// @Param fileName query string true "file name" default(omc.log) +// @Success 200 {object} object "Response Results" +// @Security TokenAuth +// @Summary Local file deletion +// @Description Local file deletion +// @Router /file [delete] +func (s *FileController) Remove(c *gin.Context) { + var querys struct { + Path string `form:"path" binding:"required"` + Filename string `form:"fileName" binding:"required"` + } + if err := c.ShouldBindQuery(&querys); err != nil { + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) + return + } + + // 检查路径是否在允许的目录范围内 + allowedPaths := []string{"/tmp", "/usr/local/omc/backup"} + allowed := false + for _, p := range allowedPaths { + if strings.HasPrefix(querys.Path, p) { + allowed = true + break + } + } + if !allowed { + c.JSON(200, resp.ErrMsg("operation path is not within the allowed range")) + return + } + + // 获取文件路径并删除 + localFilePath := filepath.Join(querys.Path, querys.Filename) + if runtime.GOOS == "windows" { + localFilePath = fmt.Sprintf("C:%s", localFilePath) + } + if _, err := os.Stat(localFilePath); os.IsNotExist(err) { + c.JSON(200, resp.ErrMsg("file does not exist")) + return + } + if err := os.Remove(localFilePath); err != nil { + c.JSON(200, resp.ErrMsg(err.Error())) + return + } + c.JSON(200, resp.Ok(nil)) +} + // 转存指定对应文件到静态目录 // // POST /transfer-static-file @@ -246,7 +418,7 @@ func (s *FileController) TransferStaticFile(c *gin.Context) { } if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -257,7 +429,7 @@ func (s *FileController) TransferStaticFile(c *gin.Context) { static := config.Get("staticFile.default").(map[string]any) dir, err := filepath.Abs(static["dir"].(string)) if err != nil { - c.JSON(400, resp.CodeMsg(400, err.Error())) + c.JSON(200, resp.ErrMsg(err.Error())) return } @@ -267,7 +439,7 @@ func (s *FileController) TransferStaticFile(c *gin.Context) { err = file.CopyUploadFile(body.UploadPath, newFile) if err != nil { - c.JSON(400, resp.CodeMsg(400, err.Error())) + c.JSON(200, resp.ErrMsg(err.Error())) return } diff --git a/src/modules/common/controller/index.go b/src/modules/common/controller/index.go index 7ea17976..e85b8f87 100644 --- a/src/modules/common/controller/index.go +++ b/src/modules/common/controller/index.go @@ -1,9 +1,7 @@ package controller import ( - "fmt" - - libGlobal "be.ems/lib/global" + "be.ems/src/framework/config" "be.ems/src/framework/resp" "github.com/gin-gonic/gin" @@ -29,9 +27,9 @@ type IndexController struct{} // @Description Root Route // @Router / [get] func (s *IndexController) Handler(c *gin.Context) { - name := "OMC" - version := libGlobal.Version // str := "欢迎使用%s核心网管理平台,当前版本:%s,请通过前台地址访问。" - str := "%s Core Network Management, current version: %s" - c.JSON(200, resp.OkMsg(fmt.Sprintf(str, name, version))) + c.JSON(200, resp.OkData(map[string]any{ + "name": "OMC", + "version": config.Version, + })) } diff --git a/src/modules/crontask/processor/exportTable/exportTable.go b/src/modules/crontask/processor/backup_export_table/backup_export_table.go similarity index 90% rename from src/modules/crontask/processor/exportTable/exportTable.go rename to src/modules/crontask/processor/backup_export_table/backup_export_table.go index d1321dde..554eb4dd 100644 --- a/src/modules/crontask/processor/exportTable/exportTable.go +++ b/src/modules/crontask/processor/backup_export_table/backup_export_table.go @@ -1,10 +1,10 @@ -package exportTable +package backup_export_table import ( "encoding/json" "fmt" - "path" "path/filepath" + "runtime" "strings" "time" @@ -12,25 +12,27 @@ import ( "be.ems/src/framework/database/db" "be.ems/src/framework/i18n" "be.ems/src/framework/logger" - "be.ems/src/framework/ssh" "be.ems/src/framework/utils/date" "be.ems/src/framework/utils/file" "be.ems/src/framework/utils/parse" neDataModel "be.ems/src/modules/network_data/model" + neDataService "be.ems/src/modules/network_data/service" systemModel "be.ems/src/modules/system/model" systemService "be.ems/src/modules/system/service" ) -var NewProcessor = &BarProcessor{ - count: 0, +var NewProcessor = &BackupExportTableProcessor{ + backupService: neDataService.NewBackup, + count: 0, } -// bar 队列任务处理 -type BarProcessor struct { - count int // 执行次数 +// BackupExportTable 备份导出数据表 +type BackupExportTableProcessor struct { + backupService *neDataService.Backup // 备份相关服务 + count int // 执行次数 } -func (s *BarProcessor) Execute(data any) (any, error) { +func (s *BackupExportTableProcessor) Execute(data any) (any, error) { s.count++ // 执行次数加一 options := data.(cron.JobData) sysJob := options.SysJob @@ -41,10 +43,10 @@ func (s *BarProcessor) Execute(data any) (any, error) { } var params struct { - Hour int `json:"hour"` // hour - TableName string `json:"tableName"` - Columns []string `json:"columns"` - FilePath string `json:"filePath"` // file path + Hour int `json:"hour"` // 数据时间从任务执行时间前的小时数 + TableName string `json:"tableName"` // 数据表名 + Columns []string `json:"columns"` // 支持字段 + BackupPath string `json:"backupPath"` // 备份输出路径 /usr/local/omc/backup/{backupPath} } err := json.Unmarshal([]byte(sysJob.TargetParams), ¶ms) if err != nil { @@ -53,7 +55,11 @@ func (s *BarProcessor) Execute(data any) (any, error) { var affected int64 var errMsg error - filePath := fmt.Sprintf("%s/%s_export_%s.csv", params.FilePath, strings.ToLower(params.TableName), time.Now().Format("20060102150405")) + fileName := fmt.Sprintf("%s_export_%s.csv", strings.ToLower(params.TableName), time.Now().Format("20060102150405")) + filePath := filepath.Join("/usr/local/omc/backup", params.BackupPath, fileName) + if runtime.GOOS == "windows" { + filePath = fmt.Sprintf("C:%s", filePath) + } switch params.TableName { case "sys_log_operate": affected, errMsg = s.exportSysLogOperate(params.Hour, params.Columns, filePath) @@ -70,18 +76,20 @@ func (s *BarProcessor) Execute(data any) (any, error) { return nil, errMsg } - // put ftp + // 上传到FTP服务器 if affected > 0 { - result["affected"] = affected - s.putFTP(filePath) + if err := s.backupService.FTPPushFile(filePath, params.BackupPath); err != nil { + result["ftpErr"] = err.Error() + } } + result["affected"] = affected // 返回结果,用于记录执行结果 return result, nil } // exportSysLogOperate 导出csv -func (s BarProcessor) exportSysLogOperate(hour int, columns []string, filePath string) (int64, error) { +func (s BackupExportTableProcessor) exportSysLogOperate(hour int, columns []string, filePath string) (int64, error) { // 前 hour 小时 now := time.Now() end := time.Date(now.Year(), now.Month(), now.Day(), now.Hour(), 0, 0, 0, now.Location()) @@ -182,7 +190,7 @@ func (s BarProcessor) exportSysLogOperate(hour int, columns []string, filePath s } // exportSMF 导出csv -func (s BarProcessor) exportSMF(hour int, columns []string, filePath string) (int64, error) { +func (s BackupExportTableProcessor) exportSMF(hour int, columns []string, filePath string) (int64, error) { // 前 hour 小时 now := time.Now() end := time.Date(now.Year(), now.Month(), now.Day(), now.Hour(), 0, 0, 0, now.Location()) @@ -413,7 +421,7 @@ func (s BarProcessor) exportSMF(hour int, columns []string, filePath string) (in } // exportIMS 导出csv -func (s BarProcessor) exportIMS(hour int, columns []string, filePath string) (int64, error) { +func (s BackupExportTableProcessor) exportIMS(hour int, columns []string, filePath string) (int64, error) { // 前 hour 小时 now := time.Now() end := time.Date(now.Year(), now.Month(), now.Day(), now.Hour(), 0, 0, 0, now.Location()) @@ -521,7 +529,6 @@ func (s BarProcessor) exportIMS(hour int, columns []string, filePath string) (in break } } - } arr[i] = callResult } @@ -558,7 +565,7 @@ func (s BarProcessor) exportIMS(hour int, columns []string, filePath string) (in } // exportSMSC 导出csv -func (s BarProcessor) exportSMSC(hour int, columns []string, filePath string) (int64, error) { +func (s BackupExportTableProcessor) exportSMSC(hour int, columns []string, filePath string) (int64, error) { // 前 hour 小时 now := time.Now() end := time.Date(now.Year(), now.Month(), now.Day(), now.Hour(), 0, 0, 0, now.Location()) @@ -683,7 +690,7 @@ func (s BarProcessor) exportSMSC(hour int, columns []string, filePath string) (i } // exportSGWC 导出csv -func (s BarProcessor) exportSGWC(hour int, columns []string, filePath string) (int64, error) { +func (s BackupExportTableProcessor) exportSGWC(hour int, columns []string, filePath string) (int64, error) { // 前 hour 小时 now := time.Now() end := time.Date(now.Year(), now.Month(), now.Day(), now.Hour(), 0, 0, 0, now.Location()) @@ -918,54 +925,3 @@ func (s BarProcessor) exportSGWC(hour int, columns []string, filePath string) (i return tx.RowsAffected, err } - -// putFTP 提交到服务器ssh -func (s BarProcessor) putFTP(localFilePath string) { - // 获取配置 - var cfgData struct { - Password string `json:"password" ` - Username string `json:"username" binding:"required"` - ToIp string `json:"toIp" binding:"required"` - ToPort int64 `json:"toPort" binding:"required"` - Enable bool `json:"enable"` - Dir string `json:"dir" binding:"required"` - } - cfg := systemService.NewSysConfig.FindByKeyDecryptValue("neData.exportTableFTP") - if cfg.ConfigId > 0 { - if err := json.Unmarshal([]byte(cfg.ConfigValue), &cfgData); err != nil { - logger.Errorf("putFTP unmarshal error: %v", err) - return - } - } - if !cfgData.Enable { - return - } - - connSSH := ssh.ConnSSH{ - User: cfgData.Username, - Password: cfgData.Password, - Addr: cfgData.ToIp, - Port: cfgData.ToPort, - AuthMode: "0", - } - sshClient, err := connSSH.NewClient() - if err != nil { - logger.Errorf("putFTP ssh error: %v", err) - return - } - defer sshClient.Close() - // 网元主机的SSH客户端进行文件传输 - sftpClient, err := sshClient.NewClientSFTP() - if err != nil { - logger.Errorf("putFTP sftp error: %v", err) - return - } - defer sftpClient.Close() - // 远程文件 - remotePath := filepath.Join(cfgData.Dir, path.Base(localFilePath), filepath.Base(localFilePath)) - // 复制到远程 - if err = sftpClient.CopyFileLocalToRemote(localFilePath, remotePath); err != nil { - logger.Errorf("putFTP uploading error: %v", err) - return - } -} diff --git a/src/modules/crontask/processor/backup_export_udm/backup_export_udm.go b/src/modules/crontask/processor/backup_export_udm/backup_export_udm.go new file mode 100644 index 00000000..7b3f2ea0 --- /dev/null +++ b/src/modules/crontask/processor/backup_export_udm/backup_export_udm.go @@ -0,0 +1,273 @@ +package backup_export_udm + +import ( + "encoding/json" + "fmt" + "path/filepath" + "runtime" + "time" + + "be.ems/src/framework/cron" + "be.ems/src/framework/logger" + "be.ems/src/framework/utils/file" + 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" +) + +var NewProcessor = &BackupExportUDMProcessor{ + count: 0, + neInfoService: neService.NewNeInfo, + backupService: neDataService.NewBackup, + udmAuthService: neDataService.NewUDMAuthUser, + udmSubService: neDataService.NewUDMSubUser, + udmVOIPService: neDataService.NewUDMVOIPUser, + udmVolteIMSService: neDataService.NewUDMVolteIMSUser, +} + +// BackupExportUDM 队列任务处理 +type BackupExportUDMProcessor struct { + count int // 执行次数 + neInfoService *neService.NeInfo // 网元信息服务 + backupService *neDataService.Backup // 备份相关服务 + udmAuthService *neDataService.UDMAuthUser // UDM鉴权信息服务 + udmSubService *neDataService.UDMSubUser // UDM签约信息服务 + udmVOIPService *neDataService.UDMVOIPUser // UDMVOIP信息服务 + udmVolteIMSService *neDataService.UDMVolteIMSUser // UDMVolteIMS信息服务 +} + +func (s *BackupExportUDMProcessor) Execute(data any) (any, error) { + s.count++ // 执行次数加一 + options := data.(cron.JobData) + sysJob := options.SysJob + logger.Infof("重复:%v 任务ID:%d 执行次数:%d", options.Repeat, sysJob.JobId, s.count) + // 返回结果,用于记录执行结果 + result := map[string]any{ + "count": s.count, + } + + var params struct { + DataType []string `json:"dataType"` // 类型支持 auth/sub/voip/volte + FileType string `json:"fileType"` // 文件类型 csv/txt + } + if err := json.Unmarshal([]byte(sysJob.TargetParams), ¶ms); err != nil { + return nil, err + } + if !(params.FileType == "csv" || params.FileType == "txt") { + return nil, fmt.Errorf("file type error, only support csv,txt") + } + + neList := s.neInfoService.Find(neModel.NeInfo{NeType: "UDM"}, false, false) + for _, neInfo := range neList { + for _, v := range params.DataType { + switch v { + case "auth": + result[fmt.Sprintf("%s-%s", neInfo.NeId, v)] = s.exportAuth(neInfo.NeId, params.FileType) + case "sub": + result[fmt.Sprintf("%s-%s", neInfo.NeId, v)] = s.exportSub(neInfo.NeId, params.FileType) + case "voip": + result[fmt.Sprintf("%s-%s", neInfo.NeId, v)] = s.exportVOIP(neInfo.NeId, params.FileType) + case "volte": + result[fmt.Sprintf("%s-%s", neInfo.NeId, v)] = s.exportVolte(neInfo.NeId, params.FileType) + } + } + } + + // 返回结果,用于记录执行结果 + return result, nil +} + +// exportAuth 导出鉴权用户数据 +func (s BackupExportUDMProcessor) exportAuth(neId, fileType string) string { + rows := s.udmAuthService.Find(neDataModel.UDMAuthUser{NeId: neId}) + if len(rows) <= 0 { + return "no data" + } + + // 文件名 + fileName := fmt.Sprintf("auth_%s_export_%s.%s", neId, time.Now().Format("20060102150405"), fileType) + filePath := filepath.Join("/usr/local/omc/backup/udm_data/auth", fileName) + if runtime.GOOS == "windows" { + filePath = fmt.Sprintf("C:%s", filePath) + } + + if fileType == "csv" { + // 转换数据 + data := [][]string{} + data = append(data, []string{"imsi", "ki", "algo", "amf", "opc"}) + for _, v := range rows { + opc := v.Opc + if opc == "-" { + opc = "" + } + data = append(data, []string{v.IMSI, v.Ki, v.AlgoIndex, v.Amf, opc}) + } + // 输出到文件 + if err := file.WriterFileCSV(data, filePath); err != nil { + return err.Error() + } + } + + if fileType == "txt" { + // 转换数据 + data := [][]string{} + for _, v := range rows { + opc := v.Opc + if opc == "-" { + opc = "" + } + data = append(data, []string{v.IMSI, v.Ki, v.AlgoIndex, v.Amf, opc}) + } + // 输出到文件 + if err := file.WriterFileTXT(data, ",", filePath); err != nil { + return err.Error() + } + } + + // 上传到FTP服务器 + if err := s.backupService.FTPPushFile(filePath, "udm_data"); err != nil { + return "ok, ftp err:" + err.Error() + } + return "ok" +} + +// exportSub 导出签约用户数据 +func (s BackupExportUDMProcessor) exportSub(neId, fileType string) string { + rows := s.udmSubService.Find(neDataModel.UDMSubUser{NeId: neId}) + if len(rows) <= 0 { + return "no data" + } + + // 文件名 + fileName := fmt.Sprintf("sub_%s_export_%s.%s", neId, time.Now().Format("20060102150405"), fileType) + filePath := filepath.Join("/usr/local/omc/backup/udm_data/sub", fileName) + if runtime.GOOS == "windows" { + filePath = fmt.Sprintf("C:%s", filePath) + } + + if fileType == "csv" { + // 转换数据 + data := [][]string{} + data = append(data, []string{"IMSI", "MSISDN", "UeAmbrTpl", "NssaiTpl", "AreaForbiddenTpl", "ServiceAreaRestrictionTpl", "RatRestrictions", "CnTypeRestrictions", "SmfSel", "SmData", "EPSDat"}) + for _, v := range rows { + epsDat := fmt.Sprintf("%s,%s,%s,%s,%s,%s,%s,%s", v.EpsFlag, v.EpsOdb, v.HplmnOdb, v.Ard, v.Epstpl, v.ContextId, v.ApnContext, v.StaticIp) + data = append(data, []string{v.IMSI, v.MSISDN, v.UeAmbrTpl, v.NssaiTpl, v.AreaForbiddenTpl, v.ServiceAreaRestrictionTpl, v.RatRestrictions, v.CnTypeRestrictions, v.SmfSel, v.SmData, epsDat}) + } + // 输出到文件 + if err := file.WriterFileCSV(data, filePath); err != nil { + return err.Error() + } + } + + if fileType == "txt" { + // 转换数据 + data := [][]string{} + for _, v := range rows { + epsDat := fmt.Sprintf("%s,%s,%s,%s,%s,%s,%s,%s", v.EpsFlag, v.EpsOdb, v.HplmnOdb, v.Ard, v.Epstpl, v.ContextId, v.ApnContext, v.StaticIp) + data = append(data, []string{v.IMSI, v.MSISDN, v.UeAmbrTpl, v.NssaiTpl, v.AreaForbiddenTpl, v.ServiceAreaRestrictionTpl, v.RatRestrictions, v.CnTypeRestrictions, v.SmfSel, v.SmData, epsDat}) + } + // 输出到文件 + if err := file.WriterFileTXT(data, ",", filePath); err != nil { + return err.Error() + } + } + + // 上传到FTP服务器 + if err := s.backupService.FTPPushFile(filePath, "udm_data"); err != nil { + return "ok, ftp err:" + err.Error() + } + return "ok" +} + +// exportVOIP 导出VOIP用户数据 +func (s BackupExportUDMProcessor) exportVOIP(neId, fileType string) string { + rows := s.udmVOIPService.Find(neDataModel.UDMVOIPUser{NeId: neId}) + if len(rows) <= 0 { + return "no data" + } + + // 文件名 + fileName := fmt.Sprintf("voip_%s_export_%s.%s", neId, time.Now().Format("20060102150405"), fileType) + filePath := filepath.Join("/usr/local/omc/backup/udm_data/voip", fileName) + if runtime.GOOS == "windows" { + filePath = fmt.Sprintf("C:%s", filePath) + } + + if fileType == "csv" { + // 转换数据 + data := [][]string{} + data = append(data, []string{"username", "password"}) + for _, v := range rows { + data = append(data, []string{v.UserName, v.Password}) + } + // 输出到文件 + if err := file.WriterFileCSV(data, filePath); err != nil { + return err.Error() + } + } + + if fileType == "txt" { + // 转换数据 + data := [][]string{} + for _, v := range rows { + data = append(data, []string{v.UserName, v.Password}) + } + // 输出到文件 + if err := file.WriterFileTXT(data, ",", filePath); err != nil { + return err.Error() + } + } + + // 上传到FTP服务器 + if err := s.backupService.FTPPushFile(filePath, "udm_data"); err != nil { + return "ok, ftp err:" + err.Error() + } + return "ok" +} + +// exportVolte 导出Volte用户数据 +func (s BackupExportUDMProcessor) exportVolte(neId, fileType string) string { + rows := s.udmVolteIMSService.Find(neDataModel.UDMVolteIMSUser{NeId: neId}) + if len(rows) <= 0 { + return "no data" + } + + // 文件名 + fileName := fmt.Sprintf("volte_%s_export_%s.%s", neId, time.Now().Format("20060102150405"), fileType) + filePath := filepath.Join("/usr/local/omc/backup/udm_data/volte", fileName) + if runtime.GOOS == "windows" { + filePath = fmt.Sprintf("C:%s", filePath) + } + + if fileType == "csv" { + // 转换数据 + data := [][]string{} + data = append(data, []string{"IMSI", "MSISDN", "TAG", "VNI"}) + for _, v := range rows { + data = append(data, []string{v.IMSI, v.MSISDN, v.Tag, v.VNI}) + } + // 输出到文件 + if err := file.WriterFileCSV(data, filePath); err != nil { + return err.Error() + } + } + + if fileType == "txt" { + // 转换数据 + data := [][]string{} + for _, v := range rows { + data = append(data, []string{v.IMSI, v.MSISDN, v.Tag, v.VNI}) + } + // 输出到文件 + if err := file.WriterFileTXT(data, ",", filePath); err != nil { + return err.Error() + } + } + + // 上传到FTP服务器 + if err := s.backupService.FTPPushFile(filePath, "udm_data"); err != nil { + return "ok, ftp err:" + err.Error() + } + return "ok" +} diff --git a/src/modules/crontask/processor/backup_remove_file/backup_remove_file.go b/src/modules/crontask/processor/backup_remove_file/backup_remove_file.go new file mode 100644 index 00000000..07055073 --- /dev/null +++ b/src/modules/crontask/processor/backup_remove_file/backup_remove_file.go @@ -0,0 +1,113 @@ +package backup_remove_file + +import ( + "encoding/json" + "fmt" + "os" + "path/filepath" + "runtime" + "sort" + "strings" + "time" + + "be.ems/src/framework/cron" + "be.ems/src/framework/logger" +) + +type FileInfo struct { + Path string + Info os.FileInfo +} + +var NewProcessor = &BackupRemoveFileProcessor{ + count: 0, +} + +// BackupRemoveFileProcessor 删除备份文件 +type BackupRemoveFileProcessor struct { + count int // 执行次数 +} + +func (s *BackupRemoveFileProcessor) Execute(data any) (any, error) { + s.count++ // 执行次数加一 + options := data.(cron.JobData) + sysJob := options.SysJob + logger.Infof("重复:%v 任务ID:%d 执行次数:%d", options.Repeat, sysJob.JobId, s.count) + // 返回结果,用于记录执行结果 + result := map[string]any{ + "count": s.count, + } + + // 读取参数值 + var params []struct { + BackupPath string `json:"backupPath"` // 备份路径 /usr/local/omc/backup/{backupPath} + StoreDays int `json:"storeDays"` // 保留天数 + StoreNum int `json:"storeNum"` // 保留数量,默认保留7 + } + err := json.Unmarshal([]byte(sysJob.TargetParams), ¶ms) + if err != nil { + return nil, fmt.Errorf("json params err: %v", err) + } + + for _, item := range params { + result[item.BackupPath] = "" + if item.StoreDays < 0 { + result[item.BackupPath] = "params storeDays less than 0" + continue + } + if item.StoreNum <= 0 { + item.StoreNum = 7 + } + + // 构建完整备份路径 + filePath := filepath.Join("/usr/local/omc/backup", item.BackupPath) + if runtime.GOOS == "windows" { + filePath = fmt.Sprintf("C:%s", filePath) + } + // 获取目录下所有备份文件 + files, err := s.files(filePath) + if err != nil { + result[item.BackupPath] = "read files err" + continue + } + // 按修改时间排序(从旧到新) + sort.Slice(files, func(i, j int) bool { + return files[i].Info.ModTime().Before(files[j].Info.ModTime()) + }) + + // 如果文件数量少于保留数量,则不删除 + if len(files) <= item.StoreNum { + result[item.BackupPath] = fmt.Sprintf("less StoreNum: %d, file number %d", item.StoreNum, len(files)) + continue + } + // 计算截止日期 + cutoff := time.Now().AddDate(0, 0, -item.StoreDays) + // 删除超过保留天数的文件 + deletedErr := []string{} + for _, file := range files { + if file.Info.ModTime().Before(cutoff) { + if err := os.Remove(file.Path); err != nil { + deletedErr = append(deletedErr, file.Info.Name()) // 记录删除失败的文件名称 + } + } + } + result[item.BackupPath] = strings.Join(deletedErr, ", ") + } + + // 返回结果,用于记录执行结果 + return result, nil +} + +func (s *BackupRemoveFileProcessor) files(dir 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 !info.IsDir() { + files = append(files, FileInfo{Path: path, Info: info}) + } + return nil + }) + return files, err +} diff --git a/src/modules/crontask/processor/delete_ne_config_backup/delete_ne_config_backup.go b/src/modules/crontask/processor/delete_ne_config_backup/delete_ne_config_backup.go index d98e13cb..982b7323 100644 --- a/src/modules/crontask/processor/delete_ne_config_backup/delete_ne_config_backup.go +++ b/src/modules/crontask/processor/delete_ne_config_backup/delete_ne_config_backup.go @@ -39,7 +39,8 @@ func (s *DeleteNeConfigBackupProcessor) Execute(data any) (any, error) { // 读取参数值 var params struct { - StoreDays int `json:"storeDays"` // store days + StoreDays int `json:"storeDays"` // 保留天数 + StoreNum int `json:"storeNum"` // 保留数量,默认保留7 } err := json.Unmarshal([]byte(sysJob.TargetParams), ¶ms) if err != nil { @@ -48,6 +49,9 @@ func (s *DeleteNeConfigBackupProcessor) Execute(data any) (any, error) { if params.StoreDays < 0 { return nil, fmt.Errorf("params storeDays less than 0 ") } + if params.StoreNum <= 0 { + params.StoreNum = 7 + } neList := s.neInfoService.Find(neModel.NeInfo{}, false, false) for _, neInfo := range neList { @@ -55,6 +59,17 @@ func (s *DeleteNeConfigBackupProcessor) Execute(data any) (any, error) { tx := db.DB("").Model(&neModel.NeConfigBackup{}) tx = tx.Where("ne_type = ? and ne_id = ?", neInfo.NeType, neInfo.NeId) + // 查询数量为0直接返回 + var total int64 = 0 + if err := tx.Count(&total).Error; err != nil { + result[neTypeAndId] = err.Error() + continue + } + if total <= int64(params.StoreNum) { + result[neTypeAndId] = "less than storeNum" + continue + } + // 查询最后记录数据 var lastCreateTime int64 = 0 lastTx := tx.Select("create_time").Order("create_time DESC").Limit(1) @@ -62,7 +77,6 @@ func (s *DeleteNeConfigBackupProcessor) Execute(data any) (any, error) { result[neTypeAndId] = err.Error() continue } - if lastCreateTime <= 1e12 { result[neTypeAndId] = "no data" continue @@ -90,7 +104,7 @@ func (s *DeleteNeConfigBackupProcessor) Execute(data any) (any, error) { // deleteFile 删除本地文件 func (s DeleteNeConfigBackupProcessor) deleteFile(neType, neId string, oldFileDate time.Time) { neTypeLower := strings.ToLower(neType) - localPath := fmt.Sprintf("/usr/local/etc/omc/ne_config/%s/%s/backup ", neTypeLower, neId) + localPath := fmt.Sprintf("/usr/local/omc/backup/ne_config/%s/%s ", neTypeLower, neId) files, err := os.ReadDir(localPath) if err != nil { logger.Errorf("logger Remove ne_config File ReadDir err: %v", err.Error()) diff --git a/src/modules/crontask/processor/getStateFromNE/getStateFromNE.go b/src/modules/crontask/processor/getStateFromNE/getStateFromNE.go deleted file mode 100644 index 50ac3e2f..00000000 --- a/src/modules/crontask/processor/getStateFromNE/getStateFromNE.go +++ /dev/null @@ -1,160 +0,0 @@ -package getStateFromNE - -import ( - "encoding/json" - "fmt" - "net/http" - "strings" - "time" - - "be.ems/lib/config" - "be.ems/lib/dborm" - "be.ems/lib/log" - "be.ems/src/framework/cron" - "github.com/go-resty/resty/v2" -) - -var NewProcessor = &BarProcessor{ - progress: 0, - count: 0, -} - -// bar 队列任务处理 -type BarProcessor struct { - // 任务进度 - progress int - // 执行次数 - count int -} - -type BarParams struct { - Duration int `json:"duration"` -} - -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 SystemState struct { - Version string `json:"version"` - Capability uint32 `json:"capability"` - SerialNum string `json:"serialNum"` - ExpiryDate string `json:"expiryDate"` - //Timestamp string `json:"timestamp"` - - CpuUsage CpuUsage `json:"cpuUsage"` - MemUsage MemUsage `json:"memUsage"` - - DiskSpace DiskSpace `json:"diskSpace"` -} - -var client = resty.New() - -func init() { - client. - SetTimeout(time.Duration(400 * time.Millisecond)) -} - -func (s *BarProcessor) Execute(data any) (any, error) { - var err error - - s.count++ - options := data.(cron.JobData) - sysJob := options.SysJob - var params BarParams - - _ = json.Unmarshal([]byte(sysJob.TargetParams), ¶ms) - // if err == nil { - // duration = params.Duration - // } - - var nes []dborm.NeInfo - _, err = dborm.XormGetAllNeInfo(&nes) - if err != nil { - log.Error("Failed to get all ne info:", err) - return nil, err - } - - failNum := 0 - succNum := 0 - for _, ne := range nes { - requestURI := fmt.Sprintf("/api/rest/systemManagement/v1/elementType/%s/objectType/systemState", strings.ToLower(ne.NeType)) - requestURL := fmt.Sprintf("http://%s:%s%s", ne.Ip, ne.Port, requestURI) - log.Debug("requestURL: Get", requestURL) - 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(requestURL) - if err != nil { - log.Error("Failed to Get:", err) - failNum++ - continue - } - - log.Debug("StatusCode: ", response.StatusCode()) - switch response.StatusCode() { - case http.StatusOK, http.StatusCreated, http.StatusNoContent, http.StatusAccepted: - log.Trace("response body:", string(response.Body())) - state := new(SystemState) - _ = json.Unmarshal(response.Body(), &state) - // var dateStr *string = nil - // if state.ExpiryDate != "" && state.ExpiryDate != "-" { - // dateStr = &state.ExpiryDate - // } - neState := new(dborm.NeState) - neState.NeType = ne.NeType - neState.NeId = ne.NeId - neState.Version = state.Version - neState.Capability = state.Capability - neState.SerialNum = state.SerialNum - // if dateStr != nil { - // neState.ExpiryDate = *dateStr - // } - neState.ExpiryDate = state.ExpiryDate - cu, _ := json.Marshal(state.CpuUsage) - neState.CpuUsage = string(cu) - mu, _ := json.Marshal(state.MemUsage) - neState.MemUsage = string(mu) - ds, _ := json.Marshal(state.DiskSpace) - neState.DiskSpace = string(ds) - log.Trace("neState:", neState) - _, err := dborm.XormInsertNeState(neState) - if err != nil { - log.Error("Failed to insert ne_state:", err) - failNum++ - continue - } - succNum++ - default: - log.Trace("response body:", string(response.Body())) - body := new(map[string]interface{}) - _ = json.Unmarshal(response.Body(), &body) - failNum++ - } - } - - // 返回结果,用于记录执行结果 - return map[string]any{ - "succNum": succNum, - "failNum": failNum, - }, nil -} diff --git a/src/modules/crontask/processor/ne_alarm_state_check/ne_alarm_state_check.go b/src/modules/crontask/processor/ne_alarm_state_check/ne_alarm_state_check.go index cb1d4b32..f74a3d1b 100644 --- a/src/modules/crontask/processor/ne_alarm_state_check/ne_alarm_state_check.go +++ b/src/modules/crontask/processor/ne_alarm_state_check/ne_alarm_state_check.go @@ -66,6 +66,9 @@ func (s *NeAlarmStateCheckProcessor) Execute(data any) (any, error) { neList := s.neInfoService.Find(neModel.NeInfo{}, true, false) for _, neInfo := range neList { + if neInfo.CreateTime == 0 { + continue + } neTypeAndId := fmt.Sprintf("%s_%s", neInfo.NeType, neInfo.NeId) // 网元在线状态 isOnline := parse.Boolean(neInfo.ServerState["online"]) diff --git a/src/modules/crontask/processor/ne_config_backup/ne_config_backup.go b/src/modules/crontask/processor/ne_config_backup/ne_config_backup.go index e08549b3..215c5aac 100644 --- a/src/modules/crontask/processor/ne_config_backup/ne_config_backup.go +++ b/src/modules/crontask/processor/ne_config_backup/ne_config_backup.go @@ -6,6 +6,7 @@ import ( "be.ems/src/framework/cron" "be.ems/src/framework/logger" + neDataService "be.ems/src/modules/network_data/service" neModel "be.ems/src/modules/network_element/model" neService "be.ems/src/modules/network_element/service" ) @@ -13,6 +14,7 @@ import ( var NewProcessor = &NeConfigBackupProcessor{ neConfigBackupService: neService.NewNeConfigBackup, neInfoService: neService.NewNeInfo, + backupService: neDataService.NewBackup, count: 0, } @@ -20,6 +22,7 @@ var NewProcessor = &NeConfigBackupProcessor{ type NeConfigBackupProcessor struct { neConfigBackupService *neService.NeConfigBackup // 网元配置文件备份记录服务 neInfoService *neService.NeInfo // 网元信息服务 + backupService *neDataService.Backup // 备份相关服务 count int // 执行次数 } @@ -42,6 +45,7 @@ func (s *NeConfigBackupProcessor) Execute(data any) (any, error) { result[neTypeAndId] = err.Error() continue } + // 新增备份记录 item := neModel.NeConfigBackup{ NeType: neInfo.NeType, @@ -50,8 +54,18 @@ func (s *NeConfigBackupProcessor) Execute(data any) (any, error) { Path: zipFilePath, CreateBy: "system", } - s.neConfigBackupService.Insert(item) - result[neTypeAndId] = "ok" + rows := s.neConfigBackupService.Insert(item) + if rows <= 0 { + result[neTypeAndId] = "failed" + continue + } + + msg := "ok" + // 上传到FTP服务器 + if err := s.backupService.FTPPushFile(zipFilePath, "ne_config"); err != nil { + result[neTypeAndId] = msg + ", ftp err:" + err.Error() + } + result[neTypeAndId] = msg } return result, nil diff --git a/src/modules/crontask/processor/processor.go b/src/modules/crontask/processor/processor.go index 29aa5a30..bc2e4f78 100644 --- a/src/modules/crontask/processor/processor.go +++ b/src/modules/crontask/processor/processor.go @@ -2,16 +2,17 @@ package processor import ( "be.ems/src/framework/cron" + processorBackupExportTable "be.ems/src/modules/crontask/processor/backup_export_table" + processorBackupExportUDM "be.ems/src/modules/crontask/processor/backup_export_udm" + processorBackupRemoveFile "be.ems/src/modules/crontask/processor/backup_remove_file" processorDeleteAlarmRecord "be.ems/src/modules/crontask/processor/delete_alarm_record" processorDeleteDataRecord "be.ems/src/modules/crontask/processor/delete_data_record" processorDeleteKPIRecord "be.ems/src/modules/crontask/processor/delete_kpi_record" processorDeleteNeConfigBackup "be.ems/src/modules/crontask/processor/delete_ne_config_backup" - "be.ems/src/modules/crontask/processor/exportTable" processorMonitorSysResource "be.ems/src/modules/crontask/processor/monitor_sys_resource" processorNeAlarmStateCheck "be.ems/src/modules/crontask/processor/ne_alarm_state_check" processorNeConfigBackup "be.ems/src/modules/crontask/processor/ne_config_backup" processorNeDataUDM "be.ems/src/modules/crontask/processor/ne_data_udm" - "be.ems/src/modules/crontask/processor/removeFile" ) // InitCronQueue 初始定时任务队列 @@ -20,7 +21,7 @@ func InitCronQueue() { cron.CreateQueue("monitor_sys_resource", processorMonitorSysResource.NewProcessor) // 网元-网元配置文件定期备份 cron.CreateQueue("ne_config_backup", processorNeConfigBackup.NewProcessor) - // 网元数据-UDM数据刷新同步 + // 网元数据-UDM用户数据同步 cron.CreateQueue("ne_data_udm", processorNeDataUDM.NewProcessor) // 网元告警-状态检查 cron.CreateQueue("ne_alarm_state_check", processorNeAlarmStateCheck.NewProcessor) @@ -34,6 +35,10 @@ func InitCronQueue() { // 删除-网元配置文件定期备份 cron.CreateQueue("delete_ne_config_backup", processorDeleteNeConfigBackup.NewProcessor) - cron.CreateQueue("exportTable", exportTable.NewProcessor) - cron.CreateQueue("removeFile", removeFile.NewProcessor) + // 备份-导出数据表 + cron.CreateQueue("backup_export_table", processorBackupExportTable.NewProcessor) + // 备份-删除备份目录下文件 + cron.CreateQueue("backup_remove_file", processorBackupRemoveFile.NewProcessor) + // 备份-导出UDM用户数据 + cron.CreateQueue("backup_export_udm", processorBackupExportUDM.NewProcessor) } diff --git a/src/modules/crontask/processor/removeFile/removeFile.go b/src/modules/crontask/processor/removeFile/removeFile.go deleted file mode 100644 index 5420b40b..00000000 --- a/src/modules/crontask/processor/removeFile/removeFile.go +++ /dev/null @@ -1,159 +0,0 @@ -package removeFile - -import ( - "encoding/json" - "os" - "path/filepath" - "sort" - "time" - - "be.ems/lib/log" - "be.ems/src/framework/cron" -) - -var NewProcessor = &BarProcessor{ - progress: 0, - count: 0, -} - -// bar 队列任务处理 -type BarProcessor struct { - // 任务进度 - progress int - // 执行次数 - count int -} - -type BarParams struct { - FilePath string `json:"filePath"` // file path - MaxDays int `json:"maxDays"` - MaxFiles *int `json:"maxFiles"` // keep max files - MaxSize *int64 `json:"maxSize"` - Extras string `json:"extras"` // extras condition for where -} - -type FileInfo struct { - Path string - Info os.FileInfo -} - -func (s *BarProcessor) Execute(data any) (any, error) { - s.count++ - - options := data.(cron.JobData) - sysJob := options.SysJob - var params []BarParams - - err := json.Unmarshal([]byte(sysJob.TargetParams), ¶ms) - if err != nil { - return nil, err - } - result := []map[string]any{} - for _, param := range params { - res, _ := s.ExecuteOne(param) - result = append(result, res) - } - - // 返回结果,用于记录执行结果 - return map[string]any{ - "result": result, - }, nil -} - -func (s *BarProcessor) ExecuteOne(params BarParams) (map[string]any, error) { - var maxFiles int = 0 - var maxSize int64 = 0 - if params.MaxFiles != nil { - maxFiles = *params.MaxFiles - } - if params.MaxSize != nil { - maxSize = int64(*params.MaxSize * 1024 * 1024) - } - files, err := getFiles(params.FilePath) - if err != nil { - return map[string]any{ - "msg": "failed", - "err": err.Error(), - }, err - } - - // 获取本地时区 - loc, err := time.LoadLocation("Local") - if err != nil { - return map[string]any{ - "msg": "failed", - "err": err.Error(), - }, err - } - cutoff := time.Now().In(loc).AddDate(0, 0, -params.MaxDays) - - var oldFiles []FileInfo - for _, file := range files { - if file.Info.ModTime().Before(cutoff) { - oldFiles = append(oldFiles, file) - } - } - - // 按修改时间排序文件(最旧的在前) - sort.Slice(oldFiles, func(i, j int) bool { - return oldFiles[i].Info.ModTime().Before(oldFiles[j].Info.ModTime()) - }) - - deleted, errorDel := 0, 0 - - // 删除文件,直到满足文件总数不超过maxFiles个且总大小不超过maxSize的条件 - var totalSize int64 - for i, file := range oldFiles { - if (maxFiles > 0 && i >= maxFiles) || (maxSize > 0 && totalSize+file.Info.Size() > maxSize) { - break - } - err := os.Remove(file.Path) - if err != nil { - log.Error("Error deleting file:", file.Path, err) - errorDel++ - continue - } - totalSize += file.Info.Size() - deleted++ - } - - // 如果仍然有超过maxFiles个文件或总大小超过maxSize,继续删除最旧的文件 - remainingFiles := files - sort.Slice(remainingFiles, func(i, j int) bool { - return remainingFiles[i].Info.ModTime().Before(remainingFiles[j].Info.ModTime()) - }) - - for (maxFiles > 0 && len(remainingFiles) > maxFiles) || (maxSize > 0 && totalSize > maxSize) { - file := remainingFiles[0] - err := os.Remove(file.Path) - if err != nil { - log.Error("Error deleting file:", file.Path, err) - remainingFiles = remainingFiles[1:] - continue - } - totalSize -= file.Info.Size() - remainingFiles = remainingFiles[1:] - } - - // 返回结果,用于记录执行结果 - return map[string]any{ - "msg": "successed", - "filePath": params.FilePath, - "deleted": deleted, - "errorDel": errorDel, - }, nil -} - -func getFiles(dir 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 !info.IsDir() { - files = append(files, FileInfo{Path: path, Info: info}) - } - return nil - }) - return files, err -} diff --git a/src/modules/monitor/controller/monitor.go b/src/modules/monitor/controller/monitor.go index a4653995..e2387b3d 100644 --- a/src/modules/monitor/controller/monitor.go +++ b/src/modules/monitor/controller/monitor.go @@ -50,7 +50,7 @@ func (s *MonitorController) Load(c *gin.Context) { } if err := c.ShouldBindQuery(&querys); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } diff --git a/src/modules/monitor/controller/sys_cache.go b/src/modules/monitor/controller/sys_cache.go index f46c9a26..8cf61a31 100644 --- a/src/modules/monitor/controller/sys_cache.go +++ b/src/modules/monitor/controller/sys_cache.go @@ -48,13 +48,15 @@ func (s *SysCacheController) Info(c *gin.Context) { func (s SysCacheController) Names(c *gin.Context) { language := reqctx.AcceptLanguage(c) caches := []model.SysCache{ - model.NewNames(i18n.TKey(language, "cache.name.user"), constants.CACHE_LOGIN_TOKEN), + model.NewNames(i18n.TKey(language, "cache.name.token"), constants.CACHE_TOKEN_DEVICE), model.NewNames(i18n.TKey(language, "cache.name.sys_config"), constants.CACHE_SYS_CONFIG), model.NewNames(i18n.TKey(language, "cache.name.sys_dict"), constants.CACHE_SYS_DICT), model.NewNames(i18n.TKey(language, "cache.name.captcha_codes"), constants.CACHE_CAPTCHA_CODE), model.NewNames(i18n.TKey(language, "cache.name.repeat_submit"), constants.CACHE_REPEAT_SUBMIT), model.NewNames(i18n.TKey(language, "cache.name.rate_limit"), constants.CACHE_RATE_LIMIT), model.NewNames(i18n.TKey(language, "cache.name.pwd_err_cnt"), constants.CACHE_PWD_ERR_COUNT), + model.NewNames(i18n.TKey(language, "cache.name.oauth2_codes"), constants.CACHE_OAUTH2_CODE), + model.NewNames(i18n.TKey(language, "cache.name.oauth2_devices"), constants.CACHE_OAUTH2_DEVICE), model.NewNames(i18n.TKey(language, "cache.name.i18n"), constants.CACHE_I18N), model.NewNames(i18n.TKey(language, "cache.name.ne_info"), constants.CACHE_NE_INFO), model.NewNames(i18n.TKey(language, "cache.name.ne_data"), constants.CACHE_NE_DATA), @@ -71,7 +73,7 @@ func (s SysCacheController) Keys(c *gin.Context) { } if err := c.ShouldBindQuery(&query); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -94,7 +96,7 @@ func (s SysCacheController) Value(c *gin.Context) { } if err := c.ShouldBindQuery(&query); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -163,10 +165,10 @@ func (s SysCacheController) CleanKeys(c *gin.Context) { } if err := c.ShouldBindQuery(&query); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } - if constants.CACHE_LOGIN_TOKEN == query.CacheName { + if constants.CACHE_TOKEN_DEVICE == query.CacheName { c.JSON(200, resp.ErrMsg("Cannot delete user information cache")) return } @@ -194,7 +196,7 @@ func (s SysCacheController) CleanValue(c *gin.Context) { } if err := c.ShouldBindQuery(&query); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } diff --git a/src/modules/monitor/controller/sys_job.go b/src/modules/monitor/controller/sys_job.go index 0fe3253c..f325e852 100644 --- a/src/modules/monitor/controller/sys_job.go +++ b/src/modules/monitor/controller/sys_job.go @@ -64,7 +64,7 @@ func (s *SysJobController) Info(c *gin.Context) { language := reqctx.AcceptLanguage(c) jobId := parse.Number(c.Param("jobId")) if jobId <= 0 { - c.JSON(400, resp.CodeMsg(40010, "bind err: jobId is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: jobId is empty")) return } @@ -87,11 +87,11 @@ func (s *SysJobController) Add(c *gin.Context) { var body model.SysJob if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } if body.JobId > 0 { - c.JSON(400, resp.CodeMsg(40010, "bind err: jobId not is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: jobId not is empty")) return } @@ -143,11 +143,11 @@ func (s *SysJobController) Edit(c *gin.Context) { var body model.SysJob if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } if body.JobId <= 0 { - c.JSON(400, resp.CodeMsg(40010, "bind err: jobId is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: jobId is empty")) return } @@ -229,7 +229,7 @@ func (s *SysJobController) Remove(c *gin.Context) { language := reqctx.AcceptLanguage(c) jobId := c.Param("jobId") if jobId == "" { - c.JSON(400, resp.CodeMsg(40010, "bind err: jobId is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: jobId is empty")) return } @@ -261,7 +261,7 @@ func (s *SysJobController) Status(c *gin.Context) { } if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -299,7 +299,7 @@ func (s *SysJobController) Run(c *gin.Context) { language := reqctx.AcceptLanguage(c) jobId := parse.Number(c.Param("jobId")) if jobId <= 0 { - c.JSON(400, resp.CodeMsg(40010, "bind err: jobId is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: jobId is empty")) return } diff --git a/src/modules/monitor/controller/sys_job_log.go b/src/modules/monitor/controller/sys_job_log.go index f4067435..633654a8 100644 --- a/src/modules/monitor/controller/sys_job_log.go +++ b/src/modules/monitor/controller/sys_job_log.go @@ -73,7 +73,7 @@ func (s *SysJobLogController) List(c *gin.Context) { func (s *SysJobLogController) Info(c *gin.Context) { logId := parse.Number(c.Param("logId")) if logId <= 0 { - c.JSON(400, resp.CodeMsg(40010, "bind err: logId is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: logId is empty")) return } @@ -92,7 +92,7 @@ func (s *SysJobLogController) Remove(c *gin.Context) { language := reqctx.AcceptLanguage(c) logId := c.Param("logId") if logId == "" { - c.JSON(400, resp.CodeMsg(40010, "bind err: logId is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: logId is empty")) return } @@ -143,13 +143,6 @@ func (s *SysJobLogController) Export(c *gin.Context) { return } - // rows := s.sysJobLogService.SelectJobLogList(model.SysJobLog{}) - if len(rows) <= 0 { - // 导出数据记录为空 - c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.exportEmpty"))) - return - } - // 闭包函数处理多语言 converI18n := func(language string, arr *[]model.SysJobLog) { for i := range *arr { diff --git a/src/modules/monitor/controller/sys_user_online.go b/src/modules/monitor/controller/sys_user_online.go index 8a8dac97..0e275d92 100644 --- a/src/modules/monitor/controller/sys_user_online.go +++ b/src/modules/monitor/controller/sys_user_online.go @@ -46,7 +46,7 @@ func (s *SysUserOnlineController) List(c *gin.Context) { userName := c.Query("userName") // 获取所有在线用户key - keys, _ := redis.GetKeys("", constants.CACHE_LOGIN_TOKEN+":*") + keys, _ := redis.GetKeys("", constants.CACHE_TOKEN_DEVICE+":*") // 分批获取 arr := make([]string, 0) @@ -69,13 +69,13 @@ func (s *SysUserOnlineController) List(c *gin.Context) { continue } - var tokenInfo token.TokenInfo - err := json.Unmarshal([]byte(str), &tokenInfo) + var info token.UserInfo + err := json.Unmarshal([]byte(str), &info) if err != nil { continue } - onlineUser := s.sysUserOnlineService.TokenInfoToUserOnline(tokenInfo) + onlineUser := s.sysUserOnlineService.UserInfoToUserOnline(info) if onlineUser.TokenID != "" { userOnlines = append(userOnlines, onlineUser) } @@ -122,15 +122,14 @@ func (s *SysUserOnlineController) List(c *gin.Context) { func (s SysUserOnlineController) Logout(c *gin.Context) { tokenIdStr := c.Param("tokenId") if tokenIdStr == "" || strings.Contains(tokenIdStr, "*") { - c.JSON(400, resp.CodeMsg(40010, "bind err: tokenId is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: tokenId is empty")) return } // 处理字符转id数组后去重 - ids := strings.Split(tokenIdStr, ",") - uniqueIDs := parse.RemoveDuplicates(ids) + uniqueIDs := parse.RemoveDuplicatesToArray(tokenIdStr, ",") for _, v := range uniqueIDs { - key := constants.CACHE_LOGIN_TOKEN + ":" + v + key := constants.CACHE_TOKEN_DEVICE + ":" + v if err := redis.Del("", key); err != nil { c.JSON(200, resp.ErrMsg(err.Error())) return diff --git a/src/modules/monitor/monitor.go b/src/modules/monitor/monitor.go index 2188060b..b2461e47 100644 --- a/src/modules/monitor/monitor.go +++ b/src/modules/monitor/monitor.go @@ -23,15 +23,14 @@ func Setup(router *gin.Engine) { monitorGroup := router.Group("/monitor") { monitorGroup.GET("/load", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewMonitor.Load, ) } // 服务器信息 router.GET("/monitor/system", - // middleware.PreAuthorize(map[string][]string{"hasPerms": {"monitor:system:info"}}), - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"monitor:system:info"}}), controller.NewSystem.Info, ) @@ -39,11 +38,11 @@ func Setup(router *gin.Engine) { sysUserOnlineGroup := router.Group("/monitor/user-online") { sysUserOnlineGroup.GET("/list", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"monitor:online:list"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"monitor:online:list"}}), controller.NewSysUserOnline.List, ) sysUserOnlineGroup.DELETE("/logout/:tokenId", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"monitor:online:logout"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"monitor:online:logout"}}), controller.NewSysUserOnline.Logout, ) } @@ -52,32 +51,31 @@ func Setup(router *gin.Engine) { sysCacheGroup := router.Group("/monitor/cache") { sysCacheGroup.GET("", - // middleware.PreAuthorize(map[string][]string{"hasPerms": {"monitor:cache:info"}}), - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"monitor:cache:info"}}), controller.NewSysCache.Info, ) sysCacheGroup.GET("/names", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"monitor:cache:list"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"monitor:cache:list"}}), controller.NewSysCache.Names, ) sysCacheGroup.GET("/keys", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"monitor:cache:list"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"monitor:cache:list"}}), controller.NewSysCache.Keys, ) sysCacheGroup.GET("/value", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"monitor:cache:query"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"monitor:cache:query"}}), controller.NewSysCache.Value, ) sysCacheGroup.DELETE("/names", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"monitor:cache:remove"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"monitor:cache:remove"}}), controller.NewSysCache.CleanNames, ) sysCacheGroup.DELETE("/keys", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"monitor:cache:remove"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"monitor:cache:remove"}}), controller.NewSysCache.CleanKeys, ) sysCacheGroup.DELETE("/value", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"monitor:cache:remove"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"monitor:cache:remove"}}), controller.NewSysCache.CleanValue, ) } @@ -86,26 +84,26 @@ func Setup(router *gin.Engine) { sysJobLogGroup := router.Group("/monitor/job/log") { sysJobLogGroup.GET("/list", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"monitor:job:list"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"monitor:job:list"}}), controller.NewSysJobLog.List, ) sysJobLogGroup.GET("/:logId", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"monitor:job:query"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"monitor:job:query"}}), controller.NewSysJobLog.Info, ) sysJobLogGroup.DELETE("/:logId", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"monitor:job:remove"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"monitor:job:remove"}}), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.sysJobLog", collectlogs.BUSINESS_TYPE_DELETE)), controller.NewSysJobLog.Remove, ) sysJobLogGroup.DELETE("/clean", repeat.RepeatSubmit(5), - middleware.PreAuthorize(map[string][]string{"hasPerms": {"monitor:job:remove"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"monitor:job:remove"}}), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.sysJobLog", collectlogs.BUSINESS_TYPE_CLEAN)), controller.NewSysJobLog.Clean, ) sysJobLogGroup.GET("/export", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"monitor:job:export"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"monitor:job:export"}}), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.sysJobLog", collectlogs.BUSINESS_TYPE_EXPORT)), controller.NewSysJobLog.Export, ) @@ -115,47 +113,47 @@ func Setup(router *gin.Engine) { sysJobGroup := router.Group("/monitor/job") { sysJobGroup.GET("/list", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"monitor:job:list"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"monitor:job:list"}}), controller.NewSysJob.List, ) sysJobGroup.GET("/:jobId", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"monitor:job:query"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"monitor:job:query"}}), controller.NewSysJob.Info, ) sysJobGroup.POST("", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"monitor:job:add"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"monitor:job:add"}}), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.sysJob", collectlogs.BUSINESS_TYPE_INSERT)), controller.NewSysJob.Add, ) sysJobGroup.PUT("", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"monitor:job:edit"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"monitor:job:edit"}}), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.sysJob", collectlogs.BUSINESS_TYPE_UPDATE)), controller.NewSysJob.Edit, ) sysJobGroup.DELETE("/:jobId", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"monitor:job:remove"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"monitor:job:remove"}}), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.sysJob", collectlogs.BUSINESS_TYPE_DELETE)), controller.NewSysJob.Remove, ) sysJobGroup.PUT("/status", repeat.RepeatSubmit(5), - middleware.PreAuthorize(map[string][]string{"hasPerms": {"monitor:job:changeStatus"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"monitor:job:changeStatus"}}), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.sysJob", collectlogs.BUSINESS_TYPE_UPDATE)), controller.NewSysJob.Status, ) sysJobGroup.PUT("/run/:jobId", repeat.RepeatSubmit(10), - middleware.PreAuthorize(map[string][]string{"hasPerms": {"monitor:job:changeStatus"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"monitor:job:changeStatus"}}), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.sysJob", collectlogs.BUSINESS_TYPE_UPDATE)), controller.NewSysJob.Run, ) sysJobGroup.PUT("/reset", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"monitor:job:changeStatus"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"monitor:job:changeStatus"}}), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.sysJob", collectlogs.BUSINESS_TYPE_CLEAN)), controller.NewSysJob.ResetQueueJob, ) sysJobGroup.GET("/export", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"monitor:job:export"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"monitor:job:export"}}), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.sysJob", collectlogs.BUSINESS_TYPE_EXPORT)), controller.NewSysJob.Export, ) diff --git a/src/modules/monitor/service/sys_user_online.go b/src/modules/monitor/service/sys_user_online.go index d48368b5..3ee54494 100644 --- a/src/modules/monitor/service/sys_user_online.go +++ b/src/modules/monitor/service/sys_user_online.go @@ -11,23 +11,23 @@ var NewSysUserOnline = &SysUserOnline{} // SysUserOnline 在线用户 服务层处理 type SysUserOnline struct{} -// TokenInfoToUserOnline 在线用户信息 -func (s SysUserOnline) TokenInfoToUserOnline(tokenInfo token.TokenInfo) model.SysUserOnline { - if tokenInfo.UserId <= 0 { +// UserInfoToUserOnline 在线用户信息 +func (s SysUserOnline) UserInfoToUserOnline(info token.UserInfo) model.SysUserOnline { + if info.UserId <= 0 { return model.SysUserOnline{} } sysUserOnline := model.SysUserOnline{ - TokenID: tokenInfo.UUID, - UserName: tokenInfo.User.UserName, - LoginIp: tokenInfo.LoginIp, - LoginLocation: tokenInfo.LoginLocation, - Browser: tokenInfo.Browser, - OS: tokenInfo.OS, - LoginTime: tokenInfo.LoginTime, + TokenID: info.DeviceId, + UserName: info.User.UserName, + LoginIp: info.LoginIp, + LoginLocation: info.LoginLocation, + Browser: info.Browser, + OS: info.OS, + LoginTime: info.LoginTime, } - if tokenInfo.User.DeptId > 0 { - sysUserOnline.DeptName = tokenInfo.User.Dept.DeptName + if info.User.DeptId > 0 { + sysUserOnline.DeptName = info.User.Dept.DeptName } return sysUserOnline } diff --git a/src/modules/network_data/controller/all_alarm.go b/src/modules/network_data/controller/all_alarm.go index fe01c27c..a0840116 100644 --- a/src/modules/network_data/controller/all_alarm.go +++ b/src/modules/network_data/controller/all_alarm.go @@ -2,6 +2,7 @@ package controller import ( "fmt" + "time" "be.ems/src/framework/i18n" "be.ems/src/framework/reqctx" @@ -56,7 +57,7 @@ func (s AlarmController) List(c *gin.Context) { var query model.AlarmQuery if err := c.ShouldBindQuery(&query); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } // 查询数据 @@ -71,7 +72,7 @@ func (s AlarmController) Remove(c *gin.Context) { language := reqctx.AcceptLanguage(c) id := c.Param("id") if id == "" { - c.JSON(400, resp.CodeMsg(40010, "bind err: id is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: id is empty")) return } @@ -101,7 +102,7 @@ func (s AlarmController) Clear(c *gin.Context) { } if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -124,7 +125,7 @@ func (s AlarmController) Ack(c *gin.Context) { } if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -136,3 +137,60 @@ func (s AlarmController) Ack(c *gin.Context) { } c.JSON(200, resp.OkData(rows)) } + +// 告警列表导出 +// +// GET /export +// +// @Tags network_data/alarm +// @Accept json +// @Produce json +// @Param neType query string false "NE Type" Enums(IMS,AMF,AUSF,UDM,SMF,PCF,NSSF,NRF,UPF,MME,CBC,OMC,SGWC,SMSC) +// @Param neId query string false "NE ID The actual record is the network element RmUid" +// @Param neName query string false "NE Name" +// @Param pvFlag query string false "PV Flag" Enums(PNF,VNF) +// @Param alarmCode query string false "alarm status code" +// @Param alarmType query string false "Alarm type Communication alarms=1, Equipment alarms=2, Processing faults=3, Environmental alarms=4, Quality of service alarms=5" Enums(1,2,3,4,5) +// @Param alarmStatus query string false "Alarm status 0:clear, 1:active" Enums(0,1) +// @Param origSeverity query string false "Alarm Type 1: Critical, 2: Major, 3: Minor, 4: Warning" Enums(1,2,3,4) +// @Param sortField query string false "Sort fields, fill in result fields" default(event_time) +// @Param sortOrder query string false "Sort by ascending or descending order, asc desc" default(asc) +// @Param pageNum query number true "pageNum" default(1) +// @Param pageSize query number true "pageSize" default(10) +// @Success 200 {object} object "Response Results" +// @Security TokenAuth +// @Summary Alarm List Export +// @Description Alarm List Export +// @Router /neData/alarm/export [get] +func (s AlarmController) Export(c *gin.Context) { + language := reqctx.AcceptLanguage(c) + // 查询结果,根据查询条件结果,单页最大值限制 + var query model.AlarmQuery + if err := c.ShouldBindQuery(&query); err != nil { + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) + return + } + // 限制导出数据集 + if query.PageSize > 10000 { + query.PageSize = 10000 + } + // 查询数据 + rows, total := s.alarmService.FindByPage(query) + if total == 0 { + // 导出数据记录为空 + c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.exportEmpty"))) + return + } + + // 导出文件名称 + fileName := fmt.Sprintf("alarm_export_%d_%s_%d.xlsx", len(rows), query.AlarmStatus, time.Now().UnixMilli()) + // 导出数据表格 + saveFilePath, err := s.alarmService.ExportXlsx(rows, fileName, language, query.AlarmStatus) + if err != nil { + c.JSON(200, resp.ErrMsg(err.Error())) + return + } + + c.FileAttachment(saveFilePath, fileName) +} diff --git a/src/modules/network_data/controller/all_alarm_forward.go b/src/modules/network_data/controller/all_alarm_forward.go index 4520cf7a..a54960c4 100644 --- a/src/modules/network_data/controller/all_alarm_forward.go +++ b/src/modules/network_data/controller/all_alarm_forward.go @@ -29,12 +29,12 @@ type AlarmForwardController struct { // @Tags network_data/alarm_forward // @Accept json // @Produce json -// @Param neType query string false "NE Type" Enums(IMS,AMF,AUSF,UDM,SMF,PCF,NSSF,NRF,UPF,MME,CBC,OMC,SGWC,SMSC) Enums(1,2,3,4) -// @Param sortField query string false "Sort fields, fill in result fields" default(event_time) -// @Param sortOrder query string false "Sort by ascending or descending order, asc desc" default(asc) -// @Param pageNum query number true "pageNum" default(1) -// @Param pageSize query number true "pageSize" default(10) -// @Success 200 {object} object "Response Results" +// @Param neType query string false "NE Type" Enums(IMS,AMF,AUSF,UDM,SMF,PCF,NSSF,NRF,UPF,MME,CBC,OMC,SGWC,SMSC) Enums(1,2,3,4) +// @Param sortField query string false "Sort fields, fill in result fields" default(event_time) +// @Param sortOrder query string false "Sort by ascending or descending order, asc desc" default(asc) +// @Param pageNum query number true "pageNum" default(1) +// @Param pageSize query number true "pageSize" default(10) +// @Success 200 {object} object "Response Results" // @Security TokenAuth // @Summary Alarm Forward Log List // @Description Alarm Forward Log List @@ -43,7 +43,7 @@ func (s AlarmForwardController) List(c *gin.Context) { var query model.AlarmForwardLogQuery if err := c.ShouldBindQuery(&query); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } // 查询数据 diff --git a/src/modules/network_data/controller/all_alarm_log.go b/src/modules/network_data/controller/all_alarm_log.go index ad6c1392..cbcb759d 100644 --- a/src/modules/network_data/controller/all_alarm_log.go +++ b/src/modules/network_data/controller/all_alarm_log.go @@ -34,7 +34,7 @@ type AlarmLogController struct { // @Param neType query string false "NE Type" Enums(IMS,AMF,AUSF,UDM,SMF,PCF,NSSF,NRF,UPF,MME,CBC,OMC,SGWC,SMSC) // @Param neId query string false "NE ID The actual record is the network element RmUid" // @Param alarmLogType query string false "AlarmLog type Communication AlarmLogs=1, Equipment AlarmLogs=2, Processing faults=3, Environmental AlarmLogs=4, Quality of service AlarmLogs=5" Enums(1,2,3,4,5) -// @Param alarmStatus query string false "Alarm status 0:clear, 1:active" Enums(0,1) +// @Param alarmStatus query string false "Alarm status 0:clear, 1:active" Enums(0,1) // @Param origSeverity query string false "Alarm Type 1: Critical, 2: Major, 3: Minor, 4: Warning" Enums(1,2,3,4) // @Param sortField query string false "Sort fields, fill in result fields" default(event_time) // @Param sortOrder query string false "Sort by ascending or descending order, asc desc" default(asc) @@ -49,7 +49,7 @@ func (s AlarmLogController) List(c *gin.Context) { var query model.AlarmLogQuery if err := c.ShouldBindQuery(&query); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } // 查询数据 @@ -67,7 +67,7 @@ func (s AlarmLogController) List(c *gin.Context) { // @Param neType query string false "NE Type" Enums(IMS,AMF,AUSF,UDM,SMF,PCF,NSSF,NRF,UPF,MME,CBC,OMC,SGWC,SMSC) // @Param neId query string false "NE ID The actual record is the network element RmUid" // @Param alarmLogType query string false "AlarmLog type Communication AlarmLogs=1, Equipment AlarmLogs=2, Processing faults=3, Environmental AlarmLogs=4, Quality of service AlarmLogs=5" Enums(1,2,3,4,5) -// @Param alarmStatus query string false "Alarm status 0:clear, 1:active" Enums(0,1) +// @Param alarmStatus query string false "Alarm status 0:clear, 1:active" Enums(0,1) // @Param origSeverity query string false "Alarm Type 1: Critical, 2: Major, 3: Minor, 4: Warning" Enums(1,2,3,4) // @Param sortField query string false "Sort fields, fill in result fields" default(event_time) // @Param sortOrder query string false "Sort by ascending or descending order, asc desc" default(asc) @@ -82,7 +82,7 @@ func (s AlarmLogController) Event(c *gin.Context) { var query model.AlarmEventQuery if err := c.ShouldBindQuery(&query); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } // 查询数据 diff --git a/src/modules/network_data/controller/all_backup.go b/src/modules/network_data/controller/all_backup.go new file mode 100644 index 00000000..3b4d4c55 --- /dev/null +++ b/src/modules/network_data/controller/all_backup.go @@ -0,0 +1,101 @@ +package controller + +import ( + "encoding/json" + "fmt" + "os" + "path/filepath" + "runtime" + "strings" + + "be.ems/src/framework/reqctx" + "be.ems/src/framework/resp" + "be.ems/src/modules/network_data/model" + "be.ems/src/modules/network_data/service" + + "github.com/gin-gonic/gin" +) + +// 实例化控制层 BackupController 结构体 +var NewBackup = &BackupController{ + backupService: service.NewBackup, +} + +// 备份数据 +// +// PATH /backup +type BackupController struct { + backupService *service.Backup // 备份相关服务 +} + +// 备份文件-更新FTP配置 +// +// PUT /ftp +func (s BackupController) FTPUpdate(c *gin.Context) { + var body model.BackupDataFTP + if err := c.ShouldBindBodyWithJSON(&body); err != nil { + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) + return + } + + byteData, err := json.Marshal(body) + if err != nil { + c.JSON(200, resp.ErrMsg(err.Error())) + return + } + + up := s.backupService.FTPConfigUpdate(string(byteData), reqctx.LoginUserToUserName(c)) + if up <= 0 { + c.JSON(200, resp.ErrMsg("update failed")) + return + } + c.JSON(200, resp.Ok(nil)) +} + +// 备份文件-获取FTP配置 +// +// GET /ftp +func (s BackupController) FTPInfo(c *gin.Context) { + info := s.backupService.FTPConfigInfo() + c.JSON(200, resp.OkData(info)) +} + +// 备份文件-文件FTP发送 +// +// POST /ftp +func (s BackupController) FTPPush(c *gin.Context) { + var body struct { + Path string `form:"path" binding:"required"` // 路径必须是 BACKUP_DIR 开头的路径 + Filename string `form:"fileName" binding:"required"` + Tag string `form:"tag" binding:"required"` // 标签,用于区分不同的备份文件 + } + if err := c.ShouldBindBodyWithJSON(&body); err != nil { + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) + return + } + // 判断路径是否合法 + if !strings.HasPrefix(body.Path, s.backupService.BACKUP_DIR) { + c.JSON(200, resp.ErrMsg("operation path is not within the allowed range")) + return + } + + // 判断文件是否存在 + localFilePath := filepath.Join(body.Path, body.Filename) + if runtime.GOOS == "windows" { + localFilePath = fmt.Sprintf("C:%s", localFilePath) + } + if _, err := os.Stat(localFilePath); os.IsNotExist(err) { + c.JSON(200, resp.ErrMsg("file does not exist")) + return + } + + // 发送文件 + err := s.backupService.FTPPushFile(localFilePath, body.Tag) + if err != nil { + c.JSON(200, resp.ErrMsg(err.Error())) + return + } + c.JSON(200, resp.Ok(nil)) +} diff --git a/src/modules/network_data/controller/all_kpi.go b/src/modules/network_data/controller/all_kpi.go index 15128b53..96112389 100644 --- a/src/modules/network_data/controller/all_kpi.go +++ b/src/modules/network_data/controller/all_kpi.go @@ -49,7 +49,7 @@ func (s KPIController) KPIData(c *gin.Context) { var querys model.KPIQuery if err := c.ShouldBindQuery(&querys); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -82,7 +82,7 @@ func (s KPIController) KPIData(c *gin.Context) { func (s KPIController) KPITitle(c *gin.Context) { neType := c.Query("neType") if neType == "" { - c.JSON(400, resp.CodeMsg(40010, "bind err: neType is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: neType is empty")) return } kpiTitles := s.kpiReportService.FindTitle(neType) diff --git a/src/modules/network_data/controller/all_nb_state.go b/src/modules/network_data/controller/all_nb_state.go index bc48b380..8b95b553 100644 --- a/src/modules/network_data/controller/all_nb_state.go +++ b/src/modules/network_data/controller/all_nb_state.go @@ -53,7 +53,7 @@ func (s NBStateController) List(c *gin.Context) { var query model.NBStateQuery if err := c.ShouldBindQuery(&query); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -89,7 +89,7 @@ func (s NBStateController) Export(c *gin.Context) { var querys model.NBStateQuery if err := c.ShouldBindBodyWithJSON(&querys); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } // 限制导出数据集 diff --git a/src/modules/network_data/controller/amf.go b/src/modules/network_data/controller/amf.go index 8c3f0153..d15c0589 100644 --- a/src/modules/network_data/controller/amf.go +++ b/src/modules/network_data/controller/amf.go @@ -52,7 +52,7 @@ func (s *AMFController) UEList(c *gin.Context) { var querys model.UEEventAMFQuery if err := c.ShouldBindQuery(&querys); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -86,7 +86,7 @@ func (s *AMFController) UERemove(c *gin.Context) { language := reqctx.AcceptLanguage(c) id := c.Param("id") if id == "" { - c.JSON(400, resp.CodeMsg(40010, "bind err: id is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: id is empty")) return } @@ -126,7 +126,7 @@ func (s *AMFController) UEExport(c *gin.Context) { var querys model.UEEventAMFQuery if err := c.ShouldBindBodyWithJSON(&querys); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } // 限制导出数据集 @@ -181,7 +181,7 @@ func (s *AMFController) NbInfoList(c *gin.Context) { } if err := c.ShouldBindQuery(&query); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -221,7 +221,7 @@ func (s *AMFController) NbStateList(c *gin.Context) { language := reqctx.AcceptLanguage(c) neId := c.Query("neId") if neId == "" { - c.JSON(400, resp.CodeMsg(40010, "bind err: neId is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: neId is empty")) return } diff --git a/src/modules/network_data/controller/ims.go b/src/modules/network_data/controller/ims.go index a9c9fc55..f726bbf6 100644 --- a/src/modules/network_data/controller/ims.go +++ b/src/modules/network_data/controller/ims.go @@ -53,7 +53,7 @@ func (s *IMSController) CDRList(c *gin.Context) { var querys model.CDREventIMSQuery if err := c.ShouldBindQuery(&querys); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -87,7 +87,7 @@ func (s *IMSController) CDRRemove(c *gin.Context) { language := reqctx.AcceptLanguage(c) id := c.Param("id") if id == "" { - c.JSON(400, resp.CodeMsg(40010, "bind err: id is empty")) + c.JSON(422, resp.CodeMsg(442002, "bind err: id is empty")) return } @@ -127,7 +127,7 @@ func (s *IMSController) CDRExport(c *gin.Context) { var querys model.CDREventIMSQuery if err := c.ShouldBindBodyWithJSON(&querys); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } // 限制导出数据集 @@ -177,7 +177,7 @@ func (s *IMSController) UeSessionNum(c *gin.Context) { language := reqctx.AcceptLanguage(c) neId := c.Query("neId") if neId == "" { - c.JSON(400, resp.CodeMsg(40010, "bind err: neId is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: neId is empty")) return } @@ -222,7 +222,7 @@ func (s *IMSController) UeSessionList(c *gin.Context) { } if err := c.ShouldBindQuery(&query); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } diff --git a/src/modules/network_data/controller/mme.go b/src/modules/network_data/controller/mme.go index 4efbcafb..47c5dca5 100644 --- a/src/modules/network_data/controller/mme.go +++ b/src/modules/network_data/controller/mme.go @@ -52,7 +52,7 @@ func (s *MMEController) UEList(c *gin.Context) { var querys model.UEEventMMEQuery if err := c.ShouldBindQuery(&querys); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -86,7 +86,7 @@ func (s *MMEController) UERemove(c *gin.Context) { language := reqctx.AcceptLanguage(c) id := c.Param("id") if id == "" { - c.JSON(400, resp.CodeMsg(40010, "bind err: id is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: id is empty")) return } @@ -126,7 +126,7 @@ func (s *MMEController) UEExport(c *gin.Context) { var querys model.UEEventMMEQuery if err := c.ShouldBindBodyWithJSON(&querys); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } // 限制导出数据集 @@ -181,7 +181,7 @@ func (s *MMEController) NbInfoList(c *gin.Context) { } if err := c.ShouldBindQuery(&query); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -221,7 +221,7 @@ func (s *MMEController) NbStateList(c *gin.Context) { language := reqctx.AcceptLanguage(c) neId := c.Query("neId") if neId == "" { - c.JSON(400, resp.CodeMsg(40010, "bind err: neId is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: neId is empty")) return } diff --git a/src/modules/network_data/controller/sgwc.go b/src/modules/network_data/controller/sgwc.go index 9b400bc7..c233b6e7 100644 --- a/src/modules/network_data/controller/sgwc.go +++ b/src/modules/network_data/controller/sgwc.go @@ -53,7 +53,7 @@ func (s *SGWCController) CDRList(c *gin.Context) { var querys model.CDREventSGWCQuery if err := c.ShouldBindQuery(&querys); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -87,7 +87,7 @@ func (s *SGWCController) CDRRemove(c *gin.Context) { language := reqctx.AcceptLanguage(c) id := c.Param("id") if id == "" { - c.JSON(400, resp.CodeMsg(40010, "bind err: id is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: id is empty")) return } @@ -127,7 +127,7 @@ func (s *SGWCController) CDRExport(c *gin.Context) { var querys model.CDREventSGWCQuery if err := c.ShouldBindBodyWithJSON(&querys); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } // 限制导出数据集 diff --git a/src/modules/network_data/controller/smf.go b/src/modules/network_data/controller/smf.go index cd627b14..003d8058 100644 --- a/src/modules/network_data/controller/smf.go +++ b/src/modules/network_data/controller/smf.go @@ -55,7 +55,7 @@ func (s *SMFController) CDRList(c *gin.Context) { var querys model.CDREventSMFQuery if err := c.ShouldBindQuery(&querys); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -89,7 +89,7 @@ func (s *SMFController) CDRRemove(c *gin.Context) { language := reqctx.AcceptLanguage(c) id := c.Param("id") if id == "" { - c.JSON(400, resp.CodeMsg(40010, "bind err: id is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: id is empty")) return } @@ -129,7 +129,7 @@ func (s *SMFController) CDRExport(c *gin.Context) { var querys model.CDREventSMFQuery if err := c.ShouldBindBodyWithJSON(&querys); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } // 限制导出数据集 @@ -181,7 +181,8 @@ func (s *SMFController) SubUserNum(c *gin.Context) { NeId string `form:"neId" binding:"required"` } if err := c.ShouldBindQuery(&query); err != nil { - c.JSON(400, resp.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -229,7 +230,8 @@ func (s *SMFController) SubUserList(c *gin.Context) { PageNum string `form:"pageNum"` } if err := c.ShouldBindQuery(&query); err != nil { - c.JSON(400, resp.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } diff --git a/src/modules/network_data/controller/smsc.go b/src/modules/network_data/controller/smsc.go index 5c52ca67..bb7df155 100644 --- a/src/modules/network_data/controller/smsc.go +++ b/src/modules/network_data/controller/smsc.go @@ -52,7 +52,7 @@ func (s *SMSCController) CDRList(c *gin.Context) { var querys model.CDREventSMSCQuery if err := c.ShouldBindQuery(&querys); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -86,7 +86,7 @@ func (s *SMSCController) CDRRemove(c *gin.Context) { language := reqctx.AcceptLanguage(c) id := c.Param("id") if id == "" { - c.JSON(400, resp.CodeMsg(40010, "bind err: id is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: id is empty")) return } @@ -126,7 +126,7 @@ func (s *SMSCController) CDRExport(c *gin.Context) { var querys model.CDREventSMSCQuery if err := c.ShouldBindBodyWithJSON(&querys); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } // 限制导出数据集 diff --git a/src/modules/network_data/controller/udm_auth.go b/src/modules/network_data/controller/udm_auth.go index 5677adb9..df94f622 100644 --- a/src/modules/network_data/controller/udm_auth.go +++ b/src/modules/network_data/controller/udm_auth.go @@ -49,10 +49,9 @@ type UDMAuthController struct { // @Description UDM Authenticated User Data List Refresh Synchronization Latest // @Router /neData/udm/auth/resetData/{neId} [put] func (s *UDMAuthController) ResetData(c *gin.Context) { - language := reqctx.AcceptLanguage(c) neId := c.Param("neId") if neId == "" { - c.JSON(400, resp.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + c.JSON(422, resp.CodeMsg(422002, "bind err: neId is empty")) return } @@ -101,7 +100,7 @@ func (s *UDMAuthController) Info(c *gin.Context) { neId := c.Param("neId") imsi := c.Param("imsi") if neId == "" || imsi == "" { - c.JSON(400, resp.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + c.JSON(422, resp.CodeMsg(422002, "bind err: neId/imsi is empty")) return } @@ -156,14 +155,18 @@ func (s *UDMAuthController) Add(c *gin.Context) { language := reqctx.AcceptLanguage(c) neId := c.Param("neId") if neId == "" { - c.JSON(400, resp.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + c.JSON(422, resp.CodeMsg(422002, "bind err: neId is empty")) return } var body model.UDMAuthUser - err := c.ShouldBindBodyWithJSON(&body) - if err != nil || body.IMSI == "" { - c.JSON(400, resp.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + if err := c.ShouldBindBodyWithJSON(&body); err != nil { + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) + return + } + if body.IMSI == "" { + c.JSON(422, resp.CodeMsg(422002, "bind err: imsi is empty")) return } @@ -217,14 +220,18 @@ func (s *UDMAuthController) Adds(c *gin.Context) { neId := c.Param("neId") num := c.Param("num") if neId == "" || num == "" { - c.JSON(400, resp.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + c.JSON(422, resp.CodeMsg(422002, "bind err: neId/num is empty")) return } var body model.UDMAuthUser - err := c.ShouldBindBodyWithJSON(&body) - if err != nil || body.IMSI == "" { - c.JSON(400, resp.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + if err := c.ShouldBindBodyWithJSON(&body); err != nil { + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) + return + } + if body.IMSI == "" { + c.JSON(422, resp.CodeMsg(422002, "bind err: imsi is empty")) return } @@ -276,14 +283,18 @@ func (s *UDMAuthController) Edit(c *gin.Context) { language := reqctx.AcceptLanguage(c) neId := c.Param("neId") if neId == "" { - c.JSON(400, resp.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + c.JSON(422, resp.CodeMsg(422002, "bind err: neId is empty")) return } var body model.UDMAuthUser - err := c.ShouldBindBodyWithJSON(&body) - if err != nil || body.IMSI == "" { - c.JSON(400, resp.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + if err := c.ShouldBindBodyWithJSON(&body); err != nil { + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) + return + } + if body.IMSI == "" { + c.JSON(422, resp.CodeMsg(422002, "bind err: imsi is empty")) return } @@ -336,7 +347,7 @@ func (s *UDMAuthController) Remove(c *gin.Context) { neId := c.Param("neId") imsi := c.Param("imsi") if neId == "" || imsi == "" { - c.JSON(400, resp.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + c.JSON(422, resp.CodeMsg(422002, "bind err: neId/imsi is empty")) return } @@ -402,7 +413,7 @@ func (s *UDMAuthController) Removes(c *gin.Context) { imsi := c.Param("imsi") num := c.Param("num") if neId == "" || imsi == "" || num == "" { - c.JSON(400, resp.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + c.JSON(422, resp.CodeMsg(422002, "bind err: neId/imsi/num is empty")) return } @@ -458,7 +469,7 @@ func (s *UDMAuthController) Export(c *gin.Context) { neId := c.Query("neId") fileType := c.Query("type") if neId == "" { - c.JSON(400, resp.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + c.JSON(422, resp.CodeMsg(422002, "bind err: neId is empty")) return } if !(fileType == "csv" || fileType == "txt") { @@ -497,8 +508,7 @@ func (s *UDMAuthController) Export(c *gin.Context) { data = append(data, []string{v.IMSI, v.Ki, v.AlgoIndex, v.Amf, opc}) } // 输出到文件 - err := file.WriterFileCSV(data, filePath) - if err != nil { + if err := file.WriterFileCSV(data, filePath); err != nil { c.JSON(200, resp.ErrMsg(err.Error())) return } @@ -515,7 +525,6 @@ func (s *UDMAuthController) Export(c *gin.Context) { data = append(data, []string{v.IMSI, v.Ki, v.AlgoIndex, v.Amf, opc}) } // 输出到文件 - if err := file.WriterFileTXT(data, ",", filePath); err != nil { c.JSON(200, resp.ErrMsg(err.Error())) return @@ -548,7 +557,7 @@ func (s *UDMAuthController) Import(c *gin.Context) { } if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } diff --git a/src/modules/network_data/controller/udm_sub.go b/src/modules/network_data/controller/udm_sub.go index 25496d6b..84b61bb4 100644 --- a/src/modules/network_data/controller/udm_sub.go +++ b/src/modules/network_data/controller/udm_sub.go @@ -48,10 +48,9 @@ type UDMSubController struct { // @Description UDM Subscriber User Reload Data // @Router /neData/udm/sub/resetData/{neId} [put] func (s *UDMSubController) ResetData(c *gin.Context) { - language := reqctx.AcceptLanguage(c) neId := c.Param("neId") if neId == "" { - c.JSON(400, resp.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + c.JSON(422, resp.CodeMsg(422002, "bind err: neId is empty")) return } @@ -101,7 +100,7 @@ func (s *UDMSubController) Info(c *gin.Context) { neId := c.Param("neId") imsi := c.Param("imsi") if neId == "" || imsi == "" { - c.JSON(400, resp.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + c.JSON(422, resp.CodeMsg(422002, "bind err: neId or imsi is empty")) return } @@ -156,18 +155,18 @@ func (s *UDMSubController) Add(c *gin.Context) { language := reqctx.AcceptLanguage(c) neId := c.Param("neId") if neId == "" { - c.JSON(400, resp.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + c.JSON(422, resp.CodeMsg(422002, "bind err: neId is empty")) return } var body model.UDMSubUser if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } if len(body.IMSI) != 15 { - c.JSON(400, resp.CodeMsg(40010, "bind err: IMSI length is not 15 bits")) + c.JSON(422, resp.CodeMsg(422002, "bind err: IMSI length is not 15 bits")) return } @@ -222,18 +221,18 @@ func (s *UDMSubController) Adds(c *gin.Context) { neId := c.Param("neId") num := c.Param("num") if neId == "" || num == "" { - c.JSON(400, resp.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + c.JSON(422, resp.CodeMsg(422002, "bind err: neId/num is empty")) return } var body model.UDMSubUser if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } if len(body.IMSI) != 15 { - c.JSON(400, resp.CodeMsg(40010, "bind err: IMSI length is not 15 bits")) + c.JSON(422, resp.CodeMsg(422002, "bind err: IMSI length is not 15 bits")) return } @@ -288,18 +287,18 @@ func (s *UDMSubController) Edit(c *gin.Context) { language := reqctx.AcceptLanguage(c) neId := c.Param("neId") if neId == "" { - c.JSON(400, resp.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + c.JSON(422, resp.CodeMsg(422002, "bind err: neId is empty")) return } var body model.UDMSubUser if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } if len(body.IMSI) != 15 { - c.JSON(400, resp.CodeMsg(40010, "bind err: IMSI length is not 15 bits")) + c.JSON(422, resp.CodeMsg(422002, "bind err: IMSI length is not 15 bits")) return } @@ -353,7 +352,7 @@ func (s *UDMSubController) Remove(c *gin.Context) { neId := c.Param("neId") imsi := c.Param("imsi") if neId == "" || len(imsi) < 15 { - c.JSON(400, resp.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + c.JSON(422, resp.CodeMsg(422002, "bind err: neId/imsi is empty")) return } @@ -419,7 +418,7 @@ func (s *UDMSubController) Removes(c *gin.Context) { imsi := c.Param("imsi") num := c.Param("num") if neId == "" || len(imsi) < 15 || num == "" { - c.JSON(400, resp.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + c.JSON(422, resp.CodeMsg(422002, "bind err: neId/imsi/num is empty")) return } @@ -476,7 +475,7 @@ func (s *UDMSubController) Export(c *gin.Context) { neId := c.Query("neId") fileType := c.Query("type") if neId == "" || fileType == "" { - c.JSON(400, resp.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + c.JSON(422, resp.CodeMsg(422002, "bind err: neId or type is empty")) return } if !(fileType == "csv" || fileType == "txt") { @@ -556,7 +555,7 @@ func (s *UDMSubController) Import(c *gin.Context) { } if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } diff --git a/src/modules/network_data/controller/udm_voip.go b/src/modules/network_data/controller/udm_voip.go new file mode 100644 index 00000000..df3e0110 --- /dev/null +++ b/src/modules/network_data/controller/udm_voip.go @@ -0,0 +1,561 @@ +package controller + +import ( + "fmt" + "path/filepath" + "strings" + "time" + + "be.ems/src/framework/constants" + "be.ems/src/framework/i18n" + "be.ems/src/framework/reqctx" + "be.ems/src/framework/resp" + "be.ems/src/framework/telnet" + "be.ems/src/framework/utils/file" + "be.ems/src/framework/utils/parse" + "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/gin-gonic/gin" +) + +// 实例化控制层 UDMVOIPController 结构体 +var NewUDMVOIP = &UDMVOIPController{ + udmVOIPService: neDataService.NewUDMVOIPUser, + neInfoService: neService.NewNeInfo, +} + +// UDMVOIP用户 +// +// PATH /udm/voip +type UDMVOIPController struct { + udmVOIPService *neDataService.UDMVOIPUser // UDMVOIP信息服务 + neInfoService *neService.NeInfo // 网元信息服务 +} + +// UDMVOIP用户重载数据 +// +// PUT /resetData/:neId +// +// @Tags network_data/udm/voip +// @Accept json +// @Produce json +// @Param neId path string true "NE ID" default(001) +// @Success 200 {object} object "Response Results" +// @Security TokenAuth +// @Summary UDM VOIP User Data Refresh +// @Description UDM VOIP User Data List Refresh Synchronization Latest +// @Router /neData/udm/voip/resetData/{neId} [put] +func (s *UDMVOIPController) ResetData(c *gin.Context) { + neId := c.Param("neId") + if neId == "" { + c.JSON(422, resp.CodeMsg(422002, "bind err: neId is empty")) + return + } + + data := s.udmVOIPService.ResetData(neId) + c.JSON(200, resp.OkData(data)) +} + +// UDMVOIP用户列表 +// +// GET /list +// +// @Tags network_data/udm/voip +// @Accept json +// @Produce json +// @Param neId query string true "NE ID" default(001) +// @Param username query string false "User Name" +// @Param pageNum query number true "pageNum" default(1) +// @Param pageSize query number true "pageSize" default(10) +// @Success 200 {object} object "Response Results" +// @Security TokenAuth +// @Summary UDM VOIP User List +// @Description UDM VOIP User List +// @Router /neData/udm/voip/list [get] +func (s *UDMVOIPController) List(c *gin.Context) { + query := reqctx.QueryMap(c) + total, rows := s.udmVOIPService.FindByPage(query) + c.JSON(200, resp.OkData(map[string]any{"total": total, "rows": rows})) +} + +// UDMVOIP用户信息 +// +// GET /:neId/:username +// +// @Tags network_data/udm/voip +// @Accept json +// @Produce json +// @Param neId path string true "NE ID" default(001) +// @Param value path string true "User Name" +// @Success 200 {object} object "Response Results" +// @Security TokenAuth +// @Summary UDM VOIP User Information +// @Description UDM VOIP User Information +// @Router /neData/udm/voip/{neId}/{value} [get] +func (s *UDMVOIPController) Info(c *gin.Context) { + language := reqctx.AcceptLanguage(c) + neId := c.Param("neId") + username := c.Param("username") + if neId == "" || username == "" { + c.JSON(422, resp.CodeMsg(422002, "bind err: neId or username is empty")) + return + } + + // 查询网元获取IP + neInfo := s.neInfoService.FindByNeTypeAndNeID("UDM", neId) + if neInfo.NeId != neId || neInfo.IP == "" { + c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo"))) + return + } + // 网元主机的Telnet客户端 + telnetClient, err := s.neInfoService.NeRunTelnetClient("UDM", neId, 1) + if err != nil { + c.JSON(200, resp.ErrMsg(err.Error())) + return + } + defer telnetClient.Close() + + // 发送MML + cmd := fmt.Sprintf("dsp voip:username=%s", username) + data, err := telnet.ConvertToMap(telnetClient, cmd) + if err != nil { + c.JSON(200, resp.ErrMsg(err.Error())) + return + } + + if len(data) == 0 { + c.JSON(200, resp.ErrMsg("No VOIP Data")) + return + } + + // 解析返回的数据 + u := s.udmVOIPService.ParseInfo(neId, data) + if u.ID != "" { + s.udmVOIPService.Insert(neId, u.UserName) + c.JSON(200, resp.OkData(u)) + return + } + c.JSON(200, resp.ErrMsg("No VOIP Data")) +} + +// UDMVOIP用户新增 +// +// POST /:neId +// +// @Tags network_data/udm/voip +// @Accept json +// @Produce json +// @Param neId path string true "NE ID" default(001) +// @Param data body object true "Request Param" +// @Success 200 {object} object "Response Results" +// @Security TokenAuth +// @Summary UDM VOIP User Added +// @Description UDM VOIP User Added +// @Router /neData/udm/voip/{neId} [post] +func (s *UDMVOIPController) Add(c *gin.Context) { + language := reqctx.AcceptLanguage(c) + neId := c.Param("neId") + if neId == "" { + c.JSON(422, resp.CodeMsg(422002, "bind err: neId is empty")) + return + } + + var body model.UDMVOIPUser + if err := c.ShouldBindBodyWithJSON(&body); err != nil { + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) + return + } + if body.UserName == "" { + c.JSON(422, resp.CodeMsg(422002, "bind err: username is empty")) + return + } + + // 查询网元获取IP + neInfo := s.neInfoService.FindByNeTypeAndNeID("UDM", neId) + if neInfo.NeId != neId || neInfo.IP == "" { + c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo"))) + return + } + // 网元主机的Telnet客户端 + telnetClient, err := s.neInfoService.NeRunTelnetClient("UDM", neId, 1) + if err != nil { + c.JSON(200, resp.ErrMsg(err.Error())) + return + } + defer telnetClient.Close() + + // 发送MML + cmd := fmt.Sprintf("add voip:username=%s,password=%s", body.UserName, body.Password) + data, err := telnet.ConvertToStr(telnetClient, cmd) + if err != nil { + c.JSON(200, resp.ErrMsg(err.Error())) + return + } + + // 命令ok时 + if strings.Contains(data, "ok") { + s.udmVOIPService.Insert(neId, body.UserName) + } + c.JSON(200, resp.OkData(data)) +} + +// UDMVOIP用户批量新增 +// +// POST /:neId/:num +// +// @Tags network_data/udm/voip +// @Accept json +// @Produce json +// @Param neId path string true "NE ID" default(001) +// @Param value path number true "Number of releases, value includes start username" +// @Param data body object true "Request Param" +// @Success 200 {object} object "Response Results" +// @Security TokenAuth +// @Summary UDM VOIP User Batch Add +// @Description UDM VOIP User Batch Add +// @Router /neData/udm/voip/{neId}/{value} [post] +func (s *UDMVOIPController) Adds(c *gin.Context) { + language := reqctx.AcceptLanguage(c) + neId := c.Param("neId") + num := c.Param("num") + if neId == "" || num == "" { + c.JSON(422, resp.CodeMsg(422002, "bind err: neId or num is empty")) + return + } + + var body model.UDMVOIPUser + if err := c.ShouldBindBodyWithJSON(&body); err != nil { + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) + return + } + if body.UserName == "" { + c.JSON(422, resp.CodeMsg(422002, "bind err: username is empty")) + return + } + + // 查询网元获取IP + neInfo := s.neInfoService.FindByNeTypeAndNeID("UDM", neId) + if neInfo.NeId != neId || neInfo.IP == "" { + c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo"))) + return + } + // 网元主机的Telnet客户端 + telnetClient, err := s.neInfoService.NeRunTelnetClient("UDM", neId, 1) + if err != nil { + c.JSON(200, resp.ErrMsg(err.Error())) + return + } + defer telnetClient.Close() + + // 发送MML + cmd := fmt.Sprintf("baa voip:sub_num=%s,start_username=%s,password=%s", num, body.UserName, body.Password) + data, err := telnet.ConvertToStr(telnetClient, cmd) + if err != nil { + c.JSON(200, resp.ErrMsg(err.Error())) + return + } + + // 命令ok时 + if strings.Contains(data, "ok") { + s.udmVOIPService.LoadData(neId, body.UserName, num) + } + c.JSON(200, resp.OkData(data)) +} + +// UDMVOIP用户删除 +// +// DELETE /:neId/:username +// +// @Tags network_data/udm/voip +// @Accept json +// @Produce json +// @Param neId path string true "NE ID" default(001) +// @Param value path string true "User Name, multiple separated by a , sign" +// @Success 200 {object} object "Response Results" +// @Security TokenAuth +// @Summary UDM VOIP User Deletion +// @Description UDM VOIP User Deletion +// @Router /neData/udm/voip/{neId}/{value} [delete] +func (s *UDMVOIPController) Remove(c *gin.Context) { + language := reqctx.AcceptLanguage(c) + neId := c.Param("neId") + username := c.Param("username") + if neId == "" || username == "" { + c.JSON(422, resp.CodeMsg(422002, "bind err: neId or username is empty")) + return + } + + // 处理字符转id数组后去重 + usernameArr := strings.Split(username, ",") + uniqueIDs := parse.RemoveDuplicates(usernameArr) + if len(uniqueIDs) <= 0 { + c.JSON(200, resp.Err(nil)) + return + } + + // 查询网元获取IP + neInfo := s.neInfoService.FindByNeTypeAndNeID("UDM", neId) + if neInfo.NeId != neId || neInfo.IP == "" { + c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo"))) + return + } + // 网元主机的Telnet客户端 + telnetClient, err := s.neInfoService.NeRunTelnetClient("UDM", neId, 1) + if err != nil { + c.JSON(200, resp.ErrMsg(err.Error())) + return + } + defer telnetClient.Close() + + resultData := map[string]string{} + for _, v := range uniqueIDs { + // 发送MML + cmd := fmt.Sprintf("del voip:username=%s", v) + data, err := telnet.ConvertToStr(telnetClient, cmd) + if err != nil { + resultData[v] = err.Error() + continue + } + // 命令ok时 + if strings.Contains(data, "ok") { + s.udmVOIPService.Delete(v, neId) + } + resultData[v] = data + } + + c.JSON(200, resp.OkData(resultData)) +} + +// UDMVOIP用户批量删除 +// +// DELETE /:neId/:username/:num +// +// @Tags network_data/udm/voip +// @Accept json +// @Produce json +// @Param neId path string true "NE ID" default(001) +// @Param username path string true "User Name" +// @Param num path number true "Number of releases, value includes start username" +// @Success 200 {object} object "Response Results" +// @Security TokenAuth +// @Summary UDM VOIP User Batch Deletion +// @Description UDM VOIP User Batch Deletion +// @Router /neData/udm/voip/{neId}/{username}/{num} [delete] +func (s *UDMVOIPController) Removes(c *gin.Context) { + language := reqctx.AcceptLanguage(c) + neId := c.Param("neId") + username := c.Param("username") + num := c.Param("num") + if neId == "" || username == "" || num == "" { + c.JSON(422, resp.CodeMsg(422002, "bind err: neId/username/num is empty")) + return + } + + // 查询网元获取IP + neInfo := s.neInfoService.FindByNeTypeAndNeID("UDM", neId) + if neInfo.NeId != neId || neInfo.IP == "" { + c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo"))) + return + } + // 网元主机的Telnet客户端 + telnetClient, err := s.neInfoService.NeRunTelnetClient("UDM", neId, 1) + if err != nil { + c.JSON(200, resp.ErrMsg(err.Error())) + return + } + defer telnetClient.Close() + + // 发送MML + cmd := fmt.Sprintf("bde voip:start_username=%s,sub_num=%s", username, num) + data, err := telnet.ConvertToStr(telnetClient, cmd) + if err != nil { + c.JSON(200, resp.ErrMsg(err.Error())) + return + } + + // 命令ok时 + if strings.Contains(data, "ok") { + s.udmVOIPService.LoadData(neId, username, num) + } + c.JSON(200, resp.OkData(data)) +} + +// UDMVOIP用户导出 +// +// GET /export +// +// @Tags network_data/udm/voip +// @Accept json +// @Produce json +// @Param neId query string true "NE ID" default(001) +// @Param type query string true "File Type" Enums(csv,txt) default(txt) +// @Param username query string false "User Name" +// @Param pageNum query number true "pageNum" default(1) +// @Param pageSize query number true "pageSize" default(10) +// @Success 200 {object} object "Response Results" +// @Security TokenAuth +// @Summary UDM VOIP User Export +// @Description UDM VOIP User Export +// @Router /neData/udm/voip/export [get] +func (s *UDMVOIPController) Export(c *gin.Context) { + language := reqctx.AcceptLanguage(c) + // 查询结果,根据查询条件结果,单页最大值限制 + neId := c.Query("neId") + fileType := c.Query("type") + if neId == "" { + c.JSON(422, resp.CodeMsg(422002, "bind err: neId is empty")) + return + } + if !(fileType == "csv" || fileType == "txt") { + c.JSON(200, resp.ErrMsg("file type error, only support csv,txt")) + return + } + + query := reqctx.QueryMap(c) + total, rows := s.udmVOIPService.FindByPage(query) + if total == 0 { + // 导出数据记录为空 + c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.exportEmpty"))) + return + } + + // rows := s.udmVOIPService.SelectList(model.UDMVOIPUser{NeId: neId}) + if len(rows) <= 0 { + // 导出数据记录为空 + c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.exportEmpty"))) + return + } + + // 文件名 + fileName := fmt.Sprintf("udm_voip_user_export_%s_%d.%s", neId, time.Now().UnixMilli(), fileType) + filePath := filepath.Join(file.ParseUploadFileDir(constants.UPLOAD_EXPORT), fileName) + + if fileType == "csv" { + // 转换数据 + data := [][]string{} + data = append(data, []string{"username", "password"}) + for _, v := range rows { + data = append(data, []string{v.UserName, v.Password}) + } + // 输出到文件 + if err := file.WriterFileCSV(data, filePath); err != nil { + c.JSON(200, resp.ErrMsg(err.Error())) + return + } + } + + if fileType == "txt" { + // 转换数据 + data := [][]string{} + for _, v := range rows { + data = append(data, []string{v.UserName, v.Password}) + } + // 输出到文件 + if err := file.WriterFileTXT(data, ",", filePath); err != nil { + c.JSON(200, resp.ErrMsg(err.Error())) + return + } + } + + c.FileAttachment(filePath, fileName) +} + +// UDMVOIP用户导入 +// +// POST /import +// +// @Tags network_data/udm/voip +// @Accept json +// @Produce json +// @Param data body object true "Request Param" +// @Success 200 {object} object "Response Results" +// @Security TokenAuth +// @Summary UDM VOIP User Import +// @Description UDM VOIP User Import +// @Router /neData/udm/voip/import [post] +func (s *UDMVOIPController) Import(c *gin.Context) { + language := reqctx.AcceptLanguage(c) + var body struct { + NeId string `json:"neId" binding:"required"` // 网元ID + UploadPath string `json:"uploadPath" binding:"required"` // 上传文件路径 + } + if err := c.ShouldBindBodyWithJSON(&body); err != nil { + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) + return + } + + // 判断文件名 + if !(strings.HasSuffix(body.UploadPath, ".csv") || strings.HasSuffix(body.UploadPath, ".txt")) { + c.JSON(200, resp.ErrMsg(i18n.TKey(language, "ne.udm.errImportUserAuthFileFormat"))) + return + } + + // 查询网元获取IP + neInfo := s.neInfoService.FindByNeTypeAndNeID("UDM", body.NeId) + if neInfo.NeId != body.NeId || neInfo.IP == "" { + c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo"))) + return + } + + // 网元主机的SSH客户端 + sshClient, err := s.neInfoService.NeRunSSHClient(neInfo.NeType, neInfo.NeId) + if err != nil { + c.JSON(200, resp.ErrMsg(err.Error())) + return + } + defer sshClient.Close() + // 网元主机的SSH客户端进行文件传输 + sftpClient, err := sshClient.NewClientSFTP() + if err != nil { + c.JSON(200, resp.ErrMsg(err.Error())) + return + } + defer sftpClient.Close() + + // 本地文件 + localFilePath := file.ParseUploadFileAbsPath(body.UploadPath) + neFilePath := fmt.Sprintf("/tmp/%s", filepath.Base(localFilePath)) + // 复制到远程 + if err = sftpClient.CopyFileLocalToRemote(localFilePath, neFilePath); err != nil { + c.JSON(200, resp.ErrMsg("error uploading file")) + return + } + + // 网元主机的Telnet客户端 + telnetClient, err := s.neInfoService.NeRunTelnetClient(neInfo.NeType, neInfo.NeId, 1) + if err != nil { + c.JSON(200, resp.ErrMsg(err.Error())) + return + } + defer telnetClient.Close() + + // 结果信息 + var resultMsg string + var resultErr error + + // 发送MML + cmd := fmt.Sprintf("import voip:path=%s", neFilePath) + resultMsg, resultErr = telnet.ConvertToStr(telnetClient, cmd) + if resultErr != nil { + c.JSON(200, resp.ErrMsg(resultErr.Error())) + return + } + + // 命令ok时 + if strings.Contains(resultMsg, "ok") { + if strings.HasSuffix(body.UploadPath, ".csv") { + data := file.ReadFileCSV(localFilePath) + go s.udmVOIPService.InsertData(neInfo.NeId, "csv", data) + } + if strings.HasSuffix(body.UploadPath, ".txt") { + data := file.ReadFileTXT(",", localFilePath) + go s.udmVOIPService.InsertData(neInfo.NeId, "txt", data) + } + } + c.JSON(200, resp.OkMsg(resultMsg)) +} diff --git a/src/modules/network_data/controller/udm_volte_ims.go b/src/modules/network_data/controller/udm_volte_ims.go new file mode 100644 index 00000000..d3d2243e --- /dev/null +++ b/src/modules/network_data/controller/udm_volte_ims.go @@ -0,0 +1,590 @@ +package controller + +import ( + "fmt" + "path/filepath" + "strings" + "time" + + "be.ems/src/framework/constants" + "be.ems/src/framework/i18n" + "be.ems/src/framework/reqctx" + "be.ems/src/framework/resp" + "be.ems/src/framework/telnet" + "be.ems/src/framework/utils/file" + "be.ems/src/framework/utils/parse" + "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/gin-gonic/gin" +) + +// 实例化控制层 UDMVolteIMSController 结构体 +var NewUDMVolteIMS = &UDMVolteIMSController{ + udmVolteIMSService: neDataService.NewUDMVolteIMSUser, + neInfoService: neService.NewNeInfo, +} + +// UDMVolteIMS用户 +// +// PATH /udm/volte-ims +type UDMVolteIMSController struct { + udmVolteIMSService *neDataService.UDMVolteIMSUser // UDMVolteIMS信息服务 + neInfoService *neService.NeInfo // 网元信息服务 +} + +// UDMVolteIMS用户重载数据 +// +// PUT /resetData/:neId +// +// @Tags network_data/udm/volte-ims +// @Accept json +// @Produce json +// @Param neId path string true "NE ID" default(001) +// @Success 200 {object} object "Response Results" +// @Security TokenAuth +// @Summary UDM VolteIMS User Data Refresh +// @Description UDM Authenticated User Data List Refresh Synchronization Latest +// @Router /neData/udm/volte-ims/resetData/{neId} [put] +func (s *UDMVolteIMSController) ResetData(c *gin.Context) { + neId := c.Param("neId") + if neId == "" { + c.JSON(422, resp.CodeMsg(422002, "bind err: neId is empty")) + return + } + + data := s.udmVolteIMSService.ResetData(neId) + c.JSON(200, resp.OkData(data)) +} + +// UDMVolteIMS用户列表 +// +// GET /list +// +// @Tags network_data/udm/volte-ims +// @Accept json +// @Produce json +// @Param neId query string true "NE ID" default(001) +// @Param imsi query string false "IMSI" +// @Param pageNum query number true "pageNum" default(1) +// @Param pageSize query number true "pageSize" default(10) +// @Success 200 {object} object "Response Results" +// @Security TokenAuth +// @Summary UDM VolteIMS User List +// @Description UDM VolteIMS User List +// @Router /neData/udm/volte-ims/list [get] +func (s *UDMVolteIMSController) List(c *gin.Context) { + query := reqctx.QueryMap(c) + total, rows := s.udmVolteIMSService.FindByPage(query) + c.JSON(200, resp.OkData(map[string]any{"total": total, "rows": rows})) +} + +// UDMVolteIMS用户信息 +// +// GET /:neId/:imsi +// +// @Tags network_data/udm/volte-ims +// @Accept json +// @Produce json +// @Param neId path string true "NE ID" default(001) +// @Param value path string true "IMSI" +// @Param msisdn query string true "MSISDN" +// @Success 200 {object} object "Response Results" +// @Security TokenAuth +// @Summary UDM VolteIMS User Information +// @Description UDM VolteIMS User Information +// @Router /neData/udm/volte-ims/{neId}/{value} [get] +func (s *UDMVolteIMSController) Info(c *gin.Context) { + language := reqctx.AcceptLanguage(c) + neId := c.Param("neId") + imsi := c.Param("imsi") + msisdn := c.Query("msisdn") + if neId == "" || imsi == "" { + c.JSON(422, resp.CodeMsg(422002, "bind err: neId or imsi is empty")) + return + } + if msisdn == "" { + c.JSON(422, resp.CodeMsg(422002, "bind err: msisdn is required")) + return + } + + // 查询网元获取IP + neInfo := s.neInfoService.FindByNeTypeAndNeID("UDM", neId) + if neInfo.NeId != neId || neInfo.IP == "" { + c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo"))) + return + } + // 网元主机的Telnet客户端 + telnetClient, err := s.neInfoService.NeRunTelnetClient("UDM", neId, 1) + if err != nil { + c.JSON(200, resp.ErrMsg(err.Error())) + return + } + defer telnetClient.Close() + + // 发送MML + cmd := fmt.Sprintf("dsp imsuser:imsi=%s,msisdn=%s", imsi, msisdn) + data, err := telnet.ConvertToMap(telnetClient, cmd) + if err != nil { + c.JSON(200, resp.ErrMsg(err.Error())) + return + } + + if len(data) == 0 { + c.JSON(200, resp.ErrMsg("No Volte IMS Data")) + return + } + + // 解析返回的数据 + u := s.udmVolteIMSService.ParseInfo(neId, data) + if u.ID != "" { + s.udmVolteIMSService.InsertByIMSI(imsi, neId) + c.JSON(200, resp.OkData(u)) + return + } + c.JSON(200, resp.ErrMsg("No Volte IMS Data")) +} + +// UDMVolteIMS用户新增 +// +// POST /:neId +// +// @Tags network_data/udm/volte-ims +// @Accept json +// @Produce json +// @Param neId path string true "NE ID" default(001) +// @Param data body object true "Request Param" +// @Success 200 {object} object "Response Results" +// @Security TokenAuth +// @Summary UDM VolteIMS User Added +// @Description UDM VolteIMS User Added If VoIP tag=0, then MSISDN and IMSI need to be the same. +// @Router /neData/udm/volte-ims/{neId} [post] +func (s *UDMVolteIMSController) Add(c *gin.Context) { + language := reqctx.AcceptLanguage(c) + neId := c.Param("neId") + if neId == "" { + c.JSON(422, resp.CodeMsg(422002, "bind err: neId is empty")) + return + } + + var body model.UDMVolteIMSUser + if err := c.ShouldBindBodyWithJSON(&body); err != nil { + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) + return + } + if body.IMSI == "" { + c.JSON(422, resp.CodeMsg(422002, "bind err: imsi is empty")) + return + } + + // 查询网元获取IP + neInfo := s.neInfoService.FindByNeTypeAndNeID("UDM", neId) + if neInfo.NeId != neId || neInfo.IP == "" { + c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo"))) + return + } + // 网元主机的Telnet客户端 + telnetClient, err := s.neInfoService.NeRunTelnetClient("UDM", neId, 1) + if err != nil { + c.JSON(200, resp.ErrMsg(err.Error())) + return + } + defer telnetClient.Close() + + // 检查同IMSI下msisdn是否存在 + hasMsisdns := s.udmVolteIMSService.Find(model.UDMVolteIMSUser{IMSI: body.IMSI, MSISDN: body.MSISDN, NeId: neId}) + if len(hasMsisdns) > 0 { + c.JSON(200, resp.ErrMsg("IMSI and MSISDN already exist")) + return + } + + // 发送MML + cmd := fmt.Sprintf("add imsuser:imsi=%s,msisdn=%s,volte=%s,vni=%s", body.IMSI, body.MSISDN, body.Tag, body.VNI) + data, err := telnet.ConvertToStr(telnetClient, cmd) + if err != nil { + c.JSON(200, resp.ErrMsg(err.Error())) + return + } + + // 命令ok时 + if strings.Contains(data, "ok") { + s.udmVolteIMSService.InsertByIMSI(body.IMSI, neId) + } + c.JSON(200, resp.OkData(data)) +} + +// UDMVolteIMS用户批量新增 +// +// POST /:neId/:num +// +// @Tags network_data/udm/volte-ims +// @Accept json +// @Produce json +// @Param neId path string true "NE ID" default(001) +// @Param value path number true "Number of releases, value includes start imsi" +// @Param data body object true "Request Param" +// @Success 200 {object} object "Response Results" +// @Security TokenAuth +// @Summary UDM VolteIMS User Batch Add +// @Description UDM VolteIMS User Batch Add +// @Router /neData/udm/volte-ims/{neId}/{value} [post] +func (s *UDMVolteIMSController) Adds(c *gin.Context) { + language := reqctx.AcceptLanguage(c) + neId := c.Param("neId") + num := c.Param("num") + if neId == "" || num == "" { + c.JSON(400, resp.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + return + } + + var body model.UDMVolteIMSUser + if err := c.ShouldBindBodyWithJSON(&body); err != nil { + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) + return + } + if body.IMSI == "" { + c.JSON(422, resp.CodeMsg(422002, "bind err: imsi is empty")) + return + } + + // 查询网元获取IP + neInfo := s.neInfoService.FindByNeTypeAndNeID("UDM", neId) + if neInfo.NeId != neId || neInfo.IP == "" { + c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo"))) + return + } + // 网元主机的Telnet客户端 + telnetClient, err := s.neInfoService.NeRunTelnetClient("UDM", neId, 1) + if err != nil { + c.JSON(200, resp.ErrMsg(err.Error())) + return + } + defer telnetClient.Close() + + // 发送MML + cmd := fmt.Sprintf("baa imsuser:sub_num=%s,start_imsi=%s,start_msisdn=%s,volte=%s,vni=%s", num, body.IMSI, body.MSISDN, body.Tag, body.VNI) + data, err := telnet.ConvertToStr(telnetClient, cmd) + if err != nil { + c.JSON(200, resp.ErrMsg(err.Error())) + return + } + + // 命令ok时 + if strings.Contains(data, "ok") { + s.udmVolteIMSService.LoadData(neId, body.IMSI, num) + } + c.JSON(200, resp.OkData(data)) +} + +// UDMVolteIMS用户删除 +// +// DELETE /:neId/:imsi +// +// @Tags network_data/udm/volte-ims +// @Accept json +// @Produce json +// @Param neId path string true "NE ID" default(001) +// @Param value path string true "IMSI, multiple separated by a , sign" +// @Param msisdn query string false "MSISDN" +// @Success 200 {object} object "Response Results" +// @Security TokenAuth +// @Summary UDM Authenticated User Deletion +// @Description UDM Authenticated User Deletion +// @Router /neData/udm/volte-ims/{neId}/{value} [delete] +func (s *UDMVolteIMSController) Remove(c *gin.Context) { + language := reqctx.AcceptLanguage(c) + neId := c.Param("neId") + imsi := c.Param("imsi") + msisdn := c.Query("msisdn") + if neId == "" || imsi == "" { + c.JSON(400, resp.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + return + } + imsiArr := strings.Split(imsi, ",") + + // 查询网元获取IP + neInfo := s.neInfoService.FindByNeTypeAndNeID("UDM", neId) + if neInfo.NeId != neId || neInfo.IP == "" { + c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo"))) + return + } + // 网元主机的Telnet客户端 + telnetClient, err := s.neInfoService.NeRunTelnetClient("UDM", neId, 1) + if err != nil { + c.JSON(200, resp.ErrMsg(err.Error())) + return + } + defer telnetClient.Close() + + // 精确msisdn删除 + if msisdn != "" { + // 发送MML + cmd := fmt.Sprintf("del imsuser:imsi=%s,msisdn=%s", imsiArr[0], msisdn) + data, err := telnet.ConvertToStr(telnetClient, cmd) + if err != nil { + c.JSON(200, resp.ErrMsg(err.Error())) + return + } + // 命令ok时 + if strings.Contains(data, "ok") { + s.udmVolteIMSService.Delete(imsi, neId) + } + c.JSON(200, resp.OkData(data)) + return + } else { + // 处理字符转id数组后去重 + uniqueIDs := parse.RemoveDuplicates(imsiArr) + if len(uniqueIDs) <= 0 { + c.JSON(200, resp.Err(nil)) + return + } + resultData := map[string]string{} + for _, imsi := range uniqueIDs { + // 发送MML + cmd := fmt.Sprintf("del imsuser:imsi=%s", imsi) + data, err := telnet.ConvertToStr(telnetClient, cmd) + if err != nil { + resultData[imsi] = err.Error() + continue + } + // 命令ok时 + if strings.Contains(data, "ok") { + s.udmVolteIMSService.Delete(imsi, neId) + } + resultData[imsi] = data + } + c.JSON(200, resp.OkData(resultData)) + return + } +} + +// UDMVolteIMS用户批量删除 +// +// DELETE /:neId/:imsi/:num +// +// @Tags network_data/udm/volte-ims +// @Accept json +// @Produce json +// @Param neId path string true "NE ID" default(001) +// @Param imsi path string true "IMSI" +// @Param num path number true "Number of releases, value includes start imsi" +// @Success 200 {object} object "Response Results" +// @Security TokenAuth +// @Summary UDM VolteIMS User Batch Deletion +// @Description UDM VolteIMS User Batch Deletion +// @Router /neData/udm/volte-ims/{neId}/{imsi}/{num} [delete] +func (s *UDMVolteIMSController) Removes(c *gin.Context) { + language := reqctx.AcceptLanguage(c) + neId := c.Param("neId") + imsi := c.Param("imsi") + num := c.Param("num") + if neId == "" || imsi == "" || num == "" { + c.JSON(422, resp.CodeMsg(422002, "bind err: neId/imsi/num is empty")) + return + } + + // 查询网元获取IP + neInfo := s.neInfoService.FindByNeTypeAndNeID("UDM", neId) + if neInfo.NeId != neId || neInfo.IP == "" { + c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo"))) + return + } + // 网元主机的Telnet客户端 + telnetClient, err := s.neInfoService.NeRunTelnetClient("UDM", neId, 1) + if err != nil { + c.JSON(200, resp.ErrMsg(err.Error())) + return + } + defer telnetClient.Close() + + // 发送MML + cmd := fmt.Sprintf("bde imsuser:start_imsi=%s,sub_num=%s", imsi, num) + data, err := telnet.ConvertToStr(telnetClient, cmd) + if err != nil { + c.JSON(200, resp.ErrMsg(err.Error())) + return + } + + // 命令ok时 + if strings.Contains(data, "ok") { + s.udmVolteIMSService.LoadData(neId, imsi, num) + } + c.JSON(200, resp.OkData(data)) +} + +// UDMVolteIMS用户导出 +// +// GET /export +// +// @Tags network_data/udm/volte-ims +// @Accept json +// @Produce json +// @Param neId query string true "NE ID" default(001) +// @Param type query string true "File Type" Enums(csv,txt) default(txt) +// @Param imsi query string false "IMSI" +// @Param pageNum query number true "pageNum" default(1) +// @Param pageSize query number true "pageSize" default(10) +// @Success 200 {object} object "Response Results" +// @Security TokenAuth +// @Summary UDM Authenticated User Export +// @Description UDM Authenticated User Export +// @Router /neData/udm/volte-ims/export [get] +func (s *UDMVolteIMSController) Export(c *gin.Context) { + language := reqctx.AcceptLanguage(c) + // 查询结果,根据查询条件结果,单页最大值限制 + neId := c.Query("neId") + fileType := c.Query("type") + if neId == "" { + c.JSON(422, resp.CodeMsg(422002, "bind err: neId is empty")) + return + } + if !(fileType == "csv" || fileType == "txt") { + c.JSON(200, resp.ErrMsg(i18n.TKey(language, "ne.udm.errImportUserSubFileFormat"))) + return + } + + query := reqctx.QueryMap(c) + total, rows := s.udmVolteIMSService.FindByPage(query) + if total == 0 { + // 导出数据记录为空 + c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.exportEmpty"))) + return + } + if len(rows) <= 0 { + // 导出数据记录为空 + c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.exportEmpty"))) + return + } + + // 文件名 + fileName := fmt.Sprintf("udm_volte_user_export_%s_%d.%s", neId, time.Now().UnixMilli(), fileType) + filePath := filepath.Join(file.ParseUploadFileDir(constants.UPLOAD_EXPORT), fileName) + + if fileType == "csv" { + // 转换数据 + data := [][]string{} + data = append(data, []string{"IMSI", "MSISDN", "TAG", "VNI"}) + for _, v := range rows { + data = append(data, []string{v.IMSI, v.MSISDN, v.Tag, v.VNI}) + } + // 输出到文件 + if err := file.WriterFileCSV(data, filePath); err != nil { + c.JSON(200, resp.ErrMsg(err.Error())) + return + } + } + + if fileType == "txt" { + // 转换数据 + data := [][]string{} + for _, v := range rows { + data = append(data, []string{v.IMSI, v.MSISDN, v.Tag, v.VNI}) + } + // 输出到文件 + if err := file.WriterFileTXT(data, ",", filePath); err != nil { + c.JSON(200, resp.ErrMsg(err.Error())) + return + } + } + + c.FileAttachment(filePath, fileName) +} + +// UDMVolteIMS用户导入 +// +// POST /import +// +// @Tags network_data/udm/volte-ims +// @Accept json +// @Produce json +// @Param data body object true "Request Param" +// @Success 200 {object} object "Response Results" +// @Security TokenAuth +// @Summary UDM Authenticated User Import +// @Description UDM Authenticated User Import +// @Router /neData/udm/volte-ims/import [post] +func (s *UDMVolteIMSController) Import(c *gin.Context) { + language := reqctx.AcceptLanguage(c) + var body struct { + NeId string `json:"neId" binding:"required"` // 网元ID + UploadPath string `json:"uploadPath" binding:"required"` // 上传文件路径 + } + if err := c.ShouldBindBodyWithJSON(&body); err != nil { + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) + return + } + + // 判断文件名 + if !(strings.HasSuffix(body.UploadPath, ".csv") || strings.HasSuffix(body.UploadPath, ".txt")) { + c.JSON(200, resp.ErrMsg(i18n.TKey(language, "ne.udm.errImportUserAuthFileFormat"))) + return + } + + // 查询网元获取IP + neInfo := s.neInfoService.FindByNeTypeAndNeID("UDM", body.NeId) + if neInfo.NeId != body.NeId || neInfo.IP == "" { + c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo"))) + return + } + + // 网元主机的SSH客户端 + sshClient, err := s.neInfoService.NeRunSSHClient(neInfo.NeType, neInfo.NeId) + if err != nil { + c.JSON(200, resp.ErrMsg(err.Error())) + return + } + defer sshClient.Close() + // 网元主机的SSH客户端进行文件传输 + sftpClient, err := sshClient.NewClientSFTP() + if err != nil { + c.JSON(200, resp.ErrMsg(err.Error())) + return + } + defer sftpClient.Close() + + // 本地文件 + localFilePath := file.ParseUploadFileAbsPath(body.UploadPath) + neFilePath := fmt.Sprintf("/tmp/%s", filepath.Base(localFilePath)) + // 复制到远程 + if err = sftpClient.CopyFileLocalToRemote(localFilePath, neFilePath); err != nil { + c.JSON(200, resp.ErrMsg("error uploading file")) + return + } + + // 网元主机的Telnet客户端 + telnetClient, err := s.neInfoService.NeRunTelnetClient(neInfo.NeType, neInfo.NeId, 1) + if err != nil { + c.JSON(200, resp.ErrMsg(err.Error())) + return + } + defer telnetClient.Close() + + // 结果信息 + var resultMsg string + var resultErr error + + // 发送MML + cmd := fmt.Sprintf("import imsuser:path=%s", neFilePath) + resultMsg, resultErr = telnet.ConvertToStr(telnetClient, cmd) + if resultErr != nil { + c.JSON(200, resp.ErrMsg(resultErr.Error())) + return + } + + // 命令ok时 + if strings.Contains(resultMsg, "ok") { + if strings.HasSuffix(body.UploadPath, ".csv") { + data := file.ReadFileCSV(localFilePath) + go s.udmVolteIMSService.InsertData(neInfo.NeId, "csv", data) + } + if strings.HasSuffix(body.UploadPath, ".txt") { + data := file.ReadFileTXT(",", localFilePath) + go s.udmVolteIMSService.InsertData(neInfo.NeId, "txt", data) + } + } + c.JSON(200, resp.OkMsg(resultMsg)) +} diff --git a/src/modules/network_data/controller/upf.go b/src/modules/network_data/controller/upf.go index 72e90efa..2b60d0d4 100644 --- a/src/modules/network_data/controller/upf.go +++ b/src/modules/network_data/controller/upf.go @@ -1,6 +1,8 @@ package controller import ( + "fmt" + "be.ems/src/framework/i18n" "be.ems/src/framework/reqctx" "be.ems/src/framework/resp" @@ -27,7 +29,7 @@ type UPFController struct { // 总流量数 N3上行 N6下行 // 单位 比特(bit) // -// GET /totalFlow +// GET /flow-total // // @Tags network_data/upf // @Accept json @@ -38,15 +40,16 @@ type UPFController struct { // @Security TokenAuth // @Summary Total number of flows N3 upstream N6 downstream // @Description Total number of flows N3 upstream N6 downstream -// @Router /neData/upf/totalFlow [get] -func (s UPFController) TotalFlow(c *gin.Context) { +// @Router /neData/upf/flow-total [get] +func (s UPFController) FlowTotal(c *gin.Context) { language := reqctx.AcceptLanguage(c) var querys struct { NeID string `form:"neId" binding:"required"` Day int `form:"day"` } if err := c.ShouldBindQuery(&querys); querys.Day < 0 || err != nil { - c.JSON(400, resp.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } diff --git a/src/modules/network_data/model/backup.go b/src/modules/network_data/model/backup.go new file mode 100644 index 00000000..2b51e687 --- /dev/null +++ b/src/modules/network_data/model/backup.go @@ -0,0 +1,11 @@ +package model + +// BackupDataFTP 备份数据FTP服务参数结构体 +type BackupDataFTP struct { + Password string `json:"password"` // FTP密码 + Username string `json:"username" binding:"required"` // FTP用户名 + ToIp string `json:"toIp" binding:"required"` // FTP服务器IP + ToPort int64 `json:"toPort" binding:"required"` // FTP服务器端口 + Dir string `json:"dir" binding:"required"` // FTP服务器目录 + Enable bool `json:"enable"` // 是否启用 +} diff --git a/src/modules/network_data/model/udm_voip.go b/src/modules/network_data/model/udm_voip.go new file mode 100644 index 00000000..2fbd1ae9 --- /dev/null +++ b/src/modules/network_data/model/udm_voip.go @@ -0,0 +1,15 @@ +package model + +// UDMVOIPUser UDMVOIP用户 udm_voip +type UDMVOIPUser struct { + ID string `json:"id" gorm:"column:id;primaryKey;autoIncrement"` // 主键 + NeId string `json:"neId" gorm:"column:ne_id"` // UDM网元标识 + + UserName string `json:"username" gorm:"column:username"` // 用户名 + Password string `json:"password" gorm:"column:password"` // 密码 +} + +// TableName 表名称 +func (*UDMVOIPUser) TableName() string { + return "udm_voip" +} diff --git a/src/modules/network_data/model/udm_volte_ims.go b/src/modules/network_data/model/udm_volte_ims.go new file mode 100644 index 00000000..0dd4277b --- /dev/null +++ b/src/modules/network_data/model/udm_volte_ims.go @@ -0,0 +1,17 @@ +package model + +// UDMVolteIMSUser UDMVolteIMS用户 udm_volte_ims +type UDMVolteIMSUser struct { + ID string `json:"id" gorm:"column:id;primaryKey;autoIncrement"` // 主键 + IMSI string `json:"imsi" gorm:"column:imsi"` // SIM卡/USIM卡ID + MSISDN string `json:"msisdn" gorm:"column:msisdn"` // 用户电话号码 + NeId string `json:"neId" gorm:"column:ne_id"` // UDM网元标识 + + Tag string `json:"tag" gorm:"column:tag"` // 0=VoIP, 1=VoLTE + VNI string `json:"vni" gorm:"column:vni"` // VNI +} + +// TableName 表名称 +func (*UDMVolteIMSUser) TableName() string { + return "udm_volte_ims" +} diff --git a/src/modules/network_data/network_data.go b/src/modules/network_data/network_data.go index 0f19b5cb..3c809701 100644 --- a/src/modules/network_data/network_data.go +++ b/src/modules/network_data/network_data.go @@ -24,11 +24,11 @@ func Setup(router *gin.Engine) { kpiGroup := neDataGroup.Group("/kpi") { kpiGroup.GET("/title", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewKPI.KPITitle, ) kpiGroup.GET("/data", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewKPI.KPIData, ) } @@ -37,33 +37,40 @@ func Setup(router *gin.Engine) { alarmGroup := neDataGroup.Group("/alarm") { alarmGroup.GET("/list", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewAlarm.List, ) alarmGroup.DELETE("/:id", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewAlarm.Remove, ) alarmGroup.PUT("/clear", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.alarm", collectlogs.BUSINESS_TYPE_UPDATE)), controller.NewAlarm.Clear, ) alarmGroup.PUT("/ack", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.alarm", collectlogs.BUSINESS_TYPE_UPDATE)), controller.NewAlarm.Ack, ) + alarmGroup.GET("/export", + middleware.AuthorizeUser(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.alarm", collectlogs.BUSINESS_TYPE_EXPORT)), + controller.NewAlarm.Export, + ) } // 告警日志数据信息 alarmLogGroup := neDataGroup.Group("/alarm/log") { alarmLogGroup.GET("/list", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewAlarmLog.List, ) alarmLogGroup.GET("/event", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewAlarmLog.Event, ) } @@ -72,7 +79,7 @@ func Setup(router *gin.Engine) { alarmForwardGroup := neDataGroup.Group("/alarm/forward") { alarmForwardGroup.GET("/log/list", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewAlarmForward.List, ) } @@ -81,11 +88,11 @@ func Setup(router *gin.Engine) { nbStateGroup := neDataGroup.Group("/nb-state") { nbStateGroup.GET("/list", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewNBState.List, ) nbStateGroup.POST("/export", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewNBState.Export, ) } @@ -94,25 +101,25 @@ func Setup(router *gin.Engine) { imsGroup := neDataGroup.Group("/ims") { imsGroup.GET("/cdr/list", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewIMS.CDRList, ) imsGroup.DELETE("/cdr/:id", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.imsCDR", collectlogs.BUSINESS_TYPE_DELETE)), controller.NewIMS.CDRRemove, ) imsGroup.POST("/cdr/export", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.imsCDR", collectlogs.BUSINESS_TYPE_EXPORT)), controller.NewIMS.CDRExport, ) imsGroup.GET("/session/num", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewIMS.UeSessionNum, ) imsGroup.GET("/session/list", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewIMS.UeSessionList, ) } @@ -121,16 +128,16 @@ func Setup(router *gin.Engine) { smscGroup := neDataGroup.Group("/smsc") { smscGroup.GET("/cdr/list", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewSMSC.CDRList, ) smscGroup.DELETE("/cdr/:id", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.smscCDR", collectlogs.BUSINESS_TYPE_DELETE)), controller.NewSMSC.CDRRemove, ) smscGroup.POST("/cdr/export", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.smscCDR", collectlogs.BUSINESS_TYPE_EXPORT)), controller.NewSMSC.CDRExport, ) @@ -140,25 +147,25 @@ func Setup(router *gin.Engine) { smfGroup := neDataGroup.Group("/smf") { smfGroup.GET("/cdr/list", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewSMF.CDRList, ) smfGroup.DELETE("/cdr/:id", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.smfCDR", collectlogs.BUSINESS_TYPE_DELETE)), controller.NewSMF.CDRRemove, ) smfGroup.POST("/cdr/export", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.smfCDR", collectlogs.BUSINESS_TYPE_EXPORT)), controller.NewSMF.CDRExport, ) smfGroup.GET("/sub/num", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewSMF.SubUserNum, ) smfGroup.GET("/sub/list", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewSMF.SubUserList, ) } @@ -167,25 +174,25 @@ func Setup(router *gin.Engine) { amfGroup := neDataGroup.Group("/amf") { amfGroup.GET("/ue/list", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewAMF.UEList, ) amfGroup.DELETE("/ue/:id", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.amfUE", collectlogs.BUSINESS_TYPE_DELETE)), controller.NewAMF.UERemove, ) amfGroup.POST("/ue/export", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.amfUE", collectlogs.BUSINESS_TYPE_EXPORT)), controller.NewAMF.UEExport, ) amfGroup.GET("/nb/list", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewAMF.NbInfoList, ) amfGroup.GET("/nb/list-cfg", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewAMF.NbStateList, ) } @@ -193,9 +200,28 @@ func Setup(router *gin.Engine) { // 网元UPF upfGroup := neDataGroup.Group("/upf") { - upfGroup.GET("/totalFlow", - middleware.PreAuthorize(nil), - controller.NewUPF.TotalFlow, + upfGroup.GET("/flow-total", + middleware.AuthorizeUser(nil), + controller.NewUPF.FlowTotal, + ) + } + + // 备份数据 + backupGroup := neDataGroup.Group("/backup") + { + backupGroup.GET("/ftp", + middleware.AuthorizeUser(nil), + controller.NewBackup.FTPInfo, + ) + backupGroup.PUT("/ftp", + middleware.AuthorizeUser(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.backup", collectlogs.BUSINESS_TYPE_OTHER)), + controller.NewBackup.FTPUpdate, + ) + backupGroup.POST("/ftp", + middleware.AuthorizeUser(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.backup", collectlogs.BUSINESS_TYPE_OTHER)), + controller.NewBackup.FTPPush, ) } @@ -204,50 +230,50 @@ func Setup(router *gin.Engine) { { udmAuthGroup.PUT("/resetData/:neId", repeat.RepeatSubmit(5), - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmAuth", collectlogs.BUSINESS_TYPE_CLEAN)), controller.NewUDMAuth.ResetData, ) udmAuthGroup.GET("/list", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewUDMAuth.List, ) udmAuthGroup.GET("/:neId/:imsi", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewUDMAuth.Info, ) udmAuthGroup.POST("/:neId", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmAuth", collectlogs.BUSINESS_TYPE_INSERT)), controller.NewUDMAuth.Add, ) udmAuthGroup.POST("/:neId/:num", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmAuth", collectlogs.BUSINESS_TYPE_INSERT)), controller.NewUDMAuth.Adds, ) udmAuthGroup.PUT("/:neId", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmAuth", collectlogs.BUSINESS_TYPE_UPDATE)), controller.NewUDMAuth.Edit, ) udmAuthGroup.DELETE("/:neId/:imsi", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmAuth", collectlogs.BUSINESS_TYPE_DELETE)), controller.NewUDMAuth.Remove, ) udmAuthGroup.DELETE("/:neId/:imsi/:num", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmAuth", collectlogs.BUSINESS_TYPE_DELETE)), controller.NewUDMAuth.Removes, ) udmAuthGroup.GET("/export", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmAuth", collectlogs.BUSINESS_TYPE_EXPORT)), controller.NewUDMAuth.Export, ) udmAuthGroup.POST("/import", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmAuth", collectlogs.BUSINESS_TYPE_IMPORT)), controller.NewUDMAuth.Import, ) @@ -258,78 +284,176 @@ func Setup(router *gin.Engine) { { udmSubGroup.PUT("/resetData/:neId", repeat.RepeatSubmit(5), - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmSub", collectlogs.BUSINESS_TYPE_CLEAN)), controller.NewUDMSub.ResetData, ) udmSubGroup.GET("/list", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewUDMSub.List, ) udmSubGroup.GET("/:neId/:imsi", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewUDMSub.Info, ) udmSubGroup.POST("/:neId", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmSub", collectlogs.BUSINESS_TYPE_INSERT)), controller.NewUDMSub.Add, ) udmSubGroup.POST("/:neId/:num", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmSub", collectlogs.BUSINESS_TYPE_INSERT)), controller.NewUDMSub.Adds, ) udmSubGroup.PUT("/:neId", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmSub", collectlogs.BUSINESS_TYPE_UPDATE)), controller.NewUDMSub.Edit, ) udmSubGroup.DELETE("/:neId/:imsi", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmSub", collectlogs.BUSINESS_TYPE_DELETE)), controller.NewUDMSub.Remove, ) udmSubGroup.DELETE("/:neId/:imsi/:num", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmSub", collectlogs.BUSINESS_TYPE_DELETE)), controller.NewUDMSub.Removes, ) udmSubGroup.GET("/export", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmSub", collectlogs.BUSINESS_TYPE_EXPORT)), controller.NewUDMSub.Export, ) udmSubGroup.POST("/import", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmSub", collectlogs.BUSINESS_TYPE_IMPORT)), controller.NewUDMSub.Import, ) } + // 网元UDM VOIP用户信息 + udmVOIPGroup := neDataGroup.Group("/udm/voip") + { + udmVOIPGroup.PUT("/resetData/:neId", + repeat.RepeatSubmit(5), + middleware.AuthorizeUser(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmVOIP", collectlogs.BUSINESS_TYPE_CLEAN)), + controller.NewUDMVOIP.ResetData, + ) + udmVOIPGroup.GET("/list", + middleware.AuthorizeUser(nil), + controller.NewUDMVOIP.List, + ) + udmVOIPGroup.GET("/:neId/:username", + middleware.AuthorizeUser(nil), + controller.NewUDMVOIP.Info, + ) + udmVOIPGroup.POST("/:neId", + middleware.AuthorizeUser(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmVOIP", collectlogs.BUSINESS_TYPE_INSERT)), + controller.NewUDMVOIP.Add, + ) + udmVOIPGroup.POST("/:neId/:num", + middleware.AuthorizeUser(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmVOIP", collectlogs.BUSINESS_TYPE_INSERT)), + controller.NewUDMVOIP.Adds, + ) + udmVOIPGroup.DELETE("/:neId/:username", + middleware.AuthorizeUser(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmVOIP", collectlogs.BUSINESS_TYPE_DELETE)), + controller.NewUDMVOIP.Remove, + ) + udmVOIPGroup.DELETE("/:neId/:username/:num", + middleware.AuthorizeUser(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmVOIP", collectlogs.BUSINESS_TYPE_DELETE)), + controller.NewUDMVOIP.Removes, + ) + udmVOIPGroup.GET("/export", + middleware.AuthorizeUser(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmVOIP", collectlogs.BUSINESS_TYPE_EXPORT)), + controller.NewUDMVOIP.Export, + ) + udmVOIPGroup.POST("/import", + middleware.AuthorizeUser(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmVOIP", collectlogs.BUSINESS_TYPE_IMPORT)), + controller.NewUDMVOIP.Import, + ) + } + + // 网元UDM VolteIMS用户信息 + udmVolteIMSGroup := neDataGroup.Group("/udm/volte-ims") + { + udmVolteIMSGroup.PUT("/resetData/:neId", + repeat.RepeatSubmit(5), + middleware.AuthorizeUser(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmVolteIMS", collectlogs.BUSINESS_TYPE_CLEAN)), + controller.NewUDMVolteIMS.ResetData, + ) + udmVolteIMSGroup.GET("/list", + middleware.AuthorizeUser(nil), + controller.NewUDMVolteIMS.List, + ) + udmVolteIMSGroup.GET("/:neId/:imsi", + middleware.AuthorizeUser(nil), + controller.NewUDMVolteIMS.Info, + ) + udmVolteIMSGroup.POST("/:neId", + middleware.AuthorizeUser(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmVolteIMS", collectlogs.BUSINESS_TYPE_INSERT)), + controller.NewUDMVolteIMS.Add, + ) + udmVolteIMSGroup.POST("/:neId/:num", + middleware.AuthorizeUser(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmVolteIMS", collectlogs.BUSINESS_TYPE_INSERT)), + controller.NewUDMVolteIMS.Adds, + ) + udmVolteIMSGroup.DELETE("/:neId/:imsi", + middleware.AuthorizeUser(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmVolteIMS", collectlogs.BUSINESS_TYPE_DELETE)), + controller.NewUDMVolteIMS.Remove, + ) + udmVolteIMSGroup.DELETE("/:neId/:imsi/:num", + middleware.AuthorizeUser(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmVolteIMS", collectlogs.BUSINESS_TYPE_DELETE)), + controller.NewUDMVolteIMS.Removes, + ) + udmVolteIMSGroup.GET("/export", + middleware.AuthorizeUser(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmVolteIMS", collectlogs.BUSINESS_TYPE_EXPORT)), + controller.NewUDMVolteIMS.Export, + ) + udmVolteIMSGroup.POST("/import", + middleware.AuthorizeUser(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmVolteIMS", collectlogs.BUSINESS_TYPE_IMPORT)), + controller.NewUDMVolteIMS.Import, + ) + } + // 网元MME mmeGroup := neDataGroup.Group("/mme") { mmeGroup.GET("/ue/list", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewMME.UEList, ) mmeGroup.DELETE("/ue/:id", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.mmeUE", collectlogs.BUSINESS_TYPE_DELETE)), controller.NewMME.UERemove, ) mmeGroup.POST("/ue/export", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.mmeUE", collectlogs.BUSINESS_TYPE_EXPORT)), controller.NewMME.UEExport, ) mmeGroup.GET("/nb/list", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewMME.NbInfoList, ) mmeGroup.GET("/nb/list-cfg", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewMME.NbStateList, ) } @@ -338,16 +462,16 @@ func Setup(router *gin.Engine) { sgwcGroup := neDataGroup.Group("/sgwc") { sgwcGroup.GET("/cdr/list", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewSGWC.CDRList, ) sgwcGroup.DELETE("/cdr/:id", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.sgwcCDR", collectlogs.BUSINESS_TYPE_DELETE)), controller.NewSGWC.CDRRemove, ) sgwcGroup.POST("/cdr/export", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.sgwcCDR", collectlogs.BUSINESS_TYPE_EXPORT)), controller.NewSGWC.CDRExport, ) diff --git a/src/modules/network_data/repository/udm_auth.go b/src/modules/network_data/repository/udm_auth.go index c8f4d29d..4a9565a5 100644 --- a/src/modules/network_data/repository/udm_auth.go +++ b/src/modules/network_data/repository/udm_auth.go @@ -18,7 +18,7 @@ type UDMAuthUser struct{} // ClearAndInsert 清空ne_id后新增实体 func (r *UDMAuthUser) ClearAndInsert(neId string, uArr []model.UDMAuthUser) int64 { // 不指定neID时,用 TRUNCATE 清空表快 - // _, err := datasource.ExecDB("", "TRUNCATE TABLE u_auth_user", nil) + // _, err := datasource.ExecDB("", "TRUNCATE TABLE udm_auth", nil) result := db.DB("").Where("ne_id = ?", neId).Unscoped().Delete(&model.UDMAuthUser{}) if result.Error != nil { logger.Errorf("Delete err => %v", result.Error) @@ -39,6 +39,7 @@ func (r *UDMAuthUser) SelectPage(query map[string]string) (int64, []model.UDMAut if v, ok := query["imsis"]; ok && v != "" { arr := strings.Split(v, ",") tx = tx.Where("imsi in ?", arr) + // 勾选时,pageSize为勾选的数量 query["pageSize"] = fmt.Sprint(len(arr)) } @@ -126,7 +127,7 @@ func (r *UDMAuthUser) Delete(imsi, neId string) int64 { } // DeletePrefixByIMSI 删除前缀匹配的实体 -func (r *UDMAuthUser) DeletePrefixByIMSI(neId, imsi string) int64 { +func (r *UDMAuthUser) DeletePrefixByIMSI(imsi, neId string) int64 { tx := db.DB("").Where("imsi like ? and ne_id = ?", fmt.Sprintf("%s%%", imsi), neId).Delete(&model.UDMAuthUser{}) if err := tx.Error; err != nil { logger.Errorf("DeletePrefixByIMSI err => %v", err) diff --git a/src/modules/network_data/repository/udm_sub.go b/src/modules/network_data/repository/udm_sub.go index bd1b97a0..5e7d2a14 100644 --- a/src/modules/network_data/repository/udm_sub.go +++ b/src/modules/network_data/repository/udm_sub.go @@ -18,7 +18,7 @@ type UDMSubUser struct{} // ClearAndInsert 清空ne_id后新增实体 func (r *UDMSubUser) ClearAndInsert(neId string, u []model.UDMSubUser) int64 { // 不指定neID时,用 TRUNCATE 清空表快 - // _, err := datasource.ExecDB("", "TRUNCATE TABLE u_sub_user", nil) + // _, err := datasource.ExecDB("", "TRUNCATE TABLE udm_sub", nil) result := db.DB("").Where("ne_id = ?", neId).Unscoped().Delete(&model.UDMSubUser{}) if result.Error != nil { logger.Errorf("Delete err => %v", result.Error) @@ -42,6 +42,7 @@ func (r *UDMSubUser) SelectPage(query map[string]string) (int64, []model.UDMSubU if v, ok := query["imsis"]; ok && v != "" { arr := strings.Split(v, ",") tx = tx.Where("imsi in ?", arr) + // 勾选时,pageSize为勾选的数量 query["pageSize"] = fmt.Sprint(len(arr)) } diff --git a/src/modules/network_data/repository/udm_voip.go b/src/modules/network_data/repository/udm_voip.go new file mode 100644 index 00000000..e0fe4a93 --- /dev/null +++ b/src/modules/network_data/repository/udm_voip.go @@ -0,0 +1,138 @@ +package repository + +import ( + "fmt" + "strings" + + "be.ems/src/framework/database/db" + "be.ems/src/framework/logger" + "be.ems/src/modules/network_data/model" +) + +// 实例化数据层 UDMVOIPUser 结构体 +var NewUDMVOIPUser = &UDMVOIPUser{} + +// UDMVOIPUser UDMVOIP用户信息表 数据层处理 +type UDMVOIPUser struct{} + +// ClearAndInsert 清空ne_id后新增实体 +func (r UDMVOIPUser) ClearAndInsert(neId string, uArr []model.UDMVOIPUser) int64 { + // 不指定neID时,用 TRUNCATE 清空表快 + // _, err := datasource.ExecDB("", "TRUNCATE TABLE udm_voip", nil) + result := db.DB("").Where("ne_id = ?", neId).Unscoped().Delete(&model.UDMVOIPUser{}) + if result.Error != nil { + logger.Errorf("Delete err => %v", result.Error) + } + return r.Inserts(uArr) +} + +// SelectPage 根据条件分页查询 +func (r UDMVOIPUser) SelectPage(query map[string]string) (int64, []model.UDMVOIPUser) { + tx := db.DB("").Model(&model.UDMVOIPUser{}) + // 查询条件拼接 + if v, ok := query["username"]; ok && v != "" { + tx = tx.Where("username like ?", fmt.Sprintf("%%%s%%", v)) + } + if v, ok := query["neId"]; ok && v != "" { + tx = tx.Where("ne_id = ?", v) + } + if v, ok := query["usernames"]; ok && v != "" { + arr := strings.Split(v, ",") + tx = tx.Where("username in ?", arr) + // 勾选时,pageSize为勾选的数量 + query["pageSize"] = fmt.Sprint(len(arr)) + } + + var total int64 = 0 + rows := []model.UDMVOIPUser{} + + // 查询数量 长度为0直接返回 + if err := tx.Count(&total).Error; err != nil || total <= 0 { + return total, rows + } + + // 分页 + pageNum, pageSize := db.PageNumSize(query["pageNum"], query["pageSize"]) + tx = tx.Offset(int(pageNum * pageSize)).Limit(int(pageSize)) + + // 排序 + if v, ok := query["sortField"]; ok && v != "" { + sortSql := v + if o, ok := query["sortOrder"]; ok && o != "" { + if o == "desc" { + sortSql += " desc " + } else { + sortSql += " asc " + } + } + tx = tx.Order(sortSql) + } else { + tx = tx.Order("username asc") + } + + // 查询数据 + if err := tx.Find(&rows).Error; err != nil { + logger.Errorf("query err => %v", err) + } + + return total, rows +} + +// SelectList 根据实体查询 +func (r UDMVOIPUser) SelectList(u model.UDMVOIPUser) []model.UDMVOIPUser { + tx := db.DB("").Model(&model.UDMVOIPUser{}) + // 查询条件拼接 + if u.UserName != "" { + tx = tx.Where("username = ?", u.UserName) + } + if u.NeId != "" { + tx = tx.Where("ne_id = ?", u.NeId) + } + + // 查询数据 + arr := []model.UDMVOIPUser{} + if err := tx.Order("username asc").Find(&arr).Error; err != nil { + logger.Errorf("query err => %v", err) + } + return arr +} + +// SelectByUserNameAndNeID 通过username和ne_id查询 +func (r UDMVOIPUser) SelectByUserNameAndNeID(username, neId string) model.UDMVOIPUser { + tx := db.DB("").Model(&model.UDMVOIPUser{}) + item := model.UDMVOIPUser{} + // 查询条件拼接 + tx = tx.Where("username = ? and ne_id = ?", username, neId) + // 查询数据 + if err := tx.Order("username asc").Limit(1).Find(&item).Error; err != nil { + logger.Errorf("query err => %v", err) + } + return item +} + +// Insert 批量添加 +func (r UDMVOIPUser) Inserts(uArr []model.UDMVOIPUser) int64 { + tx := db.DB("").CreateInBatches(uArr, 500) + if err := tx.Error; err != nil { + logger.Errorf("CreateInBatches err => %v", err) + } + return tx.RowsAffected +} + +// Delete 删除实体 +func (r UDMVOIPUser) Delete(username, neId string) int64 { + tx := db.DB("").Where("username = ? and ne_id = ?", username, neId).Delete(&model.UDMVOIPUser{}) + if err := tx.Error; err != nil { + logger.Errorf("Delete err => %v", err) + } + return tx.RowsAffected +} + +// DeletePrefixByUserName 删除前缀匹配的实体 +func (r UDMVOIPUser) DeletePrefixByUserName(username, neId string) int64 { + tx := db.DB("").Where("username like ? and ne_id = ?", fmt.Sprintf("%s%%", username), neId).Delete(&model.UDMVOIPUser{}) + if err := tx.Error; err != nil { + logger.Errorf("DeletePrefixByUserName err => %v", err) + } + return tx.RowsAffected +} diff --git a/src/modules/network_data/repository/udm_volte_ims.go b/src/modules/network_data/repository/udm_volte_ims.go new file mode 100644 index 00000000..b4fc935d --- /dev/null +++ b/src/modules/network_data/repository/udm_volte_ims.go @@ -0,0 +1,150 @@ +package repository + +import ( + "fmt" + "strings" + + "be.ems/src/framework/database/db" + "be.ems/src/framework/logger" + "be.ems/src/modules/network_data/model" +) + +// 实例化数据层 UDMVolteIMSUser 结构体 +var NewUDMVolteIMSUser = &UDMVolteIMSUser{} + +// UDMVolteIMSUser UDMVOIP用户信息表 数据层处理 +type UDMVolteIMSUser struct{} + +// ClearAndInsert 清空ne_id后新增实体 +func (r UDMVolteIMSUser) ClearAndInsert(neId string, uArr []model.UDMVolteIMSUser) int64 { + // 不指定neID时,用 TRUNCATE 清空表快 + // _, err := datasource.ExecDB("", "TRUNCATE TABLE udm_volte_ims", nil) + result := db.DB("").Where("ne_id = ?", neId).Unscoped().Delete(&model.UDMVolteIMSUser{}) + if result.Error != nil { + logger.Errorf("Delete err => %v", result.Error) + } + return r.Inserts(uArr) +} + +// SelectPage 根据条件分页查询 +func (r UDMVolteIMSUser) SelectPage(query map[string]string) (int64, []model.UDMVolteIMSUser) { + tx := db.DB("").Model(&model.UDMVolteIMSUser{}) + // 查询条件拼接 + if v, ok := query["imsi"]; ok && v != "" { + tx = tx.Where("imsi like ?", fmt.Sprintf("%%%s%%", v)) + } + if v, ok := query["msisdn"]; ok && v != "" { + tx = tx.Where("msisdn like ?", fmt.Sprintf("%%%s%%", v)) + } + if v, ok := query["neId"]; ok && v != "" { + tx = tx.Where("ne_id = ?", v) + } + if v, ok := query["tag"]; ok && v != "" { + tx = tx.Where("tag = ?", v) + } + if v, ok := query["vni"]; ok && v != "" { + tx = tx.Where("vni like ?", fmt.Sprintf("%%%s%%", v)) + } + if v, ok := query["imsis"]; ok && v != "" { + arr := strings.Split(v, ",") + tx = tx.Where("imsi in ?", arr) + // 勾选时,pageSize为勾选的数量 + query["pageSize"] = fmt.Sprint(len(arr)) + } + + var total int64 = 0 + rows := []model.UDMVolteIMSUser{} + + // 查询数量 长度为0直接返回 + if err := tx.Count(&total).Error; err != nil || total <= 0 { + return total, rows + } + + // 分页 + pageNum, pageSize := db.PageNumSize(query["pageNum"], query["pageSize"]) + tx = tx.Offset(int(pageNum * pageSize)).Limit(int(pageSize)) + + // 排序 + if v, ok := query["sortField"]; ok && v != "" { + sortSql := v + if o, ok := query["sortOrder"]; ok && o != "" { + if o == "desc" { + sortSql += " desc " + } else { + sortSql += " asc " + } + } + tx = tx.Order(sortSql) + } else { + tx = tx.Order("imsi asc") + } + + // 查询数据 + if err := tx.Find(&rows).Error; err != nil { + logger.Errorf("query err => %v", err) + } + + return total, rows +} + +// SelectList 根据实体查询 +func (r UDMVolteIMSUser) SelectList(u model.UDMVolteIMSUser) []model.UDMVolteIMSUser { + tx := db.DB("").Model(&model.UDMVolteIMSUser{}) + // 查询条件拼接 + if u.IMSI != "" { + tx = tx.Where("imsi = ?", u.IMSI) + } + if u.NeId != "" { + tx = tx.Where("ne_id = ?", u.NeId) + } + if u.Tag != "" { + tx = tx.Where("tag = ?", u.Tag) + } + + // 查询数据 + arr := []model.UDMVolteIMSUser{} + if err := tx.Order("imsi asc").Find(&arr).Error; err != nil { + logger.Errorf("query err => %v", err) + } + return arr +} + +// SelectByIMSIAndMSISDNAndNeID 通过imsi,msisdn,ne_id查询 +func (r UDMVolteIMSUser) SelectByIMSIAndMSISDNAndNeID(imsi, msisdn, neId string) model.UDMVolteIMSUser { + tx := db.DB("").Model(&model.UDMVolteIMSUser{}) + item := model.UDMVolteIMSUser{} + // 查询条件拼接 + tx = tx.Where("imsi = ? and msisdn = ? and ne_id = ?", imsi, msisdn, neId) + // 查询数据 + if err := tx.Order("imsi asc").Limit(1).Find(&item).Error; err != nil { + logger.Errorf("query err => %v", err) + } + return item +} + +// Insert 批量添加 +func (r UDMVolteIMSUser) Inserts(uArr []model.UDMVolteIMSUser) int64 { + tx := db.DB("").CreateInBatches(uArr, 500) + if err := tx.Error; err != nil { + logger.Errorf("CreateInBatches err => %v", err) + } + return tx.RowsAffected +} + +// Delete 删除实体 +func (r UDMVolteIMSUser) Delete(imsi, neId string) int64 { + tx := db.DB("").Where("imsi = ? and ne_id = ?", imsi, neId).Delete(&model.UDMVolteIMSUser{}) + if err := tx.Error; err != nil { + logger.Errorf("Delete err => %v", err) + } + return tx.RowsAffected +} + +// DeletePrefixByIMSI 删除前缀匹配的实体 +func (r UDMVolteIMSUser) DeletePrefixByIMSI(imsi, neId string) int64 { + tx := db.DB("").Where("imsi like ? and ne_id = ?", fmt.Sprintf("%s%%", imsi), neId).Delete(&model.UDMVolteIMSUser{}) + if err := tx.Error; err != nil { + logger.Errorf("DeletePrefixByIMSI err => %v", err) + } + return tx.RowsAffected +} diff --git a/src/modules/network_data/service/alarm.go b/src/modules/network_data/service/alarm.go index 9184e10b..a7fcd286 100644 --- a/src/modules/network_data/service/alarm.go +++ b/src/modules/network_data/service/alarm.go @@ -2,11 +2,16 @@ package service import ( "fmt" + "strconv" "time" "be.ems/src/framework/constants" + "be.ems/src/framework/i18n" + "be.ems/src/framework/utils/date" + "be.ems/src/framework/utils/file" "be.ems/src/modules/network_data/model" "be.ems/src/modules/network_data/repository" + sysService "be.ems/src/modules/system/service" ) // 实例化数据层 Alarm 结构体 @@ -114,3 +119,83 @@ func (r Alarm) AlarmAckByIds(ids []int64, ackUser string, ackState bool) (int64, // 清除失败! return 0, fmt.Errorf("ack fail") } + +// ExportXlsx 导出数据到 xlsx 文件 +func (r Alarm) ExportXlsx(rows []model.Alarm, fileName, language, alarmStatus string) (string, error) { + // 第一行表头标题 + headerCells := map[string]string{ + "A1": i18n.TKey(language, "alarm.export.alarmType"), + "B1": i18n.TKey(language, "alarm.export.origSeverity"), + "C1": i18n.TKey(language, "alarm.export.alarmTitle"), + "D1": i18n.TKey(language, "alarm.export.eventTime"), + "E1": i18n.TKey(language, "alarm.export.alarmId"), + "F1": i18n.TKey(language, "alarm.export.alarmCode"), + "G1": i18n.TKey(language, "ne.common.neType"), + "H1": i18n.TKey(language, "ne.common.neName"), + "I1": i18n.TKey(language, "ne.common.neId"), + } + if alarmStatus == "0" { + headerCells["J1"] = i18n.TKey(language, "alarm.export.clearUser") + headerCells["K1"] = i18n.TKey(language, "alarm.export.clearTime") + headerCells["L1"] = i18n.TKey(language, "alarm.export.clearType") + } + // 读取字典数据 告警原始严重程度 + dictActiveAlarmType := sysService.NewSysDictData.FindByType("active_alarm_type") + // 读取字典数据 告警类型 + dictActiveClearType := sysService.NewSysDictData.FindByType("active_clear_type") + // 读取字典数据 告警确认类型 + dictActiveAlarmSeverity := sysService.NewSysDictData.FindByType("active_alarm_severity") + // 从第二行开始的数据 + dataCells := make([]map[string]any, 0) + for i, row := range rows { + idx := strconv.Itoa(i + 2) + + // 原始严重程度 + origSeverity := "-" + for _, v := range dictActiveAlarmSeverity { + if row.OrigSeverity == v.DataValue { + origSeverity = i18n.TKey(language, v.DataLabel) + break + } + } + // 活动告警类型 + alarmType := "-" + for _, v := range dictActiveAlarmType { + if row.AlarmType == v.DataValue { + alarmType = i18n.TKey(language, v.DataLabel) + break + } + } + // 告警清除类型 + clearType := "-" + for _, v := range dictActiveClearType { + if fmt.Sprint(row.ClearType) == v.DataValue { + clearType = i18n.TKey(language, v.DataLabel) + break + } + } + eventTimeStr := date.ParseDateToStr(row.EventTime, date.YYYY_MM_DDTHH_MM_SSZ) + + cells := map[string]any{ + "A" + idx: alarmType, + "B" + idx: origSeverity, + "C" + idx: row.AlarmTitle, + "D" + idx: eventTimeStr, + "E" + idx: row.AlarmId, + "F" + idx: row.AlarmCode, + "G" + idx: row.NeType, + "H" + idx: row.NeName, + "I" + idx: row.NeId, + } + if alarmStatus == "0" { + clearTimeStr := date.ParseDateToStr(row.ClearTime, date.YYYY_MM_DDTHH_MM_SSZ) + cells["J"+idx] = row.ClearUser + cells["K"+idx] = clearType + cells["L"+idx] = clearTimeStr + } + dataCells = append(dataCells, cells) + } + + // 导出数据表格 + return file.WriteSheet(headerCells, dataCells, fileName, "") +} diff --git a/src/modules/network_data/service/backup.go b/src/modules/network_data/service/backup.go new file mode 100644 index 00000000..f6cbd08f --- /dev/null +++ b/src/modules/network_data/service/backup.go @@ -0,0 +1,86 @@ +package service + +import ( + "encoding/json" + "fmt" + "path/filepath" + "strings" + + "be.ems/src/framework/ssh" + "be.ems/src/modules/network_data/model" + neService "be.ems/src/modules/network_element/service" + systemService "be.ems/src/modules/system/service" +) + +// 实例化数据层 Backup 结构体 +var NewBackup = &Backup{ + BACKUP_DIR: "/usr/local/omc/backup", + neInfoService: neService.NewNeInfo, + sysConfigService: systemService.NewSysConfig, +} + +// Backup 备份相关 服务层处理 +type Backup struct { + BACKUP_DIR string // 备份目录 + neInfoService *neService.NeInfo // 网元信息服务 + sysConfigService *systemService.SysConfig // 参数配置服务 +} + +// FTPConfigUpdate 更新FTP配置信息 +func (r Backup) FTPConfigUpdate(value, updateBy string) int64 { + cfg := r.sysConfigService.FindByKey("neData.backupDataFTP") + if cfg.ConfigId == 0 { + return 0 + } + cfg.ConfigValue = value + cfg.UpdateBy = updateBy + return r.sysConfigService.UpdateEncryptValue(cfg) +} + +// FTPConfigInfo 获取FTP配置信息 +func (r Backup) FTPConfigInfo() model.BackupDataFTP { + info := model.BackupDataFTP{} + // 获取配置 + cfg := r.sysConfigService.FindByKeyDecryptValue("neData.backupDataFTP") + if cfg.ConfigId > 0 && cfg.ConfigValue != "" { + if err := json.Unmarshal([]byte(cfg.ConfigValue), &info); err != nil { + return info + } + } + return info +} + +// FTPPushFile 推送文件到FTP +func (r Backup) FTPPushFile(localFilePath, tag string) error { + cfgData := r.FTPConfigInfo() + if !cfgData.Enable { + return fmt.Errorf("setting remote backup ftp is disabled") + } + + connSSH := ssh.ConnSSH{ + User: cfgData.Username, + Password: cfgData.Password, + Addr: cfgData.ToIp, + Port: cfgData.ToPort, + AuthMode: "0", + } + sshClient, err := connSSH.NewClient() + if err != nil { + return err + } + defer sshClient.Close() + // 网元主机的SSH客户端进行文件传输 + sftpClient, err := sshClient.NewClientSFTP() + if err != nil { + return err + } + defer sftpClient.Close() + + remotePath := strings.Replace(localFilePath, r.BACKUP_DIR, tag, 1) + remotePath = filepath.Join(cfgData.Dir, remotePath) + // 复制到远程 + if err = sftpClient.CopyFileLocalToRemote(localFilePath, remotePath); err != nil { + return fmt.Errorf("error uploading file") + } + return nil +} diff --git a/src/modules/network_data/service/udm_auth.go b/src/modules/network_data/service/udm_auth.go index 01c3703f..73e94c7d 100644 --- a/src/modules/network_data/service/udm_auth.go +++ b/src/modules/network_data/service/udm_auth.go @@ -149,7 +149,7 @@ func (r *UDMAuthUser) InsertData(neId, dataType string, data any) int64 { var num int64 = 0 for prefix := range prefixes { // 直接删除前缀的记录 - r.udmAuthRepository.DeletePrefixByIMSI(neId, prefix) + r.udmAuthRepository.DeletePrefixByIMSI(prefix, neId) // keys ausf:4600001000004* arr := r.dataByRedis(prefix+"*", neId) if len(arr) > 0 { diff --git a/src/modules/network_data/service/udm_voip.go b/src/modules/network_data/service/udm_voip.go new file mode 100644 index 00000000..10c95d92 --- /dev/null +++ b/src/modules/network_data/service/udm_voip.go @@ -0,0 +1,172 @@ +package service + +import ( + "fmt" + "strconv" + "strings" + + "be.ems/src/framework/database/redis" + "be.ems/src/modules/network_data/model" + "be.ems/src/modules/network_data/repository" + neService "be.ems/src/modules/network_element/service" +) + +// 实例化服务层 UDMVOIPUser 结构体 +var NewUDMVOIPUser = &UDMVOIPUser{ + udmVOIPRepository: repository.NewUDMVOIPUser, +} + +// UDMVOIP信息 服务层处理 +type UDMVOIPUser struct { + // UDMVOIP信息数据信息 + udmVOIPRepository *repository.UDMVOIPUser +} + +// dataByRedis UDMVOIP用户 db:0 中 voip:* +func (r UDMVOIPUser) dataByRedis(username, neId string) []model.UDMVOIPUser { + arr := []model.UDMVOIPUser{} + key := fmt.Sprintf("voip:%s", username) + source := fmt.Sprintf("UDM_%s", neId) + + // 网元主机的Redis客户端 + redisClient, err := neService.NewNeInfo.NeRunRedisClient("UDM", neId) + if err != nil { + return arr + } + defer func() { + redisClient.Close() + redis.ConnectPush(source, nil) + }() + redis.ConnectPush(source, redisClient.Client) + + voipArr, err := redis.GetKeys(source, key) + if err != nil { + return arr + } + mkv, err := redis.GetHashBatch(source, voipArr) + if err != nil { + return arr + } + + for k, m := range mkv { + // 跳过-号数据 voip:360000100000130 + username, hasPrefix := strings.CutPrefix(k, "voip:") + if strings.Contains(username, "-") || !hasPrefix { + continue + } + + a := model.UDMVOIPUser{ + NeId: neId, + UserName: username, + Password: m["password"], + } + arr = append(arr, a) + } + return arr +} + +// ResetData 重置VOIP用户数据,清空数据库重新同步Redis数据 +func (r UDMVOIPUser) ResetData(neId string) int64 { + arr := r.dataByRedis("*", neId) + // 数据清空后添加 + go r.udmVOIPRepository.ClearAndInsert(neId, arr) + return int64(len(arr)) +} + +// ParseInfo 解析单个用户userName信息 data从命令MML得到的结果 +func (r UDMVOIPUser) ParseInfo(neId string, data map[string]string) model.UDMVOIPUser { + u := model.UDMVOIPUser{ + NeId: neId, + UserName: data["username"], + Password: data["password"], + } + // 赋予ID + item := r.udmVOIPRepository.SelectByUserNameAndNeID(u.UserName, neId) + if item.ID != "" { + u.ID = item.ID + } + return u +} + +// FindByPage 分页查询数据库 +func (r UDMVOIPUser) FindByPage(query map[string]string) (int64, []model.UDMVOIPUser) { + return r.udmVOIPRepository.SelectPage(query) +} + +// Find 查询数据库 +func (r UDMVOIPUser) Find(u model.UDMVOIPUser) []model.UDMVOIPUser { + return r.udmVOIPRepository.SelectList(u) +} + +// Insert 从数据中读取后删除username再存入数据库 +func (r UDMVOIPUser) Insert(neId string, username string) int64 { + uArr := r.dataByRedis(username, neId) + if len(uArr) > 0 { + r.udmVOIPRepository.Delete(username, neId) + return r.udmVOIPRepository.Inserts(uArr) + } + return 0 +} + +// InsertData 导入文件数据 dataType目前两种:txt/csv +func (r UDMVOIPUser) InsertData(neId, dataType string, data any) int64 { + // imsi截取前缀,重新获取部分数据 + prefixes := make(map[string]struct{}) + + if dataType == "csv" { + for _, v := range data.([]map[string]string) { + username := v["username"] + if len(username) < 4 { + continue + } + prefix := username[:len(username)-3] + prefixes[prefix] = struct{}{} + } + } + if dataType == "txt" { + for _, v := range data.([][]string) { + username := v[0] + if len(username) < 4 { + continue + } + prefix := username[:len(username)-3] + prefixes[prefix] = struct{}{} + } + } + + // 根据前缀重新加载插入 + var num int64 = 0 + for prefix := range prefixes { + // 直接删除前缀的记录 + r.udmVOIPRepository.DeletePrefixByUserName(prefix, neId) + // keys voip:4600001000004* + arr := r.dataByRedis(prefix+"*", neId) + if len(arr) > 0 { + num += r.udmVOIPRepository.Inserts(arr) + } + } + return num +} + +// Delete 删除单个不重新加载 +func (r UDMVOIPUser) Delete(username, neId string) int64 { + return r.udmVOIPRepository.Delete(username, neId) +} + +// LoadData 重新加载从username开始num的数据 +func (r UDMVOIPUser) LoadData(neId, username, num string) { + startUserName, _ := strconv.ParseInt(username, 10, 64) + subNum, _ := strconv.ParseInt(num, 10, 64) + var i int64 + for i = 0; i < subNum; i++ { + keyUserName := fmt.Sprintf("%d", startUserName+i) + // 删除原数据 + r.udmVOIPRepository.Delete(keyUserName, neId) + // 加载数据 + arr := r.dataByRedis(keyUserName, neId) + if len(arr) < 1 { + continue + } + r.udmVOIPRepository.Inserts(arr) + } +} diff --git a/src/modules/network_data/service/udm_volte_ims.go b/src/modules/network_data/service/udm_volte_ims.go new file mode 100644 index 00000000..dbdb6146 --- /dev/null +++ b/src/modules/network_data/service/udm_volte_ims.go @@ -0,0 +1,194 @@ +package service + +import ( + "fmt" + "strconv" + "strings" + + "be.ems/src/framework/database/redis" + "be.ems/src/modules/network_data/model" + "be.ems/src/modules/network_data/repository" + neService "be.ems/src/modules/network_element/service" +) + +// 实例化服务层 UDMVolteIMSUser 结构体 +var NewUDMVolteIMSUser = &UDMVolteIMSUser{ + udmVolteIMSRepository: repository.NewUDMVolteIMSUser, +} + +// UDMVolteIMS信息 服务层处理 +type UDMVolteIMSUser struct { + // UDMVolteIMS信息数据信息 + udmVolteIMSRepository *repository.UDMVolteIMSUser +} + +// dataByRedis UDMVolteIMS用户 db:0 中 volte:* +func (r UDMVolteIMSUser) dataByRedis(imsi, neId string) []model.UDMVolteIMSUser { + arr := []model.UDMVolteIMSUser{} + key := fmt.Sprintf("volte:%s", imsi) + source := fmt.Sprintf("UDM_%s", neId) + + // 网元主机的Redis客户端 + redisClient, err := neService.NewNeInfo.NeRunRedisClient("UDM", neId) + if err != nil { + return arr + } + defer func() { + redisClient.Close() + redis.ConnectPush(source, nil) + }() + redis.ConnectPush(source, redisClient.Client) + + volteArr, err := redis.GetKeys(source, key) + if err != nil { + return arr + } + mkv, err := redis.GetHashBatch(source, volteArr) + if err != nil { + return arr + } + + for k, m := range mkv { + // volte:360000100000130:8612300000130 + keys := strings.Split(k, ":") + if len(keys) != 3 { + continue + } + + // "110011200004217@ims.mnc001.mcc110.3gppnetwork.org" + vni := "" + impiParts := strings.Split(m["impi"], "@") + if len(impiParts) > 1 { + vni = impiParts[1] + } + + a := model.UDMVolteIMSUser{ + NeId: neId, + IMSI: keys[1], + MSISDN: keys[2], + Tag: m["tag"], // volte = tag + VNI: vni, + } + arr = append(arr, a) + } + return arr +} + +// ResetData 重置VolteIMS用户数据,清空数据库重新同步Redis数据 +func (r UDMVolteIMSUser) ResetData(neId string) int64 { + authArr := r.dataByRedis("*", neId) + // 数据清空后添加 + go r.udmVolteIMSRepository.ClearAndInsert(neId, authArr) + return int64(len(authArr)) +} + +// ParseInfo 解析单个用户imsi信息 data从命令MML得到的结果 +func (r UDMVolteIMSUser) ParseInfo(neId string, data map[string]string) model.UDMVolteIMSUser { + // "110011200004217@ims.mnc001.mcc110.3gppnetwork.org" + vni := "" + impiParts := strings.Split(data["impi"], "@") + if len(impiParts) > 1 { + vni = impiParts[1] + } + if vni == "" { + return model.UDMVolteIMSUser{} + } + + u := model.UDMVolteIMSUser{ + NeId: neId, + IMSI: data["imsi"], + MSISDN: data["msisdn"], + Tag: data["volte_tag"], + VNI: vni, + } + // 赋予ID + item := r.udmVolteIMSRepository.SelectByIMSIAndMSISDNAndNeID(u.IMSI, u.MSISDN, neId) + if item.ID != "" { + u.ID = item.ID + } + return u +} + +// FindByPage 分页查询数据库 +func (r UDMVolteIMSUser) FindByPage(query map[string]string) (int64, []model.UDMVolteIMSUser) { + return r.udmVolteIMSRepository.SelectPage(query) +} + +// Find 查询数据库 +func (r UDMVolteIMSUser) Find(u model.UDMVolteIMSUser) []model.UDMVolteIMSUser { + return r.udmVolteIMSRepository.SelectList(u) +} + +// InsertByIMSI 从数据中读取后删除imsi再存入数据库 +// imsi长度15 +func (r UDMVolteIMSUser) InsertByIMSI(imsi, neId string) int64 { + uArr := r.dataByRedis(imsi+":*", neId) + if len(uArr) > 0 { + r.udmVolteIMSRepository.Delete(imsi, neId) + return r.udmVolteIMSRepository.Inserts(uArr) + } + return 0 +} + +// InsertData 导入文件数据 dataType目前两种:txt/csv +func (r UDMVolteIMSUser) InsertData(neId, dataType string, data any) int64 { + // imsi截取前缀,重新获取部分数据 + prefixes := make(map[string]struct{}) + + if dataType == "csv" { + for _, v := range data.([]map[string]string) { + imsi := v["imsi"] + if len(imsi) < 6 { + continue + } + prefix := imsi[:len(imsi)-4] + prefixes[prefix] = struct{}{} + } + } + if dataType == "txt" { + for _, v := range data.([][]string) { + imsi := v[0] + if len(imsi) < 6 { + continue + } + prefix := imsi[:len(imsi)-4] + prefixes[prefix] = struct{}{} + } + } + + // 根据前缀重新加载插入 + var num int64 = 0 + for prefix := range prefixes { + // 直接删除前缀的记录 + r.udmVolteIMSRepository.DeletePrefixByIMSI(prefix, neId) + // keys voip:4600001000004* + arr := r.dataByRedis(prefix+"*", neId) + if len(arr) > 0 { + num += r.udmVolteIMSRepository.Inserts(arr) + } + } + return num +} + +// Delete 删除单个不重新加载 +func (r UDMVolteIMSUser) Delete(imsi, neId string) int64 { + return r.udmVolteIMSRepository.Delete(imsi, neId) +} + +// LoadData 重新加载从imsi开始num的数据 +func (r UDMVolteIMSUser) LoadData(neId, imsiOrMsisdn, num string) { + startIMSIOrMsisdn, _ := strconv.ParseInt(imsiOrMsisdn, 10, 64) + subNum, _ := strconv.ParseInt(num, 10, 64) + var i int64 + for i = 0; i < subNum; i++ { + keyIMSI := fmt.Sprintf("%d", startIMSIOrMsisdn+i) + // 删除原数据 + r.udmVolteIMSRepository.Delete(keyIMSI, neId) + // 加载数据 + arr := r.dataByRedis(keyIMSI+":*", neId) + if len(arr) < 1 { + continue + } + r.udmVolteIMSRepository.Inserts(arr) + } +} diff --git a/src/modules/network_element/controller/action.go b/src/modules/network_element/controller/action.go index b7f86347..79722c99 100644 --- a/src/modules/network_element/controller/action.go +++ b/src/modules/network_element/controller/action.go @@ -54,7 +54,7 @@ func (s *NeActionController) PushFile(c *gin.Context) { } if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -127,7 +127,7 @@ func (s *NeActionController) PullFile(c *gin.Context) { } if err := c.ShouldBindQuery(&querys); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -199,7 +199,7 @@ func (s *NeActionController) PullDirZip(c *gin.Context) { } if err := c.ShouldBindQuery(&querys); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -280,7 +280,7 @@ func (s *NeActionController) ViewFile(c *gin.Context) { } if err := c.ShouldBindQuery(&querys); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -341,7 +341,7 @@ func (s *NeActionController) Files(c *gin.Context) { } if err := c.ShouldBindQuery(&querys); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -413,7 +413,7 @@ func (s *NeActionController) Service(c *gin.Context) { } if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -425,9 +425,9 @@ func (s *NeActionController) Service(c *gin.Context) { } neTypeLower := strings.ToLower(neInfo.NeType) - cmdStr := fmt.Sprintf("sudo service %s %s", neTypeLower, body.Action) + cmdStr := fmt.Sprintf("sudo systemctl %s %s", body.Action, neTypeLower) if neTypeLower == "omc" { - cmdStr = fmt.Sprintf("nohup sh -c \"sudo systemctl stop restagent && sleep 5s && sudo systemctl %s restagent\" > /dev/null 2>&1 &", body.Action) + cmdStr = fmt.Sprintf("nohup sh -c \"sudo systemctl stop omc && sleep 5s && sudo systemctl %s omc\" > /dev/null 2>&1 &", body.Action) } else if neTypeLower == "ims" { if body.Action == "restart" { cmdStr = "ims-stop || true && ims-start" diff --git a/src/modules/network_element/controller/ne_config.go b/src/modules/network_element/controller/ne_config.go index c0b85e06..fc6447f4 100644 --- a/src/modules/network_element/controller/ne_config.go +++ b/src/modules/network_element/controller/ne_config.go @@ -46,7 +46,7 @@ func (s NeConfigController) Info(c *gin.Context) { language := reqctx.AcceptLanguage(c) id := parse.Number(c.Query("id")) if id <= 0 { - c.JSON(400, resp.CodeMsg(40010, "bind err: id is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: id is empty")) return } @@ -72,14 +72,14 @@ func (s NeConfigController) Add(c *gin.Context) { var body model.NeConfig if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } // 将json数据转字符串存储 paramDataByte, err := json.Marshal(body.ParamData) if err != nil { - c.JSON(400, resp.CodeMsg(400, err.Error())) + c.JSON(200, resp.ErrMsg(err.Error())) return } body.ParamJson = string(paramDataByte) @@ -100,7 +100,7 @@ func (s NeConfigController) Edit(c *gin.Context) { var body model.NeConfig if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -115,7 +115,7 @@ func (s NeConfigController) Edit(c *gin.Context) { // 将json数据转字符串存储 paramDataByte, err := json.Marshal(body.ParamData) if err != nil { - c.JSON(400, resp.CodeMsg(400, err.Error())) + c.JSON(200, resp.ErrMsg(err.Error())) return } body.ParamJson = string(paramDataByte) @@ -135,7 +135,7 @@ func (s NeConfigController) Remove(c *gin.Context) { language := reqctx.AcceptLanguage(c) id := c.Query("id") if id == "" { - c.JSON(400, resp.CodeMsg(40010, "bind err: id is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: id is empty")) return } @@ -170,10 +170,9 @@ func (s NeConfigController) Remove(c *gin.Context) { // @Description Network Element Parameter Configuration Available Attribute Values List Specify Network Element Type All Unpaged // @Router /ne/config/list/{neType} [get] func (s NeConfigController) ListByNeType(c *gin.Context) { - language := reqctx.AcceptLanguage(c) neType := c.Param("neType") if neType == "" { - c.JSON(400, resp.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + c.JSON(422, resp.CodeMsg(422002, "bind err: neType is empty")) return } data := s.neConfigService.FindByNeType(neType) @@ -204,7 +203,7 @@ func (s NeConfigController) DataInfo(c *gin.Context) { } if err := c.ShouldBindQuery(&query); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -259,7 +258,7 @@ func (s NeConfigController) DataEdit(c *gin.Context) { } if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -312,20 +311,20 @@ func (s NeConfigController) DataAdd(c *gin.Context) { } if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } // 检查是否array info := s.neConfigService.FindByNeTypeAndParamName(body.NeType, body.ParamName) if info.ParamType != "array" { - c.JSON(400, resp.CodeMsg(400, "this attribute does not support adding")) + c.JSON(200, resp.ErrMsg("this attribute does not support adding")) return } // 必须含有index _, idxOk := body.ParamData["index"] if info.ParamType == "array" && !idxOk { - c.JSON(400, resp.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + c.JSON(200, resp.ErrMsg("array data must contain index")) return } @@ -369,14 +368,15 @@ func (s NeConfigController) DataRemove(c *gin.Context) { Loc string `form:"loc" binding:"required"` // 与数据对象内index一致,有多层时划分嵌套层(index/subParamName/index) } if err := c.ShouldBindQuery(&query); err != nil { - c.JSON(400, resp.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } // 检查是否array info := s.neConfigService.FindByNeTypeAndParamName(query.NeType, query.ParamName) if info.ParamType != "array" { - c.JSON(400, resp.CodeMsg(400, "this attribute does not support adding")) + c.JSON(200, resp.ErrMsg("this attribute does not support adding")) return } diff --git a/src/modules/network_element/controller/ne_config_backup.go b/src/modules/network_element/controller/ne_config_backup.go index fa42f7be..33b48cf0 100644 --- a/src/modules/network_element/controller/ne_config_backup.go +++ b/src/modules/network_element/controller/ne_config_backup.go @@ -52,7 +52,7 @@ func (s NeConfigBackupController) Download(c *gin.Context) { language := reqctx.AcceptLanguage(c) id := parse.Number(c.Query("id")) if id <= 0 { - c.JSON(400, resp.CodeMsg(40010, "bind err: id is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: id is empty")) return } @@ -82,7 +82,7 @@ func (s NeConfigBackupController) Edit(c *gin.Context) { } if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -112,7 +112,7 @@ func (s NeConfigBackupController) Remove(c *gin.Context) { language := reqctx.AcceptLanguage(c) id := c.Query("id") if id == "" { - c.JSON(400, resp.CodeMsg(40010, "bind err: id is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: id is empty")) return } @@ -146,7 +146,7 @@ func (s NeConfigBackupController) Import(c *gin.Context) { } if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } if !strings.HasSuffix(body.Path, ".zip") { @@ -183,7 +183,7 @@ func (s NeConfigBackupController) Export(c *gin.Context) { } if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } // 查网元 diff --git a/src/modules/network_element/controller/ne_host.go b/src/modules/network_element/controller/ne_host.go index 2135e455..be385c53 100644 --- a/src/modules/network_element/controller/ne_host.go +++ b/src/modules/network_element/controller/ne_host.go @@ -75,11 +75,11 @@ func (s NeHostController) Add(c *gin.Context) { var body model.NeHost if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } if body.ID == 0 { - c.JSON(400, resp.CodeMsg(40010, "bind err: id not is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: id not is empty")) return } @@ -116,11 +116,11 @@ func (s NeHostController) Edit(c *gin.Context) { var body model.NeHost if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } if body.ID <= 0 { - c.JSON(400, resp.CodeMsg(40010, "bind err: id is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: id is empty")) return } @@ -196,7 +196,7 @@ func (s NeHostController) Test(c *gin.Context) { var body model.NeHost if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -278,7 +278,7 @@ func (s NeHostController) Cmd(c *gin.Context) { } if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -358,7 +358,7 @@ func (s NeHostController) CheckBySSH(c *gin.Context) { var body model.NeHost if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -460,11 +460,11 @@ func (s NeHostController) AuthorizedBySSH(c *gin.Context) { var body model.NeHost if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } if body.AuthMode == "2" { - c.JSON(400, resp.CodeMsg(40010, "bind err: auth mode not equals 2")) + c.JSON(422, resp.CodeMsg(422002, "bind err: auth mode not equals 2")) return } diff --git a/src/modules/network_element/controller/ne_host_cmd.go b/src/modules/network_element/controller/ne_host_cmd.go index 088796d5..06e88996 100644 --- a/src/modules/network_element/controller/ne_host_cmd.go +++ b/src/modules/network_element/controller/ne_host_cmd.go @@ -41,7 +41,7 @@ func (s NeHostCmdController) Info(c *gin.Context) { language := reqctx.AcceptLanguage(c) id := parse.Number(c.Param("id")) if id <= 0 { - c.JSON(400, resp.CodeMsg(40010, "bind err: id is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: id is empty")) return } @@ -63,7 +63,7 @@ func (s NeHostCmdController) Add(c *gin.Context) { var body model.NeHostCmd if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -93,7 +93,7 @@ func (s NeHostCmdController) Edit(c *gin.Context) { var body model.NeHostCmd if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -130,7 +130,7 @@ func (s NeHostCmdController) Remove(c *gin.Context) { language := reqctx.AcceptLanguage(c) id := c.Param("id") if id == "" { - c.JSON(400, resp.CodeMsg(40010, "bind err: id is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: id is empty")) return } diff --git a/src/modules/network_element/controller/ne_info.go b/src/modules/network_element/controller/ne_info.go index 9412d807..133dd782 100644 --- a/src/modules/network_element/controller/ne_info.go +++ b/src/modules/network_element/controller/ne_info.go @@ -58,7 +58,7 @@ func (s NeInfoController) State(c *gin.Context) { } if err := c.ShouldBindQuery(&querys); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -122,7 +122,7 @@ func (s NeInfoController) NeTypeAndID(c *gin.Context) { } if err := c.ShouldBindQuery(&querys); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -160,7 +160,7 @@ func (s NeInfoController) ListAll(c *gin.Context) { } if err := c.ShouldBindQuery(&querys); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -202,7 +202,7 @@ func (s NeInfoController) Para5GFileWrite(c *gin.Context) { } if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -224,7 +224,7 @@ func (s NeInfoController) OAMFileRead(c *gin.Context) { } if err := c.ShouldBindQuery(&querys); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -249,7 +249,7 @@ func (s NeInfoController) OAMFileWrite(c *gin.Context) { } if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -312,7 +312,7 @@ func (s NeInfoController) Info(c *gin.Context) { language := reqctx.AcceptLanguage(c) id := parse.Number(c.Param("id")) if id <= 0 { - c.JSON(400, resp.CodeMsg(40010, "bind err: id is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: id is empty")) return } @@ -345,11 +345,11 @@ func (s NeInfoController) Add(c *gin.Context) { err := c.ShouldBindBodyWithJSON(&body) if err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } if body.ID != 0 { - c.JSON(400, resp.CodeMsg(40010, "bind err: id not is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: id not is empty")) return } @@ -438,11 +438,11 @@ func (s NeInfoController) Edit(c *gin.Context) { err := c.ShouldBindBodyWithJSON(&body) if err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } if body.ID <= 0 { - c.JSON(400, resp.CodeMsg(40010, "bind err: id is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: id is empty")) return } @@ -549,7 +549,7 @@ func (s NeInfoController) Remove(c *gin.Context) { language := reqctx.AcceptLanguage(c) id := c.Param("id") if id == "" { - c.JSON(400, resp.CodeMsg(40010, "bind err: id is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: id is empty")) return } diff --git a/src/modules/network_element/controller/ne_license.go b/src/modules/network_element/controller/ne_license.go index 05e43e06..92a37ba8 100644 --- a/src/modules/network_element/controller/ne_license.go +++ b/src/modules/network_element/controller/ne_license.go @@ -66,7 +66,7 @@ func (s *NeLicenseController) Info(c *gin.Context) { language := reqctx.AcceptLanguage(c) id := parse.Number(c.Param("id")) if id <= 0 { - c.JSON(400, resp.CodeMsg(40010, "bind err: id is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: id is empty")) return } @@ -102,7 +102,7 @@ func (s *NeLicenseController) NeTypeAndID(c *gin.Context) { } if err := c.ShouldBindQuery(&querys); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -137,7 +137,8 @@ func (s *NeLicenseController) Code(c *gin.Context) { NeId string `form:"neId" binding:"required"` } if err := c.ShouldBindQuery(&querys); err != nil { - c.JSON(400, resp.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -183,7 +184,8 @@ func (s *NeLicenseController) Change(c *gin.Context) { var body model.NeLicense err := c.ShouldBindBodyWithJSON(&body) if err != nil || body.LicensePath == "" { - c.JSON(400, resp.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } diff --git a/src/modules/network_element/controller/ne_software.go b/src/modules/network_element/controller/ne_software.go index 841d02cb..837ba6c8 100644 --- a/src/modules/network_element/controller/ne_software.go +++ b/src/modules/network_element/controller/ne_software.go @@ -55,7 +55,7 @@ func (s NeSoftwareController) Info(c *gin.Context) { language := reqctx.AcceptLanguage(c) id := parse.Number(c.Param("id")) if id <= 0 { - c.JSON(400, resp.CodeMsg(40010, "bind err: id is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: id is empty")) return } @@ -86,11 +86,11 @@ func (s NeSoftwareController) Add(c *gin.Context) { var body model.NeSoftware if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } if body.Path == "" || body.ID > 0 { - c.JSON(400, resp.CodeMsg(40010, "bind err: path is empty or id is not empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: path is empty or id is not empty")) return } // 找到已存在的删除后重新添加 @@ -130,11 +130,11 @@ func (s NeSoftwareController) Edit(c *gin.Context) { var body model.NeSoftware if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } if body.Path == "" || body.ID == 0 { - c.JSON(400, resp.CodeMsg(40010, "bind err: path or id is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: path or id is empty")) return } @@ -171,7 +171,7 @@ func (s NeSoftwareController) Remove(c *gin.Context) { language := reqctx.AcceptLanguage(c) id := c.Param("id") if id == "" { - c.JSON(400, resp.CodeMsg(40010, "bind err: id is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: id is empty")) return } @@ -209,7 +209,7 @@ func (s NeSoftwareController) NewNeVersion(c *gin.Context) { var body model.NeSoftware if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } diff --git a/src/modules/network_element/controller/ne_version.go b/src/modules/network_element/controller/ne_version.go index ff6a947c..cb9777a2 100644 --- a/src/modules/network_element/controller/ne_version.go +++ b/src/modules/network_element/controller/ne_version.go @@ -40,7 +40,7 @@ func (s *NeVersionController) Info(c *gin.Context) { language := reqctx.AcceptLanguage(c) id := parse.Number(c.Param("id")) if id <= 0 { - c.JSON(400, resp.CodeMsg(40010, "bind err: id is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: id is empty")) return } @@ -77,7 +77,7 @@ func (s *NeVersionController) Operate(c *gin.Context) { } if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } diff --git a/src/modules/network_element/fetch_link/ne_trace.go b/src/modules/network_element/fetch_link/ne_trace.go index 387633fa..b31117ae 100644 --- a/src/modules/network_element/fetch_link/ne_trace.go +++ b/src/modules/network_element/fetch_link/ne_trace.go @@ -10,31 +10,10 @@ import ( "be.ems/src/modules/network_element/model" ) -// NeTraceInfo 网元跟踪任务信息 -func NeTraceInfo(neInfo model.NeInfo, traceId string) (map[string]any, error) { - // 跟踪任务信息 - neUrl := fmt.Sprintf("http://%s:%d/api/rest/traceManagement/v1/subscriptions?id=%s", neInfo.IP, neInfo.Port, traceId) - resBytes, err := fetch.Get(neUrl, nil, 30_000) - if err != nil { - logger.Warnf("NeTraceInfo Get \"%s\"", neUrl) - logger.Errorf("NeTraceInfo %s", err.Error()) - return nil, fmt.Errorf("NeService Trace Info API Error") - } - - // 序列化结果 - var resData map[string]any - err = json.Unmarshal(resBytes, &resData) - if err != nil { - logger.Errorf("NeTraceInfo Unmarshal %s", err.Error()) - return nil, err - } - return resData, nil -} - // NeTraceAdd 网元跟踪任务新增 -func NeTraceAdd(neInfo model.NeInfo, data map[string]any) (map[string]any, error) { +func NeTraceAdd(neInfo model.NeInfo, data any) (map[string]any, error) { // 跟踪任务创建 - neUrl := fmt.Sprintf("http://%s:%d/api/rest/traceManagement/v1/subscriptions", neInfo.IP, neInfo.Port) + neUrl := fmt.Sprintf("http://%s:%d/api/rest/traceManagement/v2/%s/subscriptions", neInfo.IP, neInfo.Port, neInfo.NeType) resBytes, err := fetch.PostJSON(neUrl, data, nil) var resData map[string]any if err != nil { @@ -60,48 +39,17 @@ func NeTraceAdd(neInfo model.NeInfo, data map[string]any) (map[string]any, error return resData, nil } -// NeTraceEdit 网元跟踪任务编辑 -func NeTraceEdit(neInfo model.NeInfo, data map[string]any) (map[string]any, error) { - // 网元参数配置新增(array) - neUrl := fmt.Sprintf("http://%s:%d/api/rest/traceManagement/v1/subscriptions", neInfo.IP, neInfo.Port) - resBytes, err := fetch.PutJSON(neUrl, data, nil) - var resData map[string]any - if err != nil { - errStr := err.Error() - logger.Warnf("NeTraceEdit PUT \"%s\"", neUrl) - if strings.HasPrefix(errStr, "201") || strings.HasPrefix(errStr, "204") { - return resData, nil - } - logger.Errorf("NeTraceEdit %s", errStr) - return nil, fmt.Errorf("NeService Trace Edit API Error") - } - - // 200 成功无数据时 - if len(resBytes) == 0 { - return resData, nil - } - - // 序列化结果 - err = json.Unmarshal(resBytes, &resData) - if err != nil { - logger.Errorf("NeTraceEdit Unmarshal %s", err.Error()) - return nil, err - } - return resData, nil -} - // NeTraceDelete 网元跟踪任务删除 func NeTraceDelete(neInfo model.NeInfo, traceId string) (map[string]any, error) { - // 网元参数配置删除(array) - neUrl := fmt.Sprintf("http://%s:%d/api/rest/traceManagement/v1/subscriptions?id=%s", neInfo.IP, neInfo.Port, traceId) + neUrl := fmt.Sprintf("http://%s:%d/api/rest/traceManagement/v2/%s/subscriptions?id=%s", neInfo.IP, neInfo.Port, neInfo.NeType, traceId) resBytes, err := fetch.Delete(neUrl, nil) var resData map[string]any if err != nil { errStr := err.Error() - logger.Warnf("NeTraceDelete Delete \"%s\"", neUrl) if strings.HasPrefix(errStr, "201") || strings.HasPrefix(errStr, "204") { return resData, nil } + logger.Warnf("NeTraceDelete Delete \"%s\"", neUrl) logger.Errorf("NeTraceDelete %s", errStr) return nil, fmt.Errorf("NeService Trace Delete API Error") } diff --git a/src/modules/network_element/ne_config_test.go b/src/modules/network_element/ne_config_test.go index 428ea53d..e7e66a63 100644 --- a/src/modules/network_element/ne_config_test.go +++ b/src/modules/network_element/ne_config_test.go @@ -21,15 +21,15 @@ import ( const ( // 数据库 - DbHost = "127.0.0.1" - DbPort = 33066 + DbHost = "192.168.9.58" + DbPort = 13306 DbUser = "root" DbPassswd = "1000omc@kp!" - DbName = "omc_db" + DbName = "omc_db_lichang" // 配置文件路径 - configParamDir = "../../../config/param" + configParamDir = "../../../local/param" // configParamFile = "*" // 目录下全部更新 - configParamFile = "mme_param_config.yaml" // 单文件更新 + configParamFile = "amf_param_config.yaml" // 单文件更新 ) func TestConfig(t *testing.T) { diff --git a/src/modules/network_element/network_element.go b/src/modules/network_element/network_element.go index b2b5249e..95f7685c 100644 --- a/src/modules/network_element/network_element.go +++ b/src/modules/network_element/network_element.go @@ -21,28 +21,28 @@ func Setup(router *gin.Engine) { neActionGroup := router.Group("/ne/action") { neActionGroup.GET("/files", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewNeAction.Files, ) neActionGroup.GET("/pullFile", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewNeAction.PullFile, ) neActionGroup.POST("/pushFile", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neAction", collectlogs.BUSINESS_TYPE_IMPORT)), controller.NewNeAction.PushFile, ) neActionGroup.GET("/pullDirZip", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewNeAction.PullDirZip, ) neActionGroup.GET("/viewFile", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewNeAction.ViewFile, ) neActionGroup.PUT("/service", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neAction", collectlogs.BUSINESS_TYPE_OTHER)), controller.NewNeAction.Service, ) @@ -52,58 +52,58 @@ func Setup(router *gin.Engine) { neInfoGroup := router.Group("/ne/info") { neInfoGroup.GET("/state", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewNeInfo.State, ) neInfoGroup.GET("/byTypeAndID", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewNeInfo.NeTypeAndID, ) neInfoGroup.GET("/listAll", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewNeInfo.ListAll, ) neInfoGroup.GET("/para5GFile", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewNeInfo.Para5GFileRead, ) neInfoGroup.PUT("/para5GFile", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neInfo", collectlogs.BUSINESS_TYPE_OTHER)), controller.NewNeInfo.Para5GFileWrite, ) neInfoGroup.GET("/oamFile", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewNeInfo.OAMFileRead, ) neInfoGroup.PUT("/oamFile", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neInfo", collectlogs.BUSINESS_TYPE_OTHER)), controller.NewNeInfo.OAMFileWrite, ) neInfoGroup.GET("/list", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewNeInfo.List, ) neInfoGroup.GET("/:id", middleware.CryptoApi(false, true), - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewNeInfo.Info, ) neInfoGroup.POST("", middleware.CryptoApi(true, true), - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neInfo", collectlogs.BUSINESS_TYPE_INSERT)), controller.NewNeInfo.Add, ) neInfoGroup.PUT("", middleware.CryptoApi(true, true), - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neInfo", collectlogs.BUSINESS_TYPE_UPDATE)), controller.NewNeInfo.Edit, ) neInfoGroup.DELETE(":id", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neInfo", collectlogs.BUSINESS_TYPE_DELETE)), controller.NewNeInfo.Remove, ) @@ -113,46 +113,46 @@ func Setup(router *gin.Engine) { neHostGroup := router.Group("/ne/host") { neHostGroup.GET("/list", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewNeHost.List, ) neHostGroup.GET("/:id", middleware.CryptoApi(false, true), - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewNeHost.Info, ) neHostGroup.POST("", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neHost", collectlogs.BUSINESS_TYPE_INSERT)), controller.NewNeHost.Add, ) neHostGroup.PUT("", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neHost", collectlogs.BUSINESS_TYPE_UPDATE)), controller.NewNeHost.Edit, ) neHostGroup.DELETE("/:id", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neHost", collectlogs.BUSINESS_TYPE_DELETE)), controller.NewNeHost.Remove, ) neHostGroup.POST("/test", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neHost", collectlogs.BUSINESS_TYPE_OTHER)), controller.NewNeHost.Test, ) neHostGroup.POST("/cmd", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neHost", collectlogs.BUSINESS_TYPE_OTHER)), controller.NewNeHost.Cmd, ) neHostGroup.POST("/checkBySSH", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neHost", collectlogs.BUSINESS_TYPE_OTHER)), controller.NewNeHost.CheckBySSH, ) neHostGroup.POST("/authorizedBySSH", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neHost", collectlogs.BUSINESS_TYPE_OTHER)), controller.NewNeHost.AuthorizedBySSH, ) @@ -162,25 +162,25 @@ func Setup(router *gin.Engine) { neHostCmdGroup := router.Group("/ne/hostCmd") { neHostCmdGroup.GET("/list", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewNeHostCmd.List, ) neHostCmdGroup.GET("/:id", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewNeHostCmd.Info, ) neHostCmdGroup.POST("", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neHostCmd", collectlogs.BUSINESS_TYPE_INSERT)), controller.NewNeHostCmd.Add, ) neHostCmdGroup.PUT("", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neHostCmd", collectlogs.BUSINESS_TYPE_UPDATE)), controller.NewNeHostCmd.Edit, ) neHostCmdGroup.DELETE(":id", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neHostCmd", collectlogs.BUSINESS_TYPE_DELETE)), controller.NewNeHostCmd.Remove, ) @@ -190,15 +190,15 @@ func Setup(router *gin.Engine) { neVersionGroup := router.Group("/ne/version") { neVersionGroup.GET("/list", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewNeVersion.List, ) neVersionGroup.GET("/:id", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewNeVersion.Info, ) neVersionGroup.POST("/operate", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neVersion", collectlogs.BUSINESS_TYPE_OTHER)), controller.NewNeVersion.Operate, ) @@ -208,30 +208,30 @@ func Setup(router *gin.Engine) { neSoftwareGroup := router.Group("/ne/software") { neSoftwareGroup.GET("/list", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewNeSoftware.List, ) neSoftwareGroup.GET("/:id", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewNeSoftware.Info, ) neSoftwareGroup.POST("", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neSoftware", collectlogs.BUSINESS_TYPE_INSERT)), controller.NewNeSoftware.Add, ) neSoftwareGroup.PUT("", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neSoftware", collectlogs.BUSINESS_TYPE_UPDATE)), controller.NewNeSoftware.Edit, ) neSoftwareGroup.DELETE(":id", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neSoftware", collectlogs.BUSINESS_TYPE_DELETE)), controller.NewNeSoftware.Remove, ) neSoftwareGroup.POST("/newNeVersion", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neSoftware", collectlogs.BUSINESS_TYPE_OTHER)), controller.NewNeSoftware.NewNeVersion, ) @@ -241,28 +241,28 @@ func Setup(router *gin.Engine) { neLicenseGroup := router.Group("/ne/license") { neLicenseGroup.GET("/list", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewNeLicense.List, ) neLicenseGroup.GET("/:id", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewNeLicense.Info, ) neLicenseGroup.GET("/byTypeAndID", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewNeLicense.NeTypeAndID, ) neLicenseGroup.GET("/code", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewNeLicense.Code, ) neLicenseGroup.POST("/change", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neLicense", collectlogs.BUSINESS_TYPE_OTHER)), controller.NewNeLicense.Change, ) neLicenseGroup.GET("/state", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewNeLicense.State, ) } @@ -272,49 +272,49 @@ func Setup(router *gin.Engine) { { // 网元参数配置可用属性值 neConfigGroup.GET("/list", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewNeConfig.List, ) neConfigGroup.GET("/info/:id", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewNeConfig.Info, ) neConfigGroup.POST("", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neConfig", collectlogs.BUSINESS_TYPE_INSERT)), controller.NewNeConfig.Add, ) neConfigGroup.PUT("", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neConfig", collectlogs.BUSINESS_TYPE_UPDATE)), controller.NewNeConfig.Edit, ) neConfigGroup.DELETE("", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neConfig", collectlogs.BUSINESS_TYPE_DELETE)), controller.NewNeConfig.Remove, ) neConfigGroup.GET("/list/:neType", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewNeConfig.ListByNeType, ) // 网元参数配置数据 neConfigGroup.GET("/data", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewNeConfig.DataInfo, ) neConfigGroup.PUT("/data", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neConfig", collectlogs.BUSINESS_TYPE_UPDATE)), controller.NewNeConfig.DataEdit, ) neConfigGroup.POST("/data", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neConfig", collectlogs.BUSINESS_TYPE_INSERT)), controller.NewNeConfig.DataAdd, ) neConfigGroup.DELETE("/data", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neConfig", collectlogs.BUSINESS_TYPE_DELETE)), controller.NewNeConfig.DataRemove, ) @@ -324,47 +324,33 @@ func Setup(router *gin.Engine) { neConfigBackupGroup := router.Group("/ne/config/backup") { neConfigBackupGroup.GET("/list", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewNeConfigBackup.List, ) neConfigBackupGroup.GET("/download", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewNeConfigBackup.Download, ) neConfigBackupGroup.PUT("", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"ne:neConfigBackup:edit"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"ne:neConfigBackup:edit"}}), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neConfigBackup", collectlogs.BUSINESS_TYPE_UPDATE)), controller.NewNeConfigBackup.Edit, ) neConfigBackupGroup.DELETE("", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"ne:neConfigBackup:remove"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"ne:neConfigBackup:remove"}}), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neConfigBackup", collectlogs.BUSINESS_TYPE_DELETE)), controller.NewNeConfigBackup.Remove, ) neConfigBackupGroup.POST("/import", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neConfigBackup", collectlogs.BUSINESS_TYPE_IMPORT)), controller.NewNeConfigBackup.Import, ) neConfigBackupGroup.POST("/export", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neConfigBackup", collectlogs.BUSINESS_TYPE_EXPORT)), controller.NewNeConfigBackup.Export, ) - neConfigBackupGroup.GET("/ftp", - middleware.PreAuthorize(nil), - controller.NewNeConfigBackup.GetFTP, - ) - neConfigBackupGroup.POST("/ftp", - middleware.PreAuthorize(nil), - collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neConfigBackup", collectlogs.BUSINESS_TYPE_OTHER)), - controller.NewNeConfigBackup.SetFTP, - ) - neConfigBackupGroup.PUT("/ftp", - middleware.PreAuthorize(nil), - collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neConfigBackup", collectlogs.BUSINESS_TYPE_OTHER)), - controller.NewNeConfigBackup.PutFTP, - ) } } diff --git a/src/modules/network_element/service/ne_config.go b/src/modules/network_element/service/ne_config.go index f96b4fbf..f5d6430e 100644 --- a/src/modules/network_element/service/ne_config.go +++ b/src/modules/network_element/service/ne_config.go @@ -46,7 +46,7 @@ func (r *NeConfig) RefreshByNeTypeAndNeID(neType string) []model.NeConfig { v[i] = item } values, _ := json.Marshal(v) - redis.Set("", key, string(values)) + redis.Set("", key, string(values), 0) } } } @@ -66,7 +66,7 @@ func (r *NeConfig) RefreshByNeTypeAndNeID(neType string) []model.NeConfig { neConfigList[i] = v } values, _ := json.Marshal(neConfigList) - redis.Set("", key, string(values)) + redis.Set("", key, string(values), 0) } return neConfigList } diff --git a/src/modules/network_element/service/ne_config_backup.go b/src/modules/network_element/service/ne_config_backup.go index 5de58c38..784fac87 100644 --- a/src/modules/network_element/service/ne_config_backup.go +++ b/src/modules/network_element/service/ne_config_backup.go @@ -70,7 +70,7 @@ func (s NeConfigBackup) DeleteByIds(ids []int64) (int64, error) { func (s NeConfigBackup) FileLocalToNe(neInfo model.NeInfo, localFile string) error { neTypeLower := strings.ToLower(neInfo.NeType) // 网管本地路径 - omcPath := "/usr/local/etc/omc/ne_config" + omcPath := "/usr/local/omc/backup/ne_config" if runtime.GOOS == "windows" { omcPath = fmt.Sprintf("C:%s", omcPath) } @@ -113,8 +113,6 @@ func (s NeConfigBackup) FileLocalToNe(neInfo model.NeInfo, localFile string) err sshClient.RunCMD(fmt.Sprintf("sudo mkdir -p /usr/local/etc/rtproxy && sudo cp -rf %s/rtproxy/* /usr/local/etc/rtproxy && sudo chmod 755 /usr/local/etc/rtproxy/rtproxy.conf", neDirTemp)) // iwf目录 sshClient.RunCMD(fmt.Sprintf("sudo mkdir -p /usr/local/etc/iwf && sudo cp -rf %s/iwf/* /usr/local/etc/iwf && sudo chmod 755 /usr/local/etc/iwf/*.yaml", neDirTemp)) - } else if neTypeLower == "omc" { - sshClient.RunCMD(fmt.Sprintf("sudo mkdir -p /usr/local/omc/etc && sudo cp -rf %s/* /usr/local/omc/etc && sudo chmod 755 /usr/local/omc/etc/*.{yaml,conf}", neDirTemp)) } else if neTypeLower == "smsc" { chmodFile := "sudo chmod 755 /usr/local/etc/smsc/{*sys.conf,*conf.txt,conf/is41_operation.conf}" sshClient.RunCMD(fmt.Sprintf("sudo mkdir -p /usr/local/etc/smsc/conf && sudo cp -rf %s/* /usr/local/etc/smsc && %s", neDirTemp, chmodFile)) @@ -149,11 +147,11 @@ func (s NeConfigBackup) FileNeToLocal(neInfo model.NeInfo) (string, error) { neTypeLower := strings.ToLower(neInfo.NeType) // 网管本地路径 - omcPath := "/usr/local/etc/omc/ne_config" + omcPath := "/usr/local/omc/backup/ne_config" if runtime.GOOS == "windows" { omcPath = fmt.Sprintf("C:%s", omcPath) } - localDirPath := fmt.Sprintf("%s/%s/%s/backup/tmp_export", omcPath, neTypeLower, neInfo.NeId) + localDirPath := fmt.Sprintf("%s/%s/%s/from_ne_tmp", omcPath, neTypeLower, neInfo.NeId) // 网元配置文件先复制到临时目录 sshClient.RunCMD("mkdir -p /tmp/omc && sudo chmod 777 -R /tmp/omc") @@ -171,8 +169,6 @@ func (s NeConfigBackup) FileNeToLocal(neInfo model.NeInfo) (string, error) { sshClient.RunCMD(fmt.Sprintf("mkdir -p %s/rtproxy && sudo cp -rf /usr/local/etc/rtproxy/rtproxy.conf %s/rtproxy", neDirTemp, neDirTemp)) // iwf目录 sshClient.RunCMD(fmt.Sprintf("mkdir -p %s/iwf && sudo cp -rf /usr/local/etc/iwf/*.yaml %s/iwf", neDirTemp, neDirTemp)) - } else if neTypeLower == "omc" { - sshClient.RunCMD(fmt.Sprintf("mkdir -p %s && sudo cp -rf /usr/local/omc/etc/*.{yaml,conf} %s", neDirTemp, neDirTemp)) } else if neTypeLower == "smsc" { sshClient.RunCMD(fmt.Sprintf("mkdir -p %s && sudo cp -rf /usr/local/etc/smsc/{*.yaml,*.conf,*conf.txt} %s", neDirTemp, neDirTemp)) sshClient.RunCMD(fmt.Sprintf("sudo cp -rf /usr/local/etc/smsc/conf %s/conf", neDirTemp)) @@ -191,7 +187,7 @@ func (s NeConfigBackup) FileNeToLocal(neInfo model.NeInfo) (string, error) { // 压缩zip文件名 zipFileName := fmt.Sprintf("%s-%s-etc-%s.zip", neTypeLower, neInfo.NeId, date.ParseDateToStr(time.Now(), date.YYYYMMDDHHMMSS)) - zipFilePath := fmt.Sprintf("%s/%s/%s/backup/%s", omcPath, neTypeLower, neInfo.NeId, zipFileName) + zipFilePath := fmt.Sprintf("%s/%s/%s/%s", omcPath, neTypeLower, neInfo.NeId, zipFileName) if err := file.CompressZipByDir(zipFilePath, localDirPath); err != nil { return "", fmt.Errorf("compress zip err") } diff --git a/src/modules/network_element/service/ne_info.go b/src/modules/network_element/service/ne_info.go index 07b2326a..49da206b 100644 --- a/src/modules/network_element/service/ne_info.go +++ b/src/modules/network_element/service/ne_info.go @@ -50,7 +50,7 @@ func (r NeInfo) FindByNeTypeAndNeID(neType, neID string) model.NeInfo { if neInfo.ID != 0 && neInfo.NeId == neID { redis.Del("", key) values, _ := json.Marshal(neInfo) - redis.Set("", key, string(values)) + redis.Set("", key, string(values), 0) } } return neInfo @@ -64,7 +64,7 @@ func (r NeInfo) RefreshByNeTypeAndNeID(neType, neID string) model.NeInfo { neInfo = r.neInfoRepository.SelectNeInfoByNeTypeAndNeID(neType, neID) if neInfo.ID != 0 && neInfo.NeId == neID { values, _ := json.Marshal(neInfo) - redis.Set("", key, string(values)) + redis.Set("", key, string(values), 0) } return neInfo } @@ -103,7 +103,7 @@ func (r NeInfo) FindByNeType(neType string) []model.NeInfo { key := fmt.Sprintf("%s:%s:%s", constants.CACHE_NE_INFO, strings.ToUpper(v.NeType), v.NeId) redis.Del("", key) values, _ := json.Marshal(v) - redis.Set("", key, string(values)) + redis.Set("", key, string(values), 0) } } return neInfo @@ -131,7 +131,7 @@ func (r NeInfo) FindByRmuid(rmUid string) model.NeInfo { key := fmt.Sprintf("%s:%s:%s", constants.CACHE_NE_INFO, strings.ToUpper(v.NeType), v.NeId) redis.Del("", key) values, _ := json.Marshal(v) - redis.Set("", key, string(values)) + redis.Set("", key, string(values), 0) if v.RmUID == rmUid { neInfo = v } @@ -593,7 +593,7 @@ func (r NeInfo) neConfOAMRead(neType, neId string, sync bool) (map[string]any, e neTypeLower := strings.ToLower(neType) fileName := "oam_manager.yaml" // 网管本地路径 - localFilePath := fmt.Sprintf("/usr/local/etc/omc/ne_config/%s/%s/%s", neTypeLower, neId, fileName) + localFilePath := fmt.Sprintf("/usr/local/omc/backup/ne_config/%s/%s/%s", neTypeLower, neId, fileName) if runtime.GOOS == "windows" { localFilePath = fmt.Sprintf("C:%s", localFilePath) } @@ -648,7 +648,7 @@ func (r NeInfo) neConfOAMWirte(neType, neId string, content any, sync bool) erro neTypeLower := strings.ToLower(neType) fileName := "oam_manager.yaml" // 网管本地路径 - omcPath := "/usr/local/etc/omc/ne_config" + omcPath := "/usr/local/omc/backup/ne_config" if runtime.GOOS == "windows" { omcPath = fmt.Sprintf("C:%s", omcPath) } diff --git a/src/modules/network_element/service/ne_license.go b/src/modules/network_element/service/ne_license.go index 6a7452db..4173aa40 100644 --- a/src/modules/network_element/service/ne_license.go +++ b/src/modules/network_element/service/ne_license.go @@ -100,7 +100,7 @@ func (r *NeLicense) FindByNeTypeAndNeID(neType, neId string) model.NeLicense { func (r *NeLicense) ReadLicenseInfo(neLicense model.NeLicense) (string, string) { neTypeLower := strings.ToLower(neLicense.NeType) // 网管本地路径 - omcPath := "/usr/local/etc/omc/ne_license" + omcPath := "/usr/local/omc/backup/ne_license" if runtime.GOOS == "windows" { omcPath = fmt.Sprintf("C:%s", omcPath) } @@ -178,11 +178,11 @@ func (r *NeLicense) UploadLicense(neLicense model.NeLicense) error { // 重启服务 if neLicense.Reload { - cmdStr := fmt.Sprintf("sudo service %s restart", neTypeLower) + cmdStr := fmt.Sprintf("sudo systemctl restart %s", neTypeLower) if neTypeLower == "ims" { cmdStr = "ims-stop || true && ims-start" } else if neTypeLower == "omc" { - cmdStr = "sudo systemctl restart restagent" + cmdStr = "sudo systemctl restart omc" } sshClient.RunCMD(cmdStr) } diff --git a/src/modules/oauth2/controller/oauth2.go b/src/modules/oauth2/controller/oauth2.go new file mode 100644 index 00000000..ca47a1e4 --- /dev/null +++ b/src/modules/oauth2/controller/oauth2.go @@ -0,0 +1,214 @@ +package controller + +import ( + "fmt" + "strings" + "time" + + "github.com/gin-gonic/gin" + + "be.ems/src/framework/constants" + "be.ems/src/framework/reqctx" + "be.ems/src/framework/resp" + "be.ems/src/framework/token" + "be.ems/src/modules/oauth2/model" + "be.ems/src/modules/oauth2/service" +) + +// NewOauth2 实例化控制层 +var NewOauth2 = &Oauth2Controller{ + oauth2Service: service.NewOauth2Service, + oauth2ClientService: service.NewOauth2ClientService, + oauth2LogLoginService: service.NewOauth2LogLogin, +} + +// Oauth2Controller 授权第三方客户端应用认证 控制层处理 +// +// PATH /oauth2 +type Oauth2Controller struct { + oauth2Service *service.Oauth2Service // 用户授权第三方信息服务 + oauth2ClientService *service.Oauth2ClientService // 用户授权第三方应用信息服务 + oauth2LogLoginService *service.Oauth2LogLoginService // 用户授权第三方应用登录日志 +} + +// Authorize 获取登录预授权码 +// +// GET /authorize +func (s Oauth2Controller) Authorize(c *gin.Context) { + var query model.CodeQuery + if err := c.ShouldBindQuery(&query); err != nil { + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) + return + } + + // 是否存在clientId + info := s.oauth2ClientService.FindByClientId(query.ClientId) + if info.ClientId == "" || info.ClientId != query.ClientId { + c.JSON(200, resp.ErrMsg("clientId not exist")) + return + } + + // 判断IP白名单 + if !strings.Contains(info.IPWhite, c.ClientIP()) { + c.JSON(200, resp.ErrMsg("IP whitelist mismatch")) + return + } + + // 生成登录预授权码 + code := s.oauth2Service.CreateCode() + + redirectURL := fmt.Sprintf("%s?code=%s&state=%s", query.RedirectUrl, code, query.State) + c.Redirect(302, redirectURL) +} + +// Tooken 通过授权码获取访问令牌 +// +// POST /token +func (s Oauth2Controller) Token(c *gin.Context) { + var body model.TokenBody + if err := c.ShouldBindBodyWithJSON(&body); err != nil { + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) + return + } + if body.GrantType != "authorization_code" || body.Code == "" { + c.JSON(422, resp.CodeMsg(422002, "grantType or code error")) + return + } + + // 当前请求信息 + ipaddr, location := reqctx.IPAddrLocation(c) + os, browser := reqctx.UaOsBrowser(c) + + // 校验验证码 根据错误信息,创建系统访问记录 + if err := s.oauth2Service.ValidateCode(body.Code); err != nil { + msg := fmt.Sprintf("%s code %s", err.Error(), body.Code) + s.oauth2LogLoginService.Insert( + body.ClientId, constants.STATUS_NO, msg, + [4]string{ipaddr, location, os, browser}, + ) + c.JSON(200, resp.ErrMsg(err.Error())) + return + } + + // 登录客户端信息 + info, err := s.oauth2Service.ByClient(body.ClientId, body.ClientSecret) + if err != nil { + s.oauth2LogLoginService.Insert( + body.ClientId, constants.STATUS_NO, err.Error(), + [4]string{ipaddr, location, os, browser}, + ) + c.JSON(200, resp.ErrMsg(err.Error())) + return + } + deviceFingerprint := reqctx.DeviceFingerprint(c, info.ClientId) + + // 生成访问令牌 + accessToken, expiresIn := token.Oauth2TokenCreate(info.ClientId, deviceFingerprint, "access") + if accessToken == "" || expiresIn == 0 { + c.JSON(200, resp.ErrMsg("token generation failed")) + return + } + // 生成刷新令牌 + refreshToken, refreshExpiresIn := token.Oauth2TokenCreate(info.ClientId, deviceFingerprint, "refresh") + + // 记录令牌,创建系统访问记录 + token.Oauth2InfoCreate(&info, deviceFingerprint, [4]string{ipaddr, location, os, browser}) + s.oauth2Service.UpdateLoginDateAndIP(info) + s.oauth2LogLoginService.Insert( + body.ClientId, constants.STATUS_YES, "Authorization successful", + [4]string{ipaddr, location, os, browser}, + ) + + c.JSON(200, resp.OkData(map[string]any{ + "tokenType": constants.HEADER_PREFIX, + "accessToken": accessToken, + "expiresIn": expiresIn, + "refreshToken": refreshToken, + "refreshExpiresIn": refreshExpiresIn, + })) +} + +// RefreshToken 通过刷新令牌续期访问令牌 +// +// POST /refresh-token +func (s Oauth2Controller) RefreshToken(c *gin.Context) { + var body model.TokenBody + if err := c.ShouldBindBodyWithJSON(&body); err != nil { + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) + return + } + if body.GrantType != "refresh_token" || body.RefreshToken == "" { + c.JSON(422, resp.CodeMsg(422002, "grantType or refreshToken error")) + return + } + + // 验证刷新令牌是否有效 + claims, err := token.Oauth2TokenVerify(body.RefreshToken, "refresh") + if err != nil { + c.JSON(401, resp.CodeMsg(401001, err.Error())) + return + } + clientId := fmt.Sprint(claims[constants.JWT_CLIENT_ID]) + + // 客户端信息 + info, err := s.oauth2Service.ByClient(body.ClientId, body.ClientSecret) + if err != nil { + c.JSON(200, resp.ErrMsg(err.Error())) + return + } + + // 客户端ID是否一致 + if clientId != body.ClientId { + c.JSON(200, resp.ErrMsg("clientId mismatch")) + return + } + // 设备指纹信息是否一致 + deviceId := fmt.Sprint(claims[constants.JWT_DEVICE_ID]) + deviceFingerprint := reqctx.DeviceFingerprint(c, clientId) + if deviceId != deviceFingerprint { + c.JSON(200, resp.ErrMsg("device fingerprint mismatch")) + return + } + + // 生成访问令牌 + accessToken, expiresIn := token.Oauth2TokenCreate(clientId, deviceFingerprint, "access") + if accessToken == "" || expiresIn == 0 { + c.JSON(200, resp.ErrMsg("token generation failed")) + return + } + // 生成刷新令牌 + now := time.Now() + exp, _ := claims.GetExpirationTime() + iat, _ := claims.GetIssuedAt() + refreshExpiresIn := int64(exp.Sub(now).Seconds()) + refreshToken := body.RefreshToken + + // 如果当前时间大于过期时间的一半,则生成新令牌 + halfExp := exp.Add(-(exp.Sub(iat.Time)) / 2) + if now.After(halfExp) { + refreshToken, refreshExpiresIn = token.Oauth2TokenCreate(clientId, deviceFingerprint, "refresh") + } + + // 当前请求信息 + ipaddr, location := reqctx.IPAddrLocation(c) + os, browser := reqctx.UaOsBrowser(c) + // 记录令牌,创建系统访问记录 + token.Oauth2InfoCreate(&info, deviceFingerprint, [4]string{ipaddr, location, os, browser}) + s.oauth2Service.UpdateLoginDateAndIP(info) + s.oauth2LogLoginService.Insert( + info.ClientId, constants.STATUS_YES, "Refresh Access Token Succeeded", + [4]string{ipaddr, location, os, browser}, + ) + + // 返回访问令牌和刷新令牌 + c.JSON(200, resp.OkData(map[string]any{ + "tokenType": constants.HEADER_PREFIX, + "accessToken": accessToken, + "expiresIn": expiresIn, + "refreshToken": refreshToken, + "refreshExpiresIn": refreshExpiresIn, + })) +} diff --git a/src/modules/oauth2/controller/oauth2_client.go b/src/modules/oauth2/controller/oauth2_client.go new file mode 100644 index 00000000..ca7a7061 --- /dev/null +++ b/src/modules/oauth2/controller/oauth2_client.go @@ -0,0 +1,152 @@ +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" + "be.ems/src/framework/utils/parse" + "be.ems/src/modules/oauth2/model" + "be.ems/src/modules/oauth2/service" +) + +// NewOauth2Client 实例化控制层 +var NewOauth2Client = &Oauth2ClientController{ + oauth2ClientService: service.NewOauth2ClientService, +} + +// Oauth2ClientController 客户端授权管理 控制层处理 +// +// PATH /oauth2/client +type Oauth2ClientController struct { + oauth2ClientService *service.Oauth2ClientService // 用户授权第三方应用信息服务 +} + +// List 列表 +// +// GET /list +func (s Oauth2ClientController) List(c *gin.Context) { + query := reqctx.QueryMap(c) + rows, total := s.oauth2ClientService.FindByPage(query) + c.JSON(200, resp.OkData(map[string]any{"rows": rows, "total": total})) +} + +// Info 信息 +// +// GET /:clientId +func (s Oauth2ClientController) Info(c *gin.Context) { + clientId := c.Param("clientId") + if clientId == "" { + c.JSON(422, resp.CodeMsg(422002, "bind err: clientId is empty")) + return + } + + info := s.oauth2ClientService.FindByClientId(clientId) + if info.ClientId == "" || info.ClientId != clientId { + c.JSON(200, resp.ErrMsg("clientId does not exist")) + return + } + c.JSON(200, resp.OkData(info)) +} + +// Add 新增 +// +// POST / +func (s Oauth2ClientController) Add(c *gin.Context) { + var body model.Oauth2Client + if err := c.ShouldBindBodyWithJSON(&body); err != nil { + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) + return + } + if body.Id > 0 { + c.JSON(422, resp.CodeMsg(422002, "bind err: id not is empty")) + return + } + + localHost := strings.Contains(body.IPWhite, "127.0.0.1") || strings.Contains(body.IPWhite, "localhost") || strings.Contains(body.IPWhite, "::1") + if localHost || strings.Contains(body.IPWhite, "::ffff:") { + c.JSON(200, resp.ErrMsg("no support local host")) + return + } + + body.CreateBy = reqctx.LoginUserToUserName(c) + insertId := s.oauth2ClientService.Insert(body) + if insertId > 0 { + c.JSON(200, resp.OkData(insertId)) + return + } + c.JSON(200, resp.Err(nil)) +} + +// Edit 更新 +// +// PUT / +func (s Oauth2ClientController) Edit(c *gin.Context) { + var body model.Oauth2Client + if err := c.ShouldBindBodyWithJSON(&body); err != nil { + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) + return + } + if body.Id <= 0 { + c.JSON(422, resp.CodeMsg(422002, "bind err: id is empty")) + return + } + + localHost := strings.Contains(body.IPWhite, "127.0.0.1") || strings.Contains(body.IPWhite, "localhost") || strings.Contains(body.IPWhite, "::1") + if localHost || strings.Contains(body.IPWhite, "::ffff:") { + c.JSON(200, resp.ErrMsg("no support local host")) + return + } + + // 查询信息 + info := s.oauth2ClientService.FindById(body.Id) + if info.ClientId == "" || info.Id != body.Id { + c.JSON(200, resp.ErrMsg("modification failed, data not exist")) + return + } + + info.Title = body.Title + info.IPWhite = body.IPWhite + info.Remark = body.Remark + info.UpdateBy = reqctx.LoginUserToUserName(c) + rowsAffected := s.oauth2ClientService.Update(info) + if rowsAffected > 0 { + c.JSON(200, resp.Ok(nil)) + return + } + c.JSON(200, resp.Err(nil)) +} + +// Remove 删除 +// +// DELETE /:id +func (s Oauth2ClientController) Remove(c *gin.Context) { + language := reqctx.AcceptLanguage(c) + id := c.Param("id") + if id == "" { + c.JSON(422, resp.CodeMsg(422002, "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.oauth2ClientService.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/oauth2/model/code_query.go b/src/modules/oauth2/model/code_query.go new file mode 100644 index 00000000..9c32a195 --- /dev/null +++ b/src/modules/oauth2/model/code_query.go @@ -0,0 +1,8 @@ +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/model/oauth2_client.go b/src/modules/oauth2/model/oauth2_client.go new file mode 100644 index 00000000..df8bc8ea --- /dev/null +++ b/src/modules/oauth2/model/oauth2_client.go @@ -0,0 +1,22 @@ +package model + +// Oauth2Client 用户授权第三方应用表 oauth2_client +type Oauth2Client struct { + Id int64 `gorm:"column:id;primaryKey;autoIncrement" json:"id"` // 应用ID + ClientId string `gorm:"column:client_id" json:"clientId"` // 应用的唯一标识 + ClientSecret string `gorm:"column:client_secret" json:"clientSecret"` // 应用的凭证秘钥 + Title string `gorm:"column:title" json:"title"` // 应用名称 + IPWhite string `gorm:"column:ip_white" json:"ipWhite"` // IP白名单 + DelFlag string `gorm:"column:del_flag" json:"delFlag"` // 删除标记(0存在 1删除) + LoginIp string `gorm:"column:login_ip" json:"loginIp"` // 最后登录IP + LoginTime int64 `gorm:"column:login_time" json:"loginTime"` // 最后登录时间 + 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 (*Oauth2Client) TableName() string { + return "oauth2_client" +} diff --git a/src/modules/oauth2/model/oauth2_log_login.go b/src/modules/oauth2/model/oauth2_log_login.go new file mode 100644 index 00000000..724202ab --- /dev/null +++ b/src/modules/oauth2/model/oauth2_log_login.go @@ -0,0 +1,19 @@ +package model + +// Oauth2LogLogin 用户授权第三方应用登录日志表 +type Oauth2LogLogin struct { + ID int64 `json:"id" gorm:"column:id;primaryKey;autoIncrement"` // 登录ID + ClientId string `json:"clientId" gorm:"column:client_id"` // 应用的唯一标识 + LoginIp string `json:"loginIp" gorm:"column:login_ip"` // 登录IP地址 + LoginLocation string `json:"loginLocation" gorm:"column:login_location"` // 登录地点 + Browser string `json:"browser" gorm:"column:browser"` // 浏览器类型 + OS string `json:"os" gorm:"column:os"` // 操作系统 + StatusFlag string `json:"statusFlag" gorm:"column:status_flag"` // 登录状态(0失败 1成功) + Msg string `json:"msg" gorm:"column:msg"` // 提示消息 + LoginTime int64 `json:"loginTime" gorm:"column:login_time"` // 登录时间 +} + +// TableName 表名称 +func (*Oauth2LogLogin) TableName() string { + return "oauth2_log_login" +} diff --git a/src/modules/oauth2/model/token_body.go b/src/modules/oauth2/model/token_body.go new file mode 100644 index 00000000..2f82ab8f --- /dev/null +++ b/src/modules/oauth2/model/token_body.go @@ -0,0 +1,10 @@ +package model + +// TokenBody 获取访问令牌参数 +type TokenBody struct { + ClientId string `json:"clientId" binding:"required"` // 申请应用时获得的client_id + ClientSecret string `json:"clientSecret" binding:"required"` // 申请应用时分配的secret + GrantType string `json:"grantType" binding:"required,oneof=authorization_code refresh_token"` // 请求的类型,此处的值固定为 authorization_code/refresh_token + Code string `json:"code"` // 授权拿到的code值 + RefreshToken string `json:"refreshToken"` // 刷新令牌 +} diff --git a/src/modules/oauth2/oauth2.go b/src/modules/oauth2/oauth2.go new file mode 100644 index 00000000..edf1e10a --- /dev/null +++ b/src/modules/oauth2/oauth2.go @@ -0,0 +1,83 @@ +package oauth2 + +import ( + "github.com/gin-gonic/gin" + + "be.ems/src/framework/logger" + "be.ems/src/framework/middleware" + monitorController "be.ems/src/modules/monitor/controller" + "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, + ) + } + + // ==== 开放接口 ==== + + openApiGroup := router.Group("/open-api") + { + openApiGroup.GET("/monitor/system", + middleware.AuthorizeOauth2(nil), + monitorController.NewSystem.Info, + ) + } + +} diff --git a/src/modules/oauth2/repository/oauth2_client.go b/src/modules/oauth2/repository/oauth2_client.go new file mode 100644 index 00000000..1c7253c4 --- /dev/null +++ b/src/modules/oauth2/repository/oauth2_client.go @@ -0,0 +1,168 @@ +package repository + +import ( + "fmt" + "time" + + "be.ems/src/framework/database/db" + "be.ems/src/framework/logger" + "be.ems/src/modules/oauth2/model" +) + +// NewOauth2Client 实例化数据层 +var NewOauth2Client = &Oauth2Client{} + +// Oauth2Client 用户授权第三方应用表 数据层处理 +type Oauth2Client struct{} + +// SelectByPage 分页查询集合 +func (r Oauth2Client) SelectByPage(query map[string]string) ([]model.Oauth2Client, int64) { + tx := db.DB("").Model(&model.Oauth2Client{}) + tx = tx.Where("del_flag = 0") + // 查询条件拼接 + if v, ok := query["clientId"]; ok && v != "" { + tx = tx.Where("client_id = ?", v) + } + if v, ok := query["title"]; ok && v != "" { + tx = tx.Where("title like ?", v+"%") + } + if v, ok := query["beginTime"]; ok && v != "" { + if len(v) == 10 { + v = fmt.Sprintf("%s000", v) + tx = tx.Where("login_time >= ?", v) + } else if len(v) == 13 { + tx = tx.Where("login_time >= ?", v) + } + } + if v, ok := query["endTime"]; ok && v != "" { + if len(v) == 10 { + v = fmt.Sprintf("%s999", v) + tx = tx.Where("login_time <= ?", v) + } else if len(v) == 13 { + tx = tx.Where("login_time <= ?", v) + } + } + + // 查询结果 + var total int64 = 0 + rows := []model.Oauth2Client{} + + // 查询数量为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 Oauth2Client) Select(param model.Oauth2Client) []model.Oauth2Client { + tx := db.DB("").Model(&model.Oauth2Client{}) + // 查询条件拼接 + if param.ClientId != "" { + tx = tx.Where("client_id = ?", param.ClientId) + } + if param.Title != "" { + tx = tx.Where("title like ?", param.Title+"%") + } + + // 查询数据 + rows := []model.Oauth2Client{} + if err := tx.Find(&rows).Error; err != nil { + return rows + } + return rows +} + +// SelectByIds 通过ID查询信息 +func (r Oauth2Client) SelectByIds(ids []int64) []model.Oauth2Client { + rows := []model.Oauth2Client{} + if len(ids) <= 0 { + return rows + } + tx := db.DB("").Model(&model.Oauth2Client{}) + // 构建查询条件 + tx = tx.Where("id in ? and del_flag = 0", 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 Oauth2Client) Insert(param model.Oauth2Client) int64 { + if param.CreateBy != "" { + ms := time.Now().UnixMilli() + param.UpdateBy = param.CreateBy + param.UpdateTime = ms + param.CreateTime = ms + param.DelFlag = "0" + } + // 执行插入 + if err := db.DB("").Create(¶m).Error; err != nil { + logger.Errorf("insert err => %v", err.Error()) + return 0 + } + return param.Id +} + +// Update 修改信息 返回受影响行数 +func (r Oauth2Client) Update(param model.Oauth2Client) int64 { + if param.Id <= 0 { + return 0 + } + if param.UpdateBy != "" { + param.UpdateTime = time.Now().UnixMilli() + } + tx := db.DB("").Model(&model.Oauth2Client{}) + // 构建查询条件 + tx = tx.Where("id = ?", param.Id) + tx = tx.Omit("id", "del_flag", "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 Oauth2Client) DeleteByIds(ids []int64) int64 { + if len(ids) <= 0 { + return 0 + } + tx := db.DB("").Model(&model.Oauth2Client{}) + // 构建查询条件 + tx = tx.Where("id in ?", ids) + // 执行更新删除标记 + if err := tx.Update("del_flag", "1").Error; err != nil { + logger.Errorf("update err => %v", err.Error()) + return 0 + } + return tx.RowsAffected +} + +// SelectByClientId 通过clientId查询 +func (r Oauth2Client) SelectByClientId(clientId string) model.Oauth2Client { + item := model.Oauth2Client{} + if clientId == "" { + return item + } + tx := db.DB("").Model(&model.Oauth2Client{}) + // 构建查询条件 + tx = tx.Where("client_id = ? and del_flag = '0'", clientId) + // 查询数据 + if err := tx.Find(&item).Error; err != nil { + return item + } + return item +} diff --git a/src/modules/oauth2/repository/oauth2_log_login.go b/src/modules/oauth2/repository/oauth2_log_login.go new file mode 100644 index 00000000..f712b9d4 --- /dev/null +++ b/src/modules/oauth2/repository/oauth2_log_login.go @@ -0,0 +1,117 @@ +package repository + +import ( + "fmt" + "strings" + "time" + + "be.ems/src/framework/database/db" + "be.ems/src/framework/logger" + "be.ems/src/modules/oauth2/model" +) + +// NewOauth2LogLogin 实例化数据层 +var NewOauth2LogLogin = &Oauth2LogLoginRepository{} + +// Oauth2LogLoginRepository 用户授权第三方应用登录日志表 数据层处理 +type Oauth2LogLoginRepository struct{} + +// SelectByPage 分页查询集合 +func (r Oauth2LogLoginRepository) SelectByPage(query map[string]string) ([]model.Oauth2LogLogin, int64) { + tx := db.DB("").Model(&model.Oauth2LogLogin{}) + // 查询条件拼接 + if v, ok := query["loginIp"]; ok && v != "" { + tx = tx.Where("login_ip like ?", v+"%") + } + if v, ok := query["clientId"]; ok && v != "" { + tx = tx.Where("client_id = ?", v) + } + if v, ok := query["statusFlag"]; ok && v != "" { + tx = tx.Where("status_flag = ?", v) + } + if v, ok := query["beginTime"]; ok && v != "" { + if len(v) == 10 { + v = fmt.Sprintf("%s000", v) + tx = tx.Where("login_time >= ?", v) + } else if len(v) == 13 { + tx = tx.Where("login_time >= ?", v) + } + } + if v, ok := query["endTime"]; ok && v != "" { + if len(v) == 10 { + v = fmt.Sprintf("%s999", v) + tx = tx.Where("login_time <= ?", v) + } else if len(v) == 13 { + tx = tx.Where("login_time <= ?", v) + } + } + + // 查询结果 + var total int64 = 0 + rows := []model.Oauth2LogLogin{} + + // 查询数量为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) + // 排序 + sortByStr, sortOk := query["sortBy"] + sortOrderStr, orderOk := query["sortOrder"] + if sortOk && sortByStr != "" && orderOk && sortOrderStr != "" { + sortByArr := strings.Split(sortByStr, ",") + sortOrderArr := strings.Split(sortOrderStr, ",") + for i := range sortByArr { + sortBy := sortByArr[i] + sortOrder := sortOrderArr[i] + // 排序字段 + sort := "id" + if sortBy == "loginIp" { + sort = "login_ip" + } else if sortBy == "createTime" { + sort = "create_time" + } + // 排序方式 + order := "ASC" + if strings.HasPrefix(sortOrder, "asc") { + order = "ASC" + } else if strings.HasPrefix(sortOrder, "desc") { + order = "DESC" + } + tx = tx.Order(fmt.Sprintf("%s %s", sort, order)) + } + } else { + tx = tx.Order("id desc") + } + // 查询数据 + 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 Oauth2LogLoginRepository) Insert(param model.Oauth2LogLogin) int64 { + param.LoginTime = time.Now().UnixMilli() + // 执行插入 + if err := db.DB("").Create(¶m).Error; err != nil { + logger.Errorf("insert err => %v", err.Error()) + return 0 + } + return param.ID +} + +// Clean 清空信息 +func (r Oauth2LogLoginRepository) Clean() int64 { + tx := db.DB("").Delete(&model.Oauth2LogLogin{}) + if err := tx.Error; err != nil { + logger.Errorf("delete err => %v", err.Error()) + return 0 + } + return tx.RowsAffected +} diff --git a/src/modules/oauth2/service/oauth2.go b/src/modules/oauth2/service/oauth2.go new file mode 100644 index 00000000..40293622 --- /dev/null +++ b/src/modules/oauth2/service/oauth2.go @@ -0,0 +1,86 @@ +package service + +import ( + "fmt" + "strings" + "time" + + "be.ems/src/framework/constants" + "be.ems/src/framework/database/redis" + "be.ems/src/framework/token" + "be.ems/src/framework/utils/crypto" + "be.ems/src/framework/utils/generate" + "be.ems/src/modules/oauth2/model" + "be.ems/src/modules/oauth2/repository" +) + +// NewOauth2Service 实例化服务层 +var NewOauth2Service = &Oauth2Service{ + oauth2ClientRepository: repository.NewOauth2Client, +} + +// Oauth2Service 用户授权第三方应用信息 服务层处理 +type Oauth2Service struct { + oauth2ClientRepository *repository.Oauth2Client // 用户授权第三方应用表 +} + +// CreateCode 创建授权码 +func (s Oauth2Service) CreateCode() string { + code := generate.Code(8) + uuid := crypto.MD5(code) + verifyKey := constants.CACHE_OAUTH2_CODE + ":" + uuid + // 授权码有效期,单位秒 + codeExpiration := 2 * 60 * time.Second + _ = redis.Set("", verifyKey, code, codeExpiration) + return code +} + +// ValidateCode 校验授权码 +func (s Oauth2Service) ValidateCode(code string) error { + if len(code) > 16 { + return fmt.Errorf("code length error") + } + uuid := crypto.MD5(code) + verifyKey := constants.CACHE_OAUTH2_CODE + ":" + uuid + captcha, _ := redis.Get("", verifyKey) + if captcha == "" { + return fmt.Errorf("code expire") + } + _ = redis.Del("", verifyKey) + if captcha != strings.ToLower(code) { + return fmt.Errorf("code error") + } + return nil +} + +// ByClient 客户端信息 +func (s Oauth2Service) ByClient(clientId, clientSecret string) (token.Oauth2Info, error) { + info := token.Oauth2Info{} + + // 查询用户登录账号 + var item model.Oauth2Client + rows := s.oauth2ClientRepository.Select(model.Oauth2Client{ + ClientId: clientId, + ClientSecret: clientSecret, + }) + if len(rows) > 0 { + item = rows[0] + } + if item.ClientId == "" { + return info, fmt.Errorf("clientId or clientSecret is not exist") + } + + info.ClientId = clientId + // 用户权限组标识 + info.Scope = []string{} + return info, nil +} + +// UpdateLoginDateAndIP 更新登录时间和IP +func (s Oauth2Service) UpdateLoginDateAndIP(info token.Oauth2Info) bool { + item := s.oauth2ClientRepository.SelectByClientId(info.ClientId) + item.LoginIp = info.LoginIp + item.LoginTime = info.LoginTime + rows := s.oauth2ClientRepository.Update(item) + return rows > 0 +} diff --git a/src/modules/oauth2/service/oauth2_client.go b/src/modules/oauth2/service/oauth2_client.go new file mode 100644 index 00000000..6edc055f --- /dev/null +++ b/src/modules/oauth2/service/oauth2_client.go @@ -0,0 +1,65 @@ +package service + +import ( + "fmt" + + "be.ems/src/framework/utils/generate" + "be.ems/src/modules/oauth2/model" + "be.ems/src/modules/oauth2/repository" +) + +// NewOauth2ClientService 实例化服务层 +var NewOauth2ClientService = &Oauth2ClientService{ + oauth2ClientRepository: repository.NewOauth2Client, +} + +// Oauth2ClientService 用户授权第三方应用信息 服务层处理 +type Oauth2ClientService struct { + oauth2ClientRepository *repository.Oauth2Client // 用户授权第三方应用表 +} + +// FindByPage 分页查询 +func (s Oauth2ClientService) FindByPage(query map[string]string) ([]model.Oauth2Client, int64) { + return s.oauth2ClientRepository.SelectByPage(query) +} + +// FindById 查询ID +func (s Oauth2ClientService) FindById(id int64) model.Oauth2Client { + rows := s.oauth2ClientRepository.SelectByIds([]int64{id}) + if len(rows) > 0 { + return rows[0] + } + return model.Oauth2Client{} +} + +// FindByClientId 查询ClientId +func (s Oauth2ClientService) FindByClientId(clientId string) model.Oauth2Client { + return s.oauth2ClientRepository.SelectByClientId(clientId) +} + +// Insert 新增 +func (s Oauth2ClientService) Insert(param model.Oauth2Client) int64 { + param.ClientId = generate.Code(16) + param.ClientSecret = generate.Code(32) + return s.oauth2ClientRepository.Insert(param) +} + +// Update 更新 +func (s Oauth2ClientService) Update(param model.Oauth2Client) int64 { + return s.oauth2ClientRepository.Update(param) +} + +// DeleteByIds 批量删除 +func (s Oauth2ClientService) DeleteByIds(ids []int64) (int64, error) { + // 检查是否存在 + arr := s.oauth2ClientRepository.SelectByIds(ids) + if len(arr) <= 0 { + // return 0, fmt.Errorf("没有权限访问用户授权第三方应用数据!") + return 0, fmt.Errorf("No permission to access user-authorized third-party application data!") + } + if len(arr) == len(ids) { + return s.oauth2ClientRepository.DeleteByIds(ids), nil + } + // return 0, fmt.Errorf("删除用户授权第三方应用信息失败!") + return 0, fmt.Errorf("Failed to delete user-authorized third-party application information!") +} diff --git a/src/modules/oauth2/service/oauth2_log_login.go b/src/modules/oauth2/service/oauth2_log_login.go new file mode 100644 index 00000000..e400fa9c --- /dev/null +++ b/src/modules/oauth2/service/oauth2_log_login.go @@ -0,0 +1,85 @@ +package service + +import ( + "strconv" + + "be.ems/src/framework/constants" + "be.ems/src/framework/utils/date" + "be.ems/src/framework/utils/file" + "be.ems/src/modules/oauth2/model" + "be.ems/src/modules/oauth2/repository" +) + +// NewOauth2LogLogin 实例化服务层 +var NewOauth2LogLogin = &Oauth2LogLoginService{ + oauth2LogLoginRepository: repository.NewOauth2LogLogin, +} + +// Oauth2LogLogin 用户授权第三方应用登录日志 服务层处理 +type Oauth2LogLoginService struct { + oauth2LogLoginRepository *repository.Oauth2LogLoginRepository // 用户授权第三方应用登录日志信息 +} + +// FindByPage 分页查询列表数据 +func (s Oauth2LogLoginService) FindByPage(query map[string]string) ([]model.Oauth2LogLogin, int64) { + return s.oauth2LogLoginRepository.SelectByPage(query) +} + +// Insert 新增信息 +func (s Oauth2LogLoginService) Insert(clientId, status, msg string, ilobArr [4]string) int64 { + sysOauth2LogLogin := model.Oauth2LogLogin{ + LoginIp: ilobArr[0], + LoginLocation: ilobArr[1], + OS: ilobArr[2], + Browser: ilobArr[3], + ClientId: clientId, + StatusFlag: status, + Msg: msg, + } + return s.oauth2LogLoginRepository.Insert(sysOauth2LogLogin) +} + +// Clean 清空用户授权第三方应用登录日志 +func (s Oauth2LogLoginService) Clean() int64 { + return s.oauth2LogLoginRepository.Clean() +} + +// ExportData 导出数据表格 +func (s Oauth2LogLoginService) ExportData(rows []model.Oauth2LogLogin, fileName string) (string, error) { + // 第一行表头标题 + headerCells := map[string]string{ + "A1": "序号", + "B1": "应用的唯一标识", + "C1": "登录状态", + "D1": "登录地址", + "E1": "登录地点", + "F1": "浏览器", + "G1": "操作系统", + "H1": "提示消息", + "I1": "访问时间", + } + // 从第二行开始的数据 + dataCells := make([]map[string]any, 0) + for i, row := range rows { + idx := strconv.Itoa(i + 2) + // 状态 + statusValue := "失败" + if row.StatusFlag == constants.STATUS_YES { + statusValue = "成功" + } + dataCells = append(dataCells, map[string]any{ + "A" + idx: row.ID, + "B" + idx: row.ClientId, + "C" + idx: statusValue, + "D" + idx: row.LoginIp, + "E" + idx: row.LoginLocation, + "F" + idx: row.Browser, + "G" + idx: row.OS, + "H" + idx: row.Msg, + "I" + idx: date.ParseDateToStr(row.LoginTime, date.YYYY_MM_DD_HH_MM_SS), + }) + } + + // 导出数据表格 + return file.WriteSheet(headerCells, dataCells, fileName, "") +} diff --git a/src/modules/system/controller/sys_config.go b/src/modules/system/controller/sys_config.go index 1010ae84..363136b4 100644 --- a/src/modules/system/controller/sys_config.go +++ b/src/modules/system/controller/sys_config.go @@ -74,7 +74,7 @@ func (s *SysConfigController) Info(c *gin.Context) { language := reqctx.AcceptLanguage(c) configId := parse.Number(c.Param("configId")) if configId <= 0 { - c.JSON(400, resp.CodeMsg(40010, "bind err: configId is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: configId is empty")) return } @@ -98,11 +98,11 @@ func (s *SysConfigController) Add(c *gin.Context) { var body model.SysConfig if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } if body.ConfigId > 0 { - c.JSON(400, resp.CodeMsg(40010, "bind err: configId not is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: configId not is empty")) return } @@ -132,11 +132,11 @@ func (s *SysConfigController) Edit(c *gin.Context) { var body model.SysConfig if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } if body.ConfigId <= 0 { - c.JSON(400, resp.CodeMsg(40010, "bind err: configId is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: configId is empty")) return } @@ -197,7 +197,7 @@ func (s SysConfigController) Remove(c *gin.Context) { language := reqctx.AcceptLanguage(c) configId := c.Param("configId") if configId == "" { - c.JSON(400, resp.CodeMsg(40010, "bind err: configId is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: configId is empty")) return } @@ -234,7 +234,7 @@ func (s SysConfigController) Refresh(c *gin.Context) { func (s SysConfigController) ConfigKey(c *gin.Context) { configKey := c.Param("configKey") if configKey == "" { - c.JSON(400, resp.CodeMsg(40010, "bind err: configKey is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: configKey is empty")) return } key := s.sysConfigService.FindValueByKey(configKey) @@ -255,7 +255,7 @@ func (s SysConfigController) Export(c *gin.Context) { rows, total := s.sysConfigService.FindByPage(query) if total == 0 { // c.JSON(200, resp.CodeMsg(40016, "export data record as empty")) - c.JSON(200, resp.CodeMsg(40016, i18n.TKey(language, "app.common.exportEmpty"))) + c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.exportEmpty"))) return } @@ -319,7 +319,7 @@ func (s *SysConfigController) ConfigValue(c *gin.Context) { } if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } diff --git a/src/modules/system/controller/sys_dept.go b/src/modules/system/controller/sys_dept.go index 9fe5c83d..e7d644c0 100644 --- a/src/modules/system/controller/sys_dept.go +++ b/src/modules/system/controller/sys_dept.go @@ -54,7 +54,7 @@ func (s *SysDeptController) List(c *gin.Context) { } if err := c.ShouldBindQuery(&query); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -90,7 +90,7 @@ func (s SysDeptController) Info(c *gin.Context) { language := reqctx.AcceptLanguage(c) deptId := parse.Number(c.Param("deptId")) if deptId <= 0 { - c.JSON(400, resp.CodeMsg(40010, "bind err: deptId is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: deptId is empty")) return } data := s.sysDeptService.FindById(deptId) @@ -111,11 +111,11 @@ func (s SysDeptController) Add(c *gin.Context) { var body model.SysDept if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } if body.DeptId > 0 { - c.JSON(400, resp.CodeMsg(40010, "bind err: deptId not is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: deptId not is empty")) return } @@ -169,11 +169,11 @@ func (s SysDeptController) Edit(c *gin.Context) { var body model.SysDept if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } if body.DeptId <= 0 { - c.JSON(400, resp.CodeMsg(40010, "bind err: deptId is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: deptId is empty")) return } @@ -253,7 +253,7 @@ func (s SysDeptController) Remove(c *gin.Context) { language := reqctx.AcceptLanguage(c) deptId := parse.Number(c.Param("deptId")) if deptId <= 0 { - c.JSON(400, resp.CodeMsg(40010, "bind err: deptId is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: deptId is empty")) return } @@ -299,7 +299,7 @@ func (s SysDeptController) Remove(c *gin.Context) { func (s *SysDeptController) ExcludeChild(c *gin.Context) { deptIdStr := c.Param("deptId") if deptIdStr == "" { - c.JSON(400, resp.CodeMsg(40010, "bind err: deptId is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: deptId is empty")) return } deptId := parse.Number(deptIdStr) @@ -333,7 +333,7 @@ func (s *SysDeptController) Tree(c *gin.Context) { } if err := c.ShouldBindQuery(&query); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } sysDept := model.SysDept{ @@ -367,7 +367,7 @@ func (s *SysDeptController) TreeRole(c *gin.Context) { language := reqctx.AcceptLanguage(c) roleId := parse.Number(c.Param("roleId")) if roleId <= 0 { - c.JSON(400, resp.CodeMsg(40010, "bind err: roleId is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: roleId is empty")) return } diff --git a/src/modules/system/controller/sys_dict_data.go b/src/modules/system/controller/sys_dict_data.go index 0fc194dd..f38d5c8b 100644 --- a/src/modules/system/controller/sys_dict_data.go +++ b/src/modules/system/controller/sys_dict_data.go @@ -78,7 +78,7 @@ func (s SysDictDataController) Info(c *gin.Context) { language := reqctx.AcceptLanguage(c) dataId := parse.Number(c.Param("dataId")) if dataId <= 0 { - c.JSON(400, resp.CodeMsg(40010, "bind err: deptId is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: deptId is empty")) return } data := s.sysDictDataService.FindById(dataId) @@ -102,11 +102,11 @@ func (s SysDictDataController) Add(c *gin.Context) { var body model.SysDictData if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } if body.DataId > 0 { - c.JSON(400, resp.CodeMsg(40010, "bind err: dataId not is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: dataId not is empty")) return } @@ -153,11 +153,11 @@ func (s SysDictDataController) Edit(c *gin.Context) { var body model.SysDictData if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } if body.DataId <= 0 { - c.JSON(400, resp.CodeMsg(40010, "bind err: dataId is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: dataId is empty")) return } @@ -232,7 +232,7 @@ func (s SysDictDataController) Remove(c *gin.Context) { language := reqctx.AcceptLanguage(c) dataId := c.Param("dataId") if dataId == "" { - c.JSON(400, resp.CodeMsg(40010, "bind err: dataId is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: dataId is empty")) return } @@ -261,7 +261,7 @@ func (s SysDictDataController) DictType(c *gin.Context) { language := reqctx.AcceptLanguage(c) dictType := c.Param("dictType") if dictType == "" { - c.JSON(400, resp.CodeMsg(40010, "bind err: dictType is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: dictType is empty")) return } @@ -289,7 +289,7 @@ func (s SysDictDataController) Export(c *gin.Context) { rows, total := s.sysDictDataService.FindByPage(query) if total == 0 { // c.JSON(200, resp.CodeMsg(40016, "export data record as empty")) - c.JSON(200, resp.CodeMsg(40016, i18n.TKey(language, "app.common.exportEmpty"))) + c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.exportEmpty"))) return } diff --git a/src/modules/system/controller/sys_dict_type.go b/src/modules/system/controller/sys_dict_type.go index 6927420f..56aeef84 100644 --- a/src/modules/system/controller/sys_dict_type.go +++ b/src/modules/system/controller/sys_dict_type.go @@ -73,7 +73,7 @@ func (s *SysDictTypeController) Info(c *gin.Context) { language := reqctx.AcceptLanguage(c) dictId := parse.Number(c.Param("dictId")) if dictId <= 0 { - c.JSON(400, resp.CodeMsg(40010, "bind err: dictId is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: dictId is empty")) return } data := s.sysDictTypeService.FindById(dictId) @@ -95,11 +95,11 @@ func (s *SysDictTypeController) Add(c *gin.Context) { var body model.SysDictType if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } if body.DictId > 0 { - c.JSON(400, resp.CodeMsg(40010, "bind err: dictId not is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: dictId not is empty")) return } @@ -138,11 +138,11 @@ func (s *SysDictTypeController) Edit(c *gin.Context) { var body model.SysDictType if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } if body.DictId <= 0 { - c.JSON(400, resp.CodeMsg(40010, "bind err: dictId is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: dictId is empty")) return } @@ -205,7 +205,7 @@ func (s SysDictTypeController) Remove(c *gin.Context) { language := reqctx.AcceptLanguage(c) dictId := c.Param("dictId") if dictId == "" { - c.JSON(400, resp.CodeMsg(40010, "bind err: dictId is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: dictId is empty")) return } @@ -273,7 +273,7 @@ func (s SysDictTypeController) Export(c *gin.Context) { rows, total := s.sysDictTypeService.FindByPage(query) if total == 0 { // c.JSON(200, resp.CodeMsg(40016, "export data record as empty")) - c.JSON(200, resp.CodeMsg(40016, i18n.TKey(language, "app.common.exportEmpty"))) + c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.exportEmpty"))) return } diff --git a/src/modules/system/controller/sys_log_login.go b/src/modules/system/controller/sys_log_login.go index 229d85ea..1231c11e 100644 --- a/src/modules/system/controller/sys_log_login.go +++ b/src/modules/system/controller/sys_log_login.go @@ -10,7 +10,7 @@ import ( "be.ems/src/framework/resp" "be.ems/src/framework/utils/date" "be.ems/src/framework/utils/file" - commonService "be.ems/src/modules/common/service" + authService "be.ems/src/modules/auth/service" "be.ems/src/modules/system/model" "be.ems/src/modules/system/service" @@ -20,15 +20,15 @@ import ( // 实例化控制层 SysLogLoginController 结构体 var NewSysLogLogin = &SysLogLoginController{ sysLogLoginService: service.NewSysLogLogin, - accountService: commonService.NewAccount, + accountService: authService.NewAccount, } // 系统登录日志信息 // // PATH /system/log/login type SysLogLoginController struct { - sysLogLoginService *service.SysLogLogin // 系统登录日志服务 - accountService *commonService.Account // 账号身份操作服务 + sysLogLoginService *service.SysLogLogin // 系统登录日志服务 + accountService *authService.Account // 账号身份操作服务 } // 系统登录日志列表 @@ -81,7 +81,7 @@ func (s SysLogLoginController) Unlock(c *gin.Context) { language := reqctx.AcceptLanguage(c) userName := c.Param("userName") if userName == "" { - c.JSON(400, resp.CodeMsg(40010, "bind err: userName is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: userName is empty")) return } ok := s.accountService.CleanLoginRecordCache(userName) @@ -103,7 +103,7 @@ func (s SysLogLoginController) Export(c *gin.Context) { rows, total := s.sysLogLoginService.FindByPage(query, dataScopeSQL) if total == 0 { // c.JSON(200, resp.CodeMsg(40016, "export data record as empty")) - c.JSON(200, resp.CodeMsg(40016, i18n.TKey(language, "app.common.exportEmpty"))) + c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.exportEmpty"))) return } diff --git a/src/modules/system/controller/sys_log_operate.go b/src/modules/system/controller/sys_log_operate.go index 0da88284..4cc46e62 100644 --- a/src/modules/system/controller/sys_log_operate.go +++ b/src/modules/system/controller/sys_log_operate.go @@ -85,7 +85,7 @@ func (s SysLogOperateController) Export(c *gin.Context) { rows, total := s.sysLogOperateService.FindByPage(query, dataScopeSQL) if total == 0 { // c.JSON(200, resp.CodeMsg(40016, "export data record as empty")) - c.JSON(200, resp.CodeMsg(40016, i18n.TKey(language, "app.common.exportEmpty"))) + c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.exportEmpty"))) return } diff --git a/src/modules/system/controller/sys_menu.go b/src/modules/system/controller/sys_menu.go index a641cceb..75d1ff44 100644 --- a/src/modules/system/controller/sys_menu.go +++ b/src/modules/system/controller/sys_menu.go @@ -82,7 +82,7 @@ func (s *SysMenuController) Info(c *gin.Context) { language := reqctx.AcceptLanguage(c) menuId := parse.Number(c.Param("menuId")) if menuId <= 0 { - c.JSON(400, resp.CodeMsg(40010, "bind err: menuId is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: menuId is empty")) return } @@ -105,11 +105,11 @@ func (s *SysMenuController) Add(c *gin.Context) { var body model.SysMenu if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } if body.MenuId > 0 { - c.JSON(400, resp.CodeMsg(40010, "bind err: menuId not is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: menuId not is empty")) return } @@ -158,11 +158,11 @@ func (s *SysMenuController) Edit(c *gin.Context) { var body model.SysMenu if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } if body.MenuId <= 0 { - c.JSON(400, resp.CodeMsg(40010, "bind err: menuId is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: menuId is empty")) return } @@ -278,7 +278,7 @@ func (s SysMenuController) Remove(c *gin.Context) { language := reqctx.AcceptLanguage(c) menuId := parse.Number(c.Param("menuId")) if menuId <= 0 { - c.JSON(400, resp.CodeMsg(40010, "bind err: menuId is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: menuId is empty")) return } @@ -359,7 +359,7 @@ func (s *SysMenuController) TreeRole(c *gin.Context) { language := reqctx.AcceptLanguage(c) roleId := parse.Number(c.Param("roleId")) if roleId <= 0 { - c.JSON(400, resp.CodeMsg(40010, "bind err: roleId is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: roleId is empty")) return } diff --git a/src/modules/system/controller/sys_post.go b/src/modules/system/controller/sys_post.go index 5a41e3a8..854cfd58 100644 --- a/src/modules/system/controller/sys_post.go +++ b/src/modules/system/controller/sys_post.go @@ -95,11 +95,11 @@ func (s *SysPostController) Add(c *gin.Context) { var body model.SysPost if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } if body.PostId > 0 { - c.JSON(400, resp.CodeMsg(40010, "bind err: postId not is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: postId not is empty")) return } @@ -138,11 +138,11 @@ func (s *SysPostController) Edit(c *gin.Context) { var body model.SysPost if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } if body.PostId <= 0 { - c.JSON(400, resp.CodeMsg(40010, "bind err: postId is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: postId is empty")) return } @@ -206,7 +206,7 @@ func (s SysPostController) Remove(c *gin.Context) { language := reqctx.AcceptLanguage(c) postId := c.Param("postId") if postId == "" { - c.JSON(400, resp.CodeMsg(40010, "bind err: postId is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: postId is empty")) return } @@ -238,7 +238,7 @@ func (s *SysPostController) Export(c *gin.Context) { rows, total := s.sysPostService.FindByPage(query) if total == 0 { // c.JSON(200, resp.CodeMsg(40016, "export data record as empty")) - c.JSON(200, resp.CodeMsg(40016, i18n.TKey(language, "app.common.exportEmpty"))) + c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.exportEmpty"))) return } diff --git a/src/modules/system/controller/sys_profile.go b/src/modules/system/controller/sys_profile.go index 28b3c812..4afbcecf 100644 --- a/src/modules/system/controller/sys_profile.go +++ b/src/modules/system/controller/sys_profile.go @@ -49,7 +49,7 @@ func (s *SysProfileController) Info(c *gin.Context) { language := reqctx.AcceptLanguage(c) loginUser, err := reqctx.LoginUser(c) if err != nil { - c.JSON(401, resp.CodeMsg(401, i18n.TKey(language, err.Error()))) + c.JSON(401, resp.CodeMsg(401002, i18n.TKey(language, err.Error()))) return } @@ -104,18 +104,18 @@ func (s *SysProfileController) UpdateProfile(c *gin.Context) { } if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } // 登录用户信息 - loginUser, err := reqctx.LoginUser(c) + info, err := reqctx.LoginUser(c) if err != nil { - c.JSON(401, resp.CodeMsg(401, i18n.TKey(language, err.Error()))) + c.JSON(401, resp.CodeMsg(401002, err.Error())) return } - userId := loginUser.UserId - userName := loginUser.User.UserName + userId := info.UserId + userName := info.User.UserName // 检查手机号码格式并判断是否唯一 if body.Phone != "" { @@ -172,10 +172,9 @@ func (s *SysProfileController) UpdateProfile(c *gin.Context) { rows := s.sysUserService.Update(userInfo) if rows > 0 { // 更新缓存用户信息 - loginUser.User = userInfo - // 刷新令牌信息 - token.Cache(&loginUser) - + info.User = userInfo + // 更新信息 + token.UserInfoUpdate(info) c.JSON(200, resp.Ok(nil)) return } @@ -194,8 +193,8 @@ func (s *SysProfileController) UpdateProfile(c *gin.Context) { // @Security TokenAuth // @Summary Personal Reset Password // @Description Personal Reset Password -// @Router /system/user/profile/updatePwd [put] -func (s *SysProfileController) UpdatePassword(c *gin.Context) { +// @Router /system/user/profile/password [put] +func (s *SysProfileController) PasswordUpdate(c *gin.Context) { language := reqctx.AcceptLanguage(c) var body struct { OldPassword string `json:"oldPassword" binding:"required"` // 旧密码 @@ -203,17 +202,17 @@ func (s *SysProfileController) UpdatePassword(c *gin.Context) { } if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } // 登录用户信息 - loginUser, err := reqctx.LoginUser(c) + info, err := reqctx.LoginUser(c) if err != nil { - c.JSON(401, resp.CodeMsg(401, i18n.TKey(language, err.Error()))) + c.JSON(401, resp.CodeMsg(401002, err.Error())) return } - userId := loginUser.UserId + userId := info.UserId // 查询当前登录用户信息得到密码值 userInfo := s.sysUserService.FindById(userId) @@ -237,6 +236,13 @@ func (s *SysProfileController) UpdatePassword(c *gin.Context) { return } + // 检查密码是否与历史密码一致 + err = s.sysUserService.ValidatePasswordNotAllowedHistory(userInfo.UserId, body.NewPassword) + if err != nil { + c.JSON(200, resp.ErrMsg(i18n.TKey(language, err.Error()))) + return + } + // 修改新密码 userInfo.Password = body.NewPassword userInfo.UpdateBy = userInfo.UserName @@ -247,3 +253,72 @@ func (s *SysProfileController) UpdatePassword(c *gin.Context) { } c.JSON(200, resp.Err(nil)) } + +// 强制重置密码 +// +// PUT /password-force +func (s *SysProfileController) PasswordForce(c *gin.Context) { + language := reqctx.AcceptLanguage(c) + var body struct { + Password string `json:"password" binding:"required"` + } + if err := c.ShouldBindBodyWithJSON(&body); err != nil { + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) + return + } + + // 检查用户密码策略强度 + ok, errMsg := s.sysUserService.ValidatePasswordPolicy(body.Password, language) + if !ok { + c.JSON(200, resp.ErrMsg(errMsg)) + return + } + + // 登录用户信息 + loginUser, err := reqctx.LoginUser(c) + if err != nil { + c.JSON(401, resp.CodeMsg(401002, i18n.TKey(language, err.Error()))) + return + } + + // 检查是否存在 + userInfo := s.sysUserService.FindById(loginUser.UserId) + if userInfo.UserId != loginUser.UserId { + // c.JSON(200, resp.ErrMsg("没有权限访问用户数据!")) + c.JSON(200, resp.ErrMsg(i18n.TKey(language, "user.noData"))) + 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) + if err != nil { + c.JSON(200, resp.ErrMsg(i18n.TKey(language, err.Error()))) + return + } + + userInfo.Password = body.Password + userInfo.UpdateBy = reqctx.LoginUserToUserName(c) + rows := s.sysUserService.Update(userInfo) + if rows > 0 { + // 更新缓存用户信息 + userInfo.Password = "" + // 移除令牌信息 + token.UserInfoRemove(reqctx.Authorization(c)) + c.JSON(200, resp.Ok(nil)) + return + } + c.JSON(200, resp.Err(nil)) +} diff --git a/src/modules/system/controller/sys_role.go b/src/modules/system/controller/sys_role.go index b1deb673..7c94ffc0 100644 --- a/src/modules/system/controller/sys_role.go +++ b/src/modules/system/controller/sys_role.go @@ -75,7 +75,7 @@ func (s *SysRoleController) Info(c *gin.Context) { language := reqctx.AcceptLanguage(c) roleId := parse.Number(c.Param("roleId")) if roleId <= 0 { - c.JSON(400, resp.CodeMsg(40010, "bind err: roleId is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: roleId is empty")) return } data := s.sysRoleService.FindById(roleId) @@ -96,11 +96,11 @@ func (s *SysRoleController) Add(c *gin.Context) { var body model.SysRole if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } if body.RoleId > 0 { - c.JSON(400, resp.CodeMsg(40010, "bind err: roleId not is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: roleId not is empty")) return } @@ -139,11 +139,11 @@ func (s *SysRoleController) Edit(c *gin.Context) { var body model.SysRole if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } if body.RoleId <= 0 { - c.JSON(400, resp.CodeMsg(40010, "bind err: roleId is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: roleId is empty")) return } @@ -219,7 +219,7 @@ func (s *SysRoleController) Remove(c *gin.Context) { language := reqctx.AcceptLanguage(c) roleId := c.Param("roleId") if roleId == "" { - c.JSON(400, resp.CodeMsg(40010, "bind err: roleId is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: roleId is empty")) return } @@ -261,7 +261,7 @@ func (s SysRoleController) Status(c *gin.Context) { } if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -311,7 +311,7 @@ func (s *SysRoleController) DataScope(c *gin.Context) { } if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -350,7 +350,7 @@ func (s SysRoleController) UserAuthList(c *gin.Context) { language := reqctx.AcceptLanguage(c) roleId := parse.Number(c.Query("roleId")) if roleId <= 0 { - c.JSON(400, resp.CodeMsg(40010, "bind err: roleId is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: roleId is empty")) return } @@ -380,11 +380,11 @@ func (s SysRoleController) UserAuthChecked(c *gin.Context) { } if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } if len(body.UserIds) <= 0 { - c.JSON(400, resp.CodeMsg(40010, "bind err: userIds is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: userIds is empty")) return } @@ -419,7 +419,7 @@ func (s *SysRoleController) Export(c *gin.Context) { rows, total := s.sysRoleService.FindByPage(query) if total == 0 { // c.JSON(200, resp.CodeMsg(40016, "export data record as empty")) - c.JSON(200, resp.CodeMsg(40016, i18n.TKey(language, "app.common.exportEmpty"))) + c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.exportEmpty"))) return } diff --git a/src/modules/system/controller/sys_user.go b/src/modules/system/controller/sys_user.go index 8275d13d..22c12b18 100644 --- a/src/modules/system/controller/sys_user.go +++ b/src/modules/system/controller/sys_user.go @@ -81,7 +81,7 @@ func (s *SysUserController) Info(c *gin.Context) { language := reqctx.AcceptLanguage(c) userId := parse.Number(c.Param("userId")) if userId < 0 { - c.JSON(400, resp.CodeMsg(40010, "bind err: userId is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: userId is empty")) return } @@ -164,7 +164,8 @@ func (s *SysUserController) Add(c *gin.Context) { language := reqctx.AcceptLanguage(c) var body model.SysUser if err := c.ShouldBindBodyWithJSON(&body); err != nil { - c.JSON(400, resp.ErrMsg(resp.FormatBindError(err))) + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -174,13 +175,13 @@ func (s *SysUserController) Add(c *gin.Context) { } if err := c.ShouldBindBodyWithJSON(&bodyPassword); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } body.Password = bodyPassword.Password if body.UserId > 0 { - c.JSON(400, resp.CodeMsg(40010, "bind err: userId not is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: userId not is empty")) return } if !regular.ValidUsername(body.UserName) { @@ -189,13 +190,19 @@ func (s *SysUserController) Add(c *gin.Context) { c.JSON(400, resp.ErrMsg(msg)) return } - if !regular.ValidPassword(body.Password) { - // msg := fmt.Sprintf("新增用户【%s】失败,登录密码至少包含大小写字母、数字、特殊符号,且不少于6位", body.UserName) - msg := fmt.Sprintf("New user [%s] failed, the login password contains at least upper and lower case letters, numbers, special symbols, and not less than 6 bits", body.UserName) - c.JSON(400, resp.ErrMsg(msg)) + // if !regular.ValidPassword(body.Password) { + // // msg := fmt.Sprintf("新增用户【%s】失败,登录密码至少包含大小写字母、数字、特殊符号,且不少于6位", body.UserName) + // msg := fmt.Sprintf("New user [%s] failed, the login password contains at least upper and lower case letters, numbers, special symbols, and not less than 6 bits", body.UserName) + // c.JSON(400, resp.ErrMsg(msg)) + // return + // } + + // 检查用户密码策略强度 + ok, errMsg := s.sysUserService.ValidatePasswordPolicy(body.Password, language) + if !ok { + c.JSON(200, resp.ErrMsg(errMsg)) return } - // 检查用户登录账号是否唯一 uniqueUserName := s.sysUserService.CheckUniqueByUserName(body.UserName, 0) if !uniqueUserName { @@ -272,11 +279,11 @@ func (s *SysUserController) Edit(c *gin.Context) { var body model.SysUser if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } if body.UserId <= 0 { - c.JSON(400, resp.CodeMsg(40010, "bind err: userId is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: userId is empty")) return } @@ -372,7 +379,7 @@ func (s *SysUserController) Remove(c *gin.Context) { language := reqctx.AcceptLanguage(c) userId := c.Param("userId") if userId == "" { - c.JSON(400, resp.CodeMsg(40010, "bind err: userId is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: userId is empty")) return } @@ -420,7 +427,7 @@ func (s *SysUserController) Password(c *gin.Context) { } if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -431,11 +438,17 @@ func (s *SysUserController) Password(c *gin.Context) { return } - if !regular.ValidPassword(body.Password) { - c.JSON(200, resp.ErrMsg("Login password contains at least upper and lower case letters, numbers, special symbols, and not less than 6 digits")) + // if !regular.ValidPassword(body.Password) { + // c.JSON(200, resp.ErrMsg("Login password contains at least upper and lower case letters, numbers, special symbols, and not less than 6 digits")) + // return + // } + + // 检查用户密码策略强度 + ok, errMsg := s.sysUserService.ValidatePasswordPolicy(body.Password, language) + if !ok { + c.JSON(200, resp.ErrMsg(errMsg)) return } - // 检查是否存在 userInfo := s.sysUserService.FindById(body.UserId) if userInfo.UserId != body.UserId { @@ -465,7 +478,7 @@ func (s *SysUserController) Status(c *gin.Context) { } if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -513,7 +526,7 @@ func (s *SysUserController) Export(c *gin.Context) { rows, total := s.sysUserService.FindByPage(queryMap, dataScopeSQL) if total == 0 { // c.JSON(200, resp.CodeMsg(40016, "export data record as empty")) - c.JSON(200, resp.CodeMsg(40016, i18n.TKey(language, "app.common.exportEmpty"))) + c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.exportEmpty"))) return } @@ -635,7 +648,7 @@ func (s *SysUserController) Import(c *gin.Context) { } if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } diff --git a/src/modules/system/model/sys_i18n.go b/src/modules/system/model/sys_i18n.go index 9acf7200..0cdb72f9 100644 --- a/src/modules/system/model/sys_i18n.go +++ b/src/modules/system/model/sys_i18n.go @@ -2,15 +2,10 @@ package model // SysI18n 系统_多语言 sys_i18n type SysI18n struct { - ID int64 `json:"id" gorm:"column:id;primaryKey;autoIncrement"` // ID - DelFlag string `json:"delFlag" gorm:"column:del_flag"` // 删除标记(0存在 1删除) - CreateBy string `json:"createBy" gorm:"column:create_by"` // 创建者 - CreateTime int64 `json:"createTime" gorm:"column:create_time"` // 创建时间 - UpdateBy string `json:"updateBy" gorm:"column:update_by"` // 更新者 - UpdateTime int64 `json:"updateTime" gorm:"column:update_time"` // 更新时间 - KeyLable string `json:"key" gorm:"column:key_lable"` // 多语言属性名 - ValueZh string `json:"valueZh" gorm:"column:value_zh"` // 中文 - ValueEn string `json:"valueEn" gorm:"column:value_en"` // 英文 + ID int64 `json:"id" gorm:"column:id;primaryKey;autoIncrement"` // ID + KeyLable string `json:"key" gorm:"column:key_lable"` // 多语言属性名 + ValueZh string `json:"valueZh" gorm:"column:value_zh"` // 中文 + ValueEn string `json:"valueEn" gorm:"column:value_en"` // 英文 } // TableName 表名称 diff --git a/src/modules/system/model/sys_log_user_password.go b/src/modules/system/model/sys_log_user_password.go new file mode 100644 index 00000000..a61b209d --- /dev/null +++ b/src/modules/system/model/sys_log_user_password.go @@ -0,0 +1,16 @@ +package model + +// SysLogUserPassword 系统_用户密码变更日志表 +type SysLogUserPassword struct { + ID int64 `json:"id" gorm:"column:id;primaryKey;autoIncrement"` // ID + UserId int64 `json:"userId" gorm:"column:user_id"` // 用户ID + UserName string `json:"userName" gorm:"column:user_name"` // 用户账号 + Password string `json:"password" gorm:"column:password"` // 密码 + CreateBy string `json:"createBy" gorm:"column:create_by"` // 创建者 + CreateTime int64 `json:"createTime" gorm:"column:create_time"` // 创建时间 +} + +// TableName 表名称 +func (*SysLogUserPassword) TableName() string { + return "sys_log_user_password" +} diff --git a/src/modules/system/model/sys_user.go b/src/modules/system/model/sys_user.go index d4eef3e0..e2594b0f 100644 --- a/src/modules/system/model/sys_user.go +++ b/src/modules/system/model/sys_user.go @@ -2,24 +2,26 @@ package model // SysUser 用户信息表 type SysUser struct { - UserId int64 `json:"userId" gorm:"column:user_id;primaryKey;autoIncrement"` // 用户ID - DeptId int64 `json:"deptId" gorm:"column:dept_id"` // 部门ID - UserName string `json:"userName" gorm:"column:user_name"` // 用户账号 - Email string `json:"email" gorm:"column:email"` // 用户邮箱 - Phone string `json:"phone" gorm:"column:phone"` // 手机号码 - NickName string `json:"nickName" gorm:"column:nick_name"` // 用户昵称 - Sex string `json:"sex" gorm:"column:sex"` // 用户性别(0未选择 1男 2女) - Avatar string `json:"avatar" gorm:"column:avatar"` // 头像地址 - Password string `json:"-" gorm:"column:password"` // 密码 - StatusFlag string `json:"statusFlag" gorm:"column:status_flag"` // 账号状态(0停用 1正常) - DelFlag string `json:"-" gorm:"column:del_flag"` // 删除标记(0存在 1删除) - LoginIp string `json:"loginIp" gorm:"column:login_ip"` // 最后登录IP - LoginTime int64 `json:"loginTime" gorm:"column:login_time"` // 最后登录时间 - CreateBy string `json:"createBy" gorm:"column:create_by"` // 创建者 - CreateTime int64 `json:"createTime" gorm:"column:create_time"` // 创建时间 - UpdateBy string `json:"updateBy" gorm:"column:update_by"` // 更新者 - UpdateTime int64 `json:"updateTime" gorm:"column:update_time"` // 更新时间 - Remark string `json:"remark" gorm:"column:remark"` // 备注 + UserId int64 `json:"userId" gorm:"column:user_id;primaryKey;autoIncrement"` // 用户ID + DeptId int64 `json:"deptId" gorm:"column:dept_id"` // 部门ID + UserName string `json:"userName" gorm:"column:user_name"` // 用户账号 + Email string `json:"email" gorm:"column:email"` // 用户邮箱 + Phone string `json:"phone" gorm:"column:phone"` // 手机号码 + NickName string `json:"nickName" gorm:"column:nick_name"` // 用户昵称 + Sex string `json:"sex" gorm:"column:sex"` // 用户性别(0未选择 1男 2女) + Avatar string `json:"avatar" gorm:"column:avatar"` // 头像地址 + Password string `json:"-" gorm:"column:password"` // 密码 + 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"` // 密码更新时间 + LoginCount int64 `json:"loginCount" gorm:"column:login_count"` // 登录次数 + LoginIp string `json:"loginIp" gorm:"column:login_ip"` // 最后登录IP + LoginTime int64 `json:"loginTime" gorm:"column:login_time"` // 最后登录时间 + CreateBy string `json:"createBy" gorm:"column:create_by"` // 创建者 + CreateTime int64 `json:"createTime" gorm:"column:create_time"` // 创建时间 + UpdateBy string `json:"updateBy" gorm:"column:update_by"` // 更新者 + UpdateTime int64 `json:"updateTime" gorm:"column:update_time"` // 更新时间 + Remark string `json:"remark" gorm:"column:remark"` // 备注 // ====== 非数据库字段属性 ====== diff --git a/src/modules/system/repository/sys_i18n.go b/src/modules/system/repository/sys_i18n.go index 03f64745..dd657d8f 100644 --- a/src/modules/system/repository/sys_i18n.go +++ b/src/modules/system/repository/sys_i18n.go @@ -1,8 +1,6 @@ package repository import ( - "time" - "be.ems/src/framework/database/db" "be.ems/src/framework/logger" "be.ems/src/modules/system/model" @@ -17,7 +15,6 @@ type SysI18n struct{} // Select 查询集合 func (r SysI18n) Select(param model.SysI18n) []model.SysI18n { tx := db.DB("").Model(&model.SysI18n{}) - tx = tx.Where("del_flag = '0'") // 查询条件拼接 if param.KeyLable != "" { tx = tx.Where("key_lable = ?", param.KeyLable) @@ -46,7 +43,7 @@ func (r SysI18n) SelectByIds(ids []int64) []model.SysI18n { } tx := db.DB("").Model(&model.SysI18n{}) // 构建查询条件 - tx = tx.Where("id in ? and del_flag = '0'", ids) + tx = tx.Where("id in ?", ids) // 查询数据 if err := tx.Find(&rows).Error; err != nil { logger.Errorf("query find err => %v", err.Error()) @@ -57,13 +54,6 @@ func (r SysI18n) SelectByIds(ids []int64) []model.SysI18n { // Insert 新增信息 返回新增数据ID func (r SysI18n) Insert(param model.SysI18n) int64 { - param.DelFlag = "0" - 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()) @@ -77,13 +67,10 @@ func (r SysI18n) Update(param model.SysI18n) int64 { if param.ID <= 0 { return 0 } - if param.UpdateBy != "" { - param.UpdateTime = time.Now().UnixMilli() - } tx := db.DB("").Model(&model.SysI18n{}) // 构建查询条件 tx = tx.Where("id = ?", param.ID) - tx = tx.Omit("id", "del_flag", "create_by", "create_time") + tx = tx.Omit("id") // 执行更新 if err := tx.Updates(param).Error; err != nil { logger.Errorf("update err => %v", err.Error()) @@ -97,12 +84,10 @@ func (r SysI18n) DeleteByIds(ids []int64) int64 { if len(ids) <= 0 { return 0 } - tx := db.DB("").Model(&model.SysI18n{}) - // 构建查询条件 - tx = tx.Where("id in ?", ids) - // 执行更新删除标记 - if err := tx.Update("del_flag", "1").Error; err != nil { - logger.Errorf("update err => %v", err.Error()) + tx := db.DB("").Where("id in ?", ids) + // 执行删除 + if err := tx.Delete(&model.SysRoleMenu{}).Error; err != nil { + logger.Errorf("delete err => %v", err.Error()) return 0 } return tx.RowsAffected @@ -111,7 +96,7 @@ func (r SysI18n) DeleteByIds(ids []int64) int64 { // CheckUnique 检查信息是否唯一 返回ID func (r SysI18n) CheckUnique(key string) int64 { tx := db.DB("").Model(&model.SysI18n{}) - tx = tx.Where("del_flag = 0 and key= ?", key) + tx = tx.Where("key_lable= ?", key) // 查询数据 var id int64 = 0 if err := tx.Select("id").Limit(1).Find(&id).Error; err != nil { diff --git a/src/modules/system/repository/sys_log_user_password.go b/src/modules/system/repository/sys_log_user_password.go new file mode 100644 index 00000000..9a82d822 --- /dev/null +++ b/src/modules/system/repository/sys_log_user_password.go @@ -0,0 +1,79 @@ +package repository + +import ( + "time" + + "be.ems/src/framework/database/db" + "be.ems/src/framework/logger" + "be.ems/src/modules/system/model" +) + +// NewSysLogUserPassword 实例化数据层 +var NewSysLogUserPassword = &SysLogUserPassword{} + +// SysLogUserPasswordRepository 系统_用户密码变更日志表 数据层处理 +type SysLogUserPassword struct{} + +// SelectByUserId 通过用户ID日志 pageNum为0返回日志列表 +func (r SysLogUserPassword) SelectByUserId(userId int64, pageNum int) []model.SysLogUserPassword { + rows := []model.SysLogUserPassword{} + if userId <= 0 { + return rows + } + tx := db.DB("").Model(&model.SysLogUserPassword{}) + // 构建查询条件 + tx = tx.Where("user_id = ?", userId) + // 查询数据分页 + if pageNum > 0 { + tx = tx.Limit(pageNum) + } + err := tx.Order("create_time desc").Find(&rows).Error + if err != nil { + logger.Errorf("query find err => %v", err.Error()) + return rows + } + return rows +} + +// SelectCountByUserId 通过用户ID日志数量 +func (r SysLogUserPassword) SelectCountByUserId(userId int64) int64 { + var total int64 = 0 + if userId <= 0 { + return total + } + tx := db.DB("").Model(&model.SysLogUserPassword{}) + // 构建查询条件 + tx = tx.Where("user_id = ?", userId) + // 查询数量为0直接返回 + if err := tx.Count(&total).Error; err != nil || total <= 0 { + return total + } + return total +} + +// Insert 新增信息 返回新增的数据ID +func (r SysLogUserPassword) Insert(param model.SysLogUserPassword) int64 { + if param.CreateBy != "" { + param.CreateTime = time.Now().UnixMilli() + } + // 执行插入 + if err := db.DB("").Create(¶m).Error; err != nil { + logger.Errorf("insert err => %v", err.Error()) + return 0 + } + return param.ID +} + +// DeleteByUserId 删除用户日志信息 返回受影响行数 +func (r SysLogUserPassword) DeleteByUserId(userIds []int64) int64 { + if len(userIds) <= 0 { + return 0 + } + tx := db.DB("").Where("user_id in ?", userIds) + // 执行删除 + if err := tx.Delete(&model.SysLogUserPassword{}).Error; err != nil { + logger.Errorf("delete err => %v", err.Error()) + return 0 + } + return tx.RowsAffected +} diff --git a/src/modules/system/repository/sys_user.go b/src/modules/system/repository/sys_user.go index b4bcd753..987e28ae 100644 --- a/src/modules/system/repository/sys_user.go +++ b/src/modules/system/repository/sys_user.go @@ -134,6 +134,7 @@ func (r SysUser) Insert(sysUser model.SysUser) int64 { } if sysUser.Password != "" { sysUser.Password = crypto.BcryptHash(sysUser.Password) + sysUser.PasswordUpdateTime = time.Now().UnixMilli() } // 执行插入 if err := db.DB("").Create(&sysUser).Error; err != nil { @@ -153,6 +154,7 @@ func (r SysUser) Update(sysUser model.SysUser) int64 { } if sysUser.Password != "" { sysUser.Password = crypto.BcryptHash(sysUser.Password) + sysUser.PasswordUpdateTime = time.Now().UnixMilli() } tx := db.DB("").Model(&model.SysUser{}) // 构建查询条件 diff --git a/src/modules/system/service/sys_config.go b/src/modules/system/service/sys_config.go index 3d06f8a5..68eca01d 100644 --- a/src/modules/system/service/sys_config.go +++ b/src/modules/system/service/sys_config.go @@ -99,7 +99,7 @@ func (s SysConfig) FindValueByKey(configKey string) string { } // 无缓存时读取数据放入缓存中 if configValue := s.sysConfigRepository.SelectValueByKey(configKey); configValue != "" { - _ = redis.Set("", cacheKey, configValue) + _ = redis.Set("", cacheKey, configValue, 0) return configValue } return "" @@ -113,7 +113,7 @@ func (s SysConfig) CacheLoad(configKey string) { for _, v := range sysConfigs { key := constants.CACHE_SYS_CONFIG + ":" + v.ConfigKey _ = redis.Del("", key) - _ = redis.Set("", key, v.ConfigValue) + _ = redis.Set("", key, v.ConfigValue, 0) } return } @@ -122,7 +122,7 @@ func (s SysConfig) CacheLoad(configKey string) { if cacheValue != "" { key := constants.CACHE_SYS_CONFIG + ":" + configKey _ = redis.Del("", key) - _ = redis.Set("", key, cacheValue) + _ = redis.Set("", key, cacheValue, 0) } } diff --git a/src/modules/system/service/sys_dict_type.go b/src/modules/system/service/sys_dict_type.go index 5dc046b3..888e6539 100644 --- a/src/modules/system/service/sys_dict_type.go +++ b/src/modules/system/service/sys_dict_type.go @@ -137,7 +137,7 @@ func (s SysDictType) FindDataByType(dictType string) []model.SysDictData { if len(data) > 0 { _ = redis.Del("", key) values, _ := json.Marshal(data) - _ = redis.Set("", key, string(values)) + _ = redis.Set("", key, string(values), 0) } } return data @@ -176,7 +176,7 @@ func (s SysDictType) CacheLoad(dictType string) { key := constants.CACHE_SYS_DICT + ":" + k _ = redis.Del("", key) values, _ := json.Marshal(v) - _ = redis.Set("", key, string(values)) + _ = redis.Set("", key, string(values), 0) } } diff --git a/src/modules/system/service/sys_i18n.go b/src/modules/system/service/sys_i18n.go index 93b2a90f..2bda772d 100644 --- a/src/modules/system/service/sys_i18n.go +++ b/src/modules/system/service/sys_i18n.go @@ -106,7 +106,6 @@ func (s SysI18n) UpdateKeyValue(language, key, value string) bool { // CacheLoad 加载多语言数据 传入*查询全部 func (s SysI18n) CacheLoad(langKey string) { param := model.SysI18n{ - DelFlag: constants.STATUS_NO, KeyLable: langKey, } diff --git a/src/modules/system/service/sys_log_user_password.go b/src/modules/system/service/sys_log_user_password.go new file mode 100644 index 00000000..c73ad917 --- /dev/null +++ b/src/modules/system/service/sys_log_user_password.go @@ -0,0 +1,26 @@ +package service + +import ( + "be.ems/src/modules/system/model" + "be.ems/src/modules/system/repository" +) + +// NewSysLogUserPassword 实例化服务层 +var NewSysLogUserPassword = &SysLogUserPassword{ + sysLogUserPasswordRepository: repository.NewSysLogUserPassword, +} + +// SysLogUserPassword 用户密码变更日志 服务层处理 +type SysLogUserPassword struct { + sysLogUserPasswordRepository *repository.SysLogUserPassword // 用户密码变更日志表日志信息 +} + +// Insert 新增信息 +func (s SysLogUserPassword) Insert(param model.SysLogUserPassword) int64 { + return s.sysLogUserPasswordRepository.Insert(param) +} + +// Delete 删除信息 +func (s SysLogUserPassword) DeleteByUserId(userIds []int64) int64 { + return s.sysLogUserPasswordRepository.DeleteByUserId(userIds) +} diff --git a/src/modules/system/service/sys_user.go b/src/modules/system/service/sys_user.go index 0cfaa855..1f734149 100644 --- a/src/modules/system/service/sys_user.go +++ b/src/modules/system/service/sys_user.go @@ -1,35 +1,43 @@ package service import ( + "encoding/json" "fmt" + "regexp" + "time" "be.ems/src/framework/constants" + "be.ems/src/framework/i18n" + "be.ems/src/framework/utils/crypto" + "be.ems/src/framework/utils/parse" "be.ems/src/modules/system/model" "be.ems/src/modules/system/repository" ) // NewSysUser 实例化服务层 var NewSysUser = &SysUser{ - sysUserRepository: repository.NewSysUser, - sysRoleRepository: repository.NewSysRole, - sysDeptRepository: repository.NewSysDept, - sysUserRoleRepository: repository.NewSysUserRole, - sysUserPostRepository: repository.NewSysUserPost, - sysDictTypeService: NewSysDictType, - sysDictDataService: NewSysDictData, - sysConfigService: NewSysConfig, + sysUserRepository: repository.NewSysUser, + sysRoleRepository: repository.NewSysRole, + sysDeptRepository: repository.NewSysDept, + sysUserRoleRepository: repository.NewSysUserRole, + sysUserPostRepository: repository.NewSysUserPost, + sysDictTypeService: NewSysDictType, + sysDictDataService: NewSysDictData, + sysConfigService: NewSysConfig, + sysLogUserPasswordService: NewSysLogUserPassword, } // SysUser 用户 服务层处理 type SysUser struct { - sysUserRepository *repository.SysUser // 用户服务 - sysRoleRepository *repository.SysRole // 角色服务 - sysDeptRepository *repository.SysDept // 部门服务 - sysUserRoleRepository *repository.SysUserRole // 用户与角色服务 - sysUserPostRepository *repository.SysUserPost // 用户与岗位服务 - sysDictTypeService *SysDictType // 字典类型服务 - sysDictDataService *SysDictData // 字典数据服务 - sysConfigService *SysConfig // 参数配置服务 + sysUserRepository *repository.SysUser // 用户服务 + sysRoleRepository *repository.SysRole // 角色服务 + sysDeptRepository *repository.SysDept // 部门服务 + sysUserRoleRepository *repository.SysUserRole // 用户与角色服务 + sysUserPostRepository *repository.SysUserPost // 用户与岗位服务 + sysDictTypeService *SysDictType // 字典类型服务 + sysDictDataService *SysDictData // 字典数据服务 + sysConfigService *SysConfig // 参数配置服务 + sysLogUserPasswordService *SysLogUserPassword // 用户密码变更日志服务 } // FindByPage 分页查询列表数据 @@ -136,7 +144,17 @@ func (s SysUser) insertUserPost(userId int64, postIds []int64) int64 { // Update 修改信息 func (s SysUser) Update(sysUser model.SysUser) int64 { - return s.sysUserRepository.Update(sysUser) + rows := s.sysUserRepository.Update(sysUser) + // 记录密码变更日志 + if rows > 0 && sysUser.Password != "" { + s.sysLogUserPasswordService.Insert(model.SysLogUserPassword{ + UserId: sysUser.UserId, + UserName: sysUser.UserName, + Password: crypto.BcryptHash(sysUser.Password), + CreateBy: sysUser.UpdateBy, + }) + } + return rows } // UpdateUserAndRolePost 修改用户信息同时更新角色和岗位 @@ -160,8 +178,9 @@ func (s SysUser) DeleteByIds(userIds []int64) (int64, error) { return 0, fmt.Errorf("没有权限访问用户数据!") } if len(users) == len(userIds) { - s.sysUserRoleRepository.DeleteByUserIds(userIds) // 删除用户与角色关联 - s.sysUserPostRepository.DeleteByUserIds(userIds) // 删除用户与岗位关联 + s.sysUserRoleRepository.DeleteByUserIds(userIds) // 删除用户与角色关联 + s.sysUserPostRepository.DeleteByUserIds(userIds) // 删除用户与岗位关联 + s.sysLogUserPasswordService.DeleteByUserId(userIds) // 删除用户密码变更日志 return s.sysUserRepository.DeleteByIds(userIds), nil } return 0, fmt.Errorf("删除用户信息失败!") @@ -242,3 +261,107 @@ func (s SysUser) FindAuthUsersPage(query map[string]string, dataScopeSQL string) } return rows, total } + +// ValidatePasswordPolicy 判断密码策略强度 +func (s SysUser) ValidatePasswordPolicy(password string, errLang string) (bool, string) { + passwordPolicyStr := s.sysConfigService.FindValueByKey("sys.user.passwordPolicy") + if passwordPolicyStr == "" { + // 未配置密码策略 + return false, i18n.TKey(errLang, "config.sys.user.passwordPolicyNot") + } + var policy struct { + MinLength int `json:"minLength"` + SpecialChars int `json:"specialChars"` + Uppercase int `json:"uppercase"` + Lowercase int `json:"lowercase"` + } + + err := json.Unmarshal([]byte(passwordPolicyStr), &policy) + if err != nil { + return false, err.Error() + } + + errMsg := i18n.TTemplate(errLang, "config.sys.user.passwordPolicyError", map[string]any{ + "minLength": policy.MinLength, + "specialChars": policy.SpecialChars, + "uppercase": policy.Uppercase, + "lowercase": policy.Lowercase, + }) + + if len(password) < policy.MinLength { + return false, errMsg + } + + specialChars := len(regexp.MustCompile(`[!@#$%^&*(),.?":{}|<>]`).FindAllString(password, -1)) + if specialChars < policy.SpecialChars { + return false, errMsg + } + + uppercase := len(regexp.MustCompile(`[A-Z]`).FindAllString(password, -1)) + if uppercase < policy.Uppercase { + return false, errMsg + } + + lowercase := len(regexp.MustCompile(`[a-z]`).FindAllString(password, -1)) + if lowercase < policy.Lowercase { + return false, errMsg + } + return true, "" +} + +// ValidatePasswordExpireTime 密码过期时间 +func (s SysUser) ValidatePasswordExpireTime(passwordUpdateTime int64) (bool, error) { + passwdExpireStr := s.sysConfigService.FindValueByKey("sys.user.passwdExpire") + if passwdExpireStr == "" { + return false, nil + } + var expire struct { + ExpHours int `json:"expHours"` + AlertHours int `json:"alertHours"` + } + err := json.Unmarshal([]byte(passwdExpireStr), &expire) + if err != nil { + return false, err + } + if expire.ExpHours <= 0 { + return false, nil + } + + if passwordUpdateTime <= 1e9 { + return false, fmt.Errorf("login.errPasswdExpire") + } + // 计算时间差 + lastUpdateTime := time.UnixMilli(passwordUpdateTime) + now := time.Now() + remainingHour := now.Sub(lastUpdateTime).Hours() + alertFlag := remainingHour > float64(expire.AlertHours) + if remainingHour > float64(expire.ExpHours) { + return alertFlag, fmt.Errorf("login.errPasswdExpire") + } + return alertFlag, nil +} + +// ValidatePasswordNotAllowedHistory 密码不允许使用最近修改的 +func (s SysUser) ValidatePasswordNotAllowedHistory(userId int64, password string) error { + passwdNotAllowedHistoryStr := s.sysConfigService.FindValueByKey("sys.user.passwdNotAllowedHistory") + if passwdNotAllowedHistoryStr == "" { + return nil + } + passwdNotAllowedHistory := parse.Number(passwdNotAllowedHistoryStr) + if passwdNotAllowedHistory <= 0 { + return nil + } + // 查询密码历史记录 + rows := s.sysLogUserPasswordService.sysLogUserPasswordRepository.SelectByUserId(userId, int(passwdNotAllowedHistory)) + if len(rows) <= 0 { + return nil + } + // 检查密码是否在历史记录中 + for _, v := range rows { + compare := crypto.BcryptCompare(password, v.Password) + if compare { + return fmt.Errorf("login.errPasswdHistory") + } + } + return nil +} diff --git a/src/modules/system/system.go b/src/modules/system/system.go index 3803f1a9..d4cca368 100644 --- a/src/modules/system/system.go +++ b/src/modules/system/system.go @@ -20,31 +20,31 @@ func Setup(router *gin.Engine) { sysConfigGroup := router.Group("/system/config") { sysConfigGroup.GET("/list", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:config:list"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:config:list"}}), controller.NewSysConfig.List, ) sysConfigGroup.GET("/:configId", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:config:query"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:config:query"}}), controller.NewSysConfig.Info, ) sysConfigGroup.POST("", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:config:add"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:config:add"}}), middleware.OperateLog(middleware.OptionNew("log.operate.title.sysConfig", middleware.BUSINESS_TYPE_INSERT)), controller.NewSysConfig.Add, ) sysConfigGroup.PUT("", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:config:edit"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:config:edit"}}), middleware.OperateLog(middleware.OptionNew("log.operate.title.sysConfig", middleware.BUSINESS_TYPE_UPDATE)), controller.NewSysConfig.Edit, ) sysConfigGroup.DELETE("/:configId", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:config:remove"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:config:remove"}}), middleware.OperateLog(middleware.OptionNew("log.operate.title.sysConfig", middleware.BUSINESS_TYPE_DELETE)), controller.NewSysConfig.Remove, ) sysConfigGroup.PUT("/refresh", middleware.RepeatSubmit(5), - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:config:remove"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:config:remove"}}), middleware.OperateLog(middleware.OptionNew("log.operate.title.sysConfig", middleware.BUSINESS_TYPE_OTHER)), controller.NewSysConfig.Refresh, ) @@ -57,12 +57,12 @@ func Setup(router *gin.Engine) { controller.NewSysConfig.ConfigKey, ) sysConfigGroup.GET("/export", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:config:export"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:config:export"}}), middleware.OperateLog(middleware.OptionNew("log.operate.title.sysConfig", middleware.BUSINESS_TYPE_EXPORT)), controller.NewSysConfig.Export, ) sysConfigGroup.PUT("/change-value", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:config:edit"}, "hasRoles": {"admin"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:config:edit"}, "hasRoles": {"admin"}}), middleware.OperateLog(middleware.OptionNew("log.operate.title.sysConfig", middleware.BUSINESS_TYPE_UPDATE)), controller.NewSysConfig.ConfigValue, ) @@ -72,38 +72,38 @@ func Setup(router *gin.Engine) { sysDeptGroup := router.Group("/system/dept") { sysDeptGroup.GET("/list", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:dept:list"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:dept:list"}}), controller.NewSysDept.List, ) sysDeptGroup.GET("/:deptId", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:dept:query"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:dept:query"}}), controller.NewSysDept.Info, ) sysDeptGroup.POST("", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:dept:add"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:dept:add"}}), middleware.OperateLog(middleware.OptionNew("log.operate.title.sysDept", middleware.BUSINESS_TYPE_INSERT)), controller.NewSysDept.Add, ) sysDeptGroup.PUT("", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:dept:edit"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:dept:edit"}}), middleware.OperateLog(middleware.OptionNew("log.operate.title.sysDept", middleware.BUSINESS_TYPE_UPDATE)), controller.NewSysDept.Edit, ) sysDeptGroup.DELETE("/:deptId", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:dept:remove"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:dept:remove"}}), middleware.OperateLog(middleware.OptionNew("log.operate.title.sysDept", middleware.BUSINESS_TYPE_DELETE)), controller.NewSysDept.Remove, ) sysDeptGroup.GET("/list/exclude/:deptId", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:dept:list"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:dept:list"}}), controller.NewSysDept.ExcludeChild, ) sysDeptGroup.GET("/tree", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:dept:list", "system:user:list"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:dept:list", "system:user:list"}}), controller.NewSysDept.Tree, ) sysDeptGroup.GET("/tree/role/:roleId", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:dept:query", "system:user:edit"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:dept:query", "system:user:edit"}}), controller.NewSysDept.TreeRole, ) } @@ -112,34 +112,34 @@ func Setup(router *gin.Engine) { sysDictDataGroup := router.Group("/system/dict/data") { sysDictDataGroup.GET("/list", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:dict:list"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:dict:list"}}), controller.NewSysDictData.List, ) sysDictDataGroup.GET("/:dataId", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:dict:query"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:dict:query"}}), controller.NewSysDictData.Info, ) sysDictDataGroup.POST("", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:dict:add"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:dict:add"}}), middleware.OperateLog(middleware.OptionNew("log.operate.title.sysDictData", middleware.BUSINESS_TYPE_INSERT)), controller.NewSysDictData.Add, ) sysDictDataGroup.PUT("", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:dict:edit"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:dict:edit"}}), middleware.OperateLog(middleware.OptionNew("log.operate.title.sysDictData", middleware.BUSINESS_TYPE_UPDATE)), controller.NewSysDictData.Edit, ) sysDictDataGroup.DELETE("/:dataId", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:dict:remove"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:dict:remove"}}), middleware.OperateLog(middleware.OptionNew("log.operate.title.sysDictData", middleware.BUSINESS_TYPE_DELETE)), controller.NewSysDictData.Remove, ) sysDictDataGroup.GET("/type/:dictType", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewSysDictData.DictType, ) sysDictDataGroup.GET("/export", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:dict:export"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:dict:export"}}), middleware.OperateLog(middleware.OptionNew("log.operate.title.sysDictData", middleware.BUSINESS_TYPE_EXPORT)), controller.NewSysDictData.Export, ) @@ -149,39 +149,39 @@ func Setup(router *gin.Engine) { sysDictTypeGroup := router.Group("/system/dict/type") { sysDictTypeGroup.GET("/list", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:dict:list"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:dict:list"}}), controller.NewSysDictType.List, ) sysDictTypeGroup.GET("/:dictId", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:dict:query"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:dict:query"}}), controller.NewSysDictType.Info, ) sysDictTypeGroup.POST("", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:dict:add"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:dict:add"}}), middleware.OperateLog(middleware.OptionNew("log.operate.title.sysDictType", middleware.BUSINESS_TYPE_INSERT)), controller.NewSysDictType.Add, ) sysDictTypeGroup.PUT("", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:dict:edit"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:dict:edit"}}), middleware.OperateLog(middleware.OptionNew("log.operate.title.sysDictType", middleware.BUSINESS_TYPE_UPDATE)), controller.NewSysDictType.Edit, ) sysDictTypeGroup.DELETE("/:dictId", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:dict:remove"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:dict:remove"}}), middleware.OperateLog(middleware.OptionNew("log.operate.title.sysDictType", middleware.BUSINESS_TYPE_DELETE)), controller.NewSysDictType.Remove, ) sysDictTypeGroup.PUT("/refresh", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:dict:remove"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:dict:remove"}}), middleware.OperateLog(middleware.OptionNew("log.operate.title.sysDictType", middleware.BUSINESS_TYPE_OTHER)), controller.NewSysDictType.Refresh, ) sysDictTypeGroup.GET("/options", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:dict:query"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:dict:query"}}), controller.NewSysDictType.Options, ) sysDictTypeGroup.GET("/export", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:dict:export"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:dict:export"}}), middleware.OperateLog(middleware.OptionNew("log.operate.title.sysDictType", middleware.BUSINESS_TYPE_EXPORT)), controller.NewSysDictType.Export, ) @@ -191,21 +191,21 @@ func Setup(router *gin.Engine) { sysLogLoginGroup := router.Group("/system/log/login") { sysLogLoginGroup.GET("/list", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:log:login:list"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:log:login:list"}}), controller.NewSysLogLogin.List, ) sysLogLoginGroup.DELETE("/clean", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:log:login:remove"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:log:login:remove"}}), middleware.OperateLog(middleware.OptionNew("log.operate.title.sysLogLogin", middleware.BUSINESS_TYPE_CLEAN)), controller.NewSysLogLogin.Clean, ) sysLogLoginGroup.PUT("/unlock/:userName", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:log:login:unlock"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:log:login:unlock"}}), middleware.OperateLog(middleware.OptionNew("log.operate.title.sysLogLogin", middleware.BUSINESS_TYPE_OTHER)), controller.NewSysLogLogin.Unlock, ) sysLogLoginGroup.GET("/export", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:log:login:export"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:log:login:export"}}), middleware.OperateLog(middleware.OptionNew("log.operate.title.sysLogLogin", middleware.BUSINESS_TYPE_EXPORT)), controller.NewSysLogLogin.Export, ) @@ -215,16 +215,16 @@ func Setup(router *gin.Engine) { sysLogOperateGroup := router.Group("/system/log/operate") { sysLogOperateGroup.GET("/list", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:log:operate:list"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:log:operate:list"}}), controller.NewSysLogOperate.List, ) sysLogOperateGroup.DELETE("/clean", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:log:operate:remove"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:log:operate:remove"}}), middleware.OperateLog(middleware.OptionNew("log.operate.title.sysLogOper", middleware.BUSINESS_TYPE_CLEAN)), controller.NewSysLogOperate.Clean, ) sysLogOperateGroup.GET("/export", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:log:operate:export"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:log:operate:export"}}), middleware.OperateLog(middleware.OptionNew("log.operate.title.sysLogOper", middleware.BUSINESS_TYPE_EXPORT)), controller.NewSysLogOperate.Export, ) @@ -234,34 +234,34 @@ func Setup(router *gin.Engine) { sysMenuGroup := router.Group("/system/menu") { sysMenuGroup.GET("/list", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:menu:list"}, "hasRoles": {"admin"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:menu:list"}, "hasRoles": {"admin"}}), controller.NewSysMenu.List, ) sysMenuGroup.GET("/:menuId", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:menu:query"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:menu:query"}}), controller.NewSysMenu.Info, ) sysMenuGroup.POST("", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:menu:add"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:menu:add"}}), middleware.OperateLog(middleware.OptionNew("log.operate.title.sysMenu", middleware.BUSINESS_TYPE_INSERT)), controller.NewSysMenu.Add, ) sysMenuGroup.PUT("", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:menu:edit"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:menu:edit"}}), middleware.OperateLog(middleware.OptionNew("log.operate.title.sysMenu", middleware.BUSINESS_TYPE_UPDATE)), controller.NewSysMenu.Edit, ) sysMenuGroup.DELETE("/:menuId", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:menu:remove"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:menu:remove"}}), middleware.OperateLog(middleware.OptionNew("log.operate.title.sysMenu", middleware.BUSINESS_TYPE_DELETE)), controller.NewSysMenu.Remove, ) sysMenuGroup.GET("/tree", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:menu:list", "system:role:query"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:menu:list", "system:role:query"}}), controller.NewSysMenu.Tree, ) sysMenuGroup.GET("/tree/role/:roleId", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:menu:list", "system:role:query"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:menu:list", "system:role:query"}}), controller.NewSysMenu.TreeRole, ) } @@ -270,30 +270,30 @@ func Setup(router *gin.Engine) { sysPostGroup := router.Group("/system/post") { sysPostGroup.GET("/list", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:post:list"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:post:list"}}), controller.NewSysPost.List, ) sysPostGroup.GET("/:postId", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:post:query"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:post:query"}}), controller.NewSysPost.Info, ) sysPostGroup.POST("", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:post:add"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:post:add"}}), middleware.OperateLog(middleware.OptionNew("log.operate.title.sysPost", middleware.BUSINESS_TYPE_INSERT)), controller.NewSysPost.Add, ) sysPostGroup.PUT("", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:post:edit"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:post:edit"}}), middleware.OperateLog(middleware.OptionNew("log.operate.title.sysPost", middleware.BUSINESS_TYPE_UPDATE)), controller.NewSysPost.Edit, ) sysPostGroup.DELETE("/:postId", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:post:remove"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:post:remove"}}), middleware.OperateLog(middleware.OptionNew("log.operate.title.sysPost", middleware.BUSINESS_TYPE_DELETE)), controller.NewSysPost.Remove, ) sysPostGroup.GET("/export", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:post:export"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:post:export"}}), middleware.OperateLog(middleware.OptionNew("log.operate.title.sysPost", middleware.BUSINESS_TYPE_EXPORT)), controller.NewSysPost.Export, ) @@ -303,18 +303,23 @@ func Setup(router *gin.Engine) { sysProfileGroup := router.Group("/system/user/profile") { sysProfileGroup.GET("", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewSysProfile.Info, ) sysProfileGroup.PUT("", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), middleware.OperateLog(middleware.OptionNew("log.operate.title.sysProfile", middleware.BUSINESS_TYPE_UPDATE)), controller.NewSysProfile.UpdateProfile, ) sysProfileGroup.PUT("/password", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), middleware.OperateLog(middleware.OptionNew("log.operate.title.sysProfile", middleware.BUSINESS_TYPE_UPDATE)), - controller.NewSysProfile.UpdatePassword, + controller.NewSysProfile.PasswordUpdate, + ) + sysProfileGroup.PUT("/password-force", + middleware.AuthorizeUser(nil), + middleware.OperateLog(middleware.OptionNew("log.operate.title.sysProfile", middleware.BUSINESS_TYPE_UPDATE)), + controller.NewSysProfile.PasswordForce, ) } @@ -322,51 +327,51 @@ func Setup(router *gin.Engine) { sysRoleGroup := router.Group("/system/role") { sysRoleGroup.GET("/list", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:role:list"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:role:list"}}), controller.NewSysRole.List, ) sysRoleGroup.GET("/:roleId", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:role:query"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:role:query"}}), controller.NewSysRole.Info, ) sysRoleGroup.POST("", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:role:add"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:role:add"}}), middleware.OperateLog(middleware.OptionNew("log.operate.title.sysRole", middleware.BUSINESS_TYPE_INSERT)), controller.NewSysRole.Add, ) sysRoleGroup.PUT("", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:role:edit"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:role:edit"}}), middleware.OperateLog(middleware.OptionNew("log.operate.title.sysRole", middleware.BUSINESS_TYPE_UPDATE)), controller.NewSysRole.Edit, ) sysRoleGroup.DELETE("/:roleId", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:role:remove"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:role:remove"}}), middleware.OperateLog(middleware.OptionNew("log.operate.title.sysRole", middleware.BUSINESS_TYPE_DELETE)), controller.NewSysRole.Remove, ) sysRoleGroup.PUT("/status", middleware.RepeatSubmit(5), - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:role:edit"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:role:edit"}}), middleware.OperateLog(middleware.OptionNew("log.operate.title.sysRole", middleware.BUSINESS_TYPE_UPDATE)), controller.NewSysRole.Status, ) sysRoleGroup.PUT("/data-scope", middleware.RepeatSubmit(5), - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:user:edit"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:user:edit"}}), middleware.OperateLog(middleware.OptionNew("log.operate.title.sysRole", middleware.BUSINESS_TYPE_UPDATE)), controller.NewSysRole.DataScope, ) sysRoleGroup.GET("/user/list", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:user:list"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:user:list"}}), controller.NewSysRole.UserAuthList, ) sysRoleGroup.PUT("/user/auth", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:user:edit"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:user:edit"}}), middleware.OperateLog(middleware.OptionNew("log.operate.title.sysRole", middleware.BUSINESS_TYPE_GRANT)), controller.NewSysRole.UserAuthChecked, ) sysRoleGroup.GET("/export", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:user:export"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:user:export"}}), middleware.OperateLog(middleware.OptionNew("log.operate.title.sysRole", middleware.BUSINESS_TYPE_EXPORT)), controller.NewSysRole.Export, ) @@ -376,50 +381,50 @@ func Setup(router *gin.Engine) { sysUserGroup := router.Group("/system/user") { sysUserGroup.GET("/list", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:user:list"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:user:list"}}), controller.NewSysUser.List, ) sysUserGroup.GET("/:userId", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:user:query"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:user:query"}}), controller.NewSysUser.Info, ) sysUserGroup.POST("", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:user:add"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:user:add"}}), middleware.OperateLog(middleware.OptionNew("log.operate.title.sysUser", middleware.BUSINESS_TYPE_INSERT)), controller.NewSysUser.Add, ) sysUserGroup.PUT("", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:user:edit"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:user:edit"}}), middleware.OperateLog(middleware.OptionNew("log.operate.title.sysUser", middleware.BUSINESS_TYPE_UPDATE)), controller.NewSysUser.Edit, ) sysUserGroup.DELETE("/:userId", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:user:remove"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:user:remove"}}), middleware.OperateLog(middleware.OptionNew("log.operate.title.sysUser", middleware.BUSINESS_TYPE_DELETE)), controller.NewSysUser.Remove, ) sysUserGroup.PUT("/password", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:user:resetPwd"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:user:resetPwd"}}), middleware.OperateLog(middleware.OptionNew("log.operate.title.sysUser", middleware.BUSINESS_TYPE_UPDATE)), controller.NewSysUser.Password, ) sysUserGroup.PUT("/status", middleware.RepeatSubmit(5), - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:user:edit"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:user:edit"}}), middleware.OperateLog(middleware.OptionNew("log.operate.title.sysUser", middleware.BUSINESS_TYPE_UPDATE)), controller.NewSysUser.Status, ) sysUserGroup.GET("/export", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:user:export"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:user:export"}}), middleware.OperateLog(middleware.OptionNew("log.operate.title.sysUser", middleware.BUSINESS_TYPE_EXPORT)), controller.NewSysUser.Export, ) sysUserGroup.GET("/import/template", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:user:import"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:user:import"}}), controller.NewSysUser.Template, ) sysUserGroup.POST("/import", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:user:import"}}), + middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:user:import"}}), middleware.OperateLog(middleware.OptionNew("log.operate.title.sysUser", middleware.BUSINESS_TYPE_IMPORT)), controller.NewSysUser.Import, ) diff --git a/src/modules/tool/controller/iperf.go b/src/modules/tool/controller/iperf.go index 5ef938dd..84327487 100644 --- a/src/modules/tool/controller/iperf.go +++ b/src/modules/tool/controller/iperf.go @@ -54,7 +54,8 @@ func (s *IPerfController) Version(c *gin.Context) { Version string `form:"version" binding:"required,oneof=V2 V3"` // 版本 } if err := c.ShouldBindQuery(&query); err != nil { - c.JSON(400, resp.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -88,7 +89,8 @@ func (s *IPerfController) Install(c *gin.Context) { Version string `form:"version" binding:"required,oneof=V2 V3"` // 版本 } if err := c.ShouldBindBodyWithJSON(&body); err != nil { - c.JSON(400, resp.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -125,14 +127,15 @@ func (s *IPerfController) Run(c *gin.Context) { Rows int `form:"rows"` // 终端显示行数 } if err := c.ShouldBindQuery(&query); err != nil { - c.JSON(400, resp.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } // 登录用户信息 loginUser, err := reqctx.LoginUser(c) if err != nil { - c.JSON(401, resp.CodeMsg(401, i18n.TKey(language, err.Error()))) + c.JSON(401, resp.CodeMsg(401002, i18n.TKey(language, err.Error()))) return } diff --git a/src/modules/tool/controller/ping.go b/src/modules/tool/controller/ping.go index 6ee0ca66..302b7145 100644 --- a/src/modules/tool/controller/ping.go +++ b/src/modules/tool/controller/ping.go @@ -48,7 +48,8 @@ func (s *PingController) Statistics(c *gin.Context) { language := reqctx.AcceptLanguage(c) var body model.Ping if err := c.ShouldBindBodyWithJSON(&body); err != nil { - c.JSON(400, resp.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -78,7 +79,7 @@ func (s *PingController) StatisticsOn(c *gin.Context) { // 登录用户信息 loginUser, err := reqctx.LoginUser(c) if err != nil { - c.JSON(401, resp.CodeMsg(401, i18n.TKey(language, err.Error()))) + c.JSON(401, resp.CodeMsg(401002, i18n.TKey(language, err.Error()))) return } @@ -122,7 +123,8 @@ func (s *PingController) Version(c *gin.Context) { NeID string `form:"neId" binding:"required"` // 网元ID } if err := c.ShouldBindQuery(&query); err != nil { - c.JSON(400, resp.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -160,14 +162,15 @@ func (s *PingController) Run(c *gin.Context) { Rows int `form:"rows"` // 终端显示行数 } if err := c.ShouldBindQuery(&query); err != nil { - c.JSON(400, resp.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } // 登录用户信息 loginUser, err := reqctx.LoginUser(c) if err != nil { - c.JSON(401, resp.CodeMsg(401, i18n.TKey(language, err.Error()))) + c.JSON(401, resp.CodeMsg(401002, i18n.TKey(language, err.Error()))) return } diff --git a/src/modules/tool/tool.go b/src/modules/tool/tool.go index 70385683..ce37e8c1 100644 --- a/src/modules/tool/tool.go +++ b/src/modules/tool/tool.go @@ -17,16 +17,16 @@ func Setup(router *gin.Engine) { iperfGroup := router.Group("/tool/iperf") { iperfGroup.GET("/v", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewIPerf.Version, ) iperfGroup.POST("/i", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.iperf", collectlogs.BUSINESS_TYPE_OTHER)), controller.NewIPerf.Install, ) iperfGroup.GET("/run", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.iperf", collectlogs.BUSINESS_TYPE_OTHER)), controller.NewIPerf.Run, ) @@ -36,20 +36,20 @@ func Setup(router *gin.Engine) { pingGroup := router.Group("/tool/ping") { pingGroup.POST("", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewPing.Statistics, ) pingGroup.GET("", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.ping", collectlogs.BUSINESS_TYPE_OTHER)), controller.NewPing.StatisticsOn, ) pingGroup.GET("/v", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewPing.Version, ) pingGroup.GET("/run", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.ping", collectlogs.BUSINESS_TYPE_OTHER)), controller.NewPing.Run, ) diff --git a/src/modules/trace/controller/packet.go b/src/modules/trace/controller/packet.go index db8d8b3f..4eabce03 100644 --- a/src/modules/trace/controller/packet.go +++ b/src/modules/trace/controller/packet.go @@ -2,6 +2,8 @@ package controller import ( "fmt" + "path/filepath" + "runtime" "be.ems/src/framework/i18n" "be.ems/src/framework/reqctx" @@ -44,7 +46,7 @@ func (s *PacketController) Start(c *gin.Context) { } if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -66,7 +68,7 @@ func (s *PacketController) Stop(c *gin.Context) { } if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -88,7 +90,7 @@ func (s *PacketController) Filter(c *gin.Context) { } if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -110,7 +112,7 @@ func (s *PacketController) KeepAlive(c *gin.Context) { } if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -125,3 +127,23 @@ func (s *PacketController) KeepAlive(c *gin.Context) { } c.JSON(200, resp.Ok(nil)) } + +// 信令跟踪文件 +// +// GET /filePull +func (s *PacketController) FilePull(c *gin.Context) { + var querys struct { + TaskNo string `json:"taskNo" form:"taskNo" binding:"required"` // 任务编号 + } + if err := c.ShouldBindQuery(&querys); err != nil { + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) + return + } + fileName := fmt.Sprintf("%s.pcap", querys.TaskNo) + localFilePath := filepath.Join("/tmp/omc/packet", fileName) + if runtime.GOOS == "windows" { + localFilePath = fmt.Sprintf("C:%s", localFilePath) + } + c.FileAttachment(localFilePath, fileName) +} diff --git a/src/modules/trace/controller/tcpdump.go b/src/modules/trace/controller/tcpdump.go index c2920e08..eac35807 100644 --- a/src/modules/trace/controller/tcpdump.go +++ b/src/modules/trace/controller/tcpdump.go @@ -43,10 +43,9 @@ func (s *TCPdumpController) DumpStart(c *gin.Context) { NeId string `json:"neId" binding:"required"` // 网元ID Cmd string `json:"cmd" binding:"required"` // 命令 "-n -s 0 -v" } - err := c.ShouldBindBodyWithJSON(&body) - if err != nil { + if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -78,10 +77,9 @@ func (s *TCPdumpController) DumpStop(c *gin.Context) { NeId string `json:"neId" binding:"required"` // 网元ID TaskCode string `json:"taskCode" binding:"required"` // 任务码,停止任务并查看日志信息 } - err := c.ShouldBindBodyWithJSON(&body) - if err != nil { + if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -113,10 +111,9 @@ func (s *TCPdumpController) UPFTrace(c *gin.Context) { NeId string `json:"neId" binding:"required"` // 网元ID Cmd string `json:"cmd" binding:"required"` // 命令 } - err := c.ShouldBindBodyWithJSON(&body) - if err != nil { + if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } diff --git a/src/modules/trace/controller/trace_data.go b/src/modules/trace/controller/trace_data.go index 1d032d64..ae7e1602 100644 --- a/src/modules/trace/controller/trace_data.go +++ b/src/modules/trace/controller/trace_data.go @@ -31,6 +31,24 @@ func (s *TraceDataController) List(c *gin.Context) { c.JSON(200, resp.OkData(map[string]any{"rows": rows, "total": total})) } +// 跟踪任务数据信息 +// +// GET /:id +func (s *TraceDataController) Info(c *gin.Context) { + id := parse.Number(c.Param("id")) + if id <= 0 { + c.JSON(422, resp.CodeMsg(422002, "bind err: id is empty")) + return + } + + data := s.traceDataService.FindById(id) + if data.ID == id { + c.JSON(200, resp.OkData(data)) + return + } + c.JSON(200, resp.Err(nil)) +} + // 跟踪任务数据删除 // // DELETE /:id @@ -38,7 +56,7 @@ func (s *TraceDataController) Remove(c *gin.Context) { language := reqctx.AcceptLanguage(c) id := c.Param("id") if id == "" { - c.JSON(400, resp.CodeMsg(40010, "bind err: id is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: id is empty")) return } diff --git a/src/modules/trace/controller/trace_task.go b/src/modules/trace/controller/trace_task.go index f37cb523..ae79e7a3 100644 --- a/src/modules/trace/controller/trace_task.go +++ b/src/modules/trace/controller/trace_task.go @@ -43,7 +43,7 @@ func (s *TraceTaskController) List(c *gin.Context) { func (s *TraceTaskController) Info(c *gin.Context) { id := parse.Number(c.Param("id")) if id <= 0 { - c.JSON(400, resp.CodeMsg(40010, "bind err: id is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: id is empty")) return } @@ -61,52 +61,18 @@ func (s *TraceTaskController) Info(c *gin.Context) { func (s *TraceTaskController) Add(c *gin.Context) { language := reqctx.AcceptLanguage(c) var body model.TraceTask - err := c.ShouldBindBodyWithJSON(&body) - if err != nil { + if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } if body.ID > 0 { - c.JSON(400, resp.CodeMsg(40010, "bind err: id not is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: id not is empty")) return } body.CreateBy = reqctx.LoginUserToUserName(c) - if err = s.traceTaskService.Insert(body); err != nil { - c.JSON(200, resp.ErrMsg(i18n.TKey(language, err.Error()))) - return - } - c.JSON(200, resp.Ok(nil)) -} - -// 跟踪任务修改 -// -// PUT / -func (s *TraceTaskController) Edit(c *gin.Context) { - language := reqctx.AcceptLanguage(c) - var body model.TraceTask - err := c.ShouldBindBodyWithJSON(&body) - if err != nil { - errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) - return - } - if body.ID == 0 { - c.JSON(400, resp.CodeMsg(40010, "bind err: id is empty")) - return - } - - // 检查是否存在 - taskInfo := s.traceTaskService.FindById(body.ID) - if taskInfo.ID != body.ID { - // 没有可访问任务信息数据! - c.JSON(200, resp.ErrMsg(i18n.TKey(language, "task.noData"))) - return - } - - body.UpdateBy = reqctx.LoginUserToUserName(c) - if err = s.traceTaskService.Update(body); err != nil { + if err := s.traceTaskService.Insert(body); err != nil { c.JSON(200, resp.ErrMsg(i18n.TKey(language, err.Error()))) return } @@ -120,7 +86,7 @@ func (s *TraceTaskController) Remove(c *gin.Context) { language := reqctx.AcceptLanguage(c) id := c.Param("id") if id == "" { - c.JSON(400, resp.CodeMsg(40010, "bind err: id is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: id is empty")) return } @@ -145,12 +111,12 @@ func (s *TraceTaskController) Remove(c *gin.Context) { // // GET /filePull func (s *TraceTaskController) FilePull(c *gin.Context) { - language := reqctx.AcceptLanguage(c) var querys struct { TraceId string `form:"traceId" binding:"required"` } if err := c.ShouldBindQuery(&querys); err != nil { - c.JSON(400, resp.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } diff --git a/src/modules/trace/controller/trace_task_hlr.go b/src/modules/trace/controller/trace_task_hlr.go index 586c48b9..7e14138f 100644 --- a/src/modules/trace/controller/trace_task_hlr.go +++ b/src/modules/trace/controller/trace_task_hlr.go @@ -36,10 +36,10 @@ type TraceTaskHlrController struct { // // GET /list func (s *TraceTaskHlrController) List(c *gin.Context) { - language := reqctx.AcceptLanguage(c) var query model.TraceTaskHlrQuery if err := c.ShouldBindQuery(&query); err != nil { - c.JSON(400, resp.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -54,7 +54,7 @@ func (s *TraceTaskHlrController) Remove(c *gin.Context) { language := reqctx.AcceptLanguage(c) id := c.Param("id") if id == "" { - c.JSON(400, resp.CodeMsg(40010, "bind err: id is empty")) + c.JSON(422, resp.CodeMsg(422002, "bind err: id is empty")) return } @@ -79,7 +79,6 @@ func (s *TraceTaskHlrController) Remove(c *gin.Context) { // // POST /start func (s *TraceTaskHlrController) Start(c *gin.Context) { - language := reqctx.AcceptLanguage(c) var body struct { IMSI string `json:"imsi"` // IMSI MSISDN string `json:"msisdn"` // MSISDN @@ -88,12 +87,13 @@ func (s *TraceTaskHlrController) Start(c *gin.Context) { Remark string `json:"remark"` // 备注说明 } if err := c.ShouldBindBodyWithJSON(&body); err != nil { - c.JSON(400, resp.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } if body.IMSI == "" && body.MSISDN == "" { - c.JSON(400, resp.CodeMsg(400, "imsi amd msisdn is empty")) + c.JSON(422, resp.CodeMsg(422002, "imsi amd msisdn is empty")) return } @@ -117,12 +117,12 @@ func (s *TraceTaskHlrController) Start(c *gin.Context) { // // POST /stop func (s *TraceTaskHlrController) Stop(c *gin.Context) { - language := reqctx.AcceptLanguage(c) var body struct { ID string `json:"id" binding:"required"` // 任务ID } if err := c.ShouldBindBodyWithJSON(&body); err != nil { - c.JSON(400, resp.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } @@ -162,13 +162,13 @@ func (s *TraceTaskHlrController) File(c *gin.Context) { } if err := c.ShouldBindBodyWithJSON(&body); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } task := s.traceTaskHlrService.FindById(body.ID) if task.ID == 0 || task.ID != body.ID { - c.JSON(200, resp.CodeMsg(400, "task not found")) + c.JSON(422, resp.CodeMsg(422002, "task not found")) return } @@ -194,14 +194,14 @@ func (s *TraceTaskHlrController) FilePull(c *gin.Context) { } if err := c.ShouldBindQuery(&querys); err != nil { errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) - c.JSON(422, resp.CodeMsg(40422, errMsgs)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } // 查询网元获取IP neInfo := s.neInfoService.FindByNeTypeAndNeID(querys.NeType, querys.NeID) if neInfo.NeId != querys.NeID || neInfo.IP == "" { - c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo"))) + c.JSON(422, resp.CodeMsg(422002, i18n.TKey(language, "app.common.noNEInfo"))) return } diff --git a/src/modules/trace/model/trace_data.go b/src/modules/trace/model/trace_data.go index f21f0859..3669199d 100644 --- a/src/modules/trace/model/trace_data.go +++ b/src/modules/trace/model/trace_data.go @@ -3,18 +3,19 @@ package model // TraceData 跟踪_数据 trace_data type TraceData struct { ID int64 `json:"id" gorm:"column:id;primaryKey;autoIncrement"` - TaskId int64 `json:"taskId" gorm:"column:task_id"` // 任务ID - IMSI string `json:"imsi" gorm:"column:imsi"` - MSISDN string `json:"msisdn" gorm:"column:msisdn"` // 可能存在 - SrcAddr string `json:"srcAddr" gorm:"column:src_addr"` // 源地址带端口 - DstAddr string `json:"dstAddr" gorm:"column:dst_addr"` // 目标地址带端口 - IfType int64 `json:"ifType" gorm:"column:if_type"` // 接口类型,未分类 - MsgType int64 `json:"msgType" gorm:"column:msg_type"` - MsgDirect int64 `json:"msgDirect" gorm:"column:msg_direct"` - Length int64 `json:"length" gorm:"column:length"` // 去除头后的原始数据byte长度 - Timestamp int64 `json:"timestamp" gorm:"column:timestamp"` // 毫秒 - RawMsg string `json:"rawMsg" gorm:"column:raw_msg"` // 去除头后的原始数据byteBase64 - DecMsg string `json:"decMsg" gorm:"column:dec_msg"` // TCP内容消息 + TraceId int64 `json:"traceId" gorm:"column:trace_id"` // 跟踪任务ID + IMSI string `json:"imsi" gorm:"column:imsi"` // UE类型 IMSI + MSISDN string `json:"msisdn" gorm:"column:msisdn"` // UE类型 可能存在 + SrcAddr string `json:"srcAddr" gorm:"column:src_addr"` // 源地址 + DstAddr string `json:"dstAddr" gorm:"column:dst_addr"` // 目标地址 + IfType string `json:"ifType" gorm:"column:if_type"` // 接口类型,未分类 + MsgType int64 `json:"msgType" gorm:"column:msg_type"` // 消息类型,0-req, 1-rsp + MsgDirect int64 `json:"msgDirect" gorm:"column:msg_direct"` // 消息方向,0-recv,1-send + MsgNe string `json:"msgNe" gorm:"column:msg_ne"` // 消息网元 + MsgEvent string `json:"msgEvent" gorm:"column:msg_event"` // 消息事件,e.g: CreateContextReq + Length int64 `json:"length" gorm:"column:length"` // 原始数据byte长度 + Timestamp int64 `json:"timestamp" gorm:"column:timestamp"` // 纳秒时间戳 + RawMsg string `json:"rawMsg" gorm:"column:raw_msg"` // 原始数据byteBase64 } // TableName 表名称 diff --git a/src/modules/trace/model/trace_task.go b/src/modules/trace/model/trace_task.go index c581afa2..29f2ce20 100644 --- a/src/modules/trace/model/trace_task.go +++ b/src/modules/trace/model/trace_task.go @@ -2,27 +2,21 @@ package model // TraceTask 跟踪_任务 type TraceTask struct { - ID int64 `json:"id" gorm:"column:id;primaryKey;autoIncrement"` // 跟踪任务ID - TraceId string `json:"traceId" gorm:"column:trace_id"` // 任务编号 - TraceType string `json:"traceType" gorm:"column:trace_type"` // 1-Interface,2-Device,3-User - StartTime int64 `json:"startTime" gorm:"column:start_time"` // 开始时间 毫秒 - EndTime int64 `json:"endTime" gorm:"column:end_time"` // 结束时间 毫秒 - Interfaces string `json:"interfaces" gorm:"column:interfaces"` // 接口跟踪必须 例如 N8,N10 - IMSI string `json:"imsi" gorm:"column:imsi"` // 用户跟踪必须 - MSISDN string `json:"msisdn" gorm:"column:msisdn"` // 用户跟踪可选 - UeIp string `json:"ueIp" gorm:"column:ue_ip"` // 设备跟踪必须 IP - SrcIp string `json:"srcIp" gorm:"column:src_ip"` // 源地址IP - DstIp string `json:"dstIp" gorm:"column:dst_ip"` // 目标地址IP - SignalPort int64 `json:"signalPort" gorm:"column:signal_port"` // 地址IP端口 - CreateBy string `json:"createBy" gorm:"column:create_by"` // 创建者 - CreateTime int64 `json:"createTime" gorm:"column:create_time"` // 创建时间 - UpdateBy string `json:"updateBy" gorm:"column:update_by"` // 更新者 - UpdateTime int64 `json:"updateTime" gorm:"column:update_time"` // 更新时间 - Remark string `json:"remark" gorm:"column:remark"` // 备注 - NeType string `json:"neType" gorm:"column:ne_type"` // 网元类型 - NeId string `json:"neId" gorm:"column:ne_id"` // 网元ID - NotifyUrl string `json:"notifyUrl" gorm:"column:notify_url"` // 信息数据通知回调地址UDP 例如udp:192.168.5.58:29500 - FetchMsg string `json:"fetchMsg" gorm:"column:fetch_msg"` // 任务下发请求响应消息 + ID int64 `json:"id" gorm:"column:id;primaryKey;autoIncrement"` // 跟踪任务ID + TraceId string `json:"traceId" gorm:"column:trace_id"` // 任务编号 + TraceType string `json:"traceType" gorm:"column:trace_type" binding:"required"` // 1-Interface,2-Device,3-UE + StartTime int64 `json:"startTime" gorm:"column:start_time"` // 开始时间 毫秒 + EndTime int64 `json:"endTime" gorm:"column:end_time" binding:"required"` // 结束时间 毫秒 + Interfaces string `json:"interfaces" gorm:"column:interfaces"` // 接口跟踪必须 例如 N8,N10 + IMSI string `json:"imsi" gorm:"column:imsi"` // 用户跟踪必须 + MSISDN string `json:"msisdn" gorm:"column:msisdn"` // 用户跟踪可选 + SrcIp string `json:"srcIp" gorm:"column:src_ip"` // 源地址IP + DstIp string `json:"dstIp" gorm:"column:dst_ip"` // 目标地址IP + CreateBy string `json:"createBy" gorm:"column:create_by"` // 创建者 + CreateTime int64 `json:"createTime" gorm:"column:create_time"` // 创建时间 + Remark string `json:"remark" gorm:"column:remark"` // 备注 + NeList string `json:"neList" gorm:"column:ne_list" binding:"required"` // 网元列表 neType_neId 例如 UDM_001,AMF_001 + NotifyUrl string `json:"notifyUrl" gorm:"column:notify_url"` // 信息数据通知回调地址UDP 例如udp:192.168.5.58:33033 } // TableName 表名称 diff --git a/src/modules/trace/model/trace_task_udp_msg.go b/src/modules/trace/model/trace_task_udp_msg.go new file mode 100644 index 00000000..99019c77 --- /dev/null +++ b/src/modules/trace/model/trace_task_udp_msg.go @@ -0,0 +1,42 @@ +package model + +type TraceDefType = int64 + +const ( + MSG_TYPE_REQ TraceDefType = 0 + MSG_TYPE_RSP TraceDefType = 1 + MSG_DIRECT_RECV TraceDefType = 0 + MSG_DIRECT_SEND TraceDefType = 1 + // NF_TYPE_AMF = "AMF" + // NF_TYPE_SMF = "SMF" + // NF_TYPE_AUSF = "AUSF" + // NF_TYPE_UDM = "UDM" + // NF_TYPE_PCF = "PCF" +) + +// TraceMsg 跟踪_消息 +type TraceMsg struct { + TraceId int + MsgType TraceDefType //0-req, 1-rsp + MsgDirect TraceDefType //0-recv,1-send + NfName string + MsgEvent string //e.g: CreateContextReq + IMSI string + IfType string //interface type: N2,N8... + SrcIpStr string + DstIpStr string + Timestamp int64 +} + +// TraceReq 跟踪_请求 +type TraceReq struct { + TraceId int64 `json:"traceId"` // Unique identifier for trace operations:delete... + TraceType string `json:"traceType"` // Type of trace: Interface;UE; Device + StartTime string `json:"startTime"` // Start time of the trace: e.g., "2025-04-12 11:24:59" + EndTime string `json:"endTime"` // End time of the trace: e.g., "2025-04-12 14:24:59" + Interfaces []string `json:"interfaces,omitempty"` // List of interfaces: e.g., ["N8", "N10", "N1/N2"] + IMSI string `json:"imsi,omitempty"` // International Mobile Subscriber Identity + SrcIp string `json:"srcIp,omitempty"` // Source IP address (used for device-level filtering) + DstIp string `json:"dstIp,omitempty"` // Destination IP address (used for device-level filtering) + NotifyUrl string `json:"notifyUrl,omitempty"` // Notification URL: e.g., "udp:192.168.5.58:33033" +} diff --git a/src/modules/trace/packet_task/packet.go b/src/modules/trace/packet_task/packet.go deleted file mode 100644 index 420b5a39..00000000 --- a/src/modules/trace/packet_task/packet.go +++ /dev/null @@ -1,245 +0,0 @@ -package packet_task - -import ( - "fmt" - "os" - "path/filepath" - "runtime" - "strings" - "sync" - "time" - - "be.ems/src/framework/logger" - wsService "be.ems/src/modules/ws/service" - "github.com/gopacket/gopacket" - "github.com/gopacket/gopacket/layers" - "github.com/gopacket/gopacket/pcap" - "github.com/gopacket/gopacket/pcapgo" -) - -// 捕获任务 -var taskMap sync.Map - -// task 任务信息 -type task struct { - TaskNo string // 任务编号 - Handle *pcap.Handle // 捕获句柄 - File *os.File // 捕获信息输出文件句柄 - Writer *pcapgo.Writer // 捕获信息输出句柄 - Filter string // 过滤表达式 - Ticker *time.Ticker // 任务失效定时器 -} - -// NetworkDevices 获取网卡设备信息 -func NetworkDevices() ([]pcap.Interface, error) { - devices, err := pcap.FindAllDevs() - if err != nil { - logger.Errorf("interfaces find all devices err: %s", err.Error()) - return nil, err - } - return devices, nil -} - -// verifyDevice 检查网卡设备是否存在 -func verifyDevice(str string) (string, bool) { - devices, err := pcap.FindAllDevs() - if err != nil { - logger.Errorf("interfaces find all devices err: %s", err.Error()) - return "", false - } - for _, device := range devices { - if len(device.Addresses) == 0 { - continue - } - if device.Name == str { - return device.Name, true - } - for _, address := range device.Addresses { - if address.IP.String() == str { - return device.Name, true - } - } - } - return "", false -} - -// outputPCAP 输出 pcap 文件 -// 新文件时需要 snaplen 最大长度 linktype 链路类型 -func outputPCAP(snaplen uint32, linktype layers.LinkType, outputFile string) (*os.File, *pcapgo.Writer, error) { - var err error - var f *os.File - if err := os.MkdirAll(filepath.Dir(outputFile), 0775); err != nil { - return nil, nil, err - } - - // 检查文件是否存在 - if _, err = os.Stat(outputFile); os.IsNotExist(err) { - f, err = os.Create(outputFile) - if err != nil { - return nil, nil, err - } - w := pcapgo.NewWriter(f) - w.WriteFileHeader(snaplen, linktype) // new file, must do this. - return f, w, nil - } - - f, err = os.OpenFile(outputFile, os.O_APPEND, 0700) - if err != nil { - return nil, nil, err - } - w := pcapgo.NewWriter(f) - return f, w, nil -} - -// capturePacketSource 捕获数据 -func capturePacketSource(taskInfo *task) { - // capture packets - packetSource := gopacket.NewPacketSource(taskInfo.Handle, taskInfo.Handle.LinkType()) - packetSource.Lazy = false - packetSource.NoCopy = true - packetSource.DecodeStreamsAsDatagrams = true - - // 协程停止后关闭句柄并移除任务信息 - defer func() { - taskInfo.Ticker.Stop() - taskInfo.Handle.Close() - if taskInfo.File != nil { - taskInfo.File.Close() - } - taskMap.Delete(taskInfo.TaskNo) - }() - - frameNumber := 0 // 帧编号 - frameTime := 0.000000 // 时间 - var startTimestamp time.Time // 开始时间 - - for { - select { - case <-taskInfo.Ticker.C: - return - case packet := <-packetSource.Packets(): - if packet == nil { - continue - } - // if packet.Metadata().Timestamp.Before(time.Now()) { - // continue - // } - if taskInfo.Writer != nil { - taskInfo.Writer.WritePacket(packet.Metadata().CaptureInfo, packet.Data()) - } - fmt.Println("---------- packet.Layers() ", len(packet.Layers())) - frameNumber++ // 帧编号 - currentTimestamp := packet.Metadata().Timestamp - if !startTimestamp.IsZero() { - // 计算时间差转换为秒 - frameTime = currentTimestamp.Sub(startTimestamp).Seconds() - } else { - startTimestamp = currentTimestamp - } - - // 数据 - frameMeta := parsePacketFrame(frameNumber, frameTime, packet) - - // 推送到ws订阅组 - wsService.NewWSSend.ByGroupID(fmt.Sprintf("%s_%s", wsService.GROUP_TRACE_PACKET, taskInfo.TaskNo), frameMeta) - } - } -} - -// LiveStart 开始捕获数据 -func LiveStart(taskNo, deviceName, filterBPF string, outputFile bool) (string, error) { - if _, ok := taskMap.Load(taskNo); ok { - return "", fmt.Errorf("task no. %s already exist", taskNo) - } - - // Verify the specified network interface exists - device, deviceOk := verifyDevice(deviceName) - if !deviceOk { - return "", fmt.Errorf("network device not exist: %s", deviceName) - } - - snapshotLength := 262144 - - // open device - handle, err := pcap.OpenLive(device, int32(snapshotLength), true, pcap.BlockForever) - if err != nil { - logger.Errorf("open live err: %s", err.Error()) - if strings.Contains(err.Error(), "operation not permitted") { - return "", fmt.Errorf("you don't have permission to capture on that/these device(s)") - } - return "", err - } - - // write a new file - var w *pcapgo.Writer - var f *os.File - if outputFile { - // 网管本地路径 - localFilePath := fmt.Sprintf("/tmp/omc/packet/%s.pcap", taskNo) - if runtime.GOOS == "windows" { - localFilePath = fmt.Sprintf("C:%s", localFilePath) - } - f, w, err = outputPCAP(uint32(snapshotLength), handle.LinkType(), localFilePath) - if err != nil { - return "", err - } - } - - // set filter - if filterBPF != "" { - if err = handle.SetBPFFilter(filterBPF); err != nil { - logger.Errorf("packet BPF Filter %s => %s", filterBPF, err.Error()) - filterBPF = "" - } - } - - // save tasks - taskInfo := &task{ - TaskNo: taskNo, - Handle: handle, - File: f, - Writer: w, - Filter: filterBPF, - Ticker: time.NewTicker(time.Second * 120), - } - - go capturePacketSource(taskInfo) - taskMap.Store(taskNo, taskInfo) - return fmt.Sprintf("task no. %s initiated", taskNo), nil -} - -// LiveFilter 捕获过滤 -func LiveFilter(taskNo, expr string) error { - info, ok := taskMap.Load(taskNo) - if !ok { - return fmt.Errorf("task no. %s not exist", taskNo) - } - task := info.(*task) - task.Filter = expr - err := task.Handle.SetBPFFilter(expr) - if err != nil { - logger.Errorf("packet BPF Filter %s => %s", expr, err.Error()) - return fmt.Errorf("can't parse filter expression") - } - return nil -} - -// LiveTimeout 更新捕获失效时间 -func LiveTimeout(taskNo string, seconds int) error { - info, ok := taskMap.Load(taskNo) - if !ok { - return fmt.Errorf("task no. %s not exist", taskNo) - } - info.(*task).Ticker.Reset(time.Duration(seconds) * time.Second) - return nil -} - -// LiveStop 停止捕获数据 -func LiveStop(taskNo string) error { - info, ok := taskMap.Load(taskNo) - if !ok { - return fmt.Errorf("task no. %s not exist", taskNo) - } - info.(*task).Ticker.Reset(time.Millisecond) - return nil -} diff --git a/src/modules/trace/packet_task/packet_frame.go b/src/modules/trace/packet_task/packet_frame.go deleted file mode 100644 index d060149d..00000000 --- a/src/modules/trace/packet_task/packet_frame.go +++ /dev/null @@ -1,843 +0,0 @@ -package packet_task - -import ( - "encoding/base64" - "fmt" - "strings" - - "be.ems/src/framework/logger" - "github.com/gopacket/gopacket" - "github.com/gopacket/gopacket/layers" -) - -// FrameMeta 数据帧元信息 -type FrameMeta struct { - Number int `json:"number"` - Comments bool `json:"comments"` - Ignored bool `json:"ignored"` - Marked bool `json:"marked"` - Bg int `json:"bg"` // 背景色 数值转字符串16进制 15007687->e4ffc7 - Fg int `json:"fg"` // 前景色 文字 - Columns [7]string `json:"columns"` // 长度对应字段 ['No.', 'Time', 'Source', 'Destination', 'Protocol', 'Length', 'Info'] - Frame Frame `json:"frame"` -} - -// Frame 数据帧信息 -type Frame struct { - Number int `json:"number"` - Comments []string `json:"comments"` - DataSource []map[string]string `json:"data_sources"` - Tree []ProtoTree `json:"tree"` - Follow [][]string `json:"follow"` -} - -// ProtoTree 数据帧协议树 -type ProtoTree struct { - Label string `json:"label"` // 显示的文本 - Filter string `json:"filter"` // 过滤条件 - Severity string `json:"severity"` - Type string `json:"type"` - URL string `json:"url"` - Fnum int `json:"fnum"` - Start int `json:"start"` // 开始位置 - Length int `json:"length"` // 长度 - DataSourceIdx int `json:"data_source_idx"` - Tree []ProtoTree `json:"tree"` // 子节点 -} - -// parsePacketFrame 解析数据包帧信息 -// frameNumber 帧编号 i++ -// frameTime 时间秒 0.000000 -func parsePacketFrame(frameNumber int, frameTime float64, packet gopacket.Packet) FrameMeta { - frameSrcHost := "" // 源主机IP - frameDstHost := "" // 目的主机IP - frameProtocol := "" // 协议 - frameLength := fmt.Sprintf("%d", packet.Metadata().Length) // 长度 - frameInfo := "" // 信息 - fg, bg := colorRuleFB(packet) // 背景色 数值转字符串16进制 15007687->e4ffc7 - - frame := Frame{ - Number: frameNumber, - Comments: []string{}, - DataSource: []map[string]string{ - { - "name": fmt.Sprintf("Frame (%d bytes)", packet.Metadata().Length), - "data": base64.StdEncoding.EncodeToString(packet.Data()), - }, - }, - Tree: []ProtoTree{}, // 各层的数据 - Follow: [][]string{}, // {"TCP", "tcp.stream eq 0"} - } - - // 连接层 - // fmt.Println(packet.LinkLayer()) - if linkLayer := packet.LinkLayer(); linkLayer != nil { - linkTree := linkLayerTree(linkLayer) - frame.Tree = append(frame.Tree, linkTree) - } - - // 网络层 - // fmt.Println(packet.NetworkLayer()) - if networkLayer := packet.NetworkLayer(); networkLayer != nil { - networkTree := networkLayerTree(networkLayer) - frame.Tree = append(frame.Tree, networkTree) - - src, dst := networkLayer.NetworkFlow().Endpoints() - frameSrcHost = src.String() - frameDstHost = dst.String() - if frameDstHost == "ff:ff:ff:ff" { - frameDstHost = "Broadcast" - } - } - - // 传输层 - // fmt.Println(packet.TransportLayer()) - if transportLayer := packet.TransportLayer(); transportLayer != nil { - info, transportTree := transportLayerTree(transportLayer) - frame.Tree = append(frame.Tree, transportTree) - - frameProtocol = transportLayer.LayerType().String() - frameInfo += info - frame.Follow = append(frame.Follow, []string{ - frameProtocol, - fmt.Sprintf("%s.stream eq 0", strings.ToLower(frameProtocol)), - }) - } - - // 应用层 - // fmt.Println(packet.ApplicationLayer()) - if applicationLayer := packet.ApplicationLayer(); applicationLayer != nil { - applicationTree := applicationLayerTree(applicationLayer) - frame.Tree = append(frame.Tree, applicationTree) - } - - return FrameMeta{ - Number: frameNumber, - Comments: false, - Ignored: false, - Marked: false, - Bg: fg, - Fg: bg, - Columns: [7]string{ - fmt.Sprintf("%d", frameNumber), - fmt.Sprintf("%.6f", frameTime), // 格式化为 0.000000 - frameSrcHost, - frameDstHost, - frameProtocol, - frameLength, - frameInfo, - }, - Frame: frame, - } -} - -// linkLayerTree 连接层 -func linkLayerTree(linkLayer gopacket.LinkLayer) ProtoTree { - var protoTree ProtoTree - switch layer := linkLayer.(type) { - case *layers.Ethernet: // 最常见的链路层协议,用于局域网(LAN)中。 - srcMAC := layer.SrcMAC - dstMAC := layer.DstMAC - ethernetLayerLen := len(layer.Contents) - protoTree = ProtoTree{ - Label: fmt.Sprintf("%s II, Src: %s, Dst: %s", layer.LayerType(), srcMAC, dstMAC), - Filter: "eth", - Start: 0, - Length: ethernetLayerLen, - DataSourceIdx: 0, - Tree: []ProtoTree{ - { - Label: fmt.Sprintf("Destination: %s", dstMAC.String()), - Filter: fmt.Sprintf("eth.dst == %s", dstMAC.String()), - Start: 0, - Length: ethernetLayerLen, - DataSourceIdx: 0, - Tree: []ProtoTree{ - { - Label: fmt.Sprintf("Address: %s", dstMAC.String()), - Filter: fmt.Sprintf("eth.addr == %s", dstMAC.String()), - Start: 0, - Length: 6, - DataSourceIdx: 0, - Tree: []ProtoTree{}, - Severity: "", - Type: "", - Fnum: 926233912, - URL: "", - }, - { - Label: ".... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)", - Filter: "eth.dst.lg == 0", - Start: 0, - Length: 3, - DataSourceIdx: 0, - Tree: []ProtoTree{}, - Severity: "", - Type: "", - Fnum: 926233912, - URL: "", - }, - { - Label: ".... ...0 .... .... .... .... = IG bit: Individual address (unicast)", - Filter: "eth.dst.ig == 0", - Start: 0, - Length: 3, - DataSourceIdx: 0, - Tree: []ProtoTree{}, - Severity: "", - Type: "", - Fnum: 926233912, - URL: "", - }, - }, - Severity: "", - Type: "", - Fnum: 0, - URL: "", - }, - { - Label: fmt.Sprintf("Source: %s", srcMAC.String()), - Filter: fmt.Sprintf("eth.src == %s", srcMAC.String()), - Start: ethernetLayerLen, - Length: ethernetLayerLen, - DataSourceIdx: 0, - Tree: []ProtoTree{ - { - Label: fmt.Sprintf("Address: %s", srcMAC.String()), - Filter: fmt.Sprintf("eth.addr == %s", dstMAC.String()), - Start: ethernetLayerLen, - Length: ethernetLayerLen, - DataSourceIdx: 0, - Tree: []ProtoTree{}, - Severity: "", - Type: "", - Fnum: 926233912, - URL: "", - }, - { - Label: ".... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)", - Filter: "eth.src.lg == 0", - Start: len(srcMAC), - Length: len(srcMAC) / 2, - DataSourceIdx: 0, - Tree: []ProtoTree{}, - Severity: "", - Type: "", - Fnum: 926233912, - URL: "", - }, - { - Label: ".... ...0 .... .... .... .... = IG bit: Individual address (unicast)", - Filter: "eth.src.ig == 0", - Start: len(srcMAC), - Length: len(srcMAC) / 2, - DataSourceIdx: 0, - Tree: []ProtoTree{}, - Severity: "", - Type: "", - Fnum: 926233912, - URL: "", - }, - }, - Severity: "", - Type: "", - Fnum: 0, - URL: "", - }, - { - Label: "Type: IPv4 (0x0800)", - Filter: "eth.type == 0x0800", - Start: len(dstMAC) + len(srcMAC), - Length: len(layer.LayerContents()) - (len(dstMAC) + len(srcMAC)), - DataSourceIdx: 0, - Tree: []ProtoTree{}, - Severity: "", - Type: "", - Fnum: 0, - URL: "", - }, - }, - Severity: "", - Type: "proto", - Fnum: 1052, - URL: "", - } - case *layers.PPP: // 点对点协议,通常用于拨号连接。 - protoTree = ProtoTree{ - Label: fmt.Sprintf("%s ", layer.LayerType()), - Filter: "ppp", - Start: 0, - Length: len(layer.LayerContents()), - DataSourceIdx: 0, - Tree: []ProtoTree{}, - Severity: "", - Type: "proto", - Fnum: 1052, - URL: "", - } - } - return protoTree -} - -// networkLayerTree 网络层 -func networkLayerTree(networkLayer gopacket.NetworkLayer) ProtoTree { - var protoTree ProtoTree - switch layer := networkLayer.(type) { - case *layers.IPv4: // 第四版因特网协议,广泛使用。 - // 偏移量取连接层的长度Length - linkLayerLen := 14 - networkLayerLen := len(layer.Contents) - - version := layer.Version - length := layer.Length - srcIP := layer.SrcIP - dstIP := layer.DstIP - ihl := layer.IHL - headerLength := ihl * 4 // 提取头部长度 - tos := layer.TOS - dscp, ecn := networkDSCPAndECN(tos) - identification := layer.Id - flags := layer.Flags // 提取标志位 - // 生成标志描述 - flagsDesc := networkFlagsDesc(flags) - rb, rbDesc := networkFlagsEvil(flags) - df, dfDesc := networkFlagsDF(flags) - mf, mfDesc := networkFlagsMF(flags) - fragOffset := layer.FragOffset - fragOffsetDesc := networkOffset(fragOffset) - ttl := layer.TTL - proto := layer.Protocol - checksum := layer.Checksum - - protoTree = ProtoTree{ - Label: fmt.Sprintf("Internet Protocol Version %d, Src: %s, Dst: %s", version, srcIP, dstIP), - Filter: "ip", - Start: linkLayerLen, - Length: networkLayerLen, - DataSourceIdx: 0, - Tree: []ProtoTree{ - { - Label: fmt.Sprintf("%04b .... = Version: %d", version, version), - Filter: fmt.Sprintf("ip.version == %d", version), - Start: linkLayerLen, - Length: 1, - DataSourceIdx: 0, - Tree: []ProtoTree{}, - Severity: "", - Type: "", - Fnum: 0, - URL: "", - }, - { - Label: fmt.Sprintf(".... 0101 = Header Length: %d bytes (%d)", headerLength, ihl), - Filter: fmt.Sprintf("ip.hdr_len == %d", headerLength), - Start: linkLayerLen, - Length: 1, - DataSourceIdx: 0, - Tree: []ProtoTree{}, - Severity: "", - Type: "", - Fnum: 0, - URL: "", - }, - { - Label: fmt.Sprintf("Differentiated Services Field: 0x%02x (DSCP: %s, ECN: %s)", tos, dscp, ecn), - Filter: fmt.Sprintf("ip.dsfield == 0x%02x", tos), - Start: linkLayerLen + 1, - Length: 1, - DataSourceIdx: 0, - Tree: []ProtoTree{ - { - Label: fmt.Sprintf("0000 00.. = Differentiated Services Codepoint: %s (%d)", dscp, tos), - Filter: fmt.Sprintf("ip.dsfield.dscp == %d", tos>>2), - Start: linkLayerLen + 1, - Length: 1, - DataSourceIdx: 0, - Tree: []ProtoTree{}, - Severity: "", - Type: "", - Fnum: 926233912, - URL: "", - }, - { - Label: fmt.Sprintf(".... ..00 = Explicit Congestion Notification: %s Capable Transport (%d)", ecn, tos), - Filter: fmt.Sprintf("ip.dsfield.ecn == %d", tos&0x03), - Start: linkLayerLen + 1, - Length: 1, - DataSourceIdx: 0, - Tree: []ProtoTree{}, - Severity: "", - Type: "", - Fnum: 926233912, - URL: "", - }, - }, - Severity: "", - Type: "", - Fnum: 0, - URL: "", - }, - { - Label: fmt.Sprintf("Total Length: %d", length), - Filter: fmt.Sprintf("ip.len == %d", length), - Start: linkLayerLen + 2, - Length: 2, - DataSourceIdx: 0, - Tree: []ProtoTree{}, - Severity: "", - Type: "", - Fnum: 0, - URL: "", - }, - { - Label: fmt.Sprintf("Identification: 0x%X (%d)", identification, identification), - Filter: fmt.Sprintf("ip.id == 0x%X", identification), - Start: linkLayerLen + 4, - Length: 2, - DataSourceIdx: 0, - Tree: []ProtoTree{}, - Severity: "", - Type: "", - Fnum: 0, - URL: "", - }, - { - Label: fmt.Sprintf("%03b. .... = Flags: %s", flags, flagsDesc), - Filter: fmt.Sprintf("ip.flags == 0x%X", flags), - Start: linkLayerLen + 6, - Length: 1, - DataSourceIdx: 0, - Tree: []ProtoTree{ - { - Label: fmt.Sprintf("0... .... = Reserved bit: %s", rbDesc), - Filter: fmt.Sprintf("ip.flags.rb == %d", rb), - Start: linkLayerLen + 6, - Length: 1, - DataSourceIdx: 0, - Tree: []ProtoTree{}, - Severity: "", - Type: "", - Fnum: 926233912, - URL: "", - }, - { - Label: fmt.Sprintf(".1.. .... = Don't fragment: %s", dfDesc), - Filter: fmt.Sprintf("ip.flags.df == %d", df), - Start: linkLayerLen + 6, - Length: 1, - DataSourceIdx: 0, - Tree: []ProtoTree{}, - Severity: "", - Type: "", - Fnum: 926233912, - URL: "", - }, - { - Label: fmt.Sprintf("..0. .... = More fragments: %s", mfDesc), - Filter: fmt.Sprintf("ip.flags.mf == %d", mf), - Start: linkLayerLen + 6, - Length: 1, - DataSourceIdx: 0, - Tree: []ProtoTree{}, - Severity: "", - Type: "", - Fnum: 926233912, - URL: "", - }, - }, - Severity: "", - Type: "", - Fnum: 0, - URL: "", - }, - { - Label: fmt.Sprintf("%s = Fragment Offset: %d", fragOffsetDesc, fragOffset), - Filter: fmt.Sprintf("ip.frag_offset == %d", fragOffset), - Start: linkLayerLen + 6, - Length: 2, - DataSourceIdx: 0, - Tree: []ProtoTree{}, - Severity: "", - Type: "", - Fnum: 0, - URL: "", - }, - { - Label: fmt.Sprintf("Time to Live: %d", ttl), - Filter: fmt.Sprintf("ip.ttl == %d", ttl), - Start: linkLayerLen + 8, - Length: 1, - DataSourceIdx: 0, - Tree: []ProtoTree{}, - Severity: "", - Type: "", - Fnum: 0, - URL: "", - }, - { - Label: fmt.Sprintf("Protocol: TCP (%d)", proto), - Filter: fmt.Sprintf("ip.proto == %d", proto), - Start: linkLayerLen + 9, - Length: 1, - DataSourceIdx: 0, - Tree: []ProtoTree{}, - Severity: "", - Type: "", - Fnum: 0, - URL: "", - }, - { - Label: fmt.Sprintf("Header Checksum: 0x%x [validation disabled]", checksum), - Filter: fmt.Sprintf("ip.checksum == 0x%x", checksum), - Start: linkLayerLen + 10, - Length: 2, - DataSourceIdx: 0, - Tree: []ProtoTree{}, - Severity: "", - Type: "", - Fnum: 0, - URL: "", - }, - { - Label: "Header checksum status: Unverified", - Filter: "ip.checksum.status == \"Unverified\"", - Start: 0, - Length: 0, - DataSourceIdx: 0, - Tree: []ProtoTree{}, - Severity: "", - Type: "", - Fnum: 0, - URL: "", - }, - { - Label: fmt.Sprintf("Source Address: %s", srcIP), - Filter: fmt.Sprintf("ip.src == %s", srcIP), - Start: linkLayerLen + 12, - Length: 4, - DataSourceIdx: 0, - Tree: []ProtoTree{}, - Severity: "", - Type: "", - Fnum: 0, - URL: "", - }, - { - Label: fmt.Sprintf("Destination Address: %s", dstIP), - Filter: fmt.Sprintf("ip.dst == %s", dstIP), - Start: linkLayerLen + 16, - Length: 4, - DataSourceIdx: 0, - Tree: []ProtoTree{}, - Severity: "", - Type: "", - Fnum: 0, - URL: "", - }, - }, - Severity: "", - Type: "proto", - Fnum: 1052, - URL: "", - } - - logger.Infof("-> (tos 0x%x, ttl %d, id %d, offset %d, flags [%s], proto %s (%d), length %d)\n", tos, ttl, identification, fragOffset, flags, proto, proto, len(layer.Contents)+len(layer.Payload)) - case *layers.IPv6: // 第六版因特网协议,逐渐取代 IPv4。 - logger.Infof("-> (flowlabel 0x%x, hlim %d, next-header %s (%d), payload length: %d)\n", layer.FlowLabel, layer.HopLimit, layer.NextHeader, layer.NextHeader, len(layer.Payload)) - } - return protoTree -} - -// transportLayerTree 传输层 -func transportLayerTree(transportLayer gopacket.TransportLayer) (string, ProtoTree) { - var info string - var tree ProtoTree - switch layer := transportLayer.(type) { - case *layers.TCP: // 传输控制协议,提供可靠的数据传输。 - // 偏移量取连接层加网络层的长度Length - linkLayerAndNetworkLayerLen := 14 + 20 - transportLayerLen := len(layer.Contents) - payloadrLen := len(layer.Payload) - seq := layer.Seq - ack := layer.Ack - srcPort := layer.SrcPort - dstPort := layer.DstPort - dataOffset := layer.DataOffset - hdrLen := dataOffset * 4 - flags, flagsDesc := transportFlagsDesc(layer) - flagsACK, flagsACKDesc := transportFlagsStatus(layer.ACK) - flagsPSH, flagsPSHDesc := transportFlagsStatus(layer.PSH) - window := layer.Window - checksum := layer.Checksum - urgent := layer.Urgent - optionsLen, optionsDesc := transportOptions(layer.Options) - payloadStr := bytesToHexString(layer.Payload) - - tree = ProtoTree{ - Label: fmt.Sprintf("Transmission Control Protocol, Src Port: %s, Dst Port: %s, Seq: %d, Ack: %d, Len: %d", srcPort, dstPort, seq, ack, payloadrLen), - Filter: "tcp", - Start: linkLayerAndNetworkLayerLen, - Length: transportLayerLen, - DataSourceIdx: 0, - Tree: []ProtoTree{ - { - Label: fmt.Sprintf("Source Port: %s", srcPort), - Filter: fmt.Sprintf("tcp.srcport == %d", srcPort), - Start: linkLayerAndNetworkLayerLen, - Length: 2, - DataSourceIdx: 0, - Tree: []ProtoTree{}, - Severity: "", - Type: "", - Fnum: 0, - URL: "", - }, - { - Label: fmt.Sprintf("Destination Port: %s", dstPort), - Filter: fmt.Sprintf("tcp.dstport == %d", dstPort), - Start: linkLayerAndNetworkLayerLen + 2, - Length: 2, - DataSourceIdx: 0, - Tree: []ProtoTree{}, - Severity: "", - Type: "", - Fnum: 0, - URL: "", - }, - { - Label: fmt.Sprintf("TCP Segment Len: %d", payloadrLen), - Filter: fmt.Sprintf("tcp.len == %d", payloadrLen), - Start: linkLayerAndNetworkLayerLen + 12, - Length: 1, - DataSourceIdx: 0, - Tree: []ProtoTree{}, - Severity: "", - Type: "", - Fnum: 0, - URL: "", - }, - { - Label: fmt.Sprintf("Sequence Number: %d (relative sequence number)", seq), - Filter: fmt.Sprintf("tcp.seq == %d", seq), - Start: linkLayerAndNetworkLayerLen + 4, - Length: 4, - DataSourceIdx: 0, - Tree: []ProtoTree{}, - Severity: "", - Type: "", - Fnum: 0, - URL: "", - }, - { - Label: fmt.Sprintf("Acknowledgment Number: %d (relative ack number)", ack), - Filter: fmt.Sprintf("tcp.ack == %d", ack), - Start: linkLayerAndNetworkLayerLen + 8, - Length: 4, - DataSourceIdx: 0, - Tree: []ProtoTree{}, - Severity: "", - Type: "", - Fnum: 0, - URL: "", - }, - { - Label: fmt.Sprintf("%04b .... = Header Length: %d bytes (%d)", dataOffset, hdrLen, dataOffset), - Filter: fmt.Sprintf("tcp.hdr_len == %d", hdrLen), - Start: linkLayerAndNetworkLayerLen + 12, - Length: 1, - DataSourceIdx: 0, - Tree: []ProtoTree{}, - Severity: "", - Type: "", - Fnum: 0, - URL: "", - }, - { - Label: fmt.Sprintf("Flags: 0x%03X (%s)", flags, flagsDesc), - Filter: fmt.Sprintf("ip.frag_offset == 0x%03X", flags), - Start: linkLayerAndNetworkLayerLen + 12, - Length: 2, - DataSourceIdx: 0, - Tree: []ProtoTree{ - { - Label: fmt.Sprintf(".... ...%d .... = Acknowledgment: %s", flagsACK, flagsACKDesc), - Filter: fmt.Sprintf("tcp.flags.ack == %d", flagsACK), - Start: linkLayerAndNetworkLayerLen + 13, - Length: 1, - DataSourceIdx: 0, - Tree: []ProtoTree{}, - Severity: "", - Type: "", - Fnum: 926233912, - URL: "", - }, - { - Label: fmt.Sprintf(".... .... %d... = Push: %s", flagsPSH, flagsPSHDesc), - Filter: fmt.Sprintf("tcp.flags.push == %d", flagsPSH), - Start: linkLayerAndNetworkLayerLen + 13, - Length: 1, - DataSourceIdx: 0, - Tree: []ProtoTree{}, - Severity: "", - Type: "", - Fnum: 926233912, - URL: "", - }, - }, - Severity: "", - Type: "", - Fnum: 0, - URL: "", - }, - { - Label: fmt.Sprintf("Window: %d", window), - Filter: fmt.Sprintf("tcp.window_size_value == %d", window), - Start: linkLayerAndNetworkLayerLen + 14, - Length: 2, - DataSourceIdx: 0, - Tree: []ProtoTree{}, - Severity: "", - Type: "", - Fnum: 0, - URL: "", - }, - { - Label: fmt.Sprintf("Calculated window size: %d", window), - Filter: fmt.Sprintf("tcp.window_size == %d", window), - Start: linkLayerAndNetworkLayerLen + 14, - Length: 2, - DataSourceIdx: 0, - Tree: []ProtoTree{}, - Severity: "", - Type: "", - Fnum: 0, - URL: "", - }, - { - Label: fmt.Sprintf("Checksum: 0x%04x [unverified]", checksum), - Filter: fmt.Sprintf("tcp.checksum == 0x%04x", checksum), - Start: linkLayerAndNetworkLayerLen + 16, - Length: 2, - DataSourceIdx: 0, - Tree: []ProtoTree{}, - Severity: "", - Type: "", - Fnum: 0, - URL: "", - }, - { - Label: "Checksum Status: Unverified", - Filter: "tcp.checksum.status == \"Unverified\"", - Start: 0, - Length: 0, - DataSourceIdx: 0, - Tree: []ProtoTree{}, - Severity: "", - Type: "", - Fnum: 0, - URL: "", - }, - { - Label: fmt.Sprintf("Urgent Pointer: %d", urgent), - Filter: fmt.Sprintf("tcp.urgent_pointer == %d", urgent), - Start: linkLayerAndNetworkLayerLen + 18, - Length: 2, - DataSourceIdx: 0, - Tree: []ProtoTree{}, - Severity: "", - Type: "", - Fnum: 0, - URL: "", - }, - { - Label: fmt.Sprintf("Options: (%d bytes), %s", optionsLen, optionsDesc), - Filter: fmt.Sprintf("tcp.options == %d", optionsLen), - Start: linkLayerAndNetworkLayerLen + 20, - Length: int(optionsLen), - DataSourceIdx: 0, - Tree: []ProtoTree{}, - Severity: "", - Type: "", - Fnum: 0, - URL: "", - }, - { - Label: fmt.Sprintf("TCP payload (%d bytes)", payloadrLen), - Filter: fmt.Sprintf("tcp.payload == %s", payloadStr), - Start: linkLayerAndNetworkLayerLen + 32, - Length: payloadrLen, - DataSourceIdx: 0, - Tree: []ProtoTree{}, - Severity: "", - Type: "", - Fnum: 0, - URL: "", - }, - }, - Severity: "", - Type: "proto", - Fnum: 1052, - URL: "", - } - - info = fmt.Sprintf("%v -> %v [%s], Seq=%d Ack=%d Win=%d Len=1%d ", srcPort, dstPort, flagsDesc, seq, ack, window, payloadrLen) - logger.Infof("-> TCP, %s", info) - case *layers.UDP: // 用户数据报协议,提供无连接的快速数据传输。 - logger.Infof("-> UDP, length %d", len(layer.Payload)) - case *layers.UDPLite: - logger.Infof("-> UDPLite, length %d", len(layer.Payload)) - case *layers.SCTP: // 流控制传输协议,支持多流和多宿主机。 - logger.Infof("-> SCTP, length %d", len(layer.Payload)) - } - return info, tree -} - -// applicationLayerTree 应用层 -func applicationLayerTree(applicationLayer gopacket.ApplicationLayer) ProtoTree { - var protoTree ProtoTree - switch layer := applicationLayer.(type) { - case *layers.DNS: - logger.Infof("-> DNS, %d", layer.ID) - case *layers.SIP: - logger.Infof("-> SIP, %s", layer.RequestURI) - default: - logger.Infof("-> %s, length %d", layer.LayerType(), layer.Payload()) - if applicationHTTP(layer.LayerContents()) { - logger.Infof("-> HTTP, %s", layer.LayerContents()) - // 偏移量取连接层加网络层加协议层的长度Length - linkLayerAndNetworkLayerAndTransportLayerLen := 14 + 20 + 32 - length := len(layer.LayerContents()) - - protoTree = ProtoTree{ - Label: "Hypertext Transfer Protocol", - Filter: "http", - Start: linkLayerAndNetworkLayerAndTransportLayerLen, - Length: length, - DataSourceIdx: 0, - Tree: []ProtoTree{}, - Severity: "", - Type: "Chat", - Fnum: 1052, - URL: "", - } - - result := applicationHTTPProcess(string(layer.LayerContents())) - for _, v := range result { - protoTree.Tree = append(protoTree.Tree, ProtoTree{ - Label: v["label"].(string), - Filter: fmt.Sprintf("http.%s == %s", v["key"].(string), v["value"].(string)), - Start: linkLayerAndNetworkLayerAndTransportLayerLen + v["length"].(int), - Length: v["length"].(int), - DataSourceIdx: 0, - Tree: []ProtoTree{}, - Severity: "", - Type: "Chat", - Fnum: 1052, - URL: "", - }) - } - - } - } - return protoTree -} diff --git a/src/modules/trace/packet_task/packet_frame_util.go b/src/modules/trace/packet_task/packet_frame_util.go deleted file mode 100644 index 77d86a9f..00000000 --- a/src/modules/trace/packet_task/packet_frame_util.go +++ /dev/null @@ -1,346 +0,0 @@ -package packet_task - -import ( - "encoding/binary" - "fmt" - "net" - "strings" - - "github.com/gopacket/gopacket" - "github.com/gopacket/gopacket/layers" -) - -// networkDSCPAndECN 提取 TOS 字段并获取 DSCP 和 ECN -func networkDSCPAndECN(tos uint8) (string, string) { - // 提取 DSCP 和 ECN - dscp := tos >> 2 // 高 6 位 - ecn := tos & 0x03 // 低 2 位 - - // 定义 DSCP 映射 - dscpMapping := map[uint8]string{ - 0: "Default CS0", // Default Forwarding (DF) - 8: "CS1", // Class Selector 1 - 16: "CS2", // Class Selector 2 - 24: "CS3", // Class Selector 3 - 32: "CS4", // Class Selector 4 - 40: "CS5", // Class Selector 5 - 48: "CS6", // Class Selector 6 - 56: "CS7", // Class Selector 7 - } - - // 定义 ECN 映射 - ecnMapping := map[uint8]string{ - 0: "Not-ECT", // Not ECN-Capable Transport - 1: "ECT(1)", // ECN-Capable Transport - 2: "ECT(0)", // ECN-Capable Transport - 3: "CE", // Congestion Experienced - } - - // 返回可读的 DSCP 和 ECN 字符串 - return dscpMapping[dscp], ecnMapping[ecn] -} - -// networkFlagsDesc 生成标志描述 -func networkFlagsDesc(flags layers.IPv4Flag) string { - f := fmt.Sprintf("Flags: 0x%X", flags) - if flags&layers.IPv4DontFragment != 0 { - f += ", Don't fragment" - } - if flags&layers.IPv4MoreFragments != 0 { - f += ", More fragments" - } - return f -} - -// networkFlagsEvil 生成标志描述 Evil -func networkFlagsEvil(flags layers.IPv4Flag) (int, string) { - if flags&layers.IPv4EvilBit != 0 { - return 1, "Set" - } - return 0, "Not set" -} - -// networkFlagsDF 生成标志描述 DF -func networkFlagsDF(flags layers.IPv4Flag) (int, string) { - if flags&layers.IPv4DontFragment != 0 { - return 1, " Set" - } - return 0, "Not set" -} - -// networkFlagsMF 生成标志描述 MF -func networkFlagsMF(flags layers.IPv4Flag) (int, string) { - if flags&layers.IPv4MoreFragments != 0 { - return 1, " Set" - } - return 0, "Not set" -} - -// networkOffset 二进制Fragment Offset表示 ...0 0000 0000 0000 -func networkOffset(offset uint16) string { - return fmt.Sprintf("...0 %04b %04b %04b %04b", - (offset>>12)&0xF, // 高四位 - (offset>>8)&0xF, // 次四位 - (offset>>4)&0xF, // 再次四位 - offset&0xF, // 低四位 - ) -} - -// transportFlagsDesc 生成标志描述 -func transportFlagsDesc(layer *layers.TCP) (byte, string) { - var flags byte - var flagsDesc []string - if layer.FIN { - flags |= 1 << 0 // 0b00000001 - flagsDesc = append(flagsDesc, "FIN") - } - if layer.SYN { - flags |= 1 << 1 // 0b00000010 - flagsDesc = append(flagsDesc, "SYN") - } - if layer.RST { - flags |= 1 << 2 // 0b00000100 - flagsDesc = append(flagsDesc, "RST") - } - if layer.PSH { - flags |= 1 << 3 // 0b00001000 - flagsDesc = append(flagsDesc, "PSH") - } - if layer.ACK { - flags |= 1 << 4 // 0b00010000 - flagsDesc = append(flagsDesc, "ACK") - } - if layer.URG { - flags |= 1 << 5 // 0b00100000 - flagsDesc = append(flagsDesc, "URG") - } - if layer.ECE { - flags |= 1 << 6 // 0b01000000 - flagsDesc = append(flagsDesc, "ECE") - } - if layer.CWR { - flags |= 1 << 7 // 0b10000000 - flagsDesc = append(flagsDesc, "CWR") - } - if layer.NS { - flagsDesc = append(flagsDesc, "NS") - } - - return flags, strings.Join(flagsDesc, ", ") -} - -// transportFlagsStatus 生成标志描述状态 -func transportFlagsStatus(flag bool) (int, string) { - if flag { - return 1, " Set" - } - return 0, "Not set" -} - -// bytesToHexString 转换为十六进制字符串格式 -func bytesToHexString(data []byte) string { - var sb strings.Builder - for i, b := range data { - if i > 0 { - sb.WriteString(":") - } - sb.WriteString(fmt.Sprintf("%02x", b)) - } - return sb.String() -} - -// transportOptions 生成头部选项描述 -func transportOptions(options []layers.TCPOption) (uint8, string) { - var opts []string - var optLen uint8 - for _, opt := range options { - if opt.OptionType == layers.TCPOptionKindMSS && len(opt.OptionData) == 2 { - optLen += opt.OptionLength - opts = append(opts, fmt.Sprintf("%s val %v", - opt.OptionType.String(), - binary.BigEndian.Uint16(opt.OptionData), - )) - } else if opt.OptionType == layers.TCPOptionKindTimestamps && len(opt.OptionData) == 8 { - optLen += opt.OptionLength - opts = append(opts, fmt.Sprintf("%s val %v echo %v", - opt.OptionType.String(), - binary.BigEndian.Uint32(opt.OptionData[:4]), - binary.BigEndian.Uint32(opt.OptionData[4:8]), - )) - } else { - optLen += opt.OptionLength - opts = append(opts, opt.OptionType.String()) - } - } - return optLen, strings.Join(opts, ", ") -} - -// applicationHTTP 辨别 HTTP 数据 -func applicationHTTP(data []byte) bool { - if len(data) == 0 { - return false - } - prefixStr := string(data) - return strings.HasPrefix(prefixStr, "GET ") || strings.HasPrefix(prefixStr, "POST ") || - strings.HasPrefix(prefixStr, "PUT ") || strings.HasPrefix(prefixStr, "DELETE ") || - strings.HasPrefix(prefixStr, "HEAD ") || strings.HasPrefix(prefixStr, "OPTIONS ") || - strings.HasPrefix(prefixStr, "HTTP/") -} - -// applicationHTTP 处理 HTTP 请求 -func applicationHTTPProcess(data string) map[string]map[string]any { - p := make(map[string]map[string]any, 0) - // 按行分割 - lines := strings.Split(data, "\r\n") - for i, line := range lines { - if i == 0 { - label := line + "\r\n" - p[label] = map[string]any{ - "label": label, - "length": len([]byte(label)), - "key": "", - "value": "", - } - continue - } - - // 空行表示头部结束,Body开始 - if line == "" { - break - } - - label := line + "\r\n" - p[label] = map[string]any{ - "label": label, - "length": len([]byte(label)), - "key": "", - "value": "", - } - - // 分割键值对 - parts := strings.SplitN(line, ":", 2) - if len(parts) == 2 { - key := strings.TrimSpace(parts[0]) - value := strings.TrimSpace(parts[1]) - p[label]["key"] = key - p[label]["value"] = value - } - } - return p -} - -// colorRuleFB 着色规则-F前景,B背景 -// -// This file was created by Wireshark. Edit with care. -func colorRuleFB(packet gopacket.Packet) (int, int) { - // Ethernet - if ethernetLayer := packet.Layer(layers.LayerTypeEthernet); ethernetLayer != nil { - eth := ethernetLayer.(*layers.Ethernet) - ethData := eth.Contents - // Broadcast 检查第一个字节的最低位 - // #babdb6, #ffffff - if len(ethData) > 0 && (ethData[0]&1) == 1 { - return 12238262, 16777215 - } - // Routing CDP (Cisco Discovery Protocol) 检查前三个字节 - // #12272e, #fff3d6 - if ethernetLayer.LayerPayload()[0] == 0x01 && ethernetLayer.LayerPayload()[1] == 0x00 && ethernetLayer.LayerPayload()[2] == 0x0c { - return 1189678, 16774102 - } - // Routing CARP (Common Address Redundancy Protocol) uses a specific Ethernet type (0x0800) - // #12272e, #fff3d6 - if ethernetLayer.LayerType() == 0x0800 { - return 1189678, 16774102 - } - } - // ARP - if arpLayer := packet.Layer(layers.LayerTypeARP); arpLayer != nil { - // #12272e, #faf0d7 - return 1189678, 16445655 - } - // ICMP - if icmpLayer := packet.Layer(layers.LayerTypeICMPv4); icmpLayer != nil { - // #12272e, #fce0ff - return 1189678, 16572671 - } - if icmpLayer := packet.Layer(layers.LayerTypeICMPv6); icmpLayer != nil { - // #12272e, #fce0ff - return 1189678, 16572671 - } - // SCTP - if sctpLayer := packet.Layer(layers.LayerTypeSCTP); sctpLayer != nil { - sctp := sctpLayer.(*layers.SCTP) - // SCTP ABORT - // #fffc9c, #a40000 - if sctp.Checksum == 6 { - return 16776348, 10747904 - } - } - // TCP - if tcpLayer := packet.Layer(layers.LayerTypeTCP); tcpLayer != nil { - tcp := tcpLayer.(*layers.TCP) - // TCP SYN/FIN - // #12272e, #a0a0a0 - if tcp.SYN && tcp.FIN { - return 1189678, 10526880 - } - // TCP RST - // #fffc9c, #a40000 - if tcp.RST { - return 16776348, 10747904 - } - // HTTP - // #12272e, #e4ffc7 - if tcp.SrcPort == 80 || tcp.DstPort == 80 || tcp.SrcPort == 443 || tcp.DstPort == 443 { - return 1189678, 15007687 - } - // 检查 SMB - 通常基于 TCP 445 或 139 - // #12272e, #feffd0 - if tcp.SrcPort == 445 || tcp.DstPort == 445 || tcp.SrcPort == 139 || tcp.DstPort == 139 { - return 1189678, 16711632 - } - // Routing BGP usually runs on TCP port 179 - // #12272e, #fff3d6 - if tcp.DstPort == 179 || tcp.SrcPort == 179 { - return 1189678, 16774102 - } - } - // UDP - if udpLayer := packet.Layer(layers.LayerTypeUDP); udpLayer != nil { - udp := udpLayer.(*layers.UDP) - // 检查 SMB NetBIOS 名称服务 (NBNS) - 端口 53 - // 检查 SMB NetBIOS 数据报服务 (NBDS) - 端口 138 - if udp.SrcPort == 53 || udp.DstPort == 53 || udp.SrcPort == 138 || udp.DstPort == 138 { - return 1189678, 16711632 - } - } - // IPv4 - if ipv4Layer := packet.Layer(layers.LayerTypeIPv4); ipv4Layer != nil { - ipv4 := ipv4Layer.(*layers.IPv4) - // TCP(6) - // #12272e, #e7e6ff - if ipv4.Protocol == layers.IPProtocolTCP { - return 1189678, 15197951 - } - // UDP(17) - // #12272e, #daeeff - if ipv4.Protocol == layers.IPProtocolUDP || ipv4.Protocol == layers.IPProtocolUDPLite { - return 1189678, 14348031 - } - // Routing EIGRP(0x2f) OSPF(89) - // #12272e, #fff3d6 - if ipv4.Protocol == 0x2f || ipv4.Protocol == layers.IPProtocolOSPF { - return 1189678, 16774102 - } - // Routing - // GVRP (GARP VLAN Registration Protocol) - // GVRP typically utilizes the same multicast address as GARP - // HSRP (Hot Standby Router Protocol) uses multicast IP 224.0.0.2 - // VRRP (Virtual Router Redundancy Protocol) uses multicast IP 224.0.0.18 - // #12272e, #fff3d6 - if ipv4.DstIP.Equal(net.IPv4(224, 0, 0, 2)) || ipv4.DstIP.Equal(net.IPv4(224, 0, 0, 100)) { - return 1189678, 16774102 - } - } - return 16222087, 1189678 // 默认颜色值 #f78787, #12272e -} diff --git a/src/modules/trace/repository/trace_data.go b/src/modules/trace/repository/trace_data.go index 442002af..bd65b76f 100644 --- a/src/modules/trace/repository/trace_data.go +++ b/src/modules/trace/repository/trace_data.go @@ -2,6 +2,7 @@ package repository import ( "fmt" + "strings" "be.ems/src/framework/database/db" "be.ems/src/framework/logger" @@ -18,11 +19,8 @@ type TraceData struct{} func (r TraceData) SelectByPage(query map[string]string) ([]model.TraceData, int64) { tx := db.DB("").Model(&model.TraceData{}) // 查询条件拼接 - if v, ok := query["imsi"]; ok && v != "" { - tx = tx.Where("imsi like ?", fmt.Sprintf("%s%%", v)) - } - if v, ok := query["msisdn"]; ok && v != "" { - tx = tx.Where("msisdn like ?", fmt.Sprintf("%s%%", v)) + if v, ok := query["traceId"]; ok && v != "" { + tx = tx.Where("trace_id = ?", v) } if v, ok := query["startTime"]; ok && v != "" { if len(v) == 10 { @@ -53,7 +51,33 @@ func (r TraceData) SelectByPage(query map[string]string) ([]model.TraceData, int // 查询数据分页 pageNum, pageSize := db.PageNumSize(query["pageNum"], query["pageSize"]) tx = tx.Limit(pageSize).Offset(pageSize * pageNum) - err := tx.Find(&rows).Error + // 排序 + sortByStr, sortOk := query["sortBy"] + sortOrderStr, orderOk := query["sortOrder"] + if sortOk && sortByStr != "" && orderOk && sortOrderStr != "" { + sortByArr := strings.Split(sortByStr, ",") + sortOrderArr := strings.Split(sortOrderStr, ",") + for i := range sortByArr { + sortBy := sortByArr[i] + sortOrder := sortOrderArr[i] + // 排序字段 + sort := "id" + if sortBy == "timestamp" { + sort = "timestamp" + } + // 排序方式 + order := "ASC" + if strings.HasPrefix(sortOrder, "asc") { + order = "ASC" + } else if strings.HasPrefix(sortOrder, "desc") { + order = "DESC" + } + tx = tx.Order(fmt.Sprintf("%s %s", sort, order)) + } + } else { + tx = tx.Order("id desc") + } + err := tx.Omit("raw_msg").Find(&rows).Error if err != nil { logger.Errorf("query find err => %v", err.Error()) return rows, total @@ -100,3 +124,16 @@ func (r TraceData) DeleteByIds(ids []int64) int64 { } return tx.RowsAffected } + +// DeleteByTraceId 删除跟踪任务数据 返回受影响行数 +func (r TraceData) DeleteByTraceId(traceId string) int64 { + if traceId == "" || traceId == "" { + return 0 + } + tx := db.DB("").Where("trace_id = ?", traceId) + if err := tx.Delete(&model.TraceData{}).Error; err != nil { + logger.Errorf("delete err => %v", err.Error()) + return 0 + } + return tx.RowsAffected +} diff --git a/src/modules/trace/repository/trace_task.go b/src/modules/trace/repository/trace_task.go index 6cff2ff8..2233420e 100644 --- a/src/modules/trace/repository/trace_task.go +++ b/src/modules/trace/repository/trace_task.go @@ -2,6 +2,7 @@ package repository import ( "fmt" + "strings" "time" "be.ems/src/framework/database/db" @@ -19,8 +20,8 @@ type TraceTask struct{} func (r TraceTask) SelectByPage(query map[string]string) ([]model.TraceTask, int64) { tx := db.DB("").Model(&model.TraceTask{}) // 查询条件拼接 - if v, ok := query["neType"]; ok && v != "" { - tx = tx.Where("ne_type = ?", v) + if v, ok := query["traceType"]; ok && v != "" { + tx = tx.Where("trace_type = ?", v) } if v, ok := query["imsi"]; ok && v != "" { tx = tx.Where("imsi like ?", fmt.Sprintf("%s%%", v)) @@ -29,10 +30,20 @@ func (r TraceTask) SelectByPage(query map[string]string) ([]model.TraceTask, int tx = tx.Where("msisdn like ?", fmt.Sprintf("%s%%", v)) } if v, ok := query["startTime"]; ok && v != "" { - tx = tx.Where("start_time >= ?", v) + if len(v) == 10 { + v = fmt.Sprintf("%s000", v) + tx = tx.Where("start_time >= ?", v) + } else if len(v) == 13 { + tx = tx.Where("start_time >= ?", v) + } } if v, ok := query["endTime"]; ok && v != "" { - tx = tx.Where("end_time >= ?", v) + if len(v) == 10 { + v = fmt.Sprintf("%s999", v) + tx = tx.Where("end_time <= ?", v) + } else if len(v) == 13 { + tx = tx.Where("end_time <= ?", v) + } } // 查询结果 @@ -47,18 +58,33 @@ func (r TraceTask) SelectByPage(query map[string]string) ([]model.TraceTask, int // 查询数据分页 pageNum, pageSize := db.PageNumSize(query["pageNum"], query["pageSize"]) tx = tx.Limit(pageSize).Offset(pageSize * pageNum) - // 排序 - if v, ok := query["sortField"]; ok && v != "" { - sortSql := v - if v, ok := query["sortOrder"]; ok && v != "" { - if v == "desc" { - sortSql += " desc " - } else { - sortSql += " asc " + sortByStr, sortOk := query["sortBy"] + sortOrderStr, orderOk := query["sortOrder"] + if sortOk && sortByStr != "" && orderOk && sortOrderStr != "" { + sortByArr := strings.Split(sortByStr, ",") + sortOrderArr := strings.Split(sortOrderStr, ",") + for i := range sortByArr { + sortBy := sortByArr[i] + sortOrder := sortOrderArr[i] + // 排序字段 + sort := "id" + if sortBy == "operaBy" { + sort = "opera_by" + } else if sortBy == "endTime" { + sort = "end_time" } + // 排序方式 + order := "ASC" + if strings.HasPrefix(sortOrder, "asc") { + order = "ASC" + } else if strings.HasPrefix(sortOrder, "desc") { + order = "DESC" + } + tx = tx.Order(fmt.Sprintf("%s %s", sort, order)) } - tx.Order(sortSql) + } else { + tx = tx.Order("id desc") } err := tx.Find(&rows).Error @@ -90,8 +116,6 @@ func (r TraceTask) SelectByIds(ids []int64) []model.TraceTask { func (r TraceTask) Insert(param model.TraceTask) int64 { if param.CreateBy != "" { ms := time.Now().UnixMilli() - param.UpdateBy = param.CreateBy - param.UpdateTime = ms param.CreateTime = ms } // 执行插入 @@ -102,26 +126,6 @@ func (r TraceTask) Insert(param model.TraceTask) int64 { return param.ID } -// Update 修改信息 返回受影响行数 -func (r TraceTask) Update(param model.TraceTask) int64 { - if param.ID <= 0 { - return 0 - } - if param.UpdateBy != "" { - param.UpdateTime = time.Now().UnixMilli() - } - tx := db.DB("").Model(&model.TraceTask{}) - // 构建查询条件 - 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 TraceTask) DeleteByIds(ids []int64) int64 { if len(ids) <= 0 { diff --git a/src/modules/trace/service/packet.go b/src/modules/trace/service/packet.go index 8091f356..4c705374 100644 --- a/src/modules/trace/service/packet.go +++ b/src/modules/trace/service/packet.go @@ -1,20 +1,64 @@ package service import ( - packetTask "be.ems/src/modules/trace/packet_task" + "encoding/base64" + "fmt" + "net" + "os" + "path/filepath" + "runtime" + "strings" + "sync" + "sync/atomic" + "time" + + "github.com/gopacket/gopacket" + "github.com/gopacket/gopacket/layers" + "github.com/gopacket/gopacket/pcap" + "github.com/gopacket/gopacket/pcapgo" + + "be.ems/src/framework/logger" + wsService "be.ems/src/modules/ws/service" ) +// Task 任务信息 +type Task struct { + TaskNo string // 任务编号 + Handle *pcap.Handle // 捕获句柄 + File *os.File // 捕获信息输出文件句柄 + Writer *pcapgo.Writer // 捕获信息输出句柄 + Filter string // 过滤表达式 + Ticker *time.Ticker // 任务失效定时器 +} + +// FrameMeta 数据帧元信息 +type FrameMeta struct { + Number int `json:"number"` + Time int64 `json:"time"` + Source string `json:"source"` + Destination string `json:"destination"` + Protocol string `json:"protocol"` + Length int `json:"length"` + Info string `json:"info"` + Data string `json:"data"` // 原始数据byte[] base64 编码数据 +} + // 实例化服务层 Packet 结构体 -var NewPacket = &Packet{} +var NewPacket = &Packet{ + taskMap: sync.Map{}, +} // 信令跟踪 服务层处理 -type Packet struct{} +type Packet struct { + taskMap sync.Map +} // NetworkDevices 获取网卡设备信息 func (s *Packet) NetworkDevices() []map[string]any { arr := make([]map[string]any, 0) - devices, err := packetTask.NetworkDevices() + devices, err := pcap.FindAllDevs() if err != nil { + logger.Errorf("interfaces find all devices err: %s", err.Error()) return arr } @@ -47,20 +91,343 @@ func (s *Packet) NetworkDevices() []map[string]any { // LiveStart 开始捕获数据 func (s *Packet) LiveStart(taskNo, deviceName, filterBPF string, outputPCAP bool) (string, error) { - return packetTask.LiveStart(taskNo, deviceName, filterBPF, outputPCAP) + if _, ok := s.taskMap.Load(taskNo); ok { + return "", fmt.Errorf("task no. %s already exist", taskNo) + } + + // Verify the specified network interface exists + device, deviceOk := s.verifyDevice(deviceName) + if !deviceOk { + return "", fmt.Errorf("network device not exist: %s", deviceName) + } + + // listening on eth1, link-type EN10MB (Ethernet), snapshot length 262144 bytes + snapshotLength := 262144 + + // open device + handle, err := pcap.OpenLive(device, int32(snapshotLength), true, pcap.BlockForever) + if err != nil { + logger.Errorf("open live err: %s", err.Error()) + if strings.Contains(err.Error(), "operation not permitted") { + return "", fmt.Errorf("you don't have permission to capture on that/these device(s)") + } + return "", err + } + + // write a new file + var w *pcapgo.Writer + var f *os.File + if outputPCAP { + // 网管本地路径 + localFilePath := fmt.Sprintf("/tmp/omc/packet/%s.pcap", taskNo) + if runtime.GOOS == "windows" { + localFilePath = fmt.Sprintf("C:%s", localFilePath) + } + f, w, err = s.outputPCAPFile(uint32(snapshotLength), handle.LinkType(), localFilePath) + if err != nil { + return "", err + } + } + + // set filter + if filterBPF != "" { + if err = handle.SetBPFFilter(filterBPF); err != nil { + logger.Errorf("packet BPF Filter %s => %s", filterBPF, err.Error()) + filterBPF = "" + } + } + + // save tasks + taskInfo := &Task{ + TaskNo: taskNo, + Handle: handle, + File: f, + Writer: w, + Filter: filterBPF, + Ticker: time.NewTicker(time.Second * 120), + } + + go s.capturePacketSource(taskInfo) + s.taskMap.Store(taskNo, taskInfo) + return fmt.Sprintf("task no: %s initiated", taskNo), nil +} + +// verifyDevice 检查网卡设备是否存在 +func (s *Packet) verifyDevice(str string) (string, bool) { + devices, err := pcap.FindAllDevs() + if err != nil { + logger.Errorf("interfaces find all devices err: %s", err.Error()) + return "", false + } + for _, device := range devices { + if len(device.Addresses) == 0 { + continue + } + if device.Name == str { + return device.Name, true + } + for _, address := range device.Addresses { + if address.IP.String() == str { + return device.Name, true + } + } + } + return "", false +} + +// capturePacketSource 捕获数据 +func (s *Packet) capturePacketSource(taskInfo *Task) { + // capture packets + packetSource := gopacket.NewPacketSource(taskInfo.Handle, taskInfo.Handle.LinkType()) + packetSource.Lazy = false + packetSource.NoCopy = true + packetSource.DecodeStreamsAsDatagrams = true + + // 协程停止后关闭句柄并移除任务信息 + defer func() { + taskInfo.Ticker.Stop() + taskInfo.Handle.Close() + if taskInfo.File != nil { + taskInfo.File.Close() + } + s.taskMap.Delete(taskInfo.TaskNo) + }() + + var frameNumber int64 = 0 // 帧编号 + + for { + select { + case <-taskInfo.Ticker.C: + return + case packet := <-packetSource.Packets(): + if packet == nil { + continue + } + if packet.Metadata().Timestamp.Before(time.Now()) { + continue + } + + // 使用原子操作获取当前帧号并自增 + currentFrameNumber := atomic.AddInt64(&frameNumber, 1) + frameSrc := "" // 源主机IP + frameDst := "" // 目的主机IP + frameProtocol := "" // 协议 + frameInfo := "" // 信息 + // fmt.Printf("---------- packet %d layers:%d time: %s, len: %d \n", currentFrameNumber, len(packet.Layers()), packet.Metadata().Timestamp, packet.Metadata().Length) + + // 网络层 + // fmt.Println(packet.NetworkLayer()) + if networkLayer := packet.NetworkLayer(); networkLayer != nil { + src, dst := networkLayer.NetworkFlow().Endpoints() + frameSrc = src.String() + frameDst = dst.String() + if frameDst == "ff:ff:ff:ff" { + frameDst = "Broadcast" + } + } + + // 传输层 + // fmt.Println(packet.TransportLayer()) + if transportLayer := packet.TransportLayer(); transportLayer != nil { + frameProtocol = transportLayer.LayerType().String() + switch layer := transportLayer.(type) { + case *layers.TCP: // 传输控制协议,提供可靠的数据传输。 + var flagsDesc []string + if layer.FIN { + flagsDesc = append(flagsDesc, "FIN") + } + if layer.SYN { + flagsDesc = append(flagsDesc, "SYN") + } + if layer.RST { + flagsDesc = append(flagsDesc, "RST") + } + if layer.PSH { + flagsDesc = append(flagsDesc, "PSH") + } + if layer.ACK { + flagsDesc = append(flagsDesc, "ACK") + } + if layer.URG { + flagsDesc = append(flagsDesc, "URG") + } + if layer.ECE { + flagsDesc = append(flagsDesc, "ECE") + } + if layer.CWR { + flagsDesc = append(flagsDesc, "CWR") + } + if layer.NS { + flagsDesc = append(flagsDesc, "NS") + } + + frameInfo = fmt.Sprintf("%v -> %v [%s], Seq=%d Ack=%d Win=%d Len=%d ", layer.SrcPort, layer.DstPort, strings.Join(flagsDesc, ", "), layer.Seq, layer.Ack, layer.Window, len(layer.Payload)) + case *layers.UDP: // 用户数据报协议,提供无连接的快速数据传输。 + frameInfo = fmt.Sprintf("%v -> %v Len=%d ", layer.SrcPort, layer.DstPort, len(layer.Payload)) + case *layers.UDPLite: + frameInfo = fmt.Sprintf("%v -> %v Len=%d ", layer.SrcPort, layer.DstPort, len(layer.Payload)) + case *layers.SCTP: // 流控制传输协议,支持多流和多宿主机。 + frameInfo = fmt.Sprintf("%v -> %v Len=%d ", layer.SrcPort, layer.DstPort, len(layer.Payload)) + } + } + + // 应用协议层判断 + switch { + case packet.Layer(layers.LayerTypeARP) != nil: + arp := packet.Layer(layers.LayerTypeARP).(*layers.ARP) + frameSrc = net.IP(arp.SourceProtAddress).String() + frameDst = net.IP(arp.DstProtAddress).String() + frameProtocol = "ARP" + frameInfo = fmt.Sprintf("Who has %s? Tell %s", frameDst, frameSrc) + case packet.Layer(layers.LayerTypeVRRP) != nil: + frameProtocol = "VRRP" + frameInfo = "Announcement (v2)" + case packet.Layer(layers.LayerTypeIGMP) != nil: + switch layer := packet.Layer(layers.LayerTypeIGMP).(type) { + case *layers.IGMP: + frameProtocol = fmt.Sprintf("IGMPv%d", layer.Version) + frameInfo = fmt.Sprintf("%s %s", layer.Type.String(), layer.GroupAddress.String()) + case *layers.IGMPv1or2: + frameProtocol = fmt.Sprintf("IGMPv%d", layer.Version) + frameInfo = fmt.Sprintf("%s %s", layer.Type.String(), layer.GroupAddress.String()) + } + case packet.Layer(layers.LayerTypeICMPv4) != nil: + icmpv4 := packet.Layer(layers.LayerTypeICMPv4).(*layers.ICMPv4) + frameProtocol = "ICMP" + frameInfo = icmpv4.TypeCode.String() + case packet.Layer(layers.LayerTypeICMPv6) != nil: + icmpv6 := packet.Layer(layers.LayerTypeICMPv6).(*layers.ICMPv6) + frameProtocol = "ICMPv6" + frameInfo = icmpv6.TypeCode.String() + case packet.Layer(layers.LayerTypeSTP) != nil: + stp := packet.Layer(layers.LayerTypeSTP).(*layers.STP) + rootIdentifier := stp.RouteID + frameSrc = rootIdentifier.HwAddr.String() + frameDst = stp.BridgeID.HwAddr.String() + frameProtocol = "STP" + frameInfo = fmt.Sprintf("MST. Root = %d/%d/%s Cost = %d Port = 0x%x", rootIdentifier.Priority, rootIdentifier.SysID, frameSrc, stp.Cost, stp.PortID) + case packet.Layer(layers.LayerTypeSIP) != nil: + sip := packet.Layer(layers.LayerTypeSIP).(*layers.SIP) + frameProtocol = "SIP" + if sip.IsResponse { + frameInfo = fmt.Sprintf("%d %s", sip.ResponseCode, sip.ResponseStatus) + } else { + frameInfo = fmt.Sprintf("%s %s", sip.Method, sip.RequestURI) + } + case packet.Layer(layers.LayerTypeDNS) != nil: + dns := packet.Layer(layers.LayerTypeDNS).(*layers.DNS) + frameProtocol = "DNS" + question := []string{} + if len(dns.Questions) > 0 { + question = append(question, fmt.Sprintf("%s %s", dns.Questions[0].Type, dns.Questions[0].Name)) + } + frameInfo = fmt.Sprintf("%s %s 0x%x %s Answers %d", dns.ResponseCode.String(), dns.OpCode.String(), dns.ID, question, len(dns.Answers)) + case packet.Layer(layers.LayerTypeDHCPv6) != nil: + dhcpv6 := packet.Layer(layers.LayerTypeDHCPv6).(*layers.DHCPv6) + frameProtocol = "DHCPv6" + frameInfo = fmt.Sprintf("%s XID: 0x%+x", dhcpv6.MsgType.String(), dhcpv6.TransactionID) + case packet.Layer(layers.LayerTypeTLS) != nil: + tls := packet.Layer(layers.LayerTypeTLS).(*layers.TLS) + if len(tls.AppData) > 0 { + item := tls.AppData[0] + frameProtocol = item.Version.String() + frameInfo = item.ContentType.String() + } else if len(tls.Handshake) > 0 { + item := tls.Handshake[0] + frameProtocol = item.ClientHello.ProtocolVersion.String() + frameInfo = "Client Hello" + } else { + frameProtocol = "TLS" + frameInfo = "Unknown" + } + } + + if frameProtocol == "" { + continue + } + + // 数据 + frameMeta := FrameMeta{ + Number: int(currentFrameNumber), + Time: packet.Metadata().Timestamp.UnixNano(), + Source: frameSrc, + Destination: frameDst, + Protocol: frameProtocol, + Length: packet.Metadata().Length, + Info: frameInfo, + Data: base64.StdEncoding.EncodeToString(packet.Data()), + } + // 推送到ws订阅组 + wsService.NewWSSend.ByGroupID(fmt.Sprintf("%s_%s", wsService.GROUP_TRACE_PACKET, taskInfo.TaskNo), frameMeta) + + // 写入文件 + if taskInfo.Writer != nil { + taskInfo.Writer.WritePacket(packet.Metadata().CaptureInfo, packet.Data()) + } + } + } +} + +// outputPCAPFile 输出 pcap 文件 +// 新文件时需要 snaplen 最大长度 linktype 链路类型 +func (s *Packet) outputPCAPFile(snaplen uint32, linktype layers.LinkType, outputFile string) (*os.File, *pcapgo.Writer, error) { + var err error + var f *os.File + if err := os.MkdirAll(filepath.Dir(outputFile), 0775); err != nil { + return nil, nil, err + } + + // 检查文件是否存在 + if _, err = os.Stat(outputFile); os.IsNotExist(err) { + f, err = os.Create(outputFile) + if err != nil { + return nil, nil, err + } + w := pcapgo.NewWriter(f) + w.WriteFileHeader(snaplen, linktype) // new file, must do this. + return f, w, nil + } + + f, err = os.OpenFile(outputFile, os.O_APPEND, 0700) + if err != nil { + return nil, nil, err + } + w := pcapgo.NewWriter(f) + return f, w, nil } // LiveFilter 捕获过滤 func (s *Packet) LiveFilter(taskNo, expr string) error { - return packetTask.LiveFilter(taskNo, expr) + info, ok := s.taskMap.Load(taskNo) + if !ok { + return fmt.Errorf("task no: %s does not exist or has stopped", taskNo) + } + task := info.(*Task) + task.Filter = expr + err := task.Handle.SetBPFFilter(expr) + if err != nil { + logger.Errorf("packet BPF Filter %s => %s", expr, err.Error()) + return fmt.Errorf("can't parse filter expression") + } + return nil } // LiveTimeout 更新捕获失效时间 func (s *Packet) LiveTimeout(taskNo string, seconds int) error { - return packetTask.LiveTimeout(taskNo, seconds) + info, ok := s.taskMap.Load(taskNo) + if !ok { + return fmt.Errorf("task no: %s does not exist or has stopped", taskNo) + } + info.(*Task).Ticker.Reset(time.Duration(seconds) * time.Second) + return nil } // LiveStop 停止捕获数据 func (s *Packet) LiveStop(taskNo string) error { - return packetTask.LiveStop(taskNo) + info, ok := s.taskMap.Load(taskNo) + if !ok { + return fmt.Errorf("task no: %s does not exist or has stopped", taskNo) + } + info.(*Task).Ticker.Reset(time.Millisecond) + return nil } diff --git a/src/modules/trace/service/trace_task.go b/src/modules/trace/service/trace_task.go index 03948e2e..dfd2643c 100644 --- a/src/modules/trace/service/trace_task.go +++ b/src/modules/trace/service/trace_task.go @@ -2,7 +2,6 @@ package service import ( "encoding/base64" - "encoding/json" "fmt" "net" "strings" @@ -13,6 +12,7 @@ import ( "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" "be.ems/src/modules/trace/model" "be.ems/src/modules/trace/repository" @@ -37,20 +37,11 @@ type TraceTask struct { } // CreateUDP 创建UDP数据通道 -func (r *TraceTask) CreateUDP() error { +func (r TraceTask) CreateUDP() error { // 跟踪配置是否开启 - if v := config.Get("trace.enabled"); v != nil { - if !v.(bool) { - return nil - } - } - host := "127.0.0.1" - if v := config.Get("trace.host"); v != nil { - host = v.(string) - } - var port int64 = 33033 - if v := config.Get("trace.port"); v != nil { - port = parse.Number(v) + host, port, err := r.traceNotify() + if err != nil { + return err } // 初始化UDP服务 @@ -67,122 +58,116 @@ func (r *TraceTask) CreateUDP() error { } // 读取数据 - buf := make([]byte, 2048) + buf := make([]byte, 10*1048) n, addr, err := conn.ReadFromUDPAddrPort(buf) if err != nil { logger.Errorf("UDP Resolve ReadFromUDPAddrPort Error: %s", err.Error()) return } - logger.Infof("socket UDP: %s", string(buf[:n])) - // logger.Infof("socket UDP Base64: %s", base64.StdEncoding.EncodeToString(buf[:n])) - mData, err := UDPDataHandler(buf, n) - if err != nil { - logger.Errorf("UDP Resolve UDPDataHandler Error: %s", err.Error()) + // logger.Infof("socket UDP: %s", string(buf[:n])) + logger.Infof("socket UDP Base64 Encode: %s", base64.StdEncoding.EncodeToString(buf[:n])) + + // 解析数据 + if err := r.pasreUDPData(buf[:n]); err != nil { + logger.Errorf("UDP Resolve UDPData Error: %s", err.Error()) return } - taskId := parse.Number(mData["taskId"]) - - // 插入数据库做记录 - r.traceDataRepository.Insert(model.TraceData{ - TaskId: taskId, - IMSI: mData["imsi"].(string), - SrcAddr: mData["srcAddr"].(string), - DstAddr: mData["dstAddr"].(string), - IfType: parse.Number(mData["ifType"]), - MsgType: parse.Number(mData["msgType"]), - MsgDirect: parse.Number(mData["msgDirect"]), - Length: parse.Number(mData["dataLen"]), - RawMsg: mData["dataInfo"].(string), - Timestamp: parse.Number(mData["timestamp"]), - DecMsg: mData["decMsg"].(string), - }) - - // 推送文件 - if v, ok := mData["pcapFile"]; ok && v != "" { - logger.Infof("pcapFile: %s", v) - wsService.NewWSSend.ByGroupID(fmt.Sprintf("%s_%d", wsService.GROUP_TRACE_NE, taskId), taskId) - } // 发送响应 if _, err := conn.WriteToUDPAddrPort([]byte("udp>"), addr); err != nil { logger.Errorf("UDP Resolve WriteToUDPAddrPort Error: %s", err.Error()) } + buf = nil }) - // ============ 测试接收网元UDP发过来的数据 - // 初始化TCP服务 后续调整TODO - tcpService := socket.SocketTCP{Addr: host, Port: port + 1} - if _, err := tcpService.New(); err != nil { - return err - } - // 接收处理TCP数据 - go tcpService.Resolve(func(conn *net.Conn, err error) { - if err != nil { - logger.Errorf("TCP Resolve %s", err.Error()) - return + // ============ 本地测试接收网元UDP发过来的数据 后续调整TODO + if config.Env() == "local" { + // 初始化TCP服务 + tcpService := socket.SocketTCP{Addr: host, Port: port + 1} + if _, err := tcpService.New(); err != nil { + return err } + // 接收处理TCP数据 + go 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) - if err != nil { - logger.Errorf("TCP Resolve Read Error: %s", err.Error()) - return - } + c := (*conn) + // 读取数据 + buf := make([]byte, 2048) + n, err := c.Read(buf) + if err != nil { + logger.Errorf("TCP Resolve Read Error: %s", err.Error()) + return + } - logger.Infof("socket TCP: %s", string(buf[:n])) - deData, _ := base64.StdEncoding.DecodeString(string(buf[:n])) - logger.Infof("socket TCP Base64: %s", deData) - mData, err := UDPDataHandler(deData, len(deData)) - if err != nil { - logger.Errorf("TCP Resolve UDPDataHandler Error: %s", err.Error()) - return - } - taskId := parse.Number(mData["taskId"]) + // logger.Infof("socket TCP: %s", string(buf[:n])) + deData, _ := base64.StdEncoding.DecodeString(string(buf[:n])) + // logger.Infof("socket TCP Base64 Decode: %s", deData) - // 插入数据库做记录 - r.traceDataRepository.Insert(model.TraceData{ - TaskId: taskId, - IMSI: mData["imsi"].(string), - SrcAddr: mData["srcAddr"].(string), - DstAddr: mData["dstAddr"].(string), - IfType: parse.Number(mData["ifType"]), - MsgType: parse.Number(mData["msgType"]), - MsgDirect: parse.Number(mData["msgDirect"]), - Length: parse.Number(mData["dataLen"]), - RawMsg: mData["dataInfo"].(string), - Timestamp: parse.Number(mData["timestamp"]), - DecMsg: mData["decMsg"].(string), + if err := r.pasreUDPData(deData); err != nil { + logger.Errorf("TCP Resolve UDPData Error: %s", err.Error()) + return + } + + // 发送响应 + if _, err = c.Write([]byte("tcp>")); err != nil { + logger.Errorf("TCP Resolve Write Error: %s", err.Error()) + } + buf = nil }) + } - // 推送文件 - if v, ok := mData["pcapFile"]; ok && v != "" { - logger.Infof("pcapFile: %s", v) - wsService.NewWSSend.ByGroupID(fmt.Sprintf("%s_%d", wsService.GROUP_TRACE_NE, taskId), taskId) - } - - // 发送响应 - if _, err = c.Write([]byte("tcp>")); err != nil { - logger.Errorf("TCP Resolve Write Error: %s", err.Error()) - } - }) return nil } +// pasreUDPData 解析数据 +func (r TraceTask) pasreUDPData(buf []byte) error { + data, err := traceHandler(buf) + if err != nil { + logger.Errorf("UDP Resolve UDPDataHandler Error: %s", err.Error()) + return err + } + taskId := parse.Number(data.NfTraceMsg.TraceId) + + // 插入数据库做记录 + item := model.TraceData{ + TraceId: taskId, + IMSI: data.NfTraceMsg.IMSI, + SrcAddr: data.NfTraceMsg.SrcIpStr, + DstAddr: data.NfTraceMsg.DstIpStr, + IfType: data.NfTraceMsg.IfType, + MsgType: data.NfTraceMsg.MsgType, + MsgDirect: data.NfTraceMsg.MsgDirect, + MsgNe: data.NfTraceMsg.NfName, + MsgEvent: data.NfTraceMsg.MsgEvent, + Length: int64(data.TracePayloadLen), + RawMsg: base64.StdEncoding.EncodeToString(data.TracePayload), + Timestamp: data.NfTraceMsg.Timestamp, + } + item.ID = r.traceDataRepository.Insert(item) + + // 推送到ws订阅组 + item.RawMsg = "" // 不推送原始数据 + wsService.NewWSSend.ByGroupID(fmt.Sprintf("%s_%d", wsService.GROUP_TRACE_NE, taskId), item) + return err +} + // CloseUDP 关闭UDP数据通道 -func (r *TraceTask) CloseUDP() { +func (r TraceTask) CloseUDP() { r.udpService.Close() } // FindByPage 根据条件分页查询 -func (r *TraceTask) FindByPage(query map[string]string) ([]model.TraceTask, int64) { +func (r TraceTask) FindByPage(query map[string]string) ([]model.TraceTask, int64) { return r.traceTaskRepository.SelectByPage(query) } // FindById 通过ID查询 -func (r *TraceTask) FindById(id int64) model.TraceTask { +func (r TraceTask) FindById(id int64) model.TraceTask { tasks := r.traceTaskRepository.SelectByIds([]int64{id}) if len(tasks) > 0 { return tasks[0] @@ -191,12 +176,52 @@ func (r *TraceTask) FindById(id int64) model.TraceTask { } // Insert 新增信息 -func (r *TraceTask) Insert(task model.TraceTask) error { +func (r TraceTask) Insert(task model.TraceTask) error { // 跟踪配置是否开启 - if v := config.Get("trace.enabled"); v != nil { - if !v.(bool) { - return fmt.Errorf("tracking is not enabled") + host, port, err := r.traceNotify() + if err != nil { + return err + } + task.NotifyUrl = fmt.Sprintf("udp:%s:%d", host, port) + // 网元列表 + neList := strings.Split(task.NeList, ",") + if len(neList) <= 0 { + return fmt.Errorf("ne list is empty") + } + // 生成任务ID + traceId := r.traceTaskRepository.LastID() + 1 // 生成任务ID < 65535 + task.TraceId = fmt.Sprint(traceId) + + // 发送任务给网元 + for _, neTypeID := range neList { + neTypeIDArr := strings.Split(neTypeID, "_") + if len(neTypeIDArr) != 2 { + logger.Warnf("ne type id is error") + continue } + neInfo := neService.NewNeInfo.FindByNeTypeAndNeID(neTypeIDArr[0], neTypeIDArr[1]) + if neInfo.NeType != neTypeIDArr[0] || neInfo.IP == "" { + logger.Warnf("ne type id is not exist") + continue + } + if err := r.createTaskToNe(neInfo, task); err != nil { + logger.Errorf("task to %s error: %s", neTypeID, err.Error()) + return fmt.Errorf("task to %s error: %s", neTypeID, err.Error()) + } + } + + // 插入数据库 + insertId := r.traceTaskRepository.Insert(task) + if insertId <= 0 { + return fmt.Errorf("insert task error") + } + return nil +} + +// traceNotify 网元通知地址 +func (r TraceTask) traceNotify() (string, int64, error) { + if v := config.Get("trace.enabled"); !parse.Boolean(v) { + return "", 0, fmt.Errorf("trace is not enabled") } host := "127.0.0.1" if v := config.Get("trace.host"); v != nil { @@ -206,120 +231,43 @@ func (r *TraceTask) Insert(task model.TraceTask) error { if v := config.Get("trace.port"); v != nil { port = parse.Number(v) } - task.NotifyUrl = fmt.Sprintf("udp:%s:%d", host, port) + return host, port, nil +} - // 查询网元获取IP - neInfo := neService.NewNeInfo.FindByNeTypeAndNeID(task.NeType, task.NeId) - if neInfo.NeId != task.NeId || neInfo.IP == "" { - return fmt.Errorf("app.common.noNEInfo") - } - traceId := r.traceTaskRepository.LastID() + 1 // 生成任务ID < 65535 - task.TraceId = fmt.Sprint(traceId) - - // 发送任务给网元 - data := map[string]any{ - "neType": neInfo.NeType, - "neId": neInfo.NeId, - "notifyUrl": task.NotifyUrl, - "id": traceId, - "startTime": date.ParseDateToStr(task.StartTime, date.YYYY_MM_DD_HH_MM_SS), - "endTime": date.ParseDateToStr(task.EndTime, date.YYYY_MM_DD_HH_MM_SS), +// createTaskToNe 网元创建任务 +func (r TraceTask) createTaskToNe(neInfo neModel.NeInfo, task model.TraceTask) error { + data := model.TraceReq{ + TraceId: parse.Number(task.TraceId), + NotifyUrl: task.NotifyUrl, + StartTime: date.ParseDateToStr(task.StartTime, date.YYYY_MM_DD_HH_MM_SS), + EndTime: date.ParseDateToStr(task.EndTime, date.YYYY_MM_DD_HH_MM_SS), } switch task.TraceType { case "1": // Interface - data["traceType"] = "Interface" - data["interfaces"] = strings.Split(task.Interfaces, ",") + data.TraceType = "Interface" + data.Interfaces = strings.Split(task.Interfaces, ",") case "2": // Device - data["traceType"] = "Device" - data["ueIp"] = task.UeIp - data["srcIp"] = task.SrcIp - data["dstIp"] = task.DstIp - data["signalPort"] = task.SignalPort - task.UeIp = neInfo.IP + data.TraceType = "Device" + data.SrcIp = task.SrcIp + data.DstIp = task.DstIp case "3": // UE - data["traceType"] = "UE" - data["imsi"] = task.IMSI - data["msisdn"] = task.MSISDN + data.TraceType = "UE" + data.IMSI = fmt.Sprintf("imsi-%s", task.IMSI) default: - return fmt.Errorf("trace type is not disabled") + return fmt.Errorf("trace type is not support") } msg, err := neFetchlink.NeTraceAdd(neInfo, data) if err != nil { return err } - s, _ := json.Marshal(msg) - task.FetchMsg = string(s) - - // 插入数据库 - r.traceTaskRepository.Insert(task) - return nil -} - -// Update 修改信息 -func (r *TraceTask) Update(task model.TraceTask) error { - // 跟踪配置是否开启 - if v := config.Get("trace.enabled"); v != nil { - if !v.(bool) { - return fmt.Errorf("tracking is not enabled") - } + if v, ok := msg["cause"]; ok { + return fmt.Errorf("trace task add failed, %v", v) } - host := "127.0.0.1" - if v := config.Get("trace.host"); v != nil { - host = v.(string) - } - var port int64 = 33033 - if v := config.Get("trace.port"); v != nil { - port = parse.Number(v) - } - task.NotifyUrl = fmt.Sprintf("udp:%s:%d", host, port) - - // 查询网元获取IP - neInfo := neService.NewNeInfo.FindByNeTypeAndNeID(task.NeType, task.NeId) - if neInfo.NeId != task.NeId || neInfo.IP == "" { - return fmt.Errorf("app.common.noNEInfo") - } - - // 查询网元任务信息 - if msg, err := neFetchlink.NeTraceInfo(neInfo, task.TraceId); err == nil { - s, _ := json.Marshal(msg) - task.FetchMsg = string(s) - // 修改任务信息 - data := map[string]any{ - "neType": neInfo.NeType, - "neId": neInfo.NeId, - "notifyUrl": task.NotifyUrl, - "id": parse.Number(task.TraceId), - "startTime": date.ParseDateToStr(task.StartTime, date.YYYY_MM_DD_HH_MM_SS), - "endTime": date.ParseDateToStr(task.EndTime, date.YYYY_MM_DD_HH_MM_SS), - } - switch task.TraceType { - case "1": // Interface - data["traceType"] = "Interface" - data["interfaces"] = strings.Split(task.Interfaces, ",") - case "2": // Device - task.UeIp = neInfo.IP - data["traceType"] = "Device" - data["ueIp"] = task.UeIp - data["srcIp"] = task.SrcIp - data["dstIp"] = task.DstIp - data["signalPort"] = task.SignalPort - case "3": // UE - data["traceType"] = "UE" - data["imsi"] = task.IMSI - data["msisdn"] = task.MSISDN - default: - return fmt.Errorf("trace type is not disabled") - } - neFetchlink.NeTraceEdit(neInfo, data) - } - - // 更新数据库 - r.traceTaskRepository.Update(task) return nil } // DeleteByIds 批量删除信息 -func (r *TraceTask) DeleteByIds(ids []int64) (int64, error) { +func (r TraceTask) DeleteByIds(ids []int64) (int64, error) { // 检查是否存在 rows := r.traceTaskRepository.SelectByIds(ids) if len(rows) <= 0 { @@ -327,14 +275,30 @@ func (r *TraceTask) DeleteByIds(ids []int64) (int64, error) { } if len(rows) == len(ids) { - // 停止任务 + // 删除数据同时给网元发送停止任务 for _, v := range rows { - neInfo := neService.NewNeInfo.FindByNeTypeAndNeID(v.NeType, v.NeId) - if neInfo.NeId != v.NeId || neInfo.IP == "" { + // 删除数据 + r.traceDataRepository.DeleteByTraceId(v.TraceId) + + // 网元列表 + neList := strings.Split(v.NeList, ",") + if len(neList) <= 0 { continue } - neFetchlink.NeTraceDelete(neInfo, v.TraceId) + // 停止任务 + for _, neTypeID := range neList { + neTypeIDArr := strings.Split(neTypeID, "_") + if len(neTypeIDArr) != 2 { + continue + } + neInfo := neService.NewNeInfo.FindByNeTypeAndNeID(neTypeIDArr[0], neTypeIDArr[1]) + if neInfo.NeType != neTypeIDArr[0] || neInfo.IP == "" { + continue + } + neFetchlink.NeTraceDelete(neInfo, v.TraceId) + } } + num := r.traceTaskRepository.DeleteByIds(ids) return num, nil } diff --git a/src/modules/trace/service/trace_task_udp_data.go b/src/modules/trace/service/trace_task_udp_data.go index 2f007f38..2722566c 100644 --- a/src/modules/trace/service/trace_task_udp_data.go +++ b/src/modules/trace/service/trace_task_udp_data.go @@ -1,334 +1,271 @@ package service import ( - "encoding/base64" + "bytes" "encoding/binary" "fmt" + "net" "os" "path/filepath" "runtime" - "strings" "time" - "golang.org/x/net/http/httpguts" - "golang.org/x/net/http2/hpack" + "be.ems/src/modules/trace/model" ) -const ( - GTPU_V1_VERSION = 1 << 5 - GTPU_VER_MASK = 7 << 5 - GTPU_PT_GTP = 1 << 4 - GTPU_HEADER_LEN = 12 - GTPU_E_S_PB_BIT = 7 - GTPU_E_BI = 1 << 2 -) - -const ( - GTPU_HEADER_VERSION_INDEX = 0 - GTPU_HEADER_MSG_TYPE_INDEX = 1 - GTPU_HEADER_LENGTH_INDEX = 2 - GTPU_HEADER_TEID_INDEX = 4 -) - -type ExtHeader struct { - TaskId uint32 - IMSI string - IfType int - MsgType int - MsgDirect int // 0-recv,1-send - TimeStamp int64 - SrcIP string - DstIP string - SrcPort uint16 - DstPort uint16 - Proto int // Protocol - PPI int // only for SCTP - DataLen uint16 - DataInfo []byte +// TraceMsgToOamTraceData 结构体定义 +type TraceMsgToOamTraceData struct { + NfTraceMsg *model.TraceMsg + TimestampStr string + TracePayloadLen uint16 + TracePayload []byte } -// parseUDPData 解析UDP数据 -func parseUDPData(rvMsg []byte, rvLen int) (ExtHeader, error) { - var extHdr ExtHeader - // var tr dborm.TraceData - var off int - msg := rvMsg - - verFlags := msg[GTPU_HEADER_VERSION_INDEX] - - gtpuHdrLen := GTPU_HEADER_LEN - - localTeid := binary.BigEndian.Uint32(msg[GTPU_HEADER_TEID_INDEX:]) - - extHdr.TaskId = localTeid - - if (verFlags & GTPU_E_S_PB_BIT) != 0 { - if (verFlags & GTPU_E_BI) != 0 { - extTypeIndex := GTPU_HEADER_LEN - 1 - - extType := msg[extTypeIndex] - - if extType == 0xFE { - extHdr.IMSI = string(msg[extTypeIndex+2 : extTypeIndex+17]) - extHdr.IfType = int(msg[extTypeIndex+17]) - extHdr.MsgType = int(msg[extTypeIndex+18]) - extHdr.MsgDirect = int(msg[extTypeIndex+19]) - - extHdr.TimeStamp = time.Now().UTC().UnixMilli() - // extHdr.TimeStamp = int64(binary.BigEndian.Uint64(msg[extTypeIndex+19:])) - // fmt.Printf("ext info %v %s %d %d %d \n", msg[(extTypeIndex+2):(extTypeIndex+20)], extHdr.IMSI, extHdr.IfType, extHdr.MsgType, extHdr.MsgDirect) - // set offset of IP Packet - off = 40 + 4 - //src ip: msg+40+12 - extHdr.SrcIP = fmt.Sprintf("%d.%d.%d.%d", msg[off+12], msg[off+13], msg[off+14], msg[off+15]) - //dst ip: msg+40+12+4 - extHdr.DstIP = fmt.Sprintf("%d.%d.%d.%d", msg[off+16], msg[off+17], msg[off+18], msg[off+19]) - extHdr.SrcPort = uint16(binary.BigEndian.Uint16(msg[off+20:])) - extHdr.DstPort = uint16(binary.BigEndian.Uint16(msg[off+22:])) - // fmt.Printf("info %s:%d %s:%d \n", extHdr.SrcIP, extHdr.SrcPort, extHdr.DstIP, extHdr.DstPort) - // ip header start msg+40 - extHdr.DataLen = uint16(rvLen - off) - extHdr.DataInfo = make([]byte, int(rvLen-off)) - copy(extHdr.DataInfo, []byte(msg[off:])) - - // 132 SCTP - // 6 TCP - // 17 UDP - extHdr.Proto = int(msg[off+9]) - if extHdr.Proto == 132 { - extHdr.PPI = int(msg[off+47]) - extHdr.DataLen = uint16(binary.BigEndian.Uint16(msg[(off+34):]) - 16) - // fmt.Printf("dat len %d %d \n", extHdr.DataLen, extHdr.PPI) - } - } - - for extType != 0 && extTypeIndex < rvLen { - extLen := msg[extTypeIndex+1] << 2 - if extLen == 0 { - return extHdr, fmt.Errorf("error, extLen is zero") - } - - gtpuHdrLen += int(extLen) - extTypeIndex += int(extLen) - extType = msg[extTypeIndex] - } - } - } else { - gtpuHdrLen -= 4 - } - return extHdr, nil -} - -// UDPDataHandler UDP数据处理 -func UDPDataHandler(data []byte, n int) (map[string]any, error) { - extHdr, err := parseUDPData(data, n) +// traceHandler 处理跟踪数据 +func traceHandler(data []byte) (*TraceMsgToOamTraceData, error) { + decodeData, err := decodeTraceData(data) if err != nil { - return nil, err + return decodeData, err } - if extHdr.TaskId == 0 || extHdr.DataLen < 1 { - return nil, fmt.Errorf("data error") + fmt.Printf("TraceHandler get oamData: %s,%+v\n, payload=len(%d,%d)", decodeData.TimestampStr, decodeData.NfTraceMsg, decodeData.TracePayloadLen, len(decodeData.TracePayload)) + // Return parsed message and payload + if len(decodeData.TracePayload) != int(decodeData.TracePayloadLen) { + return decodeData, fmt.Errorf("trace payload is bad, len=%d, shall be:%d", len(decodeData.TracePayload), int(decodeData.TracePayloadLen)) } - m := map[string]any{ - "taskId": extHdr.TaskId, - "imsi": extHdr.IMSI, - "ifType": extHdr.IfType, - "srcAddr": fmt.Sprintf("%s:%d", extHdr.SrcIP, extHdr.SrcPort), - "dstAddr": fmt.Sprintf("%s:%d", extHdr.DstIP, extHdr.DstPort), - "msgType": extHdr.MsgType, - "msgDirect": extHdr.MsgDirect, - "timestamp": extHdr.TimeStamp, - "dataLen": extHdr.DataLen, - // "dataInfo": extHdr.DataInfo, - "decMsg": "", - } - // Base64 编码 - m["dataInfo"] = base64.StdEncoding.EncodeToString(extHdr.DataInfo) - - if extHdr.Proto == 6 { // TCP - // 取响应数据 - iplen := uint16(binary.BigEndian.Uint16(extHdr.DataInfo[2:])) - tcplen := uint16(iplen - 32 - 20) - hdrlen := uint16(binary.BigEndian.Uint16(extHdr.DataInfo[20+32+1:])) - offset := uint16(52) - // fmt.Printf("HTTP %d %d %d \n", iplen, tcplen, hdrlen) - if tcplen > (hdrlen + 9) { // has data - doffset := uint16(offset + hdrlen + 9) - datlen := uint16(binary.BigEndian.Uint16(extHdr.DataInfo[doffset+1:])) - // fmt.Printf("HTTP datlen %d \n", datlen) - m["decMsg"], _ = httpDataMsg(extHdr.DataInfo[offset+9:offset+9+hdrlen], extHdr.DataInfo[doffset+9:doffset+datlen+9]) - } else { - m["decMsg"], _ = httpDataMsg(extHdr.DataInfo[offset+9:hdrlen], nil) - } - } - - // pcap文件 - m["pcapFile"] = writePcap(extHdr) - return m, nil -} - -// =========== TCP协议Body =========== - -// httpDataMsg Http数据信息处理 -func httpDataMsg(header []byte, data []byte) (string, error) { - var remainSize = uint32(16 << 20) - var sawRegular bool - var invalid bool // pseudo header field errors - var Fields []hpack.HeaderField - - invalid = false - hdec := hpack.NewDecoder(4096, nil) - hdec.SetEmitEnabled(true) - hdec.SetMaxStringLength(int(16 << 20)) - hdec.SetEmitFunc(func(hf hpack.HeaderField) { - if !httpguts.ValidHeaderFieldValue(hf.Value) { - // Don't include the value in the error, because it may be sensitive. - invalid = true - } - isPseudo := strings.HasPrefix(hf.Name, ":") - if isPseudo { - if sawRegular { - invalid = true - } - } else { - sawRegular = true - if !validWireHeaderFieldName(hf.Name) { - invalid = true - } - } - - if invalid { - hdec.SetEmitEnabled(false) - return - } - - size := hf.Size() - if size > remainSize { - hdec.SetEmitEnabled(false) - //mh.Truncated = true - return - } - remainSize -= size - - Fields = append(Fields, hf) - }) - - // defer hdec.SetEmitFunc(func(hf hpack.HeaderField) {}) - - frag := header - if _, err := hdec.Write(frag); err != nil { - return "", err - } - - if err := hdec.Close(); err != nil { - return "", err - } - - // hdec.SetEmitFunc(func(hf hpack.HeaderField) {}) - - var headers []byte - var line string - for i := range Fields { - line = fmt.Sprintf("\"%s\":\"%s\",", Fields[i].Name, Fields[i].Value) - headers = append(headers, []byte(line)...) - } - - if len(data) > 0 { - return fmt.Sprintf("{ %s \"content\":%s }", string(headers), string(data)), nil - } else { - return fmt.Sprintf("{ %s }", string(headers)), nil - } -} - -// validWireHeaderFieldName 校验报文头字段名称 -func validWireHeaderFieldName(v string) bool { - if len(v) == 0 { - return false - } - for _, r := range v { - if !httpguts.IsTokenRune(r) { - return false - } - if 'A' <= r && r <= 'Z' { - return false - } - } - return true -} - -// =========== writePcap 写Pcap文件 =========== - -const magicMicroseconds = 0xA1B2C3D4 -const versionMajor = 2 -const versionMinor = 4 - -func writeEmptyPcap(filename string, timeStamp int64, length int, data []byte) error { - var err error - var file *os.File - if err := os.MkdirAll(filepath.Dir(filename), 0775); err != nil { - return err - } - if _, err = os.Stat(filename); os.IsNotExist(err) { - file, err = os.Create(filename) - // File Header - var fileHeaderBuf [24]byte - binary.LittleEndian.PutUint32(fileHeaderBuf[0:4], magicMicroseconds) - binary.LittleEndian.PutUint16(fileHeaderBuf[4:6], versionMajor) - binary.LittleEndian.PutUint16(fileHeaderBuf[6:8], versionMinor) - // bytes 8:12 stay 0 (timezone = UTC) - // bytes 12:16 stay 0 (sigfigs is always set to zero, according to - // http://wiki.wireshark.org/Development/LibpcapFileFormat - binary.LittleEndian.PutUint32(fileHeaderBuf[16:20], 0x00040000) - binary.LittleEndian.PutUint32(fileHeaderBuf[20:24], 0x00000071) - if _, err := file.Write(fileHeaderBuf[:]); err != nil { - return err - } - } else { - file, err = os.OpenFile(filename, os.O_WRONLY|os.O_APPEND, 0666) - } - if err != nil { - return err - } - defer file.Close() - - // Packet Header - var packetHeaderBuf [24]byte - t := time.UnixMilli(timeStamp) - if t.IsZero() { - t = time.Now() - } - secs := t.Unix() - usecs := t.Nanosecond() / 1000 - binary.LittleEndian.PutUint32(packetHeaderBuf[0:4], uint32(secs)) - binary.LittleEndian.PutUint32(packetHeaderBuf[4:8], uint32(usecs)) - binary.LittleEndian.PutUint32(packetHeaderBuf[8:12], uint32(length+16)) - binary.LittleEndian.PutUint32(packetHeaderBuf[12:16], uint32(length+16)) - if _, err := file.Write(packetHeaderBuf[:]); err != nil { - return err - } - - // 数据包内容的定义 - cooked := [...]byte{0x00, 0x00, 0x03, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00} - if _, err := file.Write(cooked[:]); err != nil { - return err - } - - // Packet Data - if _, err := file.Write(data); err != nil { - return err - } - return nil -} - -// writePcap 写Pcap文件并返回文件路径 -func writePcap(extHdr ExtHeader) string { - filePath := fmt.Sprintf("/tmp/omc/trace/task_%d.pcap", extHdr.TaskId) + // 输出到文件 + filePath := fmt.Sprintf("/tmp/omc/trace/task_%d.pcap", decodeData.NfTraceMsg.TraceId) if runtime.GOOS == "windows" { filePath = fmt.Sprintf("C:%s", filePath) } - err := writeEmptyPcap(filePath, extHdr.TimeStamp, int(extHdr.DataLen), extHdr.DataInfo) - if err != nil { - return "" - } - return filePath + err = writePCAP(filePath, decodeData.NfTraceMsg.Timestamp, decodeData.TracePayload) + + return decodeData, err +} + +// decodeTraceData 解析跟踪数据 +func decodeTraceData(data []byte) (*TraceMsgToOamTraceData, error) { + buf := bytes.NewBuffer(data) + oamData := new(TraceMsgToOamTraceData) + msg := new(model.TraceMsg) + + // 1. Parse Flag (1 byte) + var flag uint8 + if err := binary.Read(buf, binary.BigEndian, &flag); err != nil { + return nil, err + } + + // Parse message type (bits 1-2) + switch flag & 0x3 { + case 0x1: + msg.MsgType = model.MSG_TYPE_REQ + case 0x2: + msg.MsgType = model.MSG_TYPE_RSP + } + + // Parse message direction (bits 3-4) + switch flag & 0xc { + case 0x4: + msg.MsgDirect = model.MSG_DIRECT_SEND + case 0x8: + msg.MsgDirect = model.MSG_DIRECT_RECV + } + + // 2. Parse TraceId (4 bytes) + var traceId uint32 + if err := binary.Read(buf, binary.BigEndian, &traceId); err != nil { + return nil, err + } + msg.TraceId = int(traceId) + + // 3. Parse IMSI (15 bytes fixed length) + imsi := make([]byte, 15) + if _, err := buf.Read(imsi); err != nil { + return nil, err + } + msg.IMSI = string(imsi) + + // 4. Parse IfType (1 byte) + ifTypeByte, err := buf.ReadByte() + if err != nil { + return nil, err + } + msg.IfType = byte2Iftype(ifTypeByte) + + // 5. Parse Timestamp (8 bytes) + if err := binary.Read(buf, binary.BigEndian, &msg.Timestamp); err != nil { + return nil, err + } + + // 6. Parse SrcIp (4 bytes IPv4) + srcIp := make([]byte, 4) + if flag&0x20 != 0 { + srcIp = make([]byte, 16) + } + if _, err := buf.Read(srcIp); err != nil { + return nil, err + } + msg.SrcIpStr = net.IP(srcIp).String() + // 7. Parse DstIp (4 bytes IPv4) + dstIp := make([]byte, 4) + if flag&0x20 != 0 { + dstIp = make([]byte, 16) + } + if _, err := buf.Read(dstIp); err != nil { + return nil, err + } + msg.DstIpStr = net.IP(dstIp).String() + + // 8. Parse NfName (variable length) + nfNameLen, err := buf.ReadByte() + if err != nil { + return nil, err + } + nfName := make([]byte, nfNameLen) + if _, err := buf.Read(nfName); err != nil { + return nil, err + } + msg.NfName = string(nfName) + + // 9. Parse MsgEvent (variable length) + msgEventLen, err := buf.ReadByte() + if err != nil { + return nil, err + } + msgEvent := make([]byte, msgEventLen) + if _, err := buf.Read(msgEvent); err != nil { + return nil, err + } + msg.MsgEvent = string(msgEvent) + + // 10. Parse ExtenBuf (variable length) + extenBufLen, err := buf.ReadByte() + if err != nil { + return nil, err + } + if extenBufLen > 0 { + extenBuf := make([]byte, extenBufLen) + if _, err := buf.Read(extenBuf); err != nil { + return nil, err + } + // TODO: Parse extended fields according to actual protocol + } + // 11. len of payload(2 byte) + var len uint16 + if err := binary.Read(buf, binary.BigEndian, &len); err != nil { + return nil, err + } + + oamData.NfTraceMsg = msg + oamData.TimestampStr = time.Unix(0, msg.Timestamp).Format("2006-01-02 15:04:05.999999999") + oamData.TracePayloadLen = len + oamData.TracePayload = buf.Bytes() + return oamData, nil +} + +// byte2Iftype 将字节转换为接口类型字符串 +// 参考:3GPP TS 32.422 V17.0.0 (2022-06) 5G; 3GPP TS 29.244 V17.0.0 (2022-06) 5G +func byte2Iftype(val uint8) string { + ret := "" + switch val { + case 1: + ret = "N1" + case 2: + ret = "N2" + case 3: + ret = "N1/N2" + case 4: + ret = "N4" + case 7: + ret = "N7" + case 8: + ret = "N8" + case 10: + ret = "N10" + case 11: + ret = "N11" + case 12: + ret = "N12" + case 13: + ret = "N13" + case 15: + ret = "N15" + } + return ret +} + +// writePCAP 写入PCAP文件 +func writePCAP(filename string, timeStamp int64, data []byte) error { + var err error + var file *os.File + + // 1. 创建目录(含权限控制) + if err := os.MkdirAll(filepath.Dir(filename), 0775); err != nil { + return err + } + + // 2. 智能打开文件(原子操作避免竞态) + if _, err = os.Stat(filename); os.IsNotExist(err) { + file, err = os.Create(filename) + if err != nil { + return err + } + // 写入PCAP全局头(严格兼容Wireshark) + fileHeader := [24]byte{ + 0xD4, 0xC3, 0xB2, 0xA1, // magic_number (微秒级) + 0x02, 0x00, 0x04, 0x00, // version_major(2) + version_minor(4) + 0x00, 0x00, 0x00, 0x00, // thiszone (UTC) + 0x00, 0x00, 0x00, 0x00, // sigfigs (固定0) + 0x00, 0x00, 0x04, 0x00, // snaplen (1024) + 0x71, 0x00, 0x00, 0x00, // network (LINKTYPE_LINUX_SLL) + } + if _, err := file.Write(fileHeader[:]); err != nil { + return err + } + } else { + // 追加模式打开(避免截断已有内容) + file, err = os.OpenFile(filename, os.O_WRONLY|os.O_APPEND|os.O_SYNC, 0666) + if err != nil { + return err + } + } + defer file.Close() + + // 3. 构造Linux cooked头(RFC 3580规范) + linuxSLLHeaderLen := 16 // Linux cooked模式头长度 + cookedHeader := make([]byte, linuxSLLHeaderLen) + binary.BigEndian.PutUint16(cookedHeader[0:2], 0x0000) // 数据包类型(主机→网络) + binary.BigEndian.PutUint16(cookedHeader[2:4], 0x0304) // 地址类型(ARPHRD_ETHER) + binary.BigEndian.PutUint16(cookedHeader[4:6], 0x0008) // 协议类型(ETH_P_IP) + binary.BigEndian.PutUint16(cookedHeader[14:16], 0x0800) // 数据包类型(PACKET_HOST) + + // 4. 合并链路层头与数据(兼容IPv4选项) + fullData := append(cookedHeader, data...) + pktLen := len(fullData) + + // 5. 生成精确时间戳(处理闰秒和时区) + t := time.Unix(0, timeStamp).UTC() + if t.IsZero() { + t = time.Now().UTC() + } + secs := t.Unix() + usecs := t.Nanosecond() / 1000 // 微秒级时间戳 + + // 6. 构造PCAP报文头(16字节) + var packetHeader [16]byte + binary.LittleEndian.PutUint32(packetHeader[0:4], uint32(secs)) // 时间戳秒 + binary.LittleEndian.PutUint32(packetHeader[4:8], uint32(usecs)) // 时间戳微秒 + binary.LittleEndian.PutUint32(packetHeader[8:12], uint32(pktLen)) // 捕获长度 + binary.LittleEndian.PutUint32(packetHeader[12:16], uint32(pktLen)) // 原始长度 + + // 7. 原子写入操作(避免部分写入) + buf := new(bytes.Buffer) + buf.Write(packetHeader[:]) + buf.Write(fullData) + if _, err := file.Write(buf.Bytes()); err != nil { + return err + } + + // 8. 强制刷盘并验证写入 + return file.Sync() } diff --git a/src/modules/trace/trace.go b/src/modules/trace/trace.go index b2edf33d..bb5dd4dc 100644 --- a/src/modules/trace/trace.go +++ b/src/modules/trace/trace.go @@ -21,17 +21,17 @@ func Setup(router *gin.Engine) { tcpdumpGroup := router.Group("/trace/tcpdump") { tcpdumpGroup.POST("/start", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.tcpdump", collectlogs.BUSINESS_TYPE_OTHER)), controller.NewTCPdump.DumpStart, ) tcpdumpGroup.POST("/stop", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.tcpdump", collectlogs.BUSINESS_TYPE_OTHER)), controller.NewTCPdump.DumpStop, ) tcpdumpGroup.POST("/upf", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.tcpdump", collectlogs.BUSINESS_TYPE_OTHER)), controller.NewTCPdump.UPFTrace, ) @@ -41,28 +41,32 @@ func Setup(router *gin.Engine) { packetGroup := router.Group("/trace/packet") { packetGroup.GET("/devices", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewPacket.Devices, ) packetGroup.POST("/start", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.packet", collectlogs.BUSINESS_TYPE_OTHER)), controller.NewPacket.Start, ) packetGroup.POST("/stop", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.packet", collectlogs.BUSINESS_TYPE_OTHER)), controller.NewPacket.Stop, ) packetGroup.PUT("/filter", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.packet", collectlogs.BUSINESS_TYPE_OTHER)), controller.NewPacket.Filter, ) packetGroup.PUT("/keep-alive", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewPacket.KeepAlive, ) + packetGroup.GET("/filePull", + middleware.AuthorizeUser(nil), + controller.NewPacket.FilePull, + ) } // 跟踪任务 网元HLR (免登录) @@ -92,30 +96,25 @@ func Setup(router *gin.Engine) { taskGroup := router.Group("/trace/task") { taskGroup.GET("/list", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewTraceTask.List, ) taskGroup.GET("/:id", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewTraceTask.Info, ) taskGroup.POST("", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.task", collectlogs.BUSINESS_TYPE_INSERT)), controller.NewTraceTask.Add, ) - taskGroup.PUT("", - middleware.PreAuthorize(nil), - collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.task", collectlogs.BUSINESS_TYPE_UPDATE)), - controller.NewTraceTask.Edit, - ) taskGroup.DELETE("/:id", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.task", collectlogs.BUSINESS_TYPE_DELETE)), controller.NewTraceTask.Remove, ) taskGroup.GET("/filePull", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewTraceTask.FilePull, ) } @@ -124,11 +123,15 @@ func Setup(router *gin.Engine) { taskDataGroup := router.Group("/trace/data") { taskDataGroup.GET("/list", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewTraceData.List, ) + taskDataGroup.GET("/:id", + middleware.AuthorizeUser(nil), + controller.NewTraceData.Info, + ) taskDataGroup.DELETE("/:id", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.taskData", collectlogs.BUSINESS_TYPE_DELETE)), controller.NewTraceData.Remove, ) diff --git a/src/modules/ws/controller/ws.go b/src/modules/ws/controller/ws.go index c95bd4fe..32a7bb70 100644 --- a/src/modules/ws/controller/ws.go +++ b/src/modules/ws/controller/ws.go @@ -48,7 +48,7 @@ func (s *WSController) WS(c *gin.Context) { // 登录用户信息 loginUser, err := reqctx.LoginUser(c) if err != nil { - c.JSON(401, resp.CodeMsg(401, i18n.TKey(language, err.Error()))) + c.JSON(401, resp.CodeMsg(401002, i18n.TKey(language, err.Error()))) return } @@ -92,7 +92,7 @@ func (s *WSController) Test(c *gin.Context) { // 登录用户信息 loginUser, err := reqctx.LoginUser(c) if err != nil { - c.JSON(401, resp.CodeMsg(401, i18n.TKey(language, err.Error()))) + c.JSON(401, resp.CodeMsg(401002, i18n.TKey(language, err.Error()))) return } diff --git a/src/modules/ws/controller/ws_redis.go b/src/modules/ws/controller/ws_redis.go index f72de6b8..48a149d9 100644 --- a/src/modules/ws/controller/ws_redis.go +++ b/src/modules/ws/controller/ws_redis.go @@ -1,6 +1,8 @@ package controller import ( + "fmt" + "be.ems/src/framework/database/redis" "be.ems/src/framework/i18n" "be.ems/src/framework/logger" @@ -20,14 +22,15 @@ func (s *WSController) Redis(c *gin.Context) { HostId int64 `form:"hostId" binding:"required"` // 连接主机ID } if err := c.ShouldBindQuery(&query); err != nil { - c.JSON(400, resp.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } // 登录用户信息 loginUser, err := reqctx.LoginUser(c) if err != nil { - c.JSON(401, resp.CodeMsg(401, i18n.TKey(language, err.Error()))) + c.JSON(401, resp.CodeMsg(401002, i18n.TKey(language, err.Error()))) return } diff --git a/src/modules/ws/controller/ws_ssh.go b/src/modules/ws/controller/ws_ssh.go index c6c4e232..e020ae46 100644 --- a/src/modules/ws/controller/ws_ssh.go +++ b/src/modules/ws/controller/ws_ssh.go @@ -26,7 +26,8 @@ func (s *WSController) SSH(c *gin.Context) { Rows int `form:"rows"` // 终端显示行数 } if err := c.ShouldBindQuery(&query); err != nil { - c.JSON(400, resp.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } if query.Cols < 80 || query.Cols > 400 { @@ -39,7 +40,7 @@ func (s *WSController) SSH(c *gin.Context) { // 登录用户信息 loginUser, err := reqctx.LoginUser(c) if err != nil { - c.JSON(401, resp.CodeMsg(401, i18n.TKey(language, err.Error()))) + c.JSON(401, resp.CodeMsg(401002, i18n.TKey(language, err.Error()))) return } diff --git a/src/modules/ws/controller/ws_telnet.go b/src/modules/ws/controller/ws_telnet.go index 38f4917d..6d3af843 100644 --- a/src/modules/ws/controller/ws_telnet.go +++ b/src/modules/ws/controller/ws_telnet.go @@ -26,7 +26,8 @@ func (s *WSController) Telnet(c *gin.Context) { Rows int `form:"rows"` // 终端显示行数 } if err := c.ShouldBindQuery(&query); err != nil { - c.JSON(400, resp.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } if query.Cols < 120 || query.Cols > 400 { @@ -39,7 +40,7 @@ func (s *WSController) Telnet(c *gin.Context) { // 登录用户信息 loginUser, err := reqctx.LoginUser(c) if err != nil { - c.JSON(401, resp.CodeMsg(401, i18n.TKey(language, err.Error()))) + c.JSON(401, resp.CodeMsg(401002, i18n.TKey(language, err.Error()))) return } diff --git a/src/modules/ws/controller/ws_view.go b/src/modules/ws/controller/ws_view.go index 0f4f3c34..11bdf4cd 100644 --- a/src/modules/ws/controller/ws_view.go +++ b/src/modules/ws/controller/ws_view.go @@ -39,7 +39,8 @@ func (s *WSController) ShellView(c *gin.Context) { Rows int `form:"rows"` // 终端显示行数 } if err := c.ShouldBindQuery(&query); err != nil { - c.JSON(400, resp.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err)) + c.JSON(422, resp.CodeMsg(422001, errMsgs)) return } if query.Cols < 120 || query.Cols > 400 { @@ -52,7 +53,7 @@ func (s *WSController) ShellView(c *gin.Context) { // 登录用户信息 loginUser, err := reqctx.LoginUser(c) if err != nil { - c.JSON(401, resp.CodeMsg(401, i18n.TKey(language, err.Error()))) + c.JSON(401, resp.CodeMsg(401002, i18n.TKey(language, err.Error()))) return } diff --git a/src/modules/ws/service/ws.go b/src/modules/ws/service/ws.go index 264c1aab..5a0caea1 100644 --- a/src/modules/ws/service/ws.go +++ b/src/modules/ws/service/ws.go @@ -10,6 +10,7 @@ import ( "be.ems/src/framework/resp" "be.ems/src/framework/utils/generate" "be.ems/src/modules/ws/model" + "github.com/gorilla/websocket" ) @@ -30,7 +31,7 @@ func (s *WS) UpgraderWs(w http.ResponseWriter, r *http.Request) *websocket.Conn wsUpgrader := websocket.Upgrader{ Subprotocols: []string{"omc-ws"}, // 设置消息发送缓冲区大小(byte),如果这个值设置得太小,可能会导致服务端在发送大型消息时遇到问题 - WriteBufferSize: 1024, + WriteBufferSize: 4096, // 消息包启用压缩 EnableCompression: true, // ws握手超时时间 @@ -195,11 +196,18 @@ func (s *WS) ClientWriteListen(wsClient *model.WSClient) { wsClient.MsgChan <- msgByte // 消息发送监听 for msg := range wsClient.MsgChan { + // PONG句柄 + if string(msg) == "ws:pong" { + wsClient.LastHeartbeat = time.Now().UnixMilli() + wsClient.Conn.WriteMessage(websocket.PongMessage, []byte{}) + continue + } // 关闭句柄 if string(msg) == "ws:close" { wsClient.Conn.WriteMessage(websocket.CloseMessage, []byte{}) return } + // 发送消息 err := wsClient.Conn.WriteMessage(websocket.TextMessage, msg) if err != nil { @@ -207,6 +215,5 @@ func (s *WS) ClientWriteListen(wsClient *model.WSClient) { s.ClientClose(wsClient.ID) return } - wsClient.LastHeartbeat = time.Now().UnixMilli() } } diff --git a/src/modules/ws/service/ws_receive.go b/src/modules/ws/service/ws_receive.go index 6bb8f571..4a1720f1 100644 --- a/src/modules/ws/service/ws_receive.go +++ b/src/modules/ws/service/ws_receive.go @@ -51,6 +51,14 @@ func (s *WSReceive) Commont(client *model.WSClient, reqMsg model.WSRequest) { case "close": s.close(client) return + case "ping", "PING": + resByte, _ := json.Marshal(resp.Ok(map[string]any{ + "requestId": reqMsg.RequestID, + "data": "PONG", + })) + client.MsgChan <- resByte + client.MsgChan <- []byte("ws:pong") + return case "ps": resByte, err = processor.GetProcessData(reqMsg.RequestID, reqMsg.Data) case "net": diff --git a/src/modules/ws/ws.go b/src/modules/ws/ws.go index 35e63f85..af8147f4 100644 --- a/src/modules/ws/ws.go +++ b/src/modules/ws/ws.go @@ -17,31 +17,31 @@ func Setup(router *gin.Engine) { wsGroup := router.Group("/ws") { wsGroup.GET("", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.ws", collectlogs.BUSINESS_TYPE_OTHER)), controller.NewWSController.WS, ) wsGroup.GET("/test", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), controller.NewWSController.Test, ) wsGroup.GET("/ssh", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.ws", collectlogs.BUSINESS_TYPE_OTHER)), controller.NewWSController.SSH, ) wsGroup.GET("/telnet", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.ws", collectlogs.BUSINESS_TYPE_OTHER)), controller.NewWSController.Telnet, ) wsGroup.GET("/redis", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.ws", collectlogs.BUSINESS_TYPE_OTHER)), controller.NewWSController.Redis, ) wsGroup.GET("/view", - middleware.PreAuthorize(nil), + middleware.AuthorizeUser(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.ws", collectlogs.BUSINESS_TYPE_OTHER)), controller.NewWSController.ShellView, ) diff --git a/swagger2docs/docs.go b/swagger_docs/docs.go similarity index 96% rename from swagger2docs/docs.go rename to swagger_docs/docs.go index b580576a..7a04f92c 100644 --- a/swagger2docs/docs.go +++ b/swagger_docs/docs.go @@ -1,5 +1,5 @@ -// Package swagger2docs Code generated by swaggo/swag. DO NOT EDIT -package swagger2docs +// Package swagger_docs Code generated by swaggo/swag. DO NOT EDIT +package swagger_docs import "github.com/swaggo/swag" @@ -216,7 +216,7 @@ const docTemplate = `{ } } }, - "/file/chunkCheck": { + "/file/chunk-check": { "post": { "security": [ { @@ -255,7 +255,7 @@ const docTemplate = `{ } } }, - "/file/chunkMerge": { + "/file/chunk-merge": { "post": { "security": [ { @@ -294,7 +294,7 @@ const docTemplate = `{ } } }, - "/file/chunkUpload": { + "/file/chunk-upload": { "post": { "security": [ { @@ -2517,6 +2517,88 @@ const docTemplate = `{ } } }, + "/neData/alarm/forward/log/list": { + "get": { + "security": [ + { + "TokenAuth": [] + } + ], + "description": "Alarm Forward Log List", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "network_data/alarm_forward" + ], + "summary": "Alarm Forward Log List", + "parameters": [ + { + "enum": [ + "IMS", + "AMF", + "AUSF", + "UDM", + "SMF", + "PCF", + "NSSF", + "NRF", + "UPF", + "MME", + "CBC", + "OMC", + "SGWC", + "SMSC" + ], + "type": "string", + "description": "NE Type", + "name": "neType", + "in": "query" + }, + { + "type": "string", + "default": "event_time", + "description": "Sort fields, fill in result fields", + "name": "sortField", + "in": "query" + }, + { + "type": "string", + "default": "asc", + "description": "Sort by ascending or descending order, asc desc", + "name": "sortOrder", + "in": "query" + }, + { + "type": "number", + "default": 1, + "description": "pageNum", + "name": "pageNum", + "in": "query", + "required": true + }, + { + "type": "number", + "default": 10, + "description": "pageSize", + "name": "pageSize", + "in": "query", + "required": true + } + ], + "responses": { + "200": { + "description": "Response Results", + "schema": { + "type": "object" + } + } + } + } + }, "/neData/alarm/list": { "get": { "security": [ @@ -2662,6 +2744,129 @@ const docTemplate = `{ } } }, + "/neData/alarm/log/event": { + "get": { + "security": [ + { + "TokenAuth": [] + } + ], + "description": "Alarm Event Log List", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "network_data/alarm_log" + ], + "summary": "Alarm Event Log List", + "parameters": [ + { + "enum": [ + "IMS", + "AMF", + "AUSF", + "UDM", + "SMF", + "PCF", + "NSSF", + "NRF", + "UPF", + "MME", + "CBC", + "OMC", + "SGWC", + "SMSC" + ], + "type": "string", + "description": "NE Type", + "name": "neType", + "in": "query" + }, + { + "type": "string", + "description": "NE ID The actual record is the network element RmUid", + "name": "neId", + "in": "query" + }, + { + "enum": [ + "1", + "2", + "3", + "4", + "5" + ], + "type": "string", + "description": "AlarmLog type Communication AlarmLogs=1, Equipment AlarmLogs=2, Processing faults=3, Environmental AlarmLogs=4, Quality of service AlarmLogs=5", + "name": "alarmLogType", + "in": "query" + }, + { + "enum": [ + "0", + "1" + ], + "type": "string", + "description": "Alarm status 0:clear, 1:active", + "name": "alarmStatus", + "in": "query" + }, + { + "enum": [ + "1", + "2", + "3", + "4" + ], + "type": "string", + "description": "Alarm Type 1: Critical, 2: Major, 3: Minor, 4: Warning", + "name": "origSeverity", + "in": "query" + }, + { + "type": "string", + "default": "event_time", + "description": "Sort fields, fill in result fields", + "name": "sortField", + "in": "query" + }, + { + "type": "string", + "default": "asc", + "description": "Sort by ascending or descending order, asc desc", + "name": "sortOrder", + "in": "query" + }, + { + "type": "number", + "default": 1, + "description": "pageNum", + "name": "pageNum", + "in": "query", + "required": true + }, + { + "type": "number", + "default": 10, + "description": "pageSize", + "name": "pageSize", + "in": "query", + "required": true + } + ], + "responses": { + "200": { + "description": "Response Results", + "schema": { + "type": "object" + } + } + } + } + }, "/neData/alarm/log/list": { "get": { "security": [ @@ -2709,28 +2914,6 @@ const docTemplate = `{ "name": "neId", "in": "query" }, - { - "type": "string", - "description": "NE Name", - "name": "neName", - "in": "query" - }, - { - "enum": [ - "PNF", - "VNF" - ], - "type": "string", - "description": "PV Flag", - "name": "pvFlag", - "in": "query" - }, - { - "type": "string", - "description": "AlarmLog status code", - "name": "alarmLogCode", - "in": "query" - }, { "enum": [ "1", @@ -2750,8 +2933,8 @@ const docTemplate = `{ "1" ], "type": "string", - "description": "AlarmLog status 0:clear, 1:active", - "name": "alarmLogStatus", + "description": "Alarm status 0:clear, 1:active", + "name": "alarmStatus", "in": "query" }, { @@ -2762,7 +2945,7 @@ const docTemplate = `{ "4" ], "type": "string", - "description": "AlarmLog Type 1: Critical, 2: Major, 3: Minor, 4: Warning", + "description": "Alarm Type 1: Critical, 2: Major, 3: Minor, 4: Warning", "name": "origSeverity", "in": "query" }, diff --git a/swagger2docs/swagger.json b/swagger_docs/swagger.json similarity index 96% rename from swagger2docs/swagger.json rename to swagger_docs/swagger.json index fc160b2e..bc9fc598 100644 --- a/swagger2docs/swagger.json +++ b/swagger_docs/swagger.json @@ -214,7 +214,7 @@ } } }, - "/file/chunkCheck": { + "/file/chunk-check": { "post": { "security": [ { @@ -253,7 +253,7 @@ } } }, - "/file/chunkMerge": { + "/file/chunk-merge": { "post": { "security": [ { @@ -292,7 +292,7 @@ } } }, - "/file/chunkUpload": { + "/file/chunk-upload": { "post": { "security": [ { @@ -2515,6 +2515,88 @@ } } }, + "/neData/alarm/forward/log/list": { + "get": { + "security": [ + { + "TokenAuth": [] + } + ], + "description": "Alarm Forward Log List", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "network_data/alarm_forward" + ], + "summary": "Alarm Forward Log List", + "parameters": [ + { + "enum": [ + "IMS", + "AMF", + "AUSF", + "UDM", + "SMF", + "PCF", + "NSSF", + "NRF", + "UPF", + "MME", + "CBC", + "OMC", + "SGWC", + "SMSC" + ], + "type": "string", + "description": "NE Type", + "name": "neType", + "in": "query" + }, + { + "type": "string", + "default": "event_time", + "description": "Sort fields, fill in result fields", + "name": "sortField", + "in": "query" + }, + { + "type": "string", + "default": "asc", + "description": "Sort by ascending or descending order, asc desc", + "name": "sortOrder", + "in": "query" + }, + { + "type": "number", + "default": 1, + "description": "pageNum", + "name": "pageNum", + "in": "query", + "required": true + }, + { + "type": "number", + "default": 10, + "description": "pageSize", + "name": "pageSize", + "in": "query", + "required": true + } + ], + "responses": { + "200": { + "description": "Response Results", + "schema": { + "type": "object" + } + } + } + } + }, "/neData/alarm/list": { "get": { "security": [ @@ -2660,6 +2742,129 @@ } } }, + "/neData/alarm/log/event": { + "get": { + "security": [ + { + "TokenAuth": [] + } + ], + "description": "Alarm Event Log List", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "network_data/alarm_log" + ], + "summary": "Alarm Event Log List", + "parameters": [ + { + "enum": [ + "IMS", + "AMF", + "AUSF", + "UDM", + "SMF", + "PCF", + "NSSF", + "NRF", + "UPF", + "MME", + "CBC", + "OMC", + "SGWC", + "SMSC" + ], + "type": "string", + "description": "NE Type", + "name": "neType", + "in": "query" + }, + { + "type": "string", + "description": "NE ID The actual record is the network element RmUid", + "name": "neId", + "in": "query" + }, + { + "enum": [ + "1", + "2", + "3", + "4", + "5" + ], + "type": "string", + "description": "AlarmLog type Communication AlarmLogs=1, Equipment AlarmLogs=2, Processing faults=3, Environmental AlarmLogs=4, Quality of service AlarmLogs=5", + "name": "alarmLogType", + "in": "query" + }, + { + "enum": [ + "0", + "1" + ], + "type": "string", + "description": "Alarm status 0:clear, 1:active", + "name": "alarmStatus", + "in": "query" + }, + { + "enum": [ + "1", + "2", + "3", + "4" + ], + "type": "string", + "description": "Alarm Type 1: Critical, 2: Major, 3: Minor, 4: Warning", + "name": "origSeverity", + "in": "query" + }, + { + "type": "string", + "default": "event_time", + "description": "Sort fields, fill in result fields", + "name": "sortField", + "in": "query" + }, + { + "type": "string", + "default": "asc", + "description": "Sort by ascending or descending order, asc desc", + "name": "sortOrder", + "in": "query" + }, + { + "type": "number", + "default": 1, + "description": "pageNum", + "name": "pageNum", + "in": "query", + "required": true + }, + { + "type": "number", + "default": 10, + "description": "pageSize", + "name": "pageSize", + "in": "query", + "required": true + } + ], + "responses": { + "200": { + "description": "Response Results", + "schema": { + "type": "object" + } + } + } + } + }, "/neData/alarm/log/list": { "get": { "security": [ @@ -2707,28 +2912,6 @@ "name": "neId", "in": "query" }, - { - "type": "string", - "description": "NE Name", - "name": "neName", - "in": "query" - }, - { - "enum": [ - "PNF", - "VNF" - ], - "type": "string", - "description": "PV Flag", - "name": "pvFlag", - "in": "query" - }, - { - "type": "string", - "description": "AlarmLog status code", - "name": "alarmLogCode", - "in": "query" - }, { "enum": [ "1", @@ -2748,8 +2931,8 @@ "1" ], "type": "string", - "description": "AlarmLog status 0:clear, 1:active", - "name": "alarmLogStatus", + "description": "Alarm status 0:clear, 1:active", + "name": "alarmStatus", "in": "query" }, { @@ -2760,7 +2943,7 @@ "4" ], "type": "string", - "description": "AlarmLog Type 1: Critical, 2: Major, 3: Minor, 4: Warning", + "description": "Alarm Type 1: Critical, 2: Major, 3: Minor, 4: Warning", "name": "origSeverity", "in": "query" }, diff --git a/swagger2docs/swagger.yaml b/swagger_docs/swagger.yaml similarity index 96% rename from swagger2docs/swagger.yaml rename to swagger_docs/swagger.yaml index 1a7471ea..4dc0475e 100644 --- a/swagger2docs/swagger.yaml +++ b/swagger_docs/swagger.yaml @@ -132,7 +132,7 @@ paths: summary: Get relationship graph group name tags: - chart - /file/chunkCheck: + /file/chunk-check: post: consumes: - application/json @@ -156,7 +156,7 @@ paths: summary: Slice file checking tags: - common/file - /file/chunkMerge: + /file/chunk-merge: post: consumes: - application/json @@ -180,7 +180,7 @@ paths: summary: Slice file merge tags: - common/file - /file/chunkUpload: + /file/chunk-upload: post: consumes: - multipart/form-data @@ -1685,6 +1685,65 @@ paths: summary: Network element version operation tags: - network_element/version + /neData/alarm/forward/log/list: + get: + consumes: + - application/json + description: Alarm Forward Log List + parameters: + - description: NE Type + enum: + - IMS + - AMF + - AUSF + - UDM + - SMF + - PCF + - NSSF + - NRF + - UPF + - MME + - CBC + - OMC + - SGWC + - SMSC + in: query + name: neType + type: string + - default: event_time + description: Sort fields, fill in result fields + in: query + name: sortField + type: string + - default: asc + description: Sort by ascending or descending order, asc desc + in: query + name: sortOrder + type: string + - default: 1 + description: pageNum + in: query + name: pageNum + required: true + type: number + - default: 10 + description: pageSize + in: query + name: pageSize + required: true + type: number + produces: + - application/json + responses: + "200": + description: Response Results + schema: + type: object + security: + - TokenAuth: [] + summary: Alarm Forward Log List + tags: + - network_data/alarm_forward /neData/alarm/list: get: consumes: @@ -1790,6 +1849,96 @@ paths: summary: Alarm List tags: - network_data/alarm + /neData/alarm/log/event: + get: + consumes: + - application/json + description: Alarm Event Log List + parameters: + - description: NE Type + enum: + - IMS + - AMF + - AUSF + - UDM + - SMF + - PCF + - NSSF + - NRF + - UPF + - MME + - CBC + - OMC + - SGWC + - SMSC + in: query + name: neType + type: string + - description: NE ID The actual record is the network element RmUid + in: query + name: neId + type: string + - description: AlarmLog type Communication AlarmLogs=1, Equipment AlarmLogs=2, + Processing faults=3, Environmental AlarmLogs=4, Quality of service AlarmLogs=5 + enum: + - "1" + - "2" + - "3" + - "4" + - "5" + in: query + name: alarmLogType + type: string + - description: Alarm status 0:clear, 1:active + enum: + - "0" + - "1" + in: query + name: alarmStatus + type: string + - description: 'Alarm Type 1: Critical, 2: Major, 3: Minor, 4: Warning' + enum: + - "1" + - "2" + - "3" + - "4" + in: query + name: origSeverity + type: string + - default: event_time + description: Sort fields, fill in result fields + in: query + name: sortField + type: string + - default: asc + description: Sort by ascending or descending order, asc desc + in: query + name: sortOrder + type: string + - default: 1 + description: pageNum + in: query + name: pageNum + required: true + type: number + - default: 10 + description: pageSize + in: query + name: pageSize + required: true + type: number + produces: + - application/json + responses: + "200": + description: Response Results + schema: + type: object + security: + - TokenAuth: [] + summary: Alarm Event Log List + tags: + - network_data/alarm_log /neData/alarm/log/list: get: consumes: @@ -1819,21 +1968,6 @@ paths: in: query name: neId type: string - - description: NE Name - in: query - name: neName - type: string - - description: PV Flag - enum: - - PNF - - VNF - in: query - name: pvFlag - type: string - - description: AlarmLog status code - in: query - name: alarmLogCode - type: string - description: AlarmLog type Communication AlarmLogs=1, Equipment AlarmLogs=2, Processing faults=3, Environmental AlarmLogs=4, Quality of service AlarmLogs=5 enum: @@ -1845,14 +1979,14 @@ paths: in: query name: alarmLogType type: string - - description: AlarmLog status 0:clear, 1:active + - description: Alarm status 0:clear, 1:active enum: - "0" - "1" in: query - name: alarmLogStatus + name: alarmStatus type: string - - description: 'AlarmLog Type 1: Critical, 2: Major, 3: Minor, 4: Warning' + - description: 'Alarm Type 1: Critical, 2: Major, 3: Minor, 4: Warning' enum: - "1" - "2" diff --git a/tools/ca/cmca.go b/tools/ca/cmca.go deleted file mode 100644 index cda21442..00000000 --- a/tools/ca/cmca.go +++ /dev/null @@ -1,64 +0,0 @@ -package main - -import ( - "crypto/rand" - "crypto/rsa" - "crypto/x509" - "encoding/pem" - "fmt" - "os" -) - -func main() { - // 生成RSA密钥对 - privateKey, err := rsa.GenerateKey(rand.Reader, 2048) - if err != nil { - fmt.Println("Failed to generate RSA private key:", err) - return - } - - // 将私钥保存到文件 - privateKeyFile, err := os.Create("private_key.pem") - if err != nil { - fmt.Println("Failed to create private key file:", err) - return - } - defer privateKeyFile.Close() - - privateKeyBlock := &pem.Block{ - Type: "RSA PRIVATE KEY", - Bytes: x509.MarshalPKCS1PrivateKey(privateKey), - } - - err = pem.Encode(privateKeyFile, privateKeyBlock) - if err != nil { - fmt.Println("Failed to write private key to file:", err) - return - } - - fmt.Println("Private key generated and saved to private_key.pem") - - // 获取公钥 - publicKey := &privateKey.PublicKey - - // 将公钥保存到文件 - publicKeyFile, err := os.Create("public_key.pem") - if err != nil { - fmt.Println("Failed to create public key file:", err) - return - } - defer publicKeyFile.Close() - - publicKeyBlock := &pem.Block{ - Type: "RSA PUBLIC KEY", - Bytes: x509.MarshalPKCS1PublicKey(publicKey), - } - - err = pem.Encode(publicKeyFile, publicKeyBlock) - if err != nil { - fmt.Println("Failed to write public key to file:", err) - return - } - - fmt.Println("Public key generated and saved to public_key.pem") -} diff --git a/tools/ca/private_key.pem b/tools/ca/private_key.pem deleted file mode 100644 index c7d8271c..00000000 --- a/tools/ca/private_key.pem +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEA1ox38PK2qgSpJDzsRvdSDPQP6hYnuCasUMV6gJsb/CVcGK3v -7MDW1X4VSgJvxqPtHH5hdWOM1rT29DtC7rU4MhK0i+9SJixvFjyijABOuXCAFtw1 -zJDJN9EFGvA/WBsCFlwmpK9qKofF3n37/N2PvgCMDWVBrGe2uszQv9O5hnqE0X2J -33ddxRMX+7SVSCz8H1U+3FWLNF2SF4sIUXn1NdzouMtEGeaxvh+czYXCEB+rtewY -7Iwvoz7VamOOxMC9FmwKvFTePjvdYcdayiImunJtS1yg1/tiKGh+BCU9YFOkZ0dw -eP982EybQYw39L8UVJqXTMPKqErKDJxkNpg/nQIDAQABAoIBAA8rm4eEAfp/nd4c -GLDj5/9WepGYw3I3+dM0Q3c4gIARvDNaiS56bDZoVeUHyxOGn8t1/Doqsdi0rwmR -7yel1LVlsTJ715kvZyNxYiT4GJjwJX54T62JR1EVDIFdH32BW2JtXaYjaSRcuVcE -HX9Bw1ox+7UuxbgFFVycAt6tf97MRdBwgJX6pNM63RzIjOFPoVPirsaWJu1PWeGt -AIRrIdMyPS+oMMTvfFNSlTuVEgDzwtecrYIeXoMhYH0pCBMx3aX7F71lww70957t -k0g+YMR50OrNMxOMHe9/jnDceLmLvfEvZVxCggMc7wPn2Llwa0SG87cjHDe/T0tg -Ob6MKlkCgYEA9Aq8tgqYTijOALVfvxWUYSEhL3AfguwNPhK+Rbx2vdYKkm5qfVkw -ZKj5rZTCUp9b1VW3EqQ6+MwzujmL8Eb85H9G3uTiVBAwqJHATF1OlZmHjDAGTZdI -kNZNdYwkOI5UteGz9/7Gq+ayapBu402ttBlChlX+q9/jzm23hq5T6CcCgYEA4Q/E -o00DloXbqq9QNv4WFYzz8NukU3Ge7ftcDU3EciK36M2Ptck0oR59TK9pFElxwaOF -SYaHUX7FE/q60vXeUQfNPQzzdCcxLqGOgK3sJlmtCiyRHIUijJ5ew/F9c2rikI5X -Vc2lvfX4NUk1YdcRHap7hPiaSWI6LYXzRwFd0JsCgYEAqlDcBwg550JfEuuCGO/M -kET4zgyoUUzAqTOXiz/OdwpscmmQ9E5MkdPD/Lq3K8Z/5tFdZSss5PpOl4cV/Oju -EeIp6eE/e3+ZFewykpkEATAXA2V44KnWQQ7vHDxkAvyCbjVIzqkGqm3k0q5eVVCf -C/QdE3fstrMYX7b+wIXllT0CgYEAvJ5ncWjhAezLbeAhvQTzYzpPU2Pw81H9HXwU -6L1tTy6TrVNiBrtLFWElJ/i2ex8WbG/sC/PoQr+Y0abHnngayxRbyLeq7YTPLkKN -2IBqsrVjVWyGbT2S+ADecR9ZwToqCXaR8UI5jtuvGpFxYL9LA+7WOFnVjHz7Px3N -Bow5oNMCgYB8m2O/rY8bjA25M/348gQ51dtR5Y+QU93rK1SSQnrbu70kZKZjBfIj -x1C6HgIECowQ56Jg/pYEQmiv+bk/0yf8uHCcCbOCEzl42gRjleO/GCt+WZD2jR3Y -bt4gG7xHklNYZU5+m45RWWLLik2LSGfY7yerhV2585lQjoYNqRBY4g== ------END RSA PRIVATE KEY----- diff --git a/tools/ca/public_key.pem b/tools/ca/public_key.pem deleted file mode 100644 index 97331211..00000000 --- a/tools/ca/public_key.pem +++ /dev/null @@ -1,8 +0,0 @@ ------BEGIN RSA PUBLIC KEY----- -MIIBCgKCAQEA1ox38PK2qgSpJDzsRvdSDPQP6hYnuCasUMV6gJsb/CVcGK3v7MDW -1X4VSgJvxqPtHH5hdWOM1rT29DtC7rU4MhK0i+9SJixvFjyijABOuXCAFtw1zJDJ -N9EFGvA/WBsCFlwmpK9qKofF3n37/N2PvgCMDWVBrGe2uszQv9O5hnqE0X2J33dd -xRMX+7SVSCz8H1U+3FWLNF2SF4sIUXn1NdzouMtEGeaxvh+czYXCEB+rtewY7Iwv -oz7VamOOxMC9FmwKvFTePjvdYcdayiImunJtS1yg1/tiKGh+BCU9YFOkZ0dweP98 -2EybQYw39L8UVJqXTMPKqErKDJxkNpg/nQIDAQAB ------END RSA PUBLIC KEY----- diff --git a/tools/casign/ca.cer b/tools/casign/ca.cer deleted file mode 100644 index 828a8437..00000000 --- a/tools/casign/ca.cer +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIC4jCCAcqgAwIBAgICB+cwDQYJKoZIhvcNAQELBQAwEjEQMA4GA1UEAxMHUm9v -dCBDQTAeFw0yMzA4MTIxODA5MzZaFw0zMzA4MTIxODA5MzZaMBIxEDAOBgNVBAMT -B1Jvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCUTcFiT1GT -Zq9ROKTuWm6IfFthO6ysthEKevwkgJGDRCwF+K6rx3j7izTDfLkXum5OPbcd/yiE -B40Yrq9X2ckX260xG9PjDmGUaq8q5sza85Gg2hrW6wiLF9y8yYK3/v7716d0y6st -jt71pH554R98m0zHkbkmrFEagWR5cEoVM6MPZp2wdDnOFBBRiB1BrbHMpAFiKJ6s -oqm1yhUwCeeR/Hs09JF8KfOFhV4qAEVvE1cviHucCEvLBaG6xBzbKvYV2iOPu6u2 -o818wphqmSZYoj3/O4/EyVgvj1VdSqmkTSudiiIhLAa8/2JKrW1v7wFQjRkwNwdf -h6UR5liIUwk7AgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTAD -AQH/MB0GA1UdDgQWBBRtEF/Jyw6Zz3v0K5uA6aMOr9LXRTANBgkqhkiG9w0BAQsF -AAOCAQEAErmFo6JjEoFZv8R2gwNUq7ln+YEh2hX4myLlNDfTpYeGnn2Ge70Kmb0o -dkSyanDd9tGImcbEOttWAYve3vetvN3g+GONbf5pV7ClIbVV5MsjN/aGwj/TQWhu -ttmfu9IV2b5HyFEM61eoHVrNoWiNpbNHTu5D/XF8sg5JkseTnJF06foykzAx28i6 -JcttunYn5SoWTIS9Ydu07X7uBcTeFBcKfH0xg4QlsNppiM5lIxBbp0WjQ8jyWw+b -Lyef4N6hmiaOf6P6qwaVZkEBhK6MVf1zadURuUSWAkhwGFjA7IbjbJ7OfYLXkYp3 -mIrXQzjxz6AfyOcY/FsgcaDLf5xbYw== ------END CERTIFICATE----- diff --git a/tools/casign/ca_cert.pem b/tools/casign/ca_cert.pem deleted file mode 100644 index 828a8437..00000000 --- a/tools/casign/ca_cert.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIC4jCCAcqgAwIBAgICB+cwDQYJKoZIhvcNAQELBQAwEjEQMA4GA1UEAxMHUm9v -dCBDQTAeFw0yMzA4MTIxODA5MzZaFw0zMzA4MTIxODA5MzZaMBIxEDAOBgNVBAMT -B1Jvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCUTcFiT1GT -Zq9ROKTuWm6IfFthO6ysthEKevwkgJGDRCwF+K6rx3j7izTDfLkXum5OPbcd/yiE -B40Yrq9X2ckX260xG9PjDmGUaq8q5sza85Gg2hrW6wiLF9y8yYK3/v7716d0y6st -jt71pH554R98m0zHkbkmrFEagWR5cEoVM6MPZp2wdDnOFBBRiB1BrbHMpAFiKJ6s -oqm1yhUwCeeR/Hs09JF8KfOFhV4qAEVvE1cviHucCEvLBaG6xBzbKvYV2iOPu6u2 -o818wphqmSZYoj3/O4/EyVgvj1VdSqmkTSudiiIhLAa8/2JKrW1v7wFQjRkwNwdf -h6UR5liIUwk7AgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTAD -AQH/MB0GA1UdDgQWBBRtEF/Jyw6Zz3v0K5uA6aMOr9LXRTANBgkqhkiG9w0BAQsF -AAOCAQEAErmFo6JjEoFZv8R2gwNUq7ln+YEh2hX4myLlNDfTpYeGnn2Ge70Kmb0o -dkSyanDd9tGImcbEOttWAYve3vetvN3g+GONbf5pV7ClIbVV5MsjN/aGwj/TQWhu -ttmfu9IV2b5HyFEM61eoHVrNoWiNpbNHTu5D/XF8sg5JkseTnJF06foykzAx28i6 -JcttunYn5SoWTIS9Ydu07X7uBcTeFBcKfH0xg4QlsNppiM5lIxBbp0WjQ8jyWw+b -Lyef4N6hmiaOf6P6qwaVZkEBhK6MVf1zadURuUSWAkhwGFjA7IbjbJ7OfYLXkYp3 -mIrXQzjxz6AfyOcY/FsgcaDLf5xbYw== ------END CERTIFICATE----- diff --git a/tools/casign/casign.go b/tools/casign/casign.go deleted file mode 100644 index 604641c0..00000000 --- a/tools/casign/casign.go +++ /dev/null @@ -1,100 +0,0 @@ -package main - -import ( - "crypto/rand" - "crypto/rsa" - "crypto/x509" - "crypto/x509/pkix" - "encoding/pem" - "fmt" - "math/big" - "os" - "time" -) - -func main() { - // 生成私钥 - privateKey, err := rsa.GenerateKey(rand.Reader, 2048) - if err != nil { - fmt.Println("Failed to generate private key:", err) - return - } - - // 创建根证书模板 - ca := &x509.Certificate{ - SerialNumber: big.NewInt(2023), - Subject: pkix.Name{CommonName: "Root CA"}, - NotBefore: time.Now(), - //NotAfter: time.Now().AddDate(10, 0, 0), // 有效期为10年 - NotAfter: time.Now().AddDate(0, 0, 1), // 有效期为10年 - KeyUsage: x509.KeyUsageCertSign | x509.KeyUsageCRLSign, - BasicConstraintsValid: true, - IsCA: true, - } - - // 使用私钥对根证书进行签名 - caBytes, err := x509.CreateCertificate(rand.Reader, ca, ca, &privateKey.PublicKey, privateKey) - if err != nil { - fmt.Println("Failed to create CA certificate:", err) - return - } - - // 将根证书保存到文件 - caFile, err := os.Create("ca_cert.pem") - if err != nil { - fmt.Println("Failed to create CA certificate file:", err) - return - } - defer caFile.Close() - - err = pem.Encode(caFile, &pem.Block{ - Type: "CERTIFICATE", - Bytes: caBytes, - }) - if err != nil { - fmt.Println("Failed to write CA certificate to file:", err) - return - } - - fmt.Println("Root CA certificate generated successfully.") - - // 将公钥保存到文件 - publicKeyBytes := x509.MarshalPKCS1PublicKey(&privateKey.PublicKey) - publicKeyFile, err := os.Create("public_key.pem") - if err != nil { - fmt.Println("Failed to create public key file:", err) - return - } - defer publicKeyFile.Close() - - err = pem.Encode(publicKeyFile, &pem.Block{ - Type: "RSA PUBLIC KEY", - Bytes: publicKeyBytes, - }) - if err != nil { - fmt.Println("Failed to write public key to file:", err) - return - } - - fmt.Println("Public key generated successfully.") - - // 将私钥保存到文件 - privateKeyBytes := x509.MarshalPKCS1PrivateKey(privateKey) - privateKeyFile, err := os.Create("private_key.pem") - if err != nil { - fmt.Println("Failed to create private key file:", err) - return - } - defer privateKeyFile.Close() - - err = pem.Encode(privateKeyFile, &pem.Block{ - Type: "RSA PRIVATE KEY", - Bytes: privateKeyBytes, - }) - if err != nil { - fmt.Println("Failed to write private key to file:", err) - return - } - - fmt.Println("Private key generated successfully.") -} diff --git a/tools/casign/private_key.pem b/tools/casign/private_key.pem deleted file mode 100644 index 334940a6..00000000 --- a/tools/casign/private_key.pem +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEAlE3BYk9Rk2avUTik7lpuiHxbYTusrLYRCnr8JICRg0QsBfiu -q8d4+4s0w3y5F7puTj23Hf8ohAeNGK6vV9nJF9utMRvT4w5hlGqvKubM2vORoNoa -1usIixfcvMmCt/7++9endMurLY7e9aR+eeEffJtMx5G5JqxRGoFkeXBKFTOjD2ad -sHQ5zhQQUYgdQa2xzKQBYiierKKptcoVMAnnkfx7NPSRfCnzhYVeKgBFbxNXL4h7 -nAhLywWhusQc2yr2Fdojj7urtqPNfMKYapkmWKI9/zuPxMlYL49VXUqppE0rnYoi -ISwGvP9iSq1tb+8BUI0ZMDcHX4elEeZYiFMJOwIDAQABAoIBAFVJVhIsXVRwdBg4 -hBkS5ogVRBPp1obIeYpWadSwH36m4M5aUlE1eKzoRGK7wlIUA8V5FmroxysOkKUG -KI5UD6Jp0fLw9uyX46QPqkb4zgyIkFI5u7+nEJW1Flt3Y3Ze7dJ1FbdEPWAIzs3j -WFzNC2eEhCYs9pZ3+HhOuzJfUitYU6ts83tazSms+7E027e/v2ubtYOzluEoj4YK -MM+ocqJOlXUOhyTATDaLs4fM567bwwFeriODQqmMIhXLf3HiBPfPYhoAlwPUV51L -bAjIPwG2/jy0yXPenYOUqSMP1i+XkyTL4eVqOLLQUI+BsEaToS8M7Lf4KRQE0vQm -uAkEA9ECgYEAxCsKXtkYXrma8UziSJgQBj88TfACyuYZBPkpBFJhffPVOreYzqmn -gsE38oHlLhCrezsxvScivS/Cwt7kgBTE9r6xmH8y2f0P3PNmtazQCqovG1gsNZ1t -9PZQmxbVUfx/7KRJ1Q5zX3x5C0P2c6XYv/1h/SQQ8PYXDhRxWZFVSikCgYEAwYlt -AoP8j6yHDMk10vJd0fKT1lztcHcQLvH3HQn2kHci2GCxySvcac49hpXTDeNdUzcQ -I9UWo1MggNojME3WHUTiZD5DYUzuNUBTkc0kMHWy79/YNAzvF9312MSyJ0NlytBQ -ISh0z0sPSxDjW+XCi/8LGu1rrremBqvh0rNIrMMCgYEAt+C8VNHcZRZHpX3y8icP -hjuKFGgwxe3Pb/j5uKJb3ktMCUEFjFo8uXTSM5AMuhRIGTgQVIS1rG5zemSh/Wj6 -g2uWXyKEEQ+D6hGBqjP1wrlpdJE+x3btFdw5DFbn2HT9mF0bFAn6nXu4npWzEw5X -UQd67WT8OFIEpF8HLPTs5JkCgYBQlL6dmITU8Vm9mh1d+mnT23NwgnqeJATJ9xcT -sS1HE0Of4grEHw4Dw8pcOg+JLcyStE91C+kEEb1ryOdz2kS3JRI5+K6nWZeo9mKV -R1u1DZx2QbZMXcJDJriRC7y9mlNMsZVbaPPRx4fTknGHts9c6NEf4hC+y1pGVtSM -nPc6bwKBgQCrtb6srow9o0acH7mMmieDuqvT8DQ6rHWoizgneZTuvIo6SPO6nRnR -jfgfQkqr9IiLh9awSblQEN9fnddog7a1yS4cUZueiP5dmtFvp4B9Scnt+BoHpOLk -rrU2i7grAye4Cd003+pqhSERGCKSzb3fTSYiMypKsxeH2bs8nrRu2A== ------END RSA PRIVATE KEY----- diff --git a/tools/casign/public.cer b/tools/casign/public.cer deleted file mode 100644 index a85d9e48..00000000 --- a/tools/casign/public.cer +++ /dev/null @@ -1,8 +0,0 @@ ------BEGIN RSA PUBLIC KEY----- -MIIBCgKCAQEAlE3BYk9Rk2avUTik7lpuiHxbYTusrLYRCnr8JICRg0QsBfiuq8d4 -+4s0w3y5F7puTj23Hf8ohAeNGK6vV9nJF9utMRvT4w5hlGqvKubM2vORoNoa1usI -ixfcvMmCt/7++9endMurLY7e9aR+eeEffJtMx5G5JqxRGoFkeXBKFTOjD2adsHQ5 -zhQQUYgdQa2xzKQBYiierKKptcoVMAnnkfx7NPSRfCnzhYVeKgBFbxNXL4h7nAhL -ywWhusQc2yr2Fdojj7urtqPNfMKYapkmWKI9/zuPxMlYL49VXUqppE0rnYoiISwG -vP9iSq1tb+8BUI0ZMDcHX4elEeZYiFMJOwIDAQAB ------END RSA PUBLIC KEY----- diff --git a/tools/casign/public_key.pem b/tools/casign/public_key.pem deleted file mode 100644 index a85d9e48..00000000 --- a/tools/casign/public_key.pem +++ /dev/null @@ -1,8 +0,0 @@ ------BEGIN RSA PUBLIC KEY----- -MIIBCgKCAQEAlE3BYk9Rk2avUTik7lpuiHxbYTusrLYRCnr8JICRg0QsBfiuq8d4 -+4s0w3y5F7puTj23Hf8ohAeNGK6vV9nJF9utMRvT4w5hlGqvKubM2vORoNoa1usI -ixfcvMmCt/7++9endMurLY7e9aR+eeEffJtMx5G5JqxRGoFkeXBKFTOjD2adsHQ5 -zhQQUYgdQa2xzKQBYiierKKptcoVMAnnkfx7NPSRfCnzhYVeKgBFbxNXL4h7nAhL -ywWhusQc2yr2Fdojj7urtqPNfMKYapkmWKI9/zuPxMlYL49VXUqppE0rnYoiISwG -vP9iSq1tb+8BUI0ZMDcHX4elEeZYiFMJOwIDAQAB ------END RSA PUBLIC KEY----- diff --git a/tools/cmca/ca.go b/tools/cmca/ca.go deleted file mode 100644 index af4901b6..00000000 --- a/tools/cmca/ca.go +++ /dev/null @@ -1,137 +0,0 @@ -package main - -import ( - "crypto" - "crypto/rand" - "crypto/rsa" - "crypto/sha256" - "crypto/x509" - "encoding/pem" - "fmt" - "os" -) - -// LoadCert 读取证书文件 -func LoadCert(path string) (*x509.Certificate, error) { - //1.打开磁盘的公钥文件 - file, err := os.Open(path) - if err != nil { - return nil, err - } - defer file.Close() - fileInfo, err := file.Stat() - if err != nil { - return nil, err - } - buf := make([]byte, fileInfo.Size()) - _, err = file.Read(buf) - if err != nil { - return nil, err - } - //2.使用pem解码得到pem.Block结构体变量 - block, _ := pem.Decode(buf) - - //证书解析 - certBody, err := x509.ParseCertificate(block.Bytes) - if err != nil { - return nil, err - } - return certBody, nil -} - -// LoadPriKey 读取私钥文件 -func LoadPriKey(path string) (*rsa.PrivateKey, error) { - //1.打开磁盘的私钥文件 - file, err := os.Open(path) - if err != nil { - return nil, err - } - defer file.Close() - //2.将私钥文件中的内容读出 - fileInfo, err := file.Stat() - if err != nil { - return nil, err - } - buf := make([]byte, fileInfo.Size()) - _, err = file.Read(buf) - if err != nil { - return nil, err - } - //3.使用pem对数据解码,得到pem.Block结构体变量 - block, _ := pem.Decode(buf) - //4.x509将数据解析成私钥结构体得到私钥 - privateKey, err := x509.ParsePKCS1PrivateKey(block.Bytes) - if err != nil { - return nil, err - } - return privateKey, nil -} - -// SignRSA RSA 签名 -func SignRSA(plainText []byte, priKey *rsa.PrivateKey) ([]byte, error) { - //1.创建一个哈希对象 - hash := sha256.New() - //2.给哈希对象添加数据 - _, err := hash.Write(plainText) - if err != nil { - return nil, err - } - //3.计算哈希值 - hashed := hash.Sum(nil) - //4.使用rsa中的函数对散列值签名 - signText, err := rsa.SignPKCS1v15(rand.Reader, priKey, crypto.SHA256, hashed) - if err != nil { - return nil, err - } - return signText, nil -} - -func VerifyRSA(plainText, signText []byte, cert *x509.Certificate) error { - publicKeyDer, err := x509.MarshalPKIXPublicKey(cert.PublicKey) - if err != nil { - return err - } - pubKeyInterface, err := x509.ParsePKIXPublicKey(publicKeyDer) - if err != nil { - return err - } - //进行类型断言得到公钥结构体 - publicKey := pubKeyInterface.(*rsa.PublicKey) - - //* 创建哈希接口 - hash := sha256.New() - //* 添加数据 - hash.Write(plainText) - //* 哈希运算 - hasded := hash.Sum(nil) - // - //6.签名认证 - err = rsa.VerifyPKCS1v15(publicKey, crypto.SHA256, hasded, signText) - if err != nil { - return err - } - return nil -} - -var rootCertPool *x509.CertPool - -func VerifyCert(cert *x509.Certificate) error { - //block, _ := pem.Decode([]byte(certPEM)) - //if block == nil { - // return fmt.Errorf("failed to parse certificate PEM") - //} - //cert, err := x509.ParseCertificate(block.Bytes) - //if err != nil { - // return fmt.Errorf("failed to parse certificate: %v", err.Error()) - //} - - opts := x509.VerifyOptions{ - Roots: rootCertPool, - } - - if _, err := cert.Verify(opts); err != nil { - return fmt.Errorf("failed to verify certificate: %v", err.Error()) - } - - return nil -} diff --git a/tools/cmca/ca/CA/certs/test1.crt b/tools/cmca/ca/CA/certs/test1.crt deleted file mode 100644 index 1b11409a..00000000 --- a/tools/cmca/ca/CA/certs/test1.crt +++ /dev/null @@ -1,81 +0,0 @@ -Certificate: - Data: - Version: 3 (0x2) - Serial Number: 1 (0x1) - Signature Algorithm: sha256WithRSAEncryption - Issuer: C=CN, ST=GD, L=shenzhen, O=https://www.agrandtech.com.cn/, CN=test - Validity - Not Before: Jul 1 10:05:48 2023 GMT - Not After : Mar 27 10:05:48 2026 GMT - Subject: C=CN, ST=GD, O=https://www.agrandtech.com.cn/, CN=test - Subject Public Key Info: - Public Key Algorithm: rsaEncryption - RSA Public-Key: (2048 bit) - Modulus: - 00:f3:bd:e9:fe:aa:a6:c1:d9:7b:74:20:f0:d0:f3: - ee:7c:d0:69:84:8d:1a:37:1e:29:42:98:86:51:87: - fe:5d:48:2e:97:b0:c6:16:9c:46:6a:38:7b:34:54: - ec:76:d2:52:50:bb:31:a8:de:7d:3f:8c:c5:f8:fb: - e3:e3:73:37:36:10:e8:55:df:80:cf:c0:d9:40:30: - b7:54:49:69:e3:a8:79:49:47:d8:74:b0:07:13:dd: - 47:72:89:69:bd:0c:40:8b:f4:ee:49:02:cb:f4:b9: - c1:7a:7d:da:10:1b:b2:b1:9f:0d:70:66:d1:86:31: - dc:e3:d6:e5:f5:2c:e1:57:bd:72:ea:4a:1d:0c:4c: - 58:09:2b:2e:e5:53:40:73:55:e9:78:c3:7a:95:25: - b7:9d:80:ac:e4:79:c3:d7:9b:d1:c3:73:78:da:03: - f4:aa:68:21:81:f2:53:b8:3d:91:60:e0:91:47:2e: - 6d:5d:01:ae:f2:82:c0:8a:dd:06:8c:70:6e:77:7e: - 14:ae:61:a5:d8:e0:13:1b:2c:f7:d3:62:0c:d1:5c: - 48:fe:59:ca:b5:b1:2b:89:2b:2f:69:5d:40:42:05: - ab:76:58:4f:36:1a:36:1c:21:eb:85:1c:da:22:1b: - c2:60:8e:c1:7d:50:33:39:c0:40:e0:49:20:a0:f7: - c3:4f - Exponent: 65537 (0x10001) - X509v3 extensions: - X509v3 Basic Constraints: - CA:FALSE - Netscape Comment: - OpenSSL Generated Certificate - X509v3 Subject Key Identifier: - D7:A0:3F:5F:C0:65:83:88:6F:5E:98:DB:30:3D:9F:24:6A:D0:DE:54 - X509v3 Authority Key Identifier: - keyid:6D:B3:1D:B6:78:4E:C8:19:8F:FA:4D:6B:3A:5E:A9:7D:CB:07:98:BA - - Signature Algorithm: sha256WithRSAEncryption - 39:8a:89:a2:79:0f:c0:fd:d8:db:d5:38:d2:03:b4:38:be:a2: - 6e:6b:1c:28:93:0a:a6:0b:af:0a:69:6b:8b:d5:df:3d:de:76: - ad:24:23:98:7a:21:a1:2f:90:47:9b:98:9e:d2:b4:75:21:bd: - d0:38:34:6b:b1:96:3d:24:da:ac:1a:45:e4:01:1d:a2:20:c3: - 43:d3:ec:d9:2d:3b:d1:ee:0d:1e:21:15:e7:7f:d3:95:1c:dc: - fa:88:3a:05:4b:c5:08:5d:f4:40:89:29:80:fe:6b:40:b9:34: - 92:2e:48:94:d2:4b:0b:4d:1e:3c:64:17:cf:34:ec:36:5c:6d: - 3d:90:9c:74:95:d7:c8:96:a2:70:59:4a:d2:b5:e1:c1:a9:b7: - ad:f0:99:ff:b4:4d:89:e7:e3:9d:7d:79:36:40:05:6d:20:46: - 54:af:18:73:c9:07:17:26:18:86:99:cc:e2:58:27:96:84:58: - 18:d4:fe:dc:36:cd:8a:48:cc:e6:51:27:e5:76:81:2f:c7:9c: - 7b:f9:fb:19:c9:7c:e4:27:06:75:cd:16:88:74:3c:0b:23:d6: - 86:6b:95:41:10:cf:b2:fc:e8:1e:e0:d6:a5:8c:d1:c0:1b:d5: - 6e:15:8c:9a:67:5c:9d:ac:02:5a:69:17:e8:4c:42:d0:5d:88: - da:08:4e:c0 ------BEGIN CERTIFICATE----- -MIIDrTCCApWgAwIBAgIBATANBgkqhkiG9w0BAQsFADBlMQswCQYDVQQGEwJDTjEL -MAkGA1UECAwCR0QxETAPBgNVBAcMCHNoZW56aGVuMScwJQYDVQQKDB5odHRwczov -L3d3dy5hZ3JhbmR0ZWNoLmNvbS5jbi8xDTALBgNVBAMMBHRlc3QwHhcNMjMwNzAx -MTAwNTQ4WhcNMjYwMzI3MTAwNTQ4WjBSMQswCQYDVQQGEwJDTjELMAkGA1UECAwC -R0QxJzAlBgNVBAoMHmh0dHBzOi8vd3d3LmFncmFuZHRlY2guY29tLmNuLzENMAsG -A1UEAwwEdGVzdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPO96f6q -psHZe3Qg8NDz7nzQaYSNGjceKUKYhlGH/l1ILpewxhacRmo4ezRU7HbSUlC7Maje -fT+Mxfj74+NzNzYQ6FXfgM/A2UAwt1RJaeOoeUlH2HSwBxPdR3KJab0MQIv07kkC -y/S5wXp92hAbsrGfDXBm0YYx3OPW5fUs4Ve9cupKHQxMWAkrLuVTQHNV6XjDepUl -t52ArOR5w9eb0cNzeNoD9KpoIYHyU7g9kWDgkUcubV0BrvKCwIrdBoxwbnd+FK5h -pdjgExss99NiDNFcSP5ZyrWxK4krL2ldQEIFq3ZYTzYaNhwh64Uc2iIbwmCOwX1Q -MznAQOBJIKD3w08CAwEAAaN7MHkwCQYDVR0TBAIwADAsBglghkgBhvhCAQ0EHxYd -T3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFNegP1/AZYOI -b16Y2zA9nyRq0N5UMB8GA1UdIwQYMBaAFG2zHbZ4TsgZj/pNazpeqX3LB5i6MA0G -CSqGSIb3DQEBCwUAA4IBAQA5iomieQ/A/djb1TjSA7Q4vqJuaxwokwqmC68KaWuL -1d893natJCOYeiGhL5BHm5ie0rR1Ib3QODRrsZY9JNqsGkXkAR2iIMND0+zZLTvR -7g0eIRXnf9OVHNz6iDoFS8UIXfRAiSmA/mtAuTSSLkiU0ksLTR48ZBfPNOw2XG09 -kJx0ldfIlqJwWUrSteHBqbet8Jn/tE2J5+OdfXk2QAVtIEZUrxhzyQcXJhiGmczi -WCeWhFgY1P7cNs2KSMzmUSfldoEvx5x7+fsZyXzkJwZ1zRaIdDwLI9aGa5VBEM+y -/Oge4NaljNHAG9VuFYyaZ1ydrAJaaRfoTELQXYjaCE7A ------END CERTIFICATE----- diff --git a/tools/cmca/ca/CA/certs/test2.crt b/tools/cmca/ca/CA/certs/test2.crt deleted file mode 100644 index 64a6baea..00000000 --- a/tools/cmca/ca/CA/certs/test2.crt +++ /dev/null @@ -1,81 +0,0 @@ -Certificate: - Data: - Version: 3 (0x2) - Serial Number: 2 (0x2) - Signature Algorithm: sha256WithRSAEncryption - Issuer: C=CN, ST=GD, L=shenzhen, O=https://www.agrandtech.com.cn/, CN=test - Validity - Not Before: Jul 1 10:08:44 2023 GMT - Not After : Mar 27 10:08:44 2026 GMT - Subject: C=CN, ST=GD, O=https://www.agrandtech.com.cn/, CN=test1 - Subject Public Key Info: - Public Key Algorithm: rsaEncryption - RSA Public-Key: (2048 bit) - Modulus: - 00:ed:73:63:a4:7d:8c:00:e6:e5:df:f5:1e:8a:d4: - 22:e4:37:16:62:6b:64:f1:90:ec:4b:4c:37:c5:2e: - de:ef:11:93:15:da:e9:2d:7b:69:72:2d:94:29:f8: - 04:75:22:37:a4:83:53:a3:7b:b1:37:2d:a0:57:af: - 0e:65:3c:cf:fe:1a:65:de:e8:66:7b:19:81:ab:10: - 9b:9e:27:5b:a9:7c:cc:3a:44:ee:6e:af:3a:ef:67: - 72:60:a8:8d:bb:4d:3e:ce:34:1f:08:9c:72:f7:52: - 44:d7:af:eb:f7:9b:3f:62:94:09:db:26:e3:0f:eb: - b3:85:d3:c3:2d:ec:c1:14:d8:2d:b0:4c:10:c7:b1: - 22:cf:74:a7:cd:94:b7:18:9e:78:0b:0b:64:00:e0: - e1:8a:97:57:11:5d:7c:f3:c9:6c:e0:97:c1:6c:01: - b5:c4:75:fa:71:96:9a:89:c7:73:61:bd:4a:2b:28: - 17:81:4b:9f:92:ee:8e:a0:57:7f:7a:7c:89:a6:7e: - 4d:a8:f3:b8:aa:03:aa:de:30:a7:19:94:a7:87:fc: - ab:5a:e5:8d:a9:64:51:5a:f4:ad:64:e1:aa:e4:45: - b7:e4:03:dc:6b:cf:fa:4a:0d:09:ef:4f:82:39:cc: - 2f:91:c1:94:55:57:58:16:0b:14:00:62:43:c9:67: - e0:d3 - Exponent: 65537 (0x10001) - X509v3 extensions: - X509v3 Basic Constraints: - CA:FALSE - Netscape Comment: - OpenSSL Generated Certificate - X509v3 Subject Key Identifier: - 51:A3:41:B8:14:F9:2C:04:DE:0C:49:24:58:B5:5A:34:0E:07:FE:40 - X509v3 Authority Key Identifier: - keyid:6D:B3:1D:B6:78:4E:C8:19:8F:FA:4D:6B:3A:5E:A9:7D:CB:07:98:BA - - Signature Algorithm: sha256WithRSAEncryption - 3c:f2:58:cd:8c:39:90:b4:f5:0f:ef:f6:a7:eb:26:4c:43:63: - dc:9f:94:a1:43:6c:9a:82:2b:e4:8e:24:c5:40:da:78:93:c5: - dd:8a:5d:63:76:00:ef:c6:ca:a7:a8:10:a3:9a:ae:d1:20:d1: - 19:e1:46:03:03:98:a4:71:9a:45:8d:34:33:ce:c8:52:82:22: - 33:5f:79:74:61:88:ab:52:6f:98:75:8f:07:bf:ff:d9:2e:30: - 67:ce:05:8b:6c:ac:24:ec:2c:ac:c5:42:f7:71:b6:da:53:bc: - 48:d1:29:82:aa:03:27:81:84:0a:f5:12:e2:8c:3a:77:f9:a8: - 0e:d4:1f:7e:1f:98:28:f7:15:f0:78:8a:ba:b7:77:20:b7:82: - 0d:cd:d5:47:ed:9e:61:a7:9b:35:1b:35:c7:74:91:0b:6c:1c: - 27:1a:a9:cc:11:5b:22:0d:35:40:43:ae:f2:44:66:aa:9e:dc: - 22:ca:a7:8b:8c:44:6a:f6:b1:6d:1e:3a:51:c0:2a:02:81:d7: - b6:4a:77:1e:e0:13:19:0c:51:4c:67:e1:2f:97:c9:4a:88:25: - c8:b4:65:dc:0d:a5:71:c2:45:dd:4f:01:bf:f0:43:9c:41:37: - 28:eb:15:fc:90:f8:b6:3a:4b:57:79:df:74:4c:a9:aa:27:a2: - 77:22:37:7f ------BEGIN CERTIFICATE----- -MIIDrjCCApagAwIBAgIBAjANBgkqhkiG9w0BAQsFADBlMQswCQYDVQQGEwJDTjEL -MAkGA1UECAwCR0QxETAPBgNVBAcMCHNoZW56aGVuMScwJQYDVQQKDB5odHRwczov -L3d3dy5hZ3JhbmR0ZWNoLmNvbS5jbi8xDTALBgNVBAMMBHRlc3QwHhcNMjMwNzAx -MTAwODQ0WhcNMjYwMzI3MTAwODQ0WjBTMQswCQYDVQQGEwJDTjELMAkGA1UECAwC -R0QxJzAlBgNVBAoMHmh0dHBzOi8vd3d3LmFncmFuZHRlY2guY29tLmNuLzEOMAwG -A1UEAwwFdGVzdDEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDtc2Ok -fYwA5uXf9R6K1CLkNxZia2TxkOxLTDfFLt7vEZMV2ukte2lyLZQp+AR1Ijekg1Oj -e7E3LaBXrw5lPM/+GmXe6GZ7GYGrEJueJ1upfMw6RO5urzrvZ3JgqI27TT7ONB8I -nHL3UkTXr+v3mz9ilAnbJuMP67OF08Mt7MEU2C2wTBDHsSLPdKfNlLcYnngLC2QA -4OGKl1cRXXzzyWzgl8FsAbXEdfpxlpqJx3NhvUorKBeBS5+S7o6gV396fImmfk2o -87iqA6reMKcZlKeH/Kta5Y2pZFFa9K1k4arkRbfkA9xrz/pKDQnvT4I5zC+RwZRV -V1gWCxQAYkPJZ+DTAgMBAAGjezB5MAkGA1UdEwQCMAAwLAYJYIZIAYb4QgENBB8W -HU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBRRo0G4FPks -BN4MSSRYtVo0Dgf+QDAfBgNVHSMEGDAWgBRtsx22eE7IGY/6TWs6Xql9yweYujAN -BgkqhkiG9w0BAQsFAAOCAQEAPPJYzYw5kLT1D+/2p+smTENj3J+UoUNsmoIr5I4k -xUDaeJPF3YpdY3YA78bKp6gQo5qu0SDRGeFGAwOYpHGaRY00M87IUoIiM195dGGI -q1JvmHWPB7//2S4wZ84Fi2ysJOwsrMVC93G22lO8SNEpgqoDJ4GECvUS4ow6d/mo -DtQffh+YKPcV8HiKurd3ILeCDc3VR+2eYaebNRs1x3SRC2wcJxqpzBFbIg01QEOu -8kRmqp7cIsqni4xEavaxbR46UcAqAoHXtkp3HuATGQxRTGfhL5fJSoglyLRl3A2l -ccJF3U8Bv/BDnEE3KOsV/JD4tjpLV3nfdEypqieidyI3fw== ------END CERTIFICATE----- diff --git a/tools/cmca/ca/CA/data/test1.csr b/tools/cmca/ca/CA/data/test1.csr deleted file mode 100644 index ae564296..00000000 --- a/tools/cmca/ca/CA/data/test1.csr +++ /dev/null @@ -1,17 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIICqjCCAZICAQAwZTELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMREwDwYDVQQH -DAhzaGVuemhlbjEnMCUGA1UECgweaHR0cHM6Ly93d3cuYWdyYW5kdGVjaC5jb20u -Y24vMQ0wCwYDVQQDDAR0ZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEA873p/qqmwdl7dCDw0PPufNBphI0aNx4pQpiGUYf+XUgul7DGFpxGajh7NFTs -dtJSULsxqN59P4zF+Pvj43M3NhDoVd+Az8DZQDC3VElp46h5SUfYdLAHE91Hcolp -vQxAi/TuSQLL9LnBen3aEBuysZ8NcGbRhjHc49bl9SzhV71y6kodDExYCSsu5VNA -c1XpeMN6lSW3nYCs5HnD15vRw3N42gP0qmghgfJTuD2RYOCRRy5tXQGu8oLAit0G -jHBud34UrmGl2OATGyz302IM0VxI/lnKtbEriSsvaV1AQgWrdlhPNho2HCHrhRza -IhvCYI7BfVAzOcBA4EkgoPfDTwIDAQABoAAwDQYJKoZIhvcNAQELBQADggEBAE7E -xGSbr/UbRNE3dzD42GnTRTUCJGgk0sUFgURfuZhKhFNSloEQBzfL7hb4M2uuirOB -t8NxImkp70/3Cw+UuewBAO5Ajp6GIYr4dZGb1KNWxqFMC1k0RCoEDcRPow5+okzf -d8QbHVQnyYNahAfxWdxLmq9g3dBmJA9d3Z4XfbPWbp3sDk7fb08Fg9Uond33vW1J -Qzco4UTcwLuicNwh6vytikjUV5zX0RS9QHSu9+akMbZbOwX9cFOhjbpmw4oGLx8h -fXeB9pgqbvdQ4Q5Bj+bScK2CR344yKY6nEw4pxdS78a7Sor+njSgvNlbBzjg+EP0 -UpTObJ9sModlMYn6h70= ------END CERTIFICATE REQUEST----- diff --git a/tools/cmca/ca/CA/data/test1.key b/tools/cmca/ca/CA/data/test1.key deleted file mode 100644 index 94264dba..00000000 --- a/tools/cmca/ca/CA/data/test1.key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEowIBAAKCAQEA873p/qqmwdl7dCDw0PPufNBphI0aNx4pQpiGUYf+XUgul7DG -FpxGajh7NFTsdtJSULsxqN59P4zF+Pvj43M3NhDoVd+Az8DZQDC3VElp46h5SUfY -dLAHE91HcolpvQxAi/TuSQLL9LnBen3aEBuysZ8NcGbRhjHc49bl9SzhV71y6kod -DExYCSsu5VNAc1XpeMN6lSW3nYCs5HnD15vRw3N42gP0qmghgfJTuD2RYOCRRy5t -XQGu8oLAit0GjHBud34UrmGl2OATGyz302IM0VxI/lnKtbEriSsvaV1AQgWrdlhP -Nho2HCHrhRzaIhvCYI7BfVAzOcBA4EkgoPfDTwIDAQABAoIBAFTFQ0GABnk681XD -Mx3pCJO+RESGcoyi38S6mVR30L6OoS2+nFY2ycKdnDPqKUd2BIzxXecWYkcc5amf -qXVsl9Ik9TkQf5NBxg0uJESbN8mmyW/0HdMPeZauCfBK3EyUm0pRyCH6aAbYJ/M7 -HAEoMPDXmWvzRoG+i81t6xJnJoRFwI8xQfKf6DbiP4KUlU7MVRWpVFkCXzZkyoqi -NWKyYfv7cBTZrWpeBCvyKRtUDvA9xjgfRTmR5rBfre9XCcu0hD2HwYBR8Nh0kz0g -4/ZgEX4LYpL40r/tbzL1hlG2zaKQw/Hmb90CvUBfwwNFA/Xvhq5NYJhwVaauPhVN -vDxIf/ECgYEA/gyooDz0B/OGSDeetBuZyQ1HjlWc7wNSCG+SBbaDb5WCLAcJCOEc -ybCg81s3P1p4IRo1BR0II1RM8RHhMLVlL/NgYQsvpYJd/02BTxYQka7EXXOdL533 -CuKYTEKODisSSjNPF051kADHs0iL5Jc8iDT21Rb8C6E4N1J1lCEWsCkCgYEA9Zz+ -16P7UVKGZzEF6/xtOf59H+Arrty9eW9nlGH+Wjkz+xySYAVSaa/6n6LiBGOwXvKc -GmUSMhanIgvnTXVkwpCEAl6cVufwuPR5V0Y66xnSsAtpascJqvCgVAxS9b0SVAju -WvExxRrEquvYUlZ7kwN2a8Rnm02BjFPijy8D5rcCgYBZWApVkBoiUbp/20+s96f1 -1P29SM6QIBLRdKtd5voCXAoTgcXjoYeGRt/TtdiQJzjoK1dKHROnmRYWEbuobaLQ -Yj8a4dw30MlN5+v57ECXe2cDlo1JGbyvz1DQQPfEc9FS1wiRob4mjp+spW7NTYK0 -RCwqdJLfZCtpCU7gcWKRQQKBgG9DB064Qgi80ZW9Z2lXmENFPXlLG37DEDIKfWmC -Wq6Uay+96bEFuCeYSHg4WRqT7jmUvZJXZr659ExACC/WliZtQN+x7DCSMUIXvUAD -2HzX3dFR2hc8wuxkxLxOOOaJF9xpj1AzItCfJ6gl3oCuHJykXOjEuApqOd1PwroK -GkJRAoGBANzf7rFrVxapMa5W/Q5fGFMwzF6sKPU0xZUhYKen0jwndl4NEQakWoiI -oWjeeFgPoKQa7LPfwfPEsCNTt3D/7ow/5kk39kTpegmICDcF+f1ij8w5ekuw4QyO -ltQsHXNdzdulT8Mhg1+R6EabgvBGZEFyWMH2yeF3QKhg6ezRAzcV ------END RSA PRIVATE KEY----- diff --git a/tools/cmca/ca/CA/data/test2.csr b/tools/cmca/ca/CA/data/test2.csr deleted file mode 100644 index 7c1bdd49..00000000 --- a/tools/cmca/ca/CA/data/test2.csr +++ /dev/null @@ -1,17 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIICqzCCAZMCAQAwZjELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMREwDwYDVQQH -DAhzaGVuemhlbjEnMCUGA1UECgweaHR0cHM6Ly93d3cuYWdyYW5kdGVjaC5jb20u -Y24vMQ4wDAYDVQQDDAV0ZXN0MTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAO1zY6R9jADm5d/1HorUIuQ3FmJrZPGQ7EtMN8Uu3u8RkxXa6S17aXItlCn4 -BHUiN6SDU6N7sTctoFevDmU8z/4aZd7oZnsZgasQm54nW6l8zDpE7m6vOu9ncmCo -jbtNPs40HwiccvdSRNev6/ebP2KUCdsm4w/rs4XTwy3swRTYLbBMEMexIs90p82U -txieeAsLZADg4YqXVxFdfPPJbOCXwWwBtcR1+nGWmonHc2G9SisoF4FLn5LujqBX -f3p8iaZ+TajzuKoDqt4wpxmUp4f8q1rljalkUVr0rWThquRFt+QD3GvP+koNCe9P -gjnML5HBlFVXWBYLFABiQ8ln4NMCAwEAAaAAMA0GCSqGSIb3DQEBCwUAA4IBAQBh -7RKvFZzrt7cDmIPEaTpXZnXKbSaU6Yq4PzG6mnG0B2wd15wZ41nVQobprVEd/hIY -ifjtTh0fZp7IBhBomX2QJWlhqdK4RvlMDX9w0Q6oSYjbHKj7TfGnBpyi5gjK/a12 -cQvupDTXWp5Hq5McnBKdo/SDow1papl4jFkGeNq8ItD+2FQQhcJGMLnNndQ9p9Mj -3TRtcfxbsJgmDHBQyefM5ASnG4j5X7wi2zSdgN9hEFIzm9weFpYGAnNx431BE0Vg -9bR1YWFBPzjMI4x5DN7HWt+z5acZlXjws2OM68zum3MR7UbreV/eJjtE3Un9AuNW -e5nUqnFMJ7RVZnTvPlGz ------END CERTIFICATE REQUEST----- diff --git a/tools/cmca/ca/CA/data/test2.key b/tools/cmca/ca/CA/data/test2.key deleted file mode 100644 index ce88c3e6..00000000 --- a/tools/cmca/ca/CA/data/test2.key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEA7XNjpH2MAObl3/UeitQi5DcWYmtk8ZDsS0w3xS7e7xGTFdrp -LXtpci2UKfgEdSI3pINTo3uxNy2gV68OZTzP/hpl3uhmexmBqxCbnidbqXzMOkTu -bq8672dyYKiNu00+zjQfCJxy91JE16/r95s/YpQJ2ybjD+uzhdPDLezBFNgtsEwQ -x7Eiz3SnzZS3GJ54CwtkAODhipdXEV1888ls4JfBbAG1xHX6cZaaicdzYb1KKygX -gUufku6OoFd/enyJpn5NqPO4qgOq3jCnGZSnh/yrWuWNqWRRWvStZOGq5EW35APc -a8/6Sg0J70+COcwvkcGUVVdYFgsUAGJDyWfg0wIDAQABAoIBAQCWcM8mvmxffesS -s8iACNt6X/SMsqIn8rvjEQ0cnw+bxDS+Wg32RQSP1JTU6lBYri82ygXJxGqJHR1D -sKOcPKVCxxLX4cJcJ9LhwQn3b9RBU9JI8Ldn5Rmf6Jis6N2zV8N8/cTTvduRGsyH -IuyL2g6UtFpyQPcHdTwug/ZbOG80dnI9Z4qWFLKe5JFgsrpTyOIC9ta8CcHYNZiV -uSPYEH/CWvgZQOc6VpfnnNefiLxMKq2Tbpk/FbioUiqGwxtWBmE9YyFvtSpUb/TU -MKwPidMV/0V7wRQafjD3qL/Y2V8ZVaEnwVAT8GjQECPCLPON6i8gr/oi6bVrpwb4 -B8tixqWBAoGBAPj36K5ofGPVi2TsK78q3+pPKrGL1HHpdloVglME+8H1AbMf1nBX -iH2T4iAR4o13KDa0gc3vUttW1P8fiTTGHL32mF6gvUPG2u3T9riZoKGQ+2aKHG6e -0MwcXmq53WwLseNykwb2qOSISBSkjjv4mkbpuOrurOF0UMKnA04k9eizAoGBAPQo -NJOZTQiLW61ckc1Cy3pDtW4dTKsAomt8Aw6AbZyZUqP3smB/DhnsHXe3W84f6DZC -pkIvnX7WMWQLLBEpe09rKfhWMGbk8gGo9sOf0RYVE93rwxFVA/sXSle4HeGur2ku -YgaJ86YGRgN4ctb9CCZ3IqZmL5jds73ajmAHcvdhAoGAPBdJ996MN2RxUpiWLnvg -s6MMAPJpAl2BDVknrXYEddn24Q8MKO1XqkepSmhGsDJUaG/E7LmY3AvnOPSZnz05 -7re4Kw7M37D9Ym3InOGnnZdqtmMbXa/DYaBvQX8+7DceZnFe/01FknM6QpE9K0hj -pD4BPeMBoyD55SF+cLwHBnUCgYBypPJTIBe43F7231GjFSsgROzLQLzASvL5D2kM -BSfy8VeJoIREpUREzcbkcNeNyROrbs5Mo7kLVp4ogMp3YIgDOamiby4ZEoXEW8dL -Ah8WhF0oxkx5NfdBjqUc3VpCn1jERcBHm70phyaW+JbL9lI+ZZCCm9bbq7Z7fkV+ -N+E24QKBgQDNKwrWWtm5GAf8CFxE8ZSyqa3Si9Fa65GIb+5ful8VuklK6bhGkCjd -gV0zDTBnV0Cm7CBhGsKaXGy49J7Ti5BwFv/txEsnU0ZmC7qXKExckm/gJ/uer0QU -XWCIGtHDn2UNtv1wS6MBIYEeb09aoUhjFDXLPDNipdLh1Wh25wF2sw== ------END RSA PRIVATE KEY----- diff --git a/tools/cmca/ca/CA/demoCA/cacert.pem b/tools/cmca/ca/CA/demoCA/cacert.pem deleted file mode 100644 index 7734aeaa..00000000 --- a/tools/cmca/ca/CA/demoCA/cacert.pem +++ /dev/null @@ -1,22 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDqzCCApOgAwIBAgIUDs5kTQVLnC1MdhXHj0KqYIG+nyAwDQYJKoZIhvcNAQEL -BQAwZTELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMREwDwYDVQQHDAhzaGVuemhl -bjEnMCUGA1UECgweaHR0cHM6Ly93d3cuYWdyYW5kdGVjaC5jb20uY24vMQ0wCwYD -VQQDDAR0ZXN0MB4XDTIzMDcwMTA4NDQzOFoXDTMzMDYyODA4NDQzOFowZTELMAkG -A1UEBhMCQ04xCzAJBgNVBAgMAkdEMREwDwYDVQQHDAhzaGVuemhlbjEnMCUGA1UE -CgweaHR0cHM6Ly93d3cuYWdyYW5kdGVjaC5jb20uY24vMQ0wCwYDVQQDDAR0ZXN0 -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0SMdRLkcxy3PKOSCusJ+ -AnGiJyW6AxyujqZj4xjgtIFjYIMVW5ZXVbWnY0xzRPddFddnEWgMeMLn9V3zcESV -3tu9exm6Ijop8/KaDJ1EJAESunxkP9x/1ek3kgQvuK3YAcizTeB5ODUZ/KFJw9MP -R/KUB+TYqCp50mr6mlIZE6lvhhvMxHz6ZmOFh2RvYg0h8oXpo5G8nmRVb4gNrlXK -y/HZpGtbm/mfbOtxWgvSFy3PE/49V8nOYJbhDaoOXWVN06Z7w1y4KzSKbIoZfC9C -WdWRrrhIv+Px1QLQItL17kAKqtp+vtG8lZjC5vsAgXLVAZLK71b6onv1Ir3Yuwwf -vQIDAQABo1MwUTAdBgNVHQ4EFgQUbbMdtnhOyBmP+k1rOl6pfcsHmLowHwYDVR0j -BBgwFoAUbbMdtnhOyBmP+k1rOl6pfcsHmLowDwYDVR0TAQH/BAUwAwEB/zANBgkq -hkiG9w0BAQsFAAOCAQEAdGZdTglVP1hI0wcxD0rkkHu7IkfFGlaad1vFL+VfujlV -6H3/WrDLCDhLDBZrdZ3m0LrQqpJjZriOaqc0O8LbT4ktquVuAgYtT/il6EQzLpyE -pEW+iM4Ae2tu9rMH1F365+C8ffQWuSenvQOOjL8L9BP5N0bguVsWA+uMNprMado4 -lLuyHOt5S36WOKh4mnMlkDBuCNnBCiFS8rcQXJugk6jrOYKji5wJGNAVMoSEtRvN -LdZh5XOkbXuFrhltPxMG/7BaPc9xS46chBKDvCQPweKGeu2eG+y6KTwCDYmakmVX -OE8TnP4Zr0miTprzkmbWhIkUWkg/FclJs1/TcSkCGw== ------END CERTIFICATE----- diff --git a/tools/cmca/ca/CA/demoCA/index.txt b/tools/cmca/ca/CA/demoCA/index.txt deleted file mode 100644 index 75337500..00000000 --- a/tools/cmca/ca/CA/demoCA/index.txt +++ /dev/null @@ -1,2 +0,0 @@ -V 260327100548Z 01 unknown /C=CN/ST=GD/O=https://www.agrandtech.com.cn//CN=test -V 260327100844Z 02 unknown /C=CN/ST=GD/O=https://www.agrandtech.com.cn//CN=test1 diff --git a/tools/cmca/ca/CA/demoCA/index.txt.attr b/tools/cmca/ca/CA/demoCA/index.txt.attr deleted file mode 100644 index 8f7e63a3..00000000 --- a/tools/cmca/ca/CA/demoCA/index.txt.attr +++ /dev/null @@ -1 +0,0 @@ -unique_subject = yes diff --git a/tools/cmca/ca/CA/demoCA/index.txt.attr.old b/tools/cmca/ca/CA/demoCA/index.txt.attr.old deleted file mode 100644 index 8f7e63a3..00000000 --- a/tools/cmca/ca/CA/demoCA/index.txt.attr.old +++ /dev/null @@ -1 +0,0 @@ -unique_subject = yes diff --git a/tools/cmca/ca/CA/demoCA/index.txt.old b/tools/cmca/ca/CA/demoCA/index.txt.old deleted file mode 100644 index e5b2d16a..00000000 --- a/tools/cmca/ca/CA/demoCA/index.txt.old +++ /dev/null @@ -1 +0,0 @@ -V 260327100548Z 01 unknown /C=CN/ST=GD/O=https://www.agrandtech.com.cn//CN=test diff --git a/tools/cmca/ca/CA/demoCA/newcerts/01.pem b/tools/cmca/ca/CA/demoCA/newcerts/01.pem deleted file mode 100644 index 1b11409a..00000000 --- a/tools/cmca/ca/CA/demoCA/newcerts/01.pem +++ /dev/null @@ -1,81 +0,0 @@ -Certificate: - Data: - Version: 3 (0x2) - Serial Number: 1 (0x1) - Signature Algorithm: sha256WithRSAEncryption - Issuer: C=CN, ST=GD, L=shenzhen, O=https://www.agrandtech.com.cn/, CN=test - Validity - Not Before: Jul 1 10:05:48 2023 GMT - Not After : Mar 27 10:05:48 2026 GMT - Subject: C=CN, ST=GD, O=https://www.agrandtech.com.cn/, CN=test - Subject Public Key Info: - Public Key Algorithm: rsaEncryption - RSA Public-Key: (2048 bit) - Modulus: - 00:f3:bd:e9:fe:aa:a6:c1:d9:7b:74:20:f0:d0:f3: - ee:7c:d0:69:84:8d:1a:37:1e:29:42:98:86:51:87: - fe:5d:48:2e:97:b0:c6:16:9c:46:6a:38:7b:34:54: - ec:76:d2:52:50:bb:31:a8:de:7d:3f:8c:c5:f8:fb: - e3:e3:73:37:36:10:e8:55:df:80:cf:c0:d9:40:30: - b7:54:49:69:e3:a8:79:49:47:d8:74:b0:07:13:dd: - 47:72:89:69:bd:0c:40:8b:f4:ee:49:02:cb:f4:b9: - c1:7a:7d:da:10:1b:b2:b1:9f:0d:70:66:d1:86:31: - dc:e3:d6:e5:f5:2c:e1:57:bd:72:ea:4a:1d:0c:4c: - 58:09:2b:2e:e5:53:40:73:55:e9:78:c3:7a:95:25: - b7:9d:80:ac:e4:79:c3:d7:9b:d1:c3:73:78:da:03: - f4:aa:68:21:81:f2:53:b8:3d:91:60:e0:91:47:2e: - 6d:5d:01:ae:f2:82:c0:8a:dd:06:8c:70:6e:77:7e: - 14:ae:61:a5:d8:e0:13:1b:2c:f7:d3:62:0c:d1:5c: - 48:fe:59:ca:b5:b1:2b:89:2b:2f:69:5d:40:42:05: - ab:76:58:4f:36:1a:36:1c:21:eb:85:1c:da:22:1b: - c2:60:8e:c1:7d:50:33:39:c0:40:e0:49:20:a0:f7: - c3:4f - Exponent: 65537 (0x10001) - X509v3 extensions: - X509v3 Basic Constraints: - CA:FALSE - Netscape Comment: - OpenSSL Generated Certificate - X509v3 Subject Key Identifier: - D7:A0:3F:5F:C0:65:83:88:6F:5E:98:DB:30:3D:9F:24:6A:D0:DE:54 - X509v3 Authority Key Identifier: - keyid:6D:B3:1D:B6:78:4E:C8:19:8F:FA:4D:6B:3A:5E:A9:7D:CB:07:98:BA - - Signature Algorithm: sha256WithRSAEncryption - 39:8a:89:a2:79:0f:c0:fd:d8:db:d5:38:d2:03:b4:38:be:a2: - 6e:6b:1c:28:93:0a:a6:0b:af:0a:69:6b:8b:d5:df:3d:de:76: - ad:24:23:98:7a:21:a1:2f:90:47:9b:98:9e:d2:b4:75:21:bd: - d0:38:34:6b:b1:96:3d:24:da:ac:1a:45:e4:01:1d:a2:20:c3: - 43:d3:ec:d9:2d:3b:d1:ee:0d:1e:21:15:e7:7f:d3:95:1c:dc: - fa:88:3a:05:4b:c5:08:5d:f4:40:89:29:80:fe:6b:40:b9:34: - 92:2e:48:94:d2:4b:0b:4d:1e:3c:64:17:cf:34:ec:36:5c:6d: - 3d:90:9c:74:95:d7:c8:96:a2:70:59:4a:d2:b5:e1:c1:a9:b7: - ad:f0:99:ff:b4:4d:89:e7:e3:9d:7d:79:36:40:05:6d:20:46: - 54:af:18:73:c9:07:17:26:18:86:99:cc:e2:58:27:96:84:58: - 18:d4:fe:dc:36:cd:8a:48:cc:e6:51:27:e5:76:81:2f:c7:9c: - 7b:f9:fb:19:c9:7c:e4:27:06:75:cd:16:88:74:3c:0b:23:d6: - 86:6b:95:41:10:cf:b2:fc:e8:1e:e0:d6:a5:8c:d1:c0:1b:d5: - 6e:15:8c:9a:67:5c:9d:ac:02:5a:69:17:e8:4c:42:d0:5d:88: - da:08:4e:c0 ------BEGIN CERTIFICATE----- -MIIDrTCCApWgAwIBAgIBATANBgkqhkiG9w0BAQsFADBlMQswCQYDVQQGEwJDTjEL -MAkGA1UECAwCR0QxETAPBgNVBAcMCHNoZW56aGVuMScwJQYDVQQKDB5odHRwczov -L3d3dy5hZ3JhbmR0ZWNoLmNvbS5jbi8xDTALBgNVBAMMBHRlc3QwHhcNMjMwNzAx -MTAwNTQ4WhcNMjYwMzI3MTAwNTQ4WjBSMQswCQYDVQQGEwJDTjELMAkGA1UECAwC -R0QxJzAlBgNVBAoMHmh0dHBzOi8vd3d3LmFncmFuZHRlY2guY29tLmNuLzENMAsG -A1UEAwwEdGVzdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPO96f6q -psHZe3Qg8NDz7nzQaYSNGjceKUKYhlGH/l1ILpewxhacRmo4ezRU7HbSUlC7Maje -fT+Mxfj74+NzNzYQ6FXfgM/A2UAwt1RJaeOoeUlH2HSwBxPdR3KJab0MQIv07kkC -y/S5wXp92hAbsrGfDXBm0YYx3OPW5fUs4Ve9cupKHQxMWAkrLuVTQHNV6XjDepUl -t52ArOR5w9eb0cNzeNoD9KpoIYHyU7g9kWDgkUcubV0BrvKCwIrdBoxwbnd+FK5h -pdjgExss99NiDNFcSP5ZyrWxK4krL2ldQEIFq3ZYTzYaNhwh64Uc2iIbwmCOwX1Q -MznAQOBJIKD3w08CAwEAAaN7MHkwCQYDVR0TBAIwADAsBglghkgBhvhCAQ0EHxYd -T3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFNegP1/AZYOI -b16Y2zA9nyRq0N5UMB8GA1UdIwQYMBaAFG2zHbZ4TsgZj/pNazpeqX3LB5i6MA0G -CSqGSIb3DQEBCwUAA4IBAQA5iomieQ/A/djb1TjSA7Q4vqJuaxwokwqmC68KaWuL -1d893natJCOYeiGhL5BHm5ie0rR1Ib3QODRrsZY9JNqsGkXkAR2iIMND0+zZLTvR -7g0eIRXnf9OVHNz6iDoFS8UIXfRAiSmA/mtAuTSSLkiU0ksLTR48ZBfPNOw2XG09 -kJx0ldfIlqJwWUrSteHBqbet8Jn/tE2J5+OdfXk2QAVtIEZUrxhzyQcXJhiGmczi -WCeWhFgY1P7cNs2KSMzmUSfldoEvx5x7+fsZyXzkJwZ1zRaIdDwLI9aGa5VBEM+y -/Oge4NaljNHAG9VuFYyaZ1ydrAJaaRfoTELQXYjaCE7A ------END CERTIFICATE----- diff --git a/tools/cmca/ca/CA/demoCA/newcerts/02.pem b/tools/cmca/ca/CA/demoCA/newcerts/02.pem deleted file mode 100644 index 64a6baea..00000000 --- a/tools/cmca/ca/CA/demoCA/newcerts/02.pem +++ /dev/null @@ -1,81 +0,0 @@ -Certificate: - Data: - Version: 3 (0x2) - Serial Number: 2 (0x2) - Signature Algorithm: sha256WithRSAEncryption - Issuer: C=CN, ST=GD, L=shenzhen, O=https://www.agrandtech.com.cn/, CN=test - Validity - Not Before: Jul 1 10:08:44 2023 GMT - Not After : Mar 27 10:08:44 2026 GMT - Subject: C=CN, ST=GD, O=https://www.agrandtech.com.cn/, CN=test1 - Subject Public Key Info: - Public Key Algorithm: rsaEncryption - RSA Public-Key: (2048 bit) - Modulus: - 00:ed:73:63:a4:7d:8c:00:e6:e5:df:f5:1e:8a:d4: - 22:e4:37:16:62:6b:64:f1:90:ec:4b:4c:37:c5:2e: - de:ef:11:93:15:da:e9:2d:7b:69:72:2d:94:29:f8: - 04:75:22:37:a4:83:53:a3:7b:b1:37:2d:a0:57:af: - 0e:65:3c:cf:fe:1a:65:de:e8:66:7b:19:81:ab:10: - 9b:9e:27:5b:a9:7c:cc:3a:44:ee:6e:af:3a:ef:67: - 72:60:a8:8d:bb:4d:3e:ce:34:1f:08:9c:72:f7:52: - 44:d7:af:eb:f7:9b:3f:62:94:09:db:26:e3:0f:eb: - b3:85:d3:c3:2d:ec:c1:14:d8:2d:b0:4c:10:c7:b1: - 22:cf:74:a7:cd:94:b7:18:9e:78:0b:0b:64:00:e0: - e1:8a:97:57:11:5d:7c:f3:c9:6c:e0:97:c1:6c:01: - b5:c4:75:fa:71:96:9a:89:c7:73:61:bd:4a:2b:28: - 17:81:4b:9f:92:ee:8e:a0:57:7f:7a:7c:89:a6:7e: - 4d:a8:f3:b8:aa:03:aa:de:30:a7:19:94:a7:87:fc: - ab:5a:e5:8d:a9:64:51:5a:f4:ad:64:e1:aa:e4:45: - b7:e4:03:dc:6b:cf:fa:4a:0d:09:ef:4f:82:39:cc: - 2f:91:c1:94:55:57:58:16:0b:14:00:62:43:c9:67: - e0:d3 - Exponent: 65537 (0x10001) - X509v3 extensions: - X509v3 Basic Constraints: - CA:FALSE - Netscape Comment: - OpenSSL Generated Certificate - X509v3 Subject Key Identifier: - 51:A3:41:B8:14:F9:2C:04:DE:0C:49:24:58:B5:5A:34:0E:07:FE:40 - X509v3 Authority Key Identifier: - keyid:6D:B3:1D:B6:78:4E:C8:19:8F:FA:4D:6B:3A:5E:A9:7D:CB:07:98:BA - - Signature Algorithm: sha256WithRSAEncryption - 3c:f2:58:cd:8c:39:90:b4:f5:0f:ef:f6:a7:eb:26:4c:43:63: - dc:9f:94:a1:43:6c:9a:82:2b:e4:8e:24:c5:40:da:78:93:c5: - dd:8a:5d:63:76:00:ef:c6:ca:a7:a8:10:a3:9a:ae:d1:20:d1: - 19:e1:46:03:03:98:a4:71:9a:45:8d:34:33:ce:c8:52:82:22: - 33:5f:79:74:61:88:ab:52:6f:98:75:8f:07:bf:ff:d9:2e:30: - 67:ce:05:8b:6c:ac:24:ec:2c:ac:c5:42:f7:71:b6:da:53:bc: - 48:d1:29:82:aa:03:27:81:84:0a:f5:12:e2:8c:3a:77:f9:a8: - 0e:d4:1f:7e:1f:98:28:f7:15:f0:78:8a:ba:b7:77:20:b7:82: - 0d:cd:d5:47:ed:9e:61:a7:9b:35:1b:35:c7:74:91:0b:6c:1c: - 27:1a:a9:cc:11:5b:22:0d:35:40:43:ae:f2:44:66:aa:9e:dc: - 22:ca:a7:8b:8c:44:6a:f6:b1:6d:1e:3a:51:c0:2a:02:81:d7: - b6:4a:77:1e:e0:13:19:0c:51:4c:67:e1:2f:97:c9:4a:88:25: - c8:b4:65:dc:0d:a5:71:c2:45:dd:4f:01:bf:f0:43:9c:41:37: - 28:eb:15:fc:90:f8:b6:3a:4b:57:79:df:74:4c:a9:aa:27:a2: - 77:22:37:7f ------BEGIN CERTIFICATE----- -MIIDrjCCApagAwIBAgIBAjANBgkqhkiG9w0BAQsFADBlMQswCQYDVQQGEwJDTjEL -MAkGA1UECAwCR0QxETAPBgNVBAcMCHNoZW56aGVuMScwJQYDVQQKDB5odHRwczov -L3d3dy5hZ3JhbmR0ZWNoLmNvbS5jbi8xDTALBgNVBAMMBHRlc3QwHhcNMjMwNzAx -MTAwODQ0WhcNMjYwMzI3MTAwODQ0WjBTMQswCQYDVQQGEwJDTjELMAkGA1UECAwC -R0QxJzAlBgNVBAoMHmh0dHBzOi8vd3d3LmFncmFuZHRlY2guY29tLmNuLzEOMAwG -A1UEAwwFdGVzdDEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDtc2Ok -fYwA5uXf9R6K1CLkNxZia2TxkOxLTDfFLt7vEZMV2ukte2lyLZQp+AR1Ijekg1Oj -e7E3LaBXrw5lPM/+GmXe6GZ7GYGrEJueJ1upfMw6RO5urzrvZ3JgqI27TT7ONB8I -nHL3UkTXr+v3mz9ilAnbJuMP67OF08Mt7MEU2C2wTBDHsSLPdKfNlLcYnngLC2QA -4OGKl1cRXXzzyWzgl8FsAbXEdfpxlpqJx3NhvUorKBeBS5+S7o6gV396fImmfk2o -87iqA6reMKcZlKeH/Kta5Y2pZFFa9K1k4arkRbfkA9xrz/pKDQnvT4I5zC+RwZRV -V1gWCxQAYkPJZ+DTAgMBAAGjezB5MAkGA1UdEwQCMAAwLAYJYIZIAYb4QgENBB8W -HU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBRRo0G4FPks -BN4MSSRYtVo0Dgf+QDAfBgNVHSMEGDAWgBRtsx22eE7IGY/6TWs6Xql9yweYujAN -BgkqhkiG9w0BAQsFAAOCAQEAPPJYzYw5kLT1D+/2p+smTENj3J+UoUNsmoIr5I4k -xUDaeJPF3YpdY3YA78bKp6gQo5qu0SDRGeFGAwOYpHGaRY00M87IUoIiM195dGGI -q1JvmHWPB7//2S4wZ84Fi2ysJOwsrMVC93G22lO8SNEpgqoDJ4GECvUS4ow6d/mo -DtQffh+YKPcV8HiKurd3ILeCDc3VR+2eYaebNRs1x3SRC2wcJxqpzBFbIg01QEOu -8kRmqp7cIsqni4xEavaxbR46UcAqAoHXtkp3HuATGQxRTGfhL5fJSoglyLRl3A2l -ccJF3U8Bv/BDnEE3KOsV/JD4tjpLV3nfdEypqieidyI3fw== ------END CERTIFICATE----- diff --git a/tools/cmca/ca/CA/demoCA/private/cakey.pem b/tools/cmca/ca/CA/demoCA/private/cakey.pem deleted file mode 100644 index a8ca5b4b..00000000 --- a/tools/cmca/ca/CA/demoCA/private/cakey.pem +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpgIBAAKCAQEA0SMdRLkcxy3PKOSCusJ+AnGiJyW6AxyujqZj4xjgtIFjYIMV -W5ZXVbWnY0xzRPddFddnEWgMeMLn9V3zcESV3tu9exm6Ijop8/KaDJ1EJAESunxk -P9x/1ek3kgQvuK3YAcizTeB5ODUZ/KFJw9MPR/KUB+TYqCp50mr6mlIZE6lvhhvM -xHz6ZmOFh2RvYg0h8oXpo5G8nmRVb4gNrlXKy/HZpGtbm/mfbOtxWgvSFy3PE/49 -V8nOYJbhDaoOXWVN06Z7w1y4KzSKbIoZfC9CWdWRrrhIv+Px1QLQItL17kAKqtp+ -vtG8lZjC5vsAgXLVAZLK71b6onv1Ir3YuwwfvQIDAQABAoIBAQCi1khvvgJeQ5jN -Kj9v0wfyNzAecw2GZsqzX3Le2/v6D9SkzOvQSBrwLWSLuHb39/KOkw05TF6JmJir -P9/QRla7EzVRqBJ5m/gWbYrsz3bC4eMHONuFrdYLZG9UTdYqYZGSsgaKWIGJ9i6p -uZuJ0chQKNyB2Pmo1onMAGfnyIyl9RruM0G3KOl2tHOqJnoqOoJAdWvq/vjmEb1H -lypiZZpIede2Q58oXC1HZFNT/q1NA3SGMbPoXmG4XoCTtq9Llt1kyk9FMbhKV1oj -FoneRwXRMEqu0AEGgk9XSEdSPVLZ4nspgrdA5mkTxa/fUyPvWjantzR/ovR6zx95 -mKKnEVIBAoGBAOwtRkIciCNSa7xwJD8QvEFCADvZDU/+RmFk2tDbbA+gDYPy1bdD -1qDqbzwdCnuMeVbTSAP+KNxxa1M9pOun21t6nC7sUPdqGbQEwkQrFs9v859wf2j9 -GU/oeu+aQabDGFXjwTC23wifqXTVc1/JnfGsqd3+9WwqR31SG+88/OjdAoGBAOKw -1r7/9XqrYxL3SuxYhEm6Qasj3OwRgTXBfRYBcwyN8NDTqY/QvsTwPvLVaDy8lrjc -kHJUx+zxmOBg/aKlxmzH5OTp0vRoVBFAOW4bITfGHKTjPjud7lfeAP2txPUR4i/4 -vHgYIlVFjGT6+p4oMsX7wtYl8ZmO184pVHNbZzRhAoGBAOJQQBL55Dp0sGhRzWnh -T4P5CuBOjUMqFaceTc/1cwdGB6149PI4P2LTQuQHsBPT+DILI+cvlVgoFwAdAfwP -TVPLmf4c1TlAooCuTrmj0KfWT01pL64bWjYIQEV5O4/hQ2CKboWPtwk8ddVO9M/F -E2SSX/QqbGLJ4Ndl5v7JIlDBAoGBAJQnnzIVdwpFGOs8U+tDrrHA2UpQlgJzLk9D -tcy8BcUev1S8AQXNF+D+YyWx8/4+AwOuo3kVj9R70b5TpXC3h4dw3Vf+ubCivs7H -esFLWdpp0C6zlejAvxUOMveYqjDBD2Lq3cJfg5DXc3pLzZ+wBf7/G8d55PzHLqO+ -v0Llaf4BAoGBAI4Fu4Sr0fD38pAUAehfDlzngoXIs7eqdJU5Gu19U3PKKhDRKptp -YBKt6mGv1R9rk9hCwXpXGRpABy6mpNkOCcYYmTtLGbwyy8Y1dbY9kNBrdhvrCcLh -RZL9VrFMOuoHrd/yB4AEwvoZHAhNAkheU6CC/R6uiWof6eH8YmXJEt0n ------END RSA PRIVATE KEY----- diff --git a/tools/cmca/ca/CA/demoCA/serial b/tools/cmca/ca/CA/demoCA/serial deleted file mode 100644 index 75016ea3..00000000 --- a/tools/cmca/ca/CA/demoCA/serial +++ /dev/null @@ -1 +0,0 @@ -03 diff --git a/tools/cmca/ca/CA/demoCA/serial.old b/tools/cmca/ca/CA/demoCA/serial.old deleted file mode 100644 index 9e22bcb8..00000000 --- a/tools/cmca/ca/CA/demoCA/serial.old +++ /dev/null @@ -1 +0,0 @@ -02 diff --git a/tools/cmca/casign.exe b/tools/cmca/casign.exe deleted file mode 100644 index 8f201635..00000000 Binary files a/tools/cmca/casign.exe and /dev/null differ diff --git a/tools/cmca/casign.go b/tools/cmca/casign.go deleted file mode 100644 index f07573e0..00000000 --- a/tools/cmca/casign.go +++ /dev/null @@ -1,71 +0,0 @@ -package main - -import ( - "crypto/x509" - "encoding/base64" - "fmt" - "os" - - "be.ems/tools/cmca/config" -) - -// func init() { -// roots := x509.NewCertPool() -// rootCert, err := LoadCert(config.CaConfig.CA.RootCert) -// if err != nil { -// os.Exit(1) -// } -// roots.AddCert(rootCert) -// rootCertPool = roots -// } - -func main() { - // 初始化 - //config.CaConfig.CA.RootCert = "./certs/cacert.pem" - - //Init() - fmt.Println("CaConfig:", config.CaConfig) - - roots := x509.NewCertPool() - rootCert, err := LoadCert(config.CaConfig.CA.RootCert) - if err != nil { - os.Exit(1) - } - roots.AddCert(rootCert) - rootCertPool = roots - - //证书验证: - cert, err := LoadCert(config.CaConfig.CA.Cert) - if err != nil { - fmt.Println("LoadCert:", err) - return - } - - err = VerifyCert(cert) - fmt.Println("VerifyCert:", err) - - //签名 - fmt.Println("RSA签名认证:") - pri, err := LoadPriKey(config.CaConfig.CA.PrivateKey) - if err != nil { - fmt.Println("LoadPriKey:", err) - return - } - username := config.UserName - rsaSign, err := SignRSA([]byte(*username), pri) - if err != nil { - fmt.Println("SignRSA:", err) - return - } - rsaSign64 := base64.StdEncoding.EncodeToString(rsaSign) - fmt.Println("rsaSign64:", rsaSign64) - - //签证验证 - cert, err = LoadCert(config.CaConfig.CA.Cert) - if err != nil { - fmt.Println("LoadCert:", err) - return - } - err = VerifyRSA([]byte(*username), rsaSign, cert) - fmt.Println("VerifyRSA sign:", err) -} diff --git a/tools/cmca/casign.zip b/tools/cmca/casign.zip deleted file mode 100644 index 2a1a06a6..00000000 Binary files a/tools/cmca/casign.zip and /dev/null differ diff --git a/tools/cmca/certs/cacert.pem b/tools/cmca/certs/cacert.pem deleted file mode 100644 index 64084911..00000000 --- a/tools/cmca/certs/cacert.pem +++ /dev/null @@ -1,22 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDnzCCAoegAwIBAgIUSBd+zbdjx31N0Q51+NrVdeDEPKYwDQYJKoZIhvcNAQEL -BQAwXzELMAkGA1UEBhMCQ04xEDAOBgNVBAgMB0JlaWppbmcxCzAJBgNVBAcMAkJK -MSIwIAYDVQQKDBlodHRwczovL3d3dy5ydWlqaWUuY29tLmNuMQ0wCwYDVQQDDAR0 -ZXN0MB4XDTIzMDgxMjA5MzMxMloXDTMzMDgwOTA5MzMxMlowXzELMAkGA1UEBhMC -Q04xEDAOBgNVBAgMB0JlaWppbmcxCzAJBgNVBAcMAkJKMSIwIAYDVQQKDBlodHRw -czovL3d3dy5ydWlqaWUuY29tLmNuMQ0wCwYDVQQDDAR0ZXN0MIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0jW6bA//53YP3cqWmE42GGcJyZw1imzoIvDR -stTYosiu/8cju1NHBJE6xF84huTs4Q+f6ZCE931Kg4ORX6iQFvbMK6/n0kpBFchA -mZRqBElcIbjK8sNTbyJgjX2iRI5Mkm6mBgIaB0C/9iWN64WxSdk7Gs3ZTipn4SYW -Ejn6wP3B1BGpj3NMUm1xah6XhCmnlxXDNvpjBOEOSsgs9fM3Bvatpn4pRXQtzsMD -CkeicdSTnave3EQHskBCpw0f2ojG5LgGsibKRzijzt4LiMzt5jrMWxRgv/So9bAt -QmMZhyP3ZE+AySkh7df7WobsoGtFAv+8aiIBYtJl94yLq+kssQIDAQABo1MwUTAd -BgNVHQ4EFgQUjCKd8br99RMOcoMAuuHaOZJvskcwHwYDVR0jBBgwFoAUjCKd8br9 -9RMOcoMAuuHaOZJvskcwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOC -AQEANWTC8AiQOsWQQEqErAbuemA9GrW94t0cxrAuu86P7RJSvsyC7OzIg0Exp8rI -AnEeRef8tHi19iepMtvSHTLwsPcAFA6NlDBX+kf2CI1XM0OrjLgmIgfdnCvAjaNm -kWiDpMtMq/PsRfGVFb15NGUdqv25mGofR2bluYvFyybmZoVcKXkoCZ5JvvTOEPO/ -VPqRYnDMj5LVKefaBWp+xtGnTGx0m6ki2bk19OZAZz2GAzS+Kc27CiuO/hsjt0Bj -s1wJPdBdGvNNRJBIiwrf8wCpCrRQQl2uczatYJdoZK+3szmsWZJg3wGKLqp6Ua6y -URxUlN2SyT01lco4vat6Eh1t3A== ------END CERTIFICATE----- diff --git a/tools/cmca/certs/nbi_agent.crt b/tools/cmca/certs/nbi_agent.crt deleted file mode 100644 index 002f9000..00000000 --- a/tools/cmca/certs/nbi_agent.crt +++ /dev/null @@ -1,81 +0,0 @@ -Certificate: - Data: - Version: 3 (0x2) - Serial Number: 1 (0x1) - Signature Algorithm: sha256WithRSAEncryption - Issuer: C=CN, ST=Beijing, L=BJ, O=https://www.xxx.com.cn - Validity - Not Before: Aug 12 09:41:13 2023 GMT - Not After : Nov 20 09:41:13 2023 GMT - Subject: C=CN, ST=Beijing, O=https://www.xxx.com.cn, CN=test - Subject Public Key Info: - Public Key Algorithm: rsaEncryption - RSA Public-Key: (2048 bit) - Modulus: - 00:a7:da:88:69:ee:bd:5c:11:8e:69:fc:7b:11:ae: - 43:21:b9:1e:da:d2:6e:f5:bb:93:37:af:6e:8c:ae: - b3:7b:dd:b6:fd:af:48:e7:ac:a8:b5:7a:15:ab:0e: - b7:b5:27:b4:e3:83:92:3a:91:e6:f0:83:34:b8:74: - 42:2c:a8:df:4e:14:5d:4e:a4:5f:4d:0c:79:b0:5c: - 79:9a:ee:26:0f:76:82:67:48:0f:6a:3f:df:6d:a0: - c8:64:9a:2b:17:6a:c6:19:a5:c1:54:9b:f2:e4:6d: - b4:fe:5f:70:c9:ca:9b:47:ca:fe:50:f4:23:e1:fe: - 94:d7:d1:ae:17:51:57:c7:78:da:b4:b2:b7:bb:e9: - 1b:55:a1:f1:fd:17:63:9f:cf:3b:81:87:d8:80:7d: - 1e:d6:ac:cc:b5:96:b1:78:df:d4:cb:0e:ec:42:da: - 3d:f9:87:df:01:45:5f:3e:b6:93:24:18:b3:d1:d5: - c2:42:f8:2a:e8:c4:bd:48:f4:ec:c7:2c:1a:cf:bc: - a4:9c:df:f4:15:71:9d:ea:f4:4a:04:7f:54:64:f6: - 79:3a:36:fb:10:1a:c3:18:2e:81:83:c2:62:47:a0: - 88:70:13:1d:f9:9d:fb:ef:72:a8:3c:6d:9b:8e:69: - f8:c5:a0:92:32:87:19:21:dd:68:5c:0d:0c:fd:21: - 28:69 - Exponent: 65537 (0x10001) - X509v3 extensions: - X509v3 Basic Constraints: - CA:FALSE - Netscape Comment: - OpenSSL Generated Certificate - X509v3 Subject Key Identifier: - 93:D4:BE:FF:27:3C:D0:91:A2:1E:36:1B:F1:A3:43:B3:70:CC:00:DA - X509v3 Authority Key Identifier: - keyid:8C:22:9D:F1:BA:FD:F5:13:0E:72:83:00:BA:E1:DA:39:92:6F:B2:47 - - Signature Algorithm: sha256WithRSAEncryption - 61:f7:28:fb:02:42:57:0f:34:9b:e4:b6:8a:9b:8a:3b:b8:d1: - e0:4d:55:07:8d:7c:87:a3:88:3a:6f:4c:ab:cf:76:f8:76:17: - bc:76:32:69:3a:19:9b:50:f2:b2:97:7f:73:eb:7e:6f:05:b9: - ea:a3:88:c0:ab:96:bd:36:e4:36:59:e1:2c:44:08:78:da:4f: - 5d:e3:87:e1:d5:ec:86:0e:08:27:e0:e9:ad:20:e0:6b:67:26: - 9b:31:a9:17:ac:ee:e0:dc:d9:e6:50:69:fe:83:23:51:6b:51: - 6b:c4:45:36:8a:48:a5:cd:61:99:cf:25:05:8a:94:5e:3c:29: - 35:67:00:fa:77:2f:09:2c:a0:18:bb:35:ce:f0:45:43:b7:47: - d5:89:cb:aa:a1:6f:8d:ac:16:d1:8d:be:39:a9:54:3d:da:70: - 43:ca:e1:a3:a2:13:83:9b:a8:3b:e8:80:60:21:26:af:f9:09: - 8a:6a:b0:77:82:7b:76:a1:03:13:a4:e2:e0:5c:d1:83:bd:50: - 43:b3:23:96:a7:c9:7d:e5:2f:e6:95:c9:ff:9b:3b:1f:a4:30: - df:4c:67:99:92:fc:b7:e7:25:fc:bd:d7:30:c3:3a:34:78:93: - 87:ae:4e:61:5a:12:04:43:25:c8:7a:9e:c5:cd:31:12:48:22: - 2d:4f:d9:ed ------BEGIN CERTIFICATE----- -MIIDmDCCAoCgAwIBAgIBATANBgkqhkiG9w0BAQsFADBQMQswCQYDVQQGEwJDTjEQ -MA4GA1UECAwHQmVpamluZzELMAkGA1UEBwwCQkoxIjAgBgNVBAoMGWh0dHBzOi8v -d3d3LnJ1aWppZS5jb20uY24wHhcNMjMwODEyMDk0MTEzWhcNMjMxMTIwMDk0MTEz -WjBSMQswCQYDVQQGEwJDTjEQMA4GA1UECAwHQmVpamluZzEiMCAGA1UECgwZaHR0 -cHM6Ly93d3cucnVpamllLmNvbS5jbjENMAsGA1UEAwwEdGVzdDCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAKfaiGnuvVwRjmn8exGuQyG5HtrSbvW7kzev -boyus3vdtv2vSOesqLV6FasOt7UntOODkjqR5vCDNLh0Qiyo304UXU6kX00MebBc -eZruJg92gmdID2o/322gyGSaKxdqxhmlwVSb8uRttP5fcMnKm0fK/lD0I+H+lNfR -rhdRV8d42rSyt7vpG1Wh8f0XY5/PO4GH2IB9HtaszLWWsXjf1MsO7ELaPfmH3wFF -Xz62kyQYs9HVwkL4KujEvUj07McsGs+8pJzf9BVxner0SgR/VGT2eTo2+xAawxgu -gYPCYkegiHATHfmd++9yqDxtm45p+MWgkjKHGSHdaFwNDP0hKGkCAwEAAaN7MHkw -CQYDVR0TBAIwADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2Vy -dGlmaWNhdGUwHQYDVR0OBBYEFJPUvv8nPNCRoh42G/GjQ7NwzADaMB8GA1UdIwQY -MBaAFIwinfG6/fUTDnKDALrh2jmSb7JHMA0GCSqGSIb3DQEBCwUAA4IBAQBh9yj7 -AkJXDzSb5LaKm4o7uNHgTVUHjXyHo4g6b0yrz3b4dhe8djJpOhmbUPKyl39z635v -Bbnqo4jAq5a9NuQ2WeEsRAh42k9d44fh1eyGDggn4OmtIOBrZyabMakXrO7g3Nnm -UGn+gyNRa1FrxEU2ikilzWGZzyUFipRePCk1ZwD6dy8JLKAYuzXO8EVDt0fVicuq -oW+NrBbRjb45qVQ92nBDyuGjohODm6g76IBgISav+QmKarB3gnt2oQMTpOLgXNGD -vVBDsyOWp8l95S/mlcn/mzsfpDDfTGeZkvy35yX8vdcwwzo0eJOHrk5hWhIEQyXI -ep7FzTESSCItT9nt ------END CERTIFICATE----- diff --git a/tools/cmca/certs/nbi_agent.key b/tools/cmca/certs/nbi_agent.key deleted file mode 100644 index b1dd7718..00000000 --- a/tools/cmca/certs/nbi_agent.key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpQIBAAKCAQEAp9qIae69XBGOafx7Ea5DIbke2tJu9buTN69ujK6ze922/a9I -56yotXoVqw63tSe044OSOpHm8IM0uHRCLKjfThRdTqRfTQx5sFx5mu4mD3aCZ0gP -aj/fbaDIZJorF2rGGaXBVJvy5G20/l9wycqbR8r+UPQj4f6U19GuF1FXx3jatLK3 -u+kbVaHx/Rdjn887gYfYgH0e1qzMtZaxeN/Uyw7sQto9+YffAUVfPraTJBiz0dXC -Qvgq6MS9SPTsxywaz7yknN/0FXGd6vRKBH9UZPZ5Ojb7EBrDGC6Bg8JiR6CIcBMd -+Z3773KoPG2bjmn4xaCSMocZId1oXA0M/SEoaQIDAQABAoIBAQCnLMfgeZ6vK+0j -MguAuIaz96P7XMqWg5NESr1X8EdifpfaYdHCq/v7gvRBwg7Fph5K2qexHc9ci9De -RSwDPs3o/e9Qe/VOz7YDKJcU70uI6wdFxkdUEvl8Pj5XtBRm5jkXIjdDBW8MgxdY -ocW7tMai4lIYXo++bcfgiz1Qi/tY9jAuloUaTnSnggayEx/4N6JDj8e8X+7ju6b7 -A1lYt6jb10jU+8McxXfx/G2H+xTEvfDLGyeXnmkeYK5HmAl49xpaowSgk2siYJrd -M1a8Y7tb44tBNTymrJqjea32/S5U8qa0hywnRx9B9/GAsm1+bgyLdQBoxY5dUBU+ -mu3x73fhAoGBANEKtywRjD4jOjp01Q7gxiBjBzjXAjm/DODB6jtWG16CEJ5LCMkE -MgKAsvac/z9gdWnGrRxNuO8CZExHW1XfwDcWbQ7jnpW4+JcXwG82djg91guzmOMV -bDdPhusUDFVtLJry+nf6kQ+JetZXQzDSoNrUHUWPRioSxZDmk0D9TIjrAoGBAM2P -OT+bGZDVsW1XpmHhPMXrce01S2jb17rKT3nikT/lZ3W8j8EbVHZXw/Q1PtrHDBiX -HQdG1V38vbSG9MvlEOKOXe0/7DLRxkE5n0Wke8qregLDxKnlPy+hiu9y1iCcs0Mm -QTcmShz29iSx6aG7pW4qvMQIm31O6zbhMLQSSj77AoGAFzbnbJ9uQaBL4R4EYyiX -GBWnQaqu9pa+6V7fkkNXusEa81lF2nz6yMheF4EL34/ouhx0MQZ4mSJc3RO3kuvM -PtHgvpyMifgGs1DR8AfOTSSg1p/VRLKmV+YfB5AsZng/Ud3V7ukGnwEXgSIjthJO -Br8zmPv2QMng4tyYUclPbI0CgYEAkp1NH+joWz2Px4V0zutwBVrhb2dL2gaz4C7c -cPsAzqo5GOjdP8bWf3Ip+czgf/rozcE6my4SkW7rgA+iGqvPV0hkBgxJ1BV7appG -181x3iRgaghoBSXV44s9JXyq7afW1FY8vbE5u18KQTIEia7lV6Zz7P6WqNHZQtNr -gYRqIHECgYEAgoMSfiaP+gtVwa24GajeoyaHrbsJmUAU4mMKVWFGwic8J4NfXmct -ebGGXpNAAzZFKSyYYr2IL1M1rbxy8pEnO4hB5eCbYyvnsmQgHtrixly/YCBKXBMK -Y/xp2u/QkpdL2ZkNuoeoXMLcrzM/24TG/RahFRMGi979/DUNkdm+i8M= ------END RSA PRIVATE KEY----- diff --git a/tools/cmca/config/config.go b/tools/cmca/config/config.go deleted file mode 100644 index db8ee12e..00000000 --- a/tools/cmca/config/config.go +++ /dev/null @@ -1,58 +0,0 @@ -package config - -import ( - "flag" - "fmt" - "os" - - "gopkg.in/yaml.v3" -) - -// Yaml struct of config -type YamlConfig struct { - //证书配置 - CA struct { - RootCert string `yaml:"rootCert"` //root CA证书存放路径 - Cert string `yaml:"cert"` // 服务端CA证书存放路径 - PrivateKey string `yaml:"privateKey"` // 服务端私钥存放路径 - Check bool `yaml:"check"` // 是否开启服务端证书检查功能 - } `json:"ca"` -} - -var CaConfig YamlConfig - -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, &CaConfig) - if err != nil { - fmt.Println("Unmarshal error:", err) - os.Exit(3) - } -} - -var UserName *string - -const defaultConfigFile = "./etc/cmca.yaml" - -func init() { - cfile := flag.String("c", defaultConfigFile, "config file") - pv := flag.Bool("v", false, "print version") - ph := flag.Bool("h", false, "print help") - UserName = flag.String("u", "admin", "user name") - - flag.Parse() - if *pv { - os.Exit(0) - } - if *ph { - flag.Usage() - os.Exit(0) - } - - ReadConfig(*cfile) -} diff --git a/tools/cmca/etc/cmca.yaml b/tools/cmca/etc/cmca.yaml deleted file mode 100644 index cd15ed6e..00000000 --- a/tools/cmca/etc/cmca.yaml +++ /dev/null @@ -1,4 +0,0 @@ -ca: - rootCert: ./certs/cacert.pem - cert: ./certs/nbi_agent.crt - privateKey: ./certs/nbi_agent.key diff --git a/tools/cmsign/cmsign b/tools/cmsign/cmsign deleted file mode 100644 index 236d1f11..00000000 Binary files a/tools/cmsign/cmsign and /dev/null differ diff --git a/tools/cmsign/cmsign.exe b/tools/cmsign/cmsign.exe deleted file mode 100644 index 236d1f11..00000000 Binary files a/tools/cmsign/cmsign.exe and /dev/null differ diff --git a/tools/cmsign/cmsign.go b/tools/cmsign/cmsign.go deleted file mode 100644 index 3c804bbb..00000000 --- a/tools/cmsign/cmsign.go +++ /dev/null @@ -1,114 +0,0 @@ -package main - -import ( - "crypto" - "crypto/rand" - "crypto/rsa" - "crypto/sha256" - "crypto/x509" - "encoding/base64" - "encoding/pem" - "flag" - "fmt" - "os" -) - -var UserName *string - -func init() { - //cfile := flag.String("c", defaultConfigFile, "config file") - //pv := flag.Bool("v", false, "print version") - //ph := flag.Bool("h", false, "print help") - UserName = flag.String("u", "omc", "user name") - - flag.Parse() - // if *pv { - // os.Exit(0) - // } - // if *ph { - // flag.Usage() - // os.Exit(0) - // } - - //ReadConfig(*cfile) -} - -func main() { - // 假设你已经有了CMCA证书私钥和userName登录用户名 - privateKeyBytes, err := os.ReadFile("./private_key.pem") - if err != nil { - fmt.Println("Failed to read private key file:", err) - return - } - //userName := "omc" - - // 解析私钥 - privateKey, err := parsePrivateKey(privateKeyBytes) - if err != nil { - fmt.Println("Failed to parse private key:", err) - return - } - - // 对用户名进行签名 - signature, err := sign(privateKey, *UserName) - if err != nil { - fmt.Println("Failed to sign username:", err) - return - } - - // 将签名按Base64编码格式化输出 - signatureBase64 := base64.StdEncoding.EncodeToString(signature) - fmt.Println("Signature:", signatureBase64) -} - -// 解析私钥 -// func parsePrivateKey(privateKeyBytes []byte) (*rsa.PrivateKey, error) { -// privateKey, err := parsePrivateKey(privateKeyBytes) -// if err != nil { -// return nil, err -// } -// return privateKey, nil -// } - -// 解析私钥 -func parsePrivateKey(privateKeyBytes []byte) (*rsa.PrivateKey, error) { - block, _ := pem.Decode(privateKeyBytes) - if block == nil { - return nil, fmt.Errorf("failed to decode private key") - } - - //privateKey, err := x509.ParsePKCS8PrivateKey(block.Bytes) - privateKey, err := x509.ParsePKCS1PrivateKey(block.Bytes) - if err != nil { - return nil, err - } - - // rsaPrivateKey, ok := privateKey.(*rsa.PrivateKey) - // if !ok { - // return nil, fmt.Errorf("private key is not RSA") - // } - - return privateKey, nil -} - -// 对数据进行签名 -func sign(privateKey *rsa.PrivateKey, data string) ([]byte, error) { - hashed := sha256.Sum256([]byte(data)) - signature, err := rsa.SignPKCS1v15(rand.Reader, privateKey, crypto.SHA256, hashed[:]) - if err != nil { - return nil, err - } - return signature, nil -} - -func readPrivateKey() { - // 读取私钥文件 - privateKeyBytes, err := os.ReadFile("./private_key.pem") - if err != nil { - fmt.Println("Failed to read private key file:", err) - return - } - - // 输出私钥内容 - fmt.Println(string(privateKeyBytes)) -} diff --git a/tools/cmsign/private_key.pem b/tools/cmsign/private_key.pem deleted file mode 100644 index 334940a6..00000000 --- a/tools/cmsign/private_key.pem +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEAlE3BYk9Rk2avUTik7lpuiHxbYTusrLYRCnr8JICRg0QsBfiu -q8d4+4s0w3y5F7puTj23Hf8ohAeNGK6vV9nJF9utMRvT4w5hlGqvKubM2vORoNoa -1usIixfcvMmCt/7++9endMurLY7e9aR+eeEffJtMx5G5JqxRGoFkeXBKFTOjD2ad -sHQ5zhQQUYgdQa2xzKQBYiierKKptcoVMAnnkfx7NPSRfCnzhYVeKgBFbxNXL4h7 -nAhLywWhusQc2yr2Fdojj7urtqPNfMKYapkmWKI9/zuPxMlYL49VXUqppE0rnYoi -ISwGvP9iSq1tb+8BUI0ZMDcHX4elEeZYiFMJOwIDAQABAoIBAFVJVhIsXVRwdBg4 -hBkS5ogVRBPp1obIeYpWadSwH36m4M5aUlE1eKzoRGK7wlIUA8V5FmroxysOkKUG -KI5UD6Jp0fLw9uyX46QPqkb4zgyIkFI5u7+nEJW1Flt3Y3Ze7dJ1FbdEPWAIzs3j -WFzNC2eEhCYs9pZ3+HhOuzJfUitYU6ts83tazSms+7E027e/v2ubtYOzluEoj4YK -MM+ocqJOlXUOhyTATDaLs4fM567bwwFeriODQqmMIhXLf3HiBPfPYhoAlwPUV51L -bAjIPwG2/jy0yXPenYOUqSMP1i+XkyTL4eVqOLLQUI+BsEaToS8M7Lf4KRQE0vQm -uAkEA9ECgYEAxCsKXtkYXrma8UziSJgQBj88TfACyuYZBPkpBFJhffPVOreYzqmn -gsE38oHlLhCrezsxvScivS/Cwt7kgBTE9r6xmH8y2f0P3PNmtazQCqovG1gsNZ1t -9PZQmxbVUfx/7KRJ1Q5zX3x5C0P2c6XYv/1h/SQQ8PYXDhRxWZFVSikCgYEAwYlt -AoP8j6yHDMk10vJd0fKT1lztcHcQLvH3HQn2kHci2GCxySvcac49hpXTDeNdUzcQ -I9UWo1MggNojME3WHUTiZD5DYUzuNUBTkc0kMHWy79/YNAzvF9312MSyJ0NlytBQ -ISh0z0sPSxDjW+XCi/8LGu1rrremBqvh0rNIrMMCgYEAt+C8VNHcZRZHpX3y8icP -hjuKFGgwxe3Pb/j5uKJb3ktMCUEFjFo8uXTSM5AMuhRIGTgQVIS1rG5zemSh/Wj6 -g2uWXyKEEQ+D6hGBqjP1wrlpdJE+x3btFdw5DFbn2HT9mF0bFAn6nXu4npWzEw5X -UQd67WT8OFIEpF8HLPTs5JkCgYBQlL6dmITU8Vm9mh1d+mnT23NwgnqeJATJ9xcT -sS1HE0Of4grEHw4Dw8pcOg+JLcyStE91C+kEEb1ryOdz2kS3JRI5+K6nWZeo9mKV -R1u1DZx2QbZMXcJDJriRC7y9mlNMsZVbaPPRx4fTknGHts9c6NEf4hC+y1pGVtSM -nPc6bwKBgQCrtb6srow9o0acH7mMmieDuqvT8DQ6rHWoizgneZTuvIo6SPO6nRnR -jfgfQkqr9IiLh9awSblQEN9fnddog7a1yS4cUZueiP5dmtFvp4B9Scnt+BoHpOLk -rrU2i7grAye4Cd003+pqhSERGCKSzb3fTSYiMypKsxeH2bs8nrRu2A== ------END RSA PRIVATE KEY----- diff --git a/tools/encode/encyaml.go b/tools/encode/encyaml.go deleted file mode 100644 index 3401cc9e..00000000 --- a/tools/encode/encyaml.go +++ /dev/null @@ -1,70 +0,0 @@ -package main - -import ( - "fmt" - - "gopkg.in/yaml.v3" -) - -func printYAML(node *yaml.Node) { - switch node.Kind { - case yaml.MappingNode: - fmt.Print(node.HeadComment) - fmt.Print("{") - for i := 0; i < len(node.Content)/2; i++ { - key := node.Content[i*2] - value := node.Content[i*2+1] - printYAML(key) - fmt.Print(": ") - printYAML(value) - if i < len(node.Content)/2-1 { - fmt.Print(", ") - } - } - fmt.Print("}") - fmt.Print(node.FootComment) - case yaml.SequenceNode: - fmt.Print("[") - for i, n := range node.Content { - printYAML(n) - if i < len(node.Content)-1 { - fmt.Print(", ") - } - } - fmt.Print("]") - default: - fmt.Print(node.Value) - } -} - -func main() { - data := ` -test: - smfSystem: - display: "SMF System" - list: - - name: "sbiIpAddr" - type: "string" - value: "172.16.5.150" - access: "read-write" - filter: '' - display: "SBI IP" - comment: "" -amf: - smfSystem: - display: "SMF System" - list: - - name: "sbiIpAddr" - type: "string" - value: "172.16.5.150" - access: "read-write" - filter: '' - display: "SBI IP" - comment: "" -` - var node yaml.Node - if err := yaml.Unmarshal([]byte(data), &node); err != nil { - panic(err) - } - printYAML(&node) -} diff --git a/tools/encode/test.yaml b/tools/encode/test.yaml deleted file mode 100644 index 6fe93469..00000000 --- a/tools/encode/test.yaml +++ /dev/null @@ -1,309 +0,0 @@ -smf: - smfSystem: - display: "SMF System" - list: - - name: "sbiIpAddr" - type: "string" - value: "172.16.5.150" - access: "read-write" - filter: '' - display: "SBI IP" - comment: "" - - name: "sbiPort" - type: "int" - value: "8080" - access: "read-write" - filter: "0~65535" - display: "SBI Port" - comment: "0~65535" - - name: "sbiScheme" - type: "enum" - value: "http" - access: "read-write" - filter: "{\"0\":\"http\", \"1\":\"https\"}" - display: "SBI Scheme" - comment: "" - - name: "n4Ipv4" - type: "ipv4" - value: "172.16.5.150" - access: "read-write" - filter: '' - display: "N4 IPv4" - comment: "" - - name: "n4Ipv6" - type: "ipv6" - value: "" - access: "read-write" - filter: '' - display: "N4 IPv6" - comment: "" - - name: "n4UIpv4" - type: "ipv4" - value: "" - access: "read-write" - filter: '' - display: "N4U IPv4" - comment: "" - - name: "n4UIpv6" - type: "ipv6" - value: "" - access: "read-write" - filter: '' - display: "N4U IPv6" - comment: "" - - name: "amfUri" - type: "string" - value: "http://172.16.5.120:8080" - access: "read-write" - filter: '' - display: "AMF URI" - comment: "" - - name: "pcfUri" - type: "string" - value: "http://172.16.5.160:8080" - access: "read-write" - filter: '' - display: "PCF URI" - comment: "" - - name: "udmUri" - type: "string" - value: "http://172.16.5.140:8080" - access: "read-write" - filter: '' - display: "UDM URI" - comment: "" - - name: "nrfEnable" - type: "bool" - value: "false" - access: "read-write" - filter: "{\"0\":\"false\", \"1\":\"true\"}" - display: "NRF Enable" - comment: "" - - name: "nrfUri" - type: "string" - value: "http://172.16.5.180:8080" - access: "read-write" - filter: '' - display: "NRF URI" - comment: "" - - name: "primaryDnsIpv4" - type: "ipv4" - value: "114.114.114.114" - access: "read-write" - filter: "" - display: "Primary DNS IPv4" - comment: "" - - name: "secondaryDnsIpv4" - type: "ipv4" - value: "" - access: "read-write" - filter: "" - display: "Secondary DNS IPv4" - comment: "" - - name: "primaryDnsIpv6" - type: "ipv6" - value: "" - access: "read-write" - filter: "" - display: "Primary DNS IPv6" - comment: "" - - name: "secondaryDnsIpv6" - type: "ipv6" - value: "" - access: "read-write" - filter: "" - display: "Secondary DNS IPv6" - comment: "" - - name: "primaryPcscfIpv4" - type: "ipv4" - value: "172.16.5.110" - access: "read-write" - filter: "" - display: "Primary PCSCF IPv4" - comment: "" - - name: "secondaryPcscfIpv4" - type: "ipv4" - value: "" - access: "read-write" - filter: "" - display: "Secondary PCSCF IPv4" - comment: "" - - name: "primaryPcscfIpv6" - type: "ipv6" - value: "" - access: "read-write" - filter: "" - display: "Primary PCSCF IPv6" - comment: "" - - name: "secondaryPcscfIpv6" - type: "ipv6" - value: "" - access: "read-write" - filter: "" - display: "Secondary PCSCF IPv6" - comment: "" - - name: "ueMtu" - type: "int" - value: "" - access: "read-write" - filter: "0~65535" - display: "UE MTU" - comment: "" - upfConfig: - display: "UPF Config" - array: - - name: "index" - type: "int" - value: "" - access: "read-write" - filter: '0~65535' - display: "Index" - comment: "" - - name: "id" - type: "string" - value: "" - access: "read-write" - filter: '1~64' - display: "UPF ID" - comment: "" - - name: "addr" - type: "string" - value: "" - access: "read-write" - filter: '7~45' - display: "Address" - comment: "e.g. ip:port" - - name: "ipv4Pools" - type: "string" - value: "" - access: "read-write" - filter: '10~256' - display: "IPv4 Pools" - comment: "CIDR format, e.g. 192.168.1.0/24" - - name: "ipv6Pools" - type: "string" - value: "" - access: "read-write" - filter: '5~512' - display: "IPv6 Pools" - comment: "CIDR format, e.g. fe80::20c:29ff:fee4:dab7/50" - - name: "staticIpv4Enable" - type: "bool" - value: "" - access: "read-write" - filter: "{\"0\":\"false\", \"1\":\"true\"}" - display: "Static IPv4 Enable" - comment: "" - - name: "staticIpv4Start" - type: "ipv4" - value: "" - access: "read-write" - filter: '' - display: "Static IPv4 Start" - comment: "ipv4 format" - - name: "staticIpv4End" - type: "ipv4" - value: "" - access: "read-write" - filter: '' - display: "Static IPv4 End" - comment: "ipv4 format" - - name: "staticIpv6Enable" - type: "bool" - value: "" - access: "read-write" - filter: "{\"0\":\"false\", \"1\":\"true\"}" - display: "Static IPv6 Enable" - comment: "" - - name: "staticIpv6Start" - type: "ipv6" - value: "" - access: "read-write" - filter: '' - display: "Static IPv6 Start" - comment: "ipv6 format" - - name: "staticIpv6End" - type: "ipv6" - value: "" - access: "read-write" - filter: '' - display: "Static IPv6 End" - comment: "ipv6 format" - dnnSelectUpf: - display: "DNN Select UPF" - array: - - name: "index" - type: "int" - value: "0" - access: "read-write" - filter: '0~65535' - display: "Index" - comment: "" - - name: "dnn" - type: "string" - value: "" - access: "read-write" - filter: '1~64' - display: "DNN" - comment: "" - - name: "upfId" - type: "string" - value: "" - access: "read-write" - filter: '1~64' - display: "UPF ID" - comment: "UPF ID" - dnnTaiSelectUpf: - display: "DNN TAI Select UPF" - array: - - name: "index" - type: "int" - value: "" - access: "read-write" - filter: '0~65535' - display: "Index" - comment: "" - - name: "dnn" - type: "string" - value: "" - access: "read-write" - filter: '1~64' - display: "DNN" - comment: "" - - name: "tai" - type: "string" - value: "" - access: "read-write" - filter: '1~64' - display: "TAI" - comment: "MCC+MNC+TAC" - - name: "upfId" - type: "string" - value: "upf2-Id" - access: "read-write" - filter: '1~64' - display: "UPF ID" - comment: "" - -test: - smfSystem: - display: "SMF System" - list: - - name: "sbiIpAddr" - type: "string" - value: "172.16.5.150" - access: "read-write" - filter: '' - display: "SBI IP" - comment: "" -amf: - smfSystem: - display: "SMF System" - list: - - name: "sbiIpAddr" - type: "string" - value: "172.16.5.150" - access: "read-write" - filter: '' - display: "SBI IP" - comment: "" \ No newline at end of file diff --git a/tools/genxml/genxml.go b/tools/genxml/genxml.go deleted file mode 100644 index 34505eff..00000000 --- a/tools/genxml/genxml.go +++ /dev/null @@ -1,87 +0,0 @@ -package main - -import ( - "flag" - "log" - "os/exec" - "strings" - - xsd "github.com/metaleap/go-xsd" -) - -var ( - flagGoFmt = flag.Bool("gofmt", true, "Run 'gofmt' against the generated Go wrapper package?") - flagGoInst = flag.Bool("goinst", true, "Run 'go-buildrun' against the generated Go wrapper package?") - flagSchema = flag.String("uri", "", "The XML Schema Definition file URIs to generate a Go wrapper packages from, whitespace-separated. (For each, the protocol prefix can be omitted, it then defaults to http://. Only protocols understood by the net/http package are supported.)") - flagLocalCopy = flag.Bool("local", true, "Local copy: only downloads if file does not exist locally") - flagForceParse = flag.Bool("parse", false, "Not necessary unless the generated Go wrapper package won't compile.") - flagBasePath = flag.String("basepath", "", "Defaults to "+xsd.PkgGen.BasePath+". A $GOPATH/src/-relative path (always a slash-style path, even on Windows) where XSD files are downloaded to / loaded from and generated Go wrapper packages are created. Any XSD imports are also rewritten as Go imports from that path (but are not otherwise auto-magically processed in any way).") - - // if no schemas are specified in *flagSchema, we run the pkg-maker through a default series of various XSDs... - schemas = []string{ - "./nrm-schema.xsd", - "www.w3.org/2001/xml.xsd", - "www.w3.org/2001/03/xml.xsd", - "www.w3.org/TR/2002/WD-SVG11-20020108/xml.xsd", - "www.w3.org/TR/2002/WD-SVG11-20020108/xlink.xsd", - "www.w3.org/TR/2002/WD-SVG11-20020108/SVG.xsd", - "www.w3.org/2007/schema-for-xslt20.xsd", - "www.w3.org/Math/XMLSchema/mathml2/common/xlink-href.xsd", - "www.w3.org/Math/XMLSchema/mathml2/mathml2.xsd", - "docs.oasis-open.org/election/external/xAL.xsd", - "docbook.org/xml/5.0/xsd/xml.xsd", - "docbook.org/xml/5.0/xsd/xlink.xsd", - "docbook.org/xml/5.0/xsd/docbook.xsd", - "kbcafe.com/rss/atom.xsd.xml", - "thearchitect.co.uk/schemas/rss-2_0.xsd", - "schemas.opengis.net/kml/2.2.0/atom-author-link.xsd", - "schemas.opengis.net/kml/2.2.0/ogckml22.xsd", - "khronos.org/files/collada_schema_1_4", - "khronos.org/files/collada_schema_1_5", - } -) - -func main() { - var ( - sd *xsd.Schema - err error - raw []byte - outFilePath string - ) - flag.Parse() - if len(*flagSchema) > 0 { - schemas = strings.Split(*flagSchema, " ") - } - if len(*flagBasePath) > 0 { - xsd.PkgGen.BasePath, xsd.PkgGen.BaseCodePath = *flagBasePath, udevgo.GopathSrc(strings.Split(*flagBasePath, "/")...) - } - for _, s := range schemas { - log.Printf("LOAD:\t%v\n", s) - if sd, err = xsd.LoadSchema(s, *flagLocalCopy); err != nil { - log.Printf("\tERROR: %v\n", err) - } else if sd != nil { - xsd.PkgGen.ForceParseForDefaults = *flagForceParse || (s == "schemas.opengis.net/kml/2.2.0/ogckml22.xsd") // KML schema uses 0 and 1 as defaults for booleans... - if outFilePath, err = sd.MakeGoPkgSrcFile(); err == nil { - log.Printf("MKPKG:\t%v\n", outFilePath) - if *flagGoFmt { - if raw, err = exec.Command("gofmt", "-w=true", "-s=true", "-e=true", outFilePath).CombinedOutput(); len(raw) > 0 { - log.Printf("GOFMT:\t%s\n", string(raw)) - } - if err != nil { - log.Printf("GOFMT:\t%v\n", err) - } - } - if *flagGoInst { - if raw, err = exec.Command("go-buildrun", "-d=__doc.html", "-f="+outFilePath).CombinedOutput(); len(raw) > 0 { - println(string(raw)) - } - if err != nil { - log.Printf("GOINST:\t%v\n", err) - } - } - } else { - log.Printf("\tERROR:\t%v\n", err) - } - } - } -} diff --git a/tools/genxml/nrm-schema.xsd b/tools/genxml/nrm-schema.xsd deleted file mode 100644 index 5e7e46c9..00000000 --- a/tools/genxml/nrm-schema.xsd +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tools/genxml/pm-schema.xsd b/tools/genxml/pm-schema.xsd deleted file mode 100644 index bb018401..00000000 --- a/tools/genxml/pm-schema.xsd +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tools/loadcmxls/1.txt b/tools/loadcmxls/1.txt deleted file mode 100644 index ba6f0fe3..00000000 Binary files a/tools/loadcmxls/1.txt and /dev/null differ diff --git a/tools/loadcmxls/db.go b/tools/loadcmxls/db.go deleted file mode 100644 index 7ababa3f..00000000 --- a/tools/loadcmxls/db.go +++ /dev/null @@ -1,53 +0,0 @@ -package main - -import ( - "fmt" - - _ "github.com/go-sql-driver/mysql" - "xorm.io/xorm" -) - -var xEngine *xorm.Engine - -func XormConnectDatabaseWithUri(sql string) (*xorm.Engine, error) { - // sqlStr := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&collation=utf8mb4_general_ci&parseTime=true&loc=Local", db.User, db.Password, db.Host, db.Port, db.Name) - sqlStr := fmt.Sprintf("%s?charset=utf8mb4&collation=utf8mb4_general_ci&parseTime=true&loc=Local", sql) - // fmt.Printf("sqlStr:%s:******@tcp(%s:%s)/%s?charset=utf8mb4&collation=utf8mb4_general_ci&parseTime=true&loc=Local", db.User, db.Host, db.Port, db.Name) - var err error - xEngine, err = xorm.NewEngine("mysql", sqlStr) //1、Create xorm engine - if err != nil { - fmt.Println("Failed to connect database:", err) - return nil, err - } - // xEngine.ShowSQL(true) - return xEngine, nil -} - -type CmTitle struct { - // Id int `json:"id" xorm:"pk 'id' autoincr"` - NeType string `json:"neType"` - Object string `json:"object" xorm:"object"` - Code string `json:"code"` - CmEn string `json:"cmEn" xorm:"cm_en"` - CmCn string `json:"cmCn" xorm:"cm_cn"` - Description string `json:"description"` -} - -func XormInsertCmTitle(row *CmTitle) (int64, error) { - - session := xEngine.NewSession() - defer session.Close() - _, err := session. - Table("cm_title"). - Where("ne_type = ? and code = ? and cm_en = ?", row.NeType, row.Code, row.CmEn). - Delete() - if err != nil { - fmt.Println("Failed to delete cm_title:", err) - } - affected, err := session.Table("cm_title").Insert(row) - if err != nil { - fmt.Println("Failed to insert cm_title:", err) - } - - return affected, err -} diff --git a/tools/loadcmxls/load.go b/tools/loadcmxls/load.go deleted file mode 100644 index a0054a27..00000000 --- a/tools/loadcmxls/load.go +++ /dev/null @@ -1,109 +0,0 @@ -package main - -import ( - "flag" - "fmt" - "io/ioutil" - "os" - - "gopkg.in/yaml.v3" -) - -// Yaml struct of config -type YamlConfig struct { - Logger struct { - File string `yaml:"file"` - Level string `yaml:"level"` - } `yaml:"logger"` - - Rest struct { - BindIP string `yaml:"bindip"` - Port uint16 `yaml:"port"` - } `yaml:"rest"` - - Database 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"` - } `yaml:"database"` - - CmFileDir string `yaml:"cmfiledir"` -} - -var yamlConfig YamlConfig - -func ReadConfig(configFile string) { - yamlFile, err := ioutil.ReadFile(configFile) - if err != nil { - fmt.Printf("ioutil.ReadFile %s err %v", configFile, err) - } - // fmt.Println("yamlfile:", string(yamlFile)) - - err = yaml.Unmarshal(yamlFile, &yamlConfig) - if err != nil { - fmt.Printf("Unmarshal: %v when to struct", err) - } -} - -func GetYamlConfig() *YamlConfig { - return &yamlConfig -} - -func GetAllFile(dir string, s []string) ([]string, error) { - fmt.Println("GetAllFile processing...", dir) - fmt.Println("dir:", dir) - - rd, err := ioutil.ReadDir(dir) - if err != nil { - fmt.Println("read dir fail:", err) - return s, err - } - - for _, fi := range rd { - if !fi.IsDir() { - fullName := dir + "/" + fi.Name() - s = append(s, fullName) - } - } - return s, nil -} - -const defaultConfigFile = "./loadcmxls.yaml" - -var ( - version string - buildTime string - goVer string -) - -var pfiles []string - -func init() { - cfile := flag.String("c", defaultConfigFile, "config file") - pfile := flag.String("f", "", "cm file") - pv := flag.Bool("v", false, "print version") - ph := flag.Bool("h", false, "print help") - - flag.Parse() - if *pv { - fmt.Printf("OMC loadpmxls version: %s\n%s\n%s\n\n", version, buildTime, goVer) - os.Exit(0) - } - if *ph { - flag.Usage() - os.Exit(0) - } - - ReadConfig(*cfile) - - fmt.Println("pfile:", *pfile) - if *pfile != "" { - pfiles = append(pfiles, *pfile) - } else { - pfiles, _ = GetAllFile(yamlConfig.CmFileDir, pfiles) - } - fmt.Println("pfiles:", pfiles) -} diff --git a/tools/loadcmxls/loadcmxls.go b/tools/loadcmxls/loadcmxls.go deleted file mode 100644 index bbd78feb..00000000 --- a/tools/loadcmxls/loadcmxls.go +++ /dev/null @@ -1,77 +0,0 @@ -package main - -import ( - "fmt" - "strings" - - "github.com/xuri/excelize/v2" -) - -func main() { - fmt.Println("========================= OMC loadpmxls startup =========================") - fmt.Println("OMC loadpmxls version: %s %s %s", version, buildTime, goVer) - - for _, f := range pfiles { - fmt.Println("f:", f) - db := yamlConfig.Database - sqlStr := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s", db.User, db.Password, db.Host, db.Port, db.Name) - XormConnectDatabaseWithUri(sqlStr) - LoadCmIntoCmTitle(f) - } - -} - -func LoadCmIntoCmTitle(file string) { - fmt.Println("file len:", file, len(file)) - f, err := excelize.OpenFile(file) - if err != nil { - fmt.Println(err.Error()) - return - } - - list := f.GetSheetList() - if err != nil { - fmt.Println(err.Error()) - return - } - fmt.Println(list) - dl := len(yamlConfig.CmFileDir) + 1 - neType := file[dl : dl+3] - fmt.Println("neType:", neType) - objectMap := make(map[string]string, 0) - for _, s := range list { - - if s[0] == 'I' { - rows, _ := f.GetRows(s) - for _, row := range rows[1:] { - // fmt.Println("row:", row) - if len(row) > 1 { - fmt.Println("row[0]:", row[0], "row[1]", row[1]) - objectMap[row[0]] = row[1] - } - } - fmt.Println("objectMap:", objectMap) - } - if s[0] == 'A' { - rows, _ := f.GetRows(s) - var code, desc, object string - object = objectMap[s] - fmt.Println("object:", object, "s:", s) - for _, row := range rows[1:] { - if row[0] != "" { - code = row[0] - } - if len(row) > 4 && row[4] != "" { - desc = row[4] - } - cmEn := strings.Replace(row[2], " ", "", -1) - cmEn = strings.Replace(cmEn, "\n", "", -1) - cmCn := strings.Replace(row[3], " ", "", -1) - cmCn = strings.Replace(cmCn, "\n", "", -1) - cmTitle := CmTitle{neType, object, code, cmEn, cmCn, desc} - fmt.Println("cmTitle:", cmTitle) - XormInsertCmTitle(&cmTitle) - } - } - } -} diff --git a/tools/loadcmxls/loadcmxls.yaml b/tools/loadcmxls/loadcmxls.yaml deleted file mode 100644 index 8b58a362..00000000 --- a/tools/loadcmxls/loadcmxls.yaml +++ /dev/null @@ -1,17 +0,0 @@ -logger: - file: ./loadpmxls.log - level: debug - -rest: - bindip: 0.0.0.0 - port: 3040 - -database: - type: mysql - user: root - password: 1000omc@kp! - host: 127.0.0.1 - port: 33066 - name: omc_db - -cmfiledir: ../../config/cm diff --git a/tools/loadcmxls/makefile b/tools/loadcmxls/makefile deleted file mode 100644 index 2afcbd88..00000000 --- a/tools/loadcmxls/makefile +++ /dev/null @@ -1,22 +0,0 @@ -# Makefile for rest agent project - -PROJECT = OMC -VERSION = 5GC16.1.1 -PLATFORM = amd64 -DEBDIR = ../../../deb -ETCDIR = ../../../etc -RELEASEDIR = ../../../release -LIBDIR = ../lib -BINNAME = loadcmxls - -.PHONY: build $(BINNAME) -build $(BINNAME): - go build -o $(BINNAME) -v -ldflags "-X 'main.version=$(VERSION)' \ - -X 'main.buildTime=`date`' \ - -X 'main.goVer=`go version`'" - -run: $(BINNAME) - ./$(BINNAME) - -clean: - rm ./$(BINNAME) diff --git a/tools/loadmconf/db.go b/tools/loadmconf/db.go deleted file mode 100644 index 0d3e4a78..00000000 --- a/tools/loadmconf/db.go +++ /dev/null @@ -1,95 +0,0 @@ -package main - -import ( - "encoding/json" - "fmt" - - "strings" - - _ "github.com/go-sql-driver/mysql" - "xorm.io/xorm" -) - -var xEngine *xorm.Engine - -func XormConnectDatabaseWithUri(sql string) (*xorm.Engine, error) { - // sqlStr := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&collation=utf8mb4_general_ci&parseTime=true&loc=Local", db.User, db.Password, db.Host, db.Port, db.Name) - sqlStr := fmt.Sprintf("%s?charset=utf8mb4&collation=utf8mb4_general_ci&parseTime=true&loc=Local", sql) - // fmt.Printf("sqlStr:%s:******@tcp(%s:%s)/%s?charset=utf8mb4&collation=utf8mb4_general_ci&parseTime=true&loc=Local", db.User, db.Host, db.Port, db.Name) - var err error - xEngine, err = xorm.NewEngine("mysql", sqlStr) //1、Create xorm engine - if err != nil { - fmt.Println("Failed to connect database:", err) - return nil, err - } - xEngine.ShowSQL(true) - return xEngine, nil -} - -type MmlCommand struct { - // Id int `json:"id" xorm:"pk 'id' autoincr"` - NeType string `json:"neType"` - Category string `json:"category"` - CatDisplay string `json:"catDisplay" xorm:"cat_display"` - Operation string `json:"operation"` - Object string `json:"object"` - MmlDisplay string `json:"mmlDisplay" xorm:"mml_display"` - ParamJson string `json:"paramJson"` - Status string `json:"status"` -} - -func XormInsertMMLConfig(mapJson *map[string]interface{}, tableName string) (int64, error) { - var affected, a int64 - var err error - mmlCommand := new(MmlCommand) - - for n, d := range *mapJson { - if d == nil { - break - } - fmt.Println("n:", n) - mmlCommand.NeType = strings.ToUpper(n) - // for c, ma := range d.(map[string]interface{}) { - for c, ci := range d.(map[string]interface{}) { - fmt.Println("c:", c) - fmt.Println("ci:", ci) - mmlCommand.Category = c - mmlCommand.CatDisplay = fmt.Sprintf("%v", ci.(map[string]interface{})["display"]) - mml := ci.(map[string]interface{})["mml"] - for m, mi := range mml.([]interface{}) { - fmt.Println("m:", m) - fmt.Println("mi:", mi) - mmlCommand.Operation = fmt.Sprintf("%v", mi.(map[string]interface{})["operation"]) - mmlCommand.Object = fmt.Sprintf("%v", mi.(map[string]interface{})["object"]) - mmlCommand.MmlDisplay = fmt.Sprintf("%v", mi.(map[string]interface{})["display"]) - if mi.(map[string]interface{})["status"] == nil { - mmlCommand.Status = "Active" - } else { - mmlCommand.Status = fmt.Sprintf("%v", mi.(map[string]interface{})["status"]) - } - pj, _ := json.Marshal(mi.(map[string]interface{})["params"]) - mmlCommand.ParamJson = string(pj) - - fmt.Println("mmlCommand:", mmlCommand) - - session := xEngine.NewSession() - defer session.Close() - _, err = session. - Table(tableName). - Where("ne_type = ? and category = ? and operation = ? and object = ?", mmlCommand.NeType, mmlCommand.Category, mmlCommand.Operation, mmlCommand.Object). - Delete() - if err != nil { - fmt.Printf("Failed to delete %s: %v\n", tableName, err) - } - a, err = session.Table(tableName).Insert(mmlCommand) - if err != nil { - fmt.Printf("Failed to insert %s: %v\n", tableName, err) - } - affected += a - } - } - - } - - return affected, err -} diff --git a/tools/loadmconf/load.go b/tools/loadmconf/load.go deleted file mode 100644 index 268588fe..00000000 --- a/tools/loadmconf/load.go +++ /dev/null @@ -1,130 +0,0 @@ -package main - -import ( - "flag" - "fmt" - "os" - - "gopkg.in/yaml.v3" -) - -// Yaml struct of config -type YamlConfig struct { - Logger struct { - File string `yaml:"file"` - Level string `yaml:"level"` - } `yaml:"logger"` - - Rest struct { - BindIP string `yaml:"bindip"` - Port uint16 `yaml:"port"` - } `yaml:"rest"` - - Database 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"` - } `yaml:"database"` - - Mml struct { - FileDir string `yaml:"filedir"` - Table string `yaml:"table"` - } `yaml:"mml"` -} - -var yamlConfig YamlConfig - -func ReadConfig(configFile string) { - yamlFile, err := os.ReadFile(configFile) - if err != nil { - fmt.Printf("ioutil.ReadFile %s err %v", configFile, err) - } - // fmt.Println("yamlfile:", string(yamlFile)) - - err = yaml.Unmarshal(yamlFile, &yamlConfig) - if err != nil { - fmt.Printf("Unmarshal: %v when to struct", err) - } -} - -func GetYamlConfig() *YamlConfig { - return &yamlConfig -} - -var mapYaml map[string]interface{} - -func ReadMMLConfig(fileName string) *map[string]interface{} { - file, err := os.ReadFile(fileName) - if err != nil { - fmt.Println("yamlFile.Get err", err) - } - - mapYaml = make(map[string]interface{}) - - err = yaml.Unmarshal(file, &mapYaml) - if err != nil { - fmt.Printf("yaml.Unmarshal: %v when to struct\n", err) - } - // fmt.Println("mapYaml:", mapYaml) - - return &mapYaml -} - -func GetAllFile(dir string, s []string) ([]string, error) { - fmt.Println("GetAllFile processing...", dir) - fmt.Println("dir:", dir) - - rd, err := os.ReadDir(dir) - if err != nil { - fmt.Println("read dir fail:", err) - return s, err - } - - for _, fi := range rd { - if !fi.IsDir() { - fullName := dir + "/" + fi.Name() - s = append(s, fullName) - } - } - return s, nil -} - -const defaultConfigFile = "./loadmconf.yaml" - -var ( - version string - buildTime string - goVer string -) - -var pfiles []string - -func init() { - cfile := flag.String("c", defaultConfigFile, "config file") - pfile := flag.String("m", "", "mmlconf file") - pv := flag.Bool("v", false, "print version") - ph := flag.Bool("h", false, "print help") - - flag.Parse() - if *pv { - fmt.Printf("OMC loadmconf version: %s\n%s\n%s\n\n", version, buildTime, goVer) - os.Exit(0) - } - if *ph { - flag.Usage() - os.Exit(0) - } - - ReadConfig(*cfile) - - fmt.Println("pfile:", *pfile) - if *pfile != "" { - pfiles = append(pfiles, *pfile) - } else { - pfiles, _ = GetAllFile(yamlConfig.Mml.FileDir, pfiles) - } - fmt.Println("pfiles:", pfiles) -} diff --git a/tools/loadmconf/loadmconf.go b/tools/loadmconf/loadmconf.go deleted file mode 100644 index 75a7af25..00000000 --- a/tools/loadmconf/loadmconf.go +++ /dev/null @@ -1,21 +0,0 @@ -package main - -import ( - "fmt" -) - -func main() { - fmt.Println("========================= OMC loadmconf startup =========================") - fmt.Println("OMC loadmconf version: %s %s %s", version, buildTime, goVer) - - for _, f := range pfiles { - fmt.Println("f:", f) - mmlMap := ReadMMLConfig(f) - fmt.Println("mmlMap:", mmlMap) - db := yamlConfig.Database - sqlStr := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s", db.User, db.Password, db.Host, db.Port, db.Name) - XormConnectDatabaseWithUri(sqlStr) - XormInsertMMLConfig(mmlMap, yamlConfig.Mml.Table) - } - -} diff --git a/tools/loadmconf/loadmconf.yaml b/tools/loadmconf/loadmconf.yaml deleted file mode 100644 index 8b937345..00000000 --- a/tools/loadmconf/loadmconf.yaml +++ /dev/null @@ -1,19 +0,0 @@ -logger: - file: ./loadmconf.log - level: trace - -rest: - bindip: 0.0.0.0 - port: 3040 - -database: - type: mysql - user: root - password: 1000omc@kp! - host: 127.0.0.1 - port: 33066 - name: omc_db - -mml: - filedir: ../../config/mml/subscriber - table: mml_subscriber diff --git a/tools/loadmconf/makefile b/tools/loadmconf/makefile deleted file mode 100644 index 20b499e8..00000000 --- a/tools/loadmconf/makefile +++ /dev/null @@ -1,22 +0,0 @@ -# Makefile for rest agent project - -PROJECT = OMC -VERSION = 5GC16.1.1 -PLATFORM = amd64 -DEBDIR = ../../../deb -ETCDIR = ../../../etc -RELEASEDIR = ../../../release -LIBDIR = ../lib -BINNAME = loadmconf - -.PHONY: build $(BINNAME) -build $(BINNAME): - go build -o $(BINNAME) -v -ldflags "-X 'main.version=$(VERSION)' \ - -X 'main.buildTime=`date`' \ - -X 'main.goVer=`go version`'" - -run: $(BINNAME) - ./$(BINNAME) - -clean: - rm ./$(BINNAME) diff --git a/tools/loadpmxls/1.txt b/tools/loadpmxls/1.txt deleted file mode 100644 index ba6f0fe3..00000000 Binary files a/tools/loadpmxls/1.txt and /dev/null differ diff --git a/tools/loadpmxls/db.go b/tools/loadpmxls/db.go deleted file mode 100644 index 80758129..00000000 --- a/tools/loadpmxls/db.go +++ /dev/null @@ -1,55 +0,0 @@ -package main - -import ( - "fmt" - - _ "github.com/go-sql-driver/mysql" - "xorm.io/xorm" -) - -var xEngine *xorm.Engine - -func XormConnectDatabaseWithUri(sql string) (*xorm.Engine, error) { - // sqlStr := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&collation=utf8mb4_general_ci&parseTime=true&loc=Local", db.User, db.Password, db.Host, db.Port, db.Name) - sqlStr := fmt.Sprintf("%s?charset=utf8mb4&collation=utf8mb4_general_ci&parseTime=true&loc=Local", sql) - // fmt.Printf("sqlStr:%s:******@tcp(%s:%s)/%s?charset=utf8mb4&collation=utf8mb4_general_ci&parseTime=true&loc=Local", db.User, db.Host, db.Port, db.Name) - var err error - xEngine, err = xorm.NewEngine("mysql", sqlStr) //1、Create xorm engine - if err != nil { - fmt.Println("Failed to connect database:", err) - return nil, err - } - xEngine.ShowSQL(true) - return xEngine, nil -} - -type MeasureTitle struct { - // Id int `json:"id" xorm:"pk 'id' autoincr"` - NeType string `json:"neType"` - KpiCode string `json:"kpiCode"` - KpiId string `json:"kpiId" xorm:"kpi_id"` - Pseudo string `json:"pseudo" xorm:"pseudo"` - ObjectType string `json:"objectType" xorm:"object_type"` - Period string `json:"period" xorm:"period"` - TitleJson string `json:"titleJson" xorm:"title_json"` - Description string `json:"description"` -} - -func XormInsertMeasureTitle(row *MeasureTitle) (int64, error) { - - session := xEngine.NewSession() - defer session.Close() - _, err := session. - Table("measure_title"). - Where("ne_type = ? and kpi_code = ? and kpi_id = ?", row.NeType, row.KpiCode, row.KpiId). - Delete() - if err != nil { - fmt.Println("Failed to delete measure_title:", err) - } - affected, err := session.Table("measure_title").Insert(row) - if err != nil { - fmt.Println("Failed to insert measure_title:", err) - } - - return affected, err -} diff --git a/tools/loadpmxls/load.go b/tools/loadpmxls/load.go deleted file mode 100644 index 54fac529..00000000 --- a/tools/loadpmxls/load.go +++ /dev/null @@ -1,109 +0,0 @@ -package main - -import ( - "flag" - "fmt" - "io/ioutil" - "os" - - "gopkg.in/yaml.v3" -) - -// Yaml struct of config -type YamlConfig struct { - Logger struct { - File string `yaml:"file"` - Level string `yaml:"level"` - } `yaml:"logger"` - - Rest struct { - BindIP string `yaml:"bindip"` - Port uint16 `yaml:"port"` - } `yaml:"rest"` - - Database 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"` - } `yaml:"database"` - - PmFileDir string `yaml:"pmfiledir"` -} - -var yamlConfig YamlConfig - -func ReadConfig(configFile string) { - yamlFile, err := ioutil.ReadFile(configFile) - if err != nil { - fmt.Printf("ioutil.ReadFile %s err %v", configFile, err) - } - // fmt.Println("yamlfile:", string(yamlFile)) - - err = yaml.Unmarshal(yamlFile, &yamlConfig) - if err != nil { - fmt.Printf("Unmarshal: %v when to struct", err) - } -} - -func GetYamlConfig() *YamlConfig { - return &yamlConfig -} - -func GetAllFile(dir string, s []string) ([]string, error) { - fmt.Println("GetAllFile processing...", dir) - fmt.Println("dir:", dir) - - rd, err := ioutil.ReadDir(dir) - if err != nil { - fmt.Println("read dir fail:", err) - return s, err - } - - for _, fi := range rd { - if !fi.IsDir() { - fullName := dir + "/" + fi.Name() - s = append(s, fullName) - } - } - return s, nil -} - -const defaultConfigFile = "./loadpmxls.yaml" - -var ( - version string - buildTime string - goVer string -) - -var pfiles []string - -func init() { - cfile := flag.String("c", defaultConfigFile, "config file") - pfile := flag.String("f", "", "pm file") - pv := flag.Bool("v", false, "print version") - ph := flag.Bool("h", false, "print help") - - flag.Parse() - if *pv { - fmt.Printf("OMC loadpmxls version: %s\n%s\n%s\n\n", version, buildTime, goVer) - os.Exit(0) - } - if *ph { - flag.Usage() - os.Exit(0) - } - - ReadConfig(*cfile) - - fmt.Println("pfile:", *pfile) - if *pfile != "" { - pfiles = append(pfiles, *pfile) - } else { - pfiles, _ = GetAllFile(yamlConfig.PmFileDir, pfiles) - } - fmt.Println("pfiles:", pfiles) -} diff --git a/tools/loadpmxls/loadpmxls.go b/tools/loadpmxls/loadpmxls.go deleted file mode 100644 index 37052062..00000000 --- a/tools/loadpmxls/loadpmxls.go +++ /dev/null @@ -1,73 +0,0 @@ -package main - -import ( - "encoding/json" - "fmt" - "strings" - - "github.com/xuri/excelize/v2" -) - -func main() { - fmt.Println("========================= OMC loadpmxls startup =========================") - fmt.Println("OMC loadpmxls version: %s %s %s", version, buildTime, goVer) - - for _, f := range pfiles { - fmt.Println("f:", f) - db := yamlConfig.Database - sqlStr := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s", db.User, db.Password, db.Host, db.Port, db.Name) - XormConnectDatabaseWithUri(sqlStr) - LoadPmIntoMeasureTitle(f) - } - -} - -func LoadPmIntoMeasureTitle(file string) { - fmt.Println("file len:", file, len(file)) - f, err := excelize.OpenFile(file) - if err != nil { - fmt.Println(err.Error()) - return - } - - list := f.GetSheetList() - if err != nil { - fmt.Println(err.Error()) - return - } - fmt.Println(list) - dl := len(yamlConfig.PmFileDir) + 1 - neType := file[dl : dl+3] - fmt.Println("neType:", neType) - for _, s := range list { - if s[0] == 'H' { - rows, _ := f.GetRows(s) - var kpiCode, desc, objectType string - for _, row := range rows[1:] { - if row[0] != "" { - kpiCode = row[0] - } - if len(row) > 4 && row[4] != "" { - desc = row[4] - } - if len(row) > 9 && row[9] != "" { - objectType = row[9] - } - enKpiId := strings.Replace(row[2], " ", "", -1) - enKpiId = strings.Replace(enKpiId, "\n", "", -1) - isPseudo := "false" - if strings.Contains(enKpiId, "_") { - isPseudo = "true" - } - cnKpiId := strings.Replace(row[3], " ", "", -1) - cnKpiId = strings.Replace(cnKpiId, "\n", "", -1) - titleJson := map[string]string{"cn": cnKpiId, "en": enKpiId} - tj, _ := json.Marshal(titleJson) - measureTitle := MeasureTitle{neType, kpiCode, enKpiId, isPseudo, objectType, "15M", string(tj), desc} - fmt.Println("measureTitle:", measureTitle) - //fmt.Print(kpiCode, "\t", row[2], "\t", row[3], "\t", row[4], "\n") - XormInsertMeasureTitle(&measureTitle) - } - } - } -} diff --git a/tools/loadpmxls/loadpmxls.yaml b/tools/loadpmxls/loadpmxls.yaml deleted file mode 100644 index e6e221dd..00000000 --- a/tools/loadpmxls/loadpmxls.yaml +++ /dev/null @@ -1,17 +0,0 @@ -logger: - file: ./loadpmxls.log - level: trace - -rest: - bindip: 0.0.0.0 - port: 3040 - -database: - type: mysql - user: root - password: 1000omc@kp! - host: 127.0.0.1 - port: 33066 - name: omc_db - -pmfiledir: ../../config/pm diff --git a/tools/loadpmxls/loadxlsx.go.bak b/tools/loadpmxls/loadxlsx.go.bak deleted file mode 100644 index 7f80787a..00000000 --- a/tools/loadpmxls/loadxlsx.go.bak +++ /dev/null @@ -1,38 +0,0 @@ -package main - -import ( - "fmt" - - "github.com/xuri/excelize/v2" -) - -func main() { - file := "AMF-PM(V1.1.5)-Company-Version00.xlsx" - f, err := excelize.OpenFile(file) - if err != nil { - fmt.Println(err.Error()) - return - } - - list := f.GetSheetList() - if err != nil { - fmt.Println(err.Error()) - return - } - fmt.Println(list) - neType := file[0:3] - fmt.Println("neType:", neType) - for _, s := range list { - if s[0] == 'H' { - rows, _ := f.GetRows(s) - var kpiCode string - for _, row := range rows[1:] { - if row[0] != "" { - kpiCode = row[0] - } - fmt.Print(kpiCode, "\t", row[2], "\t", row[3], "\t", row[4], "\n") - } - } - } - -} diff --git a/tools/loadpmxls/makefile b/tools/loadpmxls/makefile deleted file mode 100644 index 25ff806b..00000000 --- a/tools/loadpmxls/makefile +++ /dev/null @@ -1,22 +0,0 @@ -# Makefile for rest agent project - -PROJECT = OMC -VERSION = 5GC16.1.1 -PLATFORM = amd64 -DEBDIR = ../../../deb -ETCDIR = ../../../etc -RELEASEDIR = ../../../release -LIBDIR = ../lib -BINNAME = loadpmxls - -.PHONY: build $(BINNAME) -build $(BINNAME): - go build -o $(BINNAME) -v -ldflags "-X 'main.version=$(VERSION)' \ - -X 'main.buildTime=`date`' \ - -X 'main.goVer=`go version`'" - -run: $(BINNAME) - ./$(BINNAME) - -clean: - rm ./$(BINNAME) diff --git a/tools/misc/downpkg.sh b/tools/misc/downpkg.sh deleted file mode 100644 index 65590dbc..00000000 --- a/tools/misc/downpkg.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -#$1 pkg -get_all_depends() -{ - apt-cache depends --no-pre-depends --no-suggests --no-recommends \ - --no-conflicts --no-breaks --no-enhances\ - --no-replaces --recurse $1 | awk '{print $2}'| tr -d '<>' | sort --unique -} - - - -for pkg in $* -do - all_depends=$(get_all_depends $pkg) - echo -e "所有依赖共计"$(echo $all_depends | wc -w)"个" - echo $all_depends - i=0 - for depend in $all_depends - do - i=$((i+1)) - echo -e "\033[1;32m正在下载第$i个依赖:"$depend "\033[0m" - apt-get download $depend - done -done diff --git a/tools/misc/dumpdb.sh b/tools/misc/dumpdb.sh deleted file mode 100644 index 6f2410f6..00000000 --- a/tools/misc/dumpdb.sh +++ /dev/null @@ -1,50 +0,0 @@ -#!/bin/bash - -Home=/home/simon -GitLocalRoot=${Home}/omc.git -EmsBEDir=${GitLocalRoot}/be.ems -user="root" -password="1000omc@kp!" -host="192.168.2.219" -port="33066" -dbname="omc_db" -dumpdbdir=${EmsBEDir}/tools/misc -insdir=${EmsBEDir}/database/install -upgdir=${EmsBEDir}/database/upgrade -upgvue3dir=${EmsBEDir}/database/upgvue3 -tables_s=tables_s.lst -tables_c=tables_c.lst -tables_ic=tables_ic.lst - -mysql -h ${host} -P ${port} -u ${user} -p${password} -D ${dbname} -e "show tables ; " > tables.lst - -# dump table struct to install dir -while read line - do - table=`echo $line | cut -d " " -f 1` - echo "dump ${table} to install directory" - mysqldump -h ${host} -P ${port} -u ${user} -p${password} -d ${dbname} ${table} > ${insdir}/${table}.sql - done < ${dumpdbdir}/${tables_s} - -# dump table struct and data to install dir -while read line - do - table=`echo $line | cut -d " " -f 1` - echo "dump ${table} to install directory" - mysqldump -h ${host} -P ${port} -u ${user} -p${password} ${dbname} ${table} > ${insdir}/${table}.sql - done < ${dumpdbdir}/${tables_ic} - - -# dump table struct and data to upgrade, upgvue3 and install dir -while read line - do - table=`echo $line | cut -d " " -f 1` - echo "dump ${table} to install & upgrade & upgvue3 directory" - mysqldump -h ${host} -P ${port} -u ${user} -p${password} ${dbname} ${table} > ${insdir}/${table}.sql - mysqldump -h ${host} -P ${port} -u ${user} -p${password} ${dbname} ${table} > ${upgdir}/${table}.sql - mysqldump -h ${host} -P ${port} -u ${user} -p${password} ${dbname} ${table} > ${upgvue3dir}/${table}.sql - done < ${dumpdbdir}/${tables_c} - - - - \ No newline at end of file diff --git a/tools/misc/dumpsql.sh b/tools/misc/dumpsql.sh deleted file mode 100644 index ea303294..00000000 --- a/tools/misc/dumpsql.sh +++ /dev/null @@ -1,52 +0,0 @@ -#!/bin/bash - -Home=/home/simon -GitLocalRoot=${Home}/omc.git -EmsBEDir=${GitLocalRoot}/be.ems -EMSBuildDir=${GitLocalRoot}/build.ems -user="root" -password="1000omc@kp!" -host="192.168.2.219" -port="33066" -dbname="omc_db" -dumpdbdir=${EmsBEDir}/tools/misc -insdir=${EMSBuildDir}/build/usr/local/omc/etc/db/install -upgdir=${EMSBuildDir}/build/usr/local/omc/etc/db/upgrade -upgvue3dir=${EMSBuildDir}/build/usr/local/omc/etc/db/upgvue3 -tables_s=tables_s.lst -tables_c=tables_c.lst -tables_ic=tables_ic.lst - -mysql -h ${host} -P ${port} -u ${user} -p${password} -D ${dbname} -e "show tables ; " > tables.lst - -# dump table struct to install dir -echo -n "dump table struct to install directory ... " -while read line - do - table=`echo $line | cut -d " " -f 1` - #echo "dump ${table} to install directory" - mysqldump -h ${host} -P ${port} -u ${user} -p${password} -d ${dbname} ${table} > ${insdir}/${table}.sql - done < ${dumpdbdir}/${tables_s} -echo "done" - -# dump table struct and data to install dir -echo -n "dump table struct and data to install directory ... " -while read line - do - table=`echo $line | cut -d " " -f 1` - #echo "dump ${table} to install directory" - mysqldump -h ${host} -P ${port} -u ${user} -p${password} ${dbname} ${table} > ${insdir}/${table}.sql - done < ${dumpdbdir}/${tables_ic} -echo "done" - -# dump table struct and data to upgrade, upgvue3 and install dir -echo -n "dump table struct and data to upgrade, upgvue3 and install directory ... " -while read line - do - table=`echo $line | cut -d " " -f 1` - #echo "dump ${table} to install & upgrade & upgvue3 directory" - mysqldump -h ${host} -P ${port} -u ${user} -p${password} ${dbname} ${table} > ${insdir}/${table}.sql - mysqldump -h ${host} -P ${port} -u ${user} -p${password} ${dbname} ${table} > ${upgdir}/${table}.sql - mysqldump -h ${host} -P ${port} -u ${user} -p${password} ${dbname} ${table} > ${upgvue3dir}/${table}.sql - done < ${dumpdbdir}/${tables_c} -echo "done" diff --git a/tools/misc/insdeppkg.sh b/tools/misc/insdeppkg.sh deleted file mode 100644 index 079e6534..00000000 --- a/tools/misc/insdeppkg.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/bash - -DepPkgDir=/tmp/omc-dep-pkg -lines=22 #这个值是指这个脚本的行数加1,指向程序所在开始行 -tail +$lines $0 >/tmp/omc-dep-pkg.tar.gz # 利用tail命令把脚本指定行出到文件,$0表示脚本本身名称,$0是环境变量,这个命令用来把从$lines开始的内容写入一个/tmp目录的tar.gz文件里。 -echo -n "Decompressing omc depend package ..." -echo "done" -tar xvfz /tmp/omc-dep-pkg.tar.gz -C /tmp 1>/dev/null -if [ ! -e ${DepPkgDir} ]; then - echo "${DepPkgDir}: Not such file or directory" - exit 1 -fi -echo -n "Installing omc depend package ..." -for pkgdir in ${DepPkgDir}/*; do - #echo "Installing ${pkgdir} depend package ..." - cd ${pkgdir}; - dpkg -i --ignore-depends *.deb 1>/tmp/${pkgdir}.log 2>&1; -done -echo "done" -rm -rf /tmp/omc-dep-pkg* -exit 0 \ No newline at end of file diff --git a/tools/misc/renamedb.sh b/tools/misc/renamedb.sh deleted file mode 100644 index 1f4fabec..00000000 --- a/tools/misc/renamedb.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash - -dbuser=root -dbpasswd=1000omc@kp! -dbhost=127.0.0.1 - -if [ $3 =~ ""]; then - dbhost=$3 -fi - -mysql -u$dbuser -p$dbpasswd -h $dbhost -e "create database if not exists $2;" -list_table=$(mysql -u$dbuser -p$dbpasswd -h $dbhost -Nse "select table_name from information_schema.TABLES where TABLE_SCHEMA='$1'") - -for table in $list_table -do - mysql -u$dbuser -p$dbpasswd -h $dbhost -e "rename table $1.$table to $2.$table" -done \ No newline at end of file diff --git a/tools/misc/rmexpiredfile.sh b/tools/misc/rmexpiredfile.sh deleted file mode 100644 index 7e17caca..00000000 --- a/tools/misc/rmexpiredfile.sh +++ /dev/null @@ -1,48 +0,0 @@ -#!/bin/bash -export LANG="zh_CN.UTF-8" -# --------------------------------------------------------------------- -# 定时清理反馈结果的日志文件夹 仅保留最近2周记录 -# 文件夹格式:yyyy-mm-dd -# Author : Madr -# Date : 2020年10月15日16:57:22 -# --------------------------------------------------------------------- - -#15天以前日期 -dayAgo=$(date -d"15 day ago" +%Y-%m-%d) -#日志文件路径 -logPath=/home/gsidc/app/nhis/log/ -#记录操作日志 -printFile=/home/gsidc/app/nhis/remove_nhis.log - -echo '当前时间' `date +%Y-%m-%d` `date +%T` >> ${printFile} -echo '10天以前' ${dayAgo} >> ${printFile} -echo '开始删除,删除的目录列表如下' >> ${printFile} - -dayAgoStr=${dayAgo}" 00:00:00" -dayAgoTime=`date -d "$dayAgoStr" +%s` - -for dir in $(ls $logPath) -do -if [ ! $dir ]; -then -echo 'dir为空,安全起见,本次任务终止!'>> ${printFile} -exit -else - #仅删除目录文件 - if [ -d $logPath$dir ] ; - then - #因为文件夹名称为日期格式(yyyy-mm-dd), 转为时间戳进行比较 - dirStr=${dir}" 00:00:00" - dirTime=`date -d "$dirStr" +%s` - if [ $dirTime -lt $dayAgoTime ]; - then - echo ${logPath}"$dir" >> ${printFile} - #删除指定日期之前的目录 - rm -rf ${logPath}"$dir" - fi - else - echo $logPath$dir '不是文件夹,不删除'>> ${printFile} - fi -fi -done -echo '删除完成!'>> ${printFile} diff --git a/tools/misc/rsyncsmb.sh b/tools/misc/rsyncsmb.sh deleted file mode 100644 index 1b94cd3e..00000000 --- a/tools/misc/rsyncsmb.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash - -# 源目录(Windows目录) -SRC_DIR="192.168.2.119:/goprojects" -# 目标目录(Samba目录) -DST_DIR="/home/simon/goprojects" - -# 同步目录 -#rsync -avz --delete "$SRC_DIR/" "$DST_DIR/" -rsync -avz --delete --user=myuser --password-file=/path/to/password.txt "$SRC_DIR/" "$DST_DIR/" \ No newline at end of file diff --git a/tools/misc/tables_c.lst b/tools/misc/tables_c.lst deleted file mode 100644 index 5203389c..00000000 --- a/tools/misc/tables_c.lst +++ /dev/null @@ -1,16 +0,0 @@ -alarm_define -cm_title -config -group -kpi_title -measure_title -menu -mml_command -mml_http_map -mml_subscriber -mml_system -ne_config -pm_custom_title -title_info -trace_info -#end \ No newline at end of file diff --git a/tools/misc/tables_ic.lst b/tools/misc/tables_ic.lst deleted file mode 100644 index d99d035d..00000000 --- a/tools/misc/tables_ic.lst +++ /dev/null @@ -1,16 +0,0 @@ -config -sys_config -sys_dept -sys_job -sys_post -sys_role -sys_role_dept -sys_role_menu -sys_user -sys_user_post -sys_user_role -sys_menu -sys_dict_type -sys_dict_data -chart_graph -#end \ No newline at end of file diff --git a/tools/misc/tables_s.lst b/tools/misc/tables_s.lst deleted file mode 100644 index d647c3b5..00000000 --- a/tools/misc/tables_s.lst +++ /dev/null @@ -1,61 +0,0 @@ -4a_log -alarm -alarm_event -alarm_forward_log -alarm_log -alarm_relation -alarm_subscribe -cert_info -event_log -gold_kpi -measure_data -measure_task -measure_threshold -mml_log -monitor_base -monitor_io -monitor_network -monitor_warn -nbi_alarm_log -nbi_cm -nbi_operation_log -nbi_pm -nbi_secure_log -ne_backup -ne_check -ne_info -ne_license -ne_link -ne_pool -ne_software -ne_state -ne_version -operation_log -param_value -permission -pm_custom_data -pm_custom_title -pm_template -role -role_permission -rs_subscribe -security_log -session -sys_backup -sys_job_log -sys_log_login -sys_log_operate -system_log -trace_data -trace_task -u_auth_user -u_sub_user -user -user_menu -user_role -cdr_event -cdr_event_ims -cdr_event_smf -ue_event -kpi_report -#end \ No newline at end of file diff --git a/tools/mkcert/ca.crt b/tools/mkcert/ca.crt deleted file mode 100644 index ed9c1a27..00000000 --- a/tools/mkcert/ca.crt +++ /dev/null @@ -1,29 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIE3TCCAsWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAQMQ4wDAYDVQQKEwVHbyBD -QTAeFw0yNDAxMDkwNzEyNTVaFw0zNDAxMDYwNzEyNTVaMBAxDjAMBgNVBAoTBUdv -IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAx/mmbhCZS4XFvbn0 -btk8SuetjziP3kJ4/ijpwr8WD0JeskFf2qILNOCQMBOWqyxrd6kYCMyrrb/c5mX9 -q23TgV6qghp/0xoA70SHvcqv6F4ssOJSvaN29ud3puKyWgvToNGY/z5pU0IQCUtQ -6CJWJo4gUaB/5vH1ipheU7Xsiw5bNeFaWQ/nxsTwvoZVfk7noiAMd/W8nAGJbhxC -ByJhs1AZQ9d4yEezLrpyDqOdehffrEse+8BlytqkKhHYinAE4pqgeDcln05fxWrz -zzYRw2GiHFfioo4labueTe8eoOBHYJpFmthfdsgrth9+aSA5GKHpXQ0rzaahgcGU -+S9XFjYxWkMXMiUQhCFNd+1IFi0NsLas04UwXLu1x4CL7d/BRlzR6ezwq6hnxTOc -FMXAcpnfnKzF7WOHvGa/dsr92hpX48K64cHtlCLfeRR4E/60LJ6FYjqpNKgai+s+ -sbeOOyKskCQ0wHNElrebojdYlkXzam0rKbnNJNERx8/v48cwt0F5LNnN6a2CDVPN -LGMwBSNDZbiiI53Q6DE7H71XkZjkR0NRqmcIm+ElecpBLavicqfNlg8JLoorJQSW -oiSJmyxqIjnqNrfmk/l30jI2lVal4c1QSBFrFsob9rBLkXGM1EWb0PSMrwZM29et -Ch8zvN7FlOPC76cIw2QmAxWVJ+kCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgKkMA8G -A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFOCdRGl2aikRXamo4qJu9wQ7kqI9MA0G -CSqGSIb3DQEBCwUAA4ICAQC/osh2VHoJoyG8Z3vdLH+0XZ04I8Ih2BQBcPKPZ1v0 -vdVDrQ6ldkgSKhM+/of9XtzvtphV7Yxq4LFipu9HE2xNmZjOMXZgsGgQ4qS3KkDk -u0/q7ZmE8MG7uLW76m7PGNO4Ugz3k6yVx0KVC/Fy9YdWwKkl8nL93nPqWRsN/jwE -WRyZ822Xnz19cY5vFbaO5fO1hW5+3U50Kh7BWuyd7TZ+OT8KmY834DKLDDnWdcPW -/k6Je1Y0H79E/SIjFkCxCNTDNS5SVHfTr0BCbVMXXi5dbNTjhY41TM+JwIKa1fVB -YhzWqk16riDYa+bg2xcdda8B0lQT8qRrMGFtjPsqyNhNoTFRUXx9HKX3VBIXqmlD -7v7lCWbvXkCjb2mAEG5ayy1lHKkOd6Q1E0HXZST2PHIippOFwndGz0P9tij+g1Df -cDisGxdfOZwpJTLhO5QYDom6YQgcWxfOUPK1HVnRrbniEQIykHldoIk3YL+vGwRZ -qEcJDf4F98KyxfYv9OvMGfP+imyOg4Yh4HKt4Cm+WxoKbF+qO3kPgXzGgLfthKNe -qi8fKCnbe91yuXzvKfjtfS7SYz9E0mlZkUUcpQ9r7thk4xEF5PHxHjFzZYzLX5c3 -SMfjmtiTnD0wPFlaDtd/3absBC7xHCfs3v+DfyKyuYOvi2CUHiR2k8sZIDaEpwxF -Dw== ------END CERTIFICATE----- diff --git a/tools/mkcert/ca.key b/tools/mkcert/ca.key deleted file mode 100644 index be40ed8c..00000000 --- a/tools/mkcert/ca.key +++ /dev/null @@ -1,51 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIJKwIBAAKCAgEAx/mmbhCZS4XFvbn0btk8SuetjziP3kJ4/ijpwr8WD0JeskFf -2qILNOCQMBOWqyxrd6kYCMyrrb/c5mX9q23TgV6qghp/0xoA70SHvcqv6F4ssOJS -vaN29ud3puKyWgvToNGY/z5pU0IQCUtQ6CJWJo4gUaB/5vH1ipheU7Xsiw5bNeFa -WQ/nxsTwvoZVfk7noiAMd/W8nAGJbhxCByJhs1AZQ9d4yEezLrpyDqOdehffrEse -+8BlytqkKhHYinAE4pqgeDcln05fxWrzzzYRw2GiHFfioo4labueTe8eoOBHYJpF -mthfdsgrth9+aSA5GKHpXQ0rzaahgcGU+S9XFjYxWkMXMiUQhCFNd+1IFi0NsLas -04UwXLu1x4CL7d/BRlzR6ezwq6hnxTOcFMXAcpnfnKzF7WOHvGa/dsr92hpX48K6 -4cHtlCLfeRR4E/60LJ6FYjqpNKgai+s+sbeOOyKskCQ0wHNElrebojdYlkXzam0r -KbnNJNERx8/v48cwt0F5LNnN6a2CDVPNLGMwBSNDZbiiI53Q6DE7H71XkZjkR0NR -qmcIm+ElecpBLavicqfNlg8JLoorJQSWoiSJmyxqIjnqNrfmk/l30jI2lVal4c1Q -SBFrFsob9rBLkXGM1EWb0PSMrwZM29etCh8zvN7FlOPC76cIw2QmAxWVJ+kCAwEA -AQKCAgEAjbT6XBqFFsB37MdeUEK+d/IOymPxhzWhmbGSXP+d+Tg19Klg7IRR3qmX -Y4ouBaSXjxcTQgEPUzOXrOjvRlCwRYe42jM/C2/s46CzdCmyV76MetgWe+3fOn2y -C1+vtSGWWOrOOWmXp3kz9fIaJjVWyUGD43QRzqz9K7ZneXh8Y9nLhrXnmR8tRmx+ -kPSOltABUqDVVRidDAwGwDFkFLwncbK8BJgnLf2pGt7iPj9xM3jBds1Q6mNffs1K -8cjtosRYod+jAS1LCsW2FiaBGQAevE5uWxloL3r9Rhy+xElDcgscaXdJBb54f6q/ -VvKgWIyOCUeLH/ZaaQPAhTuRfrcuRPx5hpwyMDYdqEBfZjLEjIEoiJpPhkxzb/1d -sTZJi5aQgJpdny9G7UrfKafBqwrZWzUZ8NqdlCez7CaZqKzqCmQnslAwviqHZuC1 -b5qxM5XThKJH/t72AUqX3NoglWG2fE/sQ0A7nevu+o7G+QrKUDIxjAM4nax4Oopp -dtobTKaegt2OWlioksgXvM2e5bH3hvh0cy07sxQXVXPIgeTOxY0yVVkKlSR2Y6nm -l+HfYci7q55Oybm3I6ITmqWdDEQzUI01zjcgACcEZAOkSBgSCxv2Q3N8GGLmP4dg -q7uOVEh5kru09SQnndEK1vJmvuqlpEyOxXqMzId4TvP+wAbCxnUCggEBAPT0gCx+ -xlYE0mnWvjy/SYugXMQI/ODywIZc2Waya694gzbpFGNCQt2oBRiSXYD6+8hpL66y -IPWoYi+0L0/IxuLrsVohB4C9MVIWG2XawEGS5TkRsXum9el8WvrT0kLy9ju00WXA -wXPTWE/aJivAPFUK10xt7VW+nIeVhHCDwatNPnCloC6pINH3gjHU64Bbsb0GUaTi -Onr8BkOZT3QM5sSi/huiD8AkfJ5tfSrhTEqWIb/AHSDXi0Tuhyi8PiBfIFVRDNZI -PhOkQkADmbASzRUfHT8JzwirXJNz3IDjXM+GjDjViMcE7pvttspzYbdJrjOfsfYr -TT0Uh6J3I6D1Bq8CggEBAND98yS9wnpklxYTEzh4h+SW7lx3PXEgO3p4AAhnggXL -XEbmWbxtdDWPSctHFhKzReNMwKJWjJKEriNSZI5Nwf2aWAlisDRsu7JI79/9bDgV -NbPjtNpjr5XFOjHH3/HIO8FD9rPrcVq7t/zL3YcBDangpCr7tUsPB0cLG/prG/lf -7XUFqyKllY+xkO4DBHL82Pmou0ZMfEX+IlWKXaNmEqTOH7MusNgvb9r64Ab+nzyL -bNwcT76n7QIcgMp2lwKFIdQ/AZ3gDjjzx1/xRpzRoss6meFgdAumhFfZ3gtBr6BB -f+v3dAAl9PHcszbg3krtWp9VqAx3MCyNeZkiv5BN4OcCggEBAKAFPdpTc0PsYHzN -0Xcjy2rQdumFqZVWYBkmfMtPEXQO+UEc4Lm7Jq1gvvt/WmARFfylYoXwTgHNX18k -iafIVM0XBcQIQbuDXL3wPTO7xM7RpLc0bMqHlqxSFak4SWp9CAiXJhgf5QDCdzWr -IDaCnac8rst6IIpcPCuCrINIP3OlwX2bZVo2GH+x/jaJjtNKk4EVqK5bL7L6AymT -9MiuSO76P6BTrZBrBZIFmrgxeEJdc2ytlxnGVW/RlzAwUTGakyfJC+bMSOlR7Amf -kH3quljq+5Mb2EkkkRSuosT8Qrw7fE0AihrhiPMKRthYqeQv2QJWd86GGS4mxDiJ -NhhHGXcCggEBALXga1tMMRVmuP2i+BUq/8h1eVbLBpOOo3R/PjgSLFtykQm6qdmL -v5hk7KmVYaZAkc+wGeytOYTBJvLiX1RgYzSav4bbddEJ14beZrMdzrI38xZsUhXE -rye+DlkIQuIdibM1vFrzySBXQVUk7dLxnbx7HSOzDiEWIRU4m86grCWnz/UJS9fJ -FpGIzEH2KkcPuJv8tY4GPhiDg8nBsp/i0tLN91Rui8R38/Y0YgZ0TIvaIpCjqtqX -NXGi8IpCDkVJKxmVA4krVfVGYfoi9XrADdajVwuGbzc8YOw7VDujnH3wwqzOGwuN -/M8HbIeTxqCaU0Vau/atOyVqsaoNTXz96X0CggEBANbKucTiNYSUaJXty7x7NU7G -UvjAPp5tQvaAaeUHK4lOrCe6YhRy6aEZU/OjCmVlBMWIVJDXPdazMGAgYZlX+1VB -wMUZg/y4tcUgMlGmmeErM1dc6kpvDpZoZawd1HH+FVSKFrtadeo2cEfb296aewyK -pV2xODqN4c4qS4WLP8c/Z2heo3S7LQAzYvZBTaK+FMYZJ8WQArP9TAQaNqzqIpFr -gOw9un6Awr1jej57rgyK7Yzqp1PuL4oNid7Wzo6AakO4GCeKK4ZiL2OQTSMwHXW2 -Xc3qlF7GVeI/VNGxjyUL88yk1PcQ1XetiIJmVHw1iCrrkaXcbh2jFkYvAvW6w1w= ------END RSA PRIVATE KEY----- diff --git a/tools/mkcert/mkcert.go b/tools/mkcert/mkcert.go deleted file mode 100644 index 81381065..00000000 --- a/tools/mkcert/mkcert.go +++ /dev/null @@ -1,176 +0,0 @@ -package main - -import ( - "crypto/rand" - "crypto/rsa" - "crypto/x509" - "crypto/x509/pkix" - "encoding/pem" - "fmt" - "math/big" - "os" - "time" -) - -func writeDataToFile(fn string, data []byte) { - // 创建一个新文件来写入数据 - file, err := os.Create(fn) - if err != nil { - panic(err) - } - defer file.Close() - - // 将 data 写入到文件中 - _, err = file.Write(data) - if err != nil { - panic(err) - } -} - -func main() { - // 生成CA根证书密钥对 - caKey, err := rsa.GenerateKey(rand.Reader, 4096) - if err != nil { - fmt.Println(err) - } - - // 生成CA证书模板 - caTemplate := x509.Certificate{ - SerialNumber: big.NewInt(1), - Subject: pkix.Name{ - Organization: []string{"Go CA"}, - }, - NotBefore: time.Now(), - NotAfter: time.Now().Add(time.Hour * 24 * 3650), - KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature | x509.KeyUsageCertSign, - BasicConstraintsValid: true, - IsCA: true, - } - - // 使用模板自签名生成CA证书 - caCert, err := x509.CreateCertificate(rand.Reader, &caTemplate, &caTemplate, &caKey.PublicKey, caKey) - if err != nil { - fmt.Println(err) - } - - // 生成中间CA密钥对 - interKey, err := rsa.GenerateKey(rand.Reader, 2048) - if err != nil { - fmt.Println(err) - } - - // 生成中间CA证书模板 - interTemplate := x509.Certificate{ - SerialNumber: big.NewInt(2), - Subject: pkix.Name{ - Organization: []string{"Go OMC CA"}, - }, - NotBefore: time.Now(), - NotAfter: time.Now().Add(time.Hour * 24 * 3650), - KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature | x509.KeyUsageCertSign, - BasicConstraintsValid: true, - IsCA: true, - } - - // 用CA证书签名生成中间CA证书 - interCert, err := x509.CreateCertificate(rand.Reader, &interTemplate, &caTemplate, &interKey.PublicKey, caKey) - if err != nil { - fmt.Println(err) - } - - // 生成叶子证书密钥对 - leafKey, err := rsa.GenerateKey(rand.Reader, 2048) - if err != nil { - fmt.Println(err) - } - - // 生成叶子证书模板,CN为server.com - leafTemplate := x509.Certificate{ - SerialNumber: big.NewInt(3), - Subject: pkix.Name{ - Organization: []string{"OMC Server"}, - CommonName: "", - }, - NotBefore: time.Now(), - NotAfter: time.Now().Add(time.Hour * 24 * 3650), - KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature, - ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth}, - //IPAddresses: []net.IP{net.ParseIP("192.168.2.219")}, - //DNSNames: []string{""}, - SubjectKeyId: []byte{1, 2, 3, 4}, - } - - // 用中间CA证书签名生成叶子证书 - leafCert, err := x509.CreateCertificate(rand.Reader, &leafTemplate, &interTemplate, &leafKey.PublicKey, interKey) - if err != nil { - fmt.Println(err) - } - - // 生成server1.com叶子证书 - leafKey1, _ := rsa.GenerateKey(rand.Reader, 2048) - - leafTemplate1 := x509.Certificate{ - SerialNumber: big.NewInt(4), - Subject: pkix.Name{ - CommonName: "server1.com", - }, - NotBefore: time.Now(), - NotAfter: time.Now().Add(time.Hour * 24 * 3650), - - KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature, - ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth}, - DNSNames: []string{"server1.com"}, - } - - leafCert1, _ := x509.CreateCertificate(rand.Reader, &leafTemplate1, &interTemplate, &leafKey1.PublicKey, interKey) - - // 生成server2.com叶子证书 - leafKey2, _ := rsa.GenerateKey(rand.Reader, 2048) - - leafTemplate2 := x509.Certificate{ - SerialNumber: big.NewInt(5), - Subject: pkix.Name{ - CommonName: "server2.com", - }, - NotBefore: time.Now(), - NotAfter: time.Now().Add(time.Hour * 24 * 3650), - - KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature, - ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth}, - DNSNames: []string{"server2.com"}, - } - - leafCert2, _ := x509.CreateCertificate(rand.Reader, &leafTemplate2, &interTemplate, &leafKey2.PublicKey, interKey) - - // 将证书和密钥编码为PEM格式 - caCertPEM := pem.EncodeToMemory(&pem.Block{Type: "CERTIFICATE", Bytes: caCert}) - caKeyPEM := pem.EncodeToMemory(&pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(caKey)}) - - interCertPEM := pem.EncodeToMemory(&pem.Block{Type: "CERTIFICATE", Bytes: interCert}) - interKeyPEM := pem.EncodeToMemory(&pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(interKey)}) - - leafCertPEM := pem.EncodeToMemory(&pem.Block{Type: "CERTIFICATE", Bytes: leafCert}) - leafKeyPEM := pem.EncodeToMemory(&pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(leafKey)}) - - leafCertPEM1 := pem.EncodeToMemory(&pem.Block{Type: "CERTIFICATE", Bytes: leafCert1}) - leafKeyPEM1 := pem.EncodeToMemory(&pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(leafKey1)}) - - leafCertPEM2 := pem.EncodeToMemory(&pem.Block{Type: "CERTIFICATE", Bytes: leafCert2}) - leafKeyPEM2 := pem.EncodeToMemory(&pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(leafKey2)}) - - // 将PEM写入文件 - writeDataToFile("ca.crt", caCertPEM) - writeDataToFile("ca.key", caKeyPEM) - - writeDataToFile("omc-ca.crt", interCertPEM) - writeDataToFile("omc-ca.key", interKeyPEM) - - writeDataToFile("omc-server.crt", leafCertPEM) - writeDataToFile("omc-server.key", leafKeyPEM) - - writeDataToFile("omc-web.crt", leafCertPEM1) - writeDataToFile("omc-web.key", leafKeyPEM1) - - writeDataToFile("omc-server2-cert.pem", leafCertPEM2) - writeDataToFile("omc-server2-key.pem", leafKeyPEM2) -} diff --git a/tools/mkcert/omc-ca.crt b/tools/mkcert/omc-ca.crt deleted file mode 100644 index 43bde591..00000000 --- a/tools/mkcert/omc-ca.crt +++ /dev/null @@ -1,23 +0,0 @@ ------BEGIN CERTIFICATE----- -MIID4TCCAcmgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAQMQ4wDAYDVQQKEwVHbyBD -QTAeFw0yNDAxMDkwNzEyNTVaFw0zNDAxMDYwNzEyNTVaMBQxEjAQBgNVBAoTCUdv -IE9NQyBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPidCkI9UhWg -7EOKoS/JGH95Q3ekfU+rK0EULJbJfeszJkYZ2u2gQ5gbBcyWUQvFhOuFpgcchsGA -Vy3QfudO0Jxysf67rBFFjyB2NQXc68B3zJS5L+N9P0XEwgz9hr9rijDrNT8RvY+z -L8Blrbl4oBEssOEyFOBYkHIMlvUEIMZYaA1NPA+Wwk8x3ENS1YVGml5u7JBk2oe2 -gHDktHe98hU0Nd88K3ZxGte3pwmeynMslTw9Oct6Wy2fu0zcZlnJZPmoY2LXYyhx -mj9oO3n5KgXxHlfGxPl5N2lqu/tmAr/1fAwUKVHUZzpmIbEyqMTDow8qTvjYa4o/ -41Bvg1JOrDsCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgKkMA8GA1UdEwEB/wQFMAMB -Af8wHQYDVR0OBBYEFJ2woDwnDKwmU3bU8cA+EAG0MVMwMA0GCSqGSIb3DQEBCwUA -A4ICAQAuT4aMkcJWZeAJXGjSxSCoLclnrQw4SAVjNvIUNS83+0flHLTFzj1fAU4M -/RZjZE22mdF+wgAhMfC+zoJq7plHELSkG9HY1dmscK7MVRrVdnooYD+HXS8rjOaD -oUapFmEK5ivXF6Cx1gQoPeo/Q0FRDd9Ky5rjB0vWFxsnU/BZkfOLCC2zQoZcL+UN -rmSq+iPkUMvFDVWSR/XY+xtXaW9GboqaqtoNvR24RSquI5xe1Co7JuDuu+j83lv/ -5YpOG14pNA3IF6TNFChR63l/VkaT15QDSnKxSgIQdcaPuv9yvA7OPIiaTOAqcDKi -4RSTqRezh6TnbWIFSJI03EY8gFa7PkelcWqurCXgc4vevC3bLAHuys4QIVboq0yw -CmCMVmJtgyXT15yc4x+ivwHyDT25wI2ynPnoXgKqzudFav0ZhoR7l2YmH2by7wrN -5AnNbyer72NJhKRleLyboPtqWwTLfvtOW2Aqbg+cWKwTq9NNAqJ47tZ1ZrCuWI/H -oOehNKM5QpW5k6shWuOmhYD9kROE/D1U9huzGEzijUZkT4yUF0udCNoFofz6wl4t -Czk1+Pjd3tecIj9/NitBiDzjCPJVXeAOphvCO0Z0R5fKA+Y/4kd+HmiuNiW1tnGG -D7z+beF+SsnagRquwdfZTpICfu/2+ogHwfxpsm8cHhx8DzMslA== ------END CERTIFICATE----- diff --git a/tools/mkcert/omc-ca.key b/tools/mkcert/omc-ca.key deleted file mode 100644 index f5aa4805..00000000 --- a/tools/mkcert/omc-ca.key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpQIBAAKCAQEA+J0KQj1SFaDsQ4qhL8kYf3lDd6R9T6srQRQslsl96zMmRhna -7aBDmBsFzJZRC8WE64WmBxyGwYBXLdB+507QnHKx/rusEUWPIHY1BdzrwHfMlLkv -430/RcTCDP2Gv2uKMOs1PxG9j7MvwGWtuXigESyw4TIU4FiQcgyW9QQgxlhoDU08 -D5bCTzHcQ1LVhUaaXm7skGTah7aAcOS0d73yFTQ13zwrdnEa17enCZ7KcyyVPD05 -y3pbLZ+7TNxmWclk+ahjYtdjKHGaP2g7efkqBfEeV8bE+Xk3aWq7+2YCv/V8DBQp -UdRnOmYhsTKoxMOjDypO+Nhrij/jUG+DUk6sOwIDAQABAoIBAQCBh0hOBKbcr/AI -rJSYUfyahbJ6BlBnjrXFfV5R3X7maMrbISNoROSSvhmCYxqsuGctUn+TGvC2pkhF -jWhg2TZlHHjSUDMw+H2+mve7K0QFDiWfovBpZNrvXbkAjaKD3uKr5A/k4ThTQzdw -1Ujy5f73k8JAQhiQXnQ7h4Wq+FCfJW+A3MOS28d3yh88ZYv5CHj/asnp2DfWr85h -bDsZZlWfns8lRRlLJ4NV9xMbFrH5EmqhzGPjKSZouBP5VQ0VoCUJQXMSsjN15Eh5 -A9OrZHFNW2fwgX4XQTS163S6uK/AAFMxJHaDAqXKfBlxQztCzbm6E2k8MB+6cpnB -mzlKTJjRAoGBAP/Mx1oFYOPaFPiV1DDNF+J6eCRMNypWSv6taPIFqE0qY3EKvkNO -g4zsI6e5/pmRzcZ9gJdpXBu61uwPmtymIltxcdkxmK/7+1ChM5dF6vy1bwPxjZtD -oyi1XXQTkLpTFww6dMYQS4wr3sqXHab3E0BvqfUa79e3rZ0AAX88BEQDAoGBAPjO -0oS8swOFQgYjuTIWODHh0kKB3cxFi7U3gG8dSQgOYzm+lwi3JydMmXCeW5qafJUH -NuPPLPQbjE64/le9w8rdkVa8gfz8Obh1NwNSWgfnXciHKAMGgaEJkP+dLZOiaFQF -t6bqtKCReOSqcK6JYzAKEaQ8pqNaWuHPOf/giO1pAoGAXvub/npGyvR8mv2Ph/tv -5gHRwLCoP0lBmaWsdUnSf6zAtgXmNjneMSKx7qLqvf1c6lpJuG8/63AKRCdbOplZ -4piSTLLU3mvzmrHw5TfqFKIOMemsyj1oRUJrDCIDuJwHz9uY5r7APrE/jfxk302Z -UXDlLAUvj+s9RTHuXF9duh8CgYEAyWm8F8Id9GKiwQ+YMwizswXIzRgOMfe2kht8 -9/YwEbp77tnvsBl8M58Zs4YuR6h547Z0Y9Rp4q6OVYgCNYsj/YyBxEJTxDV2kHEq -+KBoy28rh1KKPHC+7VsuKw7VP2dAp4v9UL09PaKlyA6Fq3UCe3gbMeX7S8+wNI4p -uI7OqckCgYEAmj8mIxEt0AASeRvDlpJL4boYMeLDtwwjGA9l9M+HtEPHjfYL5gG0 -KtcyFwcBMI01HwC+c/itmiEmzRZBCGrZjdvCauIxg5wW37O5bzQIcd+HY57Tkvx3 -PGH0E4/TCQq9RJQ+9oTKjwQVb+C4aj+/H+HNU/aVWyI8BpfMivC/A7k= ------END RSA PRIVATE KEY----- diff --git a/tools/mkcert/omc-server.crt b/tools/mkcert/omc-server.crt deleted file mode 100644 index eebe4b0c..00000000 --- a/tools/mkcert/omc-server.crt +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIC2jCCAcKgAwIBAgIBAzANBgkqhkiG9w0BAQsFADAUMRIwEAYDVQQKEwlHbyBP -TUMgQ0EwHhcNMjQwMTA5MDcxMjU1WhcNMzQwMTA2MDcxMjU1WjAVMRMwEQYDVQQK -EwpPTUMgU2VydmVyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApSTG -HNOWScYVHHiGw9z8q2u3ZMUaOFBm6+F4p4PrpM1h3FtHmYv5IWr5kqoMgCU/FmPG -HrSqDzrm+J4QMdguq40Jd4QOadiDg5oyLIM6Su32sjtG/y5an3abtY9hNCoWDdpy -kNRb1i9NQ2uTSBHm1lTVWutZWgm7D9jES8JB2byDwAOONwGlqAw6buxUlIP2vCtn -SpMF8Mqdypnw8K17DLXpP+D8Exw4mjOmJEVOGnw/pinjDCHm9SEiFtagdXIWliwl -DgbyVeSE70JhaGV2bGlmldV2sN2qPvG/W99pCeObxNcCko9JdJqsDVQTiOTY6uaH -o/GdDnzZh4TbbDutDQIDAQABozYwNDAOBgNVHQ8BAf8EBAMCBaAwEwYDVR0lBAww -CgYIKwYBBQUHAwEwDQYDVR0OBAYEBAECAwQwDQYJKoZIhvcNAQELBQADggEBAJY6 -eI54wSn+kNteFEdoFS2jVM+GAMS0x4blX2wzNro6HqhlYC6oJ8TxRS6V22ugWLFX -M/pcqV5FA1XCSibYdwscdaoUSUYc6inlkHxrbfSryiQqXAkEv8Ote3dqtOu7Z0BY -PkykdMrCUXn5ksYgoTa7G1CdAiaKMeuTz801l1g8AIOpNV1+Xhi29TKA134VDW9S -2aDcD6jEs63rqKx/knStli0F58N0kOKjmmt45stP90o5NsshAMumzP0xhfwC94Gg -eBXg6ThM3nuOBQyzPEtUZioRKKV4XmgZF/F4ePCnS4ST9ft09kx7UcR9MVzGIHov -whwVw6o5O7h1xQr6Pjw= ------END CERTIFICATE----- diff --git a/tools/mkcert/omc-server.key b/tools/mkcert/omc-server.key deleted file mode 100644 index b1b3a947..00000000 --- a/tools/mkcert/omc-server.key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEowIBAAKCAQEApSTGHNOWScYVHHiGw9z8q2u3ZMUaOFBm6+F4p4PrpM1h3FtH -mYv5IWr5kqoMgCU/FmPGHrSqDzrm+J4QMdguq40Jd4QOadiDg5oyLIM6Su32sjtG -/y5an3abtY9hNCoWDdpykNRb1i9NQ2uTSBHm1lTVWutZWgm7D9jES8JB2byDwAOO -NwGlqAw6buxUlIP2vCtnSpMF8Mqdypnw8K17DLXpP+D8Exw4mjOmJEVOGnw/pinj -DCHm9SEiFtagdXIWliwlDgbyVeSE70JhaGV2bGlmldV2sN2qPvG/W99pCeObxNcC -ko9JdJqsDVQTiOTY6uaHo/GdDnzZh4TbbDutDQIDAQABAoIBAHxE49+lSJ5TNGes -Op0AmhHUiLiHqWde+VPe4xALMTNeaZmMBqEAt4PyH8PBuo5jeMm8YsWQZbf4Nv42 -0zDu4I+vHcSV1tLHXo+VZNQiG6du0gjkmlRD6WW9twY00oySbu4Vx8g8RK80AQwO -01GURwRZ6gL0vtQGJoGSOIRZtXvGLltVR52OfkgNMjNepwtJvMV7PW5xYwEcnx+i -sZD/6hl49Qv5g4dCCGrnr8Garx9+cUkVP/ipkBnjyKACfzYQhoauo03Rv4iuNdy6 -QD9KB95ALHq66vYXF72YW75JQhQ3C1qGcghNn68RIlufSnA7D7J9VCG5VSXfVrk2 -a5Xw2HECgYEAzaXU75hl87fmf88X+8M6+OuaMnnLAwIadbcecakkO4bgzNF1SYwv -dbZ608LvdUt+BYVU43CCX3//a/MI+Ncp5sk85TLsXUxXGWonO1zXpa3+BAEXJe1n -xnWVdytWMeoyzhBZ/Vkx7/NAu5WSViXgQ3trB0Wr3OGw3Nksb4Son8cCgYEAzZQc -SlglEiU+Z+BsCV07FEkU6xgsmxQQuptPuGcm713Ik8c8a5KAyjbhpp+oBvn8v69i -hVGHcFmZYeazBL39dC4/6E/wDOVEwN2fY8oYBnrPvoz7FUTvObRjZakrgVj+XAjS -lg9RuMm1tYPFR52V5BTngJ9Rkj/AewxWnGMDtIsCgYEAng1i/5ZQXSUs+XPwCeY9 -b8yb4Ulr9u7p6SkJM+/8UefS5HfjPdiJLV5HPnOm2K5ht9qGqJrzCHT2mT/b2Gx9 -3ssxizI9KWOf2X+VkXFEqCh2fxtbcCHrTUNX0ZQ0Ff7adzdoAmhIEhQR31oQczd/ -Cj5Tvu4ULZoj9UjQdxEtDEcCgYAYrW3T8s7IZdYe7A6r9RgRcFBlhCpel0MG03v3 -W9KNq0lXi/QRya1SGNJviPzHkZyoeeourMHAV9EUsnfM2u2g06hyP55GPgNJz5DB -jtHhfT6Q1iWRwQuidqfz3SHOzhsCe0CkKMSblQMN/fphhWYn0eaURwuoraRyYOHI -tg4MzwKBgGImdyBx/l6bkWa4GywZ9iw5RDe7KYN9UclnBcHDkIELXskp8bTbwpBy -m/IyLC5eLOzdK7c2Odtd3LP/AG5fYPAzQ5S6YmSDPp1JEKODbg51wcMJpLSvG2Q/ -P5paV/ZAKbxgXpilBrjSejM/QLYqD8756z5lgo5biR7bGkBA+nkj ------END RSA PRIVATE KEY----- diff --git a/tools/mkcert/omc-server2-cert.pem b/tools/mkcert/omc-server2-cert.pem deleted file mode 100644 index 636639ef..00000000 --- a/tools/mkcert/omc-server2-cert.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIC5DCCAcygAwIBAgIBBTANBgkqhkiG9w0BAQsFADAUMRIwEAYDVQQKEwlHbyBP -TUMgQ0EwHhcNMjQwMTA5MDcxMjU2WhcNMzQwMTA2MDcxMjU2WjAWMRQwEgYDVQQD -EwtzZXJ2ZXIyLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJGR -xOgLorltV4S9LyJUNmtI/WEfJ+tIXmwQtS1owri/SA1yJlSjxCKfnYxjmTmcno2E -RSnwVjetvZgNktmUaptW5zaxGJQYfyvylft9C6sBamRfz+ossbx25sxiwwvT6oAX -r82k1oBJHuubWqqM7k3VxoDLoRcgirZOA1U9O0ahit7U74qy9SCbb0oxgxLa/mAP -BTzu7+cH/nNFp6cyL1HrILI0ZpXMSDqEo+OZ5yqT1AUDmRnmsOVjRheJZa0UK0Wj -ATY/STU42HC3mGI8OKZJgmUK9YTmnLuzQ8WwP6NhWrCwZnEH3+H6cJqxZK53Ptq/ -hX1ny7/Ymzzb16bkjUcCAwEAAaM/MD0wDgYDVR0PAQH/BAQDAgWgMBMGA1UdJQQM -MAoGCCsGAQUFBwMBMBYGA1UdEQQPMA2CC3NlcnZlcjIuY29tMA0GCSqGSIb3DQEB -CwUAA4IBAQCkbE+dKoibOUBwv3ijOA69LdLDXhIw5eob9WQYUUFc+qmNPLBvuIl1 -v3eig4kQK2oxpO6n7DiXgSlj76zy4pSSZvBazHmyLFQxU8KuO562KC5m09YBGfpG -bTdQzFRWrD53X8sN2cJJsypveshM5AimeqHiICFM2kK1Gz3MzPvK5/s4U4jOGaOY -WVvaY4dY5VyNyhj1fXEv4g8I/G7EOPCTClgJEwVexyDU8WJf3BX2g8It97gAqi5U -T9hyNYoVMWCy9m2y+RzHjE5PlUt4VoNkfKfIKs2ha4/9mMXsMcWlQebOfPa3oRF3 -ik6389nUiq0aeVtUECA6b0lwXBsNtWml ------END CERTIFICATE----- diff --git a/tools/mkcert/omc-server2-key.pem b/tools/mkcert/omc-server2-key.pem deleted file mode 100644 index d2d87540..00000000 --- a/tools/mkcert/omc-server2-key.pem +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEAkZHE6AuiuW1XhL0vIlQ2a0j9YR8n60hebBC1LWjCuL9IDXIm -VKPEIp+djGOZOZyejYRFKfBWN629mA2S2ZRqm1bnNrEYlBh/K/KV+30LqwFqZF/P -6iyxvHbmzGLDC9PqgBevzaTWgEke65taqozuTdXGgMuhFyCKtk4DVT07RqGK3tTv -irL1IJtvSjGDEtr+YA8FPO7v5wf+c0WnpzIvUesgsjRmlcxIOoSj45nnKpPUBQOZ -Geaw5WNGF4llrRQrRaMBNj9JNTjYcLeYYjw4pkmCZQr1hOacu7NDxbA/o2FasLBm -cQff4fpwmrFkrnc+2r+FfWfLv9ibPNvXpuSNRwIDAQABAoIBAFylN3qvnRsCegbj -GNJyYkgZphlf6NoXrvB8GbMSz4shQkw8cCTCLZwTlgO5h9Vg1pAetJ4iddzt2JKj -YOjVSpwezPzD7W6jwJxJwibSyNBHEF1dlUfmth/KVM2Ttasbbk2jxaHN3S68Ws98 -ilGtbCVhfvqNnrLHZUDtmbVwSP+D7tMrZtUnzbj+zOKgx/KpfwdD+YnSI9dmBDpN -0GJ13emAnEs3CG+6bJCLJZ8W6W6T2FxliMeVxueEoJde+6SBDbNO1Ia+vNK9KSNQ -7V8gEDnKFcSekcN1bmQBpCE0i9C8AYc0wW0twf961wWIwyZyQmLhEWrULoDcJ+LQ -v2a0I3ECgYEAwQeK3MBa+PnQTbWejXcYeULdDfHlm4WNAee9sexPwhA11vGILkh3 -N9f8AYGtFFWph7tnIDPFbIuOOJf7wA6uBmZ89E3pAbq7ffPHDJHK5td+vN4jKzDw -QUbl32IVePJNZny0heORH0QfTQI5AzFc1RKx6KctNz1mc/TCKCH4EQsCgYEAwQ6y -x/gs7ipGxJ+fspOpXrM90aVu6MRClYeBKt4pdhYgvAYbB9W0cNZ2emzYxmAe7a5L -F687T+G1rTL1Xc/Ql/ZIwObkoB8DxJ3l8sp0r9yM+xRZ0y2huG6tQTcglQr1U1pt -nZdy2pukLgPUrJGhiKvV9HVE64KQitcQ63Zq0jUCgYEAqyL8wmroPQV+4Oa9A78r -O5dEVTC52QC225GSZUSWEgA9O6w4iJBG4oPjMZK+2OB5xZUpASvlRS8VkKdu1AAv -2gzTi+XnR1k/EZQoTcSUl8VG4DwyAgEJgVZSR5K2ZtysMsktY+c2qvnCpovp8CK7 -o01H3nUZaXhOdU/zM5GqVbECgYEAm4r+HAMmIBVLwytgfX5e3X/IdNq3Cy7k/piY -RzOLcCrP4O2CZcOWh7si5exAk0PqZ1EgC0sRnICb4ZnG+vhudaDmaRUeaqvSW11k -YUMg1Hf71mdFH9IKFBCH4p1J0QttMOUQoAHfdaYklzZa6VbEMNtRnI3HI4CkeFhi -t3NHCWkCgYADC03DzcN7c2cOm7MrXkaVP9L/cZ/nK0BymK3hF3xV1VIjwB1Rk0wB -2vbW4yw4dWyDryWgbWXMnwWUzA11Xp/cNz+20gQcLPYl64Ah/nHW5WgXEJ0IoU8n -C8fOeRHyn9VEpi6GaBUi9vVw2krktvHaJWoCDZpLm7n3ZXG8+yzAIg== ------END RSA PRIVATE KEY----- diff --git a/tools/mkcert/omc-web.crt b/tools/mkcert/omc-web.crt deleted file mode 100644 index a8b532dd..00000000 --- a/tools/mkcert/omc-web.crt +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIC5DCCAcygAwIBAgIBBDANBgkqhkiG9w0BAQsFADAUMRIwEAYDVQQKEwlHbyBP -TUMgQ0EwHhcNMjQwMTA5MDcxMjU2WhcNMzQwMTA2MDcxMjU2WjAWMRQwEgYDVQQD -EwtzZXJ2ZXIxLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK2S -c4sRbErMBY8q8JVzNWRDBUUIWRBI6ENWCR/SzvF1a5gkxTnTWLtn4Szkclbsbwij -YWEXcuGaodIiY7gjJ8KM+x2qaFRVOxIoyTZvshBQUS8R8YPhnmQZHvEmoVScw9R3 -yKNLmIiXaTltP1tLoF+KSl6icqmY1bepDuhrZrYc4rLlU+BKvcWHf2xOozzd5KxX -ENaLWkIEWNWHOHWoScp8nfYNttEmz+kOwjikothkEfsXbFImNsdDrNk3ZYFUFnjv -S2lJPzwlc0hd+iHU5yC1YBDgAGpITSni0HqOzghNPHwwakGa96jGYw69AU1fAssI -TEELmhhwlHGm/MX+5IcCAwEAAaM/MD0wDgYDVR0PAQH/BAQDAgWgMBMGA1UdJQQM -MAoGCCsGAQUFBwMBMBYGA1UdEQQPMA2CC3NlcnZlcjEuY29tMA0GCSqGSIb3DQEB -CwUAA4IBAQDqoK6iKz7Q8L+0GgqD84tXJFbJKGnJNkyJaw/jCxlL6A8QTO7IB/ym -zZL3PcdNZYlyiNbyN62WzBKjYUaZMsXxEFtutav1GQsWmtQb3SO5Nn/8t+HFUwEt -YJc09LoLlYLOII0n8mN+CaMwv1mfZjWKewdXgwXvNzMrhOWJF9r+tRaJefNDpuT/ -dRj+iKFXG0aH4gCOc7Ur0HYjlQ+OFvUgWEOpk2OS1JeBNi4HjiQdAZbREg7PQI0D -sjMaHMIHC9WPZzEQ9InLmZzu0n++FKHFo8htz2bQFsNJNSB44pcKkJvpt1Xq854/ -rvcwWe89C7y5JCJGlzvHpGRecEMFPsZU ------END CERTIFICATE----- diff --git a/tools/mkcert/omc-web.key b/tools/mkcert/omc-web.key deleted file mode 100644 index 4fadafdf..00000000 --- a/tools/mkcert/omc-web.key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpQIBAAKCAQEArZJzixFsSswFjyrwlXM1ZEMFRQhZEEjoQ1YJH9LO8XVrmCTF -OdNYu2fhLORyVuxvCKNhYRdy4Zqh0iJjuCMnwoz7HapoVFU7EijJNm+yEFBRLxHx -g+GeZBke8SahVJzD1HfIo0uYiJdpOW0/W0ugX4pKXqJyqZjVt6kO6GtmthzisuVT -4Eq9xYd/bE6jPN3krFcQ1otaQgRY1Yc4dahJynyd9g220SbP6Q7COKSi2GQR+xds -UiY2x0Os2TdlgVQWeO9LaUk/PCVzSF36IdTnILVgEOAAakhNKeLQeo7OCE08fDBq -QZr3qMZjDr0BTV8CywhMQQuaGHCUcab8xf7khwIDAQABAoIBAE+rFe+yGpOmW7Lg -Ebd3Pv17KbMK5t5rqHgnyF5cA3Ke47jcv84P7P1v69IQNU8ijMBZRXwsKCXXNQlf -kYfWUwygay6tpd93k3p9UAX1dLS6ONkzEjjnWS02vpYPliNhJR2jsWsKasPfQ4QB -WgBMkRrpPcN8KscfiJEZPud9TJKvo/ffMDNOM01d2Lyytqt4mVvbQa68EjwoBSGe -6AEsEjoiLnnxlzuXXGCEcTXOEfcUeF8Bbk74lCJDdeXgrUB/Uy28FlhELsLpg2TD -IvwgJ3vFYEZzNKAVTsr4V8no8n4GButdQlSCpofACWx6mhq03535b+mSgN4AKLzR -YkhaQcECgYEA0x00F6rCneNzQ/b1wFK24OD59Nwu0NjKWYylXR++bbDHD/raJSCY -hBGFk/QB6KPVxH9ovoSSzov3o7nYBSXlTZCCm3Y1feaykHWkhKEsHcJ1tQXPehxe -40do8KI4vbaZwFk/gB4K5PQorizKDf3LEzz4R6TEFxVkzv4y4pq4yycCgYEA0nnc -tJnU1OtJNVW12+ABeiKxFbtAMpHGtqbg+ZJ9VRLJa813WkKbAtDMFTyvQa4sdIzV -F4yeApow4LILLICIcj8XfU0noGxmHAB66PgGPfx3Rj+AUxP7e24/vgF4DydKIr2J -5jwQc5EmCFBR0aQpmJsd808PtKPXJT5mIJrod6ECgYEAvmQ39qApo/rcmQ6/0xLF -m0lKI2nvTqo0003kVHesZYBoBiFVWuZqpbCnpycIEaavwuaksC0fuObCDwYrq3jh -s3IAV/PjigfkQiPWm0Y/Yxdc0ETNOHMdoBtmqJ2kTnO/dZkHi6OMb69CgNIj5zpb -Sp5Ry0rtDWRd5c+aVIL05UECgYEAtRPQlLQQDkqKhk9CEXOL8cbs8VRS6+7MthGm -VjD4kPuDvLJdb5MEB40ZN2ApK2msp20OW59HxddgG8Axqsy+FwQ+sjdx0yvPQWIM -XGgd/rA48X/qaA81+cAlKNPctbTIrFDC1ghw4uxKezaW3bTNcJRrVQt86J1YmJsx -g/Wh8GECgYEAhYFWpiMqcwoYYY7BFrYK4QGxPZ5OESevnJOvMRra5m+qlHhS8X9f -0Ewos6yV2qFZB7lRiPMve85ysUySwKl3rTWoJuwAlZZOkXU3MCjJ+5+nvMm7jzgf -eKWNu8avLOENdRu1bIFKM8iTVs+zDpe8LpcuEs4D+Ql7Gw2+9cZmanw= ------END RSA PRIVATE KEY----- diff --git a/tools/xgen/cm-schema.xsd.go b/tools/xgen/cm-schema.xsd.go deleted file mode 100644 index a24b9b2a..00000000 --- a/tools/xgen/cm-schema.xsd.go +++ /dev/null @@ -1,58 +0,0 @@ -// Code generated by xgen. DO NOT EDIT. - -package schema - -// FileHeader ... -type FileHeader struct { - TimeStamp string `xml:"TimeStamp"` - TimeZone string `xml:"TimeZone"` - VendorName string `xml:"VendorName"` - ElementType string `xml:"ElementType"` - CmVersion string `xml:"CmVersion"` -} - -// N ... -type N struct { - IAttr int `xml:"i,attr"` - Value string `xml:",chardata"` -} - -// FieldName ... -type FieldName struct { - N *N `xml:"N"` -} - -// V ... -type V struct { - IAttr int `xml:"i,attr"` - Value string `xml:",chardata"` -} - -// Object ... -type Object struct { - RmUIDAttr string `xml:"rmUID,attr"` - DnAttr string `xml:"Dn,attr,omitempty"` - UserLabelAttr string `xml:"UserLabel,attr,omitempty"` - PVFlagAttr string `xml:"PVFlag,attr"` - VMIDAttr string `xml:"VMID,attr,omitempty"` - VNFInstanceIDAttr string `xml:"VNFInstanceID,attr,omitempty"` - V *V `xml:"V"` -} - -// FieldValue ... -type FieldValue struct { - Object *Object `xml:"Object"` -} - -// Objects ... -type Objects struct { - ObjectType string `xml:"ObjectType"` - FieldName *FieldName `xml:"FieldName"` - FieldValue *FieldValue `xml:"FieldValue"` -} - -// DataFile ... -type DataFile struct { - FileHeader *FileHeader `xml:"FileHeader"` - Objects []*Objects `xml:"Objects"` -} diff --git a/tools/xgen/pm-schema.xsd.go b/tools/xgen/pm-schema.xsd.go deleted file mode 100644 index 7a12f2c4..00000000 --- a/tools/xgen/pm-schema.xsd.go +++ /dev/null @@ -1,65 +0,0 @@ -// Code generated by xgen. DO NOT EDIT. - -package schema - -// FileHeader ... -type FileHeader struct { - TimeStamp string `xml:"TimeStamp"` - TimeZone string `xml:"TimeZone"` - Period int `xml:"Period"` - VendorName string `xml:"VendorName"` - ElementType string `xml:"ElementType"` - PmVersion string `xml:"PmVersion"` - StartTime string `xml:"StartTime"` -} - -// N ... -type N struct { - IAttr int `xml:"i,attr"` - Value string `xml:",chardata"` -} - -// PmName ... -type PmName struct { - N *N `xml:"N"` -} - -// V ... -type V struct { - IAttr int `xml:"i,attr"` - Value string `xml:",chardata"` -} - -// CV ... -type CV struct { - IAttr int `xml:"i,attr"` - SN []string `xml:"SN"` - SV []string `xml:"SV"` -} - -// Object ... -type Object struct { - RmUIDAttr string `xml:"rmUID,attr"` - DnAttr string `xml:"Dn,attr"` - UserLabelAttr string `xml:"UserLabel,attr"` - V []*V `xml:"V"` - CV []*CV `xml:"CV"` -} - -// PmData ... -type PmData struct { - Object *Object `xml:"Object"` -} - -// Measurements ... -type Measurements struct { - ObjectType string `xml:"ObjectType"` - PmName *PmName `xml:"PmName"` - PmData *PmData `xml:"PmData"` -} - -// PmFile ... -type PmFile struct { - FileHeader *FileHeader `xml:"FileHeader"` - Measurements []*Measurements `xml:"Measurements"` -} diff --git a/tools/xgen/xgen.go b/tools/xgen/xgen.go deleted file mode 100644 index fa454052..00000000 --- a/tools/xgen/xgen.go +++ /dev/null @@ -1,128 +0,0 @@ -// Copyright 2020 - 2022 The xgen Authors. All rights reserved. Use of this -// source code is governed by a BSD-style license that can be found in the -// LICENSE file. -// -// xgen is a tool to automatically compiles XML schema files into the -// multi-language type or class declarations code. -// -// Usage: -// -// $ xgen [ ...] ... -// -i Input file path or directory for the XML schema definition -// -o Output file path or directory for the generated code -// -p Specify the package name -// -l Specify the language of generated code (Go/C/Java/Rust/TypeScript) -// -h Output this help and exit -// -v Output version and exit -// -// If the path specified by the -i flag is a directory, all files in the -// directory will be processed as XML schema definition. -// -// The default package name and output directory are "schema" and "xgen_out". -// -// Currently support language is Go. - -package main - -import ( - "flag" - "fmt" - "os" - - "github.com/xuri/xgen" -) - -// Config holds user-defined overrides and filters that are used when -// generating source code from an XSD document. -type Config struct { - I string - O string - Pkg string - Lang string - Version string -} - -// Cfg are the default config for xgen. The default package name and output -// directory are "schema" and "xgen_out". -var Cfg = Config{ - Pkg: "schema", - Version: "0.1.0", -} - -// SupportLang defines supported language types. -var SupportLang = map[string]bool{ - "Go": true, - "C": true, - "Java": true, - "Rust": true, - "TypeScript": true, -} - -// parseFlags parse flags of program. -func parseFlags() *Config { - iPtr := flag.String("i", "", "Input file path or directory for the XML schema definition") - oPtr := flag.String("o", "xgen_out", "Output file path or directory for the generated code") - pkgPtr := flag.String("p", "", "Specify the package name") - langPtr := flag.String("l", "", "Specify the language of generated code") - verPtr := flag.Bool("v", false, "Show version and exit") - helpPtr := flag.Bool("h", false, "Show this help and exit") - flag.Parse() - if *helpPtr { - fmt.Printf("xgen version: %s\r\nCopyright (c) 2020 - 2022 Ri Xu https://xuri.me All rights reserved.\r\n\r\nUsage:\r\n$ xgen [ ...] ...\n -i \tInput file path or directory for the XML schema definition\r\n -o \tOutput file path or directory for the generated code\r\n -p \tSpecify the package name\r\n -l \tSpecify the language of generated code (Go/C/Java/Rust/TypeScript)\r\n -h \tOutput this help and exit\r\n -v \tOutput version and exit\r\n", Cfg.Version) - os.Exit(0) - } - if *verPtr { - fmt.Printf("xgen version: %s\r\n", Cfg.Version) - os.Exit(0) - } - if *iPtr == "" { - fmt.Println("must specify input file path or directory for the XML schema definition") - os.Exit(1) - } - Cfg.I = *iPtr - if *langPtr == "" { - fmt.Println("must specify the language of generated code (Go/C/Java/Rust/TypeScript)") - os.Exit(1) - } - Cfg.Lang = *langPtr - if *oPtr != "" { - Cfg.O = *oPtr - } - if ok := SupportLang[Cfg.Lang]; !ok { - fmt.Println("unsupport language", Cfg.Lang) - os.Exit(1) - } - if *pkgPtr != "" { - Cfg.Pkg = *pkgPtr - } - return &Cfg -} - -func main() { - cfg := parseFlags() - files, err := xgen.GetFileList(cfg.I) - if err != nil { - fmt.Println(err) - os.Exit(1) - } - for _, file := range files { - if err = xgen.NewParser(&xgen.Options{ - FilePath: file, - InputDir: cfg.I, - OutputDir: cfg.O, - Lang: cfg.Lang, - Package: cfg.Pkg, - IncludeMap: make(map[string]bool), - LocalNameNSMap: make(map[string]string), - NSSchemaLocationMap: make(map[string]string), - ParseFileList: make(map[string]bool), - ParseFileMap: make(map[string][]interface{}), - ProtoTree: make([]interface{}, 0), - RemoteSchema: make(map[string][]byte), - }).Parse(); err != nil { - fmt.Printf("process error on %s: %s\r\n", file, err.Error()) - os.Exit(1) - } - } - fmt.Println("done") -} diff --git a/tools/xsdgen/cm-demo.xml b/tools/xsdgen/cm-demo.xml deleted file mode 100644 index 59bf8fd3..00000000 --- a/tools/xsdgen/cm-demo.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - - 2023-05-17 09:57:17 - UTC+8 - xxx Network - SMF - 16.1.1 - - - ManagedElement - - Id - Id - Id - Id - Id - Id - Id - Id - Id - - - - SMF - SMF - SMF - SMF - SMF - SMF - SMF - SMF - SMF - - - SMF - SMF - SMF - SMF - SMF - SMF - SMF - SMF - SMF - - - - \ No newline at end of file diff --git a/tools/xsdgen/cm-schema.go b/tools/xsdgen/cm-schema.go deleted file mode 100644 index 2284f236..00000000 --- a/tools/xsdgen/cm-schema.go +++ /dev/null @@ -1,66 +0,0 @@ -// Code generated by xgen. DO NOT EDIT. - -package main - -// FileHeader ... -type FileHeader struct { - TimeStamp string `xml:"TimeStamp"` - TimeZone string `xml:"TimeZone"` - VendorName string `xml:"VendorName"` - ElementType string `xml:"ElementType"` - CmVersion string `xml:"CmVersion"` -} - -// N ... -type N struct { - IAttr int `xml:"i,attr"` - Value string `xml:",chardata"` -} - -// FieldName ... -type FieldName struct { - N []N `xml:"N"` -} - -// V ... -type V struct { - IAttr int `xml:"i,attr"` - Value string `xml:",chardata"` -} - -// Object ... -type Object struct { - RmUIDAttr string `xml:"rmUID,attr"` - DnAttr string `xml:"Dn,attr,omitempty"` - UserLabelAttr string `xml:"UserLabel,attr,omitempty"` - PVFlagAttr string `xml:"PVFlag,attr"` - VMIDAttr string `xml:"VMID,attr,omitempty"` - VNFInstanceIDAttr string `xml:"VNFInstanceID,attr,omitempty"` - V []V `xml:"V"` -} - -// FieldValue ... -type FieldValue struct { - Object []Object `xml:"Object"` -} - -// Objects ... -type Objects struct { - ObjectType string `xml:"ObjectType"` - FieldName FieldName `xml:"FieldName"` - FieldValue FieldValue `xml:"FieldValue"` -} - -// DataFile ... -type DataFile struct { - FileHeader FileHeader `xml:"FileHeader"` - Objects Objects `xml:"Objects"` - XsiAttr string `xml:"xmlns:xsi,attr"` - XsiLoc string `xml:"xsi:noNamespaceSchemaLocation,attr"` -} - -// NRM xml file -type NRMXmlFile struct { - Header string `xml:"Header"` - DataFile DataFile `xml:"xmlns:xsi"` -} diff --git a/tools/xsdgen/cm-schema.xsd b/tools/xsdgen/cm-schema.xsd deleted file mode 100644 index 5e7e46c9..00000000 --- a/tools/xsdgen/cm-schema.xsd +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tools/xsdgen/genxml.go b/tools/xsdgen/genxml.go deleted file mode 100644 index 0bd8fe67..00000000 --- a/tools/xsdgen/genxml.go +++ /dev/null @@ -1,66 +0,0 @@ -package main - -import ( - "encoding/xml" - "fmt" - "io/ioutil" - "strconv" - "time" -) - -const ( - // Header is a generic XML header suitable for use with the output of Marshal. - // This is not automatically added to any output of this package, - // it is provided as a convenience. - Header = `` + "\n" -) - -func main() { - - t := time.Now() - timestamp := t.Format("2006-01-02 15:04:05") - timefile := t.Format("20060102150405") - _, offset := t.Zone() - var tzOffset string - if offset >= 0 { - tzOffset = "UTC+" + strconv.Itoa(offset/3600) - } else { - tzOffset = "UTC" + strconv.Itoa(offset/3600) - } - - nrmFile := new(DataFile) - - nrmFile.FileHeader = FileHeader{ - TimeStamp: timestamp, - TimeZone: tzOffset, - VendorName: "xxx Network", - ElementType: "SMF", - CmVersion: "16.1.1", - } - - nrmFile.XsiAttr = "http://www.w3.org/2001/XMLSchema-instance" - nrmFile.XsiLoc = "file:///usr/loal/omc/etc/schema/cm-schema.xsd" - nrmFile.Objects.ObjectType = "ManagedElement" - for i := 1; i < 10; i++ { - nrmFile.Objects.FieldName.N = append(nrmFile.Objects.FieldName.N, N{IAttr: i, Value: "Id"}) - } - object := Object{RmUIDAttr: "1000HXSMF001", - DnAttr: "DC=www.xxx.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325", - UserLabelAttr: "SMF_BJ_JC001", PVFlagAttr: "VNF", VMIDAttr: "kylin10.0-001-SMF", VNFInstanceIDAttr: "2bdd55b4-9018-41f4-af35-28b6828788"} - for i := 1; i < 10; i++ { - object.V = append(object.V, V{IAttr: i, Value: "SMF"}) - } - nrmFile.Objects.FieldValue.Object = append(nrmFile.Objects.FieldValue.Object, object) - object = Object{RmUIDAttr: "1000HXSMF002", - DnAttr: "DC=www.xxx.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325", - UserLabelAttr: "SMF_BJ_JC001", PVFlagAttr: "VNF", VMIDAttr: "kylin10.0-002-SMF", VNFInstanceIDAttr: "2bdd55b4-9018-41f4-af35-28b6828788"} - for i := 1; i < 10; i++ { - object.V = append(object.V, V{IAttr: i, Value: "SMF"}) - } - nrmFile.Objects.FieldValue.Object = append(nrmFile.Objects.FieldValue.Object, object) - - x, _ := xml.MarshalIndent(nrmFile, "", " ") - x = append([]byte(xml.Header), x...) - cmfile := fmt.Sprintf("./CM-HX-V%s-%s.xml", "16.1.1", timefile) - ioutil.WriteFile(cmfile, x, 0664) -} diff --git a/tools/xsdgen/pm-schema.xsd b/tools/xsdgen/pm-schema.xsd deleted file mode 100644 index bb018401..00000000 --- a/tools/xsdgen/pm-schema.xsd +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tools/xsdgen/xsdgen.go b/tools/xsdgen/xsdgen.go deleted file mode 100644 index 7d929435..00000000 --- a/tools/xsdgen/xsdgen.go +++ /dev/null @@ -1,3 +0,0 @@ -// Code generated by xgen. DO NOT EDIT. - -package schema