added http methods

This commit is contained in:
tzwang 2025-06-09 17:52:09 +08:00
parent 1b19cb2837
commit 7624256ae6
14 changed files with 670 additions and 1 deletions

22
go.mod
View File

@ -1,10 +1,14 @@
module gitlink.org.cn/JointCloud/pcm-octopus
go 1.21
go 1.23
toolchain go1.24.0
require (
github.com/gin-gonic/gin v1.9.0
github.com/go-redis/redis v6.15.9+incompatible
github.com/go-resty/resty/v2 v2.10.0
github.com/smartystreets/goconvey v1.8.1
github.com/zeromicro/go-zero v1.6.0
gitlink.org.cn/JointCloud/pcm-coordinator v0.0.0-20240301032931-d8d63c116dda
gitlink.org.cn/jcce-pcm/utils v0.0.1
@ -14,20 +18,27 @@ require (
require (
github.com/beorn7/perks v1.0.1 // indirect
github.com/bytedance/sonic v1.8.0 // indirect
github.com/cenkalti/backoff/v4 v4.2.1 // indirect
github.com/cespare/xxhash/v2 v2.2.0 // indirect
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect
github.com/coreos/go-semver v0.3.1 // indirect
github.com/coreos/go-systemd/v22 v22.5.0 // indirect
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
github.com/emicklei/go-restful/v3 v3.11.0 // indirect
github.com/fatih/color v1.16.0 // indirect
github.com/gin-contrib/sse v0.1.0 // indirect
github.com/go-logr/logr v1.3.0 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-openapi/jsonpointer v0.20.0 // indirect
github.com/go-openapi/jsonreference v0.20.2 // indirect
github.com/go-openapi/swag v0.22.4 // 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.11.2 // indirect
github.com/go-redis/redis/v8 v8.11.5 // indirect
github.com/goccy/go-json v0.10.0 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/mock v1.6.0 // indirect
github.com/golang/protobuf v1.5.4 // indirect
@ -35,10 +46,14 @@ require (
github.com/google/go-cmp v0.6.0 // indirect
github.com/google/gofuzz v1.2.0 // indirect
github.com/google/uuid v1.6.0 // indirect
github.com/gopherjs/gopherjs v1.17.2 // indirect
github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1 // indirect
github.com/jinzhu/copier v0.4.0 // indirect
github.com/josharian/intern v1.0.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/jtolds/gls v4.20.0+incompatible // indirect
github.com/klauspost/cpuid/v2 v2.0.9 // indirect
github.com/leodido/go-urn v1.2.1 // indirect
github.com/mailru/easyjson v0.7.7 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
@ -54,7 +69,10 @@ require (
github.com/prometheus/common v0.45.0 // indirect
github.com/prometheus/procfs v0.12.0 // indirect
github.com/robfig/cron/v3 v3.0.1 // indirect
github.com/smarty/assertions v1.15.0 // indirect
github.com/spaolacci/murmur3 v1.1.0 // indirect
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
github.com/ugorji/go/codec v1.2.9 // indirect
go.etcd.io/etcd/api/v3 v3.5.11 // indirect
go.etcd.io/etcd/client/pkg/v3 v3.5.11 // indirect
go.etcd.io/etcd/client/v3 v3.5.11 // indirect
@ -72,6 +90,8 @@ require (
go.uber.org/automaxprocs v1.5.3 // indirect
go.uber.org/multierr v1.11.0 // indirect
go.uber.org/zap v1.26.0 // indirect
golang.org/x/arch v0.0.0-20210923205945-b76863e36670 // indirect
golang.org/x/crypto v0.21.0 // indirect
golang.org/x/net v0.22.0 // indirect
golang.org/x/oauth2 v0.18.0 // indirect
golang.org/x/sys v0.18.0 // indirect

43
go.sum
View File

@ -4,10 +4,16 @@ github.com/alicebob/miniredis/v2 v2.31.0 h1:ObEFUNlJwoIiyjxdrYF0QIDE7qXcLc7D3WpS
github.com/alicebob/miniredis/v2 v2.31.0/go.mod h1:UB/T2Uztp7MlFSDakaX1sTXUv5CASoprx0wulRT6HBg=
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/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM=
github.com/bytedance/sonic v1.8.0 h1:ea0Xadu+sHlu7x5O3gKhRpQ1IKiMrSiHttPF0ybECuA=
github.com/bytedance/sonic v1.8.0/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U=
github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY=
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams=
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk=
github.com/coreos/go-semver v0.3.1 h1:yi21YpKnrx1gt5R+la8n5WgS0kCrsPp33dmEyHReZr4=
github.com/coreos/go-semver v0.3.1/go.mod h1:irMmmIw/7yzSRPWryHsK7EYSg09caPQL03VsM8rvUec=
github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs=
@ -25,6 +31,10 @@ github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM=
github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE=
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/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
github.com/gin-gonic/gin v1.9.0 h1:OjyFBKICoexlu99ctXNR2gg+c5pKrKMuyjgARg9qeY8=
github.com/gin-gonic/gin v1.9.0/go.mod h1:W1Me9+hsUSyj3CePGrd1/QrKJMSJ1Tu/0hFEH89961k=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
@ -38,6 +48,14 @@ github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En
github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14=
github.com/go-openapi/swag v0.22.4 h1:QLMzNJnMGPRNDCbySlcj1x01tzU8/9LTTL9hZZZogBU=
github.com/go-openapi/swag v0.22.4/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14=
github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s=
github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA=
github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY=
github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY=
github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=
github.com/go-playground/validator/v10 v10.11.2 h1:q3SHpufmypg+erIExEKUmsgmhDTyhcJ38oeKGACXohU=
github.com/go-playground/validator/v10 v10.11.2/go.mod h1:NieE624vt4SCTJtD87arVLvdmjPAeV8BQlHtMnw9D7s=
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-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI=
@ -46,6 +64,8 @@ github.com/go-resty/resty/v2 v2.10.0 h1:Qla4W/+TMmv0fOeeRqzEpXPLfTUnR5HZ1+lGs+Ck
github.com/go-resty/resty/v2 v2.10.0/go.mod h1:iiP/OpA0CkcL3IGt1O0+/SIItFUbkkyw5BGXiVdTu+A=
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI=
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls=
github.com/goccy/go-json v0.10.0 h1:mXKd9Qw4NuzShiRlOXKews24ufknHO7gx30lsDyokKA=
github.com/goccy/go-json v0.10.0/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
@ -68,6 +88,8 @@ github.com/google/pprof v0.0.0-20211214055906-6f57359322fd h1:1FjCyPC+syAzJ5/2S8
github.com/google/pprof v0.0.0-20211214055906-6f57359322fd/go.mod h1:KgnwoLYCZ8IQu3XUZ8Nc/bM9CCZFOyjUNOSygVozoDg=
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/gopherjs/gopherjs v1.17.2 h1:fQnZVsXk8uxXIStYb0N4bGk7jeyTalG/wsZjQ25dO0g=
github.com/gopherjs/gopherjs v1.17.2/go.mod h1:pRRIvn/QzFLrKfvEz3qUuEhtE/zLCWfreZ6J5gM2i+k=
github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1 h1:6UKoz5ujsI55KNpsJH3UwCq3T8kKbZwNZBNPuTTje8U=
github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1/go.mod h1:YvJ2f6MplWDhfxiUC3KpyTy76kYUZA4W3pTv/wdKQ9Y=
github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542 h1:2VTzZjLZBgl62/EtslCrtky5vbi9dd7HrQPQIx6wqiw=
@ -78,8 +100,12 @@ github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8Hm
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/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/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/klauspost/cpuid/v2 v2.0.9 h1:lgaqFMSdTdQYdZ04uHyN2d/eKdOMyi2YLSvlQIBFYa4=
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
@ -87,6 +113,8 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w=
github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY=
github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
@ -133,6 +161,10 @@ 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/smarty/assertions v1.15.0 h1:cR//PqUBUiQRakZWqBiFFQ9wb8emQGDb0HeGdqGByCY=
github.com/smarty/assertions v1.15.0/go.mod h1:yABtdzeQs6l1brC900WlRNwj6ZR55d7B+E8C6HtKdec=
github.com/smartystreets/goconvey v1.8.1 h1:qGjIddxOk4grTu9JPOU31tVfq3cNdBlNa5sSznIX1xY=
github.com/smartystreets/goconvey v1.8.1/go.mod h1:+/u4qLyY6x1jReYOp7GOM2FSt8aP9CzCZL03bI28W60=
github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI=
github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
@ -142,11 +174,17 @@ github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSS
github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=
github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=
github.com/ugorji/go/codec v1.2.9 h1:rmenucSohSTiyL09Y+l2OCk+FrMxGMzho2+tjr5ticU=
github.com/ugorji/go/codec v1.2.9/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
@ -195,11 +233,15 @@ 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.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
golang.org/x/arch v0.0.0-20210923205945-b76863e36670 h1:18EFjUmQOcUvxNYSkA6jO9VAiXCnxFY6NyDX0bHDmkU=
golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA=
golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
@ -312,6 +354,7 @@ k8s.io/kube-openapi v0.0.0-20231206194836-bf4651e18aa8 h1:vzKzxN5uyJZLY8HL1/OovW
k8s.io/kube-openapi v0.0.0-20231206194836-bf4651e18aa8/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA=
k8s.io/utils v0.0.0-20231127182322-b307cd553661 h1:FepOBzJ0GXm8t0su67ln2wAZjbQ6RxQGZDnzuLcrUTI=
k8s.io/utils v0.0.0-20231127182322-b307cd553661/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=

View File

@ -0,0 +1 @@
package apis

View File

@ -0,0 +1,81 @@
package common
const (
Forward_Slash = "/"
// auth
GetToken = "openaiserver/v1/authmanage/token"
// algorithm
GetMyAlgorithmList = "openaiserver/v1/algorithmmanage/myalgorithm"
GetAlgorithmApplyList = "openaiserver/v1/algorithmmanage/algorithmapply"
GetAlgorithmFrameworkList = "openaiserver/v1/algorithmmanage/algorithmframework"
DeleteMyAlgorithm = "openaiserver/v1/algorithmmanage/myalgorithm/{algorithmId}"
CreateMyAlgorithm = "openaiserver/v1/algorithmmanage/myalgorithm"
GetAlgorithmList = "openaiserver/v1/algorithmmanage/algorithm/{algorithmId}"
GetAlgorithm = "openaiserver/v1/algorithmmanage/algorithm/{algorithmId}/version/{version}"
DownloadAlgorithm = "openaiserver/v1/algorithmmanage/algorithm/{algorithmId}/version/{version}/download"
DownloadCompress = "openaiserver/v1/algorithmmanage/algorithm/{algorithmId}/version/{version}/downloadcompress"
UploadAlgorithm = "openaiserver/v1/algorithmmanage/algorithm/{algorithmId}/version/{version}/upload"
UploadAlgorithmConfirm = "openaiserver/v1/algorithmmanage/algorithm/{algorithmId}/version/{version}/uploadconfirm"
// image
CreateImage = "openaiserver/v1/imagemanage/image"
DeleteImage = "openaiserver/v1/imagemanage/image/{imageId}"
GetUserImageList = "openaiserver/v1/imagemanage/userimage"
UploadImage = "openaiserver/v1/imagemanage/image/{imageId}/upload"
UploadImageConfirm = "openaiserver/v1/imagemanage/image/{imageId}/uploadconfirm"
UploadDataSet = "openaiserver/v1/datasetmanage/dataset/{datasetId}/version/{version}/upload"
GetPresetImageList = "openaiserver/v1/imagemanage/preimage"
// dataset
GetMydatasetList = "openaiserver/v1/datasetmanage/mydataset"
CreateDataSet = "openaiserver/v1/datasetmanage/dataset"
DeleteDataSet = "openaiserver/v1/datasetmanage/dataset/{id}"
UploadDataSetConfirm = "openaiserver/v1/datasetmanage/dataset/{datasetId}/version/{version}/uploadconfirm"
CreateDataSetVersion = "openaiserver/v1/datasetmanage/dataset/{datasetId}/version"
DeleteDataSetVersion = "openaiserver/v1/datasetmanage/dataset/{datasetId}/version/{version}"
GetDatasetVersionList = "openaiserver/v1/datasetmanage/dataset/{datasetId}/version"
GetDatasetApplyList = "openaiserver/v1/datasetmanage/datasetapply"
GetDatasetTypeList = "openaiserver/v1/datasetmanage/datasettype"
// notebook
GetNotebookList = "openaiserver/v1/developmanage/notebook"
DeleteNotebook = "openaiserver/v1/developmanage/notebook/{id}"
StartNotebook = "openaiserver/v1/developmanage/notebook/{id}/start"
StopNotebook = "openaiserver/v1/developmanage/notebook/{id}/stop"
CreateNotebook = "openaiserver/v1/developmanage/notebook"
GetNotebook = "openaiserver/v1/developmanage/notebook/{id}"
// train
CreateTrainJob = "openaiserver/v1/trainmanage/trainjob"
GetTrainJobList = "openaiserver/v1/trainmanage/trainjob"
GetTrainJob = "openaiserver/v1/trainmanage/trainjob/{id}"
DeleteTrainJob = "openaiserver/v1/trainmanage/trainjob"
StopTrainJob = "openaiserver/v1/trainmanage/trainjob/{id}/stop"
GetTrainJobEvent = "openaiserver/v1/trainmanage/trainjobevent"
GetTrainJobMetric = "openaiserver/v1/trainmanage/trainjobmetric"
GetTrainJobLog = "log/user/trainjob/{taskId}/{taskNum}/{num}/index.log"
// model
GetMyModelList = "openaiserver/v1/modelmanage/mymodel"
GetModelVersionList = "openaiserver/v1/modelmanage/model/{modelId}"
DeleteMyModel = "openaiserver/v1/modelmanage/mymodel/{modelId}"
DeleteModelVersion = "openaiserver/v1/modelmanage/mymodel/{modelId}/version/{version}"
DownloadModelVersion = "openaiserver/v1/modelmanage/model/{modelId}/version/{version}/download"
// deploy
CreateModelDeploy = "openaiserver/v1/deploymanage/modeldeploy"
GetModelDeployList = "openaiserver/v1/deploymanage/modeldeploy"
GetModelDeploy = "openaiserver/v1/deploymanage/modeldeploy/{id}"
GetModelDeployEvent = "openaiserver/v1/deploymanage/modeldeployevent"
StopModelDeploy = "openaiserver/v1/deploymanage/modeldeploy/{id}/stop"
DeleteModelDeploy = "openaiserver/v1/deploymanage/modeldeploy"
InferModelDeploy = "openaiserver/v1/deploymanage/modeldeploy/infer"
// resource
GetResourceSpecs = "openaiserver/v1/resourcemanage/resourcespec"
// user
GetUserBalance = "openaiserver/v1/billingmanage/user"
)

View File

@ -0,0 +1,53 @@
package common
import (
"crypto/tls"
"github.com/go-resty/resty/v2"
"io"
"log"
"net/http"
"os"
"time"
)
const (
Post = "POST"
)
func OctopusHttpClient(method string, url string, payload io.Reader, token string) ([]byte, error) {
request, err := http.NewRequest(method, url, payload)
if token != "" {
request.Header.Set("Authorization", "Bearer "+token)
} else {
request.Header.Set("Content-Type", "application/json")
}
client := http.Client{Timeout: time.Duration(3) * time.Second}
res, err := client.Do(request)
if err != nil {
if os.IsTimeout(err) {
log.Println("接口调用超时 : ", err)
request.Body.Close()
return nil, err
}
log.Println(err)
return nil, err
}
defer res.Body.Close()
body, err := io.ReadAll(res.Body)
if err != nil {
log.Println("body转换错误: ", err)
return nil, err
}
return body, err
}
func GetRestyRequest() *resty.Request {
client := resty.New().SetTimeout(time.Duration(5) * time.Second)
client.SetTLSClientConfig(&tls.Config{
InsecureSkipVerify: true, // Only for development/testing
})
request := client.R()
return request
}

View File

@ -0,0 +1,97 @@
package common
import (
"crypto/tls"
"encoding/json"
"github.com/go-resty/resty/v2"
"gitlink.org.cn/JointCloud/pcm-octopus/internal/http/model"
"time"
)
type TokenTimePair struct {
Token string
ExpiredAt time.Time
}
type Login struct {
Username string `json:"username"`
Password string `json:"password"`
}
type Token struct {
ip string
user string
pwd string
ttp *TokenTimePair
}
func NewToken(ip, user, pwd string) (*Token, error) {
login := Login{
Username: user,
Password: pwd,
}
jsonStr, _ := json.Marshal(login)
tokenUrl := ip + Forward_Slash + GetToken
token, tm, err := generateToken(jsonStr, tokenUrl)
if err != nil {
return nil, err
}
ttp := &TokenTimePair{
Token: token,
ExpiredAt: tm,
}
return &Token{ttp: ttp, ip: ip, user: user, pwd: pwd}, nil
}
func (t *Token) update() error {
login := Login{
Username: t.user,
Password: t.pwd,
}
jsonStr, _ := json.Marshal(login)
tokenUrl := t.ip + Forward_Slash + GetToken
token, tm, err := generateToken(jsonStr, tokenUrl)
if err != nil {
return err
}
ttp := &TokenTimePair{
Token: token,
ExpiredAt: tm,
}
t.ttp = ttp
return nil
}
func (t *Token) Get() (string, error) {
if time.Now().After(t.ttp.ExpiredAt) {
err := t.update()
if err != nil {
return "", err
}
}
return t.ttp.Token, nil
}
func generateToken(jsonStr []byte, tokenUrl string) (string, time.Time, error) {
client := resty.New().SetTimeout(time.Duration(5) * time.Second)
req := client.R()
var tokenResp model.Token
client.SetTLSClientConfig(&tls.Config{
InsecureSkipVerify: true,
})
_, err := req.
SetResult(&tokenResp).
SetHeader("Content-Type", "application/json").
SetBody(jsonStr).
Post(tokenUrl)
if err != nil {
return "", time.Time{}, err
}
var d time.Duration
d = time.Second * time.Duration(tokenResp.Payload.Expiration)
return tokenResp.Payload.Token, time.Now().Add(d), nil
}

View File

@ -0,0 +1,55 @@
package model
type AlgorithmParam struct {
PageIndex int `json:"pageIndex"`
PageSize int `json:"pageSize"`
}
type AlgorithmList struct {
Success bool `json:"success"`
Payload struct {
TotalSize int `json:"totalSize"`
Algorithms []struct {
AlgorithmId string `json:"algorithmId"`
AlgorithmVersion string `json:"algorithmVersion"`
SpaceId string `json:"spaceId"`
SpaceName string `json:"spaceName"`
UserId string `json:"userId"`
UserName string `json:"userName"`
AlgorithmName string `json:"algorithmName"`
ModelName string `json:"modelName"`
FileStatus int `json:"fileStatus"`
LatestCompressed int `json:"latestCompressed"`
AlgorithmDescript string `json:"algorithmDescript"`
Path string `json:"path"`
IsPrefab bool `json:"isPrefab"`
CreatedAt int `json:"createdAt"`
ApplyId string `json:"applyId"`
ApplyName string `json:"applyName"`
FrameworkId string `json:"frameworkId"`
FrameworkName string `json:"frameworkName"`
} `json:"algorithms"`
} `json:"payload"`
Error interface{} `json:"error"`
}
type Algorithm struct {
AlgorithmId string `json:"algorithmId"`
AlgorithmVersion string `json:"algorithmVersion"`
SpaceId string `json:"spaceId"`
SpaceName string `json:"spaceName"`
UserId string `json:"userId"`
UserName string `json:"userName"`
AlgorithmName string `json:"algorithmName"`
ModelName string `json:"modelName"`
FileStatus int `json:"fileStatus"`
LatestCompressed int `json:"latestCompressed"`
AlgorithmDescript string `json:"algorithmDescript"`
Path string `json:"path"`
IsPrefab bool `json:"isPrefab"`
CreatedAt int `json:"createdAt"`
ApplyId string `json:"applyId"`
ApplyName string `json:"applyName"`
FrameworkId string `json:"frameworkId"`
FrameworkName string `json:"frameworkName"`
}

View File

@ -0,0 +1,30 @@
package model
type DatasetParam struct {
PageIndex int `json:"pageIndex"`
PageSize int `json:"pageSize"`
}
type DatasetList struct {
Success bool `json:"success"`
Payload struct {
TotalSize int `json:"totalSize"`
Datasets []struct {
CreatedAt int `json:"createdAt"`
UpdatedAt int `json:"updatedAt"`
Id string `json:"id"`
SourceType int `json:"sourceType"`
Name string `json:"name"`
TypeId string `json:"typeId"`
TypeDesc string `json:"typeDesc"`
Applies []struct {
Id string `json:"id"`
Desc string `json:"desc"`
} `json:"applies"`
Desc string `json:"desc"`
LatestVersion string `json:"latestVersion"`
UserName string `json:"userName"`
} `json:"datasets"`
} `json:"payload"`
Error interface{} `json:"error"`
}

View File

@ -0,0 +1,10 @@
package model
type Token struct {
Success bool `json:"success"`
Payload struct {
Token string `json:"token"`
Expiration int `json:"expiration"`
} `json:"payload"`
Error interface{} `json:"error"`
}

View File

@ -0,0 +1,111 @@
package router
import (
"fmt"
"github.com/gin-gonic/gin"
"regexp"
"time"
)
func Create() (*gin.Engine, error) {
g := gin.New()
g.Use(gin.LoggerWithFormatter(logFormatter), gin.Recovery())
g.Use(gin.Logger())
g.Use(gin.Recovery())
//g.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
//handler := api.TestApi{}
//api := g.Group("/api")
//v1 := api.Group("/v1")
{
////user
//user := v1.Group("user")
//user.GET("", apis.GetUserInfo)
//
////repo
//repoApi := apis.RepoApi
//repo := v1.Group("user")
//repo.GET("/repos", repoApi.GetRepos)
//repo.POST("/repos", apis.CreateRepo)
//repo.POST("/repos/uploadFile", repoApi.UploadFile2Repo) //上传文件到项目中
//repo.PUT("/repos/updateFile", repoApi.UpdateFile2Repo) //修改项目文件
//repo.GET("/repos/queryFileContent", repoApi.QueryRepoFilesContent) //查询项目文件内容
//
////image
//image := v1.Group("image")
//image.GET("/recommend", apis.GetImageRecommended)
//image.GET("/myImages", apis.MyImages)
//
////datasets
//datasetsApi := apis.DatasetApi
//datasets := v1.Group("datasets")
//datasets.POST("/create", datasetsApi.CreateDataset)
//datasets.GET("/public", apis.GetDatasetPublic)
//datasets.GET("/myDatasets", apis.GetMyDatasets)
//datasets.POST("/export", apis.ExportDataset) //将用户选择的文件从训练任务结果中导出到数据集中
//datasets.POST("/uploadFile", datasetsApi.UploadFileDatasets) //上传文件到数据集中
//datasets.GET("/listDatasets", datasetsApi.ListDatasets) //查询数据集列表
//
////tasks
//task := v1.Group("task")
//task.GET("/creationRequired", apis.GetTaskCreationRequired)
//task.GET("/creationImageBySpec", apis.GetTaskCreationImageBySpec) //根据选择的规格获取镜像计算资源是NPU时使用
//task.GET("/list", apis.GetTaskList)
//task.GET("/getOutput", apis.GetTaskOutput)
//task.GET("/detail", apis.GetTaskDetail)
//task.GET("/log", apis.GetLog)
//task.POST("/create", apis.CreateTask)
//task.POST("/stop", apis.StopTask)
//task.GET("/downloadAll", apis.DownloadAllById)
//task.GET("/onlineInferUrl", apis.GetTaskOnlineUrl)
//
////model
//modelApi := apis.ModelApi
//model := v1.Group("model")
//model.POST("/create", apis.CreateModel)
//model.GET("/getById", apis.GetModelById)
//model.GET("/download", apis.DownloadById)
//model.POST("/uploadFile", modelApi.UploadFile2Model)
//model.GET("/queryAllModelFile", modelApi.QueryAllModelFile)
//
//// model local create
//model.POST("/localCreate", apis.CreateLocalModel)
//model.GET("/getUploadedChunks", apis.GetUploadedChunks)
//model.GET("/newMultipart", apis.NewMultipart)
//model.GET("/getMultipartUrl", apis.GetMultipartUrl)
//model.POST("/completeMultipart", apis.CompleteMultipart)
}
return g, nil
}
var tokenRegexp = regexp.MustCompile("token=[^&]+")
func logFormatter(param gin.LogFormatterParams) string {
if (param.ClientIP == "127.0.0.1" || param.ClientIP == "::1") && param.Path == "/health" {
return ""
}
var statusColor, methodColor, resetColor string
if param.IsOutputColor() {
statusColor = param.StatusCodeColor()
methodColor = param.MethodColor()
resetColor = param.ResetColor()
}
if param.Latency > time.Minute {
param.Latency = param.Latency - param.Latency%time.Second
}
path := tokenRegexp.ReplaceAllString(param.Path, "token=[masked]")
return fmt.Sprintf("%v |%s %3d %s| %13v | %15s |%s %-7s %s %#v\n%s",
param.TimeStamp.Format(time.RFC3339),
statusColor, param.StatusCode, resetColor,
param.Latency,
param.ClientIP,
methodColor, param.Method, resetColor,
path,
param.ErrorMessage,
)
}

View File

@ -0,0 +1,27 @@
package service
import (
"gitlink.org.cn/JointCloud/pcm-octopus/internal/http/common"
"gitlink.org.cn/JointCloud/pcm-octopus/internal/http/model"
"strconv"
)
func GetMyAlgorithmList(ip, token string, param *model.AlgorithmParam) (*model.AlgorithmList, error) {
resp := &model.AlgorithmList{}
var reqUrl = ip + common.Forward_Slash + common.GetMyAlgorithmList
req := common.GetRestyRequest()
_, err := req.
SetHeader("Authorization", "Bearer "+token).
SetQueryString("pageIndex=" + strconv.Itoa(param.PageIndex)).
SetQueryString("pageSize=" + strconv.Itoa(param.PageSize)).
SetResult(resp).
Get(reqUrl)
if err != nil {
return nil, err
}
return resp, nil
}

View File

@ -0,0 +1,57 @@
package service
import (
"encoding/json"
"fmt"
"github.com/smartystreets/goconvey/convey"
"gitlink.org.cn/JointCloud/pcm-octopus/internal/http/common"
"gitlink.org.cn/JointCloud/pcm-octopus/internal/http/model"
"testing"
)
func TestAlgorithm(t *testing.T) {
convey.Convey("Test Service", t, func() {
ip := ""
user := ""
pwd := ""
tsvc, err := common.NewToken(ip, user, pwd)
if err != nil {
fmt.Println(err.Error())
}
token, err := tsvc.Get()
if err != nil {
fmt.Println(err.Error())
}
convey.Convey("GetMyAlgorithmList", func() {
param := &model.AlgorithmParam{
PageIndex: 1,
PageSize: 100,
}
list, err := GetMyAlgorithmList(ip, token,
param)
if err != nil {
fmt.Println(err.Error())
}
if !list.Success {
if list.Error != nil {
fmt.Println(list.Error)
} else {
fmt.Println("list.Success is false")
}
}
if len(list.Payload.Algorithms) > 0 {
for _, algorithm := range list.Payload.Algorithms {
m, _ := json.Marshal(algorithm)
fmt.Println(string(m))
}
} else {
fmt.Println("list is empty")
}
convey.So(err, convey.ShouldBeNil)
convey.So(list, convey.ShouldNotBeEmpty)
})
})
}

View File

@ -0,0 +1,27 @@
package service
import (
"gitlink.org.cn/JointCloud/pcm-octopus/internal/http/common"
"gitlink.org.cn/JointCloud/pcm-octopus/internal/http/model"
"strconv"
)
func GetMyDatasetList(ip, token string, param *model.DatasetParam) (*model.DatasetList, error) {
resp := &model.DatasetList{}
var reqUrl = ip + common.Forward_Slash + common.GetMydatasetList
req := common.GetRestyRequest()
_, err := req.
SetHeader("Authorization", "Bearer "+token).
SetQueryString("pageIndex=" + strconv.Itoa(param.PageIndex)).
SetQueryString("pageSize=" + strconv.Itoa(param.PageSize)).
SetResult(resp).
Get(reqUrl)
if err != nil {
return nil, err
}
return resp, nil
}

View File

@ -0,0 +1,57 @@
package service
import (
"fmt"
"github.com/smartystreets/goconvey/convey"
"gitlink.org.cn/JointCloud/pcm-octopus/internal/http/common"
"gitlink.org.cn/JointCloud/pcm-octopus/internal/http/model"
"testing"
)
func TestDataset(t *testing.T) {
convey.Convey("Test Service", t, func() {
ip := ""
user := ""
pwd := ""
tsvc, err := common.NewToken(ip, user, pwd)
if err != nil {
fmt.Println(err.Error())
}
token, err := tsvc.Get()
if err != nil {
fmt.Println(err.Error())
}
convey.Convey("GetMyDatasetList", func() {
param := &model.DatasetParam{
PageIndex: 1,
PageSize: 100,
}
list, err := GetMyDatasetList(ip, token,
param)
if err != nil {
fmt.Println(err.Error())
}
if !list.Success {
if list.Error != nil {
fmt.Println(list.Error)
} else {
fmt.Println("list.Success is false")
}
}
if len(list.Payload.Datasets) > 0 {
//for _, algorithm := range list.Payload.Datasets {
// m, _ := json.Marshal(algorithm)
// fmt.Println(string(m))
//}
fmt.Println(list.Payload.TotalSize)
} else {
fmt.Println("list is empty")
}
convey.So(err, convey.ShouldBeNil)
convey.So(list, convey.ShouldNotBeEmpty)
})
})
}