From 024d0f487e73570a42d78ea9ff5a4a0f8b934087 Mon Sep 17 00:00:00 2001 From: danial Date: Wed, 10 Sep 2025 17:00:46 +0800 Subject: [PATCH] =?UTF-8?q?feat(instrumentation):=20=E6=9B=B4=E6=96=B0=20O?= =?UTF-8?q?penTelemetry=20=E4=BE=9D=E8=B5=96=E5=B9=B6=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E8=AF=B7=E6=B1=82=E8=B7=9F=E8=B8=AA-=20=E6=9B=B4=E6=96=B0=20Op?= =?UTF-8?q?enTelemetry=20=E7=9B=B8=E5=85=B3=E4=BE=9D=E8=B5=96=E8=87=B3?= =?UTF-8?q?=E6=9C=80=E6=96=B0=E7=89=88=E6=9C=AC=20-=20=E5=9C=A8=E5=A4=9A?= =?UTF-8?q?=E4=B8=AA=E7=AC=AC=E4=B8=89=E6=96=B9=E6=9C=8D=E5=8A=A1=E8=B0=83?= =?UTF-8?q?=E7=94=A8=E4=B8=AD=E6=B7=BB=E5=8A=A0=20OpenTelemetry=20?= =?UTF-8?q?=E8=AF=B7=E6=B1=82=E8=B7=9F=E8=B8=AA=20-=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E9=83=A8=E5=88=86=E5=87=BD=E6=95=B0=EF=BC=8C=E6=8F=90=E9=AB=98?= =?UTF-8?q?=E9=94=99=E8=AF=AF=E5=A4=84=E7=90=86=E5=92=8C=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E7=9A=84=E5=87=86=E7=A1=AE=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- go.mod | 62 ++++---- go.sum | 136 +++++++++--------- internal/service/client/ocr.go | 11 +- .../service/supplier/third_party/card_type.go | 7 + .../third_party/pool/card_sender/careless.go | 3 + .../third_party/pool/card_sender/eggplant.go | 13 +- .../third_party/pool/card_sender/fat_six.go | 19 ++- .../pool/card_sender/fat_six_test.go | 20 ++- .../third_party/pool/card_sender/flyfishv2.go | 4 + .../pool/card_sender/luban_test.go | 34 ++--- .../pool/card_sender/magic_fish.go | 12 ++ .../third_party/pool/card_sender/sesame.go | 8 +- .../third_party/pool/card_sender/up.go | 7 +- .../third_party/pool/card_sender/wan_xin.go | 2 + .../third_party/pool/card_sender/wtr.go | 11 +- internal/utils/date_time.go | 3 +- 16 files changed, 219 insertions(+), 133 deletions(-) diff --git a/go.mod b/go.mod index b68c3b8..d6e4f96 100644 --- a/go.mod +++ b/go.mod @@ -8,12 +8,12 @@ require github.com/beego/beego/v2 v2.3.8 require ( github.com/PuerkitoBio/goquery v1.10.3 - github.com/bytedance/gopkg v0.1.2 - github.com/bytedance/sonic v1.14.0 + github.com/bytedance/gopkg v0.1.3 + github.com/bytedance/sonic v1.14.1 github.com/carlmjohnson/requests v0.24.3 - github.com/dubonzi/otelresty v1.5.0 + github.com/dubonzi/otelresty v1.6.0 github.com/duke-git/lancet/v2 v2.3.7 - github.com/forgoer/openssl v1.7.0 + github.com/forgoer/openssl v1.8.0 github.com/go-resty/resty/v2 v2.16.5 github.com/go-sql-driver/mysql v1.9.3 github.com/go-stomp/stomp/v3 v3.1.3 @@ -21,24 +21,24 @@ require ( github.com/iunary/fakeuseragent v1.0.0 github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 github.com/natefinch/lumberjack v2.0.0+incompatible - github.com/prometheus/client_golang v1.23.0 - github.com/redis/go-redis/v9 v9.12.0 + github.com/prometheus/client_golang v1.23.2 + github.com/redis/go-redis/v9 v9.13.0 github.com/rs/xid v1.6.0 github.com/shopspring/decimal v1.4.0 - github.com/stretchr/testify v1.10.0 + github.com/stretchr/testify v1.11.1 github.com/widuu/gojson v0.0.0-20170212122013-7da9d2cd949b - go.opentelemetry.io/contrib/bridges/otelzap v0.12.0 - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0 - go.opentelemetry.io/otel v1.37.0 - go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.13.0 - go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.37.0 - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.37.0 - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.37.0 - go.opentelemetry.io/otel/log v0.13.0 - go.opentelemetry.io/otel/sdk v1.37.0 - go.opentelemetry.io/otel/sdk/log v0.13.0 - go.opentelemetry.io/otel/sdk/metric v1.37.0 - go.opentelemetry.io/otel/trace v1.37.0 + go.opentelemetry.io/contrib/bridges/otelzap v0.13.0 + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0 + go.opentelemetry.io/otel v1.38.0 + go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.14.0 + go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.38.0 + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0 + go.opentelemetry.io/otel/log v0.14.0 + go.opentelemetry.io/otel/sdk v1.38.0 + go.opentelemetry.io/otel/sdk/log v0.14.0 + go.opentelemetry.io/otel/sdk/metric v1.38.0 + go.opentelemetry.io/otel/trace v1.38.0 go.uber.org/zap v1.27.0 golang.org/x/exp v0.0.0-20250718183923-645b1fa84792 ) @@ -57,7 +57,7 @@ require ( github.com/felixge/httpsnoop v1.0.4 // indirect github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.1 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2 // indirect github.com/hashicorp/golang-lru v1.0.2 // indirect github.com/klauspost/cpuid/v2 v2.3.0 // indirect github.com/lib/pq v1.10.9 // indirect @@ -66,24 +66,26 @@ require ( github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/prometheus/client_model v0.6.2 // indirect - github.com/prometheus/common v0.65.0 // indirect + github.com/prometheus/common v0.66.1 // indirect github.com/prometheus/procfs v0.17.0 // indirect github.com/shiena/ansicolor v0.0.0-20230509054315-a9deabde6e02 // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // indirect github.com/valyala/bytebufferpool v1.0.0 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect - go.opentelemetry.io/otel/metric v1.37.0 // indirect + go.opentelemetry.io/otel/metric v1.38.0 // indirect go.opentelemetry.io/proto/otlp v1.7.1 // indirect go.uber.org/multierr v1.11.0 // indirect + go.yaml.in/yaml/v2 v2.4.2 // indirect golang.org/x/arch v0.19.0 // indirect - golang.org/x/crypto v0.40.0 // indirect - golang.org/x/net v0.42.0 // indirect - golang.org/x/sys v0.34.0 // indirect - golang.org/x/text v0.27.0 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20250804133106-a7a43d27e69b // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20250804133106-a7a43d27e69b // indirect - google.golang.org/grpc v1.74.2 // indirect - google.golang.org/protobuf v1.36.6 // indirect + golang.org/x/crypto v0.41.0 // indirect + golang.org/x/net v0.43.0 // indirect + golang.org/x/sys v0.35.0 // indirect + golang.org/x/text v0.28.0 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 // indirect + google.golang.org/grpc v1.75.0 // indirect + google.golang.org/protobuf v1.36.8 // indirect gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 06526e8..eabf23f 100644 --- a/go.sum +++ b/go.sum @@ -14,10 +14,10 @@ github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs= github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c= github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA= github.com/bsm/gomega v1.27.10/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0= -github.com/bytedance/gopkg v0.1.2 h1:8o2feYuxknDpN+O7kPwvSXfMEKfYvJYiA2K7aonoMEQ= -github.com/bytedance/gopkg v0.1.2/go.mod h1:576VvJ+eJgyCzdjS+c4+77QF3p7ubbtiKARP3TxducM= -github.com/bytedance/sonic v1.14.0 h1:/OfKt8HFw0kh2rj8N0F6C/qPGRESq0BbaNZgcNXXzQQ= -github.com/bytedance/sonic v1.14.0/go.mod h1:WoEbx8WTcFJfzCe0hbmyTGrfjt8PzNEBdxlNUO24NhA= +github.com/bytedance/gopkg v0.1.3 h1:TPBSwH8RsouGCBcMBktLt1AymVo2TVsBVCY4b6TnZ/M= +github.com/bytedance/gopkg v0.1.3/go.mod h1:576VvJ+eJgyCzdjS+c4+77QF3p7ubbtiKARP3TxducM= +github.com/bytedance/sonic v1.14.1 h1:FBMC0zVz5XUmE4z9wF4Jey0An5FueFvOsTKKKtwIl7w= +github.com/bytedance/sonic v1.14.1/go.mod h1:gi6uhQLMbTdeP0muCnrjHLeCUPyb70ujhnNlhOylAFc= github.com/bytedance/sonic/loader v0.3.0 h1:dskwH8edlzNMctoruo8FPTJDF3vLtDT0sXZwvZJyqeA= github.com/bytedance/sonic/loader v0.3.0/go.mod h1:N8A3vUdtUebEY2/VQC0MyhYeKUFosQU6FxH2JmUe6VI= github.com/carlmjohnson/requests v0.24.3 h1:LYcM/jVIVPkioigMjEAnBACXl2vb42TVqiC8EYNoaXQ= @@ -34,16 +34,16 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= -github.com/dubonzi/otelresty v1.5.0 h1:s0vBIxRSLBVDD1DenVpFa3Tb3fhptt5Ez6Sa756kJIQ= -github.com/dubonzi/otelresty v1.5.0/go.mod h1:N7leMFX3VT8Ncg10W7O1jgExSArAODW+RbYFH1rZFyo= +github.com/dubonzi/otelresty v1.6.0 h1:Oi9fY9bj3/J5R9+FZVMOk+10HtLs6S57fy8nQY5X3C0= +github.com/dubonzi/otelresty v1.6.0/go.mod h1:H+lNImIXAOhK4bk2bZBPDDdp5xGYvtnrUX8F8uVNE30= github.com/duke-git/lancet/v2 v2.3.7 h1:nnNBA9KyoqwbPm4nFmEFVIbXeAmpqf6IDCH45+HHHNs= github.com/duke-git/lancet/v2 v2.3.7/go.mod h1:zGa2R4xswg6EG9I6WnyubDbFO/+A/RROxIbXcwryTsc= github.com/elazarl/go-bindata-assetfs v1.0.1 h1:m0kkaHRKEu7tUIUFVwhGGGYClXvyl4RE03qmvRTNfbw= github.com/elazarl/go-bindata-assetfs v1.0.1/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/forgoer/openssl v1.7.0 h1:yXbHlyR9IFdfo3Vs3cfLMsPzNxjM35rt6wr6czysheM= -github.com/forgoer/openssl v1.7.0/go.mod h1:nklnf8K63XPA3quw2vN7sfIeHNGovuOLvAhpFIF8sS8= +github.com/forgoer/openssl v1.8.0 h1:t/t+g2bFZl+Ctg6DPV73Ek564bXgpQF4AWCv8HD1LvQ= +github.com/forgoer/openssl v1.8.0/go.mod h1:nklnf8K63XPA3quw2vN7sfIeHNGovuOLvAhpFIF8sS8= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= @@ -64,8 +64,8 @@ github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= 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/grpc-ecosystem/grpc-gateway/v2 v2.27.1 h1:X5VWvz21y3gzm9Nw/kaUeku/1+uBhcekkmy4IkffJww= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.1/go.mod h1:Zanoh4+gvIgluNqcfMVTJueD4wSS5hT7zTt4Mrutd90= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2 h1:8Tjv8EJ+pM1xP8mK6egEbD1OgnVTyacbefKhmbLhIhU= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2/go.mod h1:pkJQ2tZHJ0aFOVEEot6oZmaVEZcRme73eIFmhiVuRWs= github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/iunary/fakeuseragent v1.0.0 h1:QlxZqFFzb9oDd6p7478/AYeljJJwI74IRfxi/vs/Egs= @@ -98,16 +98,16 @@ github.com/natefinch/lumberjack v2.0.0+incompatible/go.mod h1:Wi9p2TTF5DG5oU+6Yf github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v1.23.0 h1:ust4zpdl9r4trLY/gSjlm07PuiBq2ynaXXlptpfy8Uc= -github.com/prometheus/client_golang v1.23.0/go.mod h1:i/o0R9ByOnHX0McrTMTyhYvKE4haaf2mW08I+jGAjEE= +github.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o= +github.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg= github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk= github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE= -github.com/prometheus/common v0.65.0 h1:QDwzd+G1twt//Kwj/Ww6E9FQq1iVMmODnILtW1t2VzE= -github.com/prometheus/common v0.65.0/go.mod h1:0gZns+BLRQ3V6NdaerOhMbwwRbNh9hkGINtQAsP5GS8= +github.com/prometheus/common v0.66.1 h1:h5E0h5/Y8niHc5DlaLlWLArTQI7tMrsfQjHV+d9ZoGs= +github.com/prometheus/common v0.66.1/go.mod h1:gcaUsgf3KfRSwHY4dIMXLPV0K/Wg1oZ8+SbZk/HH/dA= github.com/prometheus/procfs v0.17.0 h1:FuLQ+05u4ZI+SS/w9+BWEM2TXiHKsUQ9TADiRH7DuK0= github.com/prometheus/procfs v0.17.0/go.mod h1:oPQLaDAMRbA+u8H5Pbfq+dl3VDAvHxMUOVhe0wYB2zw= -github.com/redis/go-redis/v9 v9.12.0 h1:XlVPGlflh4nxfhsNXPA8Qp6EmEfTo0rp8oaBzPipXnU= -github.com/redis/go-redis/v9 v9.12.0/go.mod h1:huWgSWd8mW6+m0VPhJjSSQ+d6Nh1VICQ6Q5lHuCH/Iw= +github.com/redis/go-redis/v9 v9.13.0 h1:PpmlVykE0ODh8P43U0HqC+2NXHXwG+GUtQyz+MPKGRg= +github.com/redis/go-redis/v9 v9.13.0/go.mod h1:huWgSWd8mW6+m0VPhJjSSQ+d6Nh1VICQ6Q5lHuCH/Iw= github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/rs/xid v1.6.0 h1:fV591PaemRlL6JfRxGDEPl69wICngIQ3shQtzfy2gxU= @@ -122,8 +122,8 @@ github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpE 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.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= -github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= 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/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= @@ -134,38 +134,38 @@ github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1 github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= -go.opentelemetry.io/contrib/bridges/otelzap v0.12.0 h1:FGre0nZh5BSw7G73VpT3xs38HchsfPsa2aZtMp0NPOs= -go.opentelemetry.io/contrib/bridges/otelzap v0.12.0/go.mod h1:X2PYPViI2wTPIMIOBjG17KNybTzsrATnvPJ02kkz7LM= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0 h1:Hf9xI/XLML9ElpiHVDNwvqI0hIFlzV8dgIr35kV1kRU= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0/go.mod h1:NfchwuyNoMcZ5MLHwPrODwUF1HWCXWrL31s8gSAdIKY= -go.opentelemetry.io/contrib/propagators/b3 v1.31.0 h1:PQPXYscmwbCp76QDvO4hMngF2j8Bx/OTV86laEl8uqo= -go.opentelemetry.io/contrib/propagators/b3 v1.31.0/go.mod h1:jbqfV8wDdqSDrAYxVpXQnpM0XFMq2FtDesblJ7blOwQ= -go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ= -go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I= -go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.13.0 h1:z6lNIajgEBVtQZHjfw2hAccPEBDs+nx58VemmXWa2ec= -go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.13.0/go.mod h1:+kyc3bRx/Qkq05P6OCu3mTEIOxYRYzoIg+JsUp5X+PM= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.37.0 h1:zG8GlgXCJQd5BU98C0hZnBbElszTmUgCNCfYneaDL0A= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.37.0/go.mod h1:hOfBCz8kv/wuq73Mx2H2QnWokh/kHZxkh6SNF2bdKtw= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.37.0 h1:Ahq7pZmv87yiyn3jeFz/LekZmPLLdKejuO3NcK9MssM= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.37.0/go.mod h1:MJTqhM0im3mRLw1i8uGHnCvUEeS7VwRyxlLC78PA18M= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.37.0 h1:EtFWSnwW9hGObjkIdmlnWSydO+Qs8OwzfzXLUPg4xOc= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.37.0/go.mod h1:QjUEoiGCPkvFZ/MjK6ZZfNOS6mfVEVKYE99dFhuN2LI= -go.opentelemetry.io/otel/log v0.13.0 h1:yoxRoIZcohB6Xf0lNv9QIyCzQvrtGZklVbdCoyb7dls= -go.opentelemetry.io/otel/log v0.13.0/go.mod h1:INKfG4k1O9CL25BaM1qLe0zIedOpvlS5Z7XgSbmN83E= -go.opentelemetry.io/otel/log/logtest v0.13.0 h1:xxaIcgoEEtnwdgj6D6Uo9K/Dynz9jqIxSDu2YObJ69Q= -go.opentelemetry.io/otel/log/logtest v0.13.0/go.mod h1:+OrkmsAH38b+ygyag1tLjSFMYiES5UHggzrtY1IIEA8= -go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/WgbsdpcPoZE= -go.opentelemetry.io/otel/metric v1.37.0/go.mod h1:04wGrZurHYKOc+RKeye86GwKiTb9FKm1WHtO+4EVr2E= -go.opentelemetry.io/otel/sdk v1.37.0 h1:ItB0QUqnjesGRvNcmAcU0LyvkVyGJ2xftD29bWdDvKI= -go.opentelemetry.io/otel/sdk v1.37.0/go.mod h1:VredYzxUvuo2q3WRcDnKDjbdvmO0sCzOvVAiY+yUkAg= -go.opentelemetry.io/otel/sdk/log v0.13.0 h1:I3CGUszjM926OphK8ZdzF+kLqFvfRY/IIoFq/TjwfaQ= -go.opentelemetry.io/otel/sdk/log v0.13.0/go.mod h1:lOrQyCCXmpZdN7NchXb6DOZZa1N5G1R2tm5GMMTpDBw= -go.opentelemetry.io/otel/sdk/log/logtest v0.13.0 h1:9yio6AFZ3QD9j9oqshV1Ibm9gPLlHNxurno5BreMtIA= -go.opentelemetry.io/otel/sdk/log/logtest v0.13.0/go.mod h1:QOGiAJHl+fob8Nu85ifXfuQYmJTFAvcrxL6w5/tu168= -go.opentelemetry.io/otel/sdk/metric v1.37.0 h1:90lI228XrB9jCMuSdA0673aubgRobVZFhbjxHHspCPc= -go.opentelemetry.io/otel/sdk/metric v1.37.0/go.mod h1:cNen4ZWfiD37l5NhS+Keb5RXVWZWpRE+9WyVCpbo5ps= -go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4= -go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0= +go.opentelemetry.io/contrib/bridges/otelzap v0.13.0 h1:aBKdhLVieqvwWe9A79UHI/0vgp2t/s2euY8X59pGRlw= +go.opentelemetry.io/contrib/bridges/otelzap v0.13.0/go.mod h1:SYqtxLQE7iINgh6WFuVi2AI70148B8EI35DSk0Wr8m4= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0 h1:RbKq8BG0FI8OiXhBfcRtqqHcZcka+gU3cskNuf05R18= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0/go.mod h1:h06DGIukJOevXaj/xrNjhi/2098RZzcLTbc0jDAUbsg= +go.opentelemetry.io/contrib/propagators/b3 v1.37.0 h1:0aGKdIuVhy5l4GClAjl72ntkZJhijf2wg1S7b5oLoYA= +go.opentelemetry.io/contrib/propagators/b3 v1.37.0/go.mod h1:nhyrxEJEOQdwR15zXrCKI6+cJK60PXAkJ/jRyfhr2mg= +go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8= +go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM= +go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.14.0 h1:OMqPldHt79PqWKOMYIAQs3CxAi7RLgPxwfFSwr4ZxtM= +go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.14.0/go.mod h1:1biG4qiqTxKiUCtoWDPpL3fB3KxVwCiGw81j3nKMuHE= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.38.0 h1:vl9obrcoWVKp/lwl8tRE33853I8Xru9HFbw/skNeLs8= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.38.0/go.mod h1:GAXRxmLJcVM3u22IjTg74zWBrRCKq8BnOqUVLodpcpw= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 h1:GqRJVj7UmLjCVyVJ3ZFLdPRmhDUp2zFmQe3RHIOsw24= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0/go.mod h1:ri3aaHSmCTVYu2AWv44YMauwAQc0aqI9gHKIcSbI1pU= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0 h1:lwI4Dc5leUqENgGuQImwLo4WnuXFPetmPpkLi2IrX54= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0/go.mod h1:Kz/oCE7z5wuyhPxsXDuaPteSWqjSBD5YaSdbxZYGbGk= +go.opentelemetry.io/otel/log v0.14.0 h1:2rzJ+pOAZ8qmZ3DDHg73NEKzSZkhkGIua9gXtxNGgrM= +go.opentelemetry.io/otel/log v0.14.0/go.mod h1:5jRG92fEAgx0SU/vFPxmJvhIuDU9E1SUnEQrMlJpOno= +go.opentelemetry.io/otel/log/logtest v0.14.0 h1:BGTqNeluJDK2uIHAY8lRqxjVAYfqgcaTbVk1n3MWe5A= +go.opentelemetry.io/otel/log/logtest v0.14.0/go.mod h1:IuguGt8XVP4XA4d2oEEDMVDBBCesMg8/tSGWDjuKfoA= +go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA= +go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI= +go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E= +go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg= +go.opentelemetry.io/otel/sdk/log v0.14.0 h1:JU/U3O7N6fsAXj0+CXz21Czg532dW2V4gG1HE/e8Zrg= +go.opentelemetry.io/otel/sdk/log v0.14.0/go.mod h1:imQvII+0ZylXfKU7/wtOND8Hn4OpT3YUoIgqJVksUkM= +go.opentelemetry.io/otel/sdk/log/logtest v0.14.0 h1:Ijbtz+JKXl8T2MngiwqBlPaHqc4YCaP/i13Qrow6gAM= +go.opentelemetry.io/otel/sdk/log/logtest v0.14.0/go.mod h1:dCU8aEL6q+L9cYTqcVOk8rM9Tp8WdnHOPLiBgp0SGOA= +go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6qT5wthqPoM= +go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA= +go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE= +go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs= go.opentelemetry.io/proto/otlp v1.7.1 h1:gTOMpGDb0WTBOP8JaO72iL3auEZhVmAQg4ipjOVAtj4= go.opentelemetry.io/proto/otlp v1.7.1/go.mod h1:b2rVh6rfI/s2pHWNlB7ILJcRALpcNDzKhACevjI+ZnE= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= @@ -174,6 +174,8 @@ 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.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= +go.yaml.in/yaml/v2 v2.4.2 h1:DzmwEr2rDGHl7lsFgAHxmNz/1NlQ7xLIrlN2h5d1eGI= +go.yaml.in/yaml/v2 v2.4.2/go.mod h1:081UH+NErpNdqlCXm3TtEran0rJZGxAYx9hb/ELlsPU= golang.org/x/arch v0.19.0 h1:LmbDQUodHThXE+htjrnmVD73M//D9GTH6wFZjyDkjyU= golang.org/x/arch v0.19.0/go.mod h1:bdwinDaKcfZUGpH09BB7ZmOfhalA8lQdzl62l8gGWsk= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= @@ -183,8 +185,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.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= -golang.org/x/crypto v0.40.0 h1:r4x+VvoG5Fm+eJcxMaY8CQM7Lb0l1lsmjGBQ6s8BfKM= -golang.org/x/crypto v0.40.0/go.mod h1:Qr1vMER5WyS2dfPHAlsOj01wgLbsyWtFn/aY+5+ZdxY= +golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4= +golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc= golang.org/x/exp v0.0.0-20250718183923-645b1fa84792 h1:R9PFI6EUdfVKgwKjZef7QIwGcBKu86OEFpJ9nUEP2l4= golang.org/x/exp v0.0.0-20250718183923-645b1fa84792/go.mod h1:A+z0yzpGtvnG90cToK5n2tu8UJVP2XUATh+r+sfOOOc= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= @@ -204,8 +206,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.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4= -golang.org/x/net v0.42.0 h1:jzkYrhi3YQWD6MLBJcsklgQsoAcw89EcZbJw8Z614hs= -golang.org/x/net v0.42.0/go.mod h1:FF1RA5d3u7nAYA4z2TkclSCKh68eSXtiFwcWQpPXdt8= +golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE= +golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -228,8 +230,8 @@ golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.34.0 h1:H5Y5sJ2L2JRdyv7ROF1he/lPdvFsd0mJHFw2ThKHxLA= -golang.org/x/sys v0.34.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= +golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= 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= @@ -248,8 +250,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.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= -golang.org/x/text v0.27.0 h1:4fGWRpyh641NLlecmyl4LOe6yDdfaYNrGb2zdfo4JV4= -golang.org/x/text v0.27.0/go.mod h1:1D28KMCvyooCX9hBiosv5Tz/+YLxj0j7XhWjpSUF7CU= +golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= +golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU= 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= @@ -262,14 +264,16 @@ golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxb 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-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/genproto/googleapis/api v0.0.0-20250804133106-a7a43d27e69b h1:ULiyYQ0FdsJhwwZUwbaXpZF5yUE3h+RA+gxvBu37ucc= -google.golang.org/genproto/googleapis/api v0.0.0-20250804133106-a7a43d27e69b/go.mod h1:oDOGiMSXHL4sDTJvFvIB9nRQCGdLP1o/iVaqQK8zB+M= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250804133106-a7a43d27e69b h1:zPKJod4w6F1+nRGDI9ubnXYhU9NSWoFAijkHkUXeTK8= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250804133106-a7a43d27e69b/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= -google.golang.org/grpc v1.74.2 h1:WoosgB65DlWVC9FqI82dGsZhWFNBSLjQ84bjROOpMu4= -google.golang.org/grpc v1.74.2/go.mod h1:CtQ+BGjaAIXHs/5YS3i473GqwBBa1zGQNevxdeBEXrM= -google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY= -google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY= +gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= +gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= +google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5 h1:BIRfGDEjiHRrk0QKZe3Xv2ieMhtgRGeLcZQ0mIVn4EY= +google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5/go.mod h1:j3QtIyytwqGr1JUDtYXwtMXWPKsEa5LtzIFN1Wn5WvE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 h1:eaY8u2EuxbRv7c3NiGK0/NedzVsCcV6hDuU5qPX5EGE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5/go.mod h1:M4/wBTSeyLxupu3W3tJtOgB14jILAS/XWPSSa3TAlJc= +google.golang.org/grpc v1.75.0 h1:+TW+dqTd2Biwe6KKfhE5JpiYIBWq865PhKGSXiivqt4= +google.golang.org/grpc v1.75.0/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ= +google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc= +google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= diff --git a/internal/service/client/ocr.go b/internal/service/client/ocr.go index c3051e7..059f646 100644 --- a/internal/service/client/ocr.go +++ b/internal/service/client/ocr.go @@ -7,6 +7,7 @@ import ( "fmt" "gateway/internal/otelTrace" + "github.com/dubonzi/otelresty" "github.com/go-resty/resty/v2" "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/trace" @@ -35,11 +36,15 @@ func (c *OCRClient) Calc(ctx context.Context, input *CalcInput) (string, error) if input.Category == "" { input.Category = "calc" } - resp, err := resty.New().R().SetFormData(map[string]string{ + webClient := resty.New() + otelresty.TraceClient(webClient) + + resp, err := webClient.R().SetFormData(map[string]string{ "category": input.Category, "length": fmt.Sprintf("%d", input.Length), }).SetFileReader("file", input.FileName, bytes.NewReader(input.File)). - Post("http://kami_spider:8000/ocr/recognize") + Post("http://127.0.0.1:8000/ocr/recognize") + if err != nil { otelTrace.Logger.WithContext(ctx).Error("识别验证码失败", zap.Error(err)) return "", err @@ -51,7 +56,7 @@ func (c *OCRClient) Calc(ctx context.Context, input *CalcInput) (string, error) Text string `json:"text"` } `json:"data"` }{} - json.Unmarshal(resp.Body(), &respStr) + _ = json.Unmarshal(resp.Body(), &respStr) span.SetAttributes(attribute.String("验证码识别结果", respStr.Data.Text)) if respStr.Code != 1 { return "", fmt.Errorf("识别验证码失败: %s", respStr.Msg) diff --git a/internal/service/supplier/third_party/card_type.go b/internal/service/supplier/third_party/card_type.go index e5da38e..9ff425f 100644 --- a/internal/service/supplier/third_party/card_type.go +++ b/internal/service/supplier/third_party/card_type.go @@ -16,6 +16,7 @@ import ( "time" "github.com/beego/beego/v2/client/httplib" + "github.com/dubonzi/otelresty" "github.com/duke-git/lancet/v2/convertor" "github.com/go-resty/resty/v2" "github.com/iunary/fakeuseragent" @@ -140,6 +141,8 @@ func (c *cardTypeQuery) outletCardQuery(ctx context.Context) (balance float64, e "Origin": "https://card.outletcard.cn", "Referer": "https://card.outletcard.cn/outlet/query", }) + otelresty.TraceClient(webClient) + for range 10 { resp, err2 := webClient.R().SetContext(ctx).Get("https://card.outletcard.cn/web/captcha?rand=" + strconv.FormatFloat(rand.Float64(), 'f', -1, 64)) if err2 != nil { @@ -321,6 +324,8 @@ func (c *cardTypeQuery) jvnkaQuery(ctx context.Context) (balance float64, err er func (c *cardTypeQuery) juheCardQuery(ctx context.Context) (balance float64, err error) { proxyId := utils.GenerateId() webClient := resty.New().EnableTrace().SetTimeout(time.Second * 5) + otelresty.TraceClient(webClient) + for range 5 { webClient.OnBeforeRequest(func(c *resty.Client, request *resty.Request) error { proxy, _ := utils.GetProxy(ctx, proxyId, "juheCardQuery") @@ -357,6 +362,8 @@ func (c *cardTypeQuery) juheCardQuery(ctx context.Context) (balance float64, err func (c *cardTypeQuery) chinagPayQuery(ctx context.Context) (balance float64, err error) { webClient := resty.New().EnableTrace().SetTimeout(time.Second * 5) + otelresty.TraceClient(webClient) + proxyId := utils.GenerateId() for range 5 { proxy, _ := utils.GetProxy(ctx, proxyId, "chinagPayQuery") diff --git a/internal/service/supplier/third_party/pool/card_sender/careless.go b/internal/service/supplier/third_party/pool/card_sender/careless.go index 90833f1..bdc8e07 100644 --- a/internal/service/supplier/third_party/pool/card_sender/careless.go +++ b/internal/service/supplier/third_party/pool/card_sender/careless.go @@ -16,6 +16,7 @@ import ( "time" "github.com/beego/beego/v2/client/httplib" + "github.com/dubonzi/otelresty" "github.com/duke-git/lancet/v2/convertor" "github.com/duke-git/lancet/v2/maputil" "github.com/duke-git/lancet/v2/pointer" @@ -66,6 +67,8 @@ func (s *SendCardTaskTypeCareless) CreateOrder(ctx context.Context, roadUid stri reqStruct.Sign = s.sign(ctx, params, gojson.Json(roadInfo.Params).Get("paySecret").Tostring()) client := resty.New().SetTimeout(time.Second * 30).SetRetryCount(3) + otelresty.TraceClient(client) + createdOrderUrl := gojson.Json(roadInfo.Params).Get("createdOrderUrl").Tostring() if createdOrderUrl == "" { createdOrderUrl = "https://api.wuxinpay.xyz/api/v1/payment/init" diff --git a/internal/service/supplier/third_party/pool/card_sender/eggplant.go b/internal/service/supplier/third_party/pool/card_sender/eggplant.go index 4ca0012..b2251f6 100644 --- a/internal/service/supplier/third_party/pool/card_sender/eggplant.go +++ b/internal/service/supplier/third_party/pool/card_sender/eggplant.go @@ -21,6 +21,7 @@ import ( "time" "github.com/beego/beego/v2/client/httplib" + "github.com/dubonzi/otelresty" "github.com/duke-git/lancet/v2/convertor" "github.com/duke-git/lancet/v2/cryptor" "github.com/duke-git/lancet/v2/strutil" @@ -252,6 +253,8 @@ func (c *eggplantProductCode) channelOne(ctx context.Context, forwardUrl *url.UR // 第二个通道 func (c *eggplantProductCode) channelTwo(ctx context.Context, forwardUrl *url.URL) (bool, string, string) { httpClient := resty.New().EnableTrace().SetRetryCount(3).SetRetryWaitTime(time.Second * 30) + otelresty.TraceClient(httpClient) + randomOrderId := utils.GenerateId() var resp *resty.Response var err error @@ -368,7 +371,10 @@ func (c *eggplantProductCode) channelThree(ctx context.Context, forwardUrl *url. // 第四个通道 func (c *eggplantProductCode) channelFour(ctx context.Context, forwardUrl *url.URL) (bool, string, string) { - queryResp, err := resty.New().R().EnableTrace().SetContext(ctx).Get(forwardUrl.String()) + webClient := resty.New() + otelresty.TraceClient(webClient) + queryResp, err := webClient.R().EnableTrace().SetContext(ctx).Get(forwardUrl.String()) + if err != nil { otelTrace.Logger.WithContext(ctx).Error("请求失败", zap.Error(err)) return false, "请求页面失败", "" @@ -479,7 +485,10 @@ func (c *eggplantProductCode) channelFive(ctx context.Context, forwardUrl *url.U // 第七个通道 func (c *eggplantProductCode) channelSix(ctx context.Context, forwardUrl *url.URL) (bool, string, string) { - queryResp, err := resty.New().R().EnableTrace().SetContext(ctx).Get(forwardUrl.String()) + webClient := resty.New() + otelresty.TraceClient(webClient) + queryResp, err := webClient.R().EnableTrace().SetContext(ctx).Get(forwardUrl.String()) + if err != nil { otelTrace.Logger.WithContext(ctx).Error("请求失败", zap.Error(err)) return false, "请求页面失败", "" diff --git a/internal/service/supplier/third_party/pool/card_sender/fat_six.go b/internal/service/supplier/third_party/pool/card_sender/fat_six.go index 30e2ec0..03337fb 100644 --- a/internal/service/supplier/third_party/pool/card_sender/fat_six.go +++ b/internal/service/supplier/third_party/pool/card_sender/fat_six.go @@ -18,6 +18,7 @@ import ( "time" "github.com/beego/beego/v2/client/httplib" + "github.com/dubonzi/otelresty" "github.com/duke-git/lancet/v2/convertor" "github.com/duke-git/lancet/v2/cryptor" "github.com/duke-git/lancet/v2/maputil" @@ -111,6 +112,8 @@ func (s *SendCardTaskTypeFatSix) CreateOrder(ctx context.Context, roadUid string }).SetHeaders(map[string]string{ "user-agent": fakeuseragent.RandomUserAgent(), }) + + otelresty.TraceClient(webClient) createTime := time.Now() captchaCode := "" for range 5 { @@ -175,6 +178,7 @@ func (s *SendCardTaskTypeFatSix) HandleSendCardTask(ctx context.Context, orderIt }).SetHeaders(map[string]string{ "Origin": "https://api.xxsbm.com", }) + otelresty.TraceClient(webClient) ocrResp := "" if ocrRespCode, ok := orderItem.Params["captchaCode"]; ok { @@ -188,7 +192,7 @@ func (s *SendCardTaskTypeFatSix) HandleSendCardTask(ctx context.Context, orderIt span.AddEvent("changeProxy") - for range 10 { + for range 20 { errRes = nil span.AddEvent("getProxy") proxy, err2 := utils.GetProxy(ctx, needChangeProxyId, SendCardTaskTypeEnumFatSix.String()) @@ -252,7 +256,12 @@ func (s *SendCardTaskTypeFatSix) HandleSendCardTask(ctx context.Context, orderIt Code int `json:"code"` Msg string `json:"msg"` }{} - otelTrace.Logger.WithContext(ctx).Info("提交支付返回", zap.Any("response", resp)) + otelTrace.Logger.WithContext(ctx).Info("提交支付返回", zap.Any("response", resp), zap.Any("formData", map[string]string{ + "order_no": orderNo, + "card_no": task.CardInfo.CardNo, + "pass": task.CardInfo.Data, + "captcha": ocrResp, + })) err2 = json.Unmarshal(resp.Body(), &submitRespStr) if err2 != nil { otelTrace.Logger.WithContext(ctx).Error("json解析失败", zap.Error(err), zap.Any("response", resp)) @@ -273,6 +282,10 @@ func (s *SendCardTaskTypeFatSix) HandleSendCardTask(ctx context.Context, orderIt continue } + if submitRespStr.Msg == "该订单号的订单已经充值成功,可重新下单提交卡密" { + return nil + } + if submitRespStr.Code != 0 { otelTrace.Logger.WithContext(ctx).Error("支付失败", zap.Any("response", resp)) return fmt.Errorf("支付失败:%s", submitRespStr.Msg) @@ -282,7 +295,7 @@ func (s *SendCardTaskTypeFatSix) HandleSendCardTask(ctx context.Context, orderIt if errRes != nil { return errRes } - return errors.New("提交失败") + return errors.New("提交失败,请重新提交") } func (s *SendCardTaskTypeFatSix) QueryOrder(ctx context.Context, orderItem OrderPoolItem, task SendCardTask) error { diff --git a/internal/service/supplier/third_party/pool/card_sender/fat_six_test.go b/internal/service/supplier/third_party/pool/card_sender/fat_six_test.go index fcc6f12..3ec0ba9 100644 --- a/internal/service/supplier/third_party/pool/card_sender/fat_six_test.go +++ b/internal/service/supplier/third_party/pool/card_sender/fat_six_test.go @@ -2,18 +2,26 @@ package card_sender import ( "context" + "gateway/internal/service/supplier" "testing" ) func TestSendCardTaskTypeFatSix_HandleSendCardTask(t *testing.T) { + service := SendCardTaskTypeFatSix{} + // + service.HandleSendCardTask(t.Context(), OrderPoolItem{ + PayURL: "https://api.xxsbm.com/pay?order_no=202509101558320002967702", + }, SendCardTask{ + CardInfo: supplier.RedeemCardInfo{ + CardNo: "888888100033303564", + Data: "T6HKNJPFANR5QVG", + }, + }) +} + +func TestSendCardTaskTypeFatSix_CreateOrder(t *testing.T) { service := SendCardTaskTypeFatSix{} ctx := context.Background() order, _ := service.CreateOrder(ctx, "4444cu6b56uqgjec73alc5e0", 100) _ = order - //service.HandleSendCardTask(ctx, order, *NewSendCardTask(ctx, order.RoadUid, order.OrderID, true, 1, SendCardTaskTypeEnumFatSix, supplier.RedeemCardInfo{ - // CardNo: "1234567890", - // Data: "1234567890", - // FaceType: "1", - // RecoveryType: "1", - //})) } diff --git a/internal/service/supplier/third_party/pool/card_sender/flyfishv2.go b/internal/service/supplier/third_party/pool/card_sender/flyfishv2.go index a285ff7..e8c084f 100644 --- a/internal/service/supplier/third_party/pool/card_sender/flyfishv2.go +++ b/internal/service/supplier/third_party/pool/card_sender/flyfishv2.go @@ -15,6 +15,7 @@ import ( "strings" "time" + "github.com/dubonzi/otelresty" "github.com/duke-git/lancet/v2/convertor" "github.com/duke-git/lancet/v2/maputil" "github.com/duke-git/lancet/v2/pointer" @@ -45,6 +46,7 @@ func (s *SendCardTaskTypeFlyFishV2) CreateOrder(ctx context.Context, roadUid str formData["sign"] = s.sign(ctx, formData, gojson.Json(roadInfo.Params).Get("key").Tostring()) webClient := resty.New().SetHeader("Content-Type", "application/x-www-form-urlencoded"). SetHeader("Accept", "application/json").SetTimeout(time.Second * 5).SetRetryCount(3) + otelresty.TraceClient(webClient) resp, err := webClient.R().SetFormData(formData).Post("https://apify.fkpay.online/submitPay.html") if err != nil { @@ -111,6 +113,8 @@ func (s *SendCardTaskTypeFlyFishV2) HandleSendCardTask(ctx context.Context, orde } return nil }) + otelresty.TraceClient(webClient) + queryRes, err := webClient.R().Get(queryUrl.String()) if err != nil { return errors.New("请求提交地址失败") diff --git a/internal/service/supplier/third_party/pool/card_sender/luban_test.go b/internal/service/supplier/third_party/pool/card_sender/luban_test.go index 67f3b79..3395d4a 100644 --- a/internal/service/supplier/third_party/pool/card_sender/luban_test.go +++ b/internal/service/supplier/third_party/pool/card_sender/luban_test.go @@ -1,24 +1,26 @@ package card_sender import ( - "context" - "gateway/internal/service/supplier" "testing" + + "github.com/google/uuid" ) func TestSendCardTaskTypeLuban_CreateOrder(t *testing.T) { - service := &SendCardTaskTypeLuban{} - order, err := service.CreateOrder(context.Background(), "1234567890", 100) - if err != nil { - t.Errorf("CreateOrder() error = %v", err) - } - t.Logf("CreateOrder() got = %v", order) - service.HandleSendCardTask(context.Background(), order, SendCardTask{ - CardInfo: supplier.RedeemCardInfo{ - CardNo: "1234567890", - Data: "1234567890", - FaceType: "1", - RecoveryType: "1", - }, - }) + //service := &SendCardTaskTypeLuban{} + //order, err := service.CreateOrder(context.Background(), "1234567890", 100) + //if err != nil { + // t.Errorf("CreateOrder() error = %v", err) + //} + //t.Logf("CreateOrder() got = %v", order) + //service.HandleSendCardTask(context.Background(), order, SendCardTask{ + // CardInfo: supplier.RedeemCardInfo{ + // CardNo: "1234567890", + // Data: "1234567890", + // FaceType: "1", + // RecoveryType: "1", + // }, + //}) + uid, _ := uuid.NewV7() + t.Log(uid.String()) } diff --git a/internal/service/supplier/third_party/pool/card_sender/magic_fish.go b/internal/service/supplier/third_party/pool/card_sender/magic_fish.go index 48deebc..fd4b03d 100644 --- a/internal/service/supplier/third_party/pool/card_sender/magic_fish.go +++ b/internal/service/supplier/third_party/pool/card_sender/magic_fish.go @@ -16,6 +16,7 @@ import ( "time" "github.com/beego/beego/v2/client/httplib" + "github.com/dubonzi/otelresty" "github.com/duke-git/lancet/v2/convertor" "github.com/duke-git/lancet/v2/maputil" "github.com/duke-git/lancet/v2/pointer" @@ -24,6 +25,8 @@ import ( "github.com/go-resty/resty/v2" "github.com/iunary/fakeuseragent" "github.com/widuu/gojson" + "go.opentelemetry.io/otel/attribute" + "go.opentelemetry.io/otel/trace" "go.uber.org/zap" ) @@ -70,6 +73,8 @@ func (s *SendCardTaskTypeMagicFish) CreateOrder(ctx context.Context, roadUid str }).SetHeaders(map[string]string{ "user-agent": fakeuseragent.RandomUserAgent(), }) + otelresty.TraceClient(webClient) + createTime := time.Now() captchaCode := "" for range 5 { @@ -130,6 +135,13 @@ func (s *SendCardTaskTypeMagicFish) CreateOrder(ctx context.Context, roadUid str } func (s *SendCardTaskTypeMagicFish) HandleSendCardTask(ctx context.Context, orderItem OrderPoolItem, task SendCardTask) error { + ctx, span := otelTrace.Span(ctx, "SendCardTaskTypeMagicFish", "SendCardTaskTypeMagicFish.HandleSendCardTask", trace.WithAttributes( + attribute.String("orderId", orderItem.OrderID), + attribute.String("bankOrderId", task.LocalOrderID), + attribute.String("cardNo", task.CardInfo.CardNo), + attribute.String("cardPassword", task.CardInfo.Data), + )) + defer span.End() return (&SendCardTaskTypeFatSix{}).HandleSendCardTask(ctx, orderItem, task) } diff --git a/internal/service/supplier/third_party/pool/card_sender/sesame.go b/internal/service/supplier/third_party/pool/card_sender/sesame.go index 7b4f39d..2edd758 100644 --- a/internal/service/supplier/third_party/pool/card_sender/sesame.go +++ b/internal/service/supplier/third_party/pool/card_sender/sesame.go @@ -18,6 +18,7 @@ import ( "time" "github.com/beego/beego/v2/client/httplib" + "github.com/dubonzi/otelresty" "github.com/duke-git/lancet/v2/convertor" "github.com/duke-git/lancet/v2/cryptor" "github.com/duke-git/lancet/v2/maputil" @@ -129,6 +130,7 @@ func (s *SendCardTaskTypeSesame) HandleSendCardTask(ctx context.Context, orderIt span.SetAttributes(attribute.String("payOrderId", orderNo)) webClient := resty.New().SetTimeout(5 * time.Second).SetRetryCount(3) + otelresty.TraceClient(webClient) resp, err := webClient.R().SetContext(ctx).Get(orderItem.PayURL) if err != nil { @@ -211,8 +213,12 @@ func (s *SendCardTaskTypeSesame) QueryOrder(ctx context.Context, orderItem Order } params, _ := structs.ToMap(reqBody) reqBody.Sign = s.sign(params, maputil.Keys(params), gojson.Json(roadInfo.Params).Get("queryKey").Tostring()) - resp, err := resty.New().R().SetContext(ctx).SetBody(reqBody).Post("http://85.209.230.37/api/ordery/query") + webClient := resty.New() + otelresty.TraceClient(webClient) + + resp, err := webClient.R().SetContext(ctx).SetBody(reqBody).Post("http://85.209.230.37/api/ordery/query") span.AddEvent("queryOrder") + if err != nil { otelTrace.Logger.WithContext(ctx).Error("查询订单失败", zap.Error(err)) return err diff --git a/internal/service/supplier/third_party/pool/card_sender/up.go b/internal/service/supplier/third_party/pool/card_sender/up.go index f7f8ef1..0deaf93 100644 --- a/internal/service/supplier/third_party/pool/card_sender/up.go +++ b/internal/service/supplier/third_party/pool/card_sender/up.go @@ -15,6 +15,7 @@ import ( "strings" "time" + "github.com/dubonzi/otelresty" "github.com/duke-git/lancet/v2/convertor" "github.com/duke-git/lancet/v2/maputil" "github.com/duke-git/lancet/v2/pointer" @@ -53,8 +54,10 @@ func (s *SendCardTaskTypeUp) CreateOrder(ctx context.Context, roadUid string, fa } formData["pay_md5sign"] = s.sign(ctx, formData, gojson.Json(roadInfo.Params).Get("key").Tostring()) - response, err := resty.New().EnableTrace().SetTimeout(time.Second * 5).SetRetryCount(3). - R().SetContext(ctx).SetFormData(formData).Post("http://abdnvca.uppay.sgbyzf.com/Pay_Index.html") + webClient := resty.New().EnableTrace().SetTimeout(time.Second * 5).SetRetryCount(3) + otelresty.TraceClient(webClient) + + response, err := webClient.R().SetContext(ctx).SetFormData(formData).Post("http://abdnvca.uppay.sgbyzf.com/Pay_Index.html") if err != nil { otelTrace.Logger.WithContext(ctx).Error("下单失败", zap.Error(err)) diff --git a/internal/service/supplier/third_party/pool/card_sender/wan_xin.go b/internal/service/supplier/third_party/pool/card_sender/wan_xin.go index c2d603b..758fcba 100644 --- a/internal/service/supplier/third_party/pool/card_sender/wan_xin.go +++ b/internal/service/supplier/third_party/pool/card_sender/wan_xin.go @@ -15,6 +15,7 @@ import ( "strings" "time" + "github.com/dubonzi/otelresty" "github.com/duke-git/lancet/v2/convertor" "github.com/duke-git/lancet/v2/maputil" "github.com/duke-git/lancet/v2/pointer" @@ -35,6 +36,7 @@ func (s *SendCardTaskTypeWanXin) CreateOrder(ctx context.Context, roadUid string cfg := new(config.Config) request := resty.New().EnableTrace().SetTimeout(time.Second * 5).SetRetryCount(3) + otelresty.TraceClient(request) orderId := utils.GenerateId() diff --git a/internal/service/supplier/third_party/pool/card_sender/wtr.go b/internal/service/supplier/third_party/pool/card_sender/wtr.go index 8575f5e..6bb3c66 100644 --- a/internal/service/supplier/third_party/pool/card_sender/wtr.go +++ b/internal/service/supplier/third_party/pool/card_sender/wtr.go @@ -15,6 +15,7 @@ import ( "strings" "time" + "github.com/dubonzi/otelresty" "github.com/duke-git/lancet/v2/convertor" "github.com/duke-git/lancet/v2/maputil" "github.com/duke-git/lancet/v2/pointer" @@ -48,8 +49,11 @@ func (s *SendCardTaskTypeWtr) CreateOrder(ctx context.Context, roadUid string, f } formData["sign"] = (&SendCardTaskTypeWtr{}).sign(ctx, formData, gojson.Json(roadInfo.Params).Get("key").Tostring()) - response, err := resty.New().EnableTrace().SetTimeout(time.Second * 5).SetRetryCount(3). - SetFormData(formData).R().SetContext(ctx).Post("https://api.wtrpay.xyz/pay") + webClient := resty.New().EnableTrace().SetTimeout(time.Second * 5).SetRetryCount(3). + SetFormData(formData) + otelresty.TraceClient(webClient) + + response, err := webClient.R().SetContext(ctx).Post("https://api.wtrpay.xyz/pay") if err != nil { otelTrace.Logger.WithContext(ctx).Error("下单失败", zap.Error(err)) @@ -114,6 +118,7 @@ func (s *SendCardTaskTypeWtr) HandleSendCardTask(ctx context.Context, orderItem } return nil }) + otelresty.TraceClient(client) queryResp, err := client.R().SetContext(ctx).Get(orderItem.PayURL) if err != nil { @@ -153,7 +158,7 @@ func (s *SendCardTaskTypeWtr) HandleSendCardTask(ctx context.Context, orderItem if err = json.Unmarshal(resp.Body(), &postResp); err != nil { otelTrace.Logger.WithContext(ctx).Error("转换返回值失败", zap.Error(err), zap.String("response", resp.String()), zap.Any("formData", formData)) - return errors.Join(err, errors.New("提交是吧")) + return errors.Join(err, errors.New("提交失败")) } otelTrace.Logger.WithContext(ctx).Info("提交数据", zap.Any("response", postResp), zap.Any("formData", formData)) if postResp.Code == "1" { diff --git a/internal/utils/date_time.go b/internal/utils/date_time.go index e5d8985..35f3525 100644 --- a/internal/utils/date_time.go +++ b/internal/utils/date_time.go @@ -51,7 +51,8 @@ func GetDateAfterDays(days int) string { func GenerateId() string { mutex.Lock() defer mutex.Unlock() - return strings.ReplaceAll(uuid.NewString(), "-", "") + uid, _ := uuid.NewV7() + return strings.ReplaceAll(uid.String(), "-", "") } // GenerateIpv4 随机生成 ipv4 地址