diff --git a/.gitignore b/.gitignore index 7206e228..e5a47a9b 100644 --- a/.gitignore +++ b/.gitignore @@ -11,29 +11,18 @@ .idea/ # Run temp file and dir -crontask/log/ -crontask/ftp/ -crontask/database/ -crontask/export/ -crontask/temp -crontask/crontask - restagent/backup/ restagent/log/ restagent/upload/ restagent/software/ restagent/database/ restagent/license/ -restagent/restagent sshsvc/sshsvc sshsvc/mmllog/ sshsvc/mmlhome/ sshsvc/log/ -captrace/captrace -captrace/log/ - tools/loadmconf/loadmconf tools/loadpconf/loadpconf @@ -47,5 +36,3 @@ vendor *.bak *.bak* *.exe -__debug_bin*.exe - diff --git a/go.mod b/go.mod index 9d223347..329afea0 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module be.ems -go 1.21 +go 1.22.0 require ( github.com/dlclark/regexp2 v1.11.4 @@ -13,7 +13,6 @@ require ( github.com/gorilla/mux v1.8.1 github.com/gorilla/websocket v1.5.3 github.com/gosnmp/gosnmp v1.38.0 - github.com/jasonlvhit/gocron v0.0.1 github.com/lestrrat/go-file-rotatelogs v0.0.0-20180223000712-d3151e2a480f github.com/linxGnu/gosmpp v0.3.0 github.com/matoous/go-nanoid/v2 v2.1.0 @@ -22,19 +21,21 @@ require ( github.com/mssola/useragent v1.0.0 github.com/patrickmn/go-cache v2.1.0+incompatible github.com/pkg/sftp v1.13.6 - github.com/prometheus-community/pro-bing v0.4.1 - github.com/redis/go-redis/v9 v9.6.1 + github.com/prometheus-community/pro-bing v0.5.0 + github.com/redis/go-redis/v9 v9.7.0 github.com/robfig/cron/v3 v3.0.1 - github.com/shirou/gopsutil/v4 v4.24.7 + github.com/shirou/gopsutil/v4 v4.24.12 github.com/slayercat/GoSNMPServer v0.5.2 github.com/spf13/pflag v1.0.5 github.com/spf13/viper v1.19.0 - github.com/xuri/excelize/v2 v2.8.1 + github.com/swaggo/files v1.0.1 + github.com/swaggo/gin-swagger v1.6.0 + github.com/xuri/excelize/v2 v2.9.0 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 + golang.org/x/crypto v0.31.0 + golang.org/x/net v0.33.0 + golang.org/x/term v0.28.0 + golang.org/x/text v0.21.0 gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df gopkg.in/yaml.v3 v3.0.1 gorm.io/driver/mysql v1.5.7 @@ -43,7 +44,9 @@ require ( ) require ( + github.com/ebitengine/purego v0.8.1 // indirect filippo.io/edwards25519 v1.1.0 // indirect + github.com/KyleBanks/depth v1.2.1 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bytedance/sonic v1.12.1 // indirect github.com/bytedance/sonic/loader v0.2.0 // indirect @@ -58,6 +61,10 @@ require ( 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.3.0 // indirect + github.com/go-openapi/jsonpointer v0.21.0 // indirect + github.com/go-openapi/jsonreference v0.21.0 // indirect + github.com/go-openapi/spec v0.21.0 // indirect + github.com/go-openapi/swag v0.23.0 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect github.com/go-playground/validator/v10 v10.22.0 // indirect @@ -70,6 +77,7 @@ require ( 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/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/klauspost/compress v1.17.9 // indirect github.com/klauspost/cpuid/v2 v2.2.8 // indirect @@ -80,6 +88,7 @@ require ( github.com/lestrrat/go-strftime v0.0.0-20180220042222-ba3bf9c1d042 // indirect github.com/lufia/plan9stats v0.0.0-20240513124658-fba389f38bae // indirect github.com/magiconair/properties v1.8.7 // indirect + github.com/mailru/easyjson v0.9.0 // 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 @@ -98,7 +107,7 @@ require ( 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/richardlehane/msoleps v1.0.4 // indirect github.com/sagikazarmark/locafero v0.6.0 // indirect github.com/sagikazarmark/slog-shim v0.1.0 // indirect github.com/shirou/gopsutil/v3 v3.23.11 // indirect @@ -108,6 +117,7 @@ require ( 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/swaggo/swag v1.16.4 github.com/syndtr/goleveldb v1.0.0 // indirect github.com/tebeka/strftime v0.1.5 // indirect github.com/tklauser/go-sysconf v0.3.14 // indirect @@ -121,8 +131,9 @@ require ( 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/sync v0.10.0 // indirect + golang.org/x/sys v0.29.0 // indirect + golang.org/x/tools v0.28.0 // indirect golang.org/x/tools/cmd/guru v0.1.1-deprecated // indirect google.golang.org/protobuf v1.34.2 // indirect gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect diff --git a/go.sum b/go.sum index 714cab42..3b37f006 100644 --- a/go.sum +++ b/go.sum @@ -1,20 +1,10 @@ -cloud.google.com/go v0.112.1/go.mod h1:+Vbu+Y1UU+I1rjmzeMOb/8RfkKJK2Gyxi1X6jJCZLo4= -cloud.google.com/go/compute v1.24.0/go.mod h1:kw1/T+h/+tK2LJK0wiPPx1intgdAM3j/g3hFDlscY40= -cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= -cloud.google.com/go/firestore v1.15.0/go.mod h1:GWOxFXcv8GZUtYpWHw/w6IuYNux/BtmeVTMmjrm4yhk= -cloud.google.com/go/iam v1.1.5/go.mod h1:rB6P/Ic3mykPbFio+vo7403drjlgvoWfYpJhMXEbzv8= -cloud.google.com/go/longrunning v0.5.5/go.mod h1:WV2LAxD8/rg5Z1cNW6FJ/ZpX4E4VnDnoTk0yawPBB7s= -cloud.google.com/go/storage v1.35.1/go.mod h1:M6M/3V/D3KpzMTJyPOR/HU6n2Si5QdaXYEsng2xgOs8= filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= gitea.com/xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a h1:lSA0F4e9A2NcQSqGqTOXqu2aRi/XEQxDCBwM8yJtE6s= gitea.com/xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a/go.mod h1:EXuID2Zs0pAQhH8yz+DNjUbjppKQzKFAn28TMYPB6IU= -gitee.com/travelliu/dm v1.8.11192/go.mod h1:DHTzyhCrM843x9VdKVbZ+GKXGRbKM2sJ4LxihRxShkE= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/alecthomas/kingpin/v2 v2.4.0/go.mod h1:0gyi0zQnjuFk8xrkNKamJoyUo382HRL7ATRpFZCw6tE= -github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE= -github.com/allegro/bigcache/v3 v3.1.0/go.mod h1:aPyh7jEvrog9zAwx5N7+JUQX5dZTSGpxF1LAR4dr35I= -github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= +github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc= +github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs= @@ -34,8 +24,6 @@ github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/ github.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w= github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg= github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -47,10 +35,10 @@ github.com/dlclark/regexp2 v1.11.4 h1:rPYF9/LECdNymJufQKmri9gV604RvvABwgOA8un7yA 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/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE= +github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239 h1:Ghm4eQYC0nEPnSJdVkTrXpu9KtoVCSo1hg7mtI7G9KU= github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239/go.mod h1:Gdwt2ce0yfBxPvZrHkprdPPTTS3N5rwmLE8T22KBXlw= -github.com/fatih/color v1.14.1/go.mod h1:2oHN61fhTpgcxD3TSWCgKDiH1+x4OiDVVGH8WlgGZGg= -github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= @@ -59,19 +47,25 @@ github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nos 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/gzip v0.0.6 h1:NjcunTcGAj5CO1gn4N8jHOSIeRFHIbn51z6K+xaN4d4= +github.com/gin-contrib/gzip v0.0.6/go.mod h1:QOJlmV2xmayAjkNS2Y8NQsMneuRShOU/kjovCXNuzzk= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.10.0 h1:nTuyha1TYqgedzytsKYqna+DfLos46nTv2ygFy86HFU= github.com/gin-gonic/gin v1.10.0/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y= github.com/go-forks/fsnotify v1.4.7 h1:lyiU2Wqd4fNGCQDn9dZ4UxSiSFgeU1rM6yIfahk8haY= github.com/go-forks/fsnotify v1.4.7/go.mod h1:AU8mot+GznW5+B4jRJHxKg/2EeO+jMORGRkKSxs0biw= -github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= -github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= -github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= -github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= +github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ= +github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY= +github.com/go-openapi/jsonreference v0.21.0 h1:Rs+Y7hSXT83Jacb7kFyjn4ijOuVGSvOdF2+tg1TRrwQ= +github.com/go-openapi/jsonreference v0.21.0/go.mod h1:LmZmgsrTkVg9LG4EaHeY8cBDslNPMo06cago5JNLkm4= +github.com/go-openapi/spec v0.21.0 h1:LTVzPc3p/RzRnkQqLRndbAzjY0d0BCL72A6j3CdL9ZY= +github.com/go-openapi/spec v0.21.0/go.mod h1:78u6VdPw81XU44qEWGhtr982gJ5BWg2c0I5XwVMotYk= +github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE= +github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ= github.com/go-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= @@ -89,14 +83,10 @@ github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqw github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/goccy/go-json v0.10.3 h1:KZ5WoDbxAIgm2HNbYckL0se1fHD6rz5j4ywS6ebzDqA= github.com/goccy/go-json v0.10.3/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= -github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk= github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= -github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= -github.com/golang-sql/sqlexp v0.1.0/go.mod h1:J4ad9Vo8ZCWQ2GMrC4UCQy1JpCbwU9m3EOqtpKwwwHI= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= @@ -105,7 +95,6 @@ github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrU github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= @@ -118,12 +107,8 @@ github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gopacket v1.1.19/go.mod h1:iJ8V8n6KS+z2U1A8pUwu8bW5SyEMkXJB8Yo/Vo+TKTo= -github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= -github.com/googleapis/gax-go/v2 v2.12.3/go.mod h1:AKloxT6GtNbaLm8QTNSidHUVsHYcBHwWRvkNFJUQcS4= -github.com/googleapis/google-cloud-go-testing v0.0.0-20210719221736-1c9a4c676720/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gopacket/gopacket v1.2.0 h1:eXbzFad7f73P1n2EJHQlsKuvIMJjVXK5tXoSca78I3A= github.com/gopacket/gopacket v1.2.0/go.mod h1:BrAKEy5EOGQ76LSqh7DMAr7z0NNPdczWm2GxCG7+I8M= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= @@ -133,26 +118,9 @@ github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/ad github.com/gosnmp/gosnmp v1.36.2-0.20231009064202-d306ed5aa998/go.mod h1:O938QjIS4vpSag1UTcnnBq9MfNmimuOGtvQsT1NbErc= github.com/gosnmp/gosnmp v1.38.0 h1:I5ZOMR8kb0DXAFg/88ACurnuwGwYkXWq3eLpJPHMEYc= github.com/gosnmp/gosnmp v1.38.0/go.mod h1:FE+PEZvKrFz9afP9ii1W3cprXuVZ17ypCcyyfYuu5LY= -github.com/hashicorp/consul/api v1.28.2/go.mod h1:KyzqzgMEya+IZPcD65YFoOVAgPpbfERu4I/tzG6/ueE= -github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= -github.com/hashicorp/go-hclog v1.5.0/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= -github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= -github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= -github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hashicorp/serf v0.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfEvMqbG+4= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/jackc/chunkreader/v2 v2.0.1/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= -github.com/jackc/pgconn v1.14.0/go.mod h1:9mBNlny0UvkgJdCDvdVHYSjI+8tD2rnKK69Wz8ti++E= -github.com/jackc/pgio v1.0.0/go.mod h1:oP+2QK2wFfUWgr+gxjoBH9KGBb31Eio69xUb0w5bYf8= -github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= -github.com/jackc/pgproto3/v2 v2.3.2/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= -github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= -github.com/jackc/pgtype v1.14.0/go.mod h1:LUMuVrfsFfdKGLw+AFFVv6KtHOFMwRgDDzBt76IqCA4= -github.com/jackc/pgx/v4 v4.18.0/go.mod h1:FydWkUyadDmdNH/mHnGob881GawxeEm7TcMCzkb+qQE= github.com/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= @@ -163,10 +131,10 @@ github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= github.com/jonboulle/clockwork v0.4.0 h1:p4Cf1aMWXnXAUh8lVfewRBx1zaTSYKrKMF2g3ST4RZ4= github.com/jonboulle/clockwork v0.4.0/go.mod h1:xgRqUGwRcjKCO1vbZUEtSLrqKoPSsUpK7fnezOII0kc= -github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= +github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= +github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= -github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs= github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= @@ -193,7 +161,6 @@ github.com/lestrrat/go-file-rotatelogs v0.0.0-20180223000712-d3151e2a480f h1:sgU github.com/lestrrat/go-file-rotatelogs v0.0.0-20180223000712-d3151e2a480f/go.mod h1:UGmTpUd3rjbtfIpwAPrcfmGf/Z1HS95TATB+m57TPB8= github.com/lestrrat/go-strftime v0.0.0-20180220042222-ba3bf9c1d042 h1:Bvq8AziQ5jFF4BHGAEDSqwPW1NJS3XshxbRCxtjFAZc= github.com/lestrrat/go-strftime v0.0.0-20180220042222-ba3bf9c1d042/go.mod h1:TPpsiPUEh0zFL1Snz4crhMlBe60PYxRHr5oFF3rRYg0= -github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/linxGnu/gosmpp v0.3.0 h1:LL+eY+zc9Ei/YY0po9A6L6SHf8nPyGvqsLddttr/y/4= github.com/linxGnu/gosmpp v0.3.0/go.mod h1:Ba6SULQql3IbF2A5Mtj3DqMKoFbx1pEz/8xyiOh8ZOs= github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= @@ -201,9 +168,10 @@ github.com/lufia/plan9stats v0.0.0-20240513124658-fba389f38bae h1:dIZY4ULFcto4tA 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/mailru/easyjson v0.9.0 h1:PrnmzHw7262yW8sTBwxi1PdJA3Iw/EKBa8psRf7d9a4= +github.com/mailru/easyjson v0.9.0/go.mod h1:1+xMtQp2MRNVL/V1bOzuP3aP8VNwRW55fQUto+XFtTU= github.com/matoous/go-nanoid/v2 v2.1.0 h1:P64+dmq21hhWdtvZfEAofnvJULaRR1Yib0+PnU669bE= github.com/matoous/go-nanoid/v2 v2.1.0/go.mod h1:KlbGNQ+FhrUNIHUxZdL63t7tl4LaPkZNpUULS8H4uVM= -github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-sqlite3 v1.14.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y= @@ -212,8 +180,6 @@ github.com/metaleap/go-util v0.0.0-20180330192724-a09253046f73 h1:4vKVhAdype/dej github.com/metaleap/go-util v0.0.0-20180330192724-a09253046f73/go.mod h1:l71/5fppWP5A6nqhcxz6wQAYok6pr/vM2+KHIy50/LY= github.com/metaleap/go-xsd v0.0.0-20180330193350-61f7638f502f h1:eeJGcYszuvOpmuJxeq57LaOO8mJurfjpOHJJMfQSD0s= github.com/metaleap/go-xsd v0.0.0-20180330193350-61f7638f502f/go.mod h1:WK3zEKtwVd/v+NM3lh1ZE6MdDfHsdOFFOD5Ezi4Hutg= -github.com/microsoft/go-mssqldb v1.6.0/go.mod h1:00mDtPbeQCRGC1HwOOR5K/gr30P1NcEG0vx6Kbv2aJU= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -229,10 +195,6 @@ github.com/mssola/useragent v1.0.0 h1:WRlDpXyxHDNfvZaPEut5Biveq86Ze4o4EMffyMxmH5 github.com/mssola/useragent v1.0.0/go.mod h1:hz9Cqz4RXusgg1EdI4Al0INR62kP7aPSRNHnpU+b85Y= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/nats-io/nats.go v1.34.0/go.mod h1:Ubdu4Nh9exXdSz0RVWRFBbRfrbSxOYd26oF0wkWclB8= -github.com/nats-io/nkeys v0.4.7/go.mod h1:kqXRgRDPlGy7nGaEDMuYzmiJCIAAWDK0IMBtDmGD0nc= -github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= @@ -242,7 +204,6 @@ github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+ github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= -github.com/onsi/ginkgo/v2 v2.1.6/go.mod h1:MEH45j8TBi6u9BMogfbp0stKC5cdGjumZj5Y7AG4VIk= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= @@ -265,8 +226,8 @@ github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 h1:o4JXh1EVt9k/+g42oCprj/FisM4qX9L3sZB3upGN2ZU= github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= -github.com/prometheus-community/pro-bing v0.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-community/pro-bing v0.5.0 h1:Fq+4BUXKIvsPtXUY8K+04ud9dkAuFozqGmRAyNUpffY= +github.com/prometheus-community/pro-bing v0.5.0/go.mod h1:1joR9oXdMEAcAJJvhs+8vNDvTg5thfAZcRFhcUozG2g= github.com/prometheus/client_golang v1.20.0 h1:jBzTZ7B099Rg24tny+qngoynol8LtVYlA2bqx3vEloI= github.com/prometheus/client_golang v1.20.0/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE= github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= @@ -276,34 +237,32 @@ github.com/prometheus/common v0.55.0/go.mod h1:2SECS4xJG1kd8XF9IcM1gMX6510RAEL65 github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= -github.com/redis/go-redis/v9 v9.6.1 h1:HHDteefn6ZkTtY5fGUE8tj8uy85AHk6zP7CpzIAM0y4= -github.com/redis/go-redis/v9 v9.6.1/go.mod h1:0C0c6ycQsdpVNQpxb1njEQIqkx5UcsM8FJCQLgE9+RA= +github.com/redis/go-redis/v9 v9.7.0 h1:HhLSs+B6O021gwzl+locl0zEDnyNkxMtf/Z3NNBMa9E= +github.com/redis/go-redis/v9 v9.7.0/go.mod h1:f6zhXITC7JUJIlPEiBOTXxJgPLdZcA93GewI7inzyWw= github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 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= github.com/richardlehane/mscfb v1.0.4/go.mod h1:YzVpcZg9czvAuhk9T+a3avCpcFPMUWm7gK3DypaEsUk= github.com/richardlehane/msoleps v1.0.1/go.mod h1:BWev5JBpU9Ko2WAgmZEuiz4/u3ZYTKbjLycmwiWUfWg= -github.com/richardlehane/msoleps v1.0.3 h1:aznSZzrwYRl3rLKRT3gUk9am7T/mLNSnJINvN0AQoVM= -github.com/richardlehane/msoleps v1.0.3/go.mod h1:BWev5JBpU9Ko2WAgmZEuiz4/u3ZYTKbjLycmwiWUfWg= +github.com/richardlehane/msoleps v1.0.4 h1:WuESlvhX3gH2IHcd8UqyCuFY5yiq/GR/yqaSM/9/g00= +github.com/richardlehane/msoleps v1.0.4/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/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/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= +github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/sagikazarmark/crypt v0.19.0/go.mod h1:c6vimRziqqERhtSe0MhIvzE1w54FrCHtrXb5NH/ja78= github.com/sagikazarmark/locafero v0.6.0 h1:ON7AQg37yzcRPU69mt7gwhFEBwxI6P9T4Qu3N51bwOk= github.com/sagikazarmark/locafero v0.6.0/go.mod h1:77OmuIc6VTraTXKXIs/uvUxKGUXjE1GbemJYHqdNjX0= github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= github.com/shirou/gopsutil/v3 v3.23.11 h1:i3jP9NjCPUz7FiZKxlMnODZkdSIp2gnzfrvsu9CuWEQ= github.com/shirou/gopsutil/v3 v3.23.11/go.mod h1:1FrWgea594Jp7qmjHUUPlJDTPgcsb9mGnXDxavtikzM= -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/shirou/gopsutil/v4 v4.24.12 h1:qvePBOk20e0IKA1QXrIIU+jmk+zEiYVVx06WjBRlZo4= +github.com/shirou/gopsutil/v4 v4.24.12/go.mod h1:DCtMPAad2XceTeIAbGyVfycbYQNBGk2P8cvDi7/VN9o= github.com/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 v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= @@ -333,10 +292,17 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= +github.com/swaggo/files v1.0.1 h1:J1bVJ4XHZNq0I46UU90611i9/YzdrF7x92oX1ig5IdE= +github.com/swaggo/files v1.0.1/go.mod h1:0qXmMNH6sXNf+73t65aKeB+ApmgxdnkQzVTAj2uaMUg= +github.com/swaggo/gin-swagger v1.6.0 h1:y8sxvQ3E20/RCyrXeFfg60r6H0Z+SwpTjMYsMm+zy8M= +github.com/swaggo/gin-swagger v1.6.0/go.mod h1:BG00cCEy294xtVpyIAHG6+e2Qzj/xKlRdOqDkvq0uzo= +github.com/swaggo/swag v1.16.4 h1:clWJtd9LStiG3VeijiCfOVODP6VpHtKdQy9ELFG3s1A= +github.com/swaggo/swag v1.16.4/go.mod h1:VBsHJRsDvfYvqoiMKnsdwhNV9LEMHgEDZcyVYX0sxPg= github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE= github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= github.com/tebeka/strftime v0.1.5 h1:1NQKN1NiQgkqd/2moD6ySP/5CoZQsKa1d3ZhJ44Jpmg= @@ -356,11 +322,10 @@ github.com/vishvananda/netlink v1.1.0 h1:1iyaYNBLmP6L0220aDnYQpo1QEV4t4hJ+xEEhhJ github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= github.com/vishvananda/netns v0.0.0-20211101163701-50045581ed74 h1:gga7acRE695APm9hlsSMoOoE65U4/TcqNj90mc69Rlg= github.com/vishvananda/netns v0.0.0-20211101163701-50045581ed74/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= -github.com/xhit/go-str2duration/v2 v2.1.0/go.mod h1:ohY8p+0f07DiV6Em5LKB0s2YpLtXVyJfNt1+BlmyAsU= github.com/xuri/efp v0.0.0-20240408161823-9ad904a10d6d h1:llb0neMWDQe87IzJLS4Ci7psK/lVsjIS2otl+1WyRyY= github.com/xuri/efp v0.0.0-20240408161823-9ad904a10d6d/go.mod h1:ybY/Jr0T0GTCnYjKqmdwxyxn2BQf2RcQIIvex5QldPI= -github.com/xuri/excelize/v2 v2.8.1 h1:pZLMEwK8ep+CLIUWpWmvW8IWE/yxqG0I1xcN6cVMGuQ= -github.com/xuri/excelize/v2 v2.8.1/go.mod h1:oli1E4C3Pa5RXg1TBXn4ENCXDV5JUMlBluUhG7c+CEE= +github.com/xuri/excelize/v2 v2.9.0 h1:1tgOaEq92IOEumR1/JfYS/eR0KHOCsRv/rYXXh6YJQE= +github.com/xuri/excelize/v2 v2.9.0/go.mod h1:uqey4QBZ9gdMeWApPLdhm9x+9o2lq4iVmjiLfBS5hdE= github.com/xuri/nfp v0.0.0-20240318013403-ab9948c2c4a7 h1:hPVCafDV85blFTabnqKgNhDCkJX25eik94Si9cTER4A= github.com/xuri/nfp v0.0.0-20240318013403-ab9948c2c4a7/go.mod h1:WwHg+CVyzlv/TX9xqBFXEZAuxOPxn2k1GNHwG41IIUQ= github.com/xuri/xgen v0.0.0-20240722131518-d0691b701898 h1:qqSByV3qojIVp1XbrFgD3nO38w1m6aePzmknorZQmRc= @@ -371,21 +336,8 @@ github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5t github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= -github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0= -go.etcd.io/etcd/api/v3 v3.5.12/go.mod h1:Ot+o0SWSyT6uHhA56al1oCED0JImsRiU9Dc26+C2a+4= -go.etcd.io/etcd/client/pkg/v3 v3.5.12/go.mod h1:seTzl2d9APP8R5Y2hFL3NVlD6qC/dOT+3kvrqPyTas4= -go.etcd.io/etcd/client/v2 v2.305.12/go.mod h1:aQ/yhsxMu+Oht1FOupSr60oBvcS9cKXHrzBpDsPTf9E= -go.etcd.io/etcd/client/v3 v3.5.12/go.mod h1:tSbBCakoWmmddL+BKVAJHa9km+O/E+bumDe9mSbPiqw= -go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw= -go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo= -go.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco= -go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU= -go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= -go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= golang.org/x/arch v0.9.0 h1:ub9TgUInamJ8mrZIGlBG6/4TqWeMszd4N8lNorbrr6k= golang.org/x/arch v0.9.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= @@ -397,8 +349,8 @@ golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliY golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M= -golang.org/x/crypto v0.26.0 h1:RrRspgV4mU+YwB4FYnuBoKsUapNIL5cohGAmSH3azsw= -golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54= +golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= +golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa h1:ELnwvuAXPNtPk1TJRuGkI9fDTwym6AYBu0qzT8AcHdI= golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa/go.mod h1:akd2r19cwCdwSwWeIdzYQGa/EZZyqcOdwWiwj5L5eKQ= golang.org/x/image v0.13.0/go.mod h1:6mmbMOeV28HuMTgA6OSRkdXKYw/t5W9Uwn2Yv1r3Yxk= @@ -413,8 +365,8 @@ golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0= -golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.22.0 h1:D4nJWe9zXqHOmWqj4VMOJhvzj7bEZg4wEYa759z1pH4= +golang.org/x/mod v0.22.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -432,9 +384,8 @@ golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE= -golang.org/x/net v0.28.0 h1:a9JDOJc5GMUJ0+UDqmLT86WiEy7iWyIhz8gz8E4e5hE= -golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg= -golang.org/x/oauth2 v0.21.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= +golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I= +golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -445,8 +396,8 @@ golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= -golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= +golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -476,8 +427,8 @@ golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg= -golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= +golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE= golang.org/x/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= @@ -488,8 +439,8 @@ golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= golang.org/x/term v0.22.0/go.mod h1:F3qCibpT5AMpCRfhfT53vVJwhLtIVHhB9XDjfFvnMI4= -golang.org/x/term v0.23.0 h1:F6D4vR+EHoL9/sWAWgAR1H2DcHr4PareCbAaCo1RpuU= -golang.org/x/term v0.23.0/go.mod h1:DgV24QBUrK6jhZXl+20l6UWznPlwAHm1Q1mGHtydmSk= +golang.org/x/term v0.28.0 h1:/Ts8HFuMR2E6IP/jlo7QVLZHggjKQbhu/7H0LJFr3Gg= +golang.org/x/term v0.28.0/go.mod h1:Sw/lC2IAUZ92udQNf3WodGtn4k/XoLyZoh8v/8uiwek= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= @@ -500,8 +451,8 @@ golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= -golang.org/x/text v0.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc= -golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/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= @@ -513,21 +464,14 @@ golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= -golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24= -golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ= +golang.org/x/tools v0.28.0 h1:WuB6qZ4RPCQo5aP3WdKZS7i595EdWqWR8vqJTlwTVK8= +golang.org/x/tools v0.28.0/go.mod h1:dcIOrVd3mfQKTgrDVQHqCPMWy6lnhfhtX3hLXYVLfRw= golang.org/x/tools/cmd/guru v0.1.1-deprecated h1:WiL3pQGXG71u4N45C0eRkE2IcEMAiQdDZ2H5lGspNjM= golang.org/x/tools/cmd/guru v0.1.1-deprecated/go.mod h1:yFb7vixnH8+ByFZ63niwlvUUxyTE/6ULZ6AiEHZwlTk= golang.org/x/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= -golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -google.golang.org/api v0.171.0/go.mod h1:Hnq5AHm4OTMt2BUVjael2CWZFD6vksJdWCWiUAmjC9o= -google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= -google.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9/go.mod h1:mqHbVIp48Muh7Ywss/AD6I5kNVKZMmAa/QEW58Gxp2s= -google.golang.org/genproto/googleapis/api v0.0.0-20240311132316-a219d84964c2/go.mod h1:O1cOfN1Cy6QEYr7VxtjOyP5AdAuR0aJ/MYZaaof623Y= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240314234333-6e1732d8331c/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= -google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -552,7 +496,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/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= @@ -583,7 +526,6 @@ modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw modernc.org/token v1.0.1 h1:A3qvTqOwexpfZZeyI0FeGPDlSWX5pjZu9hF4lU+EKWg= modernc.org/token v1.0.1/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50= -rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= 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= diff --git a/restagent/etc/restconf.yaml b/restagent/etc/restconf.yaml index 034caed6..1af1d303 100644 --- a/restagent/etc/restconf.yaml +++ b/restagent/etc/restconf.yaml @@ -2,13 +2,13 @@ # level: /trace/debug/info/warn/error/fatal, default: debug # duration: rotation time with xx hours, example: 1/12/24 hours # count: rotation count of log, default is 30 rotation -# pprof: false(default)/true to disable/enable pprof logger: - file: d:/omc.git/be.ems/restagent/log/restagent.log + file: ./log/restagent.log level: trace duration: 24 count: 2 +# pprof: false(default)/true to disable/enable pprof pprof: enabled: true addr: :33060 @@ -21,16 +21,24 @@ rest: - ipv4: 0.0.0.0 ipv6: port: 33030 + - ipv4: 0.0.0.0 + ipv6: + port: 33443 + schema: https + clientAuthType: 0 + caFile: ./etc/certs/omc-ca.crt + certFile: ./etc/certs/omc-server.crt + keyFile: ./etc/certs/omc-server.key webServer: enabled: true - rootDir: d:/omc.git/fe.ems.vue3/dist + rootDir: d:/omc.git/fe.ems.vue3/dist # front-end build dist directory listen: - addr: :80 schema: http - addr: :443 - scheme: https - clientAuthType: 0 + schema: https + clientAuthType: 0 caFile: ./etc/certs/omc-ca.crt certFile: ./etc/certs/omc-server.crt keyFile: ./etc/certs/omc-server.key @@ -38,12 +46,12 @@ webServer: database: type: mysql user: root - password: "1000omc@kp!" - host: "127.0.0.1" + password: 1000omc@kp! + host: 127.0.0.1 port: 33066 - name: "omc_db" + name: omc_db connParam: charset=utf8mb4&collation=utf8mb4_general_ci&parseTime=True&interpolateParams=True - backup: d:/omc.git/be.ems/restagent/database + backup: ./database # Redis data cache redis: @@ -58,7 +66,7 @@ redis: defaultDataSourceName: "default" # sleep: time delay for after write buffer (millisecond) -# deadLine: timeout for io read and write (second) +# deadLine: timeout for io read and write (second) mml: sleep: 200 deadLine: 10 @@ -81,7 +89,7 @@ ne: omcdir: /usr/local/omc scpdir: /tmp licensedir: /usr/local/etc/{neType}/license - # backup etc list of IMS,no space + # backup etc list of IMS, does not contain spaces etcListIMS: '{*.yaml,mmtel,vars.cfg}' etcListDefault: '{*.yaml,*.conf,*.cfg}' # true/false to overwrite config file when dpkg ne software @@ -96,27 +104,27 @@ omc: neId: 001 rmUID: 4400HX101 neName: OMC - province: GD + province: "" vendor: "" - dn: 4600 + dn: "" chk2ne: false capability: 50 - sn: "12345678" - expiryDate: "2099-12-31" + sn: "-" + expiryDate: "-" checksign: false - rootDir: ./ - binDir: ./bin - backup: C:/usr/local/omc/backup - upload: C:/usr/local/omc/upload - frontUpload: C:/usr/local/omc/upload - frontTraceDir: C:/usr/local/omc/trace - software: C:/usr/local/omc/software - license: C:/usr/local/omc/license - gtpUri: gtp:192.168.2.219:2152 + rootDir: /usr/local/omc + binDir: /usr/local/omc/bin + backup: /usr/local/omc/backup + upload: /usr/local/omc/upload + frontUpload: /usr/local/omc/htdocs/front/upload + frontTraceDir: /usr/local/omc/htdocs/front/trace + software: /usr/local/omc/software + license: /usr/local/omc/license + gtpUri: gtp:192.168.2.119:32152 checkContentType: false testMode: false rbacMode: true - runDir: + runDir: /usr/local/omc/run cmdTimeout: 120 # Alarm module setting @@ -126,7 +134,7 @@ omc: # smProxy: sms(Short Message Service)/smsc(SMS Centre) # dataCoding: 0:GSM7BIT, 1:ASCII, 2:BINARY8BIT1, 3:LATIN1, # 4:BINARY8BIT2, 6:CYRILLIC, 7:HEBREW, 8:UCS2 -alarm: +alarm: alarmEmailForward: enable: true emailList: @@ -134,7 +142,7 @@ alarm: port: 25 user: smtpext@smtp.com password: "1000smtp@omc!" - tlsSkipVerify: true + tlsSkipVerify: true alarmSMSForward: enable: true mobileList: "1006,1008" @@ -151,8 +159,8 @@ alarm: signName: xxx SMSC templateCode: 1000 smProxy: smsc - -#User authorized information + +# User authorized information # crypt: mysql/md5/bcrypt # token: true/false to check accessToken # expires for session, unit: second diff --git a/restagent/restagent.go b/restagent/restagent.go index 9dd6abcc..49b6fc49 100644 --- a/restagent/restagent.go +++ b/restagent/restagent.go @@ -1,16 +1,19 @@ package main import ( - "crypto/tls" - "crypto/x509" "fmt" "net/http" "os" - "strconv" - "strings" + "sync" _ "net/http/pprof" + "github.com/chenjiandongx/ginprom" + "github.com/gin-gonic/gin" + "github.com/prometheus/client_golang/prometheus/promhttp" + swaggerFiles "github.com/swaggo/files" + ginSwagger "github.com/swaggo/gin-swagger" + "be.ems/features" "be.ems/features/dbrest" "be.ems/features/event" @@ -18,191 +21,76 @@ import ( "be.ems/features/lm" "be.ems/features/mml" "be.ems/features/pm" + featuresCfg "be.ems/lib/config" "be.ems/lib/dborm" "be.ems/lib/global" "be.ems/lib/log" "be.ems/lib/routes" - "be.ems/restagent/config" "be.ems/src" + "be.ems/src/framework/config" + "be.ems/src/framework/logger" "be.ems/src/framework/middleware" - "github.com/gin-gonic/gin" - "golang.org/x/net/http2" - "golang.org/x/net/http2/h2c" + "be.ems/src/framework/utils/parse" + _ "be.ems/swagger2docs" ) -// const defaultConfigFile = "./etc/restconf.yaml" - -// 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 restagent version: %s\n%s\n%s\n\n", global.Version, global.BuildTime, global.GoVer) -// os.Exit(0) -// } -// if *ph { -// flag.Usage() -// os.Exit(0) -// } - -// config.ReadConfig(*cfile) -// config.UriPrefix = config.GetYamlConfig().OMC.UriPrefix -// //fmt.Println(config.UriPrefix) -// } - -// func listenIPv6(ipv6 string, port int) { -// // -// addr := &net.TCPAddr{ -// IP: net.ParseIP(ipv6), -// Port: port, -// } - -// listener, err := net.ListenTCP("tcp6", addr) -// if err != nil { -// fmt.Println("Failed to listen:", err) -// return -// } - -// server := &http.Server{} -// err = server.Serve(listener) -// if err != nil { -// fmt.Println("Failed to serve:", err) -// } -// } - -func HttpListen(addr string, router http.Handler) { - // 创建HTTP服务器 - h2s := &http2.Server{ - // ... - } - server := &http.Server{ - Addr: addr, - Handler: h2c.NewHandler(router, h2s), - } - - // // support http 2.0 server - // err := http2.ConfigureServer(server, &http2.Server{}) - // if err != nil { - // fmt.Println("ConfigureServer err:", err) - // os.Exit(11) - // } - err := server.ListenAndServe() - if err != nil { - fmt.Println("ListenAndServe err:", err) - os.Exit(12) - } -} - -func HttpListenTLS(addr, caFile, certFile, keyFile string, clientAuthType int, router http.Handler) { - // 加载根证书 - caCert, err := os.ReadFile(caFile) - if err != nil { - log.Fatal(err) - } - caCertPool := x509.NewCertPool() - caCertPool.AppendCertsFromPEM(caCert) - - // 创建自定义的TLS配置 - tlsConfig := &tls.Config{ - MinVersion: tls.VersionTLS10, - MaxVersion: tls.VersionTLS13, - ClientCAs: caCertPool, - ClientAuth: tls.ClientAuthType(clientAuthType), - } - - // 创建HTTP服务器 - server := &http.Server{ - Addr: addr, - Handler: router, - TLSConfig: tlsConfig, - } - - // support http 2.0 server - http2.ConfigureServer(server, &http2.Server{}) - if err != nil { - fmt.Println("ConfigureServer err:", err) - os.Exit(13) - } - err = server.ListenAndServeTLS(certFile, keyFile) - if err != nil { - fmt.Println("ListenAndServeTLS err:", err) - os.Exit(14) - } -} - -func HttpListenWebServerTLS(addr, caFile, certFile, keyFile string, clientAuthType int) { - // 加载根证书 - caCert, err := os.ReadFile(caFile) - if err != nil { - log.Fatal(err) - } - caCertPool := x509.NewCertPool() - caCertPool.AppendCertsFromPEM(caCert) - - // 创建自定义的TLS配置 - tlsConfig := &tls.Config{ - MinVersion: tls.VersionTLS10, - MaxVersion: tls.VersionTLS13, - ClientCAs: caCertPool, - ClientAuth: tls.ClientAuthType(clientAuthType), - } - - // 创建HTTP服务器 - server := &http.Server{ - Addr: addr, - TLSConfig: tlsConfig, - } - - // support http 2.0 server - http2.ConfigureServer(server, &http2.Server{}) - if err != nil { - fmt.Println("ConfigureServer err:", err) - os.Exit(9) - } - err = server.ListenAndServeTLS(certFile, keyFile) - if err != nil { - fmt.Println("ListenAndServeTLS err:", err) - os.Exit(10) - } -} - -func HttpListenWebServer(addr string) { - // 创建HTTP服务器 - server := &http.Server{ - Addr: addr, - } - - // support http 2.0 server - err := http2.ConfigureServer(server, &http2.Server{}) - if err != nil { - fmt.Println("ConfigureServer err:", err) - os.Exit(7) - } - err = server.ListenAndServe() - if err != nil { - fmt.Println("ListenAndServe err:", err) - os.Exit(8) - } -} +var wg sync.WaitGroup +// @title OMC Swagger API +// @version 1.0.5 +// @description OMC Service Interface Info +// +// @tag.name chart +// @tag.description chart interface +// @tag.name common +// @tag.description common interface +// @tag.name monitor +// @tag.description monitor interface +// @tag.name network_data +// @tag.description network data interface +// @tag.name network_element +// @tag.description network element interface +// @tag.name system +// @tag.description system interface +// @tag.name tool +// @tag.description tool interface +// @tag.name trace +// @tag.description trace interface +// @tag.name ws +// @tag.description ws interface +// +// @host 127.0.0.1:33040 +// @BasePath / +// @schemes http https +// +// @securityDefinitions.apikey ApiKeyAuth +// @in header +// @name Authorization +// @description Get the key through the login interface, fill in e.g. Bearer func main() { - - // src 配置中心初始加载 + // 初始配置加载 src.ConfigurationInit() + // 程序注册 app := src.AppEngine() + // Swagger 接口文档 + app.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler)) - conf := config.GetYamlConfig() + loadFeatures(app) - if conf.Pprof.Enabled { - // 启用pprof HTTP服务 - go func() { - fmt.Println(http.ListenAndServe(conf.Pprof.Addr, nil)) - }() - } + loadPprof(app) - log.InitLogger(conf.Logger.File, conf.Logger.Duration, conf.Logger.Count, "omc:restagent", config.GetLogLevel()) + loadServer(app) + + loadWebServer() + + wg.Wait() +} + +// loadFeatures mux路由模块 +func loadFeatures(app *gin.Engine) { + conf := featuresCfg.GetYamlConfig() + + log.InitLogger(conf.Logger.File, conf.Logger.Duration, conf.Logger.Count, "omc:restagent", featuresCfg.GetLogLevel()) fmt.Printf("OMC restagent version: %s\n", global.Version) log.Infof("========================= OMC restagent startup =========================") log.Infof("OMC restagent version: %s %s %s", global.Version, global.BuildTime, global.GoVer) @@ -249,71 +137,138 @@ func main() { // 将 mux.Router 注册到 gin.Engine // 默认路由组 - defaultUriGroup := app.Group(config.DefaultUriPrefix) + defaultUriGroup := app.Group(featuresCfg.DefaultUriPrefix) defaultUriGroup.Use(middleware.PreAuthorize(nil)) defaultUriGroup.Any("/*any", gin.WrapH(routes.NewRouter())) // 可配置前缀路由组 - uriGroup := app.Group(config.UriPrefix) + uriGroup := app.Group(featuresCfg.UriPrefix) uriGroup.Any("/*any", gin.WrapH(routes.NewRouter())) // AMF上报的UE事件, 无前缀,暂时特殊处理 app.POST(event.UriUEEventAMF, event.PostUEEventFromAMF) // register feature service gin.Engine features.InitServiceEngine(app) - - // var listenLocalhost bool = false - for _, rest := range conf.Rest { - // ipv4 goroutines - if rest.IPv4 != "" { - listen := rest.IPv4 + ":" + strconv.Itoa(int(rest.Port)) - if strings.ToLower(rest.Scheme) == "https" { - go HttpListenTLS(listen, rest.CaFile, rest.CertFile, rest.KeyFile, rest.ClientAuthType, app) - } else { - go HttpListen(listen, app) - } - } - // if rest.IPv4 != "0.0.0.0" && !listenLocalhost { - // listenLocalhost = true - // // 默认启动localhost侦听 - // listenLocal := "127.0.0.1" + ":" + strconv.Itoa(int(rest.Port)) - // if strings.ToLower(rest.Scheme) == "https" { - // go HttpListenTLS(listenLocal, rest.CaFile, rest.CertFile, rest.KeyFile, rest.ClientAuthType, app) - // } else { - // go HttpListen(listenLocal, app) - // } - // } - // ipv6 goroutines - if rest.IPv6 != "" { - listenv6 := "[" + rest.IPv6 + "]" + ":" + strconv.Itoa(int(rest.Port)) - if strings.ToLower(rest.Scheme) == "https" { - go HttpListenTLS(listenv6, rest.CaFile, rest.CertFile, rest.KeyFile, rest.ClientAuthType, app) - } else { - go HttpListen(listenv6, app) - } - } - - // if rest.IPv6 != "::" { - // // 默认启动localhost侦听 - // listenv6Local := "[" + "::1" + "]" + ":" + strconv.Itoa(int(rest.Port)) - // if strings.ToLower(rest.Scheme) == "https" { - // go HttpListenTLS(listenv6Local, rest.CaFile, rest.CertFile, rest.KeyFile, app) - // } else { - // go HttpListen(listenv6Local, app) - // } - // } - } - - if conf.WebServer.Enabled { - fs := http.FileServer(http.Dir(conf.WebServer.RootDir)) - http.Handle("/", fs) - for _, listen := range conf.WebServer.Listen { - if strings.ToLower(listen.Scheme) == "https" { - go HttpListenWebServerTLS(listen.Addr, listen.CaFile, listen.CertFile, listen.KeyFile, listen.ClientAuthType) - } else { - go HttpListenWebServer(listen.Addr) - } - } - } - - select {} +} + +// loadPprof 性能分析监控 +func loadPprof(app *gin.Engine) { + pprofEnabled := config.Get("pprof.enabled") + if pprofEnabled != nil && pprofEnabled.(bool) { + app.Use(ginprom.PromMiddleware(nil)) + app.GET("/metrics", ginprom.PromHandler(promhttp.Handler())) + pprofAddr := config.Get("pprof.addr").(string) + wg.Add(1) + // 启用pprof HTTP服务 + go func(addr string) { + defer wg.Done() + fmt.Println(http.ListenAndServe(addr, nil)) + }(pprofAddr) + } +} + +// loadServer 多个HTTP服务启动 +func loadServer(app *gin.Engine) { + httpArr := config.Get("rest") + if httpArr == nil { + logger.Errorf("rest config not found") + return + } + for _, v := range httpArr.([]any) { + rest := v.(map[string]any) + port := parse.Number(rest["port"]) + ipv4 := fmt.Sprint(rest["ipv4"]) + ipv6 := fmt.Sprint(rest["ipv6"]) + schema := fmt.Sprint(rest["schema"]) + if schema == "https" && schema != "" { + certFile := fmt.Sprint(rest["certfile"]) + keyFile := fmt.Sprint(rest["keyfile"]) + addr := "" + if ipv4 != "" && ipv4 != "" { + addr = fmt.Sprintf("%s:%d", ipv4, port) + } + if ipv6 != "" && ipv6 != "" { + addr = fmt.Sprintf("[%s]:%d", ipv6, port) + } + if addr == "" { + continue + } + // 启动HTTPS服务 + wg.Add(1) + go func(addr string, certFile string, keyFile string) { + defer wg.Done() + err := app.RunTLS(addr, certFile, keyFile) + logger.Errorf("run tls err:%v", err) + }(addr, certFile, keyFile) + } else { + addr := "" + if ipv4 != "" && ipv4 != "" { + addr = fmt.Sprintf("%s:%d", ipv4, port) + } + if ipv6 != "" && ipv6 != "" { + addr = fmt.Sprintf("[%s]:%d", ipv6, port) + } + if addr == "" { + continue + } + // 启动HTTP服务 + wg.Add(1) + go func(addr string) { + defer wg.Done() + err := app.Run(addr) + logger.Errorf("run err:%v", err) + }(addr) + } + } +} + +// loadWebServer 前端静态资源服务 +func loadWebServer() { + webEnabled := config.Get("webServer.enabled") + if webEnabled == nil { + logger.Errorf("webServer config not found") + return + } + if webEnabled.(bool) { + rootDir := config.Get("webServer.rootDir").(string) + if rootDir != "" { + var web *gin.Engine + gin.SetMode(gin.ReleaseMode) + web = gin.New() + web.Use(gin.Recovery()) + gin.DisableConsoleColor() + web.StaticFS("/", http.Dir(rootDir)) + // 多个HTTP服务启动 + listenArr := config.Get("webServer.listen") + for _, v := range listenArr.([]any) { + listen := v.(map[string]any) + addr := fmt.Sprint(listen["addr"]) + schema := fmt.Sprint(listen["schema"]) + if schema == "https" && schema != "" { + certFile := fmt.Sprint(listen["certfile"]) + keyFile := fmt.Sprint(listen["keyfile"]) + if addr == "" || addr == "" { + continue + } + // 启动HTTPS服务 + wg.Add(1) + go func(addr string, certFile string, keyFile string) { + defer wg.Done() + err := web.RunTLS(addr, certFile, keyFile) + logger.Errorf("web run tls err:%v", err) + }(addr, certFile, keyFile) + } else { + if addr == "" || addr == "" { + continue + } + // 启动HTTP服务 + wg.Add(1) + go func(addr string) { + defer wg.Done() + err := web.Run(addr) + logger.Errorf("web run err:%v", err) + }(addr) + } + } + } + } } diff --git a/src/modules/chart/controller/chart_graph.go b/src/modules/chart/controller/chart_graph.go index acad8af3..f89840b4 100644 --- a/src/modules/chart/controller/chart_graph.go +++ b/src/modules/chart/controller/chart_graph.go @@ -25,6 +25,15 @@ type ChartGraphController struct { // 获取关系图组名 // // GET /groups +// +// @Tags chart +// @Accept json +// @Produce json +// @Success 200 {object} map[string]any "data" +// @Security ApiKeyAuth +// @Summary Get relationship graph group name +// @Description Get relationship graph group name +// @Router /chart/graph/groups [get] func (s *ChartGraphController) GroupNames(c *gin.Context) { data := s.chartGraphService.SelectGroup() c.JSON(200, result.OkData(data)) @@ -33,6 +42,17 @@ func (s *ChartGraphController) GroupNames(c *gin.Context) { // 获取关系图数据 // // GET / +// +// @Tags chart +// @Accept json +// @Produce json +// @Param group query string true "Group" +// @Param type query string true "Type oneof=node edge combo" Enums(node, edge, combo) +// @Success 200 {object} map[string]any "data" +// @Security ApiKeyAuth +// @Summary Getting Relationship Map Data +// @Description Getting Relationship Map Data +// @Router /chart/graph [get] func (s *ChartGraphController) Load(c *gin.Context) { language := ctx.AcceptLanguage(c) var querys struct { @@ -51,6 +71,16 @@ func (s *ChartGraphController) Load(c *gin.Context) { // 保存关系图数据 // // POST / +// +// @Tags chart +// @Accept json +// @Produce json +// @Param data body map[string]any true "{group:'',data:{nodes:[],edges:[],combos:[]}}" +// @Success 200 {object} map[string]any "data" +// @Security ApiKeyAuth +// @Summary Saving Relationship Diagram Data +// @Description Saving Relationship Diagram Data +// @Router /chart/graph/ [post] func (s *ChartGraphController) Save(c *gin.Context) { language := ctx.AcceptLanguage(c) var body struct { @@ -83,6 +113,16 @@ func (s *ChartGraphController) Save(c *gin.Context) { // 删除关系图数据 // // DELETE /:group +// +// @Tags chart +// @Accept json +// @Produce json +// @Param group path string true "Group" +// @Success 200 {object} map[string]any "data" +// @Security ApiKeyAuth +// @Summary Deleting Relationship Diagram Data +// @Description Deleting Relationship Diagram Data +// @Router /chart/graph/:group [delete] func (s *ChartGraphController) Delete(c *gin.Context) { language := ctx.AcceptLanguage(c) group := c.Param("group") diff --git a/src/modules/common/controller/index.go b/src/modules/common/controller/index.go index b61ce81a..61dde7f0 100644 --- a/src/modules/common/controller/index.go +++ b/src/modules/common/controller/index.go @@ -20,6 +20,14 @@ type IndexController struct{} // 根路由 // // GET / +// +// @Tags common +// @Accept json +// @Produce json +// @Success 200 {object} map[string]any "data" +// @Summary Root Route +// @Description Root Route +// @Router / [get] func (s *IndexController) Handler(c *gin.Context) { name := "OMC" version := libGlobal.Version diff --git a/src/modules/network_element/controller/action.go b/src/modules/network_element/controller/action.go index 6e24c7a5..3dc51d63 100644 --- a/src/modules/network_element/controller/action.go +++ b/src/modules/network_element/controller/action.go @@ -7,6 +7,8 @@ import ( "runtime" "strings" + "github.com/gin-gonic/gin" + "be.ems/src/framework/i18n" "be.ems/src/framework/utils/ctx" "be.ems/src/framework/utils/file" @@ -14,8 +16,6 @@ import ( "be.ems/src/framework/utils/ssh" "be.ems/src/framework/vo/result" neService "be.ems/src/modules/network_element/service" - "github.com/gin-gonic/gin" - "github.com/gin-gonic/gin/binding" ) // 实例化控制层 NeActionController 结构体 @@ -34,6 +34,15 @@ type NeActionController struct { // 从本地到网元发送文件 // // POST /pushFile +// +// @Tags network_element +// @Accept json +// @Produce json +// @Success 200 {object} map[string]any{} "data" +// @Security ApiKeyAuth +// @Summary Sending files from local to network elements +// @Description Sending files from local to network elements +// @Router /ne/action/pushFile [post] func (s *NeActionController) PushFile(c *gin.Context) { language := ctx.AcceptLanguage(c) var body struct { @@ -42,7 +51,7 @@ func (s *NeActionController) PushFile(c *gin.Context) { UploadPath string `json:"uploadPath" binding:"required"` DelTemp bool `json:"delTemp"` // 删除本地临时文件 } - if err := c.ShouldBindBodyWith(&body, binding.JSON); err != nil { + if err := c.ShouldBindBodyWithJSON(&body); err != nil { c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) return } @@ -331,7 +340,7 @@ func (s *NeActionController) Service(c *gin.Context) { NeID string `json:"neId" binding:"required"` Action string `json:"action" binding:"required,oneof=start restart stop reboot poweroff"` // 操作行为 } - if err := c.ShouldBindBodyWith(&body, binding.JSON); err != nil { + if err := c.ShouldBindBodyWithJSON(&body); err != nil { c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) return } diff --git a/swagger2docs/docs.go b/swagger2docs/docs.go new file mode 100644 index 00000000..1a54e629 --- /dev/null +++ b/swagger2docs/docs.go @@ -0,0 +1,294 @@ +// Package swagger2docs Code generated by swaggo/swag. DO NOT EDIT +package swagger2docs + +import "github.com/swaggo/swag" + +const docTemplate = `{ + "schemes": {{ marshal .Schemes }}, + "swagger": "2.0", + "info": { + "description": "{{escape .Description}}", + "title": "{{.Title}}", + "contact": {}, + "version": "{{.Version}}" + }, + "host": "{{.Host}}", + "basePath": "{{.BasePath}}", + "paths": { + "/": { + "get": { + "description": "Root Route", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "common" + ], + "summary": "Root Route", + "responses": { + "200": { + "description": "data", + "schema": { + "type": "object", + "additionalProperties": true + } + } + } + } + }, + "/chart/graph": { + "get": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Getting Relationship Map Data", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "chart" + ], + "summary": "Getting Relationship Map Data", + "parameters": [ + { + "type": "string", + "description": "Group", + "name": "group", + "in": "query", + "required": true + }, + { + "enum": [ + "node", + "edge", + "combo" + ], + "type": "string", + "description": "Type oneof=node edge combo", + "name": "type", + "in": "query", + "required": true + } + ], + "responses": { + "200": { + "description": "data", + "schema": { + "type": "object", + "additionalProperties": true + } + } + } + } + }, + "/chart/graph/": { + "post": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Saving Relationship Diagram Data", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "chart" + ], + "summary": "Saving Relationship Diagram Data", + "parameters": [ + { + "description": "{group:'',data:{nodes:[],edges:[],combos:[]}}", + "name": "data", + "in": "body", + "required": true, + "schema": { + "type": "object", + "additionalProperties": true + } + } + ], + "responses": { + "200": { + "description": "data", + "schema": { + "type": "object", + "additionalProperties": true + } + } + } + } + }, + "/chart/graph/:group": { + "delete": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Deleting Relationship Diagram Data", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "chart" + ], + "summary": "Deleting Relationship Diagram Data", + "parameters": [ + { + "type": "string", + "description": "Group", + "name": "group", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "data", + "schema": { + "type": "object", + "additionalProperties": true + } + } + } + } + }, + "/chart/graph/groups": { + "get": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Get relationship graph group name", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "chart" + ], + "summary": "Get relationship graph group name", + "responses": { + "200": { + "description": "data", + "schema": { + "type": "object", + "additionalProperties": true + } + } + } + } + }, + "/ne/action/pushFile": { + "post": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Sending files from local to network elements", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "network_element" + ], + "summary": "Sending files from local to network elements", + "responses": { + "200": { + "description": "data", + "schema": { + "type": "object", + "additionalProperties": {} + } + } + } + } + } + }, + "securityDefinitions": { + "ApiKeyAuth": { + "description": "Get the key through the login interface, fill in e.g. Bearer \u003caccess_token\u003e", + "type": "apiKey", + "name": "Authorization", + "in": "header" + } + }, + "tags": [ + { + "description": "chart interface", + "name": "chart" + }, + { + "description": "common interface", + "name": "common" + }, + { + "description": "monitor interface", + "name": "monitor" + }, + { + "description": "network data interface", + "name": "network_data" + }, + { + "description": "network element interface", + "name": "network_element" + }, + { + "description": "system interface", + "name": "system" + }, + { + "description": "tool interface", + "name": "tool" + }, + { + "description": "trace interface", + "name": "trace" + }, + { + "description": "ws interface", + "name": "ws" + } + ] +}` + +// SwaggerInfo holds exported Swagger Info so clients can modify it +var SwaggerInfo = &swag.Spec{ + Version: "1.0.5", + Host: "127.0.0.1:33040", + BasePath: "/", + Schemes: []string{"http", "https"}, + Title: "OMC Swagger API", + Description: "OMC Service Interface Info", + InfoInstanceName: "swagger", + SwaggerTemplate: docTemplate, + LeftDelim: "{{", + RightDelim: "}}", +} + +func init() { + swag.Register(SwaggerInfo.InstanceName(), SwaggerInfo) +} diff --git a/swagger2docs/swagger.json b/swagger2docs/swagger.json new file mode 100644 index 00000000..6b45b9ea --- /dev/null +++ b/swagger2docs/swagger.json @@ -0,0 +1,274 @@ +{ + "schemes": [ + "http", + "https" + ], + "swagger": "2.0", + "info": { + "description": "OMC Service Interface Info", + "title": "OMC Swagger API", + "contact": {}, + "version": "1.0.5" + }, + "host": "127.0.0.1:33040", + "basePath": "/", + "paths": { + "/": { + "get": { + "description": "Root Route", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "common" + ], + "summary": "Root Route", + "responses": { + "200": { + "description": "data", + "schema": { + "type": "object", + "additionalProperties": true + } + } + } + } + }, + "/chart/graph": { + "get": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Getting Relationship Map Data", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "chart" + ], + "summary": "Getting Relationship Map Data", + "parameters": [ + { + "type": "string", + "description": "Group", + "name": "group", + "in": "query", + "required": true + }, + { + "enum": [ + "node", + "edge", + "combo" + ], + "type": "string", + "description": "Type oneof=node edge combo", + "name": "type", + "in": "query", + "required": true + } + ], + "responses": { + "200": { + "description": "data", + "schema": { + "type": "object", + "additionalProperties": true + } + } + } + } + }, + "/chart/graph/": { + "post": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Saving Relationship Diagram Data", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "chart" + ], + "summary": "Saving Relationship Diagram Data", + "parameters": [ + { + "description": "{group:'',data:{nodes:[],edges:[],combos:[]}}", + "name": "data", + "in": "body", + "required": true, + "schema": { + "type": "object", + "additionalProperties": true + } + } + ], + "responses": { + "200": { + "description": "data", + "schema": { + "type": "object", + "additionalProperties": true + } + } + } + } + }, + "/chart/graph/:group": { + "delete": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Deleting Relationship Diagram Data", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "chart" + ], + "summary": "Deleting Relationship Diagram Data", + "parameters": [ + { + "type": "string", + "description": "Group", + "name": "group", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "data", + "schema": { + "type": "object", + "additionalProperties": true + } + } + } + } + }, + "/chart/graph/groups": { + "get": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Get relationship graph group name", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "chart" + ], + "summary": "Get relationship graph group name", + "responses": { + "200": { + "description": "data", + "schema": { + "type": "object", + "additionalProperties": true + } + } + } + } + }, + "/ne/action/pushFile": { + "post": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Sending files from local to network elements", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "network_element" + ], + "summary": "Sending files from local to network elements", + "responses": { + "200": { + "description": "data", + "schema": { + "type": "object", + "additionalProperties": {} + } + } + } + } + } + }, + "securityDefinitions": { + "ApiKeyAuth": { + "description": "Get the key through the login interface, fill in e.g. Bearer \u003caccess_token\u003e", + "type": "apiKey", + "name": "Authorization", + "in": "header" + } + }, + "tags": [ + { + "description": "chart interface", + "name": "chart" + }, + { + "description": "common interface", + "name": "common" + }, + { + "description": "monitor interface", + "name": "monitor" + }, + { + "description": "network data interface", + "name": "network_data" + }, + { + "description": "network element interface", + "name": "network_element" + }, + { + "description": "system interface", + "name": "system" + }, + { + "description": "tool interface", + "name": "tool" + }, + { + "description": "trace interface", + "name": "trace" + }, + { + "description": "ws interface", + "name": "ws" + } + ] +} \ No newline at end of file diff --git a/swagger2docs/swagger.yaml b/swagger2docs/swagger.yaml new file mode 100644 index 00000000..4ecc7c67 --- /dev/null +++ b/swagger2docs/swagger.yaml @@ -0,0 +1,172 @@ +basePath: / +host: 127.0.0.1:33040 +info: + contact: {} + description: OMC Service Interface Info + title: OMC Swagger API + version: 1.0.5 +paths: + /: + get: + consumes: + - application/json + description: Root Route + produces: + - application/json + responses: + "200": + description: data + schema: + additionalProperties: true + type: object + summary: Root Route + tags: + - common + /chart/graph: + get: + consumes: + - application/json + description: Getting Relationship Map Data + parameters: + - description: Group + in: query + name: group + required: true + type: string + - description: Type oneof=node edge combo + enum: + - node + - edge + - combo + in: query + name: type + required: true + type: string + produces: + - application/json + responses: + "200": + description: data + schema: + additionalProperties: true + type: object + security: + - ApiKeyAuth: [] + summary: Getting Relationship Map Data + tags: + - chart + /chart/graph/: + post: + consumes: + - application/json + description: Saving Relationship Diagram Data + parameters: + - description: '{group:'''',data:{nodes:[],edges:[],combos:[]}}' + in: body + name: data + required: true + schema: + additionalProperties: true + type: object + produces: + - application/json + responses: + "200": + description: data + schema: + additionalProperties: true + type: object + security: + - ApiKeyAuth: [] + summary: Saving Relationship Diagram Data + tags: + - chart + /chart/graph/:group: + delete: + consumes: + - application/json + description: Deleting Relationship Diagram Data + parameters: + - description: Group + in: path + name: group + required: true + type: string + produces: + - application/json + responses: + "200": + description: data + schema: + additionalProperties: true + type: object + security: + - ApiKeyAuth: [] + summary: Deleting Relationship Diagram Data + tags: + - chart + /chart/graph/groups: + get: + consumes: + - application/json + description: Get relationship graph group name + produces: + - application/json + responses: + "200": + description: data + schema: + additionalProperties: true + type: object + security: + - ApiKeyAuth: [] + summary: Get relationship graph group name + tags: + - chart + /ne/action/pushFile: + post: + consumes: + - application/json + description: Sending files from local to network elements + produces: + - application/json + responses: + "200": + description: data + schema: + additionalProperties: {} + type: object + security: + - ApiKeyAuth: [] + summary: Sending files from local to network elements + tags: + - network_element +schemes: +- http +- https +securityDefinitions: + ApiKeyAuth: + description: Get the key through the login interface, fill in e.g. Bearer + in: header + name: Authorization + type: apiKey +swagger: "2.0" +tags: +- description: chart interface + name: chart +- description: common interface + name: common +- description: monitor interface + name: monitor +- description: network data interface + name: network_data +- description: network element interface + name: network_element +- description: system interface + name: system +- description: tool interface + name: tool +- description: trace interface + name: trace +- description: ws interface + name: ws