diff --git a/.gitignore b/.gitignore index 485dee6..5bb26e7 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ .idea +uploadfile +*.log diff --git a/README.md b/README.md index b898a6d..f67d6a5 100644 --- a/README.md +++ b/README.md @@ -177,18 +177,6 @@ 2. model需要继承 BaseModle 并且实现 TableName 方法,如果需要初始化填充数据的话,需要实现 FillData() 方法,并将数据填充需要执行的代码写到函数体里。详情参照 AdminUsers -3. 数据库迁移,先使用`go install cmd\ginadmin-cli`安装ginadmin-cli 命令,执行命令行工具 - - ```go - ginadmin-cli db migrate - ``` - -4. 数据填充,需在相应目录下实现 `FillData()` 方法执行如下命令 - - ```go - ginadmin-cli db seed - ``` - 5. 可以通过设置 ini 配置文件中的 `fill_data`和`migrate_table` 分别控制程序重启时自动迁移数据表和填充数据 ### :small_blue_diamond:定时任务 diff --git a/cmd/ginadmin-cli/ginadmin-cli.go b/cmd/ginadmin-cli/ginadmin-cli.go deleted file mode 100644 index 15bc3aa..0000000 --- a/cmd/ginadmin-cli/ginadmin-cli.go +++ /dev/null @@ -1,21 +0,0 @@ -/* - * @Description: - * @Author: gphper - * @Date: 2021-07-04 15:11:10 - */ -package main - -import ( - "github/gphper/ginadmin/internal/cli/db" - files "github/gphper/ginadmin/internal/cli/file" - - "github.com/spf13/cobra" -) - -func main() { - var rootCmd = &cobra.Command{Use: "ginadmin-cli"} - rootCmd.AddCommand(db.CmdDb) - rootCmd.AddCommand(files.CmdFile) - rootCmd.Execute() - -} diff --git a/cmd/ginadmin/main.go b/cmd/ginadmin/main.go index 9e3b9d2..c5d6cf8 100644 --- a/cmd/ginadmin/main.go +++ b/cmd/ginadmin/main.go @@ -27,7 +27,7 @@ var ( // @license.name Apache 2.0 // @license.url http://www.apache.org/licenses/LICENSE-2.0.html -// @host localhost:20011 +// @host 122.152.196.83 // @basepath /api func main() { diff --git a/docs/docs.go b/docs/docs.go index 7da5163..808781e 100644 --- a/docs/docs.go +++ b/docs/docs.go @@ -172,7 +172,7 @@ type swaggerInfo struct { // SwaggerInfo holds exported Swagger Info so clients can modify it var SwaggerInfo = swaggerInfo{ Version: "1.0", - Host: "localhost:20011", + Host: "122.152.196.83", BasePath: "/api", Schemes: []string{}, Title: "GinAdmin Api", diff --git a/docs/swagger.json b/docs/swagger.json index f2b8c11..a91a82b 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -13,7 +13,7 @@ }, "version": "1.0" }, - "host": "localhost:20011", + "host": "122.152.196.83", "basePath": "/api", "paths": { "/user/example": { diff --git a/docs/swagger.yaml b/docs/swagger.yaml index 2bb8458..e7e31b7 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -37,7 +37,7 @@ definitions: - sex - username type: object -host: localhost:20011 +host: 122.152.196.83 info: contact: name: gphper diff --git a/go.mod b/go.mod index e07a268..e390aa5 100644 --- a/go.mod +++ b/go.mod @@ -6,34 +6,33 @@ require ( github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 github.com/casbin/casbin/v2 v2.31.2 // direct github.com/casbin/gorm-adapter/v3 v3.2.12 - github.com/gin-contrib/gzip v0.0.3 // indirect + github.com/gin-contrib/gzip v0.0.3 + github.com/gin-contrib/pprof v1.3.0 // indirect github.com/gin-contrib/sessions v0.0.3 - github.com/gin-gonic/gin v1.7.0 + github.com/gin-gonic/gin v1.7.3 github.com/go-openapi/jsonreference v0.19.6 // indirect github.com/go-openapi/spec v0.20.3 // indirect github.com/go-openapi/swag v0.19.15 // indirect github.com/go-playground/locales v0.13.0 github.com/go-playground/universal-translator v0.17.0 - github.com/go-playground/validator/v10 v10.7.0 + github.com/go-playground/validator/v10 v10.8.0 github.com/go-redis/redis v6.15.9+incompatible + github.com/gphper/ginmonitor v0.0.0-20210807082039-bcf719990984 github.com/gphper/multitemplate v0.1.0 github.com/jonboulle/clockwork v0.2.2 // indirect - github.com/leodido/go-urn v1.2.1 // indirect github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible github.com/lestrrat-go/strftime v1.0.4 // indirect github.com/mailru/easyjson v0.7.7 // indirect - github.com/mojocn/base64Captcha v1.3.5 // indirect + github.com/mojocn/base64Captcha v1.3.5 github.com/onsi/gomega v1.16.0 // indirect + github.com/prometheus/client_golang v1.11.0 github.com/robfig/cron v1.2.0 github.com/spf13/cobra v1.2.1 github.com/swaggo/gin-swagger v1.3.0 github.com/swaggo/swag v1.7.0 - github.com/ugorji/go v1.2.4 // indirect go.uber.org/zap v1.17.0 - golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83 // indirect golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d // indirect golang.org/x/net v0.0.0-20210716203947-853a461950ff // indirect - golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c // indirect golang.org/x/tools v0.1.5 // indirect gopkg.in/ini.v1 v1.62.0 gorm.io/driver/mysql v1.1.0 diff --git a/go.sum b/go.sum index c9ac812..28d0495 100644 --- a/go.sum +++ b/go.sum @@ -48,12 +48,20 @@ github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tN github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM= 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/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= 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/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/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= github.com/boj/redistore v0.0.0-20180917114910-cd5dcc76aeff/go.mod h1:+RTT1BOk5P97fT2CiHkbFQwkK3mjsFAP6zCYV2aXtjw= @@ -65,6 +73,8 @@ github.com/casbin/casbin/v2 v2.31.2/go.mod h1:vByNa/Fchek0KZUgG5wEsl7iFsiviAYKRt github.com/casbin/gorm-adapter/v3 v3.2.12 h1:V42CHDHk1O9q53F4FHo/Rwt/tneE1lYLlgM7hlcMC+Y= github.com/casbin/gorm-adapter/v3 v3.2.12/go.mod h1:Ui9poIf0OR2X99gpWjrav5hGcU/fwtbHemmB/9TNkFU= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= 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= @@ -99,10 +109,11 @@ github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMo github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gin-contrib/gzip v0.0.1 h1:ezvKOL6jH+jlzdHNE4h9h8q8uMpDQjyl0NN0Jd7jozc= github.com/gin-contrib/gzip v0.0.1/go.mod h1:fGBJBCdt6qCZuCAOwWuFhBB4OOq9EFqlo5dEaFhhu5w= github.com/gin-contrib/gzip v0.0.3 h1:etUaeesHhEORpZMp18zoOhepboiWnFtXrBZxszWUn4k= github.com/gin-contrib/gzip v0.0.3/go.mod h1:YxxswVZIqOvcHEQpsSn+QF5guQtO1dCfy0shBPy4jFc= +github.com/gin-contrib/pprof v1.3.0 h1:G9eK6HnbkSqDZBYbzG4wrjCsA4e+cvYAHUZw6W+W9K0= +github.com/gin-contrib/pprof v1.3.0/go.mod h1:waMjT1H9b179t3CxuG1cV3DHpga6ybizwfBaM5OXaB0= github.com/gin-contrib/sessions v0.0.3 h1:PoBXki+44XdJdlgDqDrY5nDVe3Wk7wDV/UCOuLP6fBI= github.com/gin-contrib/sessions v0.0.3/go.mod h1:8C/J6cad3Il1mWYYgtw0w+hqasmpvy25mPkXdOgeB9I= github.com/gin-contrib/sse v0.0.0-20170109093832-22d885f9ecc7/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s= @@ -112,13 +123,20 @@ github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm github.com/gin-gonic/gin v1.3.0/go.mod h1:7cKuhb5qV2ggCFctp2fJQ+ErvciLZrIeoOSOm6mUr7Y= github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM= github.com/gin-gonic/gin v1.5.0/go.mod h1:Nd6IXA8m5kNZdNEHMBd93KT+mdY3+bewLgRvmCsR2Do= +github.com/gin-gonic/gin v1.6.2/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= -github.com/gin-gonic/gin v1.7.0 h1:jGB9xAJQ12AIGNB4HguylppmDK1Am9ppF7XnGXXJuoU= -github.com/gin-gonic/gin v1.7.0/go.mod h1:jD2toBW3GZUr5UMcdrwQA10I7RuaFOl/SGeDjXkfUtY= +github.com/gin-gonic/gin v1.7.3 h1:aMBzLJ/GMEYmv1UWs2FFTcPISLrQH2mRgL9Glz8xows= +github.com/gin-gonic/gin v1.7.3/go.mod h1:jD2toBW3GZUr5UMcdrwQA10I7RuaFOl/SGeDjXkfUtY= github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= 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/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= +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-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= @@ -149,8 +167,8 @@ github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD87 github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4= -github.com/go-playground/validator/v10 v10.7.0 h1:gLi5ajTBBheLNt0ctewgq7eolXoDALQd5/y90Hh9ZgM= -github.com/go-playground/validator/v10 v10.7.0/go.mod h1:xm76BBt941f7yWdGnI2DVPFFg1UK3YY04qifoXU3lOk= +github.com/go-playground/validator/v10 v10.8.0 h1:1kAa0fCrnpv+QYdkdcRzrRM7AyYs5o8+jZdJCz9xj6k= +github.com/go-playground/validator/v10 v10.8.0/go.mod h1:9JhgTzTaE31GZDpH/HSvHiRJrJ3iKAgqqH0Bl/Ocjdk= github.com/go-redis/redis v6.15.9+incompatible h1:K0pv1D7EQUjfyoMql+r/jZqCLizCGKFlFgcHWWmHQjg= github.com/go-redis/redis v6.15.9+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= @@ -161,6 +179,7 @@ github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg78 github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gofrs/uuid v3.2.0+incompatible h1:y12jRkkFxsd7GpqdSZ+/KCs/fJbqpEXSGd4+jfEaewE= github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZkZR4hgp4KJVfY3nMkvmwbVkpv1rVY= github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= @@ -240,6 +259,8 @@ github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+ github.com/gorilla/sessions v1.1.1/go.mod h1:8KCfur6+4Mqcc6S0FEfKuN15Vl5MgXW92AE8ovaJD0w= github.com/gorilla/sessions v1.1.3 h1:uXoZdcdA5XdXF3QzuSlheVRUvjl+1rKY7zBXL68L9RU= github.com/gorilla/sessions v1.1.3/go.mod h1:8KCfur6+4Mqcc6S0FEfKuN15Vl5MgXW92AE8ovaJD0w= +github.com/gphper/ginmonitor v0.0.0-20210807082039-bcf719990984 h1:C28hGJNcasYUFicaoSPGYre6RX0Pjo5TmS89kt/pPsc= +github.com/gphper/ginmonitor v0.0.0-20210807082039-bcf719990984/go.mod h1:B6sELtl3/ZHJjnDdEFShdNw+qwbvf9txxkifN66rpxo= github.com/gphper/multitemplate v0.1.0 h1:xq74kEE9B3GpQTmKQV6PjgwoIkkyDJ9bkPb0LItj4p4= github.com/gphper/multitemplate v0.1.0/go.mod h1:ZkVyEKpTMDjhzFOPmQKumd3mUmnPa8XsmnzuySDLhyE= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= @@ -329,22 +350,28 @@ github.com/jonboulle/clockwork v0.2.2 h1:UOGuzwb1PwsrDAObMuhUnj0p5ULPj8V/xJ7Kx9q github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= 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/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/json-iterator/go v1.1.5/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= 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.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.11 h1:uVUAXhF2To8cbw/3xN3pxj6kk7TYKs98NIrTqPlMWAQ= github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= 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/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/kidstuff/mongostore v0.0.0-20181113001930-e650cd85ee4b/go.mod h1:g2nVr8KZVXJSS97Jo8pJ0jgq29P6H7dG0oplUA86MQw= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= 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/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= 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/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= @@ -384,8 +411,11 @@ github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hd 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 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-isatty v0.0.13 h1:qdl+GuBjcsKKDco5BsxPJlId98mSWNKqYA+Co0SC1yA= +github.com/mattn/go-isatty v0.0.13/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/memcachier/mc v2.0.1+incompatible/go.mod h1:7bkvFE61leUBvXz+yxsOnGBQSZpBSPIMUQSmmSHvuXc= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= @@ -404,6 +434,8 @@ github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9 github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= 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/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= @@ -419,13 +451,33 @@ github.com/onsi/gomega v1.16.0 h1:6gjqkI8iiRHMvdccRJM8rVKjCWk6ZIm6FTm3ddIe4/c= github.com/onsi/gomega v1.16.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= +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/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= 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= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= +github.com/prometheus/client_golang v1.11.0 h1:HNkLOAEQMIDv/K+04rukrLx6ch7msSRwf3/SASFAGtQ= +github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/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.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= +github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= +github.com/prometheus/common v0.26.0 h1:iMAkS2TDoNWnKM+Kopnx/8tnEStIfpYA0ur0xQzzhMQ= +github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3xv4= +github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/quasoft/memstore v0.0.0-20180925164028-84a050167438/go.mod h1:wTPjTepVu7uJBYgZ0SdWHQlIas582j6cn2jgk4DDdlg= github.com/robfig/cron v1.2.0 h1:ZjScXvvxeQ63Dbyxy76Fj3AT3Ut0aKsyd2/tl3DTMuQ= github.com/robfig/cron v1.2.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k= @@ -442,8 +494,10 @@ github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9Nz github.com/shopspring/decimal v0.0.0-20200227202807-02e2044944cc h1:jUIKcSPO9MoMJBbEoyE/RJoE8vz7Mb8AjvifMMwSyvY= github.com/shopspring/decimal v0.0.0-20200227202807-02e2044944cc/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/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= 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= @@ -476,13 +530,13 @@ github.com/swaggo/swag v1.7.0/go.mod h1:BdPIL73gvS9NBsdi7M1JOxLvlbfvNRaBP8m6WT6A github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= github.com/ugorji/go v1.1.13/go.mod h1:jxau1n+/wyTGLQoCkjok9r5zFa/FxT6eI5HiHKQszjc= -github.com/ugorji/go v1.2.4 h1:cTciPbZ/VSOzCLKclmssnfQ/jyoVyOcJ3aoJyUV1Urc= -github.com/ugorji/go v1.2.4/go.mod h1:EuaSCk8iZMdIspsu6HXH7X2UGKw1ezO4wCfGszGmmo4= +github.com/ugorji/go v1.2.6 h1:tGiWC9HENWE2tqYycIqFTNorMmFRVhNwCpDOpWqnk8E= +github.com/ugorji/go v1.2.6/go.mod h1:anCg0y61KIhDlPZmnH+so+RQbysYVyDko0IMgJv0Nn0= github.com/ugorji/go/codec v0.0.0-20181022190402-e5e69e061d4f/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= github.com/ugorji/go/codec v1.1.13/go.mod h1:oNVt3Dq+FO91WNQ/9JnHKQP2QJxTzoN7wCBFCq1OeuU= -github.com/ugorji/go/codec v1.2.4 h1:C5VurWRRCKjuENsbM6GYVw8W++WVW9rSxoACKIvxzz8= -github.com/ugorji/go/codec v1.2.4/go.mod h1:bWBu1+kIRWcF8uMklKaJrR6fTWQOwAlrIzX22pHwryA= +github.com/ugorji/go/codec v1.2.6 h1:7kbGefxLoDBuYXOms4yD7223OpNMMPNPZxXk5TvFcyQ= +github.com/ugorji/go/codec v1.2.6/go.mod h1:V6TCNZ4PHqoHGFZuSG1W8nrCzzdgA2DozYxWFFpvxTw= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -515,6 +569,7 @@ 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.17.0 h1:MTjgFu6ZLKvY6Pvaqk97GlxNBuMpV4Hy/3P6tRGlI2U= go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= +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-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= @@ -526,8 +581,8 @@ golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8U 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-20210220033148-5ea612d1eb83 h1:/ZScEX8SfEmUGRHs0gxpqteO5nfNW6axyZbBdw9A12g= -golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97 h1:/UOmuWzQfxxo9UtlXMwuQU8CMgg1eZXqTRwkSQJWKOI= +golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= 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= @@ -572,6 +627,7 @@ golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181005035420-146acd28ed58/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= @@ -582,6 +638,7 @@ golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn 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-20190611141213-3f473d35a33a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +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= @@ -642,6 +699,7 @@ golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 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-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181228144115-9a3f9b0469bb/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= @@ -660,10 +718,10 @@ golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/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-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/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= @@ -677,6 +735,8 @@ golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7w 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-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/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= @@ -685,6 +745,7 @@ golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7w 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-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -694,9 +755,10 @@ golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210420072515-93ed5bcd2bfe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c h1:F1jZWGFhYfh0Ci55sIpILtKKK8p3i2/krTr0H1rg74I= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -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/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -879,10 +941,13 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD 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 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= 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-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= @@ -899,6 +964,7 @@ 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.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/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= diff --git a/internal/cli/db/migra.go b/internal/cli/db/migra.go deleted file mode 100644 index a6ed542..0000000 --- a/internal/cli/db/migra.go +++ /dev/null @@ -1,76 +0,0 @@ -/* - * @Description: - * @Author: gphper - * @Date: 2021-07-04 15:11:11 - */ -package db - -import ( - "errors" - "fmt" - "github/gphper/ginadmin/internal/models" - "github/gphper/ginadmin/pkg/comment" - "os" - "os/exec" - - "github.com/spf13/cobra" -) - -var cmdMigrate = &cobra.Command{ - Use: "migrate [-t table]", - Short: "DB Migrate", - Run: migrateFunc, -} - -var table string - -func init() { - cmdMigrate.Flags().StringVarP(&table, "table", "t", "", "input a table name") -} - -func migrateFunc(cmd *cobra.Command, args []string) { - var err error - if len(args) != 0 && args[0] == "real" { - err = realExec() - } else { - err = execSelf() - } - - if err != nil { - fmt.Println("migrate database fail:", err.Error()) - } -} - -func realExec() error { - var err error - modelss := models.GetModels() - if len(table) == 0 { - err = models.Db.Set("gorm:table_options", "ENGINE=InnoDB").AutoMigrate(modelss...) - } else { - var tableExit bool = false - for _, v := range modelss { - tabler := v.(models.GaTabler) - if tabler.TableName() == table { - tableExit = true - err = models.Db.Set("gorm:table_options", "ENGINE=InnoDB").AutoMigrate(v) - } - } - if !tableExit { - err = errors.New("data table information does not exist") - } - } - return err -} - -func execSelf() error { - var out []byte - var err error - rootPath, _ := comment.RootPath() - cmd := exec.Command("go", "run", rootPath+"\\cmd\\ginadmin-cli\\ginadmin-cli.go", "db", "migrate", "real") - if out, err = cmd.CombinedOutput(); err != nil { - fmt.Println(err.Error()) - os.Exit(2) - } - _ = out - return err -} diff --git a/internal/cli/db/root.go b/internal/cli/db/root.go deleted file mode 100644 index a08d0fa..0000000 --- a/internal/cli/db/root.go +++ /dev/null @@ -1,18 +0,0 @@ -package db - -import ( - "github.com/spf13/cobra" -) - -var CmdDb = &cobra.Command{ - Use: "db [Database Operation]", - Short: "Database Operation", - Args: cobra.MinimumNArgs(1), - Run: func(cmd *cobra.Command, args []string) { - cmd.Help() - }, -} - -func init() { - CmdDb.AddCommand(cmdMigrate, cmdSeed) -} diff --git a/internal/cli/db/seed.go b/internal/cli/db/seed.go deleted file mode 100644 index 464c87e..0000000 --- a/internal/cli/db/seed.go +++ /dev/null @@ -1,78 +0,0 @@ -/* - * @Description: - * @Author: gphper - * @Date: 2021-07-04 15:11:11 - */ -package db - -import ( - "fmt" - "github/gphper/ginadmin/internal/models" - "github/gphper/ginadmin/pkg/comment" - "os" - "os/exec" - - "github.com/spf13/cobra" -) - -var cmdSeed = &cobra.Command{ - Use: "seed [-t table]", - Short: "DB Seed", - Run: seedFunc, -} - -var tableSeed string - -func init() { - cmdSeed.Flags().StringVarP(&tableSeed, "table", "t", "", "input a table name") -} - -func seedFunc(cmd *cobra.Command, args []string) { - - var err error - if len(args) != 0 && args[0] == "real" { - err = realExecSeed() - } else { - err = execSelfSeed() - } - - if err != nil { - fmt.Printf("migrate database fail:%s", err.Error()) - } -} - -func realExecSeed() error { - modelss := models.GetModels() - if len(table) == 0 { - for _, v := range modelss { - tabler := v.(models.GaTabler) - tabler.FillData() - } - } else { - var tableExit bool = false - for _, v := range modelss { - tabler := v.(models.GaTabler) - if tabler.TableName() == tableSeed { - tableExit = true - tabler.FillData() - } - } - if !tableExit { - fmt.Println("data table information does not exist") - } - } - return nil -} - -func execSelfSeed() error { - var out []byte - var err error - rootPath, _ := comment.RootPath() - cmd := exec.Command("go", "run", rootPath+"\\cmd\\ginadmin-cli\\ginadmin-cli.go", "db", "seed", "real") - if out, err = cmd.CombinedOutput(); err != nil { - fmt.Println(err.Error()) - os.Exit(2) - } - _ = out - return err -} diff --git a/internal/cli/file/controller.go b/internal/cli/file/controller.go deleted file mode 100644 index e419a75..0000000 --- a/internal/cli/file/controller.go +++ /dev/null @@ -1,104 +0,0 @@ -package file - -import ( - "fmt" - "github/gphper/ginadmin/pkg/comment" - "html/template" - "os" - "strings" - - "github.com/spf13/cobra" -) - -type CParams struct { - ClassName string - Pagename string - Methods []string -} - -var controllerStr string = `package {{.Pagename}} - -import ( - "github/gphper/ginadmin/controllers" - "github.com/gin-gonic/gin" -) - -type {{.ClassName}} struct { - controllers.BaseController -} - -{{range .Methods}} -func (con *{{$.ClassName}}) {{.}}() gin.HandlerFunc { - return func(c *gin.Context) { - - } -} -{{end}} -` - -var cmdController = &cobra.Command{ - Use: "controller [-p pagename -c controllerName -l methods]", - Short: "create controller file", - Run: controllerFunc, -} - -var ( - pagename string - controllerName string - methods string -) - -func init() { - cmdController.Flags().StringVarP(&pagename, "pagename", "p", "", "input pagename eg: setting") - cmdController.Flags().StringVarP(&controllerName, "controllerName", "c", "", "input controller name eg: AdminController") - cmdController.Flags().StringVarP(&methods, "methods", "m", "", "input methods eg: index,add,del") -} - -func controllerFunc(cmd *cobra.Command, args []string) { - if len(pagename) == 0 || len(controllerName) == 0 { - cmd.Help() - return - } - err := writeController() - if err != nil { - fmt.Printf("[error] %s", err.Error()) - return - } -} - -func writeController() error { - parms := CParams{ - ClassName: controllerName, - Pagename: pagename, - } - - mSlice := strings.Split(methods, ",") - if len(mSlice) != 0 { - parms.Methods = mSlice - } - - path, _ := comment.RootPath() - - basePath := path + "\\controllers\\" + pagename - _, err := os.Lstat(basePath) - if err != nil { - os.Mkdir(basePath, os.ModeDir) - } - - newPath := basePath + "\\" + controllerName + ".go" - _, err = os.Lstat(newPath) - if err == nil { - return fmt.Errorf("%s file already exist", controllerName+".go") - } - - file, err := os.Create(newPath) - if err != nil { - cobra.CompError(err.Error()) - return err - } - defer file.Close() - - tem, _ := template.New("controller_file").Parse(controllerStr) - tem.ExecuteTemplate(file, "controller_file", parms) - return nil -} diff --git a/internal/cli/file/model.go b/internal/cli/file/model.go deleted file mode 100644 index 220874c..0000000 --- a/internal/cli/file/model.go +++ /dev/null @@ -1,135 +0,0 @@ -package file - -import ( - "bufio" - "errors" - "fmt" - "github/gphper/ginadmin/pkg/comment" - "html/template" - "io" - "os" - "strings" - - "github.com/spf13/cobra" -) - -type Params struct { - Name string - Table string - Short string -} - -var modelStr string = `package models - -type {{.Name}} struct { - BaseModle -} - -func ({{.Short}} *{{.Name}}) TableName() string { - return "{{.Table}}" -} - -func ({{.Short}} *{{.Name}}) FillData() { - -} -` - -var cmdModel = &cobra.Command{ - Use: "model [-m modelName]", - Short: "create model", - Run: modelFunc, -} - -var modelName string - -func init() { - cmdModel.Flags().StringVarP(&modelName, "model", "m", "", "input model name eg: shop_items") -} - -func modelFunc(cmd *cobra.Command, args []string) { - if len(modelName) == 0 { - cmd.Help() - return - } - fileName, firstName := comment.StrFirstToUpper(modelName) - err := writeModel(fileName, firstName) - - if err != nil { - fmt.Printf("[error] %s", err.Error()) - return - } - modifyDefault(fileName) -} - -func writeModel(fileName string, firstName string) error { - - parms := Params{ - Name: fileName, - Table: modelName, - Short: firstName, - } - - path, _ := comment.RootPath() - newPath := path + "\\models\\" + fileName + ".go" - _, err := os.Lstat(newPath) - if err == nil { - return errors.New("file already exist") - } - - file, err := os.Create(newPath) - if err != nil { - cobra.CompError(err.Error()) - return err - } - defer file.Close() - - tem, _ := template.New("models_file").Parse(modelStr) - tem.ExecuteTemplate(file, "models_file", parms) - return nil -} - -func modifyDefault(fileName string) { - path, _ := comment.RootPath() - oldPath := path + "\\models\\default.go" - newPath := path + "\\models\\default_tmp.go" - file, err := os.Open(oldPath) - if err != nil { - cobra.CompError(err.Error()) - } - - reader := bufio.NewReader(file) - - file_tmp, _ := os.Create(newPath) - var flagTag int - for { - bytes, err := reader.ReadBytes('\n') - if err == io.EOF { - break - } - - if strings.Contains(string(bytes), "GetModels") { - flagTag++ - } - - if flagTag > 0 { - flagTag++ - } - - if flagTag == 4 { - file_tmp.Write([]byte("\t\t&" + fileName + "{},\n")) - } - - file_tmp.Write(bytes) - } - file.Close() - file_tmp.Close() - - err = os.Remove(oldPath) - if err != nil { - cobra.CompError(err.Error()) - } - err = os.Rename(newPath, oldPath) - if err != nil { - cobra.CompError(err.Error()) - } -} diff --git a/internal/cli/file/root.go b/internal/cli/file/root.go deleted file mode 100644 index 0e1a6b8..0000000 --- a/internal/cli/file/root.go +++ /dev/null @@ -1,17 +0,0 @@ -package file - -import "github.com/spf13/cobra" - -var CmdFile = &cobra.Command{ - Use: "file [File Operation]", - Short: "File Operation", - Args: cobra.MinimumNArgs(1), - Run: func(cmd *cobra.Command, args []string) { - cmd.Help() - }, -} - -func init() { - CmdFile.AddCommand(cmdModel) - CmdFile.AddCommand(cmdController) -} diff --git a/internal/controllers/admin/homeController.go b/internal/controllers/admin/homeController.go index 4c1696a..1d27c40 100644 --- a/internal/controllers/admin/homeController.go +++ b/internal/controllers/admin/homeController.go @@ -79,6 +79,12 @@ func (con *homeController) SavePassword(c *gin.Context) { err error ) con.FormBind(c, &req) + + if req.Uid == 1 { + con.Error(c, "演示站点禁止修改测试账号密码") + return + } + err = services.AuService.EditPass(req) if err != nil { @@ -112,3 +118,9 @@ func (con *homeController) SaveSkin(c *gin.Context) { c.JSON(http.StatusOK, skinReq) } + +func (con *homeController) GinMon(c *gin.Context) { + c.HTML(http.StatusOK, "home/ginmon.html", gin.H{ + "title": "", + }) +} diff --git a/internal/menu/menu.go b/internal/menu/menu.go index 21708cd..25fe819 100644 --- a/internal/menu/menu.go +++ b/internal/menu/menu.go @@ -143,6 +143,36 @@ func GetMenu() []Menu { }, }, }, + { + MenuText: "性能监控", + MenuPriv: "ginmonitor", + MenuPrivAct: "get", + MenuIcon: "mdi mdi-elevation-rise", + Nodes: []Node{ + { + NodeText: "监控说明", + NodeUrl: "/admin/home/ginmonitor", + NodePriv: "/admin/home/ginmonitor", + NodePrivAct: "get", + PrivChild: []NodeSon{}, + }, + }, + }, + { + MenuText: "API文档", + MenuPriv: "apidoc", + MenuPrivAct: "get", + MenuIcon: "mdi mdi-json", + Nodes: []Node{ + { + NodeText: "地址链接", + NodeUrl: "/swagger/index.html", + NodePriv: "/swagger/index.html", + NodePrivAct: "get", + PrivChild: []NodeSon{}, + }, + }, + }, } return MenuList } diff --git a/internal/middleware/httperr.go b/internal/middleware/httperr.go index aaea72d..1a0e9a6 100644 --- a/internal/middleware/httperr.go +++ b/internal/middleware/httperr.go @@ -6,8 +6,10 @@ package middleware import ( + "github/gphper/ginadmin/internal/redis" "net/http" "strings" + "time" "github.com/gin-gonic/gin" ) @@ -15,6 +17,9 @@ import ( func NotHttpStatusOk() gin.HandlerFunc { return func(c *gin.Context) { + key := time.Now().Format("20060102") + redis.RedisClient.SAdd(key, c.ClientIP()).Result() + c.Next() if c.Writer.Status() > 399 { diff --git a/internal/middleware/metrics.go b/internal/middleware/metrics.go new file mode 100644 index 0000000..7bec432 --- /dev/null +++ b/internal/middleware/metrics.go @@ -0,0 +1,29 @@ +/* + * @Description: + * @Author: gphper + * @Date: 2021-08-04 22:39:47 + */ +package middleware + +import ( + "strconv" + "time" + + "github.com/gin-gonic/gin" + gapro "github.com/gphper/ginmonitor/prometheus" + "github.com/prometheus/client_golang/prometheus" +) + +func Metrics() gin.HandlerFunc { + return func(c *gin.Context) { + startTime := time.Now() + //统计qps + gapro.HttpRequestCounter.With(prometheus.Labels{"method": c.Request.Method, "path": c.FullPath()}).Inc() + c.Next() + endTime := time.Now() + //统计相应时长 + gapro.HttpRquestTime.With(prometheus.Labels{"method": c.Request.Method, "path": c.FullPath()}).Set(float64(endTime.Sub(startTime))) + //统计相应状态 + gapro.HttpRquestStatus.With(prometheus.Labels{"method": c.Request.Method, "path": c.FullPath(), "status": strconv.Itoa(c.Writer.Status())}).Inc() + } +} diff --git a/internal/router/admin_router.go b/internal/router/admin_router.go index e8334bb..d7b3274 100644 --- a/internal/router/admin_router.go +++ b/internal/router/admin_router.go @@ -37,6 +37,7 @@ func AdminRouter(adminRouter *gin.RouterGroup) { adminHomeRouter.GET("/edit_password", admin.Hc.EditPassword) adminHomeRouter.POST("/save_password", admin.Hc.SavePassword) adminHomeRouter.POST("/save_skin", admin.Hc.SaveSkin) + adminHomeRouter.GET("/ginmonitor", admin.Hc.GinMon) } adminSettingRouter := adminRouter.Group("/setting") diff --git a/internal/router/default.go b/internal/router/default.go index bb93e40..9c9129a 100644 --- a/internal/router/default.go +++ b/internal/router/default.go @@ -18,6 +18,9 @@ import ( "os" "github.com/gin-contrib/gzip" + "github.com/prometheus/client_golang/prometheus/promhttp" + + "github.com/gin-contrib/pprof" "github.com/gin-gonic/gin" ) @@ -29,14 +32,16 @@ func Init() *gin.Engine { router := gin.Default() - router.Use(gzip.Gzip(gzip.DefaultCompression)) - + router.Use(gzip.Gzip(gzip.DefaultCompression, gzip.WithExcludedPaths([]string{"/api/", "/metrics"}))) + router.Use(middleware.Metrics()) prep(router) // router.Use(medium.GinLog(facade.NewZaplog("admin"), time.RFC3339, true), medium.RecoveryWithLog(facade.NewZaplog("admin"), true)) router.Use(middleware.NotHttpStatusOk()) router.Use(medium.GinLog(facade.NewRedisLog("admin"), time.RFC3339, true), medium.RecoveryWithLog(facade.NewRedisLog("admin"), true)) /*****admin路由定义******/ + router.GET("/metrics", gin.WrapH(promhttp.Handler())) + adminRouter := router.Group("/admin") AdminRouter(adminRouter) @@ -46,6 +51,8 @@ func Init() *gin.Engine { ApiRouter(apiRouter) + pprof.Register(router) + return router } diff --git a/pkg/cron/cron.go b/pkg/cron/cron.go index eca259d..db3601b 100644 --- a/pkg/cron/cron.go +++ b/pkg/cron/cron.go @@ -1,3 +1,8 @@ +/* + * @Description: + * @Author: gphper + * @Date: 2021-09-16 19:55:23 + */ package cron import ( @@ -6,7 +11,8 @@ import ( func init() { crontab := cron.New() - //crontab.AddFunc("* * * * * *", myfunc) + //凌晨一点执行日志落盘 + crontab.AddFunc("0 0 1 * * *", WriteLog) crontab.Start() } diff --git a/pkg/cron/log.go b/pkg/cron/log.go index 893459a..edf37f7 100644 --- a/pkg/cron/log.go +++ b/pkg/cron/log.go @@ -19,7 +19,8 @@ import ( * 创建目录 **/ func WriteLog() { - date := time.Now().Local().Format("20060102") + + date := time.Now().AddDate(0, 0, -2).Local().Format("20060102") pattern := "logs:" + date + ":*" keys, _ := globalRedis.RedisClient.Keys(pattern).Result() diff --git a/pkg/loggers/medium/medium.go b/pkg/loggers/medium/medium.go index b972f4c..1a0f882 100644 --- a/pkg/loggers/medium/medium.go +++ b/pkg/loggers/medium/medium.go @@ -26,34 +26,39 @@ func GinLog(logger facade.Log, timeFormat string, utc bool) gin.HandlerFunc { path := c.Request.URL.Path query := c.Request.URL.RawQuery - c.Next() - end := time.Now() - latency := end.Sub(start) - if utc { - end = end.UTC() - } + c.Next() - if len(c.Errors) > 0 { - infoMap := make(map[string]string, len(c.Errors)) - for ek, e := range c.Errors.Errors() { - infoMap[strconv.Itoa(ek)] = e + ok := strings.Contains(path, "/statics") + if c.ClientIP() != "127.0.0.1" && !ok { + end := time.Now() + latency := end.Sub(start) + if utc { + end = end.UTC() } - logger.Error("error msg", infoMap) - } else { - - logger.Info(path, map[string]string{ - "status": strconv.Itoa(c.Writer.Status()), - "method": c.Request.Method, - "path": path, - "query": query, - "ip": c.ClientIP(), - "user-agent": c.Request.UserAgent(), - "time": end.Format(timeFormat), - "latency": latency.String(), - }) + if len(c.Errors) > 0 { + infoMap := make(map[string]string, len(c.Errors)) + for ek, e := range c.Errors.Errors() { + infoMap[strconv.Itoa(ek)] = e + } + logger.Error("error msg", infoMap) + } else { + + logger.Info(path, map[string]string{ + "status": strconv.Itoa(c.Writer.Status()), + "method": c.Request.Method, + "path": path, + "query": query, + "ip": c.ClientIP(), + "user-agent": c.Request.UserAgent(), + "time": end.Format(timeFormat), + "latency": latency.String(), + }) + + } } + } } diff --git a/web/statics/images/prome1.jpg b/web/statics/images/prome1.jpg new file mode 100644 index 0000000..16e2c0d Binary files /dev/null and b/web/statics/images/prome1.jpg differ diff --git a/web/statics/images/prome2.jpg b/web/statics/images/prome2.jpg new file mode 100644 index 0000000..b43e168 Binary files /dev/null and b/web/statics/images/prome2.jpg differ diff --git a/web/views/template/home/ginmon.html b/web/views/template/home/ginmon.html new file mode 100644 index 0000000..e671cef --- /dev/null +++ b/web/views/template/home/ginmon.html @@ -0,0 +1,100 @@ +{{define "head"}} + +{{end}} + +{{define "body"}} +
http://122.152.196.83:3000/
+账号:123456@qq.com 密码:test
+