From efad81e9776576d4ed44d6956b5be677c6fc99b5 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Mon, 12 Aug 2024 11:37:32 +0800 Subject: [PATCH 01/24] =?UTF-8?q?del:=20=E7=A7=BB=E9=99=A4=E6=97=A0?= =?UTF-8?q?=E7=94=A8=E5=B7=A5=E5=85=B7=EF=BC=8C=E6=95=B4=E7=90=86mod?= =?UTF-8?q?=E4=BE=9D=E8=B5=96=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- go.mod | 47 +----- go.sum | 113 +------------ tools/websocket/load.go | 94 ----------- tools/websocket/tt.go | 87 ---------- tools/websocket/tt.yaml | 15 -- tools/websocket/ttt.go | 11 -- tools/websocket/websocket.go | 301 ----------------------------------- tools/websocket/webtel.go | 290 --------------------------------- tools/websocket/webtelnet.go | 218 ------------------------- 9 files changed, 8 insertions(+), 1168 deletions(-) delete mode 100644 tools/websocket/load.go delete mode 100644 tools/websocket/tt.go delete mode 100644 tools/websocket/tt.yaml delete mode 100644 tools/websocket/ttt.go delete mode 100644 tools/websocket/websocket.go delete mode 100644 tools/websocket/webtel.go delete mode 100644 tools/websocket/webtelnet.go diff --git a/go.mod b/go.mod index 9fd185ca..331525a9 100644 --- a/go.mod +++ b/go.mod @@ -2,13 +2,10 @@ module be.ems go 1.21 -toolchain go1.21.0 - require ( github.com/dgrijalva/jwt-go v3.2.0+incompatible github.com/dlclark/regexp2 v1.10.0 github.com/gin-gonic/gin v1.9.1 - github.com/go-admin-team/go-admin-core/sdk v1.5.1 github.com/go-resty/resty/v2 v2.7.0 github.com/go-sql-driver/mysql v1.7.1 github.com/golang-jwt/jwt/v5 v5.0.0 @@ -23,19 +20,21 @@ require ( github.com/mojocn/base64Captcha v1.3.5 github.com/mssola/user_agent v0.6.0 github.com/patrickmn/go-cache v2.1.0+incompatible + github.com/pkg/sftp v1.13.1 github.com/prometheus-community/pro-bing v0.4.0 github.com/redis/go-redis/v9 v9.1.0 - github.com/reiver/go-telnet v0.0.0-20180421082511-9ff0b2ab096e github.com/robfig/cron/v3 v3.0.1 github.com/shirou/gopsutil v3.21.11+incompatible github.com/shirou/gopsutil/v3 v3.23.7 github.com/spf13/afero v1.9.5 + github.com/spf13/pflag v1.0.5 github.com/spf13/viper v1.16.0 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.19.0 + golang.org/x/net v0.21.0 golang.org/x/term v0.17.0 + golang.org/x/text v0.14.0 gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df gopkg.in/yaml.v3 v3.0.1 gorm.io/driver/mysql v1.5.1 @@ -45,9 +44,10 @@ require ( require ( github.com/beorn7/perks v1.0.1 // indirect - github.com/creack/pty v1.1.9 // indirect - github.com/go-admin-team/go-admin-core v1.3.12-0.20221121065133-27b7dbe27a8f // indirect github.com/kr/fs v0.1.0 // indirect + github.com/mattn/go-sqlite3 v1.14.15 // indirect + github.com/onsi/ginkgo v1.16.5 // indirect + github.com/onsi/gomega v1.21.1 // indirect github.com/prometheus/client_model v0.5.0 // indirect github.com/prometheus/common v0.48.0 // indirect github.com/prometheus/procfs v0.12.0 // indirect @@ -55,99 +55,66 @@ require ( ) require ( - github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible // indirect - github.com/bsm/redislock v0.8.2 // indirect - github.com/bytedance/go-tagexpr/v2 v2.7.12 // indirect github.com/bytedance/sonic v1.9.1 // indirect - github.com/casbin/casbin/v2 v2.54.0 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect - github.com/chanxuehong/rand v0.0.0-20201110082127-2f19a1bdd973 // indirect - github.com/chanxuehong/wechat v0.0.0-20201110083048-0180211b69fd // indirect github.com/chenjiandongx/ginprom v0.0.0-20210617023641-6c809602c38a github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // 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 github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/gabriel-vasile/mimetype v1.4.2 // indirect github.com/gin-contrib/sse v0.1.0 // indirect - github.com/git-chglog/git-chglog v0.0.0-20190611050339-63a4e637021f // indirect - github.com/go-admin-team/redisqueue/v2 v2.0.0-20221119141731-97c556b0d5b7 // indirect github.com/go-forks/fsnotify v1.4.7 // indirect github.com/go-ole/go-ole v1.2.6 // 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.14.0 // indirect - github.com/go-redis/redis/v8 v8.11.5 // indirect - github.com/go-redis/redis/v9 v9.0.0-rc.1 // indirect github.com/goccy/go-json v0.10.2 github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect - github.com/golang/protobuf v1.5.3 // indirect github.com/golang/snappy v0.0.4 // indirect github.com/google/uuid v1.6.0 // indirect github.com/hashicorp/hcl v1.0.0 // indirect - github.com/henrylee2cn/ameda v1.4.10 // indirect - github.com/henrylee2cn/goutil v0.0.0-20210127050712-89660552f6f8 // indirect - github.com/imdario/mergo v0.3.9 // 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/json-iterator/go v1.1.12 // indirect - github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect github.com/klauspost/cpuid/v2 v2.2.4 // indirect github.com/leodido/go-urn v1.2.4 // 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-20211012122336-39d0f177ccd0 // indirect github.com/magiconair/properties v1.8.7 // indirect - github.com/mattn/go-colorable v0.1.12 // indirect github.com/mattn/go-isatty v0.0.19 // indirect - github.com/mattn/goveralls v0.0.2 // indirect github.com/metaleap/go-util v0.0.0-20180330192724-a09253046f73 // indirect - github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b // indirect github.com/mitchellh/mapstructure v1.5.0 // 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/nsqio/go-nsq v1.0.8 // indirect - github.com/nyaruka/phonenumbers v1.0.55 // indirect github.com/pelletier/go-toml/v2 v2.0.8 // indirect github.com/pkg/errors v0.9.1 // indirect - github.com/pkg/sftp v1.13.6 github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect github.com/prometheus/client_golang v1.19.1 - 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.1.0 // indirect github.com/shoenig/go-m1cpu v0.1.6 // indirect github.com/spf13/cast v1.5.1 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect - github.com/spf13/pflag v1.0.5 github.com/subosito/gotenv v1.4.2 // indirect github.com/syndtr/goleveldb v1.0.0 // indirect github.com/tebeka/strftime v0.1.5 // indirect github.com/tklauser/go-sysconf v0.3.11 // indirect github.com/tklauser/numcpus v0.6.0 // indirect - github.com/tsuyoshiwada/go-gitcmd v0.0.0-20180205145712-5f1f5f9475df // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // indirect github.com/ugorji/go/codec v1.2.11 // indirect - github.com/urfave/cli v1.22.1 // indirect github.com/xuri/efp v0.0.0-20220603152613-6918739fd470 // indirect github.com/xuri/nfp v0.0.0-20220409054826-5e722a1d9e22 // indirect 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.21.0 golang.org/x/sys v0.17.0 // indirect - golang.org/x/text v0.14.0 golang.org/x/tools v0.16.1 // indirect google.golang.org/protobuf v1.33.0 // indirect - gopkg.in/AlecAivazis/survey.v1 v1.8.5 // indirect gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // 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 xorm.io/builder v0.3.11-0.20220531020008-1bd24a7dc978 // indirect ) diff --git a/go.sum b/go.sum index e0c3d724..50c4e307 100644 --- a/go.sum +++ b/go.sum @@ -41,11 +41,8 @@ gitea.com/xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a/go.mod h1:EXuID2Zs0p gitee.com/travelliu/dm v1.8.11192/go.mod h1:DHTzyhCrM843x9VdKVbZ+GKXGRbKM2sJ4LxihRxShkE= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/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/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/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= @@ -72,27 +69,15 @@ github.com/bsm/ginkgo/v2 v2.9.5 h1:rtVBYPs3+TC5iLUVOis1B9tjLTup7Cj5IfzosKtvTJ0= github.com/bsm/ginkgo/v2 v2.9.5/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c= github.com/bsm/gomega v1.26.0 h1:LhQm+AFcgV2M0WyKroMASzAzCAJVpAxQXv4SaI9a69Y= github.com/bsm/gomega v1.26.0/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0= -github.com/bsm/redislock v0.8.2 h1:W0aDRjt6FNmAZovbG2fPyjl1YZZdlqMkCKKCffJew1o= -github.com/bsm/redislock v0.8.2/go.mod h1:tC0JZxZCdJN4DCB31cGxgjgf/ye1R4LLNJQd5ecjg08= -github.com/bytedance/go-tagexpr/v2 v2.7.12 h1:qL2f0j11S8DHQsUWUA6aacLNBcbPTbNKuzVjaW4kF/M= -github.com/bytedance/go-tagexpr/v2 v2.7.12/go.mod h1:cKpo/rwg2Y5Njs8SX3FspMWEhAWCaF4xUr5LJYXibSU= github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= github.com/bytedance/sonic v1.9.1 h1:6iJ6NqdoxCDr6mbY8h18oSO+cShGSMRGCEo7F2h0x8s= github.com/bytedance/sonic v1.9.1/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= -github.com/casbin/casbin/v2 v2.54.0 h1:NFQ3Xkw6rfbD/rwEHMVRHVP5gUxhNQKdcZCb53pwSrA= -github.com/casbin/casbin/v2 v2.54.0/go.mod h1:vByNa/Fchek0KZUgG5wEsl7iFsiviAYKRtgrQfcJqHg= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/chanxuehong/rand v0.0.0-20201110082127-2f19a1bdd973 h1:Js/7nHtkpvUW62passc9FOflXyLQDjSoYclkFeDdTEM= -github.com/chanxuehong/rand v0.0.0-20201110082127-2f19a1bdd973/go.mod h1:9+sJ9zvvkXC5sPjPEZM3Jpb9n2Q2VtcrGZly0UHYF5I= -github.com/chanxuehong/util v0.0.0-20200304121633-ca8141845b13/go.mod h1:XEYt99iTxMqkv+gW85JX/DdUINHUe43Sbe5AtqSaDAQ= -github.com/chanxuehong/wechat v0.0.0-20201110083048-0180211b69fd h1:TM3wjEWel4U31J72dlhnwCBqPC0+FA0Ejm2NCbn5a5U= -github.com/chanxuehong/wechat v0.0.0-20201110083048-0180211b69fd/go.mod h1:/dvhOIRCjjiZu6NV0QTTiMcc5XwoORbxfDSsRY2IfaM= github.com/chenjiandongx/ginprom v0.0.0-20210617023641-6c809602c38a h1:yTfhjWYoPomJkHVArtNHpo36FuOa6Kc2ZjTLvyyQ5Lg= github.com/chenjiandongx/ginprom v0.0.0-20210617023641-6c809602c38a/go.mod h1:lINNCb1ZH3c0uL/9ApaQ8muR4QILsi0STj8Ojt8ZmwU= github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY= @@ -115,11 +100,7 @@ github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7 github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= 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/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/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= -github.com/creack/pty v1.1.9 h1:uDmaGzcdjhF4i/plgjmEsriH11Y0o7RKapEf/LDaM3w= -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= @@ -146,8 +127,6 @@ github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7 github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239 h1:Ghm4eQYC0nEPnSJdVkTrXpu9KtoVCSo1hg7mtI7G9KU= github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239/go.mod h1:Gdwt2ce0yfBxPvZrHkprdPPTTS3N5rwmLE8T22KBXlw= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= -github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= @@ -163,14 +142,6 @@ 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-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg= github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU= -github.com/git-chglog/git-chglog v0.0.0-20190611050339-63a4e637021f h1:8l4Aw3Jmx0pLKYMkY+1b6yBPgE+rzRtA5T3vqFyI2Z8= -github.com/git-chglog/git-chglog v0.0.0-20190611050339-63a4e637021f/go.mod h1:Dcsy1kii/xFyNad5JqY/d0GO5mu91sungp5xotbm3Yk= -github.com/go-admin-team/go-admin-core v1.3.12-0.20221121065133-27b7dbe27a8f h1:2xHpluWqY/ZlYoUpOU8VwDponYSnukRDhkOr7rk3ffU= -github.com/go-admin-team/go-admin-core v1.3.12-0.20221121065133-27b7dbe27a8f/go.mod h1:a9/XW1rCChPLVJ3bST13hB6R8YfVjYeF0GYjb8If6Yg= -github.com/go-admin-team/go-admin-core/sdk v1.5.1 h1:U1VaXuMrMmeLiQyJipqnTxHE84vspaK++wkTWfYpcOI= -github.com/go-admin-team/go-admin-core/sdk v1.5.1/go.mod h1:yNoHmYZtGc1WFWZwhAop0sSyZhsrsSGqvje2yvClXjE= -github.com/go-admin-team/redisqueue/v2 v2.0.0-20221119141731-97c556b0d5b7 h1:p1cq6CN47zEbDt8EWBX3mOZpIa4zVwHCrXcy0NwD+So= -github.com/go-admin-team/redisqueue/v2 v2.0.0-20221119141731-97c556b0d5b7/go.mod h1:XGwBJD4aMmHSoJFPKs4vcW4Y5s+8MV1gHR+P0Uxe9Eg= 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-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= @@ -193,10 +164,6 @@ github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91 github.com/go-playground/validator/v10 v10.14.0 h1:vgvQWe3XCz3gIeFDm/HnTIbj6UGmg/+t63MyGU2n5js= github.com/go-playground/validator/v10 v10.14.0/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU= github.com/go-redis/redis v6.15.5+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= -github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI= -github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo= -github.com/go-redis/redis/v9 v9.0.0-rc.1 h1:/+bS+yeUnanqAbuD3QwlejzQZ+4eqgfUtFTG4b+QnXs= -github.com/go-redis/redis/v9 v9.0.0-rc.1/go.mod h1:8et+z03j0l8N+DvsVnclzjf3Dl/pFHgRk+2Ct1qw66A= github.com/go-resty/resty/v2 v2.7.0 h1:me+K9p3uhSmXtrBZ4k9jcEAfJmuC8IivWHwaLZwPrFY= github.com/go-resty/resty/v2 v2.7.0/go.mod h1:9PWDzw47qPphMRFfhsyk0NnSgvluHcljSMVIq3w7q0I= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= @@ -215,7 +182,6 @@ github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFG github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= -github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/golang-jwt/jwt/v5 v5.0.0 h1:1n1XNM9hk7O9mnQoNBGolZvzebBQ7p93ULHRc28XJUE= github.com/golang-jwt/jwt/v5 v5.0.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= @@ -233,8 +199,6 @@ github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= -github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -249,10 +213,6 @@ github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvq github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= @@ -269,7 +229,6 @@ github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5/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= @@ -288,7 +247,6 @@ github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -298,7 +256,6 @@ github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+ github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= @@ -335,20 +292,10 @@ github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= -github.com/henrylee2cn/ameda v1.4.8/go.mod h1:liZulR8DgHxdK+MEwvZIylGnmcjzQ6N6f2PlWe7nEO4= -github.com/henrylee2cn/ameda v1.4.10 h1:JdvI2Ekq7tapdPsuhrc4CaFiqw6QXFvZIULWJgQyCAk= -github.com/henrylee2cn/ameda v1.4.10/go.mod h1:liZulR8DgHxdK+MEwvZIylGnmcjzQ6N6f2PlWe7nEO4= -github.com/henrylee2cn/goutil v0.0.0-20210127050712-89660552f6f8 h1:yE9ULgp02BhYIrO6sdV/FPe0xQM6fNHkVQW2IAymfM0= -github.com/henrylee2cn/goutil v0.0.0-20210127050712-89660552f6f8/go.mod h1:Nhe/DM3671a5udlv2AdV2ni/MZzgfv2qrPL5nIi3EGQ= -github.com/hinshun/vt10x v0.0.0-20180616224451-1954e6464174 h1:WlZsjVhE8Af9IcZDGgJGQpNflI3+MJSBhsgT5PCtzBQ= -github.com/hinshun/vt10x v0.0.0-20180616224451-1954e6464174/go.mod h1:DqJ97dSdRW1W22yXSB90986pcOyQ7r45iio1KN2ez1A= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/imdario/mergo v0.3.7/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.9 h1:UauaLniWCFHWd+Jp9oCEkTBj8VO/9DKg3PV3VCNMDIg= -github.com/imdario/mergo v0.3.9/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/jackc/chunkreader v1.0.0/go.mod h1:RT6O25fNZIuasFJRyZ4R/Y2BbhasbmZXF9QQ7T3kePo= @@ -416,13 +363,11 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= 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/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= -github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk= @@ -436,7 +381,6 @@ github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORN github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= 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= @@ -470,9 +414,6 @@ github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaO github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= -github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= @@ -480,22 +421,17 @@ github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hd github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-sqlite3 v1.14.9/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= github.com/mattn/go-sqlite3 v1.14.15 h1:vfoHhTN1af61xCRSWzFIWzx2YskyMTwHLrExkBOjvxI= github.com/mattn/go-sqlite3 v1.14.15/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= -github.com/mattn/goveralls v0.0.2 h1:7eJB6EqsPhRVxvwEXGnqdO2sJI0PTsrWoTMXEk9/OQc= -github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= 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/mgutz/ansi v0.0.0-20170206155736-9520e82c474b h1:j7+1HpAFS1zy5+Q4qx1fWh90gTKwiN4QCGoY9TWyyO4= -github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= @@ -527,13 +463,9 @@ 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/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= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= -github.com/nyaruka/phonenumbers v1.0.55 h1:bj0nTO88Y68KeUQ/n3Lo2KgK7lM1hF7L9NFuwcCl3yg= -github.com/nyaruka/phonenumbers v1.0.55/go.mod h1:sDaTZ/KPX5f8qyV9qN+hIm+4ZBARJrupC6LuhshJq1U= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= @@ -541,16 +473,12 @@ github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+W github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= -github.com/onsi/ginkgo/v2 v2.0.0/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.0/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.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= -github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= 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/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= @@ -566,7 +494,6 @@ github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIw github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= 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/pborman/uuid v1.2.0 h1:J7Q5mO4ysT1dv8hyrUGHb9+ooztCXu1D8MY8DZYsu3g= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ= github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4= @@ -578,9 +505,8 @@ github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= +github.com/pkg/sftp v1.13.1 h1:I2qBYMChEhIjOgazfJmV3/mZM256btk6wkCDRmW7JYs= github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= -github.com/pkg/sftp v1.13.6 h1:JFZT4XbOU7l77xGSpOdW+pwIMqP044IyjXX6FGyEKFo= -github.com/pkg/sftp v1.13.6/go.mod h1:tz1ryNURKu77RL+GuCzmoJYxQczL3wLNNpPWagdg4Qk= 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/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= @@ -615,10 +541,6 @@ github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3c github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/redis/go-redis/v9 v9.1.0 h1:137FnGdk+EQdCbye1FW+qOEcY5S+SpY9T0NiuqvtfMY= github.com/redis/go-redis/v9 v9.1.0/go.mod h1:urWj3He21Dj5k4TK1y59xH8Uj6ATueP8AH1cY3lZl4c= -github.com/reiver/go-oi v1.0.0 h1:nvECWD7LF+vOs8leNGV/ww+F2iZKf3EYjYZ527turzM= -github.com/reiver/go-oi v1.0.0/go.mod h1:RrDBct90BAhoDTxB1fenZwfykqeGvhI6LsNfStJoEkI= -github.com/reiver/go-telnet v0.0.0-20180421082511-9ff0b2ab096e h1:quuzZLi72kkJjl+f5AQ93FMcadG19WkS7MO6TXFOSas= -github.com/reiver/go-telnet v0.0.0-20180421082511-9ff0b2ab096e/go.mod h1:+5vNVvEWwEIx86DB9Ke/+a5wBI464eDRo3eF0LcfpWg= github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 h1:OdAsTTz6OkFY5QxjkYwrChwuRruF69c169dPK26NUlk= github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/richardlehane/mscfb v1.0.4 h1:WULscsljNPConisD5hR0+OyZjwK46Pfyr6mPu5ZawpM= @@ -636,8 +558,6 @@ github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc= 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= @@ -657,9 +577,7 @@ github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeV github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= @@ -683,7 +601,6 @@ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/testify v1.2.1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= 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.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -703,22 +620,16 @@ github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFd github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= github.com/tebeka/strftime v0.1.5 h1:1NQKN1NiQgkqd/2moD6ySP/5CoZQsKa1d3ZhJ44Jpmg= github.com/tebeka/strftime v0.1.5/go.mod h1:29/OidkoWHdEKZqzyDLUyC+LmgDgdHo4WAFCDT7D/Ig= -github.com/tidwall/gjson v1.6.0/go.mod h1:P256ACg0Mn+j1RXIDXoss50DeIABTYK1PULOJHhxOls= -github.com/tidwall/match v1.0.1/go.mod h1:LujAq0jyVjBy028G1WhWfIzbpQfMO8bBZ6Tyb0+pL9E= -github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tklauser/go-sysconf v0.3.11 h1:89WgdJhk5SNwJfu+GKyYveZ4IaJ7xAkecBo+KdJV0CM= github.com/tklauser/go-sysconf v0.3.11/go.mod h1:GqXfhXY3kiPa0nAXPDIQIWzJbMCB7AmcWpGR8lSZfqI= github.com/tklauser/numcpus v0.6.0 h1:kebhY2Qt+3U6RNK7UqpYNA+tJ23IBEGKkB7JQBfDYms= github.com/tklauser/numcpus v0.6.0/go.mod h1:FEZLMke0lhOUG6w2JadTzp0a+Nl8PF/GFkQ5UVIcaL4= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tsuyoshiwada/go-gitcmd v0.0.0-20180205145712-5f1f5f9475df h1:Y2l28Jr3vOEeYtxfVbMtVfOdAwuUqWaP9fvNKiBVeXY= -github.com/tsuyoshiwada/go-gitcmd v0.0.0-20180205145712-5f1f5f9475df/go.mod h1:pnyouUty/nBr/zm3GYwTIt+qFTLWbdjeLjZmJdzJOu8= 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.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU= github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= 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/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xuri/efp v0.0.0-20220603152613-6918739fd470 h1:6932x8ltq1w4utjmfMPVj09jdMlkY0aiA6+Skbtl3/c= @@ -738,8 +649,6 @@ github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFi github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0= -github.com/ziutek/telnet v0.0.0-20180329124119-c3b780dc415b h1:VfPXB/wCGGt590QhD1bOpv2J/AmC/RJNTg/Q59HKSB0= -github.com/ziutek/telnet v0.0.0-20180329124119-c3b780dc415b/go.mod h1:IZpXDfkJ6tWD3PhBK5YzgQT+xJWh7OsdwiG8hA2MkO4= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= @@ -766,7 +675,6 @@ golang.org/x/arch v0.3.0 h1:02VY4/ZcO/gBOH6PUaoiptASxtXU10jazRCP865E97k= golang.org/x/arch v0.3.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190123085648-057139ce5d2b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190411191339-88737f569e3a/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= @@ -784,7 +692,6 @@ golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE= golang.org/x/crypto v0.19.0 h1:ENy+Az/9Y1vSrlrvBSyna3PITt4tiZLf7sgCjZBX7Wo= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= @@ -868,11 +775,9 @@ golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20211029224645-99673261e6eb/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= 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.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= @@ -901,7 +806,6 @@ golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sys v0.0.0-20180606202747-9527bec2660b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -959,16 +863,12 @@ golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210902050250-f475640dd07b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/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-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -979,7 +879,6 @@ golang.org/x/sys v0.17.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= -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.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= golang.org/x/term v0.17.0 h1:mkTF7LCd6WGJNL3K1Ad7kwxNfYAW6a8a8QqtMblp/4U= @@ -992,7 +891,6 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/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.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= @@ -1004,7 +902,6 @@ golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= @@ -1165,12 +1062,8 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= -gopkg.in/AlecAivazis/survey.v1 v1.8.5 h1:QoEEmn/d5BbuPIL2qvXwzJdttFFhRQFkaq+tEKb7SMI= -gopkg.in/AlecAivazis/survey.v1 v1.8.5/go.mod h1:iBNOmqKz/NUbZx3bA+4hAGLRC7fSK7tgtVDT4tB22XA= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= 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= @@ -1187,8 +1080,6 @@ gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df/go.mod h1:LRQQ+SO6ZHR7tOkp gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s= 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/kyokomi/emoji.v1 v1.5.1 h1:beetH5mWDMzFznJ+Qzd5KVHp79YKhVUMcdO8LpRLeGw= -gopkg.in/kyokomi/emoji.v1 v1.5.1/go.mod h1:N9AZ6hi1jHOPn34PsbpufQZUcKftSD7WgS2pgpmH4Lg= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= 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= @@ -1198,8 +1089,6 @@ gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/tools/websocket/load.go b/tools/websocket/load.go deleted file mode 100644 index 37f6127e..00000000 --- a/tools/websocket/load.go +++ /dev/null @@ -1,94 +0,0 @@ -package main - -import ( - "flag" - "fmt" - "io/ioutil" - "os" - "strings" - - "be.ems/lib/log" - "gopkg.in/yaml.v3" -) - -// Yaml struct of config -type YamlConfig struct { - Logger struct { - File string `yaml:"file"` - Level string `yaml:"level"` - Duration int `yaml:"duration"` - } - - Rest struct { - BindIP string `yaml:"bindip"` - Port uint16 `yaml:"port"` - } -} - -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 GetLogLevel() log.LogLevel { - var logLevel log.LogLevel - switch strings.ToLower(yamlConfig.Logger.Level) { - case "trace": - logLevel = log.LOG_TRACE - case "info": - logLevel = log.LOG_INFO - case "debug": - logLevel = log.LOG_DEBUG - case "warn": - logLevel = log.LOG_WARN - case "error": - logLevel = log.LOG_ERROR - case "fatal": - logLevel = log.LOG_FATAL - case "off": - logLevel = log.LOG_OFF - default: - logLevel = log.LOG_DEBUG - } - return logLevel -} - -const defaultConfigFile = "./tt.yaml" - -var ( - version string - buildTime string - goVer string -) - -func init() { - cfile := flag.String("c", defaultConfigFile, "config file") - pv := flag.Bool("v", false, "print version") - ph := flag.Bool("h", false, "print help") - - flag.Parse() - if *pv { - fmt.Printf("OMC version: %s\n%s\n%s\n\n", version, buildTime, goVer) - os.Exit(0) - } - if *ph { - flag.Usage() - os.Exit(0) - } - - ReadConfig(*cfile) -} diff --git a/tools/websocket/tt.go b/tools/websocket/tt.go deleted file mode 100644 index a45007a2..00000000 --- a/tools/websocket/tt.go +++ /dev/null @@ -1,87 +0,0 @@ -package main - -import ( - "fmt" - "net" - "os" - "time" - - "be.ems/lib/log" -) - -const ( - //经过测试,linux下,延时需要大于100ms - TIME_DELAY_AFTER_WRITE = 500 //500ms -) - -func main() { - log.InitLogger(yamlConfig.Logger.File, yamlConfig.Logger.Duration, "omc:tt", GetLogLevel()) - fmt.Printf("OMC tt version: %s\n", version) - log.Infof("========================= OMC tt startup =========================") - log.Infof("OMC tt version: %s %s %s", version, buildTime, goVer) - - conn, err := net.Dial("tcp", "192.168.4.233:4100") - if err != nil { - fmt.Fprintf(os.Stderr, "Error: %s", err.Error()) - return - } - var buf [8192]byte - var n int - - n, err = conn.Write([]byte("admin\nadmin\n")) - if err != nil { - fmt.Fprintf(os.Stderr, "Error: %s", err.Error()) - return - } - time.Sleep(time.Millisecond * TIME_DELAY_AFTER_WRITE) - - n, err = conn.Read(buf[0:]) - if err != nil { - fmt.Fprintf(os.Stderr, "Error: %s", err.Error()) - return - } - log.Debug(string(buf[0:n])) - - n, err = conn.Write([]byte("date\n")) - if err != nil { - fmt.Fprintf(os.Stderr, "Error: %s", err.Error()) - return - } - time.Sleep(time.Millisecond * TIME_DELAY_AFTER_WRITE) - - n, err = conn.Read(buf[0:]) - if err != nil { - fmt.Fprintf(os.Stderr, "Error: %s", err.Error()) - return - } - log.Debug(string(buf[0 : n-5])) - - /* - n, err = conn.Write([]byte("\n")) - if err != nil { - fmt.Fprintf(os.Stderr, "Error: %s", err.Error()) - return - } - time.Sleep(time.Millisecond * TIME_DELAY_AFTER_WRITE) - - n, err = conn.Read(buf[0:]) - if err != nil { - fmt.Fprintf(os.Stderr, "Error: %s", err.Error()) - return - } - log.Debug(string(buf[0:n])) - - log.Debug(string(buf[0:n])) - */ - /* n, err = conn.Write([]byte("\n")) - if err != nil { - fmt.Fprintf(os.Stderr, "Error: %s", err.Error()) - return - } - n, err = conn.Read(buf[0:]) - if err != nil { - fmt.Fprintf(os.Stderr, "Error: %s", err.Error()) - return - } - */ -} diff --git a/tools/websocket/tt.yaml b/tools/websocket/tt.yaml deleted file mode 100644 index 07b5a159..00000000 --- a/tools/websocket/tt.yaml +++ /dev/null @@ -1,15 +0,0 @@ -logger: - file: ./tt.log - level: trace - -rest: - addr: 0.0.0.0 - port: 3040 - -database: - type: mysql - user: root - password: 1000omc@kp! - host: 127.0.0.1 - port: 33066 - name: omc_db diff --git a/tools/websocket/ttt.go b/tools/websocket/ttt.go deleted file mode 100644 index db761727..00000000 --- a/tools/websocket/ttt.go +++ /dev/null @@ -1,11 +0,0 @@ -package main - -import ( - "github.com/reiver/go-telnet" -) - -func main() { - var caller telnet.Caller = telnet.StandardCaller - - telnet.DialToAndCall("192.168.4.233:4100", caller) -} diff --git a/tools/websocket/websocket.go b/tools/websocket/websocket.go deleted file mode 100644 index 011d3fef..00000000 --- a/tools/websocket/websocket.go +++ /dev/null @@ -1,301 +0,0 @@ -package main - -import ( - "fmt" - "io" - "net" - "net/http" - "os" - "time" - - "github.com/gin-gonic/gin" - "github.com/go-admin-team/go-admin-core/sdk/api" - "github.com/gorilla/websocket" - "github.com/ziutek/telnet" - "golang.org/x/crypto/ssh" - "golang.org/x/crypto/ssh/terminal" -) - -type TgWs struct { - api.Api -} - -var upGrader = websocket.Upgrader{ - ReadBufferSize: 1024, - WriteBufferSize: 1024 * 1024 * 10, - CheckOrigin: func(r *http.Request) bool { - return true - }, -} - -type ShellInfoStruct struct { - Proto string `json:"proto"` - IpAddr string `json:"ipaddr"` - Port string `json:"port"` -} - -type wsWrapper struct { - *websocket.Conn -} - -func main() { - telnetHandle(rw io.ReadWriter, ip, port string, errhandle func(string)) { - -} - -func init() { - routerCheckRole = append(routerCheckRole, registerTgWsRouter) -} - -// 需认证的路由代码 -func registerTgWsRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) { - api := apis.TgWs{} - r := v1.Group("") - { - // 协议、IP、端口 - r.GET("/tgws/:proto/:ipaddr/:port", api.TgWsWeb) - } -} - -func (e TgWs) TgWsWeb(c *gin.Context) { - // 初始化返回信息 - err := e.MakeContext(c).Errors - if err != nil { - e.Logger.Error(err) - e.Error(500, err, fmt.Sprintf(" %s ", err.Error())) - return - } - - // 升级为websocket - wsConn, err := upGrader.Upgrade(c.Writer, c.Request, nil) - if err != nil { - e.Logger.Error(err) - e.Error(500, err, "websocket client connect error") - return - } - defer wsConn.Close() - - proto := c.Param("proto") - ipaddr := c.Param("ipaddr") - port := c.Param("port") - shellinfo := ShellInfoStruct{ - Proto: proto, - IpAddr: ipaddr, - Port: port, - } - quitChan := make(chan bool, 1) - go websocketHandle(wsConn, shellinfo, quitChan) - <-quitChan -} - -func websocketHandle(con *websocket.Conn, shellinfo ShellInfoStruct, exitCh chan bool) { - defer setQuit(exitCh) - rw := io.ReadWriter(&wsWrapper{con}) - webprintln := func(data string) { - rw.Write([]byte(data + "\r\n")) - } - con.SetCloseHandler(func(code int, text string) error { - con.Close() - return nil - }) - switch shellinfo.Proto { - case "ssh": - sshHandle(rw, shellinfo.IpAddr, shellinfo.Port, "XXX", "XXX", webprintln) - case "telnet": - telnetHandle(rw, shellinfo.IpAddr, shellinfo.Port, webprintln) - case "bind_shell": - bindShellHandler(rw, shellinfo.IpAddr, shellinfo.Port, webprintln) - default: - webprintln("Not Support Protocol '" + shellinfo.Proto + "'") - } - return -} - -func (wsw *wsWrapper) Write(p []byte) (n int, err error) { - writer, err := wsw.Conn.NextWriter(websocket.TextMessage) - if err != nil { - return 0, err - } - defer writer.Close() - return writer.Write(p) -} - -func (wsw *wsWrapper) Read(p []byte) (n int, err error) { - for { - msgType, reader, err := wsw.Conn.NextReader() - if err != nil { - return 0, err - } - if msgType != websocket.TextMessage { - continue - } - return reader.Read(p) - } -} - -// SSH连接 -func sshHandle(rw io.ReadWriter, ip, port, user, passwd string, errhandle func(string)) { - sshConfig := &ssh.ClientConfig{ - User: user, - Auth: []ssh.AuthMethod{ssh.Password(passwd)}, - Timeout: 6 * time.Second, - } - sshConfig.HostKeyCallback = ssh.InsecureIgnoreHostKey() - if port == "" { - ip = ip + ":22" - } else { - ip = ip + ":" + port - } - client, err := ssh.Dial("tcp", ip, sshConfig) - if err != nil { - errhandle(err.Error()) - return - } - defer client.Close() - session, err := client.NewSession() - if err != nil { - errhandle(err.Error()) - return - } - defer session.Close() - fd := int(os.Stdin.Fd()) - session.Stdout = rw - session.Stderr = rw - session.Stdin = rw - modes := ssh.TerminalModes{ - ssh.ECHO: 1, - ssh.TTY_OP_ISPEED: 14400, - ssh.TTY_OP_OSPEED: 14400, - } - termWidth, termHeight, err := terminal.GetSize(fd) - err = session.RequestPty("xterm", termHeight, termWidth, modes) - if err != nil { - errhandle(err.Error()) - } - err = session.Shell() - if err != nil { - errhandle(err.Error()) - } - err = session.Wait() - if err != nil { - errhandle(err.Error()) - } - return -} - -// telnet连接 -func telnetHandle(rw io.ReadWriter, ip, port string, errhandle func(string)) { - if port == "" { - ip = ip + ":23" - } else { - ip = ip + ":" + port - } - con, err := telnet.Dial("tcp", ip) - if err != nil { - errhandle(err.Error()) - return - } - defer con.Close() - buf := make([]byte, 16*1024) - - // 从远端读取返回结果并回显页面 - go func() { - for { - n, err := con.Read(buf) - if err != nil { - errhandle(err.Error()) - break - } - _, err = rw.Write(buf[:n]) - if err != nil { - errhandle(err.Error()) - break - } - } - }() - - for { - // 从页面读取命令 - n, err := rw.Read(buf) - if err != nil { - errhandle(err.Error()) - break - } - if buf[0] == 13 { // 处理换行 - data := []byte{telnet.CR, telnet.LF} - _, err = con.Write(data) - } else { - _, err = con.Write(buf[:n]) - } - if err != nil { - errhandle(err.Error()) - break - } - } - return -} - -// 正向shell -func bindShellHandler(rw io.ReadWriter, ip, port string, errhandle func(string)) { - server := ip + ":" + port - //获取命令行参数 socket地址 - addr, err := net.ResolveTCPAddr("tcp4", server) - if err != nil { - errhandle(err.Error()) - return - } - //建立tcp连接 - con, err := net.DialTCP("tcp4", nil, addr) - if err != nil { - errhandle(err.Error()) - return - } - rw.Write([]byte("reverse shell connected " + "\r\n")) - defer con.Close() - buf := make([]byte, 16*1024) - - go func() { - for { - n, err := con.Read(buf) - if err != nil { - errhandle(err.Error()) - break - } - _, err = rw.Write(buf[:n]) - if err != nil { - errhandle(err.Error()) - break - } - } - }() - - for { - n, err := rw.Read(buf) - if err != nil { - errhandle(err.Error()) - break - } - _, err = rw.Write(buf[:n]) - if err != nil { - errhandle(err.Error()) - break - } - - if buf[0] == 13 { - data := []byte{telnet.LF} - _, err = con.Write(data) - rw.Write([]byte("\r\n")) - } else { - _, err = con.Write(buf[:n]) - } - if err != nil { - errhandle(err.Error()) - break - } - } - return -} - -func setQuit(ch chan bool) { - ch <- true -} diff --git a/tools/websocket/webtel.go b/tools/websocket/webtel.go deleted file mode 100644 index 9fe3ad62..00000000 --- a/tools/websocket/webtel.go +++ /dev/null @@ -1,290 +0,0 @@ -package main - -import ( - "fmt" - "net" - "os" -) - -func main() { - conn, err := net.Dial("tcp", "192.168.4.233:4100") - if err != nil { - fmt.Sprint(os.Stderr, "Error: %s", err.Error()) - return - } - - var buf [16192]byte - /* - // for { - n, err := conn.Read(buf[0:]) - if err != nil { - fmt.Fprintf(os.Stderr, "Error: %s", err.Error()) - return - } - fmt.Println(string(buf[0:n])) - */ - n, err := conn.Write([]byte("admin\nadmin\n\ndate\n")) - if err != nil { - fmt.Fprintf(os.Stderr, "Error: %s", err.Error()) - return - } - /* - n, err = conn.Read(buf[0:]) - if err != nil { - fmt.Fprintf(os.Stderr, "Error: %s", err.Error()) - return - } - fmt.Println(string(buf[0:n])) - n, err = conn.Write([]byte("admin\n")) - if err != nil { - fmt.Fprintf(os.Stderr, "Error: %s\n", err.Error()) - return - } - */ - n, err = conn.Read(buf[0:]) - if err != nil { - fmt.Fprintf(os.Stderr, "Error: %s", err.Error()) - return - } - fmt.Println((string(buf[0:n]))) - fmt.Println(string(buf[0:n])) - - n, err = conn.Write([]byte("date\n")) - if err != nil { - fmt.Fprintf(os.Stderr, "Error: %s\n", err.Error()) - return - } - - n, err = conn.Read(buf[0:]) - if err != nil { - fmt.Fprintf(os.Stderr, "Error: %s", err.Error()) - return - } - fmt.Println((string(buf[0:n]))) - fmt.Println(string(buf[0:n])) - - /* - buf[1] = 252 - buf[4] = 252 - buf[7] = 252 - buf[10] = 252 - fmt.Println((buf[0:n])) - n, err = conn.Write(buf[0:n]) - if err != nil { - fmt.Fprintf(os.Stderr, "Error: %s\n", err.Error()) - return - } - - n, err = conn.Read(buf[0:]) - if err != nil { - fmt.Fprintf(os.Stderr, "Error: %s", err.Error()) - return - } - fmt.Println(string(buf[0:n])) - fmt.Println((buf[0:n])) - */ - /* - buf[1] = 252 - buf[4] = 251 - buf[7] = 252 - buf[10] = 254 - buf[13] = 252 - fmt.Println((buf[0:n])) - n, err = conn.Write(buf[0:n]) - if err != nil { - fmt.Fprintf(os.Stderr, "Error: %s\n", err.Error()) - return - } - - n, err = conn.Read(buf[0:]) - if err != nil { - fmt.Fprintf(os.Stderr, "Error: %s", err.Error()) - return - } - fmt.Println(string(buf[0:n])) - fmt.Println((buf[0:n])) - - buf[1] = 252 - buf[4] = 252 - fmt.Println((buf[0:n])) - n, err = conn.Write(buf[0:n]) - if err != nil { - fmt.Fprintf(os.Stderr, "Error: %s\n", err.Error()) - return - } - - n, err = conn.Read(buf[0:]) - if err != nil { - fmt.Fprintf(os.Stderr, "Error: %s", err.Error()) - return - } - fmt.Println(string(buf[0:n])) - fmt.Println((buf[0:n])) - */ - /* - buf[0] = 255 - buf[1] = 252 - buf[2] = 1 - buf[3] = 255 - buf[4] = 253 - buf[5] = 1 - buf[6] = 255 - buf[7] = 252 - buf[8] = 1 - buf[9] = 255 - buf[10] = 253 - buf[11] = 1 - fmt.Println((buf[0:12])) - n, err = conn.Write(buf[0:12]) - if err != nil { - fmt.Fprintf(os.Stderr, "Error: %s\n", err.Error()) - return - } - - n, err = conn.Read(buf[0:]) - if err != nil { - fmt.Fprintf(os.Stderr, "Error: %s", err.Error()) - return - } - */ - /* - n, err = conn.Write([]byte("admin\n")) - if err != nil { - fmt.Fprintf(os.Stderr, "Error: %s\n", err.Error()) - return - } - - n, err = conn.Read(buf[0:]) - if err != nil { - fmt.Fprintf(os.Stderr, "Error: %s", err.Error()) - return - } - - fmt.Println(string(buf[0:n])) - - n, err = conn.Write([]byte("\n")) - if err != nil { - fmt.Fprintf(os.Stderr, "Error: %s\n", err.Error()) - return - } - - n, err = conn.Read(buf[0:]) - if err != nil { - fmt.Fprintf(os.Stderr, "Error: %s", err.Error()) - return - } - fmt.Println(string(buf[0:n])) - - for { - n, err = conn.Read(buf[0:]) - if err != nil { - fmt.Fprintf(os.Stderr, "Error: %s", err.Error()) - return - } - fmt.Println(string(buf[0:n])) - if strings.HasSuffix(string(buf[0:n]), "> ") { - break - } - } - - n, err = conn.Write([]byte("enable\n")) - if err != nil { - fmt.Fprintf(os.Stderr, "Error: %s", err.Error()) - return - } - - n, err = conn.Read(buf[0:]) - if err != nil { - fmt.Fprintf(os.Stderr, "Error: %s", err.Error()) - return - } - fmt.Println(string(buf[0:n])) - - n, err = conn.Write([]byte("terminal length 0\n")) - if err != nil { - fmt.Fprintf(os.Stderr, "Error: %s", err.Error()) - return - } - - n, err = conn.Read(buf[0:]) - if err != nil { - fmt.Fprintf(os.Stderr, "Error: %s", err.Error()) - return - } - fmt.Println(string(buf[0:n])) - - n, err = conn.Write([]byte("show port\n")) - if err != nil { - fmt.Fprintf(os.Stderr, "Error: %s", err.Error()) - return - } - - for { - n, err = conn.Read(buf[0:]) - if err != nil { - fmt.Fprintf(os.Stderr, "Error: %s", err.Error()) - return - } - fmt.Println(string(buf[0:n])) - if strings.HasSuffix(string(buf[0:n]), "# ") { - break - } - } - - n, err = conn.Write([]byte("show interface\n\n")) - if err != nil { - fmt.Fprintf(os.Stderr, "Error: %s", err.Error()) - return - } - - for { - n, err = conn.Read(buf[0:]) - if err != nil { - fmt.Fprintf(os.Stderr, "Error: %s", err.Error()) - return - } - fmt.Println(string(buf[0:n])) - if strings.HasSuffix(string(buf[0:n]), "# ") { - break - } - } - - n, err = conn.Write([]byte("show running-config\n")) - if err != nil { - fmt.Fprintf(os.Stderr, "Error: %s", err.Error()) - return - } - - reader := bufio.NewReader(conn) - if reader == nil { - fmt.Fprintf(os.Stderr, "Create reader failed.") - } - - for { - n, err := reader.Read(buf[0:]) - if err != nil { - fmt.Fprintf(os.Stderr, "Error: %s", err.Error()) - return - } - fmt.Println(string(buf[0:n])) - if strings.HasSuffix(string(buf[0:n]), "# ") { - break - } - } - */ - /* - for { - n, err = conn.Read(buf[0:]) - if err != nil { - fmt.Fprintf(os.Stderr, "Error: %s", err.Error()) - return - } - fmt.Println(string(buf[0:n])) - fmt.Println(n) - if strings.HasSuffix(string(buf[0:n]), "# ") { - break - } - - } - */ -} diff --git a/tools/websocket/webtelnet.go b/tools/websocket/webtelnet.go deleted file mode 100644 index 41b066c3..00000000 --- a/tools/websocket/webtelnet.go +++ /dev/null @@ -1,218 +0,0 @@ -package main - -import ( - "bufio" - "fmt" - "io" - "log" - "net" - "os" - "strings" - "time" -) - -type TelnetClient struct { - IP string - Port string - IsAuthentication bool - UserName string - Password string -} - -const ( - //经过测试,linux下,延时需要大于100ms - TIME_DELAY_AFTER_WRITE = 500 //500ms -) - -var g_WriteChan chan string - -func main() { - g_WriteChan = make(chan string) - telnetClientObj := new(TelnetClient) - telnetClientObj.IP = "192.168.4.233" - telnetClientObj.Port = "4100" - telnetClientObj.IsAuthentication = true - telnetClientObj.UserName = "admin" - telnetClientObj.Password = "admin" - //fmt.Println(telnetClientObj.PortIsOpen(5)) - go telnetClientObj.Telnet(20) - - for { - line := readLine() - g_WriteChan <- string(line) - } -} - -func readLine() string { - //fmt.Print("> ") - line, err := bufio.NewReader(os.Stdin).ReadString('\n') - if err != nil && err != io.EOF { - log.Fatal(err) - } - return strings.TrimSpace(line) -} - -func (this *TelnetClient) PortIsOpen(timeout int) bool { - raddr := this.IP + ":" + this.Port - conn, err := net.DialTimeout("tcp", raddr, time.Duration(timeout)*time.Second) - if nil != err { - log.Println("pkg: model, func: PortIsOpen, method: net.DialTimeout, errInfo:", err) - return false - } - defer conn.Close() - return true -} - -func (this *TelnetClient) Telnet(timeout int) (err error) { - raddr := this.IP + ":" + this.Port - conn, err := net.DialTimeout("tcp", raddr, time.Duration(timeout)*time.Second) - if nil != err { - log.Println("pkg: model, func: Telnet, method: net.DialTimeout, errInfo:", err) - return - } - defer conn.Close() - if false == this.telnetProtocolHandshake(conn) { - log.Println("pkg: model, func: Telnet, method: this.telnetProtocolHandshake, errInfo: telnet protocol handshake failed!!!") - return - } - go func() { - for { - data := make([]byte, 1024) - _, err := conn.Read(data) - if err != nil { - fmt.Println(err) - break - } - //strData := string(data) - fmt.Printf("%s", data) - } - }() - - // conn.SetReadDeadline(time.Now().Add(time.Second * 30)) - for { - select { - case cmd, _ := <-g_WriteChan: - _, err = conn.Write([]byte(cmd + "\n")) - if nil != err { - log.Println("pkg: model, func: Telnet, method: conn.Write, errInfo:", err) - return - } - break - default: - time.Sleep(100 * time.Millisecond) - continue - } - } - fmt.Println("Out telnet!!!!!!") - return -} - -func (this *TelnetClient) telnetProtocolHandshake(conn net.Conn) bool { - var buf [4096]byte - n, err := conn.Read(buf[0:]) - if nil != err { - log.Println("pkg: model, func: telnetProtocolHandshake, method: conn.Read, errInfo:", err) - return false - } - //fmt.Println(string(buf[0:n])) - //fmt.Println((buf[0:n])) - - buf[1] = 252 - buf[4] = 252 - buf[7] = 252 - buf[10] = 252 - //fmt.Println((buf[0:n])) - n, err = conn.Write(buf[0:n]) - if nil != err { - log.Println("pkg: model, func: telnetProtocolHandshake, method: conn.Write, errInfo:", err) - return false - } - - n, err = conn.Read(buf[0:]) - if nil != err { - log.Println("pkg: model, func: telnetProtocolHandshake, method: conn.Read, errInfo:", err) - return false - } - //fmt.Println(string(buf[0:n])) - //fmt.Println((buf[0:n])) - - buf[1] = 252 - buf[4] = 251 - buf[7] = 252 - buf[10] = 254 - buf[13] = 252 - fmt.Println((buf[0:n])) - n, err = conn.Write(buf[0:n]) - if nil != err { - log.Println("pkg: model, func: telnetProtocolHandshake, method: conn.Write, errInfo:", err) - return false - } - - n, err = conn.Read(buf[0:]) - if nil != err { - log.Println("pkg: model, func: telnetProtocolHandshake, method: conn.Read, errInfo:", err) - return false - } - //fmt.Println(string(buf[0:n])) - //fmt.Println((buf[0:n])) - - buf[1] = 252 - buf[4] = 252 - //fmt.Println((buf[0:n])) - n, err = conn.Write(buf[0:n]) - if nil != err { - log.Println("pkg: model, func: telnetProtocolHandshake, method: conn.Write, errInfo:", err) - return false - } - - n, err = conn.Read(buf[0:]) - if nil != err { - log.Println("pkg: model, func: telnetProtocolHandshake, method: conn.Read, errInfo:", err) - return false - } - //fmt.Println(string(buf[0:n])) - //fmt.Println((buf[0:n])) - - if false == this.IsAuthentication { - return true - } - - n, err = conn.Write([]byte(this.UserName + "\n")) - if nil != err { - log.Println("pkg: model, func: telnetProtocolHandshake, method: conn.Write, errInfo:", err) - return false - } - time.Sleep(time.Millisecond * TIME_DELAY_AFTER_WRITE) - - n, err = conn.Read(buf[0:]) - if nil != err { - log.Println("pkg: model, func: telnetProtocolHandshake, method: conn.Read, errInfo:", err) - return false - } - //fmt.Println(string(buf[0:n])) - - n, err = conn.Write([]byte(this.Password + "\n")) - if nil != err { - log.Println("pkg: model, func: telnetProtocolHandshake, method: conn.Write, errInfo:", err) - return false - } - n, err = conn.Read(buf[0:]) - if nil != err { - log.Println("pkg: model, func: telnetProtocolHandshake, method: conn.Read, errInfo:", err) - return false - } - n, err = conn.Write([]byte("date" + "\n")) - if nil != err { - log.Println("pkg: model, func: telnetProtocolHandshake, method: conn.Write, errInfo:", err) - return false - } - time.Sleep(time.Millisecond * TIME_DELAY_AFTER_WRITE) - - n, err = conn.Read(buf[0:]) - if nil != err { - log.Println("pkg: model, func: telnetProtocolHandshake, method: conn.Read, errInfo:", err) - return false - } - fmt.Println(string(buf[0:n])) - return true -} From b0f7e73c2a336bcc59c4c6b3e5fedae0b0de65ce Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Wed, 14 Aug 2024 10:15:32 +0800 Subject: [PATCH 02/24] =?UTF-8?q?fix:=20=E7=A7=BB=E9=99=A4ne=5Fhost?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=B1=82=E7=9A=84=E5=8A=A0=E5=AF=86=E5=A4=84?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/ne_host.impl.go | 70 ++----------------- 1 file changed, 7 insertions(+), 63 deletions(-) diff --git a/src/modules/network_element/repository/ne_host.impl.go b/src/modules/network_element/repository/ne_host.impl.go index fdc9f030..5988ad94 100644 --- a/src/modules/network_element/repository/ne_host.impl.go +++ b/src/modules/network_element/repository/ne_host.impl.go @@ -7,7 +7,6 @@ import ( "be.ems/src/framework/datasource" "be.ems/src/framework/logger" - "be.ems/src/framework/utils/crypto" "be.ems/src/framework/utils/parse" "be.ems/src/framework/utils/repo" "be.ems/src/modules/network_element/model" @@ -170,32 +169,7 @@ func (r *NeHostImpl) SelectByIds(hostIds []string) []model.NeHost { return []model.NeHost{} } // 转换实体 - rows := r.convertResultRows(results) - arr := &rows - for i := range *arr { - passwordDe, err := crypto.StringDecryptByAES((*arr)[i].Password) - if err != nil { - logger.Errorf("selectById %s decrypt: %v", (*arr)[i].HostID, err.Error()) - (*arr)[i].Password = "" - } else { - (*arr)[i].Password = passwordDe - } - privateKeyDe, err := crypto.StringDecryptByAES((*arr)[i].PrivateKey) - if err != nil { - logger.Errorf("selectById %s decrypt: %v", (*arr)[i].HostID, err.Error()) - (*arr)[i].PrivateKey = "" - } else { - (*arr)[i].PrivateKey = privateKeyDe - } - passPhraseDe, err := crypto.StringDecryptByAES((*arr)[i].PassPhrase) - if err != nil { - logger.Errorf("selectById %s decrypt: %v", (*arr)[i].HostID, err.Error()) - (*arr)[i].PassPhrase = "" - } else { - (*arr)[i].PassPhrase = passPhraseDe - } - } - return rows + return r.convertResultRows(results) } // CheckUniqueNeHost 校验主机是否唯一 @@ -263,28 +237,13 @@ func (r *NeHostImpl) Insert(neHost model.NeHost) string { params["auth_mode"] = neHost.AuthMode } if neHost.Password != "" { - passwordEn, err := crypto.StringEncryptByAES(neHost.Password) - if err != nil { - logger.Errorf("insert encrypt: %v", err.Error()) - return "" - } - params["password"] = passwordEn + params["password"] = neHost.Password } if neHost.PrivateKey != "" { - privateKeyEn, err := crypto.StringEncryptByAES(neHost.PrivateKey) - if err != nil { - logger.Errorf("insert encrypt: %v", err.Error()) - return "" - } - params["private_key"] = privateKeyEn + params["private_key"] = neHost.PrivateKey } if neHost.PassPhrase != "" { - passPhraseEn, err := crypto.StringEncryptByAES(neHost.PassPhrase) - if err != nil { - logger.Errorf("insert encrypt: %v", err.Error()) - return "" - } - params["pass_phrase"] = passPhraseEn + params["pass_phrase"] = neHost.PassPhrase } if neHost.Remark != "" { params["remark"] = neHost.Remark @@ -361,28 +320,13 @@ func (r *NeHostImpl) Update(neHost model.NeHost) int64 { params["auth_mode"] = neHost.AuthMode } if neHost.Password != "" { - passwordEn, err := crypto.StringEncryptByAES(neHost.Password) - if err != nil { - logger.Errorf("update encrypt: %v", err.Error()) - return 0 - } - params["password"] = passwordEn + params["password"] = neHost.Password } if neHost.PrivateKey != "" { - privateKeyEn, err := crypto.StringEncryptByAES(neHost.PrivateKey) - if err != nil { - logger.Errorf("update encrypt: %v", err.Error()) - return 0 - } - params["private_key"] = privateKeyEn + params["private_key"] = neHost.PrivateKey } if neHost.PassPhrase != "" { - passPhraseEn, err := crypto.StringEncryptByAES(neHost.PassPhrase) - if err != nil { - logger.Errorf("update encrypt: %v", err.Error()) - return 0 - } - params["pass_phrase"] = passPhraseEn + params["pass_phrase"] = neHost.PassPhrase } params["remark"] = neHost.Remark if neHost.UpdateBy != "" { From 6a94a7f39dc51e285c3fc20df940041c759ae445 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Wed, 14 Aug 2024 10:16:42 +0800 Subject: [PATCH 03/24] =?UTF-8?q?fix:=20=E7=BD=91=E5=85=83=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E8=AF=BB=E5=8F=96host=E4=BF=A1=E6=81=AF=E5=A4=84?= =?UTF-8?q?=E7=90=86=E5=8A=A0=E5=AF=86=E5=AF=86=E9=92=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../network_element/service/ne_host.impl.go | 84 ++++++++++++++++++- .../network_element/service/ne_info.impl.go | 43 +++++++--- 2 files changed, 113 insertions(+), 14 deletions(-) diff --git a/src/modules/network_element/service/ne_host.impl.go b/src/modules/network_element/service/ne_host.impl.go index 101c3c10..fa5fee26 100644 --- a/src/modules/network_element/service/ne_host.impl.go +++ b/src/modules/network_element/service/ne_host.impl.go @@ -3,6 +3,9 @@ package service import ( "fmt" + "be.ems/src/framework/config" + "be.ems/src/framework/logger" + "be.ems/src/framework/utils/crypto" "be.ems/src/modules/network_element/model" "be.ems/src/modules/network_element/repository" ) @@ -30,12 +33,39 @@ func (r *NeHostImpl) SelectList(neHost model.NeHost) []model.NeHost { // SelectByIds 通过ID查询 func (r *NeHostImpl) SelectById(hostId string) model.NeHost { + neHost := model.NeHost{} if hostId == "" { - return model.NeHost{} + return neHost } neHosts := r.neHostRepository.SelectByIds([]string{hostId}) if len(neHosts) > 0 { - return neHosts[0] + neHost := neHosts[0] + hostKey := config.Get("aes.hostKey").(string) + if neHost.Password != "" { + passwordDe, err := crypto.AESDecryptBase64(neHost.Password, hostKey) + if err != nil { + logger.Errorf("select encrypt: %v", err.Error()) + return neHost + } + neHost.Password = passwordDe + } + if neHost.PrivateKey != "" { + privateKeyDe, err := crypto.AESDecryptBase64(neHost.PrivateKey, hostKey) + if err != nil { + logger.Errorf("select encrypt: %v", err.Error()) + return neHost + } + neHost.PrivateKey = privateKeyDe + } + if neHost.PassPhrase != "" { + passPhraseDe, err := crypto.AESDecryptBase64(neHost.PassPhrase, hostKey) + if err != nil { + logger.Errorf("select encrypt: %v", err.Error()) + return neHost + } + neHost.PassPhrase = passPhraseDe + } + return neHost } return model.NeHost{} } @@ -54,11 +84,61 @@ func (r *NeHostImpl) Inserts(neHosts []model.NeHost) int64 { // Insert 新增信息 func (r *NeHostImpl) Insert(neHost model.NeHost) string { + hostKey := config.Get("aes.hostKey").(string) + if neHost.Password != "" { + passwordEn, err := crypto.AESEncryptBase64(neHost.Password, hostKey) + if err != nil { + logger.Errorf("insert encrypt: %v", err.Error()) + return "" + } + neHost.Password = passwordEn + } + if neHost.PrivateKey != "" { + privateKeyEn, err := crypto.AESEncryptBase64(neHost.PrivateKey, hostKey) + if err != nil { + logger.Errorf("insert encrypt: %v", err.Error()) + return "" + } + neHost.PrivateKey = privateKeyEn + } + if neHost.PassPhrase != "" { + passPhraseEn, err := crypto.AESEncryptBase64(neHost.PassPhrase, hostKey) + if err != nil { + logger.Errorf("insert encrypt: %v", err.Error()) + return "" + } + neHost.PassPhrase = passPhraseEn + } return r.neHostRepository.Insert(neHost) } // Update 修改信息 func (r *NeHostImpl) Update(neHost model.NeHost) int64 { + hostKey := config.Get("aes.hostKey").(string) + if neHost.Password != "" { + passwordEn, err := crypto.AESEncryptBase64(neHost.Password, hostKey) + if err != nil { + logger.Errorf("update password encrypt: %v", err.Error()) + return 0 + } + neHost.Password = passwordEn + } + if neHost.PrivateKey != "" { + privateKeyEn, err := crypto.AESEncryptBase64(neHost.PrivateKey, hostKey) + if err != nil { + logger.Errorf("update private key encrypt: %v", err.Error()) + return 0 + } + neHost.PrivateKey = privateKeyEn + } + if neHost.PassPhrase != "" { + passPhraseEn, err := crypto.AESEncryptBase64(neHost.PassPhrase, hostKey) + if err != nil { + logger.Errorf("update pass phrase encrypt: %v", err.Error()) + return 0 + } + neHost.PassPhrase = passPhraseEn + } return r.neHostRepository.Update(neHost) } diff --git a/src/modules/network_element/service/ne_info.impl.go b/src/modules/network_element/service/ne_info.impl.go index d6e73ec6..25ac2968 100644 --- a/src/modules/network_element/service/ne_info.impl.go +++ b/src/modules/network_element/service/ne_info.impl.go @@ -185,7 +185,17 @@ func (r *NeInfoImpl) bandNeHosts(arr *[]model.NeInfo) { for i := range *arr { v := (*arr)[i] if v.HostIDs != "" { - (*arr)[i].Hosts = NewNeHostImpl.neHostRepository.SelectByIds(strings.Split(v.HostIDs, ",")) + hostIds := strings.Split(v.HostIDs, ",") + if len(hostIds) <= 1 { + continue + } + for _, hostId := range hostIds { + neHost := NewNeHostImpl.SelectById(hostId) + if neHost.HostID == "" || neHost.HostID != hostId { + continue + } + (*arr)[i].Hosts = append((*arr)[i].Hosts, neHost) + } } } } @@ -199,12 +209,11 @@ func (r *NeInfoImpl) SelectById(infoId string, bandHost bool) model.NeInfo { } neInfos := r.neInfoRepository.SelectByIds([]string{infoId}) if len(neInfos) > 0 { - neInfo := neInfos[0] // 带主机信息 - if neInfo.HostIDs != "" && bandHost { - neInfo.Hosts = NewNeHostImpl.neHostRepository.SelectByIds(strings.Split(neInfo.HostIDs, ",")) + if neInfos[0].HostIDs != "" && bandHost { + r.bandNeHosts(&neInfos) } - return neInfo + return neInfos[0] } return model.NeInfo{} } @@ -312,12 +321,17 @@ func (r *NeInfoImpl) NeRunSSHClient(neType, neId string) (*ssh.ConnSSH, error) { logger.Errorf("NeRunSSHClient NeType:%s NeID:%s hostId not found", neType, neId) return nil, fmt.Errorf("neinfo hostId not found") } - neInfo.Hosts = NewNeHostImpl.neHostRepository.SelectByIds(strings.Split(neInfo.HostIDs, ",")) - if len(neInfo.Hosts) <= 0 { - logger.Errorf("NeRunSSHClient Hosts %s not found", neInfo.HostIDs) + hostIds := strings.Split(neInfo.HostIDs, ",") + if len(hostIds) <= 1 { + logger.Errorf("NeRunTelnetClient hosts id %s not found", neInfo.HostIDs) + return nil, fmt.Errorf("neinfo host id not found") + } + hostId := hostIds[0] // 网元主机ssh 0:22 + neHost := NewNeHostImpl.SelectById(hostId) + if neHost.HostID == "" || neHost.HostID != hostId { + logger.Errorf("NeRunTelnetClient Hosts %s not found", neInfo.HostIDs) return nil, fmt.Errorf("neinfo host not found") } - neHost := neInfo.Hosts[0] // 网元主机ssh 0:22 if neHost.HostType != "ssh" { logger.Errorf("NeRunSSHClient Hosts first HostType %s not ssh", neHost.HostType) return nil, fmt.Errorf("neinfo host type not ssh") @@ -369,12 +383,17 @@ func (r *NeInfoImpl) NeRunTelnetClient(neType, neId string, num int) (*telnet.Co logger.Errorf("NeRunTelnetClient NeType:%s NeID:%s hostId not found", neType, neId) return nil, fmt.Errorf("neinfo hostId not found") } - neInfo.Hosts = NewNeHostImpl.neHostRepository.SelectByIds(strings.Split(neInfo.HostIDs, ",")) - if len(neInfo.Hosts) <= 0 { + hostIds := strings.Split(neInfo.HostIDs, ",") + if len(hostIds) <= 1 { + logger.Errorf("NeRunTelnetClient hosts id %s not found", neInfo.HostIDs) + return nil, fmt.Errorf("neinfo host id not found") + } + hostId := hostIds[num] // 网元主机telnet 1:4100 2:5200 + neHost := NewNeHostImpl.SelectById(hostId) + if neHost.HostID == "" || neHost.HostID != hostId { logger.Errorf("NeRunTelnetClient Hosts %s not found", neInfo.HostIDs) return nil, fmt.Errorf("neinfo host not found") } - neHost := neInfo.Hosts[num] // 创建链接Telnet客户端 var connTelnet telnet.ConnTelnet From d8072eca48936bbcaf53773841e97115ee764edd Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Wed, 14 Aug 2024 10:24:23 +0800 Subject: [PATCH 04/24] =?UTF-8?q?feat:=20=E5=8A=A0=E5=AF=86=E5=B7=A5?= =?UTF-8?q?=E5=85=B7AES-CBC=EF=BC=8C=E9=85=8D=E5=90=88=E5=89=8D=E7=AB=AFCr?= =?UTF-8?q?yptoJS=E5=8A=A0=E8=A7=A3=E5=AF=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/framework/utils/crypto/aes.go | 33 ++++++++++++--------------- src/framework/utils/machine/launch.go | 7 ++++-- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/framework/utils/crypto/aes.go b/src/framework/utils/crypto/aes.go index 290eb718..fd39516b 100644 --- a/src/framework/utils/crypto/aes.go +++ b/src/framework/utils/crypto/aes.go @@ -10,12 +10,12 @@ import ( "io" ) -// StringEncryptByAES 字符串AES加密 -func StringEncryptByAES(text string) (string, error) { +// AESEncryptBase64 AES加密转Base64字符串 +func AESEncryptBase64(text, key string) (string, error) { if len(text) == 0 { return "", nil } - xpass, err := aesEncryptWithSalt([]byte(text)) + xpass, err := AESEncrypt([]byte(text), []byte(key)) if err != nil { return "", err } @@ -23,8 +23,8 @@ func StringEncryptByAES(text string) (string, error) { return pass64, nil } -// StringDecryptByAES 字符串AES解密 -func StringDecryptByAES(text string) (string, error) { +// AESDecryptBase64 AES解密解Base64字符串 +func AESDecryptBase64(text, key string) (string, error) { if len(text) == 0 { return "", nil } @@ -32,21 +32,16 @@ func StringDecryptByAES(text string) (string, error) { if err != nil { return "", err } - - tpass, err := aesDecryptWithSalt(bytesPass) + tpass, err := AESDecrypt(bytesPass, []byte(key)) if err != nil { return "", err } return string(tpass), nil } -// aesKey 字符串AES加解密密钥 -const aesKey = "AGT66VfY4SMaiT97a7df0aef1704d5c5" - -// const aesKey = "AGT66VfY4SMaiT97" -// aesEncryptWithSalt AES加密 -func aesEncryptWithSalt(plaintext []byte) ([]byte, error) { - block, err := aes.NewCipher([]byte(aesKey)) +// AESEncrypt AES加密 +func AESEncrypt(plaintext, aeskey []byte) ([]byte, error) { + block, err := aes.NewCipher(aeskey) if err != nil { return nil, err } @@ -68,8 +63,8 @@ func aesEncryptWithSalt(plaintext []byte) ([]byte, error) { return ciphertext, nil } -// aesDecryptWithSalt AES解密 -func aesDecryptWithSalt(ciphertext []byte) ([]byte, error) { +// AESDecrypt AES解密 +func AESDecrypt(ciphertext, aeskey []byte) ([]byte, error) { blockSize := aes.BlockSize if len(ciphertext) < blockSize { return nil, fmt.Errorf("ciphertext too short") @@ -77,12 +72,14 @@ func aesDecryptWithSalt(ciphertext []byte) ([]byte, error) { iv := ciphertext[:blockSize] ciphertext = ciphertext[blockSize:] + block, err := aes.NewCipher([]byte(aeskey)) - block, err := aes.NewCipher([]byte(aesKey)) if err != nil { return nil, err } - + if len(ciphertext) == 0 { + return nil, fmt.Errorf("ciphertext is invalid") + } if len(ciphertext)%blockSize != 0 { return nil, fmt.Errorf("ciphertext is not a multiple of the block size") } diff --git a/src/framework/utils/machine/launch.go b/src/framework/utils/machine/launch.go index 3839d146..60d3aa84 100644 --- a/src/framework/utils/machine/launch.go +++ b/src/framework/utils/machine/launch.go @@ -8,6 +8,7 @@ import ( "runtime" "time" + "be.ems/src/framework/config" "be.ems/src/framework/constants/common" "be.ems/src/framework/logger" "be.ems/src/framework/utils/cmd" @@ -68,7 +69,8 @@ func codeFileRead() (map[string]any, error) { } content := string(bytes) // 解密 - contentDe, err := crypto.StringDecryptByAES(content) + hostKey := config.Get("aes.hostKey").(string) + contentDe, err := crypto.AESDecryptBase64(content, hostKey) if err != nil { logger.Errorf("CodeFileRead decrypt: %v", err.Error()) return mapData, fmt.Errorf("decrypt fail") @@ -86,7 +88,8 @@ func codeFileRead() (map[string]any, error) { func codeFileWrite(data map[string]any) error { jsonByte, _ := json.Marshal(data) // 加密 - contentEn, err := crypto.StringEncryptByAES(string(jsonByte)) + hostKey := config.Get("aes.hostKey").(string) + contentEn, err := crypto.AESEncryptBase64(string(jsonByte), hostKey) if err != nil { logger.Errorf("insert encrypt: %v", err.Error()) return fmt.Errorf("encrypt fail") From cb33ac66678b6e2a2c5d6fd418ea4e3e50dbb74e Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Wed, 14 Aug 2024 10:37:47 +0800 Subject: [PATCH 05/24] =?UTF-8?q?fix:=20=E4=B8=AD=E9=97=B4=E4=BB=B6-?= =?UTF-8?q?=E8=AF=B7=E6=B1=82=E5=93=8D=E5=BA=94=E6=97=A5=E5=BF=97=E4=BB=85?= =?UTF-8?q?=E5=BC=80=E5=8F=91=E7=8E=AF=E5=A2=83=E4=BD=BF=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app.go | 5 ++++- src/framework/middleware/report.go | 7 ++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/app.go b/src/app.go index 75dd363f..731e823d 100644 --- a/src/app.go +++ b/src/app.go @@ -97,7 +97,10 @@ func initAppEngine() *gin.Engine { // 初始全局默认 func initDefeat(app *gin.Engine) { // 全局中间件 - app.Use(errorcatch.ErrorCatch(), middleware.Report(), middleware.Cors(), security.Security()) + if config.Env() == "local" { + app.Use(middleware.Report()) + } + app.Use(errorcatch.ErrorCatch(), middleware.Cors(), security.Security()) // 静态目录-静态资源 if v := config.Get("staticFile.default"); v != nil { diff --git a/src/framework/middleware/report.go b/src/framework/middleware/report.go index 680e7bad..3a6522ba 100644 --- a/src/framework/middleware/report.go +++ b/src/framework/middleware/report.go @@ -1,6 +1,7 @@ package middleware import ( + "runtime" "time" "be.ems/src/framework/logger" @@ -18,6 +19,10 @@ func Report() gin.HandlerFunc { // 计算请求处理时间,并打印日志 duration := time.Since(start) - logger.Infof("%s %s report end=> %v", c.Request.Method, c.Request.RequestURI, duration) + // logger.Infof("%s %s report end=> %v", c.Request.Method, c.Request.RequestURI, duration) + // 获取当前活跃的goroutine数量 + num := runtime.NumGoroutine() + // logger.Infof("当前活跃的goroutine数量 %d\n", num) + logger.Infof("\n访问接口 %s %s\n总耗时 %v\n当前活跃的goroutine数量 %d\n", c.Request.Method, c.Request.RequestURI, duration, num) } } From e7092ad0581a4e59dbe0d89014931e01a34dcede Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Wed, 14 Aug 2024 10:40:54 +0800 Subject: [PATCH 06/24] =?UTF-8?q?feat:=20AES=20=E5=8A=A0=E5=AF=86=E5=AF=86?= =?UTF-8?q?=E9=92=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/framework/config/config/config.default.yaml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/framework/config/config/config.default.yaml b/src/framework/config/config/config.default.yaml index f60e8a09..ec2c3bae 100644 --- a/src/framework/config/config/config.default.yaml +++ b/src/framework/config/config/config.default.yaml @@ -172,6 +172,15 @@ redis: # 多个数据源时可以用这个指定默认的数据源 defaultDataSourceName: "default" +# AES 加密 +aes: + # token身份密钥 + tokenKey: "MoX7WIaw87N82KhwgO7WPh2hU4tVcoI1" + # 接口密钥 + apiKey: "T9ox2DCzpLfJIPzkH9pKhsOTMOEMJcFv" + # 网元主机密钥 + hostKey: "AGT66VfY4SMaiT97a7df0aef1704d5c5" + # 用户配置 user: # 密码 From 1b1c15995da7dc251c3643d262a3ebc75b250da9 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Wed, 14 Aug 2024 10:42:13 +0800 Subject: [PATCH 07/24] =?UTF-8?q?feat:=20=E4=B8=AD=E9=97=B4=E4=BB=B6-?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=8A=A0=E8=A7=A3=E5=AF=86AES-CBC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/framework/constants/result/result.go | 9 +- src/framework/middleware/crypto_api.go | 134 +++++++++++++++++++++++ 2 files changed, 141 insertions(+), 2 deletions(-) create mode 100644 src/framework/middleware/crypto_api.go diff --git a/src/framework/constants/result/result.go b/src/framework/constants/result/result.go index dbd86302..19761ce4 100644 --- a/src/framework/constants/result/result.go +++ b/src/framework/constants/result/result.go @@ -8,8 +8,13 @@ const ( // 响应-msg错误失败 MSG_ERROR = "error" - // 响应-msg正常成功 - CODE_SUCCESS = 1 // 响应-code正常成功 + CODE_SUCCESS = 1 + // 响应-msg正常成功 MSG_SUCCESS = "success" + + // 响应-code加密数据 + CODE_ENCRYPT = 2 + // 响应-msg加密数据 + MSG_ENCRYPT = "encrypt" ) diff --git a/src/framework/middleware/crypto_api.go b/src/framework/middleware/crypto_api.go new file mode 100644 index 00000000..6f425cbb --- /dev/null +++ b/src/framework/middleware/crypto_api.go @@ -0,0 +1,134 @@ +package middleware + +import ( + "bytes" + "encoding/json" + "fmt" + "io" + + "be.ems/src/framework/config" + constResult "be.ems/src/framework/constants/result" + "be.ems/src/framework/logger" + "be.ems/src/framework/utils/crypto" + "be.ems/src/framework/utils/parse" + "github.com/gin-gonic/gin" +) + +// CryptoApi 接口加解密 +// +// 示例参数:middleware.CryptoApi(true, true) +// +// 参数表示:对请求解密,对响应加密 +// +// 请将中间件放在最前置,对请求优先处理 +func CryptoApi(requestDecrypt, responseEncrypt bool) gin.HandlerFunc { + return func(c *gin.Context) { + // 请求解密时对请求data注入 + if requestDecrypt { + contentDe := "" + if c.Request.Method == "GET" { + contentDe = c.Query("data") + } else if c.ContentType() == gin.MIMEJSON { + var body struct { + Data string `json:"data" binding:"required"` + } + if err := c.ShouldBindJSON(&body); err == nil { + contentDe = body.Data + } + } + // 是否存在data字段数据 + if contentDe == "" { + c.JSON(400, map[string]any{ + "code": constResult.CODE_ERROR, + "msg": "decrypt not found field data", + }) + c.Abort() // 停止执行后续的处理函数 + return + } + // 解密 + apiKey := config.Get("aes.apiKey").(string) + dataBodyStr, err := crypto.AESDecryptBase64(contentDe, apiKey) + if err != nil { + logger.Errorf("CryptoApi decrypt err => %v", err) + c.JSON(400, map[string]any{ + "code": constResult.CODE_ERROR, + "msg": "decrypted data could not be parsed", + }) + c.Abort() // 停止执行后续的处理函数 + return + } + // 分配回请求体 + c.Request.Body = io.NopCloser(bytes.NewBuffer([]byte(dataBodyStr))) + } + + // 响应加密时替换原有的响应体 + var rbw *replaceBodyWriter + if responseEncrypt { + rbw = &replaceBodyWriter{ + body: &bytes.Buffer{}, + ResponseWriter: c.Writer, + } + c.Writer = rbw + } + + // 调用下一个处理程序 + c.Next() + + // 响应加密时对响应data数据进行加密 + if responseEncrypt { + // 满足成功并带数据的响应进行加密 + if c.Writer.Status() == 200 { + var resBody map[string]any + json.Unmarshal(rbw.body.Bytes(), &resBody) + codeV, codeOk := resBody["code"] + dataV, dataOk := resBody["data"] + if codeOk && dataOk { + if parse.Number(codeV) == constResult.CODE_SUCCESS { + byteBodyData, _ := json.Marshal(dataV) + // 加密 + apiKey := config.Get("aes.apiKey").(string) + contentEn, err := crypto.AESEncryptBase64(string(byteBodyData), apiKey) + if err != nil { + logger.Errorf("CryptoApi encrypt err => %v", err) + rbw.ReplaceWrite([]byte(fmt.Sprintf(`{"code":"%d","msg":"encrypt err"}`, constResult.CODE_ERROR))) + } else { + // 响应加密 + byteBody, _ := json.Marshal(map[string]any{ + "code": constResult.CODE_ENCRYPT, + "msg": constResult.MSG_ENCRYPT, + "data": contentEn, + }) + rbw.ReplaceWrite(byteBody) + } + } + } else { + rbw.ReplaceWrite(nil) + } + } else { + rbw.ReplaceWrite(nil) + } + } + // + } +} + +// replaceBodyWriter 替换默认的响应体 +type replaceBodyWriter struct { + gin.ResponseWriter + body *bytes.Buffer +} + +// Write 写入响应体 +func (r replaceBodyWriter) Write(b []byte) (int, error) { + return r.body.Write(b) +} + +// ReplaceWrite 替换响应体 +func (r *replaceBodyWriter) ReplaceWrite(b []byte) (int, error) { + if b == nil { + return r.ResponseWriter.Write(r.body.Bytes()) + } + r.body = &bytes.Buffer{} + r.body.Write(b) + return r.ResponseWriter.Write(r.body.Bytes()) +} From cf1dbf4a0e884ca2c80ac1b6d9bfe77a0d3876c5 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Thu, 15 Aug 2024 09:38:41 +0800 Subject: [PATCH 08/24] =?UTF-8?q?style:=20=E7=9B=91=E6=8E=A7=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/monitor/controller/monitor.go | 21 +++++++------------ src/modules/monitor/controller/system_info.go | 5 +++-- 2 files changed, 10 insertions(+), 16 deletions(-) diff --git a/src/modules/monitor/controller/monitor.go b/src/modules/monitor/controller/monitor.go index 52e90373..67921d1a 100644 --- a/src/modules/monitor/controller/monitor.go +++ b/src/modules/monitor/controller/monitor.go @@ -28,21 +28,14 @@ type MonitorController struct { func (s *MonitorController) Load(c *gin.Context) { language := ctx.AcceptLanguage(c) var querys struct { - // 数据类型all/load/cpu/memory/io/network - Type string `form:"type" binding:"required,oneof=all load cpu memory io network"` - // 开始时间 - StartTime int64 `form:"startTime" binding:"required"` - // 结束时间 - EndTime int64 `form:"endTime" binding:"required"` - // 网元类型 - NeType string `form:"neType"` - // 网元ID - NeID string `form:"neId"` - // 名称,networ和iok时有效 - Name string `form:"name"` + Type string `form:"type" binding:"required,oneof=all load cpu memory io network"` // 数据类型all/load/cpu/memory/io/network + StartTime int64 `form:"startTime" binding:"required"` // 开始时间 + EndTime int64 `form:"endTime" binding:"required"` // 结束时间 + NeType string `form:"neType"` // 网元类型 + NeID string `form:"neId"` // 网元ID + Name string `form:"name"` // 名称,networ和io时有效 } - err := c.ShouldBindQuery(&querys) - if err != nil { + if err := c.ShouldBindQuery(&querys); err != nil { c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) return } diff --git a/src/modules/monitor/controller/system_info.go b/src/modules/monitor/controller/system_info.go index a6d47764..d93e0ffa 100644 --- a/src/modules/monitor/controller/system_info.go +++ b/src/modules/monitor/controller/system_info.go @@ -24,12 +24,13 @@ type SystemInfoController struct { // // GET / func (s *SystemInfoController) Info(c *gin.Context) { - c.JSON(200, result.OkData(map[string]any{ + data := map[string]any{ "cpu": s.systemInfogService.CPUInfo(), "memory": s.systemInfogService.MemoryInfo(), "network": s.systemInfogService.NetworkInfo(), "time": s.systemInfogService.TimeInfo(), "system": s.systemInfogService.SystemInfo(), "disk": s.systemInfogService.DiskInfo(), - })) + } + c.JSON(200, result.OkData(data)) } From b27472f0953e9e1b4a853668d15ed79aa9bc833a Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Thu, 15 Aug 2024 09:43:31 +0800 Subject: [PATCH 09/24] =?UTF-8?q?fix:=20=E4=B8=AD=E9=97=B4=E4=BB=B6-?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=8A=A0=E8=A7=A3=E5=AF=86=E5=A4=84=E7=90=86?= =?UTF-8?q?GET=E8=AF=B7=E6=B1=82=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/framework/middleware/crypto_api.go | 29 ++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/src/framework/middleware/crypto_api.go b/src/framework/middleware/crypto_api.go index 6f425cbb..bfb8f7a0 100644 --- a/src/framework/middleware/crypto_api.go +++ b/src/framework/middleware/crypto_api.go @@ -5,6 +5,7 @@ import ( "encoding/json" "fmt" "io" + "strings" "be.ems/src/framework/config" constResult "be.ems/src/framework/constants/result" @@ -25,10 +26,13 @@ func CryptoApi(requestDecrypt, responseEncrypt bool) gin.HandlerFunc { return func(c *gin.Context) { // 请求解密时对请求data注入 if requestDecrypt { + method := c.Request.Method + contentType := c.ContentType() contentDe := "" - if c.Request.Method == "GET" { + // 请求参数解析 + if method == "GET" { contentDe = c.Query("data") - } else if c.ContentType() == gin.MIMEJSON { + } else if contentType == gin.MIMEJSON { var body struct { Data string `json:"data" binding:"required"` } @@ -36,6 +40,7 @@ func CryptoApi(requestDecrypt, responseEncrypt bool) gin.HandlerFunc { contentDe = body.Data } } + // 是否存在data字段数据 if contentDe == "" { c.JSON(400, map[string]any{ @@ -45,7 +50,8 @@ func CryptoApi(requestDecrypt, responseEncrypt bool) gin.HandlerFunc { c.Abort() // 停止执行后续的处理函数 return } - // 解密 + + // 解密-原数据加密前含16位长度iv apiKey := config.Get("aes.apiKey").(string) dataBodyStr, err := crypto.AESDecryptBase64(contentDe, apiKey) if err != nil { @@ -57,8 +63,19 @@ func CryptoApi(requestDecrypt, responseEncrypt bool) gin.HandlerFunc { c.Abort() // 停止执行后续的处理函数 return } + // 分配回请求体 - c.Request.Body = io.NopCloser(bytes.NewBuffer([]byte(dataBodyStr))) + if method == "GET" { + var urlParams map[string]any + json.Unmarshal([]byte(dataBodyStr), &urlParams) + rawQuery := []string{} + for k, v := range urlParams { + rawQuery = append(rawQuery, fmt.Sprintf("%s=%v", k, v)) + } + c.Request.URL.RawQuery = strings.Join(rawQuery, "&") + } else if contentType == gin.MIMEJSON { + c.Request.Body = io.NopCloser(bytes.NewBuffer([]byte(dataBodyStr))) + } } // 响应加密时替换原有的响应体 @@ -85,9 +102,9 @@ func CryptoApi(requestDecrypt, responseEncrypt bool) gin.HandlerFunc { if codeOk && dataOk { if parse.Number(codeV) == constResult.CODE_SUCCESS { byteBodyData, _ := json.Marshal(dataV) - // 加密 + // 加密-原数据头加入标记16位长度iv终止符 apiKey := config.Get("aes.apiKey").(string) - contentEn, err := crypto.AESEncryptBase64(string(byteBodyData), apiKey) + contentEn, err := crypto.AESEncryptBase64("=:)"+string(byteBodyData), apiKey) if err != nil { logger.Errorf("CryptoApi encrypt err => %v", err) rbw.ReplaceWrite([]byte(fmt.Sprintf(`{"code":"%d","msg":"encrypt err"}`, constResult.CODE_ERROR))) From 65fe409c0445da51552fbabf23a0b69a87f220f6 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Thu, 15 Aug 2024 09:44:37 +0800 Subject: [PATCH 10/24] =?UTF-8?q?fix:=20=E5=AF=B9=E7=99=BB=E5=BD=95?= =?UTF-8?q?=EF=BC=8C=E7=BD=91=E5=85=83=E4=BF=A1=E6=81=AF=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E5=8A=A0=E8=A7=A3=E5=AF=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/common/common.go | 2 ++ src/modules/network_element/network_element.go | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/src/modules/common/common.go b/src/modules/common/common.go index bb6c68b0..3bbbd97a 100644 --- a/src/modules/common/common.go +++ b/src/modules/common/common.go @@ -52,6 +52,7 @@ func Setup(router *gin.Engine) { // Count: 10, // Type: middleware.LIMIT_IP, // }), + middleware.CryptoApi(true, true), controller.NewAccount.Login, ) indexGroup.GET("/getInfo", middleware.PreAuthorize(nil), controller.NewAccount.Info) @@ -74,6 +75,7 @@ func Setup(router *gin.Engine) { // Count: 10, // Type: middleware.LIMIT_IP, // }), + middleware.CryptoApi(true, true), controller.NewRegister.Register, ) } diff --git a/src/modules/network_element/network_element.go b/src/modules/network_element/network_element.go index bc068e48..89cd4624 100644 --- a/src/modules/network_element/network_element.go +++ b/src/modules/network_element/network_element.go @@ -80,15 +80,18 @@ func Setup(router *gin.Engine) { controller.NewNeInfo.List, ) neInfoGroup.GET("/:infoId", + middleware.CryptoApi(false, true), middleware.PreAuthorize(nil), controller.NewNeInfo.Info, ) neInfoGroup.POST("", + middleware.CryptoApi(true, true), middleware.PreAuthorize(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), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neInfo", collectlogs.BUSINESS_TYPE_UPDATE)), controller.NewNeInfo.Edit, @@ -108,6 +111,7 @@ func Setup(router *gin.Engine) { controller.NewNeHost.List, ) neHostGroup.GET("/:hostId", + middleware.CryptoApi(false, true), middleware.PreAuthorize(nil), controller.NewNeHost.Info, ) From 4c89a4ad44fcfcee0e97e0895873647957d25b8f Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Thu, 15 Aug 2024 09:48:18 +0800 Subject: [PATCH 11/24] =?UTF-8?q?sql:=20KPI=E6=B7=BB=E5=8A=A0SMSC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/goldkpi/kpi_title_all.csv | 472 ++++++++++++----------- config/goldkpi/核心网网元黄金指标集.xlsx | Bin 41350 -> 43991 bytes database/common/kpi_title.sql | 33 ++ 3 files changed, 285 insertions(+), 220 deletions(-) diff --git a/config/goldkpi/kpi_title_all.csv b/config/goldkpi/kpi_title_all.csv index 3a526a38..a8d5dbd2 100644 --- a/config/goldkpi/kpi_title_all.csv +++ b/config/goldkpi/kpi_title_all.csv @@ -1,220 +1,252 @@ -"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" +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 index c4ceb7ac238b6dd194b2fa668b69265a4d659a19..0b4a97c4cc78151bff3ca1f7ca1d09f5622e1dd3 100644 GIT binary patch literal 43991 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 z

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 XfoW3_C*RMeiy6R6jGr_}`}yi$SFsRh diff --git a/database/common/kpi_title.sql b/database/common/kpi_title.sql index d6b6fa7f..a000bbe5 100644 --- a/database/common/kpi_title.sql +++ b/database/common/kpi_title.sql @@ -254,5 +254,38 @@ INSERT INTO `kpi_title` VALUES (216, 'PCF', 'PCF.10', '{\"cn\": \"应用会话 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'); +-- 更新SMSC 20240815 +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'); SET FOREIGN_KEY_CHECKS = 1; From fd234364b4f3bde5da01b4146140b42d05887f17 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Thu, 15 Aug 2024 19:06:16 +0800 Subject: [PATCH 12/24] =?UTF-8?q?feat:=20=E6=9B=B4=E6=96=B0=E5=B9=B6?= =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E5=8C=96=E7=BD=91=E5=85=83=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/param/amf_param_config.yaml | 621 +++++++-------- config/param/ausf_param_config.yaml | 85 +- config/param/ims_param_config.yaml | 8 +- config/param/mme_param_config.yaml | 7 + config/param/mocngw_param_config.yaml | 199 ++--- config/param/n3iwf_param_config.yaml | 114 +-- config/param/nrf_param_config.yaml | 65 +- config/param/nssf_param_config.yaml | 136 ++-- config/param/pcf_param_config.yaml | 461 +++++------ config/param/smf_param_config.yaml | 1035 +++++++++++++------------ config/param/smsc_param_config.yaml | 398 +++++----- config/param/udm_param_config.yaml | 814 +++++++++---------- config/param/upf_param_config.yaml | 611 ++++++++------- 13 files changed, 2316 insertions(+), 2238 deletions(-) diff --git a/config/param/amf_param_config.yaml b/config/param/amf_param_config.yaml index 5abb58c3..011fad79 100644 --- a/config/param/amf_param_config.yaml +++ b/config/param/amf_param_config.yaml @@ -1,324 +1,329 @@ amf: system: display: "System Config" + sort: 1 list: - - name: "amfName" - type: "string" - value: "AMF" - access: "read-write" - filter: '0~64' - display: "AMF Name" - comment: "" - - name: "relativeCapacity" - type: "int" - value: "255" - access: "read-write" - filter: "0~255" - display: "Relative Capacity" - comment: "0~255" - - name: "sbiScheme" - type: "enum" - value: "0" - access: "read-write" - filter: '{"0":"http","1":"https"}' - display: "SBI Scheme" - comment: "" - - name: "sbiServerIp" - type: "string" - value: "192.168.1.183" - access: "read-write" - filter: '0~64' - display: "SBI Server IP" - comment: "" - - name: "sbiServerPort" - type: "int" - value: "8080" - access: "read-write" - filter: "0~65535" - display: "SBI Server Port" - comment: "0~65535" - - name: "nrfEnabled" - type: "bool" - value: "0" - access: "read-write" - filter: '{"0":"false","1":"true"}' - display: "NRF Enabled" - comment: "" - - name: "nrfUri" - type: "string" - value: "http://172.16.5.180:8080" - access: "read-write" - filter: '0~64' - display: "NRF URI" - comment: "" - - name: "ausfUri" - type: "string" - value: "http://172.16.5.130:8080" - access: "read-write" - filter: '0~64' - display: "AUSF URI" - comment: "" - - name: "udmUri" - type: "string" - value: "http://172.16.5.140:8080" - access: "read-write" - filter: '0~64' - display: "UDM URI" - comment: "" - - name: "smfUri" - type: "string" - value: "http://172.16.5.150:8080" - access: "read-write" - filter: '0~64' - display: "SMF URI" - comment: "" - - name: "pcfUri" - type: "string" - value: "http://172.16.5.160:8080" - access: "read-write" - filter: '0~64' - display: "PCF URI" - comment: "" - - name: "lmfUri" - type: "string" - value: "http://172.16.5.200:8080" - access: "read-write" - filter: '0~64' - display: "LMF URI" - comment: "" - - name: "nefUri" - type: "string" - value: "http://172.16.5.210:8080" - access: "read-write" - filter: '0~64' - display: "NEF URI" - comment: "" - - name: "imeiRestrictionEnabled" - type: "bool" - value: "0" - access: "read-write" - filter: '{"0":"false","1":"true"}' - display: "IMEI Restriction Enabled" - comment: "" - - name: "allowedImeiPrefix" - type: "string" - value: "869583045" - access: "read-write" - filter: '0~128' - display: "Allowed IMEI Prefix" - comment: "" - - name: "dnnCorrectionEnabled" - type: "bool" - value: "0" - access: "read-write" - filter: '{"0":"false","1":"true"}' - display: "DNN Correction Enabled" - comment: "" - - name: "defaultDnn" - type: "string" - value: "internet" - access: "read-write" - filter: '0~64' - display: "Default DNN" - comment: "" - - name: "integrityAlgorithm" - type: "enum" - value: "2" - access: "read-write" - filter: '{"0":"NIA0","1":"NIA1","2":"NIA2","3":"NIA3"}' - display: "Integrity Algorithm" - comment: "" - - name: "cipheringAlgorithm" - type: "enum" - value: "0" - access: "read-write" - filter: '{"0":"NEA0","1":"NEA1","2":"NEA2","3":"NEA3"}' - display: "Ciphering Algorithm" - comment: "" - - name: "t3502" - type: "int" - value: "720" - access: "read-write" - filter: "1~65535" - display: "T3502" - comment: "" - - name: "t3512" - type: "int" - value: "3600" - access: "read-write" - filter: "1~65535" - display: "T3512" - comment: "" - - name: "t3513" - type: "int" - value: "2" - access: "read-write" - filter: "1~65535" - display: "T3513" - comment: "" - - name: "t3522" - type: "int" - value: "6" - access: "read-write" - filter: "1~65535" - display: "T3522" - comment: "" - - name: "t3550" - type: "int" - value: "6" - access: "read-write" - filter: "1~65535" - display: "T3550" - comment: "" - - name: "t3555" - type: "int" - value: "6" - access: "read-write" - filter: "1~65535" - display: "T3555" - comment: "" - - name: "t3560" - type: "int" - value: "6" - access: "read-write" - filter: "1~65535" - display: "T3560" - comment: "" - - name: "t3565" - type: "int" - value: "6" - access: "read-write" - filter: "1~65535" - display: "T3565" - comment: "" - - name: "t3570" - type: "int" - value: "6" - access: "read-write" - filter: "1~65535" - display: "T3570" - comment: "" + - name: "amfName" + type: "string" + value: "AMF" + access: "read-write" + filter: "0~64" + display: "AMF Name" + comment: "" + - name: "relativeCapacity" + type: "int" + value: "255" + access: "read-write" + filter: "0~255" + display: "Relative Capacity" + comment: "0~255" + - name: "sbiScheme" + type: "enum" + value: "0" + access: "read-write" + filter: '{"0":"http","1":"https"}' + display: "SBI Scheme" + comment: "" + - name: "sbiServerIp" + type: "string" + value: "192.168.1.183" + access: "read-write" + filter: "0~64" + display: "SBI Server IP" + comment: "" + - name: "sbiServerPort" + type: "int" + value: "8080" + access: "read-write" + filter: "0~65535" + display: "SBI Server Port" + comment: "0~65535" + - name: "nrfEnabled" + type: "bool" + value: "0" + access: "read-write" + filter: '{"0":"false","1":"true"}' + display: "NRF Enabled" + comment: "" + - name: "nrfUri" + type: "string" + value: "http://172.16.5.180:8080" + access: "read-write" + filter: "0~64" + display: "NRF URI" + comment: "" + - name: "ausfUri" + type: "string" + value: "http://172.16.5.130:8080" + access: "read-write" + filter: "0~64" + display: "AUSF URI" + comment: "" + - name: "udmUri" + type: "string" + value: "http://172.16.5.140:8080" + access: "read-write" + filter: "0~64" + display: "UDM URI" + comment: "" + - name: "smfUri" + type: "string" + value: "http://172.16.5.150:8080" + access: "read-write" + filter: "0~64" + display: "SMF URI" + comment: "" + - name: "pcfUri" + type: "string" + value: "http://172.16.5.160:8080" + access: "read-write" + filter: "0~64" + display: "PCF URI" + comment: "" + - name: "lmfUri" + type: "string" + value: "http://172.16.5.200:8080" + access: "read-write" + filter: "0~64" + display: "LMF URI" + comment: "" + - name: "nefUri" + type: "string" + value: "http://172.16.5.210:8080" + access: "read-write" + filter: "0~64" + display: "NEF URI" + comment: "" + - name: "imeiRestrictionEnabled" + type: "bool" + value: "0" + access: "read-write" + filter: '{"0":"false","1":"true"}' + display: "IMEI Restriction Enabled" + comment: "" + - name: "allowedImeiPrefix" + type: "string" + value: "869583045" + access: "read-write" + filter: "0~128" + display: "Allowed IMEI Prefix" + comment: "" + - name: "dnnCorrectionEnabled" + type: "bool" + value: "0" + access: "read-write" + filter: '{"0":"false","1":"true"}' + display: "DNN Correction Enabled" + comment: "" + - name: "defaultDnn" + type: "string" + value: "internet" + access: "read-write" + filter: "0~64" + display: "Default DNN" + comment: "" + - name: "integrityAlgorithm" + type: "enum" + value: "2" + access: "read-write" + filter: '{"0":"NIA0","1":"NIA1","2":"NIA2","3":"NIA3"}' + display: "Integrity Algorithm" + comment: "" + - name: "cipheringAlgorithm" + type: "enum" + value: "0" + access: "read-write" + filter: '{"0":"NEA0","1":"NEA1","2":"NEA2","3":"NEA3"}' + display: "Ciphering Algorithm" + comment: "" + - name: "t3502" + type: "int" + value: "720" + access: "read-write" + filter: "1~65535" + display: "T3502" + comment: "" + - name: "t3512" + type: "int" + value: "3600" + access: "read-write" + filter: "1~65535" + display: "T3512" + comment: "" + - name: "t3513" + type: "int" + value: "2" + access: "read-write" + filter: "1~65535" + display: "T3513" + comment: "" + - name: "t3522" + type: "int" + value: "6" + access: "read-write" + filter: "1~65535" + display: "T3522" + comment: "" + - name: "t3550" + type: "int" + value: "6" + access: "read-write" + filter: "1~65535" + display: "T3550" + comment: "" + - name: "t3555" + type: "int" + value: "6" + access: "read-write" + filter: "1~65535" + display: "T3555" + comment: "" + - name: "t3560" + type: "int" + value: "6" + access: "read-write" + filter: "1~65535" + display: "T3560" + comment: "" + - name: "t3565" + type: "int" + value: "6" + access: "read-write" + filter: "1~65535" + display: "T3565" + comment: "" + - name: "t3570" + type: "int" + value: "6" + access: "read-write" + filter: "1~65535" + display: "T3570" + comment: "" association: display: "TNL Association List" + sort: 3 array: - - name: "index" - type: "int" - value: "0" - access: "read-only" - filter: '0~15' - display: "Index" - comment: "0~15" - - name: "ngapIp" - type: "string" - value: "192.168.1.183" - access: "read-write" - filter: '0~64' - display: "NGAP IP" - comment: "" - - name: "ngapSctpPort" - type: "int" - value: "38412" - access: "read-write" - filter: "0~65535" - display: "NGAP SCTP Port" - comment: "0~65535" - - name: "weightFactor" - type: "int" - value: "255" - access: "read-write" - filter: "0~255" - display: "Weight" - comment: "0~255" + - name: "index" + type: "int" + value: "0" + access: "read-only" + filter: "0~15" + display: "Index" + comment: "0~15" + - name: "ngapIp" + type: "string" + value: "192.168.1.183" + access: "read-write" + filter: "0~64" + display: "NGAP IP" + comment: "" + - name: "ngapSctpPort" + type: "int" + value: "38412" + access: "read-write" + filter: "0~65535" + display: "NGAP SCTP Port" + comment: "0~65535" + - name: "weightFactor" + type: "int" + value: "255" + access: "read-write" + filter: "0~255" + display: "Weight" + comment: "0~255" guami: display: "GUAMI List" + sort: 5 array: - - name: "index" - type: "int" - value: "0" - access: "read-only" - filter: '0~15' - display: "Index" - comment: "0~15" - - name: "plmnId" - type: "regex" - value: '00101' - access: "read-write" - filter: '^[0-9]{5,6}$' - display: "PLMN ID" - comment: "" - - name: "regionId" - type: "int" - value: '1' - access: "read-write" - filter: '0~255' - display: "Region ID" - comment: "0~255" - - name: "setId" - type: "int" - value: '1' - access: "read-write" - filter: '0~1023' - display: "Set ID" - comment: "0~1023" - - name: "pointer" - type: "int" - value: '1' - access: "read-write" - filter: '0~63' - display: "Pointer" - comment: "0~63" + - name: "index" + type: "int" + value: "0" + access: "read-only" + filter: "0~15" + display: "Index" + comment: "0~15" + - name: "plmnId" + type: "regex" + value: "00101" + access: "read-write" + filter: "^[0-9]{5,6}$" + display: "PLMN ID" + comment: "" + - name: "regionId" + type: "int" + value: "1" + access: "read-write" + filter: "0~255" + display: "Region ID" + comment: "0~255" + - name: "setId" + type: "int" + value: "1" + access: "read-write" + filter: "0~1023" + display: "Set ID" + comment: "0~1023" + - name: "pointer" + type: "int" + value: "1" + access: "read-write" + filter: "0~63" + display: "Pointer" + comment: "0~63" tai: display: "TAI List" + sort: 7 array: - - name: "index" - type: "int" - value: "0" - access: "read-only" - filter: '0~15' - display: "Index" - comment: "0~15" - - name: "plmnId" - type: "regex" - value: '00101' - access: "read-write" - filter: '^[0-9]{5,6}$' - display: "PLMN ID" - comment: "" - - name: "tac" - type: "string" - value: "1" - access: "read-write" - filter: '0~8' - display: "TAC" - comment: "0~16777215" + - name: "index" + type: "int" + value: "0" + access: "read-only" + filter: "0~15" + display: "Index" + comment: "0~15" + - name: "plmnId" + type: "regex" + value: "00101" + access: "read-write" + filter: "^[0-9]{5,6}$" + display: "PLMN ID" + comment: "" + - name: "tac" + type: "string" + value: "1" + access: "read-write" + filter: "0~8" + display: "TAC" + comment: "0~16777215" slice: display: "Slice List" + sort: 9 array: - - name: "index" - type: "int" - value: "0" - access: "read-only" - filter: '0~15' - display: "Index" - comment: "0~15" - - name: "plmnId" - type: "regex" - value: '00101' - access: "read-write" - filter: '^[0-9]{5,6}$' - display: "PLMN ID" - comment: "" - - name: "sst" - type: "int" - value: '1' - access: "read-write" - filter: '0~127' - display: "SST" - comment: "0~127" - - name: "sd" - type: "regex" - value: '000001' - access: "read-write" - filter: '^[A-Fa-f0-9]{6}' - display: "SD" - comment: "" + - name: "index" + type: "int" + value: "0" + access: "read-only" + filter: "0~15" + display: "Index" + comment: "0~15" + - name: "plmnId" + type: "regex" + value: "00101" + access: "read-write" + filter: "^[0-9]{5,6}$" + display: "PLMN ID" + comment: "" + - name: "sst" + type: "int" + value: "1" + access: "read-write" + filter: "0~127" + display: "SST" + comment: "0~127" + - name: "sd" + type: "regex" + value: "000001" + access: "read-write" + filter: "^[A-Fa-f0-9]{6}" + display: "SD" + comment: "" diff --git a/config/param/ausf_param_config.yaml b/config/param/ausf_param_config.yaml index 0b570ea8..67b3b00b 100644 --- a/config/param/ausf_param_config.yaml +++ b/config/param/ausf_param_config.yaml @@ -1,46 +1,47 @@ ausf: system: display: "System" + sort: 1 list: - - name: "serviceIP" - type: "ipv4" - value: "172.16.5.130" - access: "read-write" - filter: '' - display: "Service IP" - comment: "" - - name: "servicePort" - type: "int" - value: "8080" - access: "read-write" - filter: "0~65535" - display: "Service Port" - comment: "" - - name: "scheme" - type: "enum" - value: "http" - access: "read-write" - filter: "{\"0\":\"HTTP\", \"1\":\"HTTPS\"}" - display: "Scheme" - comment: "" - - name: "nrfUri" - type: "string" - value: "http://172.16.5.180:8080" - access: "read-write" - filter: '' - display: "NRF URI" - comment: "" - - name: "udmUri" - type: "string" - value: "http://172.16.5.140:8080" - access: "read-write" - filter: '' - display: "UDM URI" - comment: "" - - name: "groupId" - type: "string" - value: "0" - access: "read-write" - filter: '' - display: "Group ID" - comment: "" + - name: "serviceIP" + type: "ipv4" + value: "172.16.5.130" + access: "read-write" + filter: "" + display: "Service IP" + comment: "" + - name: "servicePort" + type: "int" + value: "8080" + access: "read-write" + filter: "0~65535" + display: "Service Port" + comment: "" + - name: "scheme" + type: "enum" + value: "http" + access: "read-write" + filter: '{"0":"HTTP", "1":"HTTPS"}' + display: "Scheme" + comment: "" + - name: "nrfUri" + type: "string" + value: "http://172.16.5.180:8080" + access: "read-write" + filter: "" + display: "NRF URI" + comment: "" + - name: "udmUri" + type: "string" + value: "http://172.16.5.140:8080" + access: "read-write" + filter: "" + display: "UDM URI" + comment: "" + - name: "groupId" + type: "string" + value: "0" + access: "read-write" + filter: "" + display: "Group ID" + comment: "" diff --git a/config/param/ims_param_config.yaml b/config/param/ims_param_config.yaml index 8a9fbef6..a7cd91a2 100644 --- a/config/param/ims_param_config.yaml +++ b/config/param/ims_param_config.yaml @@ -1,6 +1,7 @@ ims: system: display: "System" + sort: 1 list: - name: "label" type: "string" @@ -123,14 +124,15 @@ ims: comment: "" plmn: display: "PLMN List" + sort: 3 array: - name: "index" type: "int" value: "0" access: "read-only" - filter: "0~15" + filter: "0~3" display: "Index" - comment: "0~15" + comment: "0~3" - name: "mcc" type: "regex" value: "001" @@ -154,6 +156,7 @@ ims: comment: "" mmtel_dialplan: display: "MMTEL Dialplan" + sort: 5 array: - name: "index" type: "int" @@ -255,6 +258,7 @@ ims: comment: "Enable: Close/Open" ds_system: display: "DS System" + sort: 7 list: - name: "dispatchSystemInd" type: "bool" diff --git a/config/param/mme_param_config.yaml b/config/param/mme_param_config.yaml index 5ddd5caa..d4f994bb 100644 --- a/config/param/mme_param_config.yaml +++ b/config/param/mme_param_config.yaml @@ -1,6 +1,7 @@ mme: system: display: "System Config" + sort: 1 list: - name: "csfbEnabled" type: "bool" @@ -88,6 +89,7 @@ mme: comment: "0~20" gummei: display: "Gummei List" + sort: 3 array: - name: "index" type: "int" @@ -119,6 +121,7 @@ mme: comment: "0~255" tai: display: "TAI List" + sort: 5 array: - name: "index" type: "int" @@ -143,6 +146,7 @@ mme: comment: "0~65535" hss: display: "HSS List" + sort: 7 array: - name: "index" type: "int" @@ -181,6 +185,7 @@ mme: comment: "0~65535" sgw: display: "SGW List" + sort: 9 array: - name: "index" type: "int" @@ -212,6 +217,7 @@ mme: comment: "0~64" pgw: display: "PGW List" + sort: 11 array: - name: "index" type: "int" @@ -243,6 +249,7 @@ mme: comment: "0~64" amf: display: "AMF List" + sort: 13 array: - name: "index" type: "int" diff --git a/config/param/mocngw_param_config.yaml b/config/param/mocngw_param_config.yaml index a213de42..133de9a9 100644 --- a/config/param/mocngw_param_config.yaml +++ b/config/param/mocngw_param_config.yaml @@ -1,108 +1,111 @@ mocngw: system: display: "System Config" + sort: 1 list: - - name: "s1apSouthAddr" - type: "string" - value: "192.168.7.163" - access: "read-write" - filter: '0~64' - display: "S1AP South Address" - comment: "" - - name: "s1apNorthAddr" - type: "string" - value: "192.168.8.163" - access: "read-write" - filter: '0~64' - display: "S1AP North Address" - comment: "" - - name: "tac" - type: "int" - value: "1" - access: "read-write" - filter: '0~65535' - display: "TAC" - comment: "0~65535" - - name: "enbId" - type: "int" - value: "24" - access: "read-write" - filter: "0~1048575" - display: "ENB ID" - comment: "0~1048575" - - name: "userPlaneEnabled" - type: "bool" - value: "0" - access: "read-write" - filter: '{"0":"false","1":"true"}' - display: "User Plane Enabled" - comment: "" - - name: "pfcpAddr" - type: "string" - value: "192.168.7.163" - access: "read-write" - filter: '0~64' - display: "PFCP Address" - comment: "" + - name: "s1apSouthAddr" + type: "string" + value: "192.168.7.163" + access: "read-write" + filter: "0~64" + display: "S1AP South Address" + comment: "" + - name: "s1apNorthAddr" + type: "string" + value: "192.168.8.163" + access: "read-write" + filter: "0~64" + display: "S1AP North Address" + comment: "" + - name: "tac" + type: "int" + value: "1" + access: "read-write" + filter: "0~65535" + display: "TAC" + comment: "0~65535" + - name: "enbId" + type: "int" + value: "24" + access: "read-write" + filter: "0~1048575" + display: "ENB ID" + comment: "0~1048575" + - name: "userPlaneEnabled" + type: "bool" + value: "0" + access: "read-write" + filter: '{"0":"false","1":"true"}' + display: "User Plane Enabled" + comment: "" + - name: "pfcpAddr" + type: "string" + value: "192.168.7.163" + access: "read-write" + filter: "0~64" + display: "PFCP Address" + comment: "" mme: display: "MME List" + sort: 3 array: - - name: "index" - type: "int" - value: "0" - access: "read-only" - filter: '0~15' - display: "Index" - comment: "0~15" - - name: "s1apAddr" - type: "string" - value: "192.168.1.161" - access: "read-write" - filter: '0~64' - display: "S1AP Address" - comment: "" - - name: "s1apPort" - type: "int" - value: "36412" - access: "read-write" - filter: "0~65535" - display: "S1AP Port" - comment: "0~65535" - - name: "plmnId" - type: "regex" - value: '00101' - access: "read-write" - filter: '^[0-9]{5,6}$' - display: "PLMN ID" - comment: "" + - name: "index" + type: "int" + value: "0" + access: "read-only" + filter: "0~15" + display: "Index" + comment: "0~15" + - name: "s1apAddr" + type: "string" + value: "192.168.1.161" + access: "read-write" + filter: "0~64" + display: "S1AP Address" + comment: "" + - name: "s1apPort" + type: "int" + value: "36412" + access: "read-write" + filter: "0~65535" + display: "S1AP Port" + comment: "0~65535" + - name: "plmnId" + type: "regex" + value: "00101" + access: "read-write" + filter: "^[0-9]{5,6}$" + display: "PLMN ID" + comment: "" upgw: display: "UPGW Config" + sort: 5 list: - - name: "pfcpAddr" - type: "string" - value: "192.168.1.159" - access: "read-write" - filter: '0~64' - display: "PFCP Address" - comment: "" - - name: "pfcpPort" - type: "int" - value: "8805" - access: "read-write" - filter: "0~65535" - display: "PFCP Port" - comment: "0~65535" - - name: "gtpuSouthAddr" - type: "string" - value: "10.10.1.2" - access: "read-write" - filter: '0~64' - display: "GTP-U South Address" - comment: "" - - name: "gtpuNorthAddr" - type: "string" - value: "192.168.7.123" - access: "read-write" - filter: '0~64' - display: "GTP-U North Address" - comment: "" + - name: "pfcpAddr" + type: "string" + value: "192.168.1.159" + access: "read-write" + filter: "0~64" + display: "PFCP Address" + comment: "" + - name: "pfcpPort" + type: "int" + value: "8805" + access: "read-write" + filter: "0~65535" + display: "PFCP Port" + comment: "0~65535" + - name: "gtpuSouthAddr" + type: "string" + value: "10.10.1.2" + access: "read-write" + filter: "0~64" + display: "GTP-U South Address" + comment: "" + - name: "gtpuNorthAddr" + type: "string" + value: "192.168.7.123" + access: "read-write" + filter: "0~64" + display: "GTP-U North Address" + comment: "" diff --git a/config/param/n3iwf_param_config.yaml b/config/param/n3iwf_param_config.yaml index 54113a0f..0a420c0d 100644 --- a/config/param/n3iwf_param_config.yaml +++ b/config/param/n3iwf_param_config.yaml @@ -1,61 +1,61 @@ n3iwf: system: display: "System" + sort: 1 list: - - name: "ikeBindAddr" - type: "string" - value: "192.168.12.160" - access: "read-write" - filter: '' - display: "IKEBindAddress" - comment: "" - - name: "gtpBindAddr" - type: "string" - value: "192.168.12.161" - access: "read-write" - filter: '' - display: "GTPBindAddress" - comment: "" - - name: "fqdn" - type: "string" - value: "n3iwf.5gc.mnc00.mcc460.pub.3gppnetwork.org" - access: "read-write" - filter: '' - display: "FQDN" - comment: "" - - name: "internalIP" - type: "string" - value: "172.16.1.190" - access: "read-write" - filter: '' - display: "InternalIP" - comment: "" - - name: "udmAddr" - type: "string" - value: "172.16.1.140:8080" - access: "read-write" - filter: '' - display: "UdmIPAddrPort" - comment: "" - - name: "smfIPAddr" - type: "string" - value: "172.16.1.150" - access: "read-write" - filter: '' - display: "SmfIPAddress" - comment: "" - - name: "n3IPAddr" - type: "string" - value: "192.168.1.160" - access: "read-write" - filter: '' - display: "N3IPAddress" - comment: "" - - name: "n6IPAddr" - type: "string" - value: "192.168.1.161" - access: "read-write" - filter: '' - display: "N6IPAddress" - comment: "" - + - name: "ikeBindAddr" + type: "string" + value: "192.168.12.160" + access: "read-write" + filter: "" + display: "IKEBindAddress" + comment: "" + - name: "gtpBindAddr" + type: "string" + value: "192.168.12.161" + access: "read-write" + filter: "" + display: "GTPBindAddress" + comment: "" + - name: "fqdn" + type: "string" + value: "n3iwf.5gc.mnc00.mcc460.pub.3gppnetwork.org" + access: "read-write" + filter: "" + display: "FQDN" + comment: "" + - name: "internalIP" + type: "string" + value: "172.16.1.190" + access: "read-write" + filter: "" + display: "InternalIP" + comment: "" + - name: "udmAddr" + type: "string" + value: "172.16.1.140:8080" + access: "read-write" + filter: "" + display: "UdmIPAddrPort" + comment: "" + - name: "smfIPAddr" + type: "string" + value: "172.16.1.150" + access: "read-write" + filter: "" + display: "SmfIPAddress" + comment: "" + - name: "n3IPAddr" + type: "string" + value: "192.168.1.160" + access: "read-write" + filter: "" + display: "N3IPAddress" + comment: "" + - name: "n6IPAddr" + type: "string" + value: "192.168.1.161" + access: "read-write" + filter: "" + display: "N6IPAddress" + comment: "" diff --git a/config/param/nrf_param_config.yaml b/config/param/nrf_param_config.yaml index 8441a44a..45674c6b 100644 --- a/config/param/nrf_param_config.yaml +++ b/config/param/nrf_param_config.yaml @@ -1,64 +1,67 @@ nrf: system: display: "System" + sort: 1 + perms: "put" list: - - name: "serviceIP" - type: "ipv4" - value: "172.16.5.180" - access: "read-write" - filter: '' - display: "Service IP" - comment: "" - - name: "servicePort" - type: "int" - value: "8080" - access: "read-write" - filter: "0~65535" - display: "Service Port" - comment: "" - - name: "scheme" - type: "enum" - value: "0" - access: "read-write" - filter: "{\"0\":\"HTTP\", \"1\":\"HTTPS\"}" - display: "Scheme" - comment: "" + - name: "serviceIP" + type: "ipv4" + value: "172.16.5.180" + access: "read-write" + filter: "" + display: "Service IP" + comment: "" + - name: "servicePort" + type: "int" + value: "8080" + access: "read-write" + filter: "0~65535" + display: "Service Port" + comment: "" + - name: "scheme" + type: "enum" + value: "0" + access: "read-write" + filter: '{"0":"HTTP", "1":"HTTPS"}' + display: "Scheme" + comment: "" registeredNFs: display: "Registered NFs" - method: "get" + sort: 3 + perms: "get" array: - name: "index" type: "int" value: "1" access: "read-only" - filter: '1~256' + filter: "1~256" display: "Index" comment: "" - name: "nfType" type: "string" - value: '' + value: "" access: "read-only" - filter: '^.{1,128}$' + filter: "^.{1,128}$" display: "NF Type" comment: "" - name: "status" type: "string" - value: '' + value: "" access: "read-only" - filter: '^.{1,128}$' + filter: "^.{1,128}$" display: "Status" comment: "" - name: "nfId" type: "string" - value: '' + value: "" access: "read-only" - filter: '^.{1,128}$' + filter: "^.{1,128}$" display: "NF ID" comment: "" - name: "ipAddress" type: "string" - value: '' + value: "" access: "read-only" - filter: '^.{1,128}$' + filter: "^.{1,128}$" display: "IP Address" comment: "" diff --git a/config/param/nssf_param_config.yaml b/config/param/nssf_param_config.yaml index 0906ae59..05216278 100644 --- a/config/param/nssf_param_config.yaml +++ b/config/param/nssf_param_config.yaml @@ -1,258 +1,262 @@ nssf: general: display: "General" + sort: 1 list: - - name: "nssfName" - type: "string" - value: "" - access: "read-write" - filter: '' - display: "NSSF Name" - comment: "" - - name: "nrfUri" - type: "string" - value: "" - access: "read-write" - filter: '' - display: "NRF URI" - comment: "" - - name: "logLevel" - type: "string" - value: "error" - access: "read-write" - filter: '' - display: "Log Level" - comment: "" - - name: "nfId" - type: "string" - value: "" - access: "read-write" - filter: '' - display: "NF ID" - comment: "" - - name: "systemId" - type: "int" - value: "0" - access: "read-write" - filter: '' - display: "System ID" - comment: "" + - name: "nssfName" + type: "string" + value: "" + access: "read-write" + filter: "" + display: "NSSF Name" + comment: "" + - name: "nrfUri" + type: "string" + value: "" + access: "read-write" + filter: "" + display: "NRF URI" + comment: "" + - name: "logLevel" + type: "string" + value: "error" + access: "read-write" + filter: "" + display: "Log Level" + comment: "" + - name: "nfId" + type: "string" + value: "" + access: "read-write" + filter: "" + display: "NF ID" + comment: "" + - name: "systemId" + type: "int" + value: "0" + access: "read-write" + filter: "" + display: "System ID" + comment: "" sbi: display: "SBI" + sort: 3 list: - name: "scheme" type: "string" value: "http" access: "read-write" - filter: '' + filter: "" display: "Scheme" comment: "" - name: "registerIpv4" type: "string" value: "" access: "read-write" - filter: '' + filter: "" display: "Register IPv4" comment: "" - name: "bindingIpv4" type: "string" value: "" access: "read-write" - filter: '' + filter: "" display: "Binding IPv4" comment: "" - name: "registerIpv6" type: "string" value: "" access: "read-write" - filter: '' + filter: "" display: "Register IPv6" comment: "" - name: "bindingIpv6" type: "string" value: "" access: "read-write" - filter: '' + filter: "" display: "Binding IPv6" comment: "" - name: "ipType" type: "string" value: "ipv4" access: "read-write" - filter: '' + filter: "" display: "IP Type" comment: "" - name: "port" type: "int" value: "8080" access: "read-write" - filter: '' + filter: "" display: "Port" comment: "" - name: "telnetIpv4" type: "string" value: "" access: "read-write" - filter: '' + filter: "" display: "Telnet IPv4" comment: "" - name: "telnetIpv6" type: "string" value: "" access: "read-write" - filter: '' + filter: "" display: "Telnet IPv6" comment: "" - name: "telnetPort" type: "int" value: "4100" access: "read-write" - filter: '' + filter: "" display: "Telnet Port" comment: "" supportedNetworkSliceList: display: "Supported Network Slice List" + sort: 5 array: - name: "index" type: "int" value: "1" access: "read-only" - filter: '1~32' + filter: "1~32" display: "Index" comment: "1~32" - name: "mcc" type: "string" value: "001" access: "read-write" - filter: '' + filter: "" display: "MCC" comment: "" - name: "mnc" type: "string" value: "01" access: "read-write" - filter: '' + filter: "" display: "MNC" comment: "" - name: "tac" type: "string" value: "" access: "read-write" - filter: '' + filter: "" display: "TAC" comment: "" - name: "supportedSst" type: "int" value: "" access: "read-write" - filter: '' + filter: "" display: "Supported SST" comment: "" - name: "supportedSd" type: "string" value: "" access: "read-write" - filter: '' + filter: "" display: "Supported SD" comment: "" - name: "restrictedSst" type: "int" value: "" access: "read-write" - filter: '' + filter: "" display: "Restricted SST" comment: "" - name: "restrictedSd" type: "string" value: "" access: "read-write" - filter: '' + filter: "" display: "Restricted SD" comment: "" - name: "nrfId" type: "string" value: "" access: "read-write" - filter: '' + filter: "" display: "NRF ID" comment: "" - name: "nsiId" type: "string" value: "" access: "read-write" - filter: '' + filter: "" display: "NSI ID" comment: "" - name: "accessType" type: "string" value: "" access: "read-write" - filter: '' + filter: "" display: "Access Type" comment: "" - name: "amfSetId" type: "string" value: "" access: "read-write" - filter: '' + filter: "" display: "AMF Set ID" comment: "" plmnMappingList: display: "PLMN Mapping List" + sort: 7 array: - name: "index" type: "int" value: "1" access: "read-only" - filter: '1~32' + filter: "1~32" display: "Index" comment: "1~32" - name: "operatorName" type: "string" value: "" access: "read-write" - filter: '' + filter: "" display: "Operator Name" comment: "" - name: "mcc" type: "string" value: "001" access: "read-write" - filter: '' + filter: "" display: "MCC" comment: "" - name: "mnc" type: "string" value: "02" access: "read-write" - filter: '' + filter: "" display: "MNC" comment: "" - name: "servingSnssaiSst" type: "int" value: "1" access: "read-write" - filter: '' + filter: "" display: "Serving SNSSAI SST" comment: "" - name: "servingSnssaiSd" type: "string" value: "1" access: "read-write" - filter: '' + filter: "" display: "Serving SNSSAI SD" comment: "" - name: "homeSnssaiSst" type: "int" value: "1" access: "read-write" - filter: '' + filter: "" display: "Home SNSSAI SST" comment: "" - name: "homeSnssaiSd" type: "string" value: "1" access: "read-write" - filter: '' + filter: "" display: "Home SNSSAI SD" - comment: "" \ No newline at end of file + comment: "" diff --git a/config/param/pcf_param_config.yaml b/config/param/pcf_param_config.yaml index fa5c701a..eab8cf97 100644 --- a/config/param/pcf_param_config.yaml +++ b/config/param/pcf_param_config.yaml @@ -1,99 +1,101 @@ pcf: system: display: "System" + sort: 1 list: - - name: "serviceIP" - type: "ipv4" - value: "172.16.5.160" - access: "read-write" - filter: '' - display: "Service IP" - comment: "" - - name: "servicePort" - type: "int" - value: "8080" - access: "read-write" - filter: "0~65535" - display: "Service Port" - comment: "" - - name: "scheme" - type: "enum" - value: "0" - access: "read-write" - filter: "{\"0\":\"HTTP\", \"1\":\"HTTPS\"}" - display: "Scheme" - comment: "" - - name: "nrfUri" - type: "string" - value: "http://172.16.5.180:8080" - access: "read-write" - filter: '' - display: "NRF URI" - comment: "" - - name: "supportedPlmn1" - type: "string" - value: "00101" - access: "read-write" - filter: '^\d{5,6}$' - display: "Supported Plmn1" - comment: "" - - name: "supportedPlmn2" - type: "string" - value: "00101" - access: "read-write" - filter: '^\d{5,6}$' - display: "Supported Plmn2" - comment: "" - - name: "supportedPlmn3" - type: "string" - value: "00101" - access: "read-write" - filter: '^\d{5,6}$' - display: "Supported Plmn3" - comment: "" - - name: "supportedPlmn4" - type: "string" - value: "00101" - access: "read-write" - filter: '^\d{5,6}$' - display: "Supported Plmn4" - comment: "" + - name: "serviceIP" + type: "ipv4" + value: "172.16.5.160" + access: "read-write" + filter: "" + display: "Service IP" + comment: "" + - name: "servicePort" + type: "int" + value: "8080" + access: "read-write" + filter: "0~65535" + display: "Service Port" + comment: "" + - name: "scheme" + type: "enum" + value: "0" + access: "read-write" + filter: '{"0":"HTTP", "1":"HTTPS"}' + display: "Scheme" + comment: "" + - name: "nrfUri" + type: "string" + value: "http://172.16.5.180:8080" + access: "read-write" + filter: "" + display: "NRF URI" + comment: "" + - name: "supportedPlmn1" + type: "string" + value: "00101" + access: "read-write" + filter: '^\d{5,6}$' + display: "Supported Plmn1" + comment: "" + - name: "supportedPlmn2" + type: "string" + value: "00101" + access: "read-write" + filter: '^\d{5,6}$' + display: "Supported Plmn2" + comment: "" + - name: "supportedPlmn3" + type: "string" + value: "00101" + access: "read-write" + filter: '^\d{5,6}$' + display: "Supported Plmn3" + comment: "" + - name: "supportedPlmn4" + type: "string" + value: "00101" + access: "read-write" + filter: '^\d{5,6}$' + display: "Supported Plmn4" + comment: "" serviceAreaRestriction: display: "Service Area Restriction" + sort: 3 array: - name: "index" type: "int" value: "1" access: "read-only" - filter: '1~16' + filter: "1~16" display: "Index" comment: "" - name: "name" type: "string" - value: 'def_ambr' + value: "def_ambr" access: "read-write" - filter: '^.{1,32}$' + filter: "^.{1,32}$" display: "Name" comment: "" - name: "restrictionType" type: "enum" - value: '0' + value: "0" access: "read-write" - filter: "{\"0\":\"Allowed Areas\", \"1\":\"Not Allowed Areas\"}" + filter: '{"0":"Allowed Areas", "1":"Not Allowed Areas"}' display: "Restriction Type" comment: "" - name: "tacs" type: "string" - value: '123' + value: "123" access: "read-write" - filter: '' + filter: "" display: "TACs" comment: "" - name: "areaCodes" type: "string" - value: '123456' + value: "123456" access: "read-write" - filter: '' + filter: "" display: "Area Codes" comment: "" - name: "maxTAs" @@ -105,139 +107,141 @@ pcf: comment: "" pccRules: display: "PCC Rules" + sort: 5 array: - name: "index" type: "int" value: "1" access: "read-only" - filter: '1~64' + filter: "1~64" display: "Index" comment: "" - name: "ruleId" type: "string" - value: 'internet' + value: "internet" access: "read-write" - filter: '^.{1,63}$' + filter: "^.{1,63}$" display: "Rule ID" comment: "" - name: "activate" type: "bool" - value: 'true' + value: "true" access: "read-write" - filter: 'false;true;' + filter: "false;true;" display: "Activate" comment: "" - name: "precedence" type: "int" value: "80" access: "read-write" - filter: '0~255' + filter: "0~255" display: "Precedence" comment: "" - name: "flowUsage" type: "enum" - value: '0' + value: "0" access: "read-write" - filter: "{\"0\":\"General\", \"1\":\"IMS-Signalling\"}" + filter: '{"0":"General", "1":"IMS-Signalling"}' display: "Flow Usage" comment: "" - name: "appId" type: "string" - value: '' + value: "" access: "read-write" - filter: '^.{1,63}$' + filter: "^.{1,63}$" display: "APP ID" comment: "" - name: "flowTemplate" type: "string" - value: 'flow_any' + value: "flow_any" access: "read-write" - filter: '^.{1,255}$' + filter: "^.{1,255}$" display: "Flow Template" comment: "" - name: "qosId" type: "string" - value: 'qos_internet' + value: "qos_internet" access: "read-write" - filter: '^.{1,63}$' + filter: "^.{1,63}$" display: "QoS ID" comment: "" - name: "trafficControlId" type: "string" - value: '' + value: "" access: "read-write" - filter: '^.{1,63}$' + filter: "^.{1,63}$" display: "Traffic Control ID" comment: "" - name: "usageMonitoringId" type: "string" - value: '' + value: "" access: "read-write" - filter: '^.{1,63}$' + filter: "^.{1,63}$" display: "Usage Monitoring ID" comment: "" sessionRules: display: "Session Rules" + sort: 7 array: - name: "index" type: "int" value: "1" access: "read-only" - filter: '1~64' + filter: "1~64" display: "Index" comment: "" - name: "ruleId" type: "string" - value: 'internet' + value: "internet" access: "read-write" - filter: '^.{1,63}$' + filter: "^.{1,63}$" display: "Rule ID" comment: "" - name: "activate" type: "bool" - value: 'true' + value: "true" access: "read-write" - filter: 'false;true;' + filter: "false;true;" display: "Activate" comment: "" - name: "fiveQI" type: "int" value: "9" access: "read-write" - filter: '0~255' + filter: "0~255" display: "5QI" comment: "" - name: "fiveQIPriorityLevel" type: "int" value: "80" access: "read-write" - filter: '0~127' + filter: "0~127" display: "5QI Priority Level" comment: "" - name: "flowUsage" type: "enum" - value: '0' + value: "0" access: "read-write" - filter: "{\"0\":\"General\", \"1\":\"IMS-Signalling\"}" + filter: '{"0":"General", "1":"IMS-Signalling"}' display: "Flow Usage" comment: "" - name: "usageMonitoringId" type: "string" - value: '' + value: "" access: "read-write" - filter: '^.{1,63}$' + filter: "^.{1,63}$" display: "Usage Monitoring ID" comment: "" - name: "ambrDl" type: "string" - value: '200Mbps' + value: "200Mbps" access: "read-write" filter: '^\d+(\.\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$' display: "AMBR Downlink" comment: "" - name: "ambrUl" type: "string" - value: '100Mbps' + value: "100Mbps" access: "read-write" filter: '^\d+(\.\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$' display: "AMBR Uplink" @@ -246,227 +250,231 @@ pcf: type: "int" value: "0" access: "read-write" - filter: '0~4095' + filter: "0~4095" display: "Averaging Window" comment: "" - name: "maxDataBurstVolume" type: "int" value: "0" access: "read-write" - filter: '0~4095' + filter: "0~4095" display: "Max Data Burst Volume" comment: "" - name: "arpPriorityLevel" type: "int" value: "1" access: "read-write" - filter: '1~15' + filter: "1~15" display: "ARP Priority Level" comment: "" - name: "arpPreemptCap" type: "enum" value: "0" access: "read-write" - filter: "{\"0\":\"Not Preempt\",\"1\":\"May Preempt\"}" + filter: '{"0":"Not Preempt","1":"May Preempt"}' display: "ARP Preempt Capability" comment: "" - name: "arpPreemptVuln" type: "enum" value: "0" access: "read-write" - filter: "{\"0\":\"Not Preemptable\",\"1\":\"Preemptable\"}" + filter: '{"0":"Not Preemptable","1":"Preemptable"}' display: "ARP Preempt Vulnerability" comment: "" - name: "maxbrDl" type: "string" - value: '' + value: "" access: "read-write" filter: '^\d+(\.\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$' display: "Max Bitrate Downlink" comment: "" - name: "maxbrUl" type: "string" - value: '' + value: "" access: "read-write" filter: '^\d+(\.\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$' display: "Max Bitrate Uplink" comment: "" - name: "gbrDl" type: "string" - value: '' + value: "" access: "read-write" filter: '^\d+(\.\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$' display: "GBR Downlink" comment: "" - name: "gbrUl" type: "string" - value: '' + value: "" access: "read-write" filter: '^\d+(\.\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$' display: "GBR Uplink" comment: "" gxServer: display: "Gx Server" + sort: 9 list: - - name: "enable" - type: "bool" - value: 'true' - access: "read-write" - filter: 'false;true;' - display: "Enable" - comment: "" - - name: "netType" - type: "enum" - value: '1' - access: "read-write" - filter: "{\"0\":\"TCP\",\"1\":\"SCTP\"}" - display: "Link Type" - comment: "" - - name: "addr" - type: "string" - value: "172.16.5.140:3868" - access: "read-write" - filter: '' - display: "Address" - comment: "" - - name: "host" - type: "string" - value: "hss.ims.mnc001.mcc001.3gppnetwork.org" - access: "read-write" - filter: '^.{0,127}$' - display: "Host" - comment: "" - - name: "realm" - type: "string" - value: "ims.mnc001.mcc001.3gppnetwork.org" - access: "read-write" - filter: '^.{0,127}$' - display: "Realm" - comment: "" + - name: "enable" + type: "bool" + value: "true" + access: "read-write" + filter: "false;true;" + display: "Enable" + comment: "" + - name: "netType" + type: "enum" + value: "1" + access: "read-write" + filter: '{"0":"TCP","1":"SCTP"}' + display: "Link Type" + comment: "" + - name: "addr" + type: "string" + value: "172.16.5.140:3868" + access: "read-write" + filter: "" + display: "Address" + comment: "" + - name: "host" + type: "string" + value: "hss.ims.mnc001.mcc001.3gppnetwork.org" + access: "read-write" + filter: "^.{0,127}$" + display: "Host" + comment: "" + - name: "realm" + type: "string" + value: "ims.mnc001.mcc001.3gppnetwork.org" + access: "read-write" + filter: "^.{0,127}$" + display: "Realm" + comment: "" rxServer: display: "Rx Server" + sort: 11 list: - - name: "enable" - type: "bool" - value: 'true' - access: "read-write" - filter: 'false;true;' - display: "Enable" - comment: "" - - name: "netType" - type: "enum" - value: '0' - access: "read-write" - filter: "{\"0\":\"TCP\",\"1\":\"SCTP\"}" - display: "Link Type" - comment: "" - - name: "addr" - type: "string" - value: "172.16.5.140:3868" - access: "read-write" - filter: '' - display: "Address" - comment: "" - - name: "host" - type: "string" - value: "hss.ims.mnc001.mcc001.3gppnetwork.org" - access: "read-write" - filter: '^.{0,127}$' - display: "Host" - comment: "" - - name: "realm" - type: "string" - value: "ims.mnc001.mcc001.3gppnetwork.org" - access: "read-write" - filter: '^.{0,127}$' - display: "Realm" - comment: "" + - name: "enable" + type: "bool" + value: "true" + access: "read-write" + filter: "false;true;" + display: "Enable" + comment: "" + - name: "netType" + type: "enum" + value: "0" + access: "read-write" + filter: '{"0":"TCP","1":"SCTP"}' + display: "Link Type" + comment: "" + - name: "addr" + type: "string" + value: "172.16.5.140:3868" + access: "read-write" + filter: "" + display: "Address" + comment: "" + - name: "host" + type: "string" + value: "hss.ims.mnc001.mcc001.3gppnetwork.org" + access: "read-write" + filter: "^.{0,127}$" + display: "Host" + comment: "" + - name: "realm" + type: "string" + value: "ims.mnc001.mcc001.3gppnetwork.org" + access: "read-write" + filter: "^.{0,127}$" + display: "Realm" + comment: "" flowTemplate: display: "Flow Template" + sort: 13 array: - name: "index" type: "int" value: "1" access: "read-only" - filter: '1~256' + filter: "1~256" display: "Index" comment: "" - name: "templateName" type: "string" - value: 'flow_any' + value: "flow_any" access: "read-write" - filter: '^.{1,63}$' + filter: "^.{1,63}$" display: "Template Name" comment: "" - name: "flowDescription" type: "string" - value: 'permit out ip from any to assigned' + value: "permit out ip from any to assigned" access: "read-write" - filter: '^.{1,127}$' + filter: "^.{1,127}$" display: "Flow Description" comment: "" - name: "flowDirection" type: "enum" - value: '0' + value: "0" access: "read-write" - filter: "{\"0\":\"Unspecified\", \"1\":\"Uplink\", \"2\":\"Downlink\", \"3\":\"Bidirectional\"}" + filter: '{"0":"Unspecified", "1":"Uplink", "2":"Downlink", "3":"Bidirectional"}' display: "Flow Direction" comment: "" qosTemplate: display: "QoS Template" + sort: 15 array: - name: "index" type: "int" value: "1" access: "read-only" - filter: '1~64' + filter: "1~64" display: "Index" comment: "" - name: "qosId" type: "string" - value: 'qos_internet' + value: "qos_internet" access: "read-write" - filter: '^.{1,63}$' + filter: "^.{1,63}$" display: "QoS ID" comment: "" - name: "fiveQI" type: "int" value: "9" access: "read-write" - filter: '0~255' + filter: "0~255" display: "5QI" comment: "" - name: "fiveQIPriorityLevel" type: "int" value: "80" access: "read-write" - filter: '0~127' + filter: "0~127" display: "5QI Priority Level" comment: "" - name: "maxbrDl" type: "string" - value: '' + value: "" access: "read-write" filter: '^\d+(\.\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$' display: "Max Bitrate Downlink" comment: "" - name: "maxbrUl" type: "string" - value: '' + value: "" access: "read-write" filter: '^\d+(\.\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$' display: "Max Bitrate Uplink" comment: "" - name: "gbrDl" type: "string" - value: '' + value: "" access: "read-write" filter: '^\d+(\.\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$' display: "GBR Downlink" comment: "" - name: "gbrUl" type: "string" - value: '' + value: "" access: "read-write" filter: '^\d+(\.\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$' display: "GBR Uplink" @@ -475,148 +483,151 @@ pcf: type: "int" value: "1" access: "read-write" - filter: '1~15' + filter: "1~15" display: "ARP Priority Level" comment: "" - name: "arpPreemptCap" type: "enum" value: "0" access: "read-write" - filter: "{\"0\":\"Not Preempt\",\"1\":\"May Preempt\"}" + filter: '{"0":"Not Preempt","1":"May Preempt"}' display: "ARP Preempt Capability" comment: "" - name: "arpPreemptVuln" type: "enum" value: "0" access: "read-write" - filter: "{\"0\":\"Not Preemptable\",\"1\":\"Preemptable\"}" + filter: '{"0":"Not Preemptable","1":"Preemptable"}' display: "ARP Preempt Vulnerability" comment: "" - name: "defQosFlowIndication" type: "bool" - value: 'false' + value: "false" access: "read-write" - filter: 'false;true;' + filter: "false;true;" display: "Default QoS Flow Indication" comment: "" usageMonitoringTemplate: display: "Usage Monitoring Template" + sort: 17 array: - name: "index" type: "int" value: "1" access: "read-only" - filter: '1~64' + filter: "1~64" display: "Index" comment: "" - name: "umId" type: "string" - value: 'flow_any' + value: "flow_any" access: "read-write" - filter: '^.{1,63}$' + filter: "^.{1,63}$" display: "Usage Monitoring ID" comment: "" - name: "volumeThreshold" type: "int" - value: '5242880' + value: "5242880" access: "read-write" - filter: '' + filter: "" display: "Volume Threshold(KB)" comment: "" - name: "volumeThresholdUplink" type: "int" - value: '0' + value: "0" access: "read-write" - filter: '' + filter: "" display: "Volume Threshold Uplink(KB)" comment: "" - name: "volumeThresholdDownlink" type: "int" - value: '0' + value: "0" access: "read-write" - filter: '' + filter: "" display: "Volume Threshold Downlink(KB)" comment: "" - name: "timeThreshold" type: "int" - value: '0' + value: "0" access: "read-write" - filter: '' + filter: "" display: "Time Threshold" comment: "" - name: "inactivityTime" type: "int" - value: '0' + value: "0" access: "read-write" - filter: '' + filter: "" display: "Inactivity Time" comment: "" trafficControlTemplate: display: "Traffic Control Template" + sort: 19 array: - name: "index" type: "int" value: "1" access: "read-only" - filter: '1~64' + filter: "1~64" display: "Index" comment: "" - name: "tcId" type: "string" - value: '' + value: "" access: "read-write" - filter: '^.{1,63}$' + filter: "^.{1,63}$" display: "Traffic Control ID" comment: "" - name: "flowStatus" type: "enum" - value: '0' + value: "0" access: "read-write" - filter: "{\"0\":\"Disable\", \"1\":\"Uplink\", \"2\":\"Downlink\", \"3\":\"Enable\", \"4\":\"Remove\"}" + filter: '{"0":"Disable", "1":"Uplink", "2":"Downlink", "3":"Enable", "4":"Remove"}' display: "Flow Status" comment: "" - name: "muteNotif" type: "bool" - value: 'true' + value: "true" access: "read-write" - filter: 'false;true;' + filter: "false;true;" display: "Mute Notify" comment: "" - name: "dnai" type: "string" - value: '' + value: "" access: "read-write" - filter: '^.{1,63}$' + filter: "^.{1,63}$" display: "Route to Location DNAI" comment: "" headerEnrichTemplate: display: "Header Enrich Template" + sort: 21 array: - name: "index" type: "int" value: "1" access: "read-only" - filter: '1~16' + filter: "1~16" display: "Index" comment: "" - name: "templateName" type: "string" - value: '' + value: "" access: "read-write" - filter: '^.{1,63}$' + filter: "^.{1,63}$" display: "Template Name" comment: "" - name: "headerType" type: "enum" - value: '0' + value: "0" access: "read-write" - filter: "{\"0\":\"GPSI\", \"1\":\"SUPI\", \"2\":\"UE IP\", \"3\":\"User Location\", \"4\":\"DNN\"}" + filter: '{"0":"GPSI", "1":"SUPI", "2":"UE IP", "3":"User Location", "4":"DNN"}' display: "Header Type" comment: "" - name: "headerName" type: "string" - value: '' + value: "" access: "read-write" - filter: '^.{1,63}$' + filter: "^.{1,63}$" display: "Header Name" comment: "" diff --git a/config/param/smf_param_config.yaml b/config/param/smf_param_config.yaml index b6863a8d..9e780d33 100644 --- a/config/param/smf_param_config.yaml +++ b/config/param/smf_param_config.yaml @@ -1,597 +1,604 @@ smf: smfSystem: display: "SMF System Config" + sort: 1 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: "pcfEnable" - type: "bool" - value: "true" - access: "read-write" - filter: '' - display: "PCF Enable" - 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: "chfEnable" - type: "bool" - value: "false" - access: "read-write" - filter: "{\"0\":\"false\", \"1\":\"true\"}" - display: "5G Charging Enable" - - name: "chfPrimaryUri" - type: "string" - value: "http://172.16.5.240:8080" - access: "read-write" - filter: '' - display: "CHF Primary URI" - comment: "" - - name: "chfSecondaryUri" - type: "string" - value: "" - access: "read-write" - filter: '' - display: "CHF Secondary 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: "" + - 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: "pcfEnable" + type: "bool" + value: "true" + access: "read-write" + filter: "" + display: "PCF Enable" + 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: "chfEnable" + type: "bool" + value: "false" + access: "read-write" + filter: '{"0":"false", "1":"true"}' + display: "5G Charging Enable" + - name: "chfPrimaryUri" + type: "string" + value: "http://172.16.5.240:8080" + access: "read-write" + filter: "" + display: "CHF Primary URI" + comment: "" + - name: "chfSecondaryUri" + type: "string" + value: "" + access: "read-write" + filter: "" + display: "CHF Secondary 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: "" spgwSystem: display: "SPGW Sytem Config" + sort: 3 list: - - name: "s11Ip" - type: "string" - value: "172.16.5.150" - access: "read-write" - filter: '' - display: "Local S11 IP" - comment: "" - - name: "localDiameterIp" - type: "string" - value: "172.16.5.150" - access: "read-write" - filter: '' - display: "Local Diameter IP" - comment: "" - - name: "localDiameterHostName" - type: "string" - value: "smf.mnc001.mcc001.3gppnetwork.org" - access: "read-write" - filter: '' - display: "Local Diameter Host Name" - comment: "" - - name: "localDiameterRealmName" - type: "string" - value: "mnc001.mcc001.3gppnetwork.org" - access: "read-write" - filter: '' - display: "Local Diameter Realm Name" - comment: "" - - name: "peerGyEnable" - type: "bool" - value: 'false' - access: "read-write" - filter: 'false;true;' - display: "Gy Enable" - comment: "" - - name: "primaryPeerGyIp" - type: "string" - value: "" - access: "read-write" - filter: '' - display: "Primary Remote Gy IP" - comment: "" - - name: "primaryPeerGyPort" - type: "int" - value: "3868" - access: "read-write" - filter: "0~65535" - display: "Primary Remote Gy Port" - comment: "0~65535" - - name: "secondaryPeerGyIp" - type: "string" - value: "" - access: "read-write" - filter: '' - display: "Secondary Remote Gy IP" - comment: "" - - name: "secondaryPeerGyPort" - type: "int" - value: "3868" - access: "read-write" - filter: "0~65535" - display: "Secondary Remote Gy Port" - comment: "0~65535" - - name: "peerGxEnable" - type: "bool" - value: 'false' - access: "read-write" - filter: 'false;true;' - display: "Gx Enable" - comment: "" - - name: "gxChargingEnable" - type: "bool" - value: 'false' - access: "read-write" - filter: 'false;true;' - display: "Gx Charging Enable" - comment: "" - - name: "primaryPeerGxIp" - type: "string" - value: "" - access: "read-write" - filter: '' - display: "Primary Remote Gx IP" - comment: "" - - name: "primaryPeerGxPort" - type: "int" - value: "3868" - access: "read-write" - filter: "0~65535" - display: "Primary Remote Gx Port" - comment: "0~65535" - - name: "secondaryPeerGxIp" - type: "string" - value: "" - access: "read-write" - filter: '' - display: "Secondary Remote Gx IP" - comment: "" - - name: "secondaryPeerGxPort" - type: "int" - value: "3868" - access: "read-write" - filter: "0~65535" - display: "Secondary Remote Gx Port" - comment: "0~65535" + - name: "s11Ip" + type: "string" + value: "172.16.5.150" + access: "read-write" + filter: "" + display: "Local S11 IP" + comment: "" + - name: "localDiameterIp" + type: "string" + value: "172.16.5.150" + access: "read-write" + filter: "" + display: "Local Diameter IP" + comment: "" + - name: "localDiameterHostName" + type: "string" + value: "smf.mnc001.mcc001.3gppnetwork.org" + access: "read-write" + filter: "" + display: "Local Diameter Host Name" + comment: "" + - name: "localDiameterRealmName" + type: "string" + value: "mnc001.mcc001.3gppnetwork.org" + access: "read-write" + filter: "" + display: "Local Diameter Realm Name" + comment: "" + - name: "peerGyEnable" + type: "bool" + value: "false" + access: "read-write" + filter: "false;true;" + display: "Gy Enable" + comment: "" + - name: "primaryPeerGyIp" + type: "string" + value: "" + access: "read-write" + filter: "" + display: "Primary Remote Gy IP" + comment: "" + - name: "primaryPeerGyPort" + type: "int" + value: "3868" + access: "read-write" + filter: "0~65535" + display: "Primary Remote Gy Port" + comment: "0~65535" + - name: "secondaryPeerGyIp" + type: "string" + value: "" + access: "read-write" + filter: "" + display: "Secondary Remote Gy IP" + comment: "" + - name: "secondaryPeerGyPort" + type: "int" + value: "3868" + access: "read-write" + filter: "0~65535" + display: "Secondary Remote Gy Port" + comment: "0~65535" + - name: "peerGxEnable" + type: "bool" + value: "false" + access: "read-write" + filter: "false;true;" + display: "Gx Enable" + comment: "" + - name: "gxChargingEnable" + type: "bool" + value: "false" + access: "read-write" + filter: "false;true;" + display: "Gx Charging Enable" + comment: "" + - name: "primaryPeerGxIp" + type: "string" + value: "" + access: "read-write" + filter: "" + display: "Primary Remote Gx IP" + comment: "" + - name: "primaryPeerGxPort" + type: "int" + value: "3868" + access: "read-write" + filter: "0~65535" + display: "Primary Remote Gx Port" + comment: "0~65535" + - name: "secondaryPeerGxIp" + type: "string" + value: "" + access: "read-write" + filter: "" + display: "Secondary Remote Gx IP" + comment: "" + - name: "secondaryPeerGxPort" + type: "int" + value: "3868" + access: "read-write" + filter: "0~65535" + display: "Secondary Remote Gx Port" + comment: "0~65535" upfConfig: display: "UPF Config" + sort: 5 array: - - name: "index" - type: "int" - value: "" - access: "read-only" - filter: '0~2047' - 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: "ipPoolType" - type: "string" - value: "IPv4v6" - access: "read-write" - filter: '' - display: "Ip Pool Type" - comment: "IPv4,IPv6,IPv4v6" - - 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" - - name: "ueDnnIpPool" - display: "UE DNN IP Pool" - array: - name: "index" type: "int" value: "" access: "read-only" - filter: '0~2047' + filter: "0~2047" display: "Index" comment: "" - - name: "dnn" + - name: "id" type: "string" value: "" access: "read-write" - filter: '1~64' - display: "DNN" + 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: "ipPoolType" - type: "string" + type: "string" value: "IPv4v6" access: "read-write" - filter: '' + filter: "" display: "Ip Pool Type" comment: "IPv4,IPv6,IPv4v6" - name: "ipv4Pools" - type: "string" + type: "string" value: "" access: "read-write" - filter: '10~256' + filter: "10~256" display: "IPv4 Pools" comment: "CIDR format, e.g. 192.168.1.0/24" - name: "ipv6Pools" - type: "string" + type: "string" value: "" access: "read-write" - filter: '5~512' + 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\"}" + filter: '{"0":"false", "1":"true"}' display: "Static IPv4 Enable" comment: "" - name: "staticIpv4Start" type: "ipv4" value: "" access: "read-write" - filter: '' + filter: "" display: "Static IPv4 Start" comment: "ipv4 format" - name: "staticIpv4End" type: "ipv4" value: "" access: "read-write" - filter: '' + filter: "" display: "Static IPv4 End" comment: "ipv4 format" - name: "staticIpv6Enable" type: "bool" value: "" access: "read-write" - filter: "{\"0\":\"false\", \"1\":\"true\"}" + filter: '{"0":"false", "1":"true"}' display: "Static IPv6 Enable" comment: "" - name: "staticIpv6Start" type: "ipv6" value: "" access: "read-write" - filter: '' + filter: "" display: "Static IPv6 Start" comment: "ipv6 format" - name: "staticIpv6End" type: "ipv6" value: "" access: "read-write" - filter: '' + filter: "" display: "Static IPv6 End" comment: "ipv6 format" + - name: "ueDnnIpPool" + display: "UE DNN IP Pool" + array: + - name: "index" + type: "int" + value: "" + access: "read-only" + filter: "0~2047" + display: "Index" + comment: "" + - name: "dnn" + type: "string" + value: "" + access: "read-write" + filter: "1~64" + display: "DNN" + comment: "" + - name: "ipPoolType" + type: "string" + value: "IPv4v6" + access: "read-write" + filter: "" + display: "Ip Pool Type" + comment: "IPv4,IPv6,IPv4v6" + - 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" + sort: 7 array: - - name: "index" - type: "int" - value: "0" - access: "read-only" - 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: "" + - name: "index" + type: "int" + value: "0" + access: "read-only" + 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: "" dnnTaiSelectUpf: display: "DNN TAI Select UPF" + sort: 9 array: - - name: "index" - type: "int" - value: "" - access: "read-only" - 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: "" + - name: "index" + type: "int" + value: "" + access: "read-only" + 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: "" snssaiSelectUpf: display: "SNSSAI Select UPF" + sort: 11 array: - - name: "index" - type: "int" - value: "" - access: "read-only" - filter: '0~65535' - display: "Index" - comment: "" - - name: "enable" - type: "bool" - value: 'true' - access: "read-write" - filter: 'false;true;' - display: "Enable" - - name: "snssai" - type: "string" - value: "1-000001" - access: "read-write" - filter: '1~64' - display: "SNSSAI" - comment: "sst1-sd1;sst2-sd2;sst3-sd3" - - name: "upfId" - type: "string" - value: "upf1-Id" - access: "read-write" - filter: '1~64' - display: "UPF ID" - comment: "upf1-id;upf2-id;upf3-id" + - name: "index" + type: "int" + value: "" + access: "read-only" + filter: "0~65535" + display: "Index" + comment: "" + - name: "enable" + type: "bool" + value: "true" + access: "read-write" + filter: "false;true;" + display: "Enable" + - name: "snssai" + type: "string" + value: "1-000001" + access: "read-write" + filter: "1~64" + display: "SNSSAI" + comment: "sst1-sd1;sst2-sd2;sst3-sd3" + - name: "upfId" + type: "string" + value: "upf1-Id" + access: "read-write" + filter: "1~64" + display: "UPF ID" + comment: "upf1-id;upf2-id;upf3-id" offlineChargingConfig: display: "Offline Charging Config" + sort: 13 list: - - name: "cdrFileName" - type: "string" - value: "smf.cdr" - access: "read-write" - filter: "1~64" - display: "CDR File Name" - comment: "" - - name: "cdrFilePath" - type: "string" - value: "/var/log/smfCdr" - access: "read-write" - filter: "1~256" - display: "CDR File Path" - comment: "" - - name: "cdrFileNum" - type: "int" - value: "50" - access: "read-write" - filter: "1~999999999" - display: "CDR File Num" - comment: "" - - name: "cdrFileSize" - type: "int" - value: "300" - access: "read-write" - filter: "1~999999" - display: "CDR File Size" - comment: "Megabytes" - - name: "cdrFileMaxAge" - type: "int" - value: "30" - access: "read-write" - filter: "0~9999" - display: "CDR File Max Age" - comment: "Days" - - name: "freeSubsCdrEnable" - type: "bool" - value: "false" - access: "read-write" - filter: "" - display: "Free Subscribers CDR Enable" - comment: "" - - name: "timeThreshold" - type: "int" - value: "600" - access: "read-write" - filter: "0~999999999" - display: "Time Threshold" - comment: "Seconds" - - name: "volumeThreshold" - type: "int" - value: "0" - access: "read-write" - filter: "0~999999999999999" - display: "Volume Threshold" - comment: "Bytes" \ No newline at end of file + - name: "cdrFileName" + type: "string" + value: "smf.cdr" + access: "read-write" + filter: "1~64" + display: "CDR File Name" + comment: "" + - name: "cdrFilePath" + type: "string" + value: "/var/log/smfCdr" + access: "read-write" + filter: "1~256" + display: "CDR File Path" + comment: "" + - name: "cdrFileNum" + type: "int" + value: "50" + access: "read-write" + filter: "1~999999999" + display: "CDR File Num" + comment: "" + - name: "cdrFileSize" + type: "int" + value: "300" + access: "read-write" + filter: "1~999999" + display: "CDR File Size" + comment: "Megabytes" + - name: "cdrFileMaxAge" + type: "int" + value: "30" + access: "read-write" + filter: "0~9999" + display: "CDR File Max Age" + comment: "Days" + - name: "freeSubsCdrEnable" + type: "bool" + value: "false" + access: "read-write" + filter: "" + display: "Free Subscribers CDR Enable" + comment: "" + - name: "timeThreshold" + type: "int" + value: "600" + access: "read-write" + filter: "0~999999999" + display: "Time Threshold" + comment: "Seconds" + - name: "volumeThreshold" + type: "int" + value: "0" + access: "read-write" + filter: "0~999999999999999" + display: "Volume Threshold" + comment: "Bytes" diff --git a/config/param/smsc_param_config.yaml b/config/param/smsc_param_config.yaml index 5b135e87..1f06e7d6 100644 --- a/config/param/smsc_param_config.yaml +++ b/config/param/smsc_param_config.yaml @@ -1,208 +1,210 @@ smsc: system: display: "System" + sort: 1 list: - - name: "cdrFlag" - type: "bool" - value: "1" - access: "read-write" - filter: '{"0":"false","1":"true"}' - display: "CDR Flag" - comment: "" - - name: "smValidity" - type: "int" - value: "259200" - access: "read-write" - filter: '0-2147483647' - display: "SM Validity" - comment: "" - - name: "logFlag" - type: "bool" - value: "1" - access: "read-write" - filter: '{"0":"false","1":"true"}' - display: "Log Flag" - comment: "" - - name: "localPollingFlag" - type: "bool" - value: "1" - access: "read-write" - filter: '{"0":"false","1":"true"}' - display: "Local Polling Flag" - comment: "Enable or disable resend pending SMS to unattainable local users." - - name: "localRoamingOutPollingFlag" - type: "bool" - value: "1" - access: "read-write" - filter: '{"0":"false","1":"true"}' - display: "Local Roaming Out Polling Flag" - comment: "Enable or disable resend pending SMS to unattainable outbound roaming users." - - name: "visitorRoamingInPollingFlag" - type: "bool" - value: "1" - access: "read-write" - filter: '{"0":"false","1":"true"}' - display: "Visitor Roaming In Polling Flag" - comment: "Enable or disable resend pending SMS to unattainable inbound roaming users." - - name: "otherPollingFlag" - type: "bool" - value: "1" - access: "read-write" - filter: '{"0":"false","1":"true"}' - display: "Other Polling Flag" - comment: "Enable or disable resend pending SMS to other unattainable users." - - name: "pollingNumber" - type: "int" - value: "64" - access: "read-write" - filter: '0-64' - display: "Polling Number" - comment: "Define the maximum port number that the queue of pending SMS may grow to." - - name: "priorityFlag" - type: "bool" - value: "1" - access: "read-write" - filter: '{"0":"false","1":"true"}' - display: "Priority Flag" - comment: "Specify the priority parameter of SM_RP_PRI. true = High; false = Low." - - name: "tpReplyPathFlag" - type: "bool" - value: "1" - access: "read-write" - filter: '{"0":"false","1":"true"}' - display: "TP Reply Path Flag" - comment: "Enable or disable TP-Reply-Path parameter in the SMS-DELIVER data unit." - - name: "smscDomain" - type: "string" - value: "0.0.0.0" - access: "read-write" - filter: '0~16' - display: "SMSC Domain" - comment: "" - - name: "csfbVolteFlag" - type: "bool" - value: "1" - access: "read-write" - filter: '{"0":"false","1":"true"}' - display: "CSFB VoLTE Flag" - comment: "" - - name: "camelFlag" - type: "bool" - value: "0" - access: "read-write" - filter: '{"0":"false","1":"true"}' - display: "Camel Flag" - comment: "" - - name: "scfAddress" - type: "string" - value: "0.0.0.0" - access: "read-write" - filter: '0~16' - display: "SCF Address" - comment: "" + - name: "cdrFlag" + type: "bool" + value: "1" + access: "read-write" + filter: '{"0":"false","1":"true"}' + display: "CDR Flag" + comment: "" + - name: "smValidity" + type: "int" + value: "259200" + access: "read-write" + filter: "0-2147483647" + display: "SM Validity" + comment: "" + - name: "logFlag" + type: "bool" + value: "1" + access: "read-write" + filter: '{"0":"false","1":"true"}' + display: "Log Flag" + comment: "" + - name: "localPollingFlag" + type: "bool" + value: "1" + access: "read-write" + filter: '{"0":"false","1":"true"}' + display: "Local Polling Flag" + comment: "Enable or disable resend pending SMS to unattainable local users." + - name: "localRoamingOutPollingFlag" + type: "bool" + value: "1" + access: "read-write" + filter: '{"0":"false","1":"true"}' + display: "Local Roaming Out Polling Flag" + comment: "Enable or disable resend pending SMS to unattainable outbound roaming users." + - name: "visitorRoamingInPollingFlag" + type: "bool" + value: "1" + access: "read-write" + filter: '{"0":"false","1":"true"}' + display: "Visitor Roaming In Polling Flag" + comment: "Enable or disable resend pending SMS to unattainable inbound roaming users." + - name: "otherPollingFlag" + type: "bool" + value: "1" + access: "read-write" + filter: '{"0":"false","1":"true"}' + display: "Other Polling Flag" + comment: "Enable or disable resend pending SMS to other unattainable users." + - name: "pollingNumber" + type: "int" + value: "64" + access: "read-write" + filter: "0-64" + display: "Polling Number" + comment: "Define the maximum port number that the queue of pending SMS may grow to." + - name: "priorityFlag" + type: "bool" + value: "1" + access: "read-write" + filter: '{"0":"false","1":"true"}' + display: "Priority Flag" + comment: "Specify the priority parameter of SM_RP_PRI. true = High; false = Low." + - name: "tpReplyPathFlag" + type: "bool" + value: "1" + access: "read-write" + filter: '{"0":"false","1":"true"}' + display: "TP Reply Path Flag" + comment: "Enable or disable TP-Reply-Path parameter in the SMS-DELIVER data unit." + - name: "smscDomain" + type: "string" + value: "0.0.0.0" + access: "read-write" + filter: "0~16" + display: "SMSC Domain" + comment: "" + - name: "csfbVolteFlag" + type: "bool" + value: "1" + access: "read-write" + filter: '{"0":"false","1":"true"}' + display: "CSFB VoLTE Flag" + comment: "" + - name: "camelFlag" + type: "bool" + value: "0" + access: "read-write" + filter: '{"0":"false","1":"true"}' + display: "Camel Flag" + comment: "" + - name: "scfAddress" + type: "string" + value: "0.0.0.0" + access: "read-write" + filter: "0~16" + display: "SCF Address" + comment: "" msisdnsegment: display: "MSISDN Segment List" - method: "put" + sort: 3 + perms: "put" array: - - name: "index" - type: "int" - value: "0" - access: "read-only" - filter: '0~15' - display: "Index" - comment: "0~15" - - name: "startMSISDN" - type: "string" - value: "0" - access: "read-write" - filter: '0~32' - display: "Start MSISDN" - comment: "" - - name: "endMSISDN" - type: "string" - value: "0" - access: "read-write" - filter: '0~32' - display: "End MSISDN" - comment: "" + - name: "index" + type: "int" + value: "0" + access: "read-only" + filter: "0~15" + display: "Index" + comment: "0~15" + - name: "startMSISDN" + type: "string" + value: "0" + access: "read-write" + filter: "0~32" + display: "Start MSISDN" + comment: "" + - name: "endMSISDN" + type: "string" + value: "0" + access: "read-write" + filter: "0~32" + display: "End MSISDN" + comment: "" smpplink: display: "SMPP Link List" + sort: 5 array: - - name: "index" - type: "int" - value: "0" - access: "read-only" - filter: '0~63' - display: "Index" - comment: "0~63" - - name: "linkAlias" - type: "string" - value: "0" - access: "read-write" - filter: '0~32' - display: "Link Alias" - comment: "" - - name: "sessionType" - type: "enum" - value: "0" - access: "read-write" - filter: '{"0":"bindTX","1":"bindRX","2":"bindTRX"}' - display: "Session Type" - comment: "" - - name: "serviceNumber" - type: "string" - value: "0" - access: "read-write" - filter: '0~32' - display: "Service Number" - comment: "" - - name: "dataCodingScheme" - type: "enum" - value: "0" - access: "read-write" - filter: '{"0":"smpp7def7","1":"smpp8dcs4def7","2":"smpp8dcs0def7","16":"smpp7def8","17":"smpp8dcs4def8","18":"smpp8dcs0def8"}' - display: "Data Coding Scheme" - comment: "" - - name: "platformNum" - type: "enum" - value: "0" - access: "read-write" - filter: '{"0":"plat0","1":"plat1","2":"ignore"}' - display: "Platform Num" - comment: "" - - name: "timeToLive" - type: "int" - value: "604800" - access: "read-write" - filter: '0-2147483647' - display: "Time To Live" - comment: "" - - name: "manipulationFlag" - type: "bool" - value: "1" - access: "read-write" - filter: '{"0":"false","1":"true"}' - display: "Manipulation Flag" - comment: "" - - name: "ton" - type: "enum" - value: "0" - access: "read-write" - filter: '{"0":"unknown","1":"international","2":"national","3":"networkSpecific","4":"subscriberNumber","5":"alphanumeric","6":"abbreviated"}' - display: "Type of Number" - comment: "" - - name: "npi" - type: "enum" - value: "0" - access: "read-write" - filter: '{"0":"unknown","1":"isdn","3":"data","4":"telex","6":"landMobile","8":"national","9":"private","10":"ermes","14":"internet","18":"wapClientID"}' - display: "Number Plan Indicator" - comment: "" - - name: "roleType" - type: "enum" - value: "0" - access: "read-write" - filter: '{"0":"server","1":"client"}' - display: "Role Type" - comment: "" - + - name: "index" + type: "int" + value: "0" + access: "read-only" + filter: "0~63" + display: "Index" + comment: "0~63" + - name: "linkAlias" + type: "string" + value: "0" + access: "read-write" + filter: "0~32" + display: "Link Alias" + comment: "" + - name: "sessionType" + type: "enum" + value: "0" + access: "read-write" + filter: '{"0":"bindTX","1":"bindRX","2":"bindTRX"}' + display: "Session Type" + comment: "" + - name: "serviceNumber" + type: "string" + value: "0" + access: "read-write" + filter: "0~32" + display: "Service Number" + comment: "" + - name: "dataCodingScheme" + type: "enum" + value: "0" + access: "read-write" + filter: '{"0":"smpp7def7","1":"smpp8dcs4def7","2":"smpp8dcs0def7","16":"smpp7def8","17":"smpp8dcs4def8","18":"smpp8dcs0def8"}' + display: "Data Coding Scheme" + comment: "" + - name: "platformNum" + type: "enum" + value: "0" + access: "read-write" + filter: '{"0":"plat0","1":"plat1","2":"ignore"}' + display: "Platform Num" + comment: "" + - name: "timeToLive" + type: "int" + value: "604800" + access: "read-write" + filter: "0-2147483647" + display: "Time To Live" + comment: "" + - name: "manipulationFlag" + type: "bool" + value: "1" + access: "read-write" + filter: '{"0":"false","1":"true"}' + display: "Manipulation Flag" + comment: "" + - name: "ton" + type: "enum" + value: "0" + access: "read-write" + filter: '{"0":"unknown","1":"international","2":"national","3":"networkSpecific","4":"subscriberNumber","5":"alphanumeric","6":"abbreviated"}' + display: "Type of Number" + comment: "" + - name: "npi" + type: "enum" + value: "0" + access: "read-write" + filter: '{"0":"unknown","1":"isdn","3":"data","4":"telex","6":"landMobile","8":"national","9":"private","10":"ermes","14":"internet","18":"wapClientID"}' + display: "Number Plan Indicator" + comment: "" + - name: "roleType" + type: "enum" + value: "0" + access: "read-write" + filter: '{"0":"server","1":"client"}' + display: "Role Type" + comment: "" diff --git a/config/param/udm_param_config.yaml b/config/param/udm_param_config.yaml index 5da1286c..75dfc3eb 100644 --- a/config/param/udm_param_config.yaml +++ b/config/param/udm_param_config.yaml @@ -1,262 +1,267 @@ udm: system: display: "System" + sort: 1 list: - - name: "serviceIP" - type: "ipv4" - value: "172.16.5.140" - access: "read-write" - filter: '' - display: "Service IP" - comment: "" - - name: "servicePort" - type: "int" - value: "8080" - access: "read-write" - filter: "0~65535" - display: "Service Port" - comment: "" - - name: "nrfUri" - type: "string" - value: "http://172.16.5.180:8080" - access: "read-write" - filter: '' - display: "NRF URI" - comment: "" - - name: "ausfIP" - type: "ipv4" - value: "172.16.5.130" - access: "read-write" - filter: '' - display: "AUSF IP" - comment: "" - - name: "fqdn" - type: "string" - value: "omc.com" - access: "read-write" - filter: '' - display: "FQDN" - comment: "" - - name: "priority" - type: "int" - value: "1" - access: "read-write" - filter: "0~4095" - display: "Priority" - comment: "" - - name: "capacity" - type: "int" - value: "4096" - access: "read-write" - filter: "0~65535" - display: "Capacity" - comment: "" - - name: "groupId" - type: "string" - value: "0" - access: "read-write" - filter: '' - display: "Group ID" - comment: "" - - name: "supportedPlmn1" - type: "string" - value: "00101" - access: "read-write" - filter: '^\d{5,6}$' - display: "Supported Plmn1" - comment: "" - - name: "supportedPlmn2" - type: "string" - value: "00101" - access: "read-write" - filter: '^\d{5,6}$' - display: "Supported Plmn2" - comment: "" - - name: "supportedPlmn3" - type: "string" - value: "00101" - access: "read-write" - filter: '^\d{5,6}$' - display: "Supported Plmn3" - comment: "" - - name: "supportedPlmn4" - type: "string" - value: "00101" - access: "read-write" - filter: '^\d{5,6}$' - display: "Supported Plmn4" - comment: "" - - name: "supiRanges" - type: "regex" - value: "imsi-001010100080000~imsi-001010100080099" - access: "read-write" - filter: '^imsi-\d{15}~imsi-\d{15}$' - display: "SUPI Ranges" - comment: "" - - name: "gpsiRanges" - type: "regex" - value: "msisdn-69072000~msisdn-69072099" - access: "read-write" - filter: '^msisdn-\d{2,15}~msisdn-\d{2,15}$' - display: "GPSI Ranges" - comment: "" - - name: "scheme" - type: "enum" - value: "0" - access: "read-write" - filter: "{\"0\":\"HTTP\", \"1\":\"HTTPS\"}" - display: "Scheme" - comment: "" - - name: "redisLink" - type: "enum" - value: '0' - access: "read-write" - filter: "{\"0\":\"TCP\",\"1\":\"SCTP\"}" - display: "Redis Link" - comment: "" - - name: "redisAddr" - type: "string" - value: "172.16.5.140:6379" - access: "read-write" - filter: '' - display: "Redis Address" - comment: "" + - name: "serviceIP" + type: "ipv4" + value: "172.16.5.140" + access: "read-write" + filter: "" + display: "Service IP" + comment: "" + - name: "servicePort" + type: "int" + value: "8080" + access: "read-write" + filter: "0~65535" + display: "Service Port" + comment: "" + - name: "nrfUri" + type: "string" + value: "http://172.16.5.180:8080" + access: "read-write" + filter: "" + display: "NRF URI" + comment: "" + - name: "ausfIP" + type: "ipv4" + value: "172.16.5.130" + access: "read-write" + filter: "" + display: "AUSF IP" + comment: "" + - name: "fqdn" + type: "string" + value: "omc.com" + access: "read-write" + filter: "" + display: "FQDN" + comment: "" + - name: "priority" + type: "int" + value: "1" + access: "read-write" + filter: "0~4095" + display: "Priority" + comment: "" + - name: "capacity" + type: "int" + value: "4096" + access: "read-write" + filter: "0~65535" + display: "Capacity" + comment: "" + - name: "groupId" + type: "string" + value: "0" + access: "read-write" + filter: "" + display: "Group ID" + comment: "" + - name: "supportedPlmn1" + type: "string" + value: "00101" + access: "read-write" + filter: '^\d{5,6}$' + display: "Supported Plmn1" + comment: "" + - name: "supportedPlmn2" + type: "string" + value: "00101" + access: "read-write" + filter: '^\d{5,6}$' + display: "Supported Plmn2" + comment: "" + - name: "supportedPlmn3" + type: "string" + value: "00101" + access: "read-write" + filter: '^\d{5,6}$' + display: "Supported Plmn3" + comment: "" + - name: "supportedPlmn4" + type: "string" + value: "00101" + access: "read-write" + filter: '^\d{5,6}$' + display: "Supported Plmn4" + comment: "" + - name: "supiRanges" + type: "regex" + value: "imsi-001010100080000~imsi-001010100080099" + access: "read-write" + filter: '^imsi-\d{15}~imsi-\d{15}$' + display: "SUPI Ranges" + comment: "" + - name: "gpsiRanges" + type: "regex" + value: "msisdn-69072000~msisdn-69072099" + access: "read-write" + filter: '^msisdn-\d{2,15}~msisdn-\d{2,15}$' + display: "GPSI Ranges" + comment: "" + - name: "scheme" + type: "enum" + value: "0" + access: "read-write" + filter: '{"0":"HTTP", "1":"HTTPS"}' + display: "Scheme" + comment: "" + - name: "redisLink" + type: "enum" + value: "0" + access: "read-write" + filter: '{"0":"TCP","1":"SCTP"}' + display: "Redis Link" + comment: "" + - name: "redisAddr" + type: "string" + value: "172.16.5.140:6379" + access: "read-write" + filter: "" + display: "Redis Address" + comment: "" subsUEAmbr: display: "Subs UE AMBR" + sort: 3 array: - name: "index" type: "int" value: "1" access: "read-only" - filter: '1~16' + filter: "1~16" display: "Index" comment: "" - name: "name" type: "string" - value: 'def_ambr' + value: "def_ambr" access: "read-write" - filter: '^.{1,32}$' + filter: "^.{1,32}$" display: "Name" comment: "" - name: "uplink" type: "regex" - value: '1 Gbps' + value: "1 Gbps" access: "read-write" filter: '^\d+(\.\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$' display: "Uplink" comment: "" - name: "downlink" type: "regex" - value: '2 Gbps' + value: "2 Gbps" access: "read-write" filter: '^\d+(\.\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$' display: "Downlink" comment: "" subsNssais: display: "Subs NSSAIs" + sort: 5 array: - name: "index" type: "int" value: "1" access: "read-only" - filter: '1~16' + filter: "1~16" display: "Index" comment: "" - name: "name" type: "string" - value: 'def_nssai' + value: "def_nssai" access: "read-write" - filter: '^.{1,32}$' + filter: "^.{1,32}$" display: "Name" comment: "" - name: "supportedFeatures" type: "regex" value: "00000001" access: "read-write" - filter: '^[0-9a-fA-F]{8}$' + filter: "^[0-9a-fA-F]{8}$" display: "Supported Features" comment: "" - name: "defaultSingleNSSAIs" type: "string" - value: '1-000001' + value: "1-000001" access: "read-write" - filter: '' + filter: "" display: "Default Single NSSAIs" comment: "" - name: "singleNssais" type: "string" - value: '1-000002' + value: "1-000002" access: "read-write" - filter: '' + filter: "" display: "Single NSSAIs" comment: "" forbiddenAreas: display: "Forbidden Areas" + sort: 7 array: - name: "index" type: "int" value: "1" access: "read-only" - filter: '1~16' + filter: "1~16" display: "Index" comment: "" - name: "name" type: "string" - value: 'def_ambr' + value: "def_ambr" access: "read-write" - filter: '^.{1,32}$' + filter: "^.{1,32}$" display: "Name" comment: "" - name: "tacs" type: "string" - value: '123' + value: "123" access: "read-write" - filter: '' + filter: "" display: "TACs" comment: "" - name: "areaCodes" type: "string" - value: '123456' + value: "123456" access: "read-write" - filter: '' + filter: "" display: "Area Codes" comment: "" serviceAreaRestriction: display: "Service Area Restriction" + sort: 9 array: - name: "index" type: "int" value: "1" access: "read-only" - filter: '1~16' + filter: "1~16" display: "Index" comment: "" - name: "name" type: "string" - value: 'def_ambr' + value: "def_ambr" access: "read-write" - filter: '^.{1,32}$' + filter: "^.{1,32}$" display: "Name" comment: "" - name: "restrictionType" type: "enum" - value: '0' + value: "0" access: "read-write" - filter: "{\"0\":\"Allowed Areas\", \"1\":\"Not Allowed Areas\"}" + filter: '{"0":"Allowed Areas", "1":"Not Allowed Areas"}' display: "Restriction Type" comment: "" - name: "tacs" type: "string" - value: '123' + value: "123" access: "read-write" - filter: '' + filter: "" display: "TACs" comment: "" - name: "areaCodes" type: "string" - value: '123456' + value: "123456" access: "read-write" - filter: '' + filter: "" display: "Area Codes" comment: "" - name: "maxTAs" @@ -268,107 +273,109 @@ udm: comment: "" smfSelection: display: "Subs SMF Selection" + sort: 11 array: - name: "index" type: "int" value: "1" access: "read-only" - filter: '1~16' + filter: "1~16" display: "Index" comment: "" - name: "name" type: "string" - value: 'def_snssai' + value: "def_snssai" access: "read-write" - filter: '^.{1,32}$' + filter: "^.{1,32}$" display: "Name" comment: "" - name: "snssai" type: "string" - value: '1-000001' + value: "1-000001" access: "read-write" filter: '^\d{1,3}[A-Fa-f0-9]{6}$' display: "SNSSAI" comment: "" - name: "dnnList" type: "int" - value: '1' + value: "1" access: "read-only" - filter: '1~4' + filter: "1~4" display: "DNN List" comment: "" array: - - name: "index" - type: "int" - value: "1" - access: "read-only" - filter: '1~4' - display: "Index" - comment: "" - - name: "dnn" - type: "string" - value: 'internet' - access: "read-write" - filter: '^.{1,32}$' - display: "DNN" - comment: "" - - name: "defaultDnnInd" - type: "bool" - value: 'true' - access: "read-write" - filter: 'false;true;' - display: "Default DNN Indicator" - comment: "" - - name: "lboRoamingAllowed" - type: "bool" - value: 'false' - access: "read-write" - filter: 'false;true;' - display: "LBO Roaming Allowed" - comment: "" - - name: "iwkEpsInd" - type: "bool" - value: 'false' - access: "read-write" - filter: 'false;true;' - display: "Interworking EPS Indicator" - comment: "" - - name: "ladnIndicator" - type: "bool" - value: 'false' - access: "read-write" - filter: 'false;true;' - display: "LADN Indicator" - comment: "" + - name: "index" + type: "int" + value: "1" + access: "read-only" + filter: "1~4" + display: "Index" + comment: "" + - name: "dnn" + type: "string" + value: "internet" + access: "read-write" + filter: "^.{1,32}$" + display: "DNN" + comment: "" + - name: "defaultDnnInd" + type: "bool" + value: "true" + access: "read-write" + filter: "false;true;" + display: "Default DNN Indicator" + comment: "" + - name: "lboRoamingAllowed" + type: "bool" + value: "false" + access: "read-write" + filter: "false;true;" + display: "LBO Roaming Allowed" + comment: "" + - name: "iwkEpsInd" + type: "bool" + value: "false" + access: "read-write" + filter: "false;true;" + display: "Interworking EPS Indicator" + comment: "" + - name: "ladnIndicator" + type: "bool" + value: "false" + access: "read-write" + filter: "false;true;" + display: "LADN Indicator" + comment: "" dnn: display: "DNN Conf" + sort: 13 array: - name: "index" type: "int" value: "1" access: "read-only" - filter: '1~16' + filter: "1~16" display: "Index" comment: "" - name: "name" type: "string" - value: 'def_nssai' + value: "def_nssai" access: "read-write" - filter: '^.{1,32}$' + filter: "^.{1,32}$" display: "Name" comment: "" - name: "defaultPDUSessionType" type: "enum" value: "0" access: "read-write" - filter: "{\"0\":\"IPv4\",\"1\":\"IPv6\",\"2\":\"IPv4v6\",\"3\":\"Ethernet\",\"4\":\"Unstruction\"}" + filter: '{"0":"IPv4","1":"IPv6","2":"IPv4v6","3":"Ethernet","4":"Unstruction"}' display: "Default PDU Session Type" comment: "" - name: "allowedPDUSessionTypes" type: "enum" - value: '0' + value: "0" access: "read-write" - filter: "{\"0\":\"IPv4\",\"1\":\"IPv6\",\"2\":\"IPv4v6\",\"3\":\"Ethernet\",\"4\":\"Unstruction\",\"5\":\"IPv4 & IPv6\",\"6\":\"IPv4 & IPv4v6\",\"7\":\"IPv6 & IPv4v6\",\"8\":\"IPv4 & IPv6 & IPv4v6\"}" + filter: '{"0":"IPv4","1":"IPv6","2":"IPv4v6","3":"Ethernet","4":"Unstruction","5":"IPv4 & IPv6","6":"IPv4 & IPv4v6","7":"IPv6 & IPv4v6","8":"IPv4 & IPv6 & IPv4v6"}' display: "Allowed PDU Session Types" comment: "" - name: "5qi" @@ -389,35 +396,35 @@ udm: type: "enum" value: "0" access: "read-write" - filter: "{\"0\":\"SSC Mode1\",\"1\":\"SSC Mode2\",\"2\":\"SSC Mode3\"}" + filter: '{"0":"SSC Mode1","1":"SSC Mode2","2":"SSC Mode3"}' display: "Default SSC Mode" comment: "" - name: "allowedSSCmodes" type: "enum" value: "0" access: "read-write" - filter: "{\"0\":\"SSC Mode1\",\"1\":\"SSC Mode2\",\"2\":\"SSC Mode3\",\"3\":\"SSC Mode1 & SSC Mode2\",\"4\":\"SSC Mode1 & SSC Mode3\",\"5\":\"SSC Mode2 & SSC Mode3\",\"6\":\"SSC Mode1 & SSC Mode2 & SSC Mode3\"}" + filter: '{"0":"SSC Mode1","1":"SSC Mode2","2":"SSC Mode3","3":"SSC Mode1 & SSC Mode2","4":"SSC Mode1 & SSC Mode3","5":"SSC Mode2 & SSC Mode3","6":"SSC Mode1 & SSC Mode2 & SSC Mode3"}' display: "Allowed SSC Modes" comment: "" - name: "interworkingEPSIndicator" type: "bool" value: "1" access: "read-write" - filter: '' + filter: "" display: "Interworking EPS Indicator" comment: "" - name: "ladnIndicator" type: "bool" value: "1" access: "read-write" - filter: '' + filter: "" display: "LADN Indicator" comment: "" - name: "chargingCharacteristics" type: "string" value: "0001" access: "read-write" - filter: '4~4' + filter: "4~4" display: "Charging Characteristics" comment: "" - name: "subscribedSessionAmbrUL" @@ -438,21 +445,21 @@ udm: type: "ipv4" value: "192.168.1.100" access: "read-write" - filter: '' + filter: "" display: "Static IP Address" comment: "" - name: "userPlaneIntegrity" type: "enum" value: "3" access: "read-write" - filter: "{\"0\":\"Null\",\"1\":\"Required\",\"2\":\"Preferred\",\"3\":\"Not Needed\"}" + filter: '{"0":"Null","1":"Required","2":"Preferred","3":"Not Needed"}' display: "User Plane Integrity" comment: "" - name: "userPlaneConfidentiality" type: "enum" value: "3" access: "read-write" - filter: "{\"0\":\"Null\",\"1\":\"Required\",\"2\":\"Preferred\",\"3\":\"Not Needed\"}" + filter: '{"0":"Null","1":"Required","2":"Preferred","3":"Not Needed"}' display: "User Plane Confidentiality" comment: "" - name: "arpPriorityLevel" @@ -466,413 +473,420 @@ udm: type: "enum" value: "0" access: "read-write" - filter: "{\"0\":\"Not Preempt\",\"1\":\"May Preempt\"}" + filter: '{"0":"Not Preempt","1":"May Preempt"}' display: "ARP Preempt Capability" comment: "" - name: "arpPreemptVuln" type: "enum" value: "0" access: "read-write" - filter: "{\"0\":\"Not Preemptable\",\"1\":\"Preemptable\"}" + filter: '{"0":"Not Preemptable","1":"Preemptable"}' display: "ARP Preempt Vulnerability" comment: "" epsTemplate: display: "EPS User Template" + sort: 15 array: - name: "index" type: "int" value: "1" access: "read-only" - filter: '1~16' + filter: "1~16" display: "Index" comment: "" - name: "name" type: "string" - value: 'def_eps' + value: "def_eps" access: "read-write" - filter: '^.{0,31}$' + filter: "^.{0,31}$" display: "Name" comment: "" - name: "ambrUplink" type: "int" - value: '100000000' + value: "100000000" access: "read-write" - filter: '0~4294967295' + filter: "0~4294967295" display: "AMBR Uplink" comment: "" - name: "ambrDownlink" type: "int" - value: '200000000' + value: "200000000" access: "read-write" - filter: '0~4294967295' + filter: "0~4294967295" display: "AMBR Downlink" comment: "" - name: "apnOIReplacement" type: "string" - value: 'money' + value: "money" access: "read-write" - filter: '^.{0,31}$' + filter: "^.{0,31}$" display: "APN OI Replacement" comment: "" - name: "rfsp" type: "int" - value: '1' + value: "1" access: "read-write" - filter: '' + filter: "" display: "RFSP" comment: "" - name: "rauTauTimer" type: "int" - value: '120' + value: "120" access: "read-write" - filter: '' + filter: "" display: "RAU TAU Timer" comment: "" - name: "chargingCharacteristic" type: "string" - value: '0001' + value: "0001" access: "read-write" - filter: '4~4' + filter: "4~4" display: "Charging Characteristic" comment: "" epsApn: display: "EPS APN" + sort: 17 array: - name: "index" type: "int" value: "1" access: "read-only" - filter: '1~16' + filter: "1~16" display: "Index" comment: "" - name: "dnn" type: "string" - value: 'internet' + value: "internet" access: "read-write" - filter: '^.{0,127}$' + filter: "^.{0,127}$" display: "DNN" comment: "" - name: "pdnType" type: "enum" - value: '0' + value: "0" access: "read-write" - filter: "{\"0\":\"IPv4\",\"1\":\"IPv6\",\"2\":\"IPv4v6\",\"3\":\"IPv4 or IPv6\"}" + filter: '{"0":"IPv4","1":"IPv6","2":"IPv4v6","3":"IPv4 or IPv6"}' display: "PDN Type" comment: "" - name: "qci" type: "int" - value: '9' + value: "9" access: "read-write" - filter: '1~255' + filter: "1~255" display: "QCI" comment: "" - name: "arpPriorityLevel" type: "int" - value: '8' + value: "8" access: "read-write" - filter: '1~127' + filter: "1~127" display: "ARP Priority" comment: "" - name: "arpPreemptCap" type: "enum" - value: '0' + value: "0" access: "read-write" - filter: "{\"0\":\"Not Preempt\",\"1\":\"May Preempt\"}" + filter: '{"0":"Not Preempt","1":"May Preempt"}' display: "ARP Preemption Capability" comment: "" - name: "arpPreemptVuln" type: "enum" - value: '0' + value: "0" access: "read-write" - filter: "{\"0\":\"Not Preemptable\",\"1\":\"Preemptable\"}" + filter: '{"0":"Not Preemptable","1":"Preemptable"}' display: "ARP Preemption Vulnerability" comment: "" - name: "contextIdentifier" type: "int" - value: '1' + value: "1" access: "read-write" - filter: '' + filter: "" display: "Context Identifier" comment: "" - name: "vplmnDynamicAddressAllowed" type: "bool" - value: 'true' + value: "true" access: "read-write" - filter: 'false;true;' + filter: "false;true;" display: "VPLMN Dynamic Address Allowed" comment: "" - name: "pdnGWAllocationType" type: "enum" - value: '0' + value: "0" access: "read-write" - filter: "{\"0\":\"Static\",\"1\":\"Dynamic\"}" + filter: '{"0":"Static","1":"Dynamic"}' display: "PDN GW Allocation Type" comment: "" - name: "ambrUplink" type: "int" - value: '100000000' + value: "100000000" access: "read-write" - filter: '0~4294967295' + filter: "0~4294967295" display: "AMBR Uplink" comment: "" - name: "ambrDownlink" type: "int" - value: '200000000' + value: "200000000" access: "read-write" - filter: '0~4294967295' + filter: "0~4294967295" display: "AMBR Downlink" comment: "" - name: "chargingCharacteristic" type: "string" - value: '0001' + value: "0001" access: "read-write" - filter: '4~4' + filter: "4~4" display: "Charging Characteristic" comment: "" applicationServer: display: "Application Server" + sort: 19 array: - name: "index" type: "int" value: "1" access: "read-only" - filter: '1~32' + filter: "1~32" display: "Index" comment: "" - name: "name" type: "string" - value: 'mmtel_as' + value: "mmtel_as" access: "read-write" - filter: '^.{1,31}$' + filter: "^.{1,31}$" display: "AS Name" comment: "" - name: "defaultHandling" type: "enum" - value: '0' + value: "0" access: "read-write" - filter: "{\"0\":\"Session Continued\",\"1\":\"Session Terminated\"}" + filter: '{"0":"Session Continued","1":"Session Terminated"}' display: "Default Handling" comment: "" - name: "serverName" type: "string" - value: 'sip:192.168.8.26:7060' + value: "sip:192.168.8.26:7060" access: "read-write" - filter: '^.{1,127}$' + filter: "^.{1,127}$" display: "Server Name" comment: "" - name: "diameterAddress" type: "string" - value: 'mmtel.ims.mnc001.mcc001.3gppnetwork.org' + value: "mmtel.ims.mnc001.mcc001.3gppnetwork.org" access: "read-write" - filter: '^.{1,127}$' + filter: "^.{1,127}$" display: "Diameter Address" comment: "" - name: "repDataSizeLimit" type: "int" - value: '0' + value: "0" access: "read-write" - filter: '0~65535' + filter: "0~65535" display: "Rep Data Size Limit" comment: "" - name: "includeRegisterRequest" type: "bool" - value: 'false' + value: "false" access: "read-write" - filter: 'false;true;' + filter: "false;true;" display: "Include Register Request" comment: "" - name: "includeRegisterResponse" type: "bool" - value: 'false' + value: "false" access: "read-write" - filter: 'false;true;' + filter: "false;true;" display: "Include Register Response" comment: "" scscfSet: display: "SCSCF Set" + sort: 21 array: - name: "index" type: "int" value: "1" access: "read-only" - filter: '1~8' + filter: "1~8" display: "Index" comment: "" - name: "name" type: "string" - value: 'mmtel_as' + value: "mmtel_as" access: "read-write" - filter: '^.{1,31}$' + filter: "^.{1,31}$" display: "Name" comment: "" - name: "priority" type: "int" - value: '1' + value: "1" access: "read-write" - filter: '' + filter: "" display: "Priority" comment: "" - name: "serverName" type: "string" - value: 'sip:scscf.ims.mnc001.mcc001.3gppnetwork.org:6060' + value: "sip:scscf.ims.mnc001.mcc001.3gppnetwork.org:6060" access: "read-write" - filter: '^.{1,127}$' + filter: "^.{1,127}$" display: "Server Name" comment: "" triggerPoint: display: "Trigger Point" + sort: 23 array: - name: "index" type: "int" value: "1" access: "read-only" - filter: '1~16' + filter: "1~16" display: "Index" comment: "" - name: "name" type: "string" - value: 'def_snssai' + value: "def_snssai" access: "read-write" - filter: '^.{1,32}$' + filter: "^.{1,32}$" display: "Name" comment: "" - name: "conditionTypeCNF" type: "int" - value: '0' + value: "0" access: "read-write" - filter: '0~1' + filter: "0~1" display: "Condition Type CNF" comment: "" - name: "sptList" type: "int" - value: '1' + value: "1" access: "read-only" - filter: '1~4' + filter: "1~4" display: "SPT List" comment: "" array: - - name: "index" - type: "int" - value: "1" - access: "read-only" - filter: '1~4' - display: "Index" - comment: "" - - name: "enable" - type: "bool" - value: 'true' - access: "read-write" - filter: '' - display: "Enable" - comment: "" - - name: "conditionNegated" - type: "int" - value: '0' - access: "read-write" - filter: '0~1' - display: "Condition Negated" - comment: "" - - name: "group" - type: "int" - value: '1' - access: "read-write" - filter: '0~4096' - display: "Group" - comment: "" - - name: "method" - type: "string" - value: '' - access: "read-write" - filter: '^.{0,32}$' - display: "Method" - comment: "" - - name: "sipHeader" - type: "string" - value: '' - access: "read-write" - filter: '^.{0,64}$' - display: "SIP Header" - comment: "" - - name: "sipContent" - type: "string" - value: '' - access: "read-write" - filter: '^.{0,64}$' - display: "SIP Content" - comment: "" + - name: "index" + type: "int" + value: "1" + access: "read-only" + filter: "1~4" + display: "Index" + comment: "" + - name: "enable" + type: "bool" + value: "true" + access: "read-write" + filter: "" + display: "Enable" + comment: "" + - name: "conditionNegated" + type: "int" + value: "0" + access: "read-write" + filter: "0~1" + display: "Condition Negated" + comment: "" + - name: "group" + type: "int" + value: "1" + access: "read-write" + filter: "0~4096" + display: "Group" + comment: "" + - name: "method" + type: "string" + value: "" + access: "read-write" + filter: "^.{0,32}$" + display: "Method" + comment: "" + - name: "sipHeader" + type: "string" + value: "" + access: "read-write" + filter: "^.{0,64}$" + display: "SIP Header" + comment: "" + - name: "sipContent" + type: "string" + value: "" + access: "read-write" + filter: "^.{0,64}$" + display: "SIP Content" + comment: "" s6aServer: display: "S6a Server" + sort: 25 list: - - name: "enable" - type: "bool" - value: 'true' - access: "read-write" - filter: 'false;true;' - display: "Enable" - comment: "" - - name: "netType" - type: "enum" - value: '1' - access: "read-write" - filter: "{\"0\":\"TCP\",\"1\":\"SCTP\"}" - display: "Link Type" - comment: "" - - name: "addr" - type: "string" - value: "172.16.5.140:3868" - access: "read-write" - filter: '' - display: "Address" - comment: "" - - name: "host" - type: "string" - value: "hss.ims.mnc001.mcc001.3gppnetwork.org" - access: "read-write" - filter: '^.{1,127}$' - display: "Host" - comment: "" - - name: "realm" - type: "string" - value: "ims.mnc001.mcc001.3gppnetwork.org" - access: "read-write" - filter: '^.{1,127}$' - display: "Realm" - comment: "" + - name: "enable" + type: "bool" + value: "true" + access: "read-write" + filter: "false;true;" + display: "Enable" + comment: "" + - name: "netType" + type: "enum" + value: "1" + access: "read-write" + filter: '{"0":"TCP","1":"SCTP"}' + display: "Link Type" + comment: "" + - name: "addr" + type: "string" + value: "172.16.5.140:3868" + access: "read-write" + filter: "" + display: "Address" + comment: "" + - name: "host" + type: "string" + value: "hss.ims.mnc001.mcc001.3gppnetwork.org" + access: "read-write" + filter: "^.{1,127}$" + display: "Host" + comment: "" + - name: "realm" + type: "string" + value: "ims.mnc001.mcc001.3gppnetwork.org" + access: "read-write" + filter: "^.{1,127}$" + display: "Realm" + comment: "" cxServer: display: "Cx Server" + sort: 27 list: - - name: "enable" - type: "bool" - value: 'true' - access: "read-write" - filter: 'false;true;' - display: "Enable" - comment: "" - - name: "netType" - type: "enum" - value: '0' - access: "read-write" - filter: "{\"0\":\"TCP\",\"1\":\"SCTP\"}" - display: "Link Type" - comment: "" - - name: "addr" - type: "string" - value: "172.16.5.140:3868" - access: "read-write" - filter: '' - display: "Address" - comment: "" - - name: "host" - type: "string" - value: "hss.ims.mnc001.mcc001.3gppnetwork.org" - access: "read-write" - filter: '^.{1,127}$' - display: "Host" - comment: "" - - name: "realm" - type: "string" - value: "ims.mnc001.mcc001.3gppnetwork.org" - access: "read-write" - filter: '^.{1,127}$' - display: "Realm" - comment: "" + - name: "enable" + type: "bool" + value: "true" + access: "read-write" + filter: "false;true;" + display: "Enable" + comment: "" + - name: "netType" + type: "enum" + value: "0" + access: "read-write" + filter: '{"0":"TCP","1":"SCTP"}' + display: "Link Type" + comment: "" + - name: "addr" + type: "string" + value: "172.16.5.140:3868" + access: "read-write" + filter: "" + display: "Address" + comment: "" + - name: "host" + type: "string" + value: "hss.ims.mnc001.mcc001.3gppnetwork.org" + access: "read-write" + filter: "^.{1,127}$" + display: "Host" + comment: "" + - name: "realm" + type: "string" + value: "ims.mnc001.mcc001.3gppnetwork.org" + access: "read-write" + filter: "^.{1,127}$" + display: "Realm" + comment: "" diff --git a/config/param/upf_param_config.yaml b/config/param/upf_param_config.yaml index b5fc23ee..0da0be98 100644 --- a/config/param/upf_param_config.yaml +++ b/config/param/upf_param_config.yaml @@ -1,446 +1,454 @@ upf: general: display: "General" + sort: 1 list: - - name: "configFileDirectory" - type: "string" - value: "/usr/local/etc/upf/" - access: "read-write" - filter: '' - display: "Config File Directory" - comment: "" - - name: "exeFileDirectory" - type: "string" - value: "/usr/local/bin/" - access: "read-write" - filter: '' - display: "EXE File Directory" - comment: "" - - name: "systemId" - type: "int" - value: "1" - access: "read-write" - filter: '' - display: "System ID" - comment: "1~255" - - name: "dataForwarderNum" - type: "int" - value: "1" - access: "read-write" - filter: '1~8' - display: "Data Forwarder Number" - comment: "1~8" - - name: "commonStatisticInterval" - type: "int" - value: "60" - access: "read-write" - filter: '' - display: "Common Statistic Interval" - comment: "" - - name: "userStatisticInterval" - type: "int" - value: "60" - access: "read-write" - filter: '' - display: "User Statistic Interval" - comment: "" - - name: "rxN3OverLoadThresholdMbps" - type: "int" - value: "0" - access: "read-write" - filter: '' - display: "RX N3 OverLoad Threshold Mbps" - comment: "" - - name: "rxN6OverLoadThresholdMbps" - type: "int" - value: "0" - access: "read-write" - filter: '' - display: "RX N6 OverLoad Threshold Mbps" - comment: "" - - name: "checksumOffload" - type: "int" - value: "0" - access: "read-write" - filter: '0~255' - display: "Checksum Offload" - comment: "0~255" - - name: "maxDownlinkBufferNum" - type: "int" - value: "50" - access: "read-write" - filter: '' - display: "Max Downlink Buffer Num" - comment: "" + - name: "configFileDirectory" + type: "string" + value: "/usr/local/etc/upf/" + access: "read-write" + filter: "" + display: "Config File Directory" + comment: "" + - name: "exeFileDirectory" + type: "string" + value: "/usr/local/bin/" + access: "read-write" + filter: "" + display: "EXE File Directory" + comment: "" + - name: "systemId" + type: "int" + value: "1" + access: "read-write" + filter: "" + display: "System ID" + comment: "1~255" + - name: "dataForwarderNum" + type: "int" + value: "1" + access: "read-write" + filter: "1~8" + display: "Data Forwarder Number" + comment: "1~8" + - name: "commonStatisticInterval" + type: "int" + value: "60" + access: "read-write" + filter: "" + display: "Common Statistic Interval" + comment: "" + - name: "userStatisticInterval" + type: "int" + value: "60" + access: "read-write" + filter: "" + display: "User Statistic Interval" + comment: "" + - name: "rxN3OverLoadThresholdMbps" + type: "int" + value: "0" + access: "read-write" + filter: "" + display: "RX N3 OverLoad Threshold Mbps" + comment: "" + - name: "rxN6OverLoadThresholdMbps" + type: "int" + value: "0" + access: "read-write" + filter: "" + display: "RX N6 OverLoad Threshold Mbps" + comment: "" + - name: "checksumOffload" + type: "int" + value: "0" + access: "read-write" + filter: "0~255" + display: "Checksum Offload" + comment: "0~255" + - name: "maxDownlinkBufferNum" + type: "int" + value: "50" + access: "read-write" + filter: "" + display: "Max Downlink Buffer Num" + comment: "" logger: display: "Logger" + sort: 3 list: - name: "logFileFullPath" type: "string" value: "/var/log/upf.log" access: "read-write" - filter: '' + filter: "" display: "Log File Full Path" comment: "" - name: "logLevel" type: "string" value: "error" access: "read-write" - filter: '' + filter: "" display: "Log Level" comment: "error|warning|info|debug" - name: "upfdLogLevel" type: "string" value: "error" access: "read-write" - filter: '' + filter: "" display: "Upfd Log Level" comment: "error|warning|info|debug" - name: "upfdLogTransfer" type: "bool" value: "false" access: "read-write" - filter: '' + filter: "" display: "Upfd Log Transfer" comment: "" - name: "reportCaller" type: "bool" value: "false" access: "read-write" - filter: '' + filter: "" display: "Report Caller" comment: "" pfcp: display: "PFCP" + sort: 5 list: - name: "ipType" type: "string" value: "ipv4" access: "read-write" - filter: '' + filter: "" display: "IP Type" comment: "ipv4|ipv6|ipv46" - name: "localIpv4" type: "string" value: "0.0.0.0" access: "read-write" - filter: '' + filter: "" display: "Local IPv4" comment: "" - name: "localIpv6" type: "string" value: "" access: "read-write" - filter: '' + filter: "" display: "Local IPv6" comment: "" - name: "localUdpPort" type: "int" value: "8805" access: "read-write" - filter: '1~65535' + filter: "1~65535" display: "Local UDP Port" comment: "1~65535" - name: "smfIpv4" type: "string" value: "0.0.0.0" access: "read-write" - filter: '' + filter: "" display: "SMF IPv4" comment: "" - name: "smfIpv6" type: "string" value: "" access: "read-write" - filter: '' + filter: "" display: "SMF IPv6" comment: "" - name: "smfUdpPort" type: "int" value: "8805" access: "read-write" - filter: '1~65535' + filter: "1~65535" display: "SMF UDP Port" comment: "1~65535" - name: "retryInterval" type: "int" value: "2" access: "read-write" - filter: '1~255' + filter: "1~255" display: "Retry Interval" comment: "1~255" - name: "maxRetry" type: "int" value: "3" access: "read-write" - filter: '0~255' + filter: "0~255" display: "Max Retry" comment: "0~255" - name: "heartbeatInterval" type: "int" value: "15" access: "read-write" - filter: '1~255' + filter: "1~255" display: "Heartbeat Interval" comment: "1~255" telnet: display: "Telnet" + sort: 7 list: - name: "enabled" type: "bool" value: "false" access: "read-write" - filter: '' + filter: "" display: "Enabled" comment: "" - name: "ipType" type: "string" value: "ipv4" access: "read-write" - filter: '' + filter: "" display: "IP Type" comment: "ipv4|ipv6|ipv46" - name: "localIpv4" type: "string" value: "0.0.0.0" access: "read-write" - filter: '' + filter: "" display: "Local IPv4" comment: "" - name: "localIpv6" type: "string" value: "" access: "read-write" - filter: '' + filter: "" display: "Local IPv6" comment: "" - name: "localPort" type: "int" value: "4100" access: "read-write" - filter: '1~65535' + filter: "1~65535" display: "Local Port" comment: "1~65535" redisDb: display: "Redis DB" + sort: 9 list: - name: "enabled" type: "bool" value: "false" access: "read-write" - filter: '' + filter: "" display: "Enabled" comment: "" - name: "netType" type: "string" value: "tcp" access: "read-write" - filter: '' + filter: "" display: "Net Type" comment: "tcp|udp" - name: "serverAddr" type: "string" value: "0.0.0.0:0" access: "read-write" - filter: '' + filter: "" display: "Server Address" comment: "" dataForwarderCommon: display: "Data Forwarder Common" + sort: 11 list: - name: "type" type: "string" value: "upfd" access: "read-write" - filter: '' + filter: "" display: "Type" comment: "upfd|tun" - name: "instanceId" type: "int" value: "1" access: "read-only" - filter: '1~8' + filter: "1~8" display: "Instance ID" comment: "1~8" - name: "mainCpu" type: "int" value: "1" access: "read-write" - filter: '1~255' + filter: "1~255" display: "Main CPU" comment: "1~255" - name: "cpuWorkers" type: "string" value: "" access: "read-write" - filter: '' + filter: "" display: "CPU Workers" comment: "2,3,4,5 or 2-5" - name: "isRun" type: "int" value: "0" access: "read-write" - filter: '0~1' + filter: "0~1" display: "Is Run" comment: "data forwarder already run or not" - name: "isHotStandby" type: "int" value: "0" access: "read-write" - filter: '0~1' + filter: "0~1" display: "Is Hot Standby" comment: "Hot Standby work or not" - name: "teidStart" type: "int" value: "16777216" access: "read-write" - filter: '' + filter: "" display: "TEID Start" comment: "The value from which TEID is allocated" - name: "n3HeartbeatInterval" type: "int" value: "30" access: "read-write" - filter: '' + filter: "" display: "N3 Heartbeat Interval" comment: "" - name: "rxTxQueueNum" type: "int" value: "1" access: "read-write" - filter: '' + filter: "" display: "RX TX Queue Num" comment: "" - name: "useSocket" type: "int" value: "0" access: "read-write" - filter: '0~1' + filter: "0~1" display: "Use Socket" comment: "data rx&tx use C socket" - name: "enableTap" type: "int" value: "0" access: "read-write" - filter: '0~1' + filter: "0~1" display: "Enable Tap" comment: "Enable 5G ethernet LAN" - name: "enableQer" type: "int" value: "0" access: "read-write" - filter: '0~1' + filter: "0~1" display: "Enable Qer" comment: "Enable PFCP Qer Control" dataForwarderUpfd: display: "Data Forwarder Upfd" + sort: 13 list: - name: "uioDriver" type: "string" value: "vfio-pci" access: "read-write" - filter: '' + filter: "" display: "UIO Driver" comment: "Currently only support vfio-pci" - name: "commandlineListen" type: "string" value: "localhost:5002" access: "read-write" - filter: '' + filter: "" display: "Telnet Address IP:Port" comment: "The format must be IP:Port" - name: "heapSizeGB" type: "int" value: "2" access: "read-write" - filter: '1~8' + filter: "1~8" display: "Heap Size GB" comment: "the unit is GB" - name: "stateSegSizeMB" type: "int" value: "256" access: "read-write" - filter: '64~512' + filter: "64~512" display: "State Seg Size MB" comment: "the unit is MB" - name: "dpdkNoPci" type: "int" value: "0" access: "read-write" - filter: '0~1' + filter: "0~1" display: "DPDK No PCI" comment: "" - name: "memChannelNum" type: "int" value: "0" access: "read-write" - filter: '0~128' + filter: "0~128" display: "Mem Channel Num" comment: "" - name: "sessionBaseVa" type: "string" value: "0x2000000000" access: "read-write" - filter: '' + filter: "" display: "Session Base Va" comment: "" - name: "buffersPerNuma" type: "int" value: "0" access: "read-write" - filter: '' + filter: "" display: "Buffers Per Numa" comment: "" - name: "n3RssHash" type: "string" value: "" access: "read-write" - filter: '' + filter: "" display: "N3 RSS Hash" comment: "" dataInterfaceList: display: "Data Interface List" + sort: 15 array: - name: "index" type: "int" value: "1" access: "read-only" - filter: '1~32' + filter: "1~32" display: "Index" comment: "1~32" - name: "interfaceType" type: "string" value: "N3" access: "read-write" - filter: '' + filter: "" display: "Interface Type" comment: "N3|N6|N9|N19" - name: "interfaceId" type: "int" value: "1" access: "read-write" - filter: '1~32' + filter: "1~32" display: "Interface ID" comment: "" - name: "driverType" type: "string" value: "host" access: "read-write" - filter: '' + filter: "" display: "Driver Type" comment: "host|vmxnet3|dpdk|socket|uds" - name: "ipType" type: "string" value: "ipv4" access: "read-write" - filter: '' + filter: "" display: "IP Type" comment: "ipv4|ipv6|ipv4v6" - name: "ipv4AddrList" type: "int" value: "1" access: "read-write" - filter: '0~8' + filter: "0~8" display: "IPv4 Address List" comment: "" array: @@ -448,28 +456,28 @@ upf: type: "int" value: "1" access: "read-only" - filter: '1~8' + filter: "1~8" display: "Index" comment: "1~8" - name: "ipv4" type: "string" value: "0.0.0.0" access: "read-write" - filter: '' + filter: "" display: "IPv4" comment: "IPv4" - name: "ipv4Mask" type: "string" value: "0.0.0.0" access: "read-write" - filter: '' + filter: "" display: "IPv4 Mask" comment: "" - name: "ipv6AddrList" type: "int" value: "1" access: "read-write" - filter: '0~8' + filter: "0~8" display: "IPv6 Address List" comment: "" array: @@ -477,407 +485,409 @@ upf: type: "int" value: "1" access: "read-only" - filter: '1~8' + filter: "1~8" display: "Index" comment: "1~8" - name: "ipv6" type: "string" value: "" access: "read-write" - filter: '' + filter: "" display: "IPv6" comment: "" - name: "ipv6Prefix" type: "int" value: "64" access: "read-write" - filter: '' + filter: "" display: "IPv6 Prefix" comment: "" - name: "macAddr" type: "string" value: "00:00:00:00:00:00" access: "read-write" - filter: '' + filter: "" display: "MAC Address" comment: "" - name: "interfacePCI" type: "string" value: "0000:00:00.0" access: "read-write" - filter: '' + filter: "" display: "Interface PCI" comment: "" - name: "systemNetworkCardName" type: "string" value: "" access: "read-write" - filter: '' + filter: "" display: "System Network Card Name" comment: "" - name: "gatewayIpv4" type: "string" value: "0.0.0.0" access: "read-write" - filter: '' + filter: "" display: "Gateway IPv4" comment: "" - name: "bondType" type: "string" value: "0" access: "read-write" - filter: '' + filter: "" display: "Bond Type" comment: "null|bak|sub|xor|round|lacp" - name: "bondId" type: "int" value: "1" access: "read-write" - filter: '0~32' + filter: "0~32" display: "Bond ID" comment: "" - name: "bfdTxIntervalMs" type: "int" value: "1" access: "read-write" - filter: '' + filter: "" display: "BFD TX Interval Ms" comment: "" - name: "bfdRxIntervalMs" type: "int" value: "1" access: "read-write" - filter: '' + filter: "" display: "BFD RX Interval Ms" comment: "" - name: "dnnName" type: "string" value: "default" access: "read-write" - filter: '' + filter: "" display: "DNN Name" comment: "" - name: "gatewayIpv6" type: "string" value: "" access: "read-write" - filter: '' + filter: "" display: "Gateway IPv6" comment: "" - name: "bfdGatewayIpv4" type: "string" value: "0.0.0.0" access: "read-write" - filter: '' + filter: "" display: "BFD Gateway IPv4" comment: "" - name: "bfdGatewayIpv6" type: "string" value: "" access: "read-write" - filter: '' + filter: "" display: "BFD Gateway IPv6" comment: "" - name: "mtu" type: "int" value: "1500" access: "read-write" - filter: '0~65535' + filter: "0~65535" display: "MTU" comment: "" - name: "vlanIdMin" type: "int" value: "0" access: "read-write" - filter: '' + filter: "" display: "Vlan ID Min" comment: "" - name: "vlanIdMax" type: "int" value: "" access: "read-write" - filter: '' + filter: "" display: "Vlan ID Max" comment: "" - name: "udpSrcPort" type: "int" value: "0" access: "read-write" - filter: '1~65535' + filter: "1~65535" display: "UDP Src Port" comment: "" - name: "udpListenPort" type: "int" value: "2152" access: "read-write" - filter: '0~65536' + filter: "0~65536" display: "UDP Listen Port" comment: "" - name: "udsLocalFileFullPath" type: "string" value: "" access: "read-write" - filter: '' + filter: "" display: "UDS Local File Full Path" comment: "" - name: "udsRemoteFileFullPath" type: "string" value: "" access: "read-write" - filter: '' + filter: "" display: "UDS Remote File Full Path" comment: "" - name: "linkDetectionType" type: "int" value: "0" access: "read-write" - filter: '0~1' + filter: "0~1" display: "Link Detection Type" comment: "" - name: "natInterfaceId" type: "int" value: "0" access: "read-write" - filter: '0~1' + filter: "0~1" display: "NAT Interface ID" comment: "" - name: "ueIpv4" type: "string" value: "0.0.0.0" access: "read-write" - filter: '' + filter: "" display: "IPv4" comment: "" - name: "ueIpv4Mask" type: "string" value: "255.255.255.0" access: "read-write" - filter: '' + filter: "" display: "UE IPv4 Mask" comment: "" - name: "ueIpv6" type: "string" value: "" access: "read-write" - filter: '' + filter: "" display: "UE IPv6" comment: "" - name: "ueIpv6Prefix" type: "int" value: "64" access: "read-write" - filter: '1~128' + filter: "1~128" display: "UE IPv6 Prefix" comment: "" - name: "gtpuRemoteIpv4PoolList" type: "int" value: "1" access: "read-write" - filter: '1~32' + filter: "1~32" display: "GTPU Remote IPv4 Pool List" comment: "" array: - - name: "index" - type: "int" - value: "1" - access: "read-only" - filter: '1~32' - display: "Index" - comment: "1~32" - - name: "ipv4" - type: "string" - value: "0.0.0.0" - access: "read-write" - filter: '' - display: "IPv4" - comment: "" - - name: "ipv4Mask" - type: "string" - value: "0.0.0.0" - access: "read-write" - filter: '' - display: "IPv4 Mask" - comment: "" + - name: "index" + type: "int" + value: "1" + access: "read-only" + filter: "1~32" + display: "Index" + comment: "1~32" + - name: "ipv4" + type: "string" + value: "0.0.0.0" + access: "read-write" + filter: "" + display: "IPv4" + comment: "" + - name: "ipv4Mask" + type: "string" + value: "0.0.0.0" + access: "read-write" + filter: "" + display: "IPv4 Mask" + comment: "" - name: "gtpuRemoteIpv6PoolList" type: "int" value: "1" access: "read-write" - filter: '0~32' + filter: "0~32" display: "GTPU Remote IPv6 Pool List" comment: "" array: - - name: "index" - type: "int" - value: "1" - access: "read-only" - filter: '1~32' - display: "Index" - comment: "1~32" - - name: "ipv6" - type: "string" - value: "" - access: "read-write" - filter: '' - display: "IPv6" - comment: "" - - name: "ipv6Prefix" - type: "int" - value: "64" - access: "read-write" - filter: '' - display: "IPv6 Prefix" - comment: "" + - name: "index" + type: "int" + value: "1" + access: "read-only" + filter: "1~32" + display: "Index" + comment: "1~32" + - name: "ipv6" + type: "string" + value: "" + access: "read-write" + filter: "" + display: "IPv6" + comment: "" + - name: "ipv6Prefix" + type: "int" + value: "64" + access: "read-write" + filter: "" + display: "IPv6 Prefix" + comment: "" - name: "gtpuSignalingHandle" type: "int" value: "0" access: "read-write" - filter: '0~1' + filter: "0~1" display: "GTPU Signaling Handle" comment: "" - name: "imsDefaultDSCPValue" type: "int" value: "0" access: "read-write" - filter: '0~1' + filter: "0~1" display: "IMS Default DSCP Value" comment: "" - name: "dataDefaultDSCPValue" type: "int" value: "0" access: "read-write" - filter: '0~1' + filter: "0~1" display: "Data Default DSCP Value" comment: "" - name: "innerDSCPValueMap" type: "int" value: "0" access: "read-write" - filter: '0~1' + filter: "0~1" display: "Inner DSCP Value Map" comment: "" - name: "maxSupportSpeedMbps" type: "int" value: "0" access: "read-write" - filter: '0~65536' + filter: "0~65536" display: "Max Support Speed Mbps" comment: "" - name: "dpdkRxQueuesNumber" type: "int" value: "0" access: "read-write" - filter: '0~127' + filter: "0~127" display: "DPDK RX Queues Number" comment: "" - name: "dpdkTxQueuesNumber" type: "int" value: "0" access: "read-write" - filter: '0~127' + filter: "0~127" display: "DPDK TX Queues Number" comment: "" - name: "dpdkRxDescNumber" type: "int" value: "0" access: "read-write" - filter: '0~32768' + filter: "0~32768" display: "DPDK RX Desc Number" comment: "" - name: "dpdkTxDescNumber" type: "int" value: "0" access: "read-write" - filter: '0~32768' + filter: "0~32768" display: "DPDK TX Desc Number" comment: "" - name: "dpdkworkers" type: "string" value: "" access: "read-write" - filter: '' + filter: "" display: "DPDK Workers" comment: "" networkControlCommon: display: "Network Control Common" + sort: 17 list: - name: "localSwitchDisabled" type: "int" value: "0" access: "read-write" - filter: '0~1' + filter: "0~1" display: "Local Switch Disabled" comment: "" - name: "maxTCPSyncPerSecond" type: "int" value: "0" access: "read-write" - filter: '' + filter: "" display: "Max TCP Sync Per Second" comment: "" - name: "upfMaxSupportMbps" type: "int" value: "0" access: "read-write" - filter: '' + filter: "" display: "UPF Max Support Mbps" comment: "" - name: "dscpInnerMapping" type: "int" value: "0" access: "read-write" - filter: '' + filter: "" display: "dscp Inner Mapping" comment: "" networkControlDnnList: display: "Network Control DNN List" + sort: 19 array: - name: "index" type: "int" value: "1" access: "read-only" - filter: '1~32' + filter: "1~32" display: "Index" comment: "1~32" - name: "dnnName" type: "string" value: "" access: "read-write" - filter: '' + filter: "" display: "DNN Name" comment: "" - name: "n3InterfaceId" type: "int" value: "0" access: "read-write" - filter: '0~32' + filter: "0~32" display: "N3 Interface ID" comment: "" - name: "n6InterfaceId" type: "int" value: "0" access: "read-write" - filter: '0~32' + filter: "0~32" display: "N6 Interface ID" comment: "" - name: "httpProtoEnabled" type: "int" value: "0" access: "read-write" - filter: '0~1' + filter: "0~1" display: "HTTP Proto Enabled" comment: "" - name: "httpsProtoEnabled" type: "int" value: "0" access: "read-write" - filter: '0~1' + filter: "0~1" display: "HTTPS Proto Enabled" comment: "" - name: "headerEnrichInfoList" type: "int" value: "1" access: "read-write" - filter: '0~32' + filter: "0~32" display: "Header Enrich Info List" comment: "" array: @@ -885,56 +895,56 @@ upf: type: "int" value: "1" access: "read-only" - filter: '1~32' + filter: "1~32" display: "Index" comment: "1~32" - name: "type" type: "int" value: "0" access: "read-write" - filter: '' + filter: "" display: "Type" comment: "" - name: "name" type: "string" value: "" access: "read-write" - filter: '' + filter: "" display: "Name" comment: "" - name: "value" type: "string" value: "" access: "read-write" - filter: '' + filter: "" display: "Value" comment: "" - name: "statisticEnabled" type: "int" value: "0" access: "read-write" - filter: '0~1' + filter: "0~1" display: "Statistic Enabled" comment: "" - name: "localSwitchCheck" type: "int" value: "0" access: "read-write" - filter: '0~1' + filter: "0~1" display: "Local Switch Check" comment: "" - name: "qerMaxSupportMbps" type: "int" value: "0" access: "read-write" - filter: '' + filter: "" display: "QER Max Support Mbps" comment: "" - name: "ueIpv4PoolList" type: "int" value: "1" access: "read-write" - filter: '0~32' + filter: "0~32" display: "UE IPv4 Pool List" comment: "" array: @@ -942,28 +952,28 @@ upf: type: "int" value: "1" access: "read-only" - filter: '1~32' + filter: "1~32" display: "Index" comment: "1~32" - name: "ipv4" type: "string" value: "0.0.0.0" access: "read-write" - filter: '' + filter: "" display: "IPv4" comment: "" - name: "ipv4Mask" type: "string" value: "255.255.255.0" access: "read-write" - filter: '' + filter: "" display: "IPv4 Mask" comment: "" - name: "ueIpv6PoolList" type: "int" value: "1" access: "read-write" - filter: '0~32' + filter: "0~32" display: "UE IPv6 Pool List" comment: "" array: @@ -971,28 +981,28 @@ upf: type: "int" value: "1" access: "read-only" - filter: '1~32' + filter: "1~32" display: "Index" comment: "1~32" - name: "ipv6" type: "string" value: "" access: "read-write" - filter: '' + filter: "" display: "IPv6" comment: "" - name: "ipv6Prefix" type: "int" value: "64" access: "read-write" - filter: '1~128' + filter: "1~128" display: "IPv6 Prefix" comment: "" - name: "dstServerIpv4PoolList" type: "int" value: "1" access: "read-write" - filter: '0~32' + filter: "0~32" display: "Dst Server IPv4 Pool List" comment: "" array: @@ -1000,28 +1010,28 @@ upf: type: "int" value: "1" access: "read-only" - filter: '1~32' + filter: "1~32" display: "Index" comment: "1~32" - name: "ipv4" type: "string" value: "0.0.0.0" access: "read-write" - filter: '' + filter: "" display: "IPv4" comment: "" - name: "ipv4Mask" type: "string" value: "255.255.255.0" access: "read-write" - filter: '' + filter: "" display: "IPv4 Mask" comment: "" - name: "dstServerIpv6PoolList" type: "int" value: "1" access: "read-write" - filter: '0~32' + filter: "0~32" display: "Dst Server IPv6 Pool List" comment: "" array: @@ -1029,399 +1039,406 @@ upf: type: "int" value: "1" access: "read-only" - filter: '1~32' + filter: "1~32" display: "Index" comment: "1~32" - name: "ipv6" type: "string" value: "" access: "read-write" - filter: '' + filter: "" display: "IPv6" comment: "" - name: "ipv6Prefix" type: "int" value: "64" access: "read-write" - filter: '1~128' + filter: "1~128" display: "IPv6 Prefix" comment: "" - name: "gatewayIpType" type: "string" value: "ipv4" access: "read-write" - filter: '' + filter: "" display: "Gateway IP Type" comment: "ipv4|ipv6|ipv4v6" - name: "gatewayIpv4" type: "string" value: "0.0.0.0" access: "read-write" - filter: '' + filter: "" display: "Gateway IPv4" comment: "" - name: "gatewayIpv6" type: "string" value: "" access: "read-write" - filter: '' + filter: "" display: "Gateway IPv6" comment: "" - name: "secondaryGatewayIpv4" type: "string" value: "0.0.0.0" access: "read-write" - filter: '' + filter: "" display: "Secondary Gateway IPv4" comment: "" - name: "secondaryGatewayIpv6" type: "string" value: "" access: "read-write" - filter: '' + filter: "" display: "Secondary Gateway IPv6" comment: "" networkControlSnssaiList: display: "Network Control SNSSAI List" + sort: 21 array: - name: "index" type: "int" value: "1" access: "read-only" - filter: '1~32' + filter: "1~32" display: "Index" comment: "1~32" - name: "sst" type: "int" value: "1" access: "read-write" - filter: '' + filter: "" display: "SST" comment: "" - name: "sd" type: "int" value: "1" access: "read-write" - filter: '' + filter: "" display: "SD" comment: "" - name: "n3InterfaceId" type: "int" value: "0" access: "read-write" - filter: '0~32' + filter: "0~32" display: "N3 Interface ID" comment: "" - name: "n6InterfaceId" type: "int" value: "0" access: "read-write" - filter: '0~32' + filter: "0~32" display: "N6 Interface ID" comment: "" - name: "qerMaxSupportMbps" type: "int" value: "0" access: "read-write" - filter: '' + filter: "" display: "QER Max Support Mbps" comment: "" - name: "statisticEnabled" type: "int" value: "0" access: "read-write" - filter: '0~1' + filter: "0~1" display: "Statistic Enabled" comment: "" - name: "vlanIdMin" type: "int" value: "0" access: "read-write" - filter: '' + filter: "" display: "Vlan ID Min" comment: "" - name: "vlanIdMax" type: "int" value: "0" access: "read-write" - filter: '' + filter: "" display: "Vlan ID Max" comment: "" networkControlAclWhiteList: display: "Network Control ACL White List" + sort: 23 array: - name: "index" type: "int" value: "1" access: "read-only" - filter: '1~32' + filter: "1~32" display: "Index" comment: "1~32" - name: "ueIpv4" type: "string" value: "0.0.0.0" access: "read-write" - filter: '' + filter: "" display: "UE IPv4" comment: "" - name: "ueIpv4Mask" type: "string" value: "255.255.255.0" access: "read-write" - filter: '' + filter: "" display: "UE IPv4 Mask" comment: "" - name: "ueIpv6" type: "string" value: "" access: "read-write" - filter: '' + filter: "" display: "UE IPv6" comment: "" - name: "ueIpv6Prefix" type: "int" value: "64" access: "read-write" - filter: '1~128' + filter: "1~128" display: "UE IPv6 Prefix" comment: "" - name: "dstServerIpv4" type: "string" value: "0.0.0.0" access: "read-write" - filter: '' + filter: "" display: "Dst Server IPv4" comment: "" - name: "dstServerIpv4Mask" type: "string" value: "255.255.255.0" access: "read-write" - filter: '' + filter: "" display: "Dst Server IPv4 Mask" comment: "" - name: "dstServerIpv6" type: "string" value: "" access: "read-write" - filter: '' + filter: "" display: "Dst Server IPv6" comment: "" - name: "dstServerIpv6Prefix" type: "int" value: "64" access: "read-write" - filter: '1~128' + filter: "1~128" display: "Dst Server IPv6 Prefix" comment: "" networkControlAclBlackList: display: "Network Control ACL Black List" + sort: 25 array: - name: "index" type: "int" value: "1" access: "read-only" - filter: '1~32' + filter: "1~32" display: "Index" comment: "1~32" - name: "ueIpv4" type: "string" value: "0.0.0.0" access: "read-write" - filter: '' + filter: "" display: "UE IPv4" comment: "" - name: "ueIpv4Mask" type: "string" value: "255.255.255.0" access: "read-write" - filter: '' + filter: "" display: "UE IPv4 Mask" comment: "" - name: "ueIpv6" type: "string" value: "" access: "read-write" - filter: '' + filter: "" display: "UE IPv6" comment: "" - name: "ueIpv6Prefix" type: "int" value: "64" access: "read-write" - filter: '1~128' + filter: "1~128" display: "UE IPv6 Prefix" comment: "" - name: "dstServerIpv4" type: "string" value: "0.0.0.0" access: "read-write" - filter: '' + filter: "" display: "Dst Server IPv4" comment: "" - name: "dstServerIpv4Mask" type: "string" value: "255.255.255.0" access: "read-write" - filter: '' + filter: "" display: "Dst Server IPv4 Mask" comment: "" - name: "dstServerIpv6" type: "string" value: "" access: "read-write" - filter: '' + filter: "" display: "Dst Server IPv6" comment: "" - name: "dstServerIpv6Prefix" type: "int" value: "64" access: "read-write" - filter: '1~128' + filter: "1~128" display: "Dst Server IPv6 Prefix" comment: "" networkControlDnsServerList: display: "Network Control DNS Server List" + sort: 27 array: - name: "index" type: "int" value: "1" access: "read-only" - filter: '1~32' + filter: "1~32" display: "Index" comment: "1~32" - name: "enabled" type: "int" value: "0" access: "read-write" - filter: '0~1' + filter: "0~1" display: "Enabled" comment: "0~1" - name: "dnsName" type: "string" value: "" access: "read-write" - filter: '' + filter: "" display: "DNS Name" comment: "" - name: "serverIpv4" type: "string" value: "0.0.0.0" access: "read-write" - filter: '' + filter: "" display: "Server IPv4" comment: "" - name: "serverIpv6" type: "string" value: "" access: "read-write" - filter: '' + filter: "" display: "Server IPv6" comment: "" dpiCommon: display: "DPI Common" + sort: 29 list: - name: "maxDetectPacketNum" type: "int" value: "20" access: "read-write" - filter: '' + filter: "" display: "Max Detect Packet Num" comment: "" - name: "httpProtoEnabled" type: "int" value: "0" access: "read-write" - filter: '0~1' + filter: "0~1" display: "HTTP Proto Enabled" comment: "" - name: "httpsProtoEnabled" type: "int" value: "0" access: "read-write" - filter: '0~1' + filter: "0~1" display: "HTTPS Proto Enabled" comment: "" dpiHeaderEnrichInfoList: display: "DPI Header Enrich Info List" + sort: 31 array: - name: "index" type: "int" value: "1" access: "read-only" - filter: '1~32' + filter: "1~32" display: "Index" comment: "1~32" - name: "type" type: "int" value: "0" access: "read-write" - filter: '' + filter: "" display: "Type" comment: "" - name: "name" type: "string" value: "" access: "read-write" - filter: '' + filter: "" display: "Name" comment: "" - name: "value" type: "string" value: "" access: "read-write" - filter: '' + filter: "" display: "Value" comment: "" dpiAppList: display: "DPI APP List" + sort: 33 array: - name: "index" type: "int" value: "1" access: "read-write" - filter: '1~32' + filter: "1~32" display: "Index" comment: "1~32" - name: "appName" type: "string" value: "" access: "read-write" - filter: '' + filter: "" display: "APP Name" comment: "" - name: "proxyEnabled" type: "int" value: "0" access: "read-write" - filter: '0~1' + filter: "0~1" display: "Proxy Enabled" comment: "" - name: "forceCheckType" type: "int" value: "0" access: "read-write" - filter: '0~1' + filter: "0~1" display: "Force Check Type" comment: "" - name: "n3InterfaceId" type: "int" value: "0" access: "read-write" - filter: '0~32' + filter: "0~32" display: "N3 Interface ID" comment: "" - name: "n6InterfaceId" type: "int" value: "0" access: "read-write" - filter: '0~32' + filter: "0~32" display: "N6 Interface ID" comment: "" - name: "ruleList" type: "int" value: "1" access: "read-write" - filter: '0~32' + filter: "0~32" display: "Rule List" comment: "" array: @@ -1429,34 +1446,34 @@ upf: type: "int" value: "1" access: "read-only" - filter: '1~32' + filter: "1~32" display: "Index" comment: "1~32" - name: "ruleId" type: "int" value: "" access: "read-write" - filter: '' + filter: "" display: "Rule ID" comment: "" - name: "regexMatch" type: "string" value: "" access: "read-write" - filter: '' + filter: "" display: "REGEX Match" comment: "" - name: "flowDescription" type: "string" value: "" access: "read-write" - filter: '' + filter: "" display: "Flow Description" comment: "" - name: "customName" type: "string" value: "" access: "read-write" - filter: '' + filter: "" display: "Custom Name" - comment: "" \ No newline at end of file + comment: "" From 83b1eafa2f9f4b35b72eab457653dfa2fd83ca91 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Thu, 15 Aug 2024 19:08:24 +0800 Subject: [PATCH 13/24] =?UTF-8?q?sql:=20=E6=9B=B4=E6=96=B0IMS=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E9=85=8D=E7=BD=AE=E5=8F=AF=E9=80=89=E5=B1=9E=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- database/common/ne_config.sql | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/database/common/ne_config.sql b/database/common/ne_config.sql index 24e201ce..af4241c7 100644 --- a/database/common/ne_config.sql +++ b/database/common/ne_config.sql @@ -29,10 +29,13 @@ INSERT INTO `ne_config` VALUES (3, 'AMF', 'guami', 'GUAMI List', 'array', '[{\"a 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, '', 1721705807738); 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, '', 1721705807763); INSERT INTO `ne_config` VALUES (6, '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); -INSERT INTO `ne_config` VALUES (7, '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, '', 1719831209377); -INSERT INTO `ne_config` VALUES (8, 'IMS', 'plmn', 'PLMN List', 'array', '[{\"access\":\"read-only\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"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, '', 1719831209469); -INSERT INTO `ne_config` VALUES (9, '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, '', 1719831209568); -INSERT INTO `ne_config` VALUES (10, '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, '', 1719831209655); + +-- 更新 IMS 配置 20240815 +INSERT INTO `ne_config` VALUES (7, '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); +INSERT INTO `ne_config` VALUES (8, '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); +INSERT INTO `ne_config` VALUES (9, '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); +INSERT INTO `ne_config` VALUES (10, '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); + INSERT INTO `ne_config` VALUES (11, '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~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\":\"localIp\",\"type\":\"string\",\"value\":\"172.16.5.220\"}]', 1, '', 1719831209702); INSERT INTO `ne_config` VALUES (12, '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, '', 1719831209759); INSERT INTO `ne_config` VALUES (13, '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, '', 1719831209792); From 9eb5afd1dd70180e78b767be44b00130b3210331 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Thu, 15 Aug 2024 19:09:28 +0800 Subject: [PATCH 14/24] =?UTF-8?q?fix:=20=E5=93=8D=E5=BA=94500=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E7=A0=81=E5=B8=A6code=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/framework/errorcatch/errorcatch.go | 6 +++--- src/framework/vo/result/result.go | 22 +++++++++++----------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/framework/errorcatch/errorcatch.go b/src/framework/errorcatch/errorcatch.go index dc32b6d8..6e6f9e94 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, result.ErrMsg("Internal Server Errors")) + c.JSON(500, result.CodeMsg(500, "Internal Server Errors")) } else { // 通过实现 error 接口的 Error() 方法自定义错误类型进行捕获 switch v := err.(type) { case error: - c.JSON(500, result.ErrMsg(v.Error())) + c.JSON(500, result.CodeMsg(500, v.Error())) default: - c.JSON(500, result.ErrMsg(fmt.Sprint(err))) + c.JSON(500, result.CodeMsg(500, fmt.Sprint(err))) } } diff --git a/src/framework/vo/result/result.go b/src/framework/vo/result/result.go index 7ff154ff..192e6461 100644 --- a/src/framework/vo/result/result.go +++ b/src/framework/vo/result/result.go @@ -1,7 +1,7 @@ package result import ( - "be.ems/src/framework/constants/result" + constResult "be.ems/src/framework/constants/result" ) // CodeMsg 响应结果 @@ -15,8 +15,8 @@ func CodeMsg(code int, msg string) map[string]any { // 响应成功结果 map[string]any{} func Ok(v map[string]any) map[string]any { args := make(map[string]any) - args["code"] = result.CODE_SUCCESS - args["msg"] = result.MSG_SUCCESS + args["code"] = constResult.CODE_SUCCESS + args["msg"] = constResult.MSG_SUCCESS // v合并到args for key, value := range v { args[key] = value @@ -27,7 +27,7 @@ func Ok(v map[string]any) map[string]any { // 响应成功结果信息 func OkMsg(msg string) map[string]any { args := make(map[string]any) - args["code"] = result.CODE_SUCCESS + args["code"] = constResult.CODE_SUCCESS args["msg"] = msg return args } @@ -35,8 +35,8 @@ func OkMsg(msg string) map[string]any { // 响应成功结果数据 func OkData(data any) map[string]any { args := make(map[string]any) - args["code"] = result.CODE_SUCCESS - args["msg"] = result.MSG_SUCCESS + args["code"] = constResult.CODE_SUCCESS + args["msg"] = constResult.MSG_SUCCESS args["data"] = data return args } @@ -44,8 +44,8 @@ func OkData(data any) map[string]any { // 响应失败结果 map[string]any{} func Err(v map[string]any) map[string]any { args := make(map[string]any) - args["code"] = result.CODE_ERROR - args["msg"] = result.MSG_ERROR + args["code"] = constResult.CODE_ERROR + args["msg"] = constResult.MSG_ERROR // v合并到args for key, value := range v { args[key] = value @@ -56,7 +56,7 @@ func Err(v map[string]any) map[string]any { // 响应失败结果信息 func ErrMsg(msg string) map[string]any { args := make(map[string]any) - args["code"] = result.CODE_ERROR + args["code"] = constResult.CODE_ERROR args["msg"] = msg return args } @@ -64,8 +64,8 @@ func ErrMsg(msg string) map[string]any { // 响应失败结果数据 func ErrData(data any) map[string]any { args := make(map[string]any) - args["code"] = result.CODE_ERROR - args["msg"] = result.MSG_ERROR + args["code"] = constResult.CODE_ERROR + args["msg"] = constResult.MSG_ERROR args["data"] = data return args } From 40caf0f946b5597250bc1260ef5afedbc3e20d9b Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Thu, 15 Aug 2024 19:10:15 +0800 Subject: [PATCH 15/24] =?UTF-8?q?fix:=20=E4=BF=AE=E6=94=B9=E7=BD=91?= =?UTF-8?q?=E5=85=83=E9=85=8D=E7=BD=AE=E5=8F=AF=E9=80=89=E7=94=9F=E6=88=90?= =?UTF-8?q?sql=E5=B7=A5=E5=85=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/network_element/ne_config_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/modules/network_element/ne_config_test.go b/src/modules/network_element/ne_config_test.go index 1678ddf7..cc626cee 100644 --- a/src/modules/network_element/ne_config_test.go +++ b/src/modules/network_element/ne_config_test.go @@ -29,7 +29,7 @@ const ( // 配置文件路径 configParamDir = "../../../config/param" // configParamFile = "*" // 目录下全部更新 - configParamFile = "upf_param_config.yaml" // 单文件更新 + configParamFile = "ims_param_config.yaml" // 单文件更新 ) func TestEncrypt(t *testing.T) { @@ -217,7 +217,7 @@ func parseParamConfig(data map[string]any) ([]map[string]string, error) { itemMap["paramSort"] = fmt.Sprint(iiv) case "perms", "method": itemMap["paramPerms"] = iiv.(string) - case "data", "list", "array": + case "list", "array": // 参数类型为数组 itemMap["paramType"] = iik strByte, _ := json.Marshal(iiv) itemMap["paramJson"] = string(strByte) From 0b5366fe82c9d19c0056ed44d6e7523addbb7473 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 16 Aug 2024 10:07:05 +0800 Subject: [PATCH 16/24] =?UTF-8?q?del:=20=E7=A7=BB=E9=99=A4=E6=97=A0?= =?UTF-8?q?=E7=94=A8=E6=8E=A5=E5=8F=A3-=E6=96=87=E4=BB=B6=E8=B5=84?= =?UTF-8?q?=E6=BA=90=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- features/file/file.go | 57 +---------- features/file/model.go | 85 ---------------- features/file/service.go | 206 --------------------------------------- lib/routes/routes.go | 4 - 4 files changed, 1 insertion(+), 351 deletions(-) delete mode 100644 features/file/model.go delete mode 100644 features/file/service.go diff --git a/features/file/file.go b/features/file/file.go index 8300f043..1906acf6 100644 --- a/features/file/file.go +++ b/features/file/file.go @@ -1,31 +1,19 @@ package file import ( - "fmt" "net/http" "path/filepath" - "be.ems/lib/core/ctx" - "be.ems/lib/dborm" - "be.ems/lib/file" "be.ems/lib/log" "be.ems/lib/services" "be.ems/restagent/config" "github.com/gorilla/mux" - "github.com/shirou/gopsutil/disk" ) var ( // parameter config management - UriFile = config.DefaultUriPrefix + "/fileManagement/{apiVersion}/{location}/file" - + UriFile = config.DefaultUriPrefix + "/fileManagement/{apiVersion}/{location}/file" CustomUriFile = config.UriPrefix + "/fileManagement/{apiVersion}/{location}/file" - - // 获取磁盘列表 - UriDiskList = config.DefaultUriPrefix + "/fileManagement/{apiVersion}/files/diskList" - - // 获取文件列表 - UriListFiles = config.DefaultUriPrefix + "/fileManagement/{apiVersion}/files/listFiles" ) // func init() { @@ -151,46 +139,3 @@ func DeleteFile(w http.ResponseWriter, r *http.Request) { services.ResponseStatusOK204NoContent(w) return } - -// 磁盘列表 -func DiskList(w http.ResponseWriter, r *http.Request) { - disks := make([]map[string]string, 0) - - partitions, err := disk.Partitions(false) - if err != nil { - services.ResponseWithJson(w, 200, disks) - } - - for _, partition := range partitions { - usage, err := disk.Usage(partition.Mountpoint) - if err != nil { - continue - } - disks = append(disks, map[string]string{ - "size": file.FormatFileSize(float64(usage.Total)), - "used": file.FormatFileSize(float64(usage.Used)), - "avail": file.FormatFileSize(float64(usage.Free)), - "pcent": fmt.Sprintf("%.1f%%", usage.UsedPercent), - "target": partition.Device, - }) - } - services.ResponseWithJson(w, 200, disks) -} - -// 获取文件列表 /files/search -func ListFiles(w http.ResponseWriter, r *http.Request) { - // json 請求參數獲取 - var bodyArgs FileOption - err := ctx.ShouldBindJSON(r, &bodyArgs) - if err != nil || dborm.DbClient.XEngine == nil { - services.ResponseErrorWithJson(w, 400, err.Error()) - return - } - - files, err := GetFileList(bodyArgs) - if err != nil { - services.ResponseErrorWithJson(w, 400, err.Error()) - return - } - services.ResponseWithJson(w, 200, files) -} diff --git a/features/file/model.go b/features/file/model.go deleted file mode 100644 index 1de351f7..00000000 --- a/features/file/model.go +++ /dev/null @@ -1,85 +0,0 @@ -package file - -import ( - "bufio" - "fmt" - "io/fs" - "os" - "os/exec" - "time" - - "github.com/spf13/afero" -) - -type FileOption struct { - Path string `json:"path"` - Search string `json:"search"` - ContainSub bool `json:"containSub"` - Expand bool `json:"expand"` - Dir bool `json:"dir"` - ShowHidden bool `json:"showHidden"` - Page int `json:"page"` - PageSize int `json:"pageSize"` -} - -type FileInfo struct { - Fs afero.Fs `json:"-"` - Path string `json:"path"` - Name string `json:"name"` - Extension string `json:"extension"` - Content string `json:"content"` - Size int64 `json:"size"` - IsDir bool `json:"isDir"` - IsSymlink bool `json:"isSymlink"` - IsHidden bool `json:"isHidden"` - LinkPath string `json:"linkPath"` - Type string `json:"type"` - Mode string `json:"mode"` - MimeType string `json:"mimeType"` - UpdateTime time.Time `json:"updateTime"` - ModTime time.Time `json:"modTime"` - FileMode os.FileMode `json:"-"` - Items []*FileInfo `json:"items"` - ItemTotal int `json:"itemTotal"` -} - -func (f *FileInfo) search(search string, count int) (files []FileSearchInfo, total int, err error) { - cmd := exec.Command("find", f.Path, "-name", fmt.Sprintf("*%s*", search)) - output, err := cmd.StdoutPipe() - if err != nil { - return - } - if err = cmd.Start(); err != nil { - return - } - defer func() { - _ = cmd.Wait() - _ = cmd.Process.Kill() - }() - - scanner := bufio.NewScanner(output) - for scanner.Scan() { - line := scanner.Text() - info, err := os.Stat(line) - if err != nil { - continue - } - total++ - if total > count { - continue - } - files = append(files, FileSearchInfo{ - Path: line, - FileInfo: info, - }) - } - if err = scanner.Err(); err != nil { - return - } - return -} - -type FileSearchInfo struct { - Path string `json:"path"` - fs.FileInfo -} diff --git a/features/file/service.go b/features/file/service.go deleted file mode 100644 index 3742b7a7..00000000 --- a/features/file/service.go +++ /dev/null @@ -1,206 +0,0 @@ -package file - -import ( - "errors" - "fmt" - "os" - "path" - "path/filepath" - "strings" - - "be.ems/lib/file" - "github.com/spf13/afero" -) - -// 获取文件列表 -func GetFileList(op FileOption) (FileInfo, error) { - var fileInfo FileInfo - if _, err := os.Stat(op.Path); err != nil && os.IsNotExist(err) { - return fileInfo, nil - } - info, err := NewFileInfo(op) - if err != nil { - return fileInfo, err - } - fileInfo = *info - return fileInfo, nil -} - -func NewFileInfo(op FileOption) (*FileInfo, error) { - var appFs = afero.NewOsFs() - - info, err := appFs.Stat(op.Path) - if err != nil { - return nil, err - } - - fileInfo := &FileInfo{ - Fs: appFs, - Path: op.Path, - Name: info.Name(), - IsDir: info.IsDir(), - FileMode: info.Mode(), - ModTime: info.ModTime(), - Size: info.Size(), - IsSymlink: file.IsSymlink(info.Mode()), - Extension: filepath.Ext(info.Name()), - IsHidden: file.IsHidden(op.Path), - Mode: fmt.Sprintf("%04o", info.Mode().Perm()), - MimeType: file.GetMimeType(op.Path), - } - if fileInfo.IsSymlink { - fileInfo.LinkPath = file.GetSymlink(op.Path) - } - if op.Expand { - if fileInfo.IsDir { - if err := listChildren(fileInfo, op.Dir, op.ShowHidden, op.ContainSub, op.Search, op.Page, op.PageSize); err != nil { - return nil, err - } - return fileInfo, nil - } else { - if err := getContent(fileInfo); err != nil { - return nil, err - } - } - } - return fileInfo, nil -} - -func listChildren(f *FileInfo, dir, showHidden, containSub bool, search string, page, pageSize int) error { - afs := &afero.Afero{Fs: f.Fs} - var ( - files []FileSearchInfo - err error - total int - ) - - if search != "" && containSub { - files, total, err = f.search(search, page*pageSize) - if err != nil { - return err - } - } else { - dirFiles, err := afs.ReadDir(f.Path) - if err != nil { - return err - } - for _, file := range dirFiles { - files = append(files, FileSearchInfo{ - Path: f.Path, - FileInfo: file, - }) - } - } - - var items []*FileInfo - for _, df := range files { - if dir && !df.IsDir() { - continue - } - name := df.Name() - fPath := path.Join(df.Path, df.Name()) - if search != "" { - if containSub { - fPath = df.Path - name = strings.TrimPrefix(strings.TrimPrefix(fPath, f.Path), "/") - } else { - lowerName := strings.ToLower(name) - lowerSearch := strings.ToLower(search) - if !strings.Contains(lowerName, lowerSearch) { - continue - } - } - } - if !showHidden && file.IsHidden(name) { - continue - } - f.ItemTotal++ - isSymlink, isInvalidLink := false, false - if file.IsSymlink(df.Mode()) { - isSymlink = true - info, err := f.Fs.Stat(fPath) - if err == nil { - df.FileInfo = info - } else { - isInvalidLink = true - } - } - - fileInfo := &FileInfo{ - Fs: f.Fs, - Name: name, - Size: df.Size(), - ModTime: df.ModTime(), - FileMode: df.Mode(), - IsDir: df.IsDir(), - IsSymlink: isSymlink, - IsHidden: file.IsHidden(fPath), - Extension: filepath.Ext(name), - Path: fPath, - Mode: fmt.Sprintf("%04o", df.Mode().Perm()), - } - - if isSymlink { - fileInfo.LinkPath = file.GetSymlink(fPath) - } - if df.Size() > 0 { - fileInfo.MimeType = file.GetMimeType(fPath) - } - if isInvalidLink { - fileInfo.Type = "invalid_link" - } - items = append(items, fileInfo) - } - if containSub { - f.ItemTotal = total - } - start := (page - 1) * pageSize - end := pageSize + start - var result []*FileInfo - if start < 0 || start > f.ItemTotal || end < 0 || start > end { - result = items - } else { - if end > f.ItemTotal { - result = items[start:] - } else { - result = items[start:end] - } - } - - f.Items = result - return nil -} - -func getContent(f *FileInfo) error { - if f.Size <= 10*1024*1024 { - afs := &afero.Afero{Fs: f.Fs} - cByte, err := afs.ReadFile(f.Path) - if err != nil { - return nil - } - if len(cByte) > 0 && detectBinary(cByte) { - return errors.New("ErrFileCanNotRead") - } - f.Content = string(cByte) - return nil - } else { - return errors.New("ErrFileCanNotRead") - } -} - -func detectBinary(buf []byte) bool { - whiteByte := 0 - n := 1024 - if len(buf) < 1024 { - n = len(buf) - } - for i := 0; i < n; i++ { - if (buf[i] >= 0x20) || buf[i] == 9 || buf[i] == 10 || buf[i] == 13 { - whiteByte++ - } else if buf[i] <= 6 || (buf[i] >= 14 && buf[i] <= 31) { - return true - } - } - - return whiteByte < 1 -} diff --git a/lib/routes/routes.go b/lib/routes/routes.go index 9565f8ec..70459094 100644 --- a/lib/routes/routes.go +++ b/lib/routes/routes.go @@ -288,10 +288,6 @@ func init() { // UE event AMF上报的UE事件, 无前缀给到Gin处理 //Register("POST", event.UriUEEvent, event.PostUEEventFromAMF, nil) - // 文件资源 - Register("GET", file.UriDiskList, file.DiskList, nil) - Register("POST", file.UriListFiles, file.ListFiles, nil) - // 数据库连接情况 Register("GET", dbrest.UriDbConnection, dbrest.DbConnection, nil) Register("GET", dbrest.CustomUriDbConnection, dbrest.DbConnection, nil) From 2ff03fc7e85baf6506526b39b262b5bc4c1ed494 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 16 Aug 2024 10:08:42 +0800 Subject: [PATCH 17/24] =?UTF-8?q?del:=20=E7=A7=BB=E9=99=A4jwt-go=E4=BE=9D?= =?UTF-8?q?=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/oauth/oauth.go | 27 --------------------------- 1 file changed, 27 deletions(-) diff --git a/lib/oauth/oauth.go b/lib/oauth/oauth.go index 2d456034..b261f35f 100644 --- a/lib/oauth/oauth.go +++ b/lib/oauth/oauth.go @@ -4,7 +4,6 @@ import ( "crypto/sha256" "crypto/sha512" "encoding/hex" - "fmt" "math/rand" "net/http" "strings" @@ -12,35 +11,9 @@ import ( "be.ems/lib/log" - "github.com/dgrijalva/jwt-go" "golang.org/x/crypto/bcrypt" ) -// GenToken 生成Token值 -func GenToken(mapClaims jwt.MapClaims) (string, error) { - token := jwt.NewWithClaims(jwt.SigningMethodHS256, mapClaims) - var nowDate = time.Now() - var secret = fmt.Sprintf("%v%v", nowDate, "xxxx") - return token.SignedString([]byte(secret)) -} - -// GenerateToken 生成Token值 -func GenerateToken(mapClaims jwt.MapClaims, key string) (string, error) { - token := jwt.NewWithClaims(jwt.SigningMethodHS256, mapClaims) - return token.SignedString([]byte(key)) -} - -// ParseToken: "解析token" -func ParseToken(token string, secret string) (string, error) { - claim, err := jwt.Parse(token, func(token *jwt.Token) (interface{}, error) { - return []byte(secret), nil - }) - if err != nil { - return "", err - } - return claim.Claims.(jwt.MapClaims)["cmd"].(string), nil -} - func RandAccessToken(n int) (ret string) { allString := "52661fbd-6b84-4fc2-aa1e-17879a5c6c9b" ret = "" From 4d719b4bd594183f0c84144e50fbc5fd4c5d973d Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 16 Aug 2024 10:09:30 +0800 Subject: [PATCH 18/24] =?UTF-8?q?fix:=20=E6=9B=B4=E6=96=B0=E4=BE=9D?= =?UTF-8?q?=E8=B5=96user=5Fagent->useragent?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/framework/utils/ua/ua.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/framework/utils/ua/ua.go b/src/framework/utils/ua/ua.go index 1a125315..d1115beb 100644 --- a/src/framework/utils/ua/ua.go +++ b/src/framework/utils/ua/ua.go @@ -1,8 +1,8 @@ package ua -import "github.com/mssola/user_agent" +import "github.com/mssola/useragent" // 获取user-agent信息 -func Info(userAgent string) *user_agent.UserAgent { - return user_agent.New(userAgent) +func Info(userAgent string) *useragent.UserAgent { + return useragent.New(userAgent) } From 5c6857e896b0ad7b82c6c0c2d466f47dd0aa48d5 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 16 Aug 2024 10:11:11 +0800 Subject: [PATCH 19/24] =?UTF-8?q?chore:=20=E6=9B=B4=E6=96=B0=E5=8D=87?= =?UTF-8?q?=E7=BA=A7gopsutil/v3=E5=88=B0gopsutil/v4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- features/state/getstate.go | 2 +- features/state/state_linux.go | 8 +-- features/state/state_windows.go | 8 +-- features/state/sysinfo.go | 49 +------------------ src/modules/monitor/service/monitor.impl.go | 10 ++-- src/modules/monitor/service/monitor_test.go | 10 ++-- .../monitor/service/system_info.impl.go | 18 ++++--- src/modules/ws/model/net_connect.go | 2 +- src/modules/ws/processor/net_connect.go | 4 +- src/modules/ws/processor/ps_process.go | 2 +- 10 files changed, 36 insertions(+), 77 deletions(-) diff --git a/features/state/getstate.go b/features/state/getstate.go index 482e9f51..9a79e508 100644 --- a/features/state/getstate.go +++ b/features/state/getstate.go @@ -9,7 +9,7 @@ import ( "strings" "time" - "github.com/shirou/gopsutil/v3/net" + "github.com/shirou/gopsutil/v4/net" "github.com/go-resty/resty/v2" "github.com/gorilla/mux" diff --git a/features/state/state_linux.go b/features/state/state_linux.go index 4a4419f7..a0944a1a 100644 --- a/features/state/state_linux.go +++ b/features/state/state_linux.go @@ -12,10 +12,10 @@ import ( "time" "be.ems/lib/log" - "github.com/shirou/gopsutil/v3/cpu" - "github.com/shirou/gopsutil/v3/disk" - "github.com/shirou/gopsutil/v3/mem" - "github.com/shirou/gopsutil/v3/process" + "github.com/shirou/gopsutil/v4/cpu" + "github.com/shirou/gopsutil/v4/disk" + "github.com/shirou/gopsutil/v4/mem" + "github.com/shirou/gopsutil/v4/process" ) type SysInfo struct { diff --git a/features/state/state_windows.go b/features/state/state_windows.go index ef37c5ca..3ddf4844 100644 --- a/features/state/state_windows.go +++ b/features/state/state_windows.go @@ -11,10 +11,10 @@ import ( "syscall" "time" - "github.com/shirou/gopsutil/v3/cpu" - "github.com/shirou/gopsutil/v3/disk" - "github.com/shirou/gopsutil/v3/mem" - "github.com/shirou/gopsutil/v3/process" + "github.com/shirou/gopsutil/v4/cpu" + "github.com/shirou/gopsutil/v4/disk" + "github.com/shirou/gopsutil/v4/mem" + "github.com/shirou/gopsutil/v4/process" ) type SysInfo struct { diff --git a/features/state/sysinfo.go b/features/state/sysinfo.go index a9d0519a..f6f25b1c 100644 --- a/features/state/sysinfo.go +++ b/features/state/sysinfo.go @@ -2,55 +2,10 @@ package state import ( "be.ems/lib/log" - "github.com/shirou/gopsutil/cpu" - "github.com/shirou/gopsutil/disk" - "github.com/shirou/gopsutil/host" - "github.com/shirou/gopsutil/mem" + "github.com/shirou/gopsutil/v4/cpu" + "github.com/shirou/gopsutil/v4/mem" ) -func getSystemInfo() { - // 获取主机信息 - hostInfo, err := host.Info() - if err != nil { - log.Errorf("Failed to get host info: %v", err) - return - } - log.Tracef("Host info: %+v", hostInfo) - - // 获取CPU信息 - cpuInfo, err := cpu.Info() - if err != nil { - log.Errorf("Failed to get CPU info: %v", err) - return - } - log.Tracef("CPU info: %+v", cpuInfo) - - // 获取内存信息 - memInfo, err := mem.VirtualMemory() - if err != nil { - log.Errorf("Failed to get memory info: %v", err) - return - } - log.Tracef("Memory info: %+v", memInfo) - - // 获取磁盘分区信息 - diskPartitions, err := disk.Partitions(true) - if err != nil { - log.Errorf("Failed to get disk partitions: %v", err) - return - } - log.Tracef("Disk partitions: %+v", diskPartitions) - for _, partition := range diskPartitions { - // 获取每个磁盘分区的使用情况 - usage, err := disk.Usage(partition.Mountpoint) - if err != nil { - log.Errorf("Failed to get disk usage for %s: %v", partition.Mountpoint, err) - continue - } - log.Tracef("%s usage: %+v", partition.Mountpoint, usage) - } -} - func getCpuNumber() int { // 获取CPU信息 cpuInfo, err := cpu.Info() diff --git a/src/modules/monitor/service/monitor.impl.go b/src/modules/monitor/service/monitor.impl.go index 2a4d4d1b..4152193f 100644 --- a/src/modules/monitor/service/monitor.impl.go +++ b/src/modules/monitor/service/monitor.impl.go @@ -9,11 +9,11 @@ import ( "be.ems/src/modules/monitor/model" "be.ems/src/modules/monitor/repository" systemService "be.ems/src/modules/system/service" - "github.com/shirou/gopsutil/v3/cpu" - "github.com/shirou/gopsutil/v3/disk" - "github.com/shirou/gopsutil/v3/load" - "github.com/shirou/gopsutil/v3/mem" - "github.com/shirou/gopsutil/v3/net" + "github.com/shirou/gopsutil/v4/cpu" + "github.com/shirou/gopsutil/v4/disk" + "github.com/shirou/gopsutil/v4/load" + "github.com/shirou/gopsutil/v4/mem" + "github.com/shirou/gopsutil/v4/net" ) // 实例化服务层 MonitorImpl 结构体 diff --git a/src/modules/monitor/service/monitor_test.go b/src/modules/monitor/service/monitor_test.go index 11a87a8f..00ae73e8 100644 --- a/src/modules/monitor/service/monitor_test.go +++ b/src/modules/monitor/service/monitor_test.go @@ -5,11 +5,11 @@ import ( "testing" "time" - "github.com/shirou/gopsutil/v3/cpu" - "github.com/shirou/gopsutil/v3/disk" - "github.com/shirou/gopsutil/v3/load" - "github.com/shirou/gopsutil/v3/mem" - "github.com/shirou/gopsutil/v3/net" + "github.com/shirou/gopsutil/v4/cpu" + "github.com/shirou/gopsutil/v4/disk" + "github.com/shirou/gopsutil/v4/load" + "github.com/shirou/gopsutil/v4/mem" + "github.com/shirou/gopsutil/v4/net" ) func init() { diff --git a/src/modules/monitor/service/system_info.impl.go b/src/modules/monitor/service/system_info.impl.go index 663499de..a071a792 100644 --- a/src/modules/monitor/service/system_info.impl.go +++ b/src/modules/monitor/service/system_info.impl.go @@ -1,6 +1,7 @@ package service import ( + "context" "fmt" "os" "runtime" @@ -10,11 +11,11 @@ import ( "be.ems/src/framework/config" "be.ems/src/framework/utils/parse" - "github.com/shirou/gopsutil/v3/cpu" - "github.com/shirou/gopsutil/v3/disk" - "github.com/shirou/gopsutil/v3/host" - "github.com/shirou/gopsutil/v3/mem" - "github.com/shirou/gopsutil/v3/net" + "github.com/shirou/gopsutil/v4/cpu" + "github.com/shirou/gopsutil/v4/disk" + "github.com/shirou/gopsutil/v4/host" + "github.com/shirou/gopsutil/v4/mem" + "github.com/shirou/gopsutil/v4/net" ) // 实例化服务层 SystemInfoImpl 结构体 @@ -150,9 +151,12 @@ func (s *SystemInfoImpl) NetworkInfo() map[string]string { // DiskInfo 磁盘信息 func (s *SystemInfoImpl) DiskInfo() []map[string]string { disks := make([]map[string]string, 0) + ctx := context.Background() + ctx, cancel := context.WithTimeout(ctx, 1*time.Second) + defer cancel() - partitions, err := disk.Partitions(false) - if err != nil { + partitions, err := disk.PartitionsWithContext(ctx, false) + if err != context.DeadlineExceeded { return disks } diff --git a/src/modules/ws/model/net_connect.go b/src/modules/ws/model/net_connect.go index 8116c285..945ede5d 100644 --- a/src/modules/ws/model/net_connect.go +++ b/src/modules/ws/model/net_connect.go @@ -1,6 +1,6 @@ package model -import "github.com/shirou/gopsutil/v3/net" +import "github.com/shirou/gopsutil/v4/net" // NetConnectData 网络连接进程数据 type NetConnectData struct { diff --git a/src/modules/ws/processor/net_connect.go b/src/modules/ws/processor/net_connect.go index 6530d0c1..187de88b 100644 --- a/src/modules/ws/processor/net_connect.go +++ b/src/modules/ws/processor/net_connect.go @@ -8,8 +8,8 @@ import ( "be.ems/src/framework/logger" "be.ems/src/framework/vo/result" "be.ems/src/modules/ws/model" - "github.com/shirou/gopsutil/v3/net" - "github.com/shirou/gopsutil/v3/process" + "github.com/shirou/gopsutil/v4/net" + "github.com/shirou/gopsutil/v4/process" ) // GetNetConnections 获取网络连接进程 diff --git a/src/modules/ws/processor/ps_process.go b/src/modules/ws/processor/ps_process.go index 45fe6ff3..660cc765 100644 --- a/src/modules/ws/processor/ps_process.go +++ b/src/modules/ws/processor/ps_process.go @@ -12,7 +12,7 @@ import ( "be.ems/src/framework/utils/parse" "be.ems/src/framework/vo/result" "be.ems/src/modules/ws/model" - "github.com/shirou/gopsutil/v3/process" + "github.com/shirou/gopsutil/v4/process" ) // GetProcessData 获取进程数据 From d90c26a28ede1513c11b1f68709f52410eceac3a Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 16 Aug 2024 10:11:40 +0800 Subject: [PATCH 20/24] =?UTF-8?q?fix:=20=E7=A6=81=E7=94=A8TaskWriteSystemL?= =?UTF-8?q?og?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crontask/tasks.go | 151 +++++++++++++++++++++++----------------------- 1 file changed, 75 insertions(+), 76 deletions(-) diff --git a/crontask/tasks.go b/crontask/tasks.go index ab94d3fc..2d5dfb7a 100644 --- a/crontask/tasks.go +++ b/crontask/tasks.go @@ -18,7 +18,6 @@ import ( "be.ems/lib/log" "github.com/go-resty/resty/v2" - "github.com/shirou/gopsutil/process" // cron "github.com/go-co-op/gocron" "github.com/jasonlvhit/gocron" @@ -1456,82 +1455,82 @@ func init() { func (t *TaskFunc) TaskWriteSystemLog(uri, params, body string) { - processes, err := process.Processes() - if err != nil { - log.Error("Failed to get processes:", err) - return - } + // processes, err := process.Processes() + // if err != nil { + // log.Error("Failed to get processes:", err) + // return + // } - for _, proc := range processes { - name, err := proc.Name() - if err != nil { - log.Error("Failed to get process name:", err) - continue - } - for i, procInfo := range procInfos { - if name == procInfo.Name { - pid := proc.Pid - timestamp, _ := proc.CreateTime() - userName, _ := proc.Username() - startTime := time.Unix((timestamp / 1000), 0).Format(time.DateTime) + // for _, proc := range processes { + // name, err := proc.Name() + // if err != nil { + // log.Error("Failed to get process name:", err) + // continue + // } + // for i, procInfo := range procInfos { + // if name == procInfo.Name { + // pid := proc.Pid + // timestamp, _ := proc.CreateTime() + // userName, _ := proc.Username() + // startTime := time.Unix((timestamp / 1000), 0).Format(time.DateTime) - newProcInfo := &ProcInfo{ - Name: procInfo.Name, - Pid: pid, - StartTime: startTime, - } - log.Trace("newProcInfo:", *newProcInfo) - log.Trace("procInfo:", procInfo) - if *newProcInfo != procInfo { - procInfos[i] = *newProcInfo - var operation string - if newProcInfo.Pid != 0 { - operation = "start" - } else { - operation = "stop" - } - sysLogs := &[]dborm.SystemLog{} - sysLog := &dborm.SystemLog{ - UserName: userName, - ProcessName: newProcInfo.Name, - ProcessID: newProcInfo.Pid, - Operation: operation, - StartTime: newProcInfo.StartTime, - LogTime: time.Now().Format(time.DateTime), - } - var response *resty.Response - requestURI := fmt.Sprintf("%s?%s", uri, params) - requestURL := fmt.Sprintf("%s%s", yamlConfig.OMC.HostUri, requestURI) + // newProcInfo := &ProcInfo{ + // Name: procInfo.Name, + // Pid: pid, + // StartTime: startTime, + // } + // log.Trace("newProcInfo:", *newProcInfo) + // log.Trace("procInfo:", procInfo) + // if *newProcInfo != procInfo { + // procInfos[i] = *newProcInfo + // var operation string + // if newProcInfo.Pid != 0 { + // operation = "start" + // } else { + // operation = "stop" + // } + // sysLogs := &[]dborm.SystemLog{} + // sysLog := &dborm.SystemLog{ + // UserName: userName, + // ProcessName: newProcInfo.Name, + // ProcessID: newProcInfo.Pid, + // Operation: operation, + // StartTime: newProcInfo.StartTime, + // LogTime: time.Now().Format(time.DateTime), + // } + // var response *resty.Response + // requestURI := fmt.Sprintf("%s?%s", uri, params) + // requestURL := fmt.Sprintf("%s%s", yamlConfig.OMC.HostUri, requestURI) - *sysLogs = append(*sysLogs, *sysLog) - data := make(map[string]interface{}) - data["system_log"] = *sysLogs - body, _ := json.Marshal(data) - log.Trace("data:", data) - log.Debug("requestURL: POST ", requestURL) - client := resty.New() - response, err = client.R(). - EnableTrace(). - SetHeaders(map[string]string{"User-Agent": GetDefaultUserAgent()}). - SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). - SetBody(body). - Post(requestURL) - if err != nil { - log.Error("Failed to post:", err) - } - log.Debug("StatusCode: ", response.StatusCode()) - switch response.StatusCode() { - case http.StatusOK, http.StatusCreated, http.StatusNoContent, http.StatusAccepted: - log.Debug("response body:", string(response.Body())) - body := new(map[string]interface{}) - _ = json.Unmarshal(response.Body(), &body) - default: - log.Debug("response body:", string(response.Body())) - body := new(map[string]interface{}) - _ = json.Unmarshal(response.Body(), &body) - } - } - } - } - } + // *sysLogs = append(*sysLogs, *sysLog) + // data := make(map[string]interface{}) + // data["system_log"] = *sysLogs + // body, _ := json.Marshal(data) + // log.Trace("data:", data) + // log.Debug("requestURL: POST ", requestURL) + // client := resty.New() + // response, err = client.R(). + // EnableTrace(). + // SetHeaders(map[string]string{"User-Agent": GetDefaultUserAgent()}). + // SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). + // SetBody(body). + // Post(requestURL) + // if err != nil { + // log.Error("Failed to post:", err) + // } + // log.Debug("StatusCode: ", response.StatusCode()) + // switch response.StatusCode() { + // case http.StatusOK, http.StatusCreated, http.StatusNoContent, http.StatusAccepted: + // log.Debug("response body:", string(response.Body())) + // body := new(map[string]interface{}) + // _ = json.Unmarshal(response.Body(), &body) + // default: + // log.Debug("response body:", string(response.Body())) + // body := new(map[string]interface{}) + // _ = json.Unmarshal(response.Body(), &body) + // } + // } + // } + // } + // } } From 7747b7ec10077e3d0c06fb78489bceb0295e81d9 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 16 Aug 2024 10:18:37 +0800 Subject: [PATCH 21/24] =?UTF-8?q?chore:=20=E5=8E=BB=E9=99=A4aes-tokenKEY?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/framework/config/config/config.default.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/framework/config/config/config.default.yaml b/src/framework/config/config/config.default.yaml index ec2c3bae..6ac5fc24 100644 --- a/src/framework/config/config/config.default.yaml +++ b/src/framework/config/config/config.default.yaml @@ -174,8 +174,6 @@ redis: # AES 加密 aes: - # token身份密钥 - tokenKey: "MoX7WIaw87N82KhwgO7WPh2hU4tVcoI1" # 接口密钥 apiKey: "T9ox2DCzpLfJIPzkH9pKhsOTMOEMJcFv" # 网元主机密钥 From 1fab1ead206d55fca00779acfce70c25bcb82ea4 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 16 Aug 2024 10:19:56 +0800 Subject: [PATCH 22/24] =?UTF-8?q?chore:=20=E4=BE=9D=E8=B5=96=E5=BA=93?= =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- go.mod | 145 +++---- go.sum | 1214 +++++++++++--------------------------------------------- 2 files changed, 299 insertions(+), 1060 deletions(-) diff --git a/go.mod b/go.mod index 331525a9..979c4540 100644 --- a/go.mod +++ b/go.mod @@ -3,73 +3,62 @@ module be.ems go 1.21 require ( - github.com/dgrijalva/jwt-go v3.2.0+incompatible - github.com/dlclark/regexp2 v1.10.0 - github.com/gin-gonic/gin v1.9.1 - github.com/go-resty/resty/v2 v2.7.0 - github.com/go-sql-driver/mysql v1.7.1 - github.com/golang-jwt/jwt/v5 v5.0.0 - github.com/gorilla/mux v1.8.0 - github.com/gorilla/websocket v1.5.0 - github.com/gosnmp/gosnmp v1.35.0 + github.com/dlclark/regexp2 v1.11.4 + 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/gorilla/mux v1.8.1 + github.com/gorilla/websocket v1.5.3 + github.com/gosnmp/gosnmp v1.38.0 github.com/jasonlvhit/gocron v0.0.1 github.com/lestrrat/go-file-rotatelogs v0.0.0-20180223000712-d3151e2a480f - github.com/linxGnu/gosmpp v0.2.0 - github.com/matoous/go-nanoid/v2 v2.0.0 + github.com/linxGnu/gosmpp v0.3.0 + 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.5 - github.com/mssola/user_agent v0.6.0 + github.com/mojocn/base64Captcha v1.3.6 + github.com/mssola/useragent v1.0.0 github.com/patrickmn/go-cache v2.1.0+incompatible - github.com/pkg/sftp v1.13.1 - github.com/prometheus-community/pro-bing v0.4.0 - github.com/redis/go-redis/v9 v9.1.0 + github.com/pkg/sftp v1.13.6 + github.com/prometheus-community/pro-bing v0.4.1 + github.com/redis/go-redis/v9 v9.6.1 github.com/robfig/cron/v3 v3.0.1 - github.com/shirou/gopsutil v3.21.11+incompatible - github.com/shirou/gopsutil/v3 v3.23.7 - github.com/spf13/afero v1.9.5 + github.com/shirou/gopsutil/v4 v4.24.7 github.com/spf13/pflag v1.0.5 - github.com/spf13/viper v1.16.0 - github.com/xuri/excelize/v2 v2.7.1 - github.com/xuri/xgen v0.0.0-20230702070049-db840e1a4605 - golang.org/x/crypto v0.19.0 - golang.org/x/net v0.21.0 - golang.org/x/term v0.17.0 - golang.org/x/text v0.14.0 + github.com/spf13/viper v1.19.0 + github.com/xuri/excelize/v2 v2.8.1 + github.com/xuri/xgen v0.0.0-20240722131518-d0691b701898 + golang.org/x/crypto v0.26.0 + golang.org/x/net v0.28.0 + golang.org/x/term v0.23.0 + golang.org/x/text v0.17.0 gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df gopkg.in/yaml.v3 v3.0.1 - gorm.io/driver/mysql v1.5.1 - gorm.io/gorm v1.25.2 - xorm.io/xorm v1.3.2 + gorm.io/driver/mysql v1.5.7 + gorm.io/gorm v1.25.11 + xorm.io/xorm v1.3.9 ) require ( + filippo.io/edwards25519 v1.1.0 // indirect github.com/beorn7/perks v1.0.1 // indirect - github.com/kr/fs v0.1.0 // indirect - github.com/mattn/go-sqlite3 v1.14.15 // indirect - github.com/onsi/ginkgo v1.16.5 // indirect - github.com/onsi/gomega v1.21.1 // indirect - github.com/prometheus/client_model v0.5.0 // indirect - github.com/prometheus/common v0.48.0 // indirect - github.com/prometheus/procfs v0.12.0 // indirect - golang.org/x/sync v0.6.0 // indirect -) - -require ( - github.com/bytedance/sonic v1.9.1 // indirect - github.com/cespare/xxhash/v2 v2.2.0 // indirect + github.com/bytedance/sonic v1.12.1 // indirect + github.com/bytedance/sonic/loader v0.2.0 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/chenjiandongx/ginprom v0.0.0-20210617023641-6c809602c38a - github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect + github.com/cloudwego/base64x v0.1.4 // indirect + github.com/cloudwego/iasm v0.2.0 // 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/fsnotify/fsnotify v1.6.0 // indirect - github.com/gabriel-vasile/mimetype v1.4.2 // 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/go-forks/fsnotify v1.4.7 // indirect - github.com/go-ole/go-ole v1.2.6 // indirect + github.com/go-ole/go-ole v1.3.0 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect - github.com/go-playground/validator/v10 v10.14.0 // indirect - github.com/goccy/go-json v0.10.2 + github.com/go-playground/validator/v10 v10.22.0 // indirect + github.com/goccy/go-json v0.10.3 github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect github.com/golang/snappy v0.0.4 // indirect github.com/google/uuid v1.6.0 // indirect @@ -77,44 +66,60 @@ require ( 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/json-iterator/go v1.1.12 // indirect - github.com/klauspost/cpuid/v2 v2.2.4 // indirect - github.com/leodido/go-urn v1.2.4 // indirect + github.com/klauspost/compress v1.17.9 // indirect + github.com/klauspost/cpuid/v2 v2.2.8 // 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-20211012122336-39d0f177ccd0 // indirect + github.com/lufia/plan9stats v0.0.0-20240513124658-fba389f38bae // indirect github.com/magiconair/properties v1.8.7 // indirect - github.com/mattn/go-isatty v0.0.19 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect github.com/metaleap/go-util v0.0.0-20180330192724-a09253046f73 // indirect github.com/mitchellh/mapstructure v1.5.0 // 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/pelletier/go-toml/v2 v2.0.8 // indirect + github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect + github.com/onsi/ginkgo v1.16.5 // indirect + github.com/onsi/gomega v1.21.1 // indirect + github.com/orcaman/concurrent-map/v2 v2.0.1 // indirect + github.com/pelletier/go-toml/v2 v2.2.2 // indirect github.com/pkg/errors v0.9.1 // indirect - github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect - github.com/prometheus/client_golang v1.19.1 + 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/richardlehane/mscfb v1.0.4 // indirect github.com/richardlehane/msoleps v1.0.3 // indirect + github.com/sagikazarmark/locafero v0.6.0 // indirect + github.com/sagikazarmark/slog-shim v0.1.0 // indirect github.com/shoenig/go-m1cpu v0.1.6 // indirect - github.com/spf13/cast v1.5.1 // indirect - github.com/spf13/jwalterweatherman v1.1.0 // indirect - github.com/subosito/gotenv v1.4.2 // 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/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.11 // indirect - github.com/tklauser/numcpus v0.6.0 // indirect + github.com/tklauser/go-sysconf v0.3.14 // indirect + github.com/tklauser/numcpus v0.8.0 // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // indirect - github.com/ugorji/go/codec v1.2.11 // indirect - github.com/xuri/efp v0.0.0-20220603152613-6918739fd470 // indirect - github.com/xuri/nfp v0.0.0-20220409054826-5e722a1d9e22 // indirect - 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/sys v0.17.0 // indirect - golang.org/x/tools v0.16.1 // indirect - google.golang.org/protobuf v1.33.0 // 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/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.8.0 // indirect + golang.org/x/sys v0.24.0 // indirect + golang.org/x/tools/cmd/guru v0.1.1-deprecated // indirect + google.golang.org/protobuf v1.34.2 // indirect gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect gopkg.in/ini.v1 v1.67.0 // indirect - xorm.io/builder v0.3.11-0.20220531020008-1bd24a7dc978 // indirect + xorm.io/builder v0.3.13 // indirect ) diff --git a/go.sum b/go.sum index 50c4e307..9a198f42 100644 --- a/go.sum +++ b/go.sum @@ -1,350 +1,103 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= -cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= -cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= -cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= -cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= -cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= -cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= -cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= -cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= -cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= -cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= -cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= -cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= -cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= -cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= -cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= -cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= -cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= -cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= -cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= -cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= -cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= -cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= -cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= -cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= -cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= +filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= gitea.com/xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a h1:lSA0F4e9A2NcQSqGqTOXqu2aRi/XEQxDCBwM8yJtE6s= gitea.com/xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a/go.mod h1:EXuID2Zs0pAQhH8yz+DNjUbjppKQzKFAn28TMYPB6IU= -gitee.com/travelliu/dm v1.8.11192/go.mod h1:DHTzyhCrM843x9VdKVbZ+GKXGRbKM2sJ4LxihRxShkE= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/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/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= -github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= -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= -github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= -github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= -github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= -github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= -github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= 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/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bsm/ginkgo/v2 v2.9.5 h1:rtVBYPs3+TC5iLUVOis1B9tjLTup7Cj5IfzosKtvTJ0= -github.com/bsm/ginkgo/v2 v2.9.5/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c= -github.com/bsm/gomega v1.26.0 h1:LhQm+AFcgV2M0WyKroMASzAzCAJVpAxQXv4SaI9a69Y= -github.com/bsm/gomega v1.26.0/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0= -github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= -github.com/bytedance/sonic v1.9.1 h1:6iJ6NqdoxCDr6mbY8h18oSO+cShGSMRGCEo7F2h0x8s= -github.com/bytedance/sonic v1.9.1/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U= -github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= -github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= -github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +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/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/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/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY= -github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams= -github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= -github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= -github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= -github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -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/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= +github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/0Y= +github.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w= +github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg= +github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY= github.com/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/denisenkom/go-mssqldb v0.10.0/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= -github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +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.10.0 h1:+/GIL799phkJqYW+3YbOd8LCcbHzT0Pbo8zl70MHsq0= -github.com/dlclark/regexp2 v1.10.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= -github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/dlclark/regexp2 v1.11.4 h1:rPYF9/LECdNymJufQKmri9gV604RvvABwgOA8un7yAo= +github.com/dlclark/regexp2 v1.11.4/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= +github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= -github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= -github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= -github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= -github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= -github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239 h1:Ghm4eQYC0nEPnSJdVkTrXpu9KtoVCSo1hg7mtI7G9KU= github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239/go.mod h1:Gdwt2ce0yfBxPvZrHkprdPPTTS3N5rwmLE8T22KBXlw= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= -github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= -github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= -github.com/frankban/quicktest v1.14.4/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= +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.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= -github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= -github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU= -github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +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/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-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg= -github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU= +github.com/gin-gonic/gin v1.10.0 h1:nTuyha1TYqgedzytsKYqna+DfLos46nTv2ygFy86HFU= +github.com/gin-gonic/gin v1.10.0/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y= github.com/go-forks/fsnotify v1.4.7 h1:lyiU2Wqd4fNGCQDn9dZ4UxSiSFgeU1rM6yIfahk8haY= github.com/go-forks/fsnotify v1.4.7/go.mod h1:AU8mot+GznW5+B4jRJHxKg/2EeO+jMORGRkKSxs0biw= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= -github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -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-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-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.14.0 h1:vgvQWe3XCz3gIeFDm/HnTIbj6UGmg/+t63MyGU2n5js= -github.com/go-playground/validator/v10 v10.14.0/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU= +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-redis/redis v6.15.5+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= -github.com/go-resty/resty/v2 v2.7.0 h1:me+K9p3uhSmXtrBZ4k9jcEAfJmuC8IivWHwaLZwPrFY= -github.com/go-resty/resty/v2 v2.7.0/go.mod h1:9PWDzw47qPphMRFfhsyk0NnSgvluHcljSMVIq3w7q0I= -github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= +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-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI= -github.com/go-sql-driver/mysql v1.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI= -github.com/go-sql-driver/mysql v1.7.1/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +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-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= -github.com/goccy/go-json v0.8.1/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= -github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= -github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= -github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= -github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= -github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= -github.com/golang-jwt/jwt/v5 v5.0.0 h1:1n1XNM9hk7O9mnQoNBGolZvzebBQ7p93ULHRc28XJUE= -github.com/golang-jwt/jwt/v5 v5.0.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= -github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= +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/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/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.1/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/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= 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.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.4/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/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= -github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= -github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= -github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= -github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gosnmp/gosnmp v1.35.0 h1:EuWWNPxTCdAUx2/NbQcSa3WdNxjzpy4Phv57b4MWpJM= -github.com/gosnmp/gosnmp v1.35.0/go.mod h1:2AvKZ3n9aEl5TJEo/fFmf/FGO4Nj4cVeEc5yuk88CYc= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= -github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= -github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= -github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= -github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= -github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= -github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +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.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/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= -github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= -github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/jackc/chunkreader v1.0.0/go.mod h1:RT6O25fNZIuasFJRyZ4R/Y2BbhasbmZXF9QQ7T3kePo= -github.com/jackc/chunkreader/v2 v2.0.0/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= -github.com/jackc/chunkreader/v2 v2.0.1/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= -github.com/jackc/pgconn v0.0.0-20190420214824-7e0022ef6ba3/go.mod h1:jkELnwuX+w9qN5YIfX0fl88Ehu4XC3keFuOJJk9pcnA= -github.com/jackc/pgconn v0.0.0-20190824142844-760dd75542eb/go.mod h1:lLjNuW/+OfW9/pnVKPazfWOgNfH2aPem8YQ7ilXGvJE= -github.com/jackc/pgconn v0.0.0-20190831204454-2fabfa3c18b7/go.mod h1:ZJKsE/KZfsUgOEh9hBm+xYTstcNHg7UPMVJqRfQxq4s= -github.com/jackc/pgconn v1.4.0/go.mod h1:Y2O3ZDF0q4mMacyWV3AstPJpeHXWGEetiFttmq5lahk= -github.com/jackc/pgconn v1.5.0/go.mod h1:QeD3lBfpTFe8WUnPZWN5KY/mB8FGMIYRdd8P8Jr0fAI= -github.com/jackc/pgconn v1.5.1-0.20200601181101-fa742c524853/go.mod h1:QeD3lBfpTFe8WUnPZWN5KY/mB8FGMIYRdd8P8Jr0fAI= -github.com/jackc/pgconn v1.8.0/go.mod h1:1C2Pb36bGIP9QHGBYCjnyhqu7Rv3sGshaQUvmfGIB/o= -github.com/jackc/pgconn v1.8.1/go.mod h1:JV6m6b6jhjdmzchES0drzCcYcAHS1OPD5xu3OZ/lE2g= -github.com/jackc/pgconn v1.9.0/go.mod h1:YctiPyvzfU11JFxoXokUOOKQXQmDMoJL9vJzHH8/2JY= -github.com/jackc/pgio v1.0.0/go.mod h1:oP+2QK2wFfUWgr+gxjoBH9KGBb31Eio69xUb0w5bYf8= -github.com/jackc/pgmock v0.0.0-20190831213851-13a1b77aafa2/go.mod h1:fGZlG77KXmcq05nJLRkk0+p82V8B8Dw8KN2/V9c/OAE= -github.com/jackc/pgmock v0.0.0-20201204152224-4fe30f7445fd/go.mod h1:hrBW0Enj2AZTNpt/7Y5rr2xe/9Mn757Wtb2xeBzPv2c= -github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= -github.com/jackc/pgproto3 v1.1.0/go.mod h1:eR5FA3leWg7p9aeAqi37XOTgTIbkABlvcPB3E5rlc78= -github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190420180111-c116219b62db/go.mod h1:bhq50y+xrl9n5mRYyCBFKkpRVTLYJVWeCc+mEAI3yXA= -github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190609003834-432c2951c711/go.mod h1:uH0AWtUmuShn0bcesswc4aBTWGvw0cAxIJp+6OB//Wg= -github.com/jackc/pgproto3/v2 v2.0.0-rc3/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM= -github.com/jackc/pgproto3/v2 v2.0.0-rc3.0.20190831210041-4c03ce451f29/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM= -github.com/jackc/pgproto3/v2 v2.0.1/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= -github.com/jackc/pgproto3/v2 v2.0.6/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= -github.com/jackc/pgproto3/v2 v2.1.1/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= -github.com/jackc/pgservicefile v0.0.0-20200307190119-3430c5407db8/go.mod h1:vsD4gTJCa9TptPL8sPkXrLZ+hDuNrZCnj29CQpr4X1E= -github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b/go.mod h1:vsD4gTJCa9TptPL8sPkXrLZ+hDuNrZCnj29CQpr4X1E= -github.com/jackc/pgtype v0.0.0-20190421001408-4ed0de4755e0/go.mod h1:hdSHsc1V01CGwFsrv11mJRHWJ6aifDLfdV3aVjFF0zg= -github.com/jackc/pgtype v0.0.0-20190824184912-ab885b375b90/go.mod h1:KcahbBH1nCMSo2DXpzsoWOAfFkdEtEJpPbVLq8eE+mc= -github.com/jackc/pgtype v0.0.0-20190828014616-a8802b16cc59/go.mod h1:MWlu30kVJrUS8lot6TQqcg7mtthZ9T0EoIBFiJcmcyw= -github.com/jackc/pgtype v1.2.0/go.mod h1:5m2OfMh1wTK7x+Fk952IDmI4nw3nPrvtQdM0ZT4WpC0= -github.com/jackc/pgtype v1.3.1-0.20200510190516-8cd94a14c75a/go.mod h1:vaogEUkALtxZMCH411K+tKzNpwzCKU+AnPzBKZ+I+Po= -github.com/jackc/pgtype v1.3.1-0.20200606141011-f6355165a91c/go.mod h1:cvk9Bgu/VzJ9/lxTO5R5sf80p0DiucVtN7ZxvaC4GmQ= -github.com/jackc/pgtype v1.7.0/go.mod h1:ZnHF+rMePVqDKaOfJVI4Q8IVvAQMryDlDkZnKOI75BE= -github.com/jackc/pgtype v1.8.0/go.mod h1:PqDKcEBtllAtk/2p6z6SHdXW5UB+MhE75tUol2OKexE= -github.com/jackc/pgx/v4 v4.0.0-20190420224344-cc3461e65d96/go.mod h1:mdxmSJJuR08CZQyj1PVQBHy9XOp5p8/SHH6a0psbY9Y= -github.com/jackc/pgx/v4 v4.0.0-20190421002000-1b8f0016e912/go.mod h1:no/Y67Jkk/9WuGR0JG/JseM9irFbnEPbuWV2EELPNuM= -github.com/jackc/pgx/v4 v4.0.0-pre1.0.20190824185557-6972a5742186/go.mod h1:X+GQnOEnf1dqHGpw7JmHqHc1NxDoalibchSk9/RWuDc= -github.com/jackc/pgx/v4 v4.5.0/go.mod h1:EpAKPLdnTorwmPUUsqrPxy5fphV18j9q3wrfRXgo+kA= -github.com/jackc/pgx/v4 v4.6.1-0.20200510190926-94ba730bb1e9/go.mod h1:t3/cdRQl6fOLDxqtlyhe9UWgfIi9R8+8v8GKV5TRA/o= -github.com/jackc/pgx/v4 v4.6.1-0.20200606145419-4e5062306904/go.mod h1:ZDaNWkt9sW1JMiNn0kdYBaLelIhw7Pg4qd+Vk6tw7Hg= -github.com/jackc/pgx/v4 v4.11.0/go.mod h1:i62xJgdrtVDsnL3U8ekyrQXEwGNTRoG7/8r+CIdYfcc= -github.com/jackc/pgx/v4 v4.12.0/go.mod h1:fE547h6VulLPA3kySjfnSG/e2D861g/50JlVUa/ub60= -github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= -github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= -github.com/jackc/puddle v1.1.0/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= -github.com/jackc/puddle v1.1.1/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= -github.com/jackc/puddle v1.1.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jasonlvhit/gocron v0.0.1 h1:qTt5qF3b3srDjeOIR4Le1LfeyvoYzJlYpqvG7tJX5YU= github.com/jasonlvhit/gocron v0.0.1/go.mod h1:k9a3TV8VcU73XZxfVHCHWMWF9SOqgoku0/QlY2yvlA4= github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869 h1:IPJ3dvxmJ4uczJe5YQdrYB16oTJlGSC/OyZDqUk9xX4= @@ -353,122 +106,68 @@ 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/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/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= +github.com/jonboulle/clockwork v0.4.0 h1:p4Cf1aMWXnXAUh8lVfewRBx1zaTSYKrKMF2g3ST4RZ4= +github.com/jonboulle/clockwork v0.4.0/go.mod h1:xgRqUGwRcjKCO1vbZUEtSLrqKoPSsUpK7fnezOII0kc= 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/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= 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/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= +github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk= -github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +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/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M= github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8= 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.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -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/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= +github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= github.com/lestrrat/go-envload v0.0.0-20180220120943-6ed08b54a570 h1:0iQektZGS248WXmGIYOwRXSQhD4qn3icjMpuxwO7qlo= github.com/lestrrat/go-envload v0.0.0-20180220120943-6ed08b54a570/go.mod h1:BLt8L9ld7wVsvEWQbuLrUZnCMnUmLZ+CGDzKtclrTlE= github.com/lestrrat/go-file-rotatelogs v0.0.0-20180223000712-d3151e2a480f h1:sgUSP4zdTUZYZgAGGtN5Lxk92rK+JUFOwf+FT99EEI4= github.com/lestrrat/go-file-rotatelogs v0.0.0-20180223000712-d3151e2a480f/go.mod h1:UGmTpUd3rjbtfIpwAPrcfmGf/Z1HS95TATB+m57TPB8= github.com/lestrrat/go-strftime v0.0.0-20180220042222-ba3bf9c1d042 h1:Bvq8AziQ5jFF4BHGAEDSqwPW1NJS3XshxbRCxtjFAZc= github.com/lestrrat/go-strftime v0.0.0-20180220042222-ba3bf9c1d042/go.mod h1:TPpsiPUEh0zFL1Snz4crhMlBe60PYxRHr5oFF3rRYg0= -github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.1.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.3.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= -github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= -github.com/linxGnu/gosmpp v0.2.0 h1:GVZdnO8pUsOrhFF092RQ2II+6RW5F2kLDlbCH+NBp7s= -github.com/linxGnu/gosmpp v0.2.0/go.mod h1:UpJwpDhL0yq05gUqaLwZ8+Qc7qy1pl35EjxWtRLW6ks= -github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4= -github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= -github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= +github.com/linxGnu/gosmpp v0.3.0 h1:LL+eY+zc9Ei/YY0po9A6L6SHf8nPyGvqsLddttr/y/4= +github.com/linxGnu/gosmpp v0.3.0/go.mod h1:Ba6SULQql3IbF2A5Mtj3DqMKoFbx1pEz/8xyiOh8ZOs= +github.com/lufia/plan9stats v0.0.0-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/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= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= -github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= -github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= -github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-sqlite3 v1.14.9/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= -github.com/mattn/go-sqlite3 v1.14.15 h1:vfoHhTN1af61xCRSWzFIWzx2YskyMTwHLrExkBOjvxI= -github.com/mattn/go-sqlite3 v1.14.15/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +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.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y= +github.com/mattn/go-sqlite3 v1.14.16/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= 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/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= -github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= -github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= -github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= 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= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= 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.5 h1:Qeilr7Ta6eDtG4S+tQuZ5+hO+QHbiGAJdi4PfoagaA0= -github.com/mojocn/base64Captcha v1.3.5/go.mod h1:/tTTXn4WTpX9CfrmipqRytCpJ27Uw3G6I7NcP2WwcmY= -github.com/mssola/user_agent v0.6.0 h1:uwPR4rtWlCHRFyyP9u2KOV0u8iQXmS7Z7feTrstQwk4= -github.com/mssola/user_agent v0.6.0/go.mod h1:TTPno8LPY3wAIEKRpAtkdMT0f8SE24pLRGPahjCH4uw= -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= -github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= -github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= -github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= -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/mojocn/base64Captcha v1.3.6 h1:gZEKu1nsKpttuIAQgWHO+4Mhhls8cAKyiV2Ew03H+Tw= +github.com/mojocn/base64Captcha v1.3.6/go.mod h1:i5CtHvm+oMbj1UzEPXaA8IH/xHFZ3DGY3Wh3dBpZ28E= +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/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= -github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= -github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= -github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= @@ -481,66 +180,33 @@ github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7J 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/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= -github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= -github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= -github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= -github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= -github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= -github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= -github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= -github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +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/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= -github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ= -github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4= -github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= -github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= -github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +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/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= -github.com/pkg/sftp v1.13.1 h1:I2qBYMChEhIjOgazfJmV3/mZM256btk6wkCDRmW7JYs= -github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pkg/sftp v1.13.6 h1:JFZT4XbOU7l77xGSpOdW+pwIMqP044IyjXX6FGyEKFo= +github.com/pkg/sftp v1.13.6/go.mod h1:tz1ryNURKu77RL+GuCzmoJYxQczL3wLNNpPWagdg4Qk= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw= -github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= -github.com/prometheus-community/pro-bing v0.4.0 h1:YMbv+i08gQz97OZZBwLyvmmQEEzyfyrrjEaAchdy3R4= -github.com/prometheus-community/pro-bing v0.4.0/go.mod h1:b7wRYZtCcPmt4Sz319BykUU241rWLe1VFXyiyWK/dH4= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= -github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= -github.com/prometheus/client_golang v1.19.1 h1:wZWJDwK+NameRJuPGDhlnFgx8e8HN3XHQeLaYJFJBOE= -github.com/prometheus/client_golang v1.19.1/go.mod h1:mP78NwGzrVks5S2H6ab8+ZZGJLZUq1hoULYBAYBw1Ho= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw= -github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI= -github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= -github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE= -github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= -github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= -github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= -github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -github.com/redis/go-redis/v9 v9.1.0 h1:137FnGdk+EQdCbye1FW+qOEcY5S+SpY9T0NiuqvtfMY= -github.com/redis/go-redis/v9 v9.1.0/go.mod h1:urWj3He21Dj5k4TK1y59xH8Uj6ATueP8AH1cY3lZl4c= +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-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.4.1 h1:aMaJwyifHZO0y+h8+icUz0xbToHbia0wdmzdVZ+Kl3w= +github.com/prometheus-community/pro-bing v0.4.1/go.mod h1:aLsw+zqCaDoa2RLVVSX3+UiCkBBXTMtZC3c7EkfWnAE= +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/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.6.1 h1:HHDteefn6ZkTtY5fGUE8tj8uy85AHk6zP7CpzIAM0y4= +github.com/redis/go-redis/v9 v9.6.1/go.mod h1:0C0c6ycQsdpVNQpxb1njEQIqkx5UcsM8FJCQLgE9+RA= github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 h1:OdAsTTz6OkFY5QxjkYwrChwuRruF69c169dPK26NUlk= github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/richardlehane/mscfb v1.0.4 h1:WULscsljNPConisD5hR0+OyZjwK46Pfyr6mPu5ZawpM= @@ -550,541 +216,211 @@ github.com/richardlehane/msoleps v1.0.3 h1:aznSZzrwYRl3rLKRT3gUk9am7T/mLNSnJINvN github.com/richardlehane/msoleps v1.0.3/go.mod h1:BWev5JBpU9Ko2WAgmZEuiz4/u3ZYTKbjLycmwiWUfWg= github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= -github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= -github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= -github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= -github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc= -github.com/russross/blackfriday/v2 v2.0.1/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= -github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI= -github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= -github.com/shirou/gopsutil/v3 v3.23.7 h1:C+fHO8hfIppoJ1WdsVm1RoI0RwXoNdfTK7yWXV0wVj4= -github.com/shirou/gopsutil/v3 v3.23.7/go.mod h1:c4gnmoRC0hQuaLqvxnx1//VXQ0Ms/X9UnJF8pddY5z4= +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/v4 v4.24.7 h1:V9UGTK4gQ8HvcnPKf6Zt3XHyQq/peaekfxpJ2HSocJk= +github.com/shirou/gopsutil/v4 v4.24.7/go.mod h1:0uW/073rP7FYLOkvxolUQM5rMOLTNmRXnFKafpb71rw= 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/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= -github.com/shopspring/decimal v0.0.0-20200227202807-02e2044944cc/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= -github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= -github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= -github.com/spf13/afero v1.9.5 h1:stMpOSZFs//0Lv29HduCmli3GUfpFoF3Y1Q/aXj/wVM= -github.com/spf13/afero v1.9.5/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= -github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= -github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48= -github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= -github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= -github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +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.16.0 h1:rGGH0XDZhdUOryiDWjmIvUSWpbNqisK8Wk0Vyefw8hc= -github.com/spf13/viper v1.16.0/go.mod h1:yg78JgCJcbrQOvV9YLXgkLaZqUidkY9K+Dd1FofRzQg= -github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= -github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= -github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= +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/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.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= 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/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= +github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE= github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= github.com/tebeka/strftime v0.1.5 h1:1NQKN1NiQgkqd/2moD6ySP/5CoZQsKa1d3ZhJ44Jpmg= github.com/tebeka/strftime v0.1.5/go.mod h1:29/OidkoWHdEKZqzyDLUyC+LmgDgdHo4WAFCDT7D/Ig= -github.com/tklauser/go-sysconf v0.3.11 h1:89WgdJhk5SNwJfu+GKyYveZ4IaJ7xAkecBo+KdJV0CM= -github.com/tklauser/go-sysconf v0.3.11/go.mod h1:GqXfhXY3kiPa0nAXPDIQIWzJbMCB7AmcWpGR8lSZfqI= -github.com/tklauser/numcpus v0.6.0 h1:kebhY2Qt+3U6RNK7UqpYNA+tJ23IBEGKkB7JQBfDYms= -github.com/tklauser/numcpus v0.6.0/go.mod h1:FEZLMke0lhOUG6w2JadTzp0a+Nl8PF/GFkQ5UVIcaL4= -github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +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/numcpus v0.8.0 h1:Mx4Wwe/FjZLeQsK/6kt2EOepwwSl7SmJrK5bV/dXYgY= +github.com/tklauser/numcpus v0.8.0/go.mod h1:ZJZlAY+dmR4eut8epnzf0u/VwodKmryxR8txiloSqBE= 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.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU= -github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= -github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= -github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -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= -github.com/xuri/excelize/v2 v2.7.1/go.mod h1:qc0+2j4TvAUrBw36ATtcTeC1VCM0fFdAXZOmcF4nTpY= -github.com/xuri/nfp v0.0.0-20220409054826-5e722a1d9e22 h1:OAmKAfT06//esDdpi/DZ8Qsdt4+M5+ltca05dA5bG2M= -github.com/xuri/nfp v0.0.0-20220409054826-5e722a1d9e22/go.mod h1:WwHg+CVyzlv/TX9xqBFXEZAuxOPxn2k1GNHwG41IIUQ= -github.com/xuri/xgen v0.0.0-20230702070049-db840e1a4605 h1:urU5p/tQOOUd9B0c6O+6aBk7udJI5HcN4VYmX2tMTcI= -github.com/xuri/xgen v0.0.0-20230702070049-db840e1a4605/go.mod h1:tBkmlRf8JH62H5fAW+BPFj0LNZWRmKglWTLFfpXhhbg= -github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE= +github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= +github.com/xuri/efp v0.0.0-20240408161823-9ad904a10d6d h1:llb0neMWDQe87IzJLS4Ci7psK/lVsjIS2otl+1WyRyY= +github.com/xuri/efp v0.0.0-20240408161823-9ad904a10d6d/go.mod h1:ybY/Jr0T0GTCnYjKqmdwxyxn2BQf2RcQIIvex5QldPI= +github.com/xuri/excelize/v2 v2.8.1 h1:pZLMEwK8ep+CLIUWpWmvW8IWE/yxqG0I1xcN6cVMGuQ= +github.com/xuri/excelize/v2 v2.8.1/go.mod h1:oli1E4C3Pa5RXg1TBXn4ENCXDV5JUMlBluUhG7c+CEE= +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/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw= -github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= -github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= -github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0= -go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= -go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= -go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= -go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= -go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= -go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= -go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= -golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= -golang.org/x/arch v0.3.0 h1:02VY4/ZcO/gBOH6PUaoiptASxtXU10jazRCP865E97k= -golang.org/x/arch v0.3.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= +github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +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/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190411191339-88737f569e3a/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE= -golang.org/x/crypto v0.19.0 h1:ENy+Az/9Y1vSrlrvBSyna3PITt4tiZLf7sgCjZBX7Wo= +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/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= -golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= -golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= -golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190501045829-6d32002ffd75/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.5.0 h1:5JMiNunQeQw++mMOz48/ISeNu3Iweh/JaZU8ZLqHRrI= -golang.org/x/image v0.5.0/go.mod h1:FVC7BI/5Ym8R25iw5OLsgshdUBbT1h5jZTpA+mvAdZ4= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= -golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= -golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +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.26.0 h1:RrRspgV4mU+YwB4FYnuBoKsUapNIL5cohGAmSH3azsw= +golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54= +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/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= -golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +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.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0= +golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20211029224645-99673261e6eb/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= 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.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= -golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4= +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/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= -golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +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.28.0 h1:a9JDOJc5GMUJ0+UDqmLT86WiEy7iWyIhz8gz8E4e5hE= +golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/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= -golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= +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/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= +golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/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-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201126233918-771906719818/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210902050250-f475640dd07b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/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-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.17.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/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.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg= +golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +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.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= -golang.org/x/term v0.17.0 h1:mkTF7LCd6WGJNL3K1Ad7kwxNfYAW6a8a8QqtMblp/4U= +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/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +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.23.0 h1:F6D4vR+EHoL9/sWAWgAR1H2DcHr4PareCbAaCo1RpuU= +golang.org/x/term v0.23.0/go.mod h1:DgV24QBUrK6jhZXl+20l6UWznPlwAHm1Q1mGHtydmSk= 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= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6/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.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +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/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= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +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.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc= +golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= +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= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190425163242-31fd60d6bfdc/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190823170909-c4a336ef6a2f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -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/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/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.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24= +golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ= +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/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= -google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= -google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= -google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= -google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= -google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= -google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= -google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= -google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= -google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= -gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= +google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc h1:2gGKlE2+asNV9m7xrywl36YYNnBG5ZQ0r/BOOxqPpmk= gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/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= -gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= 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/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s= 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/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= 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/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -1093,135 +429,33 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C 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.1 h1:WUEH5VF9obL/lTtzjmML/5e6VfFR/788coz2uaVCAZw= -gorm.io/driver/mysql v1.5.1/go.mod h1:Jo3Xu7mMhCyj8dlrb3WoCaRd1FhsVh+yMXb1jUInf5o= -gorm.io/gorm v1.25.1/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k= -gorm.io/gorm v1.25.2 h1:gs1o6Vsa+oVKG/a9ElL3XgyGfghFfkKA2SInQaCyMho= -gorm.io/gorm v1.25.2/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k= -honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -lukechampine.com/uint128 v1.1.1 h1:pnxCASz787iMf+02ssImqk6OLt+Z5QHMoZyUXR4z6JU= -lukechampine.com/uint128 v1.1.1/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= -modernc.org/cc/v3 v3.33.6/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= -modernc.org/cc/v3 v3.33.9/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= -modernc.org/cc/v3 v3.33.11/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= -modernc.org/cc/v3 v3.34.0/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= -modernc.org/cc/v3 v3.35.0/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= -modernc.org/cc/v3 v3.35.4/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= -modernc.org/cc/v3 v3.35.5/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= -modernc.org/cc/v3 v3.35.7/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= -modernc.org/cc/v3 v3.35.8/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= -modernc.org/cc/v3 v3.35.10/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= -modernc.org/cc/v3 v3.35.15/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= -modernc.org/cc/v3 v3.35.16/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= -modernc.org/cc/v3 v3.35.17/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= -modernc.org/cc/v3 v3.35.18 h1:rMZhRcWrba0y3nVmdiQ7kxAgOOSq2m2f2VzjHLgEs6U= -modernc.org/cc/v3 v3.35.18/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= -modernc.org/ccgo/v3 v3.9.5/go.mod h1:umuo2EP2oDSBnD3ckjaVUXMrmeAw8C8OSICVa0iFf60= -modernc.org/ccgo/v3 v3.10.0/go.mod h1:c0yBmkRFi7uW4J7fwx/JiijwOjeAeR2NoSaRVFPmjMw= -modernc.org/ccgo/v3 v3.11.0/go.mod h1:dGNposbDp9TOZ/1KBxghxtUp/bzErD0/0QW4hhSaBMI= -modernc.org/ccgo/v3 v3.11.1/go.mod h1:lWHxfsn13L3f7hgGsGlU28D9eUOf6y3ZYHKoPaKU0ag= -modernc.org/ccgo/v3 v3.11.3/go.mod h1:0oHunRBMBiXOKdaglfMlRPBALQqsfrCKXgw9okQ3GEw= -modernc.org/ccgo/v3 v3.12.4/go.mod h1:Bk+m6m2tsooJchP/Yk5ji56cClmN6R1cqc9o/YtbgBQ= -modernc.org/ccgo/v3 v3.12.6/go.mod h1:0Ji3ruvpFPpz+yu+1m0wk68pdr/LENABhTrDkMDWH6c= -modernc.org/ccgo/v3 v3.12.8/go.mod h1:Hq9keM4ZfjCDuDXxaHptpv9N24JhgBZmUG5q60iLgUo= -modernc.org/ccgo/v3 v3.12.11/go.mod h1:0jVcmyDwDKDGWbcrzQ+xwJjbhZruHtouiBEvDfoIsdg= -modernc.org/ccgo/v3 v3.12.14/go.mod h1:GhTu1k0YCpJSuWwtRAEHAol5W7g1/RRfS4/9hc9vF5I= -modernc.org/ccgo/v3 v3.12.18/go.mod h1:jvg/xVdWWmZACSgOiAhpWpwHWylbJaSzayCqNOJKIhs= -modernc.org/ccgo/v3 v3.12.20/go.mod h1:aKEdssiu7gVgSy/jjMastnv/q6wWGRbszbheXgWRHc8= -modernc.org/ccgo/v3 v3.12.21/go.mod h1:ydgg2tEprnyMn159ZO/N4pLBqpL7NOkJ88GT5zNU2dE= -modernc.org/ccgo/v3 v3.12.22/go.mod h1:nyDVFMmMWhMsgQw+5JH6B6o4MnZ+UQNw1pp52XYFPRk= -modernc.org/ccgo/v3 v3.12.25/go.mod h1:UaLyWI26TwyIT4+ZFNjkyTbsPsY3plAEB6E7L/vZV3w= -modernc.org/ccgo/v3 v3.12.29/go.mod h1:FXVjG7YLf9FetsS2OOYcwNhcdOLGt8S9bQ48+OP75cE= -modernc.org/ccgo/v3 v3.12.36/go.mod h1:uP3/Fiezp/Ga8onfvMLpREq+KUjUmYMxXPO8tETHtA8= -modernc.org/ccgo/v3 v3.12.38/go.mod h1:93O0G7baRST1vNj4wnZ49b1kLxt0xCW5Hsa2qRaZPqc= -modernc.org/ccgo/v3 v3.12.43/go.mod h1:k+DqGXd3o7W+inNujK15S5ZYuPoWYLpF5PYougCmthU= -modernc.org/ccgo/v3 v3.12.46/go.mod h1:UZe6EvMSqOxaJ4sznY7b23/k13R8XNlyWsO5bAmSgOE= -modernc.org/ccgo/v3 v3.12.47/go.mod h1:m8d6p0zNps187fhBwzY/ii6gxfjob1VxWb919Nk1HUk= -modernc.org/ccgo/v3 v3.12.50/go.mod h1:bu9YIwtg+HXQxBhsRDE+cJjQRuINuT9PUK4orOco/JI= -modernc.org/ccgo/v3 v3.12.51/go.mod h1:gaIIlx4YpmGO2bLye04/yeblmvWEmE4BBBls4aJXFiE= -modernc.org/ccgo/v3 v3.12.53/go.mod h1:8xWGGTFkdFEWBEsUmi+DBjwu/WLy3SSOrqEmKUjMeEg= -modernc.org/ccgo/v3 v3.12.54/go.mod h1:yANKFTm9llTFVX1FqNKHE0aMcQb1fuPJx6p8AcUx+74= -modernc.org/ccgo/v3 v3.12.55/go.mod h1:rsXiIyJi9psOwiBkplOaHye5L4MOOaCjHg1Fxkj7IeU= -modernc.org/ccgo/v3 v3.12.56/go.mod h1:ljeFks3faDseCkr60JMpeDb2GSO3TKAmrzm7q9YOcMU= -modernc.org/ccgo/v3 v3.12.57/go.mod h1:hNSF4DNVgBl8wYHpMvPqQWDQx8luqxDnNGCMM4NFNMc= -modernc.org/ccgo/v3 v3.12.60/go.mod h1:k/Nn0zdO1xHVWjPYVshDeWKqbRWIfif5dtsIOCUVMqM= -modernc.org/ccgo/v3 v3.12.65/go.mod h1:D6hQtKxPNZiY6wDBtehSGKFKmyXn53F8nGTpH+POmS4= -modernc.org/ccgo/v3 v3.12.66/go.mod h1:jUuxlCFZTUZLMV08s7B1ekHX5+LIAurKTTaugUr/EhQ= -modernc.org/ccgo/v3 v3.12.67/go.mod h1:Bll3KwKvGROizP2Xj17GEGOTrlvB1XcVaBrC90ORO84= -modernc.org/ccgo/v3 v3.12.73/go.mod h1:hngkB+nUUqzOf3iqsM48Gf1FZhY599qzVg1iX+BT3cQ= -modernc.org/ccgo/v3 v3.12.81/go.mod h1:p2A1duHoBBg1mFtYvnhAnQyI6vL0uw5PGYLSIgF6rYY= -modernc.org/ccgo/v3 v3.12.82 h1:wudcnJyjLj1aQQCXF3IM9Gz2X6UNjw+afIghzdtn0v8= -modernc.org/ccgo/v3 v3.12.82/go.mod h1:ApbflUfa5BKadjHynCficldU1ghjen84tuM5jRynB7w= -modernc.org/ccorpus v1.11.1/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ= -modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM= -modernc.org/libc v1.9.8/go.mod h1:U1eq8YWr/Kc1RWCMFUWEdkTg8OTcfLw2kY8EDwl039w= -modernc.org/libc v1.9.11/go.mod h1:NyF3tsA5ArIjJ83XB0JlqhjTabTCHm9aX4XMPHyQn0Q= -modernc.org/libc v1.11.0/go.mod h1:2lOfPmj7cz+g1MrPNmX65QCzVxgNq2C5o0jdLY2gAYg= -modernc.org/libc v1.11.2/go.mod h1:ioIyrl3ETkugDO3SGZ+6EOKvlP3zSOycUETe4XM4n8M= -modernc.org/libc v1.11.5/go.mod h1:k3HDCP95A6U111Q5TmG3nAyUcp3kR5YFZTeDS9v8vSU= -modernc.org/libc v1.11.6/go.mod h1:ddqmzR6p5i4jIGK1d/EiSw97LBcE3dK24QEwCFvgNgE= -modernc.org/libc v1.11.11/go.mod h1:lXEp9QOOk4qAYOtL3BmMve99S5Owz7Qyowzvg6LiZso= -modernc.org/libc v1.11.13/go.mod h1:ZYawJWlXIzXy2Pzghaf7YfM8OKacP3eZQI81PDLFdY8= -modernc.org/libc v1.11.16/go.mod h1:+DJquzYi+DMRUtWI1YNxrlQO6TcA5+dRRiq8HWBWRC8= -modernc.org/libc v1.11.19/go.mod h1:e0dgEame6mkydy19KKaVPBeEnyJB4LGNb0bBH1EtQ3I= -modernc.org/libc v1.11.24/go.mod h1:FOSzE0UwookyT1TtCJrRkvsOrX2k38HoInhw+cSCUGk= -modernc.org/libc v1.11.26/go.mod h1:SFjnYi9OSd2W7f4ct622o/PAYqk7KHv6GS8NZULIjKY= -modernc.org/libc v1.11.27/go.mod h1:zmWm6kcFXt/jpzeCgfvUNswM0qke8qVwxqZrnddlDiE= -modernc.org/libc v1.11.28/go.mod h1:Ii4V0fTFcbq3qrv3CNn+OGHAvzqMBvC7dBNyC4vHZlg= -modernc.org/libc v1.11.31/go.mod h1:FpBncUkEAtopRNJj8aRo29qUiyx5AvAlAxzlx9GNaVM= -modernc.org/libc v1.11.34/go.mod h1:+Tzc4hnb1iaX/SKAutJmfzES6awxfU1BPvrrJO0pYLg= -modernc.org/libc v1.11.37/go.mod h1:dCQebOwoO1046yTrfUE5nX1f3YpGZQKNcITUYWlrAWo= -modernc.org/libc v1.11.39/go.mod h1:mV8lJMo2S5A31uD0k1cMu7vrJbSA3J3waQJxpV4iqx8= -modernc.org/libc v1.11.42/go.mod h1:yzrLDU+sSjLE+D4bIhS7q1L5UwXDOw99PLSX0BlZvSQ= -modernc.org/libc v1.11.44/go.mod h1:KFq33jsma7F5WXiYelU8quMJasCCTnHK0mkri4yPHgA= -modernc.org/libc v1.11.45/go.mod h1:Y192orvfVQQYFzCNsn+Xt0Hxt4DiO4USpLNXBlXg/tM= -modernc.org/libc v1.11.47/go.mod h1:tPkE4PzCTW27E6AIKIR5IwHAQKCAtudEIeAV1/SiyBg= -modernc.org/libc v1.11.49/go.mod h1:9JrJuK5WTtoTWIFQ7QjX2Mb/bagYdZdscI3xrvHbXjE= -modernc.org/libc v1.11.51/go.mod h1:R9I8u9TS+meaWLdbfQhq2kFknTW0O3aw3kEMqDDxMaM= -modernc.org/libc v1.11.53/go.mod h1:5ip5vWYPAoMulkQ5XlSJTy12Sz5U6blOQiYasilVPsU= -modernc.org/libc v1.11.54/go.mod h1:S/FVnskbzVUrjfBqlGFIPA5m7UwB3n9fojHhCNfSsnw= -modernc.org/libc v1.11.55/go.mod h1:j2A5YBRm6HjNkoSs/fzZrSxCuwWqcMYTDPLNx0URn3M= -modernc.org/libc v1.11.56/go.mod h1:pakHkg5JdMLt2OgRadpPOTnyRXm/uzu+Yyg/LSLdi18= -modernc.org/libc v1.11.58/go.mod h1:ns94Rxv0OWyoQrDqMFfWwka2BcaF6/61CqJRK9LP7S8= -modernc.org/libc v1.11.70/go.mod h1:DUOmMYe+IvKi9n6Mycyx3DbjfzSKrdr/0Vgt3j7P5gw= -modernc.org/libc v1.11.71/go.mod h1:DUOmMYe+IvKi9n6Mycyx3DbjfzSKrdr/0Vgt3j7P5gw= -modernc.org/libc v1.11.75/go.mod h1:dGRVugT6edz361wmD9gk6ax1AbDSe0x5vji0dGJiPT0= -modernc.org/libc v1.11.82/go.mod h1:NF+Ek1BOl2jeC7lw3a7Jj5PWyHPwWD4aq3wVKxqV1fI= -modernc.org/libc v1.11.86/go.mod h1:ePuYgoQLmvxdNT06RpGnaDKJmDNEkV7ZPKI2jnsvZoE= -modernc.org/libc v1.11.87 h1:PzIzOqtlzMDDcCzJ5cUP6h/Ku6Fa9iyflP2ccTY64aE= -modernc.org/libc v1.11.87/go.mod h1:Qvd5iXTeLhI5PS0XSyqMY99282y+3euapQFxM7jYnpY= -modernc.org/mathutil v1.1.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= -modernc.org/mathutil v1.2.2/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= -modernc.org/mathutil v1.4.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= -modernc.org/mathutil v1.4.1 h1:ij3fYGe8zBF4Vu+g0oT7mB06r8sqGWKuJu1yXeR4by8= -modernc.org/mathutil v1.4.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= -modernc.org/memory v1.0.4/go.mod h1:nV2OApxradM3/OVbs2/0OsP6nPfakXpi50C7dcoHXlc= -modernc.org/memory v1.0.5 h1:XRch8trV7GgvTec2i7jc33YlUI0RKVDBvZ5eZ5m8y14= -modernc.org/memory v1.0.5/go.mod h1:B7OYswTRnfGg+4tDH1t1OeUNnsy2viGTdME4tzd+IjM= -modernc.org/opt v0.1.1 h1:/0RX92k9vwVeDXj+Xn23DKp2VJubL7k8qNffND6qn3A= -modernc.org/opt v0.1.1/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= -modernc.org/sqlite v1.14.2 h1:ohsW2+e+Qe2To1W6GNezzKGwjXwSax6R+CrhRxVaFbE= -modernc.org/sqlite v1.14.2/go.mod h1:yqfn85u8wVOE6ub5UT8VI9JjhrwBUUCNyTACN0h6Sx8= -modernc.org/strutil v1.1.1 h1:xv+J1BXY3Opl2ALrBwyfEikFAj8pmqcpnfmuwUwcozs= -modernc.org/strutil v1.1.1/go.mod h1:DE+MQQ/hjKBZS2zNInV5hhcipt5rLPWkmpbGeW5mmdw= -modernc.org/tcl v1.8.13/go.mod h1:V+q/Ef0IJaNUSECieLU4o+8IScapxnMyFV6i/7uQlAY= -modernc.org/token v1.0.0 h1:a0jaWiNMDhDUtqOj09wvjWWAqd3q7WpBulmL9H2egsk= -modernc.org/token v1.0.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= -modernc.org/z v1.2.19/go.mod h1:+ZpP0pc4zz97eukOzW3xagV/lS82IpPN9NGG5pNF9vY= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -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= -sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= -xorm.io/builder v0.3.11-0.20220531020008-1bd24a7dc978 h1:bvLlAPW1ZMTWA32LuZMBEGHAUOcATZjzHcotf3SWweM= -xorm.io/builder v0.3.11-0.20220531020008-1bd24a7dc978/go.mod h1:aUW0S9eb9VCaPohFCH3j7czOx1PMW3i1HrSzbLYGBSE= -xorm.io/xorm v1.3.2 h1:uTRRKF2jYzbZ5nsofXVUx6ncMaek+SHjWYtCXyZo1oM= -xorm.io/xorm v1.3.2/go.mod h1:9NbjqdnjX6eyjRRhh01GHm64r6N9shTb/8Ak3YRt8Nw= +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.2 h1:4U7v51GyhlWqQmwCHj28Rdq2Yzwk55ovjFrdPjs8Hb0= +modernc.org/libc v1.22.2/go.mod h1:uvQavJ1pZ0hIoC/jfqNoMLURIMhKzINIWypNM17puug= +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.4.0 h1:crykUfNSnMAXaOJnnxcSzbUGMqkLWjklJKkBK2nwZwk= +modernc.org/memory v1.4.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.20.4 h1:J8+m2trkN+KKoE7jglyHYYYiaq5xmz2HoHJIiBlRzbE= +modernc.org/sqlite v1.20.4/go.mod h1:zKcGyrICaxNTMEHSr1HQ2GUraP0j+845GYw37+EyT6A= +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= +nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50= +xorm.io/builder v0.3.13 h1:a3jmiVVL19psGeXx8GIurTp7p0IIgqeDmwhcR6BAOAo= +xorm.io/builder v0.3.13/go.mod h1:aUW0S9eb9VCaPohFCH3j7czOx1PMW3i1HrSzbLYGBSE= +xorm.io/xorm v1.3.9 h1:TUovzS0ko+IQ1XnNLfs5dqK1cJl1H5uHpWbWqAQ04nU= +xorm.io/xorm v1.3.9/go.mod h1:LsCCffeeYp63ssk0pKumP6l96WZcHix7ChpurcLNuMw= From b001f0ae3100ab06cb62acde682405da81e25b64 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 16 Aug 2024 10:28:26 +0800 Subject: [PATCH 23/24] =?UTF-8?q?del:=20=E6=97=A7=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=A4=84=E7=90=86=E5=B7=A5=E5=85=B7=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/file/file.go | 161 ----------------------------------------------- 1 file changed, 161 deletions(-) delete mode 100644 lib/file/file.go diff --git a/lib/file/file.go b/lib/file/file.go deleted file mode 100644 index a03e354c..00000000 --- a/lib/file/file.go +++ /dev/null @@ -1,161 +0,0 @@ -package file - -import ( - "fmt" - "net/http" - "os" -) - -// const ( -// //经过测试,linux下,延时需要大于100ms -// TIME_DELAY_AFTER_WRITE = 200 -// ) - -// type Response struct { -// Data []string `json:"data"` -// } - -// type MMLRequest struct { -// MML []string `json:"mml"` -// } - -// func GetFile(w http.ResponseWriter, r *http.Request) { -// log.Debug("PostMMLToNF processing... ") - -// vars := mux.Vars(r) -// neType := vars["elementTypeValue"] -// params := r.URL.Query() -// neId := params["ne_id"] -// log.Debug("neType:", neType, "neId", neId) - -// neInfo := new(dborm.NeInfo) -// var err error -// if len(neId) == 0 { -// log.Error("ne_id NOT FOUND") -// services.ResponseBadRequest400WrongParamValue(w) -// return -// } -// neInfo, err = dborm.XormGetNeInfo(neType, neId[0]) -// if err != nil { -// log.Error("dborm.XormGetNeInfo is failed:", err) -// services.ResponseInternalServerError500DatabaseOperationFailed(w) -// return -// } - -// var buf [8192]byte -// var n int -// var mmlResult []string - -// if neInfo != nil { -// hostMML := fmt.Sprintf("%s:%d", neInfo.Ip, config.GetYamlConfig().MML.Port) -// conn, err := net.Dial("tcp", hostMML) -// if err != nil { -// errMsg := fmt.Sprintf("Failed to dial %s: %v", hostMML, err) -// log.Error(errMsg) -// mmlResult = append(mmlResult, errMsg) -// response := Response{mmlResult} -// services.ResponseWithJson(w, http.StatusOK, response) -// return -// } - -// loginStr := fmt.Sprintf("%s\n%s\n", config.GetYamlConfig().MML.User, config.GetYamlConfig().MML.Password) -// n, err = conn.Write([]byte(loginStr)) -// if err != nil { -// log.Errorf("Error: %s", err.Error()) -// return -// } - -// time.Sleep(time.Millisecond * TIME_DELAY_AFTER_WRITE) - -// n, err = conn.Read(buf[0:]) -// if err != nil { -// log.Errorf("Error: %s", err.Error()) -// return -// } -// log.Debug(string(buf[0:n])) - -// body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen)) -// if err != nil { -// log.Error("io.ReadAll is failed:", err) -// services.ResponseNotFound404UriNotExist(w, r) -// return -// } -// log.Debug("Body:", string(body)) - -// mmlRequest := new(MMLRequest) -// _ = json.Unmarshal(body, mmlRequest) - -// for _, mml := range mmlRequest.MML { -// mmlCommand := fmt.Sprintf("%s\n", mml) -// log.Debug("mml command:", mmlCommand) -// n, err = conn.Write([]byte(mmlCommand)) -// if err != nil { -// log.Errorf("Error: %s", err.Error()) -// return -// } -// time.Sleep(time.Millisecond * TIME_DELAY_AFTER_WRITE) - -// n, err = conn.Read(buf[0:]) -// if err != nil { -// log.Errorf("Error: %s", err.Error()) -// return -// } -// log.Debug(string(buf[0 : n-len(neType)-2])) -// mmlResult = append(mmlResult, string(buf[0:n-len(neType)-2])) -// } -// } - -// response := Response{mmlResult} -// services.ResponseWithJson(w, http.StatusOK, response) -// } - -// 格式文件大小单位 -func FormatFileSize(fileSize float64) (size string) { - if fileSize < 1024 { - return fmt.Sprintf("%.2fB", fileSize/float64(1)) - } else if fileSize < (1024 * 1024) { - return fmt.Sprintf("%.2fKB", fileSize/float64(1024)) - } else if fileSize < (1024 * 1024 * 1024) { - return fmt.Sprintf("%.2fMB", fileSize/float64(1024*1024)) - } else if fileSize < (1024 * 1024 * 1024 * 1024) { - return fmt.Sprintf("%.2fGB", fileSize/float64(1024*1024*1024)) - } else if fileSize < (1024 * 1024 * 1024 * 1024 * 1024) { - return fmt.Sprintf("%.2fTB", fileSize/float64(1024*1024*1024*1024)) - } else { - return fmt.Sprintf("%.2fEB", fileSize/float64(1024*1024*1024*1024*1024)) - } -} - -func IsSymlink(mode os.FileMode) bool { - return mode&os.ModeSymlink != 0 -} - -const dotCharacter = 46 - -func IsHidden(path string) bool { - return path[0] == dotCharacter -} - -func GetMimeType(path string) string { - file, err := os.Open(path) - if err != nil { - return "" - } - defer file.Close() - - buffer := make([]byte, 512) - _, err = file.Read(buffer) - if err != nil { - return "" - } - mimeType := http.DetectContentType(buffer) - return mimeType -} - -func GetSymlink(path string) string { - linkPath, err := os.Readlink(path) - if err != nil { - return "" - } - return linkPath -} From d0752d264c63e83e74f9f5e0389cd41001ce388e Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 16 Aug 2024 19:24:36 +0800 Subject: [PATCH 24/24] =?UTF-8?q?chore:=20=E6=9B=B4=E6=96=B0=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E5=8F=B7=202.2408.3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 6 ++++++ captrace/makefile | 2 +- crontask/makefile | 2 +- data2html/makefile | 2 +- makefile | 2 +- mkpkg.sh | 2 +- restagent/makefile | 2 +- src/framework/config/config/config.default.yaml | 2 +- sshsvc/makefile | 2 +- 9 files changed, 14 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b66526d9..5c18c7a1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # 版本发布日志 +## 2.2408.3-20240816 + +- 新增 中间件-接口加解密,配合前端CryptoJS加解密 +- 新增 KPI添加SMSC +- 更新 IMS参数配置可选属性 + ## 2.2408.2-20240809 - 新增 SMSC-CDR 功能接口 diff --git a/captrace/makefile b/captrace/makefile index 5f16a91f..465abec6 100644 --- a/captrace/makefile +++ b/captrace/makefile @@ -1,7 +1,7 @@ # Makefile for rest agent project PROJECT = OMC -VERSION = 2.2408.2 +VERSION = 2.2408.3 PLATFORM = amd64 ARMPLATFORM = aarch64 BUILDDIR = ../../build diff --git a/crontask/makefile b/crontask/makefile index bbd9ee01..5dc6c1ea 100644 --- a/crontask/makefile +++ b/crontask/makefile @@ -1,7 +1,7 @@ # Makefile for OMC-OMC-crontask project PROJECT = OMC -VERSION = 2.2408.2 +VERSION = 2.2408.3 LIBDIR = be.ems/lib BINNAME = crontask diff --git a/data2html/makefile b/data2html/makefile index faa47e31..c6d46802 100644 --- a/data2html/makefile +++ b/data2html/makefile @@ -1,7 +1,7 @@ # Makefile for rest agent project PROJECT = OMC -VERSION = 2.2408.2 +VERSION = 2.2408.3 RelDate = `date +%Y%m%d` Release = $(RelDate) RelVer = $(VERSION)-$(RelDate) diff --git a/makefile b/makefile index 9085764d..936cd59f 100644 --- a/makefile +++ b/makefile @@ -3,7 +3,7 @@ ProjectL = omc ProjectU = OMC PROJECT = $(ProjectL) -VERSION = 2.2408.2 +VERSION = 2.2408.3 RelDate = `date +%Y%m%d` Release = $(RelDate) RelVer = $(VERSION)-$(RelDate) diff --git a/mkpkg.sh b/mkpkg.sh index b8a43db3..37876362 100644 --- a/mkpkg.sh +++ b/mkpkg.sh @@ -2,7 +2,7 @@ ProcList="restagent crontask sshsvc captrace data2html" ProjectL=omc -VERSION=2.2408.2 +VERSION=2.2408.3 RelDate=`date +%Y%m%d` Release=${RelDate} RelVer=${VERSION}-${RelDate} diff --git a/restagent/makefile b/restagent/makefile index 95266785..668f1384 100644 --- a/restagent/makefile +++ b/restagent/makefile @@ -1,7 +1,7 @@ # Makefile for rest agent project PROJECT = OMC -VERSION = 2.2408.2 +VERSION = 2.2408.3 PLATFORM = amd64 ARMPLATFORM = aarch64 BUILDDIR = ../../build diff --git a/src/framework/config/config/config.default.yaml b/src/framework/config/config/config.default.yaml index 6ac5fc24..c082b4a3 100644 --- a/src/framework/config/config/config.default.yaml +++ b/src/framework/config/config/config.default.yaml @@ -1,7 +1,7 @@ # 项目信息 framework: name: "OMC" - version: "2.2408.2" + version: "2.2408.3" # 应用服务配置 server: diff --git a/sshsvc/makefile b/sshsvc/makefile index 5498fbcc..81efdcb6 100644 --- a/sshsvc/makefile +++ b/sshsvc/makefile @@ -1,7 +1,7 @@ # Makefile for OMC-OMC-crontask project PROJECT = OMC -VERSION = 2.2408.2 +VERSION = 2.2408.3 LIBDIR = be.ems/lib BINNAME = sshsvc