21 Commits

Author SHA1 Message Date
TsMask
5f410f4203 fix: 日志文件查询解析异常7位 2023-12-14 19:18:53 +08:00
85e8ac3e34 fix: add swag package 2023-12-14 17:42:27 +08:00
f577948005 fix: .... mml yaml 2023-12-14 10:52:13 +08:00
999aca571f fix: add role_menu 2023-12-14 10:51:45 +08:00
e0d38a11a2 fix: replace user 2023-12-14 10:39:39 +08:00
38996c9e4b fix: udm mml update 2023-12-14 10:31:05 +08:00
TsMask
4340572421 fix: 调整网元日志文件列表返回信息 2023-12-13 21:14:28 +08:00
TsMask
738ff3b6f5 feat: 新增OMC安装脚本英文 2023-12-13 21:10:49 +08:00
TsMask
fd05fe1834 feat: 新增网元日志文件菜单 2023-12-13 21:10:17 +08:00
TsMask
0e908e525c fix: 网元文件列表调整响应信息 2023-12-13 11:06:09 +08:00
TsMask
db5f349ae7 add: 新增OMC一键安装脚本 2023-12-13 11:05:29 +08:00
TsMask
194395198e fix: 文件列表补充分页参数 2023-12-12 20:35:47 +08:00
TsMask
ea59f0c8d4 fix: 从网元下载pcap放在本地temp目录 2023-12-12 19:39:42 +08:00
TsMask
0baba9e40f fix: 调整默认配置文件项目名称版本号和日志输出路径 2023-12-12 19:38:22 +08:00
TsMask
97042b846d feat: 新增网元端文件列表获取和下载 2023-12-12 19:37:48 +08:00
TsMask
4405c5bed6 fix: 静态文件转转接口调整 2023-12-12 19:35:04 +08:00
TsMask
0ed715ae9f docs: 告警确认类型字典多语言 2023-12-12 19:33:42 +08:00
TsMask
1292a3381f feat: 新增首页状态字典和国际化切换权限标识 2023-12-11 20:32:36 +08:00
TsMask
adb86d7f32 fix: restconf.yaml修改ne安装默认user 2023-12-11 18:06:40 +08:00
TsMask
9c4260c690 feat: 用户管理导入支持初始角色 2023-12-11 18:00:16 +08:00
4fcd1f2724 fix: update kpi set 2023-12-08 15:37:34 +08:00
24 changed files with 685 additions and 107 deletions

View File

@@ -73,7 +73,7 @@ mml:
# NE config
ne:
user: root
user: agtuser
etcdir: /usr/local/etc
bindir: /usr/local/bin
omcdir: /usr/local/omc

Binary file not shown.

Binary file not shown.

View File

@@ -157,7 +157,7 @@ udm:
comment: ""
- name: "msisdn"
type: "string"
optional: "true"
optional: "false"
filter: ""
display: "MSISDN"
comment: ""
@@ -211,6 +211,7 @@ udm:
comment: ""
- name: "static_ip"
type: "string"
value: "-"
optional: "false"
filter: ""
display: "4G Static IP"
@@ -451,6 +452,7 @@ udm:
comment: ""
- name: "static_ip"
type: "string"
value: "-"
optional: "false"
filter: ""
display: "4G Static IP"
@@ -529,12 +531,102 @@ udm:
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: "false"
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"

View File

@@ -1032,4 +1032,12 @@ INSERT
IGNORE INTO `omc_db`.`sys_role_menu` (`role_id`, `menu_id`)
VALUES (2, 2121);
INSERT
IGNORE INTO `omc_db`.`sys_role_menu` (`role_id`, `menu_id`)
VALUES (2, 2122);
INSERT
IGNORE INTO `omc_db`.`sys_role_menu` (`role_id`, `menu_id`)
VALUES (2, 2123);
SET FOREIGN_KEY_CHECKS=1;

View File

@@ -1032,4 +1032,12 @@ INSERT
IGNORE INTO `omc_db`.`sys_role_menu` (`role_id`, `menu_id`)
VALUES (2, 2121);
INSERT
IGNORE INTO `omc_db`.`sys_role_menu` (`role_id`, `menu_id`)
VALUES (2, 2122);
INSERT
IGNORE INTO `omc_db`.`sys_role_menu` (`role_id`, `menu_id`)
VALUES (2, 2123);
SET FOREIGN_KEY_CHECKS=1;

35
go.mod
View File

@@ -1,6 +1,8 @@
module ems.agt
go 1.20
go 1.21
toolchain go1.21.0
require (
github.com/dgrijalva/jwt-go v3.2.0+incompatible
@@ -31,8 +33,8 @@ require (
github.com/xuri/excelize/v2 v2.7.1
github.com/xuri/xgen v0.0.0-20230702070049-db840e1a4605
github.com/ziutek/telnet v0.0.0-20180329124119-c3b780dc415b
golang.org/x/crypto v0.12.0
golang.org/x/term v0.11.0
golang.org/x/crypto v0.16.0
golang.org/x/term v0.15.0
gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df
gopkg.in/yaml.v3 v3.0.1
gorm.io/driver/mysql v1.5.1
@@ -41,7 +43,20 @@ require (
)
require (
github.com/KyleBanks/depth v1.2.1 // indirect
github.com/PuerkitoBio/purell v1.2.1 // indirect
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect
github.com/go-admin-team/go-admin-core v1.3.12-0.20221121065133-27b7dbe27a8f // indirect
github.com/go-openapi/jsonpointer v0.20.0 // indirect
github.com/go-openapi/jsonreference v0.20.2 // indirect
github.com/go-openapi/spec v0.20.11 // indirect
github.com/go-openapi/swag v0.22.4 // indirect
github.com/josharian/intern v1.0.0 // indirect
github.com/mailru/easyjson v0.7.7 // indirect
github.com/swaggo/swag v1.16.2 // indirect
github.com/urfave/cli/v2 v2.26.0 // indirect
github.com/xrash/smetrics v0.0.0-20231213231151-1d8dd44e695e // indirect
sigs.k8s.io/yaml v1.4.0 // indirect
xorm.io/core v0.7.2-0.20190928055935-90aeac8d08eb // indirect
)
@@ -55,7 +70,7 @@ require (
github.com/chanxuehong/rand v0.0.0-20201110082127-2f19a1bdd973 // indirect
github.com/chanxuehong/wechat v0.0.0-20201110083048-0180211b69fd // indirect
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d // indirect
github.com/cpuguy83/go-md2man/v2 v2.0.3 // indirect
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239 // indirect
github.com/fatih/color v1.13.0 // indirect
@@ -108,7 +123,7 @@ require (
github.com/reiver/go-oi v1.0.0 // indirect
github.com/richardlehane/mscfb v1.0.4 // indirect
github.com/richardlehane/msoleps v1.0.3 // indirect
github.com/russross/blackfriday/v2 v2.0.1 // indirect
github.com/russross/blackfriday/v2 v2.1.0 // indirect
github.com/shoenig/go-m1cpu v0.1.6 // indirect
github.com/shurcooL/sanitized_anchor_name v1.0.0 // indirect
github.com/spf13/cast v1.5.1 // indirect
@@ -128,14 +143,14 @@ require (
github.com/yusufpapurcu/wmi v1.2.3 // indirect
golang.org/x/arch v0.3.0 // indirect
golang.org/x/image v0.5.0 // indirect
golang.org/x/net v0.10.0
golang.org/x/sys v0.11.0 // indirect
golang.org/x/text v0.12.0 // indirect
golang.org/x/tools v0.6.0 // indirect
golang.org/x/net v0.19.0
golang.org/x/sys v0.15.0 // indirect
golang.org/x/text v0.14.0 // indirect
golang.org/x/tools v0.16.1 // indirect
google.golang.org/protobuf v1.30.0 // indirect
gopkg.in/AlecAivazis/survey.v1 v1.8.5 // indirect
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 // indirect
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/kyokomi/emoji.v1 v1.5.1 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect

59
go.sum
View File

@@ -44,9 +44,15 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible h1:1G1pk05UrOh0NlF1oeaaix1x8XzrfjIDK47TY0Zehcw=
github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc=
github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE=
github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs=
github.com/Netflix/go-expect v0.0.0-20180615182759-c93bf25de8e8 h1:xzYJEypr/85nBpB11F9br+3HUrpgb+fcm5iADzXXYEw=
github.com/Netflix/go-expect v0.0.0-20180615182759-c93bf25de8e8/go.mod h1:oX5x61PbNXchhh0oikYAH+4Pcfw5LKv21+Jnpr6r6Pc=
github.com/PuerkitoBio/purell v1.2.1 h1:QsZ4TjvwiMpat6gBCBxEQI0rcS9ehtkKtSpiUnd9N28=
github.com/PuerkitoBio/purell v1.2.1/go.mod h1:ZwHcC/82TOaovDi//J/804umJFFmbOHPngi8iYYv/Eo=
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M=
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=
github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g=
@@ -112,8 +118,11 @@ github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7
github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d h1:U+s90UTSYgptZMwQh2aRr3LuazLJIa+Pg3Kc1ylSYVY=
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/cpuguy83/go-md2man/v2 v2.0.3 h1:qMCsGGgs+MAzDFyp9LpAe1Lqy/fY/qCovCm0qnXZOBM=
github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/creack/pty v1.1.7 h1:6pwm8kMQKCmgUg0ZHTm5+/YvRK0s3THD/28+T6/kk4A=
github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
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=
@@ -179,6 +188,21 @@ github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V
github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs=
github.com/go-openapi/jsonpointer v0.20.0 h1:ESKJdU9ASRfaPNOPRx12IUyA1vn3R9GiE3KYD14BXdQ=
github.com/go-openapi/jsonpointer v0.20.0/go.mod h1:6PGzBjjIIumbLYysB73Klnms1mwnU4G3YHOECG3CedA=
github.com/go-openapi/jsonreference v0.20.0/go.mod h1:Ag74Ico3lPc+zR+qjn4XBUmXymS4zJbYVCZmcgkasdo=
github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE=
github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k=
github.com/go-openapi/spec v0.20.11 h1:J/TzFDLTt4Rcl/l1PmyErvkqlJDncGvPTMnCI39I4gY=
github.com/go-openapi/spec v0.20.11/go.mod h1:2OpW+JddWPrpXSCIX8eOx7lZ5iyuWj3RYR6VaaBKcWA=
github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
github.com/go-openapi/swag v0.19.15/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ=
github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14=
github.com/go-openapi/swag v0.22.4 h1:QLMzNJnMGPRNDCbySlcj1x01tzU8/9LTTL9hZZZogBU=
github.com/go-openapi/swag v0.22.4/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14=
github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s=
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=
@@ -407,6 +431,8 @@ github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/
github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
github.com/jonboulle/clockwork v0.1.0 h1:VKV+ZcuP6l3yW9doeqz6ziZGgcynBVQO+obU0+0hcPo=
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
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.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
@@ -430,12 +456,14 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxv
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/pty v1.1.8 h1:AkaSdXYQOWeaO3neb8EM634ahkXXe3jYbVh/F9lq+GI=
github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q=
github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4=
github.com/lestrrat/go-envload v0.0.0-20180220120943-6ed08b54a570 h1:0iQektZGS248WXmGIYOwRXSQhD4qn3icjMpuxwO7qlo=
@@ -457,6 +485,11 @@ github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2
github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ=
github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
github.com/matoous/go-nanoid v1.5.0/go.mod h1:zyD2a71IubI24efhpvkJz+ZwfwagzgSO6UNiFsZKN7U=
github.com/matoous/go-nanoid/v2 v2.0.0 h1:d19kur2QuLeHmJBkvYkFdhFBzLoo1XVm2GgTpL+9Tj0=
github.com/matoous/go-nanoid/v2 v2.0.0/go.mod h1:FtS4aGPVfEkxKxhdWPAspZpZSh1cOjtM7Ej/So3hR0g=
@@ -521,6 +554,7 @@ github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzE
github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w=
github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w=
github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c=
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
github.com/nsqio/go-nsq v1.0.8 h1:3L2F8tNLlwXXlp2slDUrUWSBn2O3nMh8R1/KEDFTHPk=
github.com/nsqio/go-nsq v1.0.8/go.mod h1:vKq36oyeVXgsS5Q8YEO7WghqidAVXQlcFxzQbQTuDEY=
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
@@ -617,6 +651,8 @@ github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OK
github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc=
github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q=
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E=
github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
@@ -679,6 +715,8 @@ github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcU
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8=
github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0=
github.com/swaggo/swag v1.16.2 h1:28Pp+8DkQoV+HLzLx8RGJZXNGKbFqnuvSbAAtoxiY04=
github.com/swaggo/swag v1.16.2/go.mod h1:6YzXnDcpr0767iOejs318CwYkCQqyGer6BizOg03f+E=
github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE=
github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ=
github.com/tebeka/strftime v0.1.5 h1:1NQKN1NiQgkqd/2moD6ySP/5CoZQsKa1d3ZhJ44Jpmg=
@@ -700,7 +738,11 @@ github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZ
github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
github.com/urfave/cli v1.22.1 h1:+mkCCcOFKPnCmVYVcURKps1Xe+3zP90gSYGNfRkjoIY=
github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
github.com/urfave/cli/v2 v2.26.0 h1:3f3AMg3HpThFNT4I++TKOejZO8yU55t3JnnSr4S4QEI=
github.com/urfave/cli/v2 v2.26.0/go.mod h1:8qnjx1vcq5s2/wpsqoZFndg2CE5tNFyrTvS6SinrnYQ=
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
github.com/xrash/smetrics v0.0.0-20231213231151-1d8dd44e695e h1:+SOyEddqYF09QP7vr7CgJ1eti3pY9Fn3LHO1M1r/0sI=
github.com/xrash/smetrics v0.0.0-20231213231151-1d8dd44e695e/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8=
github.com/xuri/efp v0.0.0-20220603152613-6918739fd470 h1:6932x8ltq1w4utjmfMPVj09jdMlkY0aiA6+Skbtl3/c=
github.com/xuri/efp v0.0.0-20220603152613-6918739fd470/go.mod h1:ybY/Jr0T0GTCnYjKqmdwxyxn2BQf2RcQIIvex5QldPI=
github.com/xuri/excelize/v2 v2.7.1 h1:gm8q0UCAyaTt3MEF5wWMjVdmthm2EHAWesGSKS9tdVI=
@@ -768,6 +810,8 @@ golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0
golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE=
golang.org/x/crypto v0.12.0 h1:tFM/ta59kqch6LlvYnPa0yx5a83cL2nHflFhYKvv9Yk=
golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw=
golang.org/x/crypto v0.16.0 h1:mMMrFzRSCF0GvB7Ne27XVtVAaXLrPmgPC7/v0tkwHaY=
golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
@@ -856,6 +900,8 @@ golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns=
golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M=
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c=
golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -951,6 +997,8 @@ golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM=
golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc=
golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
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=
@@ -958,6 +1006,8 @@ golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY=
golang.org/x/term v0.11.0 h1:F9tnn/DA/Im8nCwm+fX+1/eBwi4qFjRT++MhtVC4ZX0=
golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU=
golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4=
golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -970,6 +1020,8 @@ 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.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc=
golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
@@ -1035,6 +1087,8 @@ golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM=
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
golang.org/x/tools v0.16.1 h1:TLyB3WofjdOEepBHAU20JdNC1Zbg87elYofWYAY5oZA=
golang.org/x/tools v0.16.1/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0=
golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@ -1152,6 +1206,8 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
@@ -1175,6 +1231,7 @@ gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/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=
@@ -1305,6 +1362,8 @@ rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E=
sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY=
sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU=
xorm.io/builder v0.3.6/go.mod h1:LEFAPISnRzG+zxaxj2vPicRwz67BdhFreKg8yv8/TgU=
xorm.io/builder v0.3.11-0.20220531020008-1bd24a7dc978 h1:bvLlAPW1ZMTWA32LuZMBEGHAUOcATZjzHcotf3SWweM=

View File

@@ -122,7 +122,7 @@ deb: $(BINNAME)
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
sed -i '74 s/user: root/user: agtuser/g' $(DebBuildDir)/usr/local/omc/etc/default/restconf.yaml
perl -0777 -i -pe 's/ne:\n user: root/ne:\n user: agtuser/g' $(DebBuildDir)/usr/local/omc/etc/default/restconf.yaml
dpkg -b $(DebBuildDir) $(ReleaseDebs)/$(DebPkgFile)
rpm: $(BINNAME)

191
misc/installOMC.sh Normal file
View File

@@ -0,0 +1,191 @@
#!/bin/bash
echo "-------------------please input-------------------"
#please input the new nf ip
read -p "please input your OMC IP: " OMCIP
echo "-----------------please continue to enter-----------------"
read -p "please input your IMS IP: " IMSIP
echo "-----------------please continue to enter-----------------"
read -p "please input your AMF IP: " AMFIP
echo "-----------------please continue to enter-----------------"
read -p "please input your AUSF IP: " AUSFIP
echo "-----------------please continue to enter-----------------"
read -p "please input your UDM IP: " UDMIP
echo "-----------------please continue to enter-----------------"
read -p "please input your SMF IP: " SMFIP
echo "-----------------please continue to enter-----------------"
read -p "please input your PCF IP: " PCFIP
echo "-----------------please continue to enter-----------------"
read -p "please input your NSSF IP: " NSSFIP
echo "-----------------please continue to enter-----------------"
read -p "please input your NRF IP: " NRFIP
echo "-----------------please continue to enter-----------------"
read -p "please input your UPF IP: " UPFIP
echo "-----------------please continue to enter-----------------"
read -p "please input your MME IP: " MMEIP
echo "------------please continue to enter Vm account-------------"
read -p "please input your username: " username
echo "------------please continue to enter Vm password-------------"
read -p "please input your passwd: " passwd
cd /home/agtuser
#Creating a local source
tar -xzvf omcpkg*.tar.gz
mv /etc/apt/sources.list /etc/apt/sources.list-bak
echo "deb [trusted=yes] file:/home/agtuser/omcpkg archives/" > /etc/apt/sources.list
sleep 1
apt update
sleep 1
#Database installation
apt install -y net-tools software-properties-common
sleep 1
apt-key add mariadb_release_signing_key.asc
apt install -y mariadb-server
systemctl start mariadb
mysql --version
sudo mysql_secure_installation <<-EOF
1000omc@kp!
y
n
y
y
y
y
EOF
#You need to enter the password manually1000omc@kp!
systemctl enable mariadb
systemctl restart mariadb
#Modify mysql datebase root password
#You need to run the following command
mysql -u root <<-EOF
use mysql
ALTER USER root@'localhost' IDENTIFIED VIA mysql_native_password USING PASSWORD("1000omc@kp!");
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '1000omc@kp!';
flush privileges;
quit
EOF
sleep 5
echo "port=33066" >> /etc/mysql/mariadb.conf.d/50-server.cnf
sed -i "s/127.0.0.1/0.0.0.0/g" /etc/mysql/mariadb.conf.d/50-server.cnf
systemctl restart mariadb
#Install WEB server
apt update
apt install -y nginx
systemctl enable nginx
systemctl daemon-reload
systemctl start nginx
#Install and config OMC
dpkg -i omc*.deb
cp /usr/local/omc/htdocs/front/default/config.js /usr/local/omc/htdocs/front/
sed -i "s/192.168.8.100/${OMCIP}/g" /usr/local/omc/htdocs/front/config.js
cp /usr/local/omc/etc/default/* /usr/local/omc/etc
sed -i "76s/user: root/user: ${username}/" /usr/local/omc/etc/restconf.yaml
#Database configuration
/usr/local/omc/bin/importdb.sh <<-EOF
Install
EOF
#Configure the trusted gateway of the managed NE
apt install -y expect
echo "${OMCIP} ${username} ${passwd}" > /usr/local/omc/bin/nehosts
echo "${IMSIP} ${username} ${passwd}" >> /usr/local/omc/bin/nehosts
echo "${AMFIP} ${username} ${passwd}" >> /usr/local/omc/bin/nehosts
echo "${AUSFIP} ${username} ${passwd}" >> /usr/local/omc/bin/nehosts
echo "${UDMIP} ${username} ${passwd}" >> /usr/local/omc/bin/nehosts
echo "${SMFIP} ${username} ${passwd}" >> /usr/local/omc/bin/nehosts
echo "${PCFIP} ${username} ${passwd}" >> /usr/local/omc/bin/nehosts
echo "${NSSFIP} ${username} ${passwd}" >> /usr/local/omc/bin/nehosts
echo "${NRFIP} ${username} ${passwd}" >> /usr/local/omc/bin/nehosts
echo "${UPFIP} ${username} ${passwd}" >> /usr/local/omc/bin/nehosts
echo "${MMEIP} ${username} ${passwd}" >> /usr/local/omc/bin/nehosts
sleep 1
cd /usr/local/omc/bin
/usr/local/omc/bin/cpsshkey.sh
cd /home/agtuser
sleep 5
#adb server configuration
cp /usr/local/db/bin/conf/default/redis.conf /usr/local/db/bin/conf/redis.conf
sed -i "s/172.16.5.140/${UDMIP}/g" /usr/local/db/bin/conf/redis.conf
#Modifying User Rights
sudo echo "agtuser ALL=(ALL:ALL) NOPASSWD: ALL" >> /etc/sudoers
sudo echo "agtuser ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
sudo scp /etc/sudoers ${username}@${IMSIP}:/home/agtuser
sudo scp /etc/sudoers ${username}@${AMFIP}:/home/agtuser
sudo scp /etc/sudoers ${username}@${AUSFIP}:/home/agtuser
sudo scp /etc/sudoers ${username}@${UDMIP}:/home/agtuser
sudo scp /etc/sudoers ${username}@${SMFIP}:/home/agtuser
sudo scp /etc/sudoers ${username}@${PCFIP}:/home/agtuser
sudo scp /etc/sudoers ${username}@${NSSFIP}:/home/agtuser
sudo scp /etc/sudoers ${username}@${NRFIP}:/home/agtuser
sudo scp /etc/sudoers ${username}@${UPFIP}:/home/agtuser
sudo scp /etc/sudoers ${username}@${MMEIP}:/home/agtuser
#Run the following commands on each NE VM
#cp sudoers /etc/sudoers
sleep 5
#Service initiation
systemctl enable restagent.service
systemctl enable crontask.service
systemctl daemon-reload
/usr/local/omc/bin//omcsvc.sh restart
systemctl restart nginx
echo "-----------------config complete------------"

View File

@@ -1,19 +1,19 @@
# 项目信息
framework:
name: "ems_agt"
version: "0.0.1"
name: "CN EMS"
version: "2.2312.9"
# 应用服务配置
server:
# 服务端口
port: 3040
port: 3030
# 是否开启代理
proxy: false
# 日志
logger:
fileDir: "/usr/local/omc/log"
fileName: "ems_agt.log"
fileDir: "/var/log"
fileName: "omc.log"
level: 2 # 日志记录的等级 0:silent<1:info<2:warn<3:error
maxDay: 180 # 日志会保留 180 天
maxSize: 10 # 调整按 10MB 大小的切割

View File

@@ -0,0 +1,104 @@
package ssh
import (
"fmt"
"strings"
"ems.agt/src/framework/cmd"
"ems.agt/src/framework/config"
"ems.agt/src/framework/logger"
"ems.agt/src/framework/utils/parse"
)
// FileListRow 文件列表行数据
type FileListRow struct {
FileType string `json:"fileType"` // 文件类型
FileMode string `json:"fileMode"` // 文件的权限
LinkCount int64 `json:"linkCount"` // 硬链接数目
Owner string `json:"owner"` // 所属用户
Group string `json:"group"` // 所属组
Size string `json:"size"` // 文件的大小
ModifiedTime int64 `json:"modifiedTime"` // 最后修改时间,单位为秒
FileName string `json:"fileName"` // 文件的名称
}
// 文件列表
// neIp 网元IP空字符串为本地
// search 文件名后模糊*
//
// return 目录大小,行记录,异常
func FileList(path, neIp, search string) (string, []FileListRow, error) {
totalSize := ""
var rows []FileListRow
rowStr := ""
// 发送命令
searchStr := ""
if search != "" {
searchStr = search + "*"
}
pathStr := fmt.Sprintf("cd %s \n", path)
cmdStr := fmt.Sprintf("ls -lht --time-style=+%%s %s \n", searchStr)
// 是否远程读取
if neIp != "" {
usernameNe := config.Get("ne.user").(string) // 网元统一用户
sshHost := fmt.Sprintf("%s@%s", usernameNe, neIp)
resultStr, err := cmd.ExecWithCheck("ssh", sshHost, pathStr, cmdStr)
if err != nil {
logger.Errorf("Ne FileList Path: %s, Search: %s, Error:%s", path, search, err.Error())
return totalSize, rows, err
}
rowStr = resultStr
} else {
resultStr, err := cmd.Execf(pathStr, cmdStr)
if err != nil {
logger.Errorf("Ne FileList Path: %s, Search: %s, Error:%s", path, search, err.Error())
return totalSize, rows, err
}
rowStr = resultStr
}
// 遍历组装
rowStrList := strings.Split(rowStr, "\n")
for i, rowStr := range rowStrList {
if rowStr == "" {
continue
}
// 使用空格对字符串进行切割
fields := strings.Fields(rowStr)
// 无查询过滤会有total总计
if i == 0 && searchStr == "" {
totalSize = fields[1]
continue
}
// 拆分不足7位跳过
if len(fields) != 7 {
continue
}
// 文件类型
fileMode := fields[0]
fileType := "file"
if fileMode[0] == 'd' {
fileType = "dir"
} else if fileMode[0] == 'l' {
fileType = "symlink"
}
// 提取各个字段的值
rows = append(rows, FileListRow{
FileMode: fileMode,
FileType: fileType,
LinkCount: parse.Number(fields[1]),
Owner: fields[2],
Group: fields[3],
Size: fields[4],
ModifiedTime: parse.Number(fields[5]),
FileName: fields[6],
})
}
return totalSize, rows, nil
}

View File

@@ -6,44 +6,39 @@ import (
"os/exec"
"path/filepath"
"ems.agt/lib/core/conf"
"ems.agt/lib/log"
"ems.agt/src/framework/config"
"ems.agt/src/framework/logger"
)
// 网元NE 文件复制到远程文件
func FileSCPLocalToNe(neIp, localPath, nePath string) error {
usernameNe := conf.Get("ne.user").(string)
usernameNe := config.Get("ne.user").(string)
// scp /path/to/local/file.txt user@remote-server:/path/to/remote/directory/
neDir := fmt.Sprintf("%s@%s:%s", usernameNe, neIp, nePath)
cmd := exec.Command("scp", "-r", localPath, neDir)
out, err := cmd.CombinedOutput()
_, err := cmd.CombinedOutput()
if err != nil {
logger.Errorf("FileSCPLocalToNe %s", err.Error())
return err
}
log.Infof("FileSCPLocalToNe %s", string(out))
return nil
}
// 网元NE 远程文件复制到本地文件
func FileSCPNeToLocal(neIp, nePath, localPath string) error {
// 获取文件所在的目录路径
dirPath := filepath.Dir(localPath)
// 确保文件夹路径存在
err := os.MkdirAll(dirPath, os.ModePerm)
if err != nil {
log.Errorf("FileSCPNeToLocal MkdirAll err %v", err)
if err := os.MkdirAll(filepath.Dir(localPath), 0750); err != nil {
logger.Errorf("FileSCPNeToLocal MkdirAll err %v", err)
return err
}
usernameNe := conf.Get("ne.user").(string)
usernameNe := config.Get("ne.user").(string)
// scp user@remote-server:/path/to/remote/directory/ /path/to/local/file.txt
neDir := fmt.Sprintf("%s@%s:%s", usernameNe, neIp, nePath)
cmd := exec.Command("scp", "-r", neDir, localPath)
out, err := cmd.CombinedOutput()
_, err := cmd.CombinedOutput()
if err != nil {
logger.Errorf("FileSCPNeToLocal %s", err.Error())
return err
}
log.Infof("FileSCPNeToLocal %s", string(out))
return nil
}

View File

@@ -3,7 +3,6 @@ package common
import (
"ems.agt/src/framework/logger"
"ems.agt/src/framework/middleware"
"ems.agt/src/framework/middleware/collectlogs"
"ems.agt/src/modules/common/controller"
"github.com/gin-gonic/gin"
@@ -26,12 +25,6 @@ func Setup(router *gin.Engine) {
// 系统可暴露的配置信息
indexGroup.GET("/sys-conf", controller.NewCommont.SysConfig)
// 转存上传文件到静态资源
indexGroup.POST("/transferStaticFile",
middleware.PreAuthorize(nil),
collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.helpDoc", collectlogs.BUSINESS_TYPE_UPDATE)),
controller.NewCommont.TransferStaticFile,
)
// 验证码操作处理
indexGroup.GET("/captchaImage",
@@ -92,5 +85,6 @@ func Setup(router *gin.Engine) {
fileGroup.POST("/chunkCheck", middleware.PreAuthorize(nil), controller.NewFile.ChunkCheck)
fileGroup.POST("/chunkUpload", middleware.PreAuthorize(nil), controller.NewFile.ChunkUpload)
fileGroup.POST("/chunkMerge", middleware.PreAuthorize(nil), controller.NewFile.ChunkMerge)
fileGroup.POST("/transferStaticFile", middleware.PreAuthorize(nil), controller.NewCommont.TransferStaticFile)
}
}

View File

@@ -1,18 +1,11 @@
package controller
import (
"fmt"
"path/filepath"
"strings"
"ems.agt/src/framework/config"
"ems.agt/src/framework/i18n"
"ems.agt/src/framework/utils/ctx"
"ems.agt/src/framework/utils/file"
"ems.agt/src/framework/vo/result"
commonService "ems.agt/src/modules/common/service"
"github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/binding"
)
// 实例化控制层 CommontController 结构体
@@ -76,43 +69,3 @@ func (s *CommontController) SysConfig(c *gin.Context) {
c.JSON(200, result.OkData(data))
}
// 转存指定对应文件
//
// POST /transferStaticFile
func (s *CommontController) TransferStaticFile(c *gin.Context) {
language := ctx.AcceptLanguage(c)
var body struct {
UploadPath string `json:"uploadPath" binding:"required"`
StaticPath string `json:"staticPath" binding:"required"`
Language string `json:"language" binding:"required"`
}
if err := c.ShouldBindBodyWith(&body, binding.JSON); err != nil {
c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
return
}
// 取语言前缀
lang := strings.SplitN(body.Language, "_", 2)[0]
// 默认静态资源
static := config.Get("staticFile.default").(map[string]any)
dir, err := filepath.Abs(static["dir"].(string))
if err != nil {
c.JSON(400, result.CodeMsg(400, err.Error()))
return
}
delPrefix := strings.Replace(body.StaticPath, static["prefix"].(string), "", 1)
staticPath := strings.Replace(delPrefix, "{language}", lang, 1)
newFile := fmt.Sprintf("%s%s", dir, staticPath)
err = file.CopyUploadFile(body.UploadPath, newFile)
if err != nil {
c.JSON(400, result.CodeMsg(400, err.Error()))
return
}
urlPath := strings.Replace(newFile, dir, static["prefix"].(string), 1)
c.JSON(200, result.OkData(filepath.ToSlash(urlPath)))
}

View File

@@ -4,8 +4,10 @@ import (
"encoding/base64"
"fmt"
"net/url"
"path/filepath"
"strings"
"ems.agt/src/framework/config"
"ems.agt/src/framework/constants/uploadsubpath"
"ems.agt/src/framework/i18n"
"ems.agt/src/framework/utils/ctx"
@@ -13,6 +15,7 @@ import (
"ems.agt/src/framework/vo/result"
"github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/binding"
)
// 实例化控制层 FileController 结构体
@@ -190,3 +193,43 @@ func (s *FileController) ChunkUpload(c *gin.Context) {
}
c.JSON(206, result.OkData(chunkFilePath))
}
// 转存指定对应文件到静态目录
//
// POST /transferStaticFile
func (s *CommontController) TransferStaticFile(c *gin.Context) {
language := ctx.AcceptLanguage(c)
var body struct {
UploadPath string `json:"uploadPath" binding:"required"`
StaticPath string `json:"staticPath" binding:"required"`
Language string `json:"language" binding:"required"`
}
if err := c.ShouldBindBodyWith(&body, binding.JSON); err != nil {
c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
return
}
// 取语言前缀
lang := strings.SplitN(body.Language, "_", 2)[0]
// 默认静态资源
static := config.Get("staticFile.default").(map[string]any)
dir, err := filepath.Abs(static["dir"].(string))
if err != nil {
c.JSON(400, result.CodeMsg(400, err.Error()))
return
}
delPrefix := strings.Replace(body.StaticPath, static["prefix"].(string), "", 1)
staticPath := strings.Replace(delPrefix, "{language}", lang, 1)
newFile := fmt.Sprintf("%s%s", dir, staticPath)
err = file.CopyUploadFile(body.UploadPath, newFile)
if err != nil {
c.JSON(400, result.CodeMsg(400, err.Error()))
return
}
urlPath := strings.Replace(newFile, dir, static["prefix"].(string), 1)
c.JSON(200, result.OkData(filepath.ToSlash(urlPath)))
}

View File

@@ -66,3 +66,93 @@ func (s *NeActionController) PushFile(c *gin.Context) {
neFilePath := fmt.Sprintf("%s/%s", nePath, fileName)
c.JSON(200, result.OkData(filepath.ToSlash(neFilePath)))
}
// 从网元端获取文件
//
// GET /pullFile
func (s *NeActionController) PullFile(c *gin.Context) {
language := ctx.AcceptLanguage(c)
var querys struct {
NeType string `form:"neType" binding:"required"`
NeID string `form:"neId" binding:"required"`
Path string `form:"path" binding:"required"`
FileName string `form:"fileName" binding:"required"`
}
if err := c.ShouldBindQuery(&querys); err != nil {
c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
return
}
// 查询网元获取IP
neInfo := s.neInfoService.SelectNeInfoByNeTypeAndNeID(querys.NeType, querys.NeID)
if neInfo.NeId != querys.NeID || neInfo.IP == "" {
c.JSON(200, result.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
return
}
nePath := fmt.Sprintf("%s/%s", querys.Path, querys.FileName)
localPath := fmt.Sprintf("/tmp/omc/pullFile/%s", querys.FileName)
err := ssh.FileSCPNeToLocal(neInfo.IP, nePath, localPath)
if err != nil {
c.JSON(200, result.ErrMsg(err.Error()))
return
}
c.FileAttachment(localPath, querys.FileName)
}
// 网元端文件列表
//
// GET /files
func (s *NeActionController) Files(c *gin.Context) {
language := ctx.AcceptLanguage(c)
var querys struct {
NeType string `form:"neType" binding:"required"`
NeID string `form:"neId" binding:"required"`
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 {
c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
return
}
// 查询网元获取IP
neInfo := s.neInfoService.SelectNeInfoByNeTypeAndNeID(querys.NeType, querys.NeID)
if neInfo.NeId != querys.NeID || neInfo.IP == "" {
c.JSON(200, result.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
return
}
totalSize, rows, err := ssh.FileList(querys.Path, neInfo.IP, querys.Search)
if err != nil {
c.JSON(200, result.Ok(map[string]any{
"path": querys.Path,
"totalSize": totalSize,
"total": len(rows),
"rows": []ssh.FileListRow{},
}))
return
}
// 对数组进行切片分页
lenNum := int64(len(rows))
start := (querys.PageNum - 1) * querys.PageSize
end := start + querys.PageSize
var splitRows []ssh.FileListRow
if start >= lenNum {
splitRows = []ssh.FileListRow{}
} else if end >= lenNum {
splitRows = rows[start:]
} else {
splitRows = rows[start:end]
}
c.JSON(200, result.Ok(map[string]any{
"path": querys.Path,
"totalSize": totalSize,
"total": lenNum,
"rows": splitRows,
}))
}

View File

@@ -25,7 +25,14 @@ func Setup(router *gin.Engine) {
// 网元处理
neActionGroup := neGroup.Group("/action")
{
// 发送文件到网元服务器
neActionGroup.GET("/files",
middleware.PreAuthorize(nil),
controller.NewNeAction.Files,
)
neActionGroup.GET("/pullFile",
middleware.PreAuthorize(nil),
controller.NewNeAction.PullFile,
)
neActionGroup.POST("/pushFile",
middleware.PreAuthorize(nil),
collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neAction", collectlogs.BUSINESS_TYPE_IMPORT)),

View File

@@ -507,11 +507,12 @@ func (s *SysUserController) Export(c *gin.Context) {
"E1": i18n.TKey(language, "user.export.phone"),
"F1": i18n.TKey(language, "user.export.sex"),
"G1": i18n.TKey(language, "user.export.status"),
"H1": i18n.TKey(language, "user.export.deptID"),
"I1": i18n.TKey(language, "user.export.deptName"),
"J1": i18n.TKey(language, "user.export.deptLeader"),
"K1": i18n.TKey(language, "user.export.loginIP"),
"L1": i18n.TKey(language, "user.export.loginDate"),
"H1": i18n.TKey(language, "user.export.role"),
"I1": i18n.TKey(language, "user.export.deptID"),
"J1": i18n.TKey(language, "user.export.deptName"),
"K1": i18n.TKey(language, "user.export.deptLeader"),
"L1": i18n.TKey(language, "user.export.loginIP"),
"M1": i18n.TKey(language, "user.export.loginDate"),
}
// 读取用户性别字典数据
dictSysUserSex := s.sysDictDataService.SelectDictDataByType("sys_user_sex")
@@ -532,6 +533,13 @@ func (s *SysUserController) Export(c *gin.Context) {
if row.Status == "1" {
statusValue = i18n.TKey(language, "dictData.normal")
}
// 用户角色, 默认导出首个
userRole := ""
if len(row.Roles) > 0 {
roleID := row.Roles[0].RoleID
roleName := i18n.TKey(language, row.Roles[0].RoleName)
userRole = fmt.Sprintf("%s-%s", roleID, roleName)
}
dataCells = append(dataCells, map[string]any{
"A" + idx: row.UserID,
"B" + idx: row.UserName,
@@ -540,11 +548,12 @@ func (s *SysUserController) Export(c *gin.Context) {
"E" + idx: row.PhoneNumber,
"F" + idx: sysUserSex,
"G" + idx: statusValue,
"H" + idx: row.Dept.DeptID,
"I" + idx: row.Dept.DeptName,
"J" + idx: row.Dept.Leader,
"K" + idx: row.LoginIP,
"L" + idx: date.ParseDateToStr(row.LoginDate, date.YYYY_MM_DD_HH_MM_SS),
"H" + idx: userRole,
"I" + idx: row.Dept.DeptID,
"J" + idx: row.Dept.DeptName,
"K" + idx: row.Dept.Leader,
"L" + idx: row.LoginIP,
"M" + idx: date.ParseDateToStr(row.LoginDate, date.YYYY_MM_DD_HH_MM_SS),
})
}
@@ -655,22 +664,32 @@ func (s *SysUserController) ImportData(c *gin.Context) {
break
}
}
// 用户状态
sysUserStatus := common.STATUS_NO
if row["G"] == "Normal" {
if row["G"] == "正常" || row["G"] == "Normal" {
sysUserStatus = common.STATUS_YES
}
// 用户角色 拿编号
sysUserRole := ""
if v, ok := row["H"]; ok && v != "" {
sysUserRole = strings.SplitN(v, "-", 2)[0]
if sysUserRole == "1" {
sysUserRole = ""
}
}
// 构建用户实体信息
newSysUser := model.SysUser{
UserType: "sys",
Password: initPassword,
DeptID: row["H"],
DeptID: row["I"],
UserName: row["B"],
NickName: row["C"],
PhoneNumber: row["E"],
Email: row["D"],
Status: sysUserStatus,
Sex: sysUserSex,
RoleIDs: []string{sysUserRole},
}
// 检查手机号码格式并判断是否唯一
@@ -725,7 +744,7 @@ func (s *SysUserController) ImportData(c *gin.Context) {
successMsgArr = append(successMsgArr, msg)
} else {
// 用户编号:%s 登录名称 %s 导入失败
msg := i18n.TTemplate(language, "user.import.fail", map[string]any{"id": row["A"], "email": newSysUser.UserName})
msg := i18n.TTemplate(language, "user.import.fail", map[string]any{"id": row["A"], "name": newSysUser.UserName})
failureNum++
failureMsgArr = append(failureMsgArr, msg)
}
@@ -739,12 +758,12 @@ func (s *SysUserController) ImportData(c *gin.Context) {
rows := s.sysUserService.UpdateUser(newSysUser)
if rows > 0 {
// 用户编号:%s 登录名称 %s 更新成功
msg := i18n.TTemplate(language, "user.import.successUpdate", map[string]any{"id": row["A"], "email": newSysUser.UserName})
msg := i18n.TTemplate(language, "user.import.successUpdate", map[string]any{"id": row["A"], "name": newSysUser.UserName})
successNum++
successMsgArr = append(successMsgArr, msg)
} else {
// 用户编号:%s 登录名称 %s 更新失败
msg := i18n.TTemplate(language, "user.import.failUpdate", map[string]any{"id": row["A"], "email": newSysUser.UserName})
msg := i18n.TTemplate(language, "user.import.failUpdate", map[string]any{"id": row["A"], "name": newSysUser.UserName})
failureNum++
failureMsgArr = append(failureMsgArr, msg)
}

View File

@@ -104,7 +104,7 @@ func (s *TcpdumpController) Download(c *gin.Context) {
}
nePath := fmt.Sprintf("/tmp/%s", body.FileName)
localPath := fmt.Sprintf("%s/tcpdump/%s", config.Get("ne.scpdir"), body.FileName)
localPath := fmt.Sprintf("/tmp/omc/tcpdump/%s", body.FileName)
err = ssh.FileSCPNeToLocal(neInfo.IP, nePath, localPath)
if err != nil {
c.JSON(200, result.ErrMsg(err.Error()))

View File

@@ -15,5 +15,5 @@ database:
name: omc_db
mml:
filedir: ../../config/mml/system
table: mml_system
filedir: ../../config/mml/subscriber
table: mml_subscriber