refactor(service): 添加上下文参数并更新依赖
- 在多个函数中添加 context.Context 参数,以支持上下文传递 - 更新 go.mod 文件中的依赖版本: - go 1.23 - github.com/go-sql-driver/mysql v1.9.0 - 添加多个 opentelemetry 相关依赖 - 更新部分间接依赖版本
This commit is contained in:
48
go.mod
48
go.mod
@@ -1,40 +1,52 @@
|
||||
module gateway
|
||||
|
||||
go 1.22.0
|
||||
go 1.23
|
||||
|
||||
toolchain go1.22.11
|
||||
toolchain go1.23.6
|
||||
|
||||
require github.com/beego/beego/v2 v2.3.4
|
||||
|
||||
require (
|
||||
github.com/allegro/bigcache/v3 v3.1.0
|
||||
github.com/bytedance/gopkg v0.1.2-0.20240828084325-780ca9ee70fb
|
||||
github.com/bytedance/sonic v1.12.8
|
||||
github.com/bytedance/sonic v1.12.9
|
||||
github.com/carlmjohnson/requests v0.24.3
|
||||
github.com/duke-git/lancet/v2 v2.3.4
|
||||
github.com/go-sql-driver/mysql v1.8.1
|
||||
github.com/go-sql-driver/mysql v1.9.0
|
||||
github.com/go-stomp/stomp/v3 v3.1.3
|
||||
github.com/google/uuid v1.6.0
|
||||
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826
|
||||
github.com/pkg/profile v1.7.0
|
||||
github.com/rs/xid v1.6.0
|
||||
github.com/samber/slog-multi v1.4.0
|
||||
github.com/shopspring/decimal v1.4.0
|
||||
github.com/widuu/gojson v0.0.0-20170212122013-7da9d2cd949b
|
||||
go.opentelemetry.io/contrib/bridges/otelslog v0.9.0
|
||||
go.opentelemetry.io/otel v1.34.0
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.10.0
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.34.0
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.34.0
|
||||
go.opentelemetry.io/otel/log v0.10.0
|
||||
go.opentelemetry.io/otel/sdk v1.34.0
|
||||
go.opentelemetry.io/otel/sdk/log v0.10.0
|
||||
go.opentelemetry.io/otel/sdk/metric v1.34.0
|
||||
go.opentelemetry.io/otel/trace v1.34.0
|
||||
)
|
||||
|
||||
require (
|
||||
filippo.io/edwards25519 v1.1.0 // indirect
|
||||
github.com/allegro/bigcache/v3 v3.1.0 // indirect
|
||||
github.com/beorn7/perks v1.0.1 // indirect
|
||||
github.com/bytedance/sonic/loader v0.2.3 // indirect
|
||||
github.com/cenkalti/backoff/v4 v4.3.0 // indirect
|
||||
github.com/cespare/xxhash/v2 v2.3.0 // indirect
|
||||
github.com/cloudwego/base64x v0.1.5 // indirect
|
||||
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
|
||||
github.com/felixge/fgprof v0.9.3 // indirect
|
||||
github.com/google/pprof v0.0.0-20211214055906-6f57359322fd // indirect
|
||||
github.com/go-logr/logr v1.4.2 // indirect
|
||||
github.com/go-logr/stdr v1.2.2 // indirect
|
||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.25.1 // indirect
|
||||
github.com/hashicorp/golang-lru v1.0.2 // indirect
|
||||
github.com/klauspost/compress v1.17.11 // indirect
|
||||
github.com/klauspost/cpuid/v2 v2.2.9 // indirect
|
||||
github.com/kr/text v0.2.0 // indirect
|
||||
github.com/lib/pq v1.10.9 // indirect
|
||||
github.com/mattn/go-sqlite3 v2.0.3+incompatible // indirect
|
||||
github.com/mitchellh/mapstructure v1.5.0 // indirect
|
||||
@@ -44,16 +56,22 @@ require (
|
||||
github.com/prometheus/client_model v0.6.1 // indirect
|
||||
github.com/prometheus/common v0.62.0 // indirect
|
||||
github.com/prometheus/procfs v0.15.1 // indirect
|
||||
github.com/rogpeppe/go-internal v1.13.1 // indirect
|
||||
github.com/samber/lo v1.49.1 // 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
|
||||
golang.org/x/arch v0.13.0 // indirect
|
||||
golang.org/x/crypto v0.32.0 // indirect
|
||||
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
|
||||
go.opentelemetry.io/otel/metric v1.34.0 // indirect
|
||||
go.opentelemetry.io/proto/otlp v1.5.0 // indirect
|
||||
golang.org/x/arch v0.14.0 // indirect
|
||||
golang.org/x/crypto v0.33.0 // indirect
|
||||
golang.org/x/exp v0.0.0-20250128182459-e0ece0dbea4c // indirect
|
||||
golang.org/x/net v0.34.0 // indirect
|
||||
golang.org/x/sys v0.29.0 // indirect
|
||||
golang.org/x/text v0.21.0 // indirect
|
||||
golang.org/x/net v0.35.0 // indirect
|
||||
golang.org/x/sys v0.30.0 // indirect
|
||||
golang.org/x/text v0.22.0 // indirect
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20250115164207-1a7da9e5054f // indirect
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f // indirect
|
||||
google.golang.org/grpc v1.69.4 // indirect
|
||||
google.golang.org/protobuf v1.36.4 // indirect
|
||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||
)
|
||||
|
||||
89
go.sum
89
go.sum
@@ -8,22 +8,20 @@ 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/gopkg v0.1.2-0.20240828084325-780ca9ee70fb h1:glte+Ka6C5efXn/QlEAE/wwNrvE+3mYo/ce69fpvtrE=
|
||||
github.com/bytedance/gopkg v0.1.2-0.20240828084325-780ca9ee70fb/go.mod h1:576VvJ+eJgyCzdjS+c4+77QF3p7ubbtiKARP3TxducM=
|
||||
github.com/bytedance/sonic v1.12.8 h1:4xYRVRlXIgvSZ4e8iVTlMF5szgpXd4AfvuWgA8I8lgs=
|
||||
github.com/bytedance/sonic v1.12.8/go.mod h1:uVvFidNmlt9+wa31S1urfwwthTWteBgG0hWuoKAXTx8=
|
||||
github.com/bytedance/sonic v1.12.9 h1:Od1BvK55NnewtGaJsTDeAOSnLVO2BTSLOe0+ooKokmQ=
|
||||
github.com/bytedance/sonic v1.12.9/go.mod h1:uVvFidNmlt9+wa31S1urfwwthTWteBgG0hWuoKAXTx8=
|
||||
github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU=
|
||||
github.com/bytedance/sonic/loader v0.2.3 h1:yctD0Q3v2NOGfSWPLPvG2ggA2kV6TS6s4wioyEqssH0=
|
||||
github.com/bytedance/sonic/loader v0.2.3/go.mod h1:N8A3vUdtUebEY2/VQC0MyhYeKUFosQU6FxH2JmUe6VI=
|
||||
github.com/carlmjohnson/requests v0.24.3 h1:LYcM/jVIVPkioigMjEAnBACXl2vb42TVqiC8EYNoaXQ=
|
||||
github.com/carlmjohnson/requests v0.24.3/go.mod h1:duYA/jDnyZ6f3xbcF5PpZ9N8clgopubP2nK5i6MVMhU=
|
||||
github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
|
||||
github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
|
||||
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
|
||||
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
|
||||
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
|
||||
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
|
||||
github.com/cloudwego/base64x v0.1.5 h1:XPciSp1xaq2VCSt6lF0phncD4koWyULpl5bUxbfCyP4=
|
||||
github.com/cloudwego/base64x v0.1.5/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w=
|
||||
github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY=
|
||||
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
|
||||
@@ -32,23 +30,27 @@ github.com/duke-git/lancet/v2 v2.3.4 h1:8XGI7P9w+/GqmEBEXYaH/XuNiM0f4/90Ioti0IvY
|
||||
github.com/duke-git/lancet/v2 v2.3.4/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/fgprof v0.9.3 h1:VvyZxILNuCiUCSXtPtYmmtGvb65nqXh2QFWc0Wpf2/g=
|
||||
github.com/felixge/fgprof v0.9.3/go.mod h1:RdbpDgzqYVh/T9fPELJyV7EYJuHB55UTEULNun8eiPw=
|
||||
github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y=
|
||||
github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=
|
||||
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
||||
github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
|
||||
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
|
||||
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
|
||||
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
|
||||
github.com/go-sql-driver/mysql v1.9.0 h1:Y0zIbQXhQKmQgTp44Y1dp3wTXcn804QoTptLZT1vtvo=
|
||||
github.com/go-sql-driver/mysql v1.9.0/go.mod h1:pDetrLJeA3oMujJuvXc8RJoasr589B6A9fwzD3QMrqw=
|
||||
github.com/go-stomp/stomp/v3 v3.1.3 h1:5/wi+bI38O1Qkf2cc7Gjlw7N5beHMWB/BxpX+4p/MGI=
|
||||
github.com/go-stomp/stomp/v3 v3.1.3/go.mod h1:ztzZej6T2W4Y6FlD+Tb5n7HQP3/O5UNQiuC169pIp10=
|
||||
github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc=
|
||||
github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs=
|
||||
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
|
||||
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
|
||||
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
|
||||
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
||||
github.com/google/pprof v0.0.0-20211214055906-6f57359322fd h1:1FjCyPC+syAzJ5/2S8fqdZK1R22vvA0J7JZKcuOIQ7Y=
|
||||
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/grpc-ecosystem/grpc-gateway/v2 v2.25.1 h1:VNqngBF40hVlDloBruUehVYC3ArSgIyScOAyMRqBxRg=
|
||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.25.1/go.mod h1:RBRO7fro65R6tjKzYgLAFo0t1QEXY1Dp+i/bvpRiqiQ=
|
||||
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/ianlancetaylor/demangle v0.0.0-20210905161508-09a460cdf81d/go.mod h1:aYm2/VgdVmcIU8iMfdMvDMsRAQjcfZSKFby6HOFvi/w=
|
||||
github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc=
|
||||
github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0=
|
||||
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
|
||||
@@ -74,8 +76,6 @@ github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9
|
||||
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8=
|
||||
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
|
||||
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
|
||||
github.com/pkg/profile v1.7.0 h1:hnbDkaNWPCLMO9wGLdBFTIZvzDrDfBM2072E1S9gJkA=
|
||||
github.com/pkg/profile v1.7.0/go.mod h1:8Uer0jas47ZQMJ7VD+OHknK4YDY07LPUC6dEvqDjvNo=
|
||||
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=
|
||||
@@ -91,6 +91,10 @@ github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR
|
||||
github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o=
|
||||
github.com/rs/xid v1.6.0 h1:fV591PaemRlL6JfRxGDEPl69wICngIQ3shQtzfy2gxU=
|
||||
github.com/rs/xid v1.6.0/go.mod h1:7XoLgs4eV+QndskICGsho+ADou8ySMSjJKDIan90Nz0=
|
||||
github.com/samber/lo v1.49.1 h1:4BIFyVfuQSEpluc7Fua+j1NolZHiEHEpaSEKdsH0tew=
|
||||
github.com/samber/lo v1.49.1/go.mod h1:dO6KHFzUKXgP8LDhU0oI8d2hekjXnGOu0DB8Jecxd6o=
|
||||
github.com/samber/slog-multi v1.4.0 h1:pwlPMIE7PrbTHQyKWDU+RIoxP1+HKTNOujk3/kdkbdg=
|
||||
github.com/samber/slog-multi v1.4.0/go.mod h1:FsQ4Uv2L+E/8TZt+/BVgYZ1LoDWCbfCU21wVIoMMrO8=
|
||||
github.com/shiena/ansicolor v0.0.0-20230509054315-a9deabde6e02 h1:v9ezJDHA1XGxViAUSIoO/Id7Fl63u6d0YmsAm+/p2hs=
|
||||
github.com/shiena/ansicolor v0.0.0-20230509054315-a9deabde6e02/go.mod h1:RF16/A3L0xSa0oSERcnhd8Pu3IXSDZSK2gmGIMsttFE=
|
||||
github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k=
|
||||
@@ -111,20 +115,48 @@ github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyC
|
||||
github.com/widuu/gojson v0.0.0-20170212122013-7da9d2cd949b h1:ieRJ8K7QAPWWltEOv7rzMruuPd7gbeAqTaBFhUECIy0=
|
||||
github.com/widuu/gojson v0.0.0-20170212122013-7da9d2cd949b/go.mod h1:9W1pyetRkwXqjR9tjOSrSuhGHBK0EqXoQSwWbhBHHwA=
|
||||
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
|
||||
golang.org/x/arch v0.13.0 h1:KCkqVVV1kGg0X87TFysjCJ8MxtZEIU4Ja/yXGeoECdA=
|
||||
golang.org/x/arch v0.13.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys=
|
||||
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/otelslog v0.9.0 h1:N+78eXSlu09kii5nkiM+01YbtWe01oZLPPLhNlEKhus=
|
||||
go.opentelemetry.io/contrib/bridges/otelslog v0.9.0/go.mod h1:/2KhfLAhtQpgnhIk1f+dftA3fuuMcZjiz//Dc9yfaEs=
|
||||
go.opentelemetry.io/otel v1.34.0 h1:zRLXxLCgL1WyKsPVrgbSdMN4c0FMkDAskSTQP+0hdUY=
|
||||
go.opentelemetry.io/otel v1.34.0/go.mod h1:OWFPOQ+h4G8xpyjgqo4SxJYdDQ/qmRH+wivy7zzx9oI=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.10.0 h1:q/heq5Zh8xV1+7GoMGJpTxM2Lhq5+bFxB29tshuRuw0=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.10.0/go.mod h1:leO2CSTg0Y+LyvmR7Wm4pUxE8KAmaM2GCVx7O+RATLA=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.34.0 h1:opwv08VbCZ8iecIWs+McMdHRcAXzjAeda3uG2kI/hcA=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.34.0/go.mod h1:oOP3ABpW7vFHulLpE8aYtNBodrHhMTrvfxUXGvqm7Ac=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0 h1:OeNbIYk/2C15ckl7glBlOBp5+WlYsOElzTNmiPW/x60=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0/go.mod h1:7Bept48yIeqxP2OZ9/AqIpYS94h2or0aB4FypJTc8ZM=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.34.0 h1:BEj3SPM81McUZHYjRS5pEgNgnmzGJ5tRpU5krWnV8Bs=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.34.0/go.mod h1:9cKLGBDzI/F3NoHLQGm4ZrYdIHsvGt6ej6hUowxY0J4=
|
||||
go.opentelemetry.io/otel/log v0.10.0 h1:1CXmspaRITvFcjA4kyVszuG4HjA61fPDxMb7q3BuyF0=
|
||||
go.opentelemetry.io/otel/log v0.10.0/go.mod h1:PbVdm9bXKku/gL0oFfUF4wwsQsOPlpo4VEqjvxih+FM=
|
||||
go.opentelemetry.io/otel/metric v1.34.0 h1:+eTR3U0MyfWjRDhmFMxe2SsW64QrZ84AOhvqS7Y+PoQ=
|
||||
go.opentelemetry.io/otel/metric v1.34.0/go.mod h1:CEDrp0fy2D0MvkXE+dPV7cMi8tWZwX3dmaIhwPOaqHE=
|
||||
go.opentelemetry.io/otel/sdk v1.34.0 h1:95zS4k/2GOy069d321O8jWgYsW3MzVV+KuSPKp7Wr1A=
|
||||
go.opentelemetry.io/otel/sdk v1.34.0/go.mod h1:0e/pNiaMAqaykJGKbi+tSjWfNNHMTxoC9qANsCzbyxU=
|
||||
go.opentelemetry.io/otel/sdk/log v0.10.0 h1:lR4teQGWfeDVGoute6l0Ou+RpFqQ9vaPdrNJlST0bvw=
|
||||
go.opentelemetry.io/otel/sdk/log v0.10.0/go.mod h1:A+V1UTWREhWAittaQEG4bYm4gAZa6xnvVu+xKrIRkzo=
|
||||
go.opentelemetry.io/otel/sdk/metric v1.34.0 h1:5CeK9ujjbFVL5c1PhLuStg1wxA7vQv7ce1EK0Gyvahk=
|
||||
go.opentelemetry.io/otel/sdk/metric v1.34.0/go.mod h1:jQ/r8Ze28zRKoNRdkjCZxfs6YvBTG1+YIqyFVFYec5w=
|
||||
go.opentelemetry.io/otel/trace v1.34.0 h1:+ouXS2V8Rd4hp4580a8q23bg0azF2nI8cqLYnC8mh/k=
|
||||
go.opentelemetry.io/otel/trace v1.34.0/go.mod h1:Svm7lSjQD7kG7KJ/MUHPVXSDGz2OX4h0M2jHBhmSfRE=
|
||||
go.opentelemetry.io/proto/otlp v1.5.0 h1:xJvq7gMzB31/d406fB8U5CBdyQGw4P399D1aQWU/3i4=
|
||||
go.opentelemetry.io/proto/otlp v1.5.0/go.mod h1:keN8WnHxOy8PG0rQZjJJ5A2ebUoafqWp0eVQ4yIXvJ4=
|
||||
golang.org/x/arch v0.14.0 h1:z9JUEZWr8x4rR0OU6c4/4t6E6jOZ8/QBS2bBYBm4tx4=
|
||||
golang.org/x/arch v0.14.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys=
|
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc=
|
||||
golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc=
|
||||
golang.org/x/crypto v0.33.0 h1:IOBPskki6Lysi0lo9qQvbxiQ+FvsCC/YWOecCHAixus=
|
||||
golang.org/x/crypto v0.33.0/go.mod h1:bVdXmD7IV/4GdElGPozy6U7lWdRXA4qyRVGJV57uQ5M=
|
||||
golang.org/x/exp v0.0.0-20250128182459-e0ece0dbea4c h1:KL/ZBHXgKGVmuZBZ01Lt57yE5ws8ZPSkkihmEyq7FXc=
|
||||
golang.org/x/exp v0.0.0-20250128182459-e0ece0dbea4c/go.mod h1:tujkw807nyEEAamNbDrEGzRav+ilXA7PCRAd6xsmwiU=
|
||||
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
|
||||
golang.org/x/net v0.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0=
|
||||
golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k=
|
||||
golang.org/x/net v0.35.0 h1:T5GQRQb2y08kTAByq9L4/bz8cipCdA8FbRTXewonqY8=
|
||||
golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk=
|
||||
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/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
@@ -132,20 +164,25 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w
|
||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/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-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU=
|
||||
golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc=
|
||||
golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
|
||||
golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
|
||||
golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM=
|
||||
golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY=
|
||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||
golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
||||
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-20250115164207-1a7da9e5054f h1:gap6+3Gk41EItBuyi4XX/bp4oqJ3UwuIMl25yGinuAA=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20250115164207-1a7da9e5054f/go.mod h1:Ic02D47M+zbarjYYUlK57y316f2MoN0gjAwI3f2S95o=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f h1:OxYkA3wjPsZyBylwymxSHa7ViiW1Sml4ToBrncvFehI=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f/go.mod h1:+2Yz8+CLJbIfL9z73EW45avw8Lmge3xVElCP9zEKi50=
|
||||
google.golang.org/grpc v1.69.4 h1:MF5TftSMkd8GLw/m0KM6V8CMOCY6NZ1NQDPGFgbTt4A=
|
||||
google.golang.org/grpc v1.69.4/go.mod h1:vyjdE6jLBI76dgpDojsFGNaHlxdjXN9ghpnd2o7JGZ4=
|
||||
google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM=
|
||||
google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
|
||||
@@ -44,7 +44,7 @@ func (c *OrderController) OrderUpdate() {
|
||||
case config.SUCCESS:
|
||||
flag = service.SolvePaySuccess(bankOrderId, orderInfo.FactAmount, orderInfo.BankTransId, "手动修正至成功")
|
||||
case config.FAIL:
|
||||
flag = service.SolvePayFail(bankOrderId, orderInfo.BankTransId, "手动修正至失败")
|
||||
flag = service.SolvePayFail(c.Ctx.Request.Context(), bankOrderId, orderInfo.BankTransId, "手动修正至失败")
|
||||
case config.FREEZE_AMOUNT:
|
||||
// 将这笔订单进行冻结
|
||||
flag = service.SolveOrderFreeze(bankOrderId)
|
||||
|
||||
@@ -27,6 +27,7 @@ import (
|
||||
"github.com/duke-git/lancet/v2/convertor"
|
||||
"github.com/duke-git/lancet/v2/random"
|
||||
"github.com/duke-git/lancet/v2/structs"
|
||||
"log/slog"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
@@ -67,17 +68,17 @@ func (c *ScanController) Scan() {
|
||||
c.SolveFailJSON(p)
|
||||
return
|
||||
}
|
||||
p = service.JudgeParams(p)
|
||||
p = service.OrderIsValid(p)
|
||||
p = service.NotifyUrlIsValid(p)
|
||||
p = service.OrderPeriodIsValid(p)
|
||||
p = service.OrderPriceIsValid(p)
|
||||
p = service.ExValueIsValid(p)
|
||||
p = service.JudgeParams(c.Ctx.Request.Context(), p)
|
||||
p = service.OrderIsValid(c.Ctx.Request.Context(), p)
|
||||
p = service.NotifyUrlIsValid(c.Ctx.Request.Context(), p)
|
||||
p = service.OrderPeriodIsValid(c.Ctx.Request.Context(), p)
|
||||
p = service.OrderPriceIsValid(c.Ctx.Request.Context(), p)
|
||||
p = service.ExValueIsValid(c.Ctx.Request.Context(), p)
|
||||
if p.Code == -1 {
|
||||
c.SolveFailJSON(p)
|
||||
return
|
||||
}
|
||||
logs.Info("【BaseGateway】获取商户请求过来的参数:", p.Params)
|
||||
slog.InfoContext(c.Ctx.Request.Context(), "【BaseGateway】获取商户请求过来的参数:", p.Params)
|
||||
// 签名验证
|
||||
if !utils.Md5MFVerify(p.Params, p.MerchantInfo.MerchantSecret) &&
|
||||
!utils.Md5TMPMFVerify(p.Params, p.MerchantInfo.MerchantSecret) &&
|
||||
@@ -143,11 +144,11 @@ func (c *ScanController) Scan() {
|
||||
if hiddenCfg.Strategy == int(consts.StealRuleTypeStealBlank) {
|
||||
newBankOrderId, err2 := service.CreateHiddenBlankOrder(&orderInfo, int64(delayDuration))
|
||||
if err2 != nil {
|
||||
logs.Info("创建订单失败【偷卡】:%v", err2.Error())
|
||||
slog.ErrorContext(c.Ctx.Request.Context(), "添加订单关联失败【偷卡】:%v", err2.Error())
|
||||
}
|
||||
//添加订单关联
|
||||
if err2 = service.CreateRelateHideOrderRecord(newBankOrderId, &orderInfo, hiddenCfg, delayDuration); err2 != nil {
|
||||
logs.Info("添加订单关联失败【偷卡】:%v", err2.Error())
|
||||
slog.ErrorContext(c.Ctx.Request.Context(), "添加订单关联失败【偷卡】:%v", err2.Error())
|
||||
}
|
||||
//错误订单回调上游
|
||||
//oldBankOrderId := orderInfo.BankOrderId
|
||||
@@ -161,24 +162,23 @@ func (c *ScanController) Scan() {
|
||||
if hiddenCfg.Strategy == int(consts.StealRuleTypeStealDelay) {
|
||||
newBankOrderId, err2 := service.CreateHiddenErrorOrder(&orderInfo, int64(delayDuration))
|
||||
if err2 != nil {
|
||||
logs.Info("创建订单失败【偷卡】:%v", err2.Error())
|
||||
slog.ErrorContext(c.Ctx.Request.Context(), "添加订单关联失败【偷卡】:%v", err2.Error())
|
||||
}
|
||||
//添加订单关联
|
||||
if err2 = service.CreateRelateHideOrderRecord(newBankOrderId, &orderInfo, hiddenCfg, delayDuration); err2 != nil {
|
||||
logs.Info("添加订单关联失败【偷卡】:%v", err2.Error())
|
||||
slog.ErrorContext(c.Ctx.Request.Context(), "添加订单关联失败【偷卡】:%v", err2.Error())
|
||||
}
|
||||
oldBankOrderId := orderInfo.BankOrderId
|
||||
//错误订单回调上游
|
||||
delayPool.Go(func() {
|
||||
time.Sleep(time.Duration(delayDuration) * time.Second)
|
||||
//已有的订单回调为失败
|
||||
service.SolvePayFail(oldBankOrderId, orderInfo.BankTransId, hiddenCfg.ExtraReturnInfo)
|
||||
service.SolvePayFail(c.Ctx.Request.Context(), oldBankOrderId, orderInfo.BankTransId, hiddenCfg.ExtraReturnInfo)
|
||||
})
|
||||
orderInfo.BankOrderId = newBankOrderId
|
||||
}
|
||||
}
|
||||
|
||||
logs.Info("请求订单信息,订单信息:%+v", orderInfo)
|
||||
slog.Info("请求订单信息,订单信息:%+v", orderInfo)
|
||||
cdata := supplier.RedeemCardInfo{}
|
||||
err = json.Unmarshal([]byte(orderInfo.ExValue), &cdata)
|
||||
if err != nil {
|
||||
@@ -194,12 +194,11 @@ func (c *ScanController) Scan() {
|
||||
if !isAllowed {
|
||||
logs.Info("IP被限制,无法兑换", p.ClientIP)
|
||||
c.Data["json"] = response.CommonErr(-1, errors.New("提交失败").Error())
|
||||
service.SolvePayFail(orderInfo.BankOrderId, "", "IP限制,无法兑换")
|
||||
service.SolvePayFail(c.Ctx.Request.Context(), orderInfo.BankOrderId, "", "IP限制,无法兑换")
|
||||
_ = c.ServeJSON()
|
||||
return
|
||||
}
|
||||
logs.Info("获取商户部署信息:%+v", mt)
|
||||
|
||||
slog.Info("获取商户部署信息:%+v", mt)
|
||||
if mt.AutoSettle == config.NO {
|
||||
params := map[string]any{
|
||||
"orderNo": orderInfo.BankOrderId,
|
||||
@@ -224,15 +223,14 @@ func (c *ScanController) Scan() {
|
||||
supplierByCode := third_party.GetPaySupplierByCode(supplierCode)
|
||||
if supplierByCode == nil {
|
||||
// 插入处理失败的动账通知
|
||||
service.SolvePayFail(orderInfo.BankOrderId, "", "")
|
||||
logs.Error("获取上游渠道失败,请联系客服", supplierCode)
|
||||
err = errors.New("获取上游渠道失败,请联系客服")
|
||||
c.Data["json"] = response.CommonErr(-1, err.Error())
|
||||
service.SolvePayFail(c.Ctx.Request.Context(), orderInfo.BankOrderId, "", "")
|
||||
slog.ErrorContext(c.Ctx.Request.Context(), "获取上游渠道失败,请联系客服:%v", supplierCode)
|
||||
c.Data["json"] = response.CommonErr(-1, errors.New("获取上游渠道失败,请联系客服").Error())
|
||||
_ = c.ServeJSON()
|
||||
c.StopRun()
|
||||
return
|
||||
}
|
||||
logs.Info("获取供应商信息:%+v", supplierCode)
|
||||
slog.ErrorContext(c.Ctx.Request.Context(), "获取供应商信息:%+v", supplierByCode)
|
||||
scanData := supplierByCode.Scan(orderInfo, p.RoadInfo, p.MerchantInfo)
|
||||
order.InsertCardReturnData(scanData.BankNo, scanData.ReturnData)
|
||||
if scanData.Status == "00" {
|
||||
@@ -242,12 +240,11 @@ func (c *ScanController) Scan() {
|
||||
return
|
||||
}
|
||||
// 插入处理失败的动账通知
|
||||
service.SolvePayFail(orderInfo.BankOrderId, "", scanData.Msg)
|
||||
service.SolvePayFail(c.Ctx.Request.Context(), orderInfo.BankOrderId, "", scanData.Msg)
|
||||
p.Msg = scanData.Msg
|
||||
p.Code = -1
|
||||
c.SolveFailJSON(p)
|
||||
return
|
||||
|
||||
}
|
||||
|
||||
// SolveFailJSON 处理错误的返回
|
||||
|
||||
178
internal/otel/init.go
Normal file
178
internal/otel/init.go
Normal file
@@ -0,0 +1,178 @@
|
||||
package otel
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/beego/beego/v2/server/web"
|
||||
beecontext "github.com/beego/beego/v2/server/web/context"
|
||||
slogmulti "github.com/samber/slog-multi"
|
||||
"go.opentelemetry.io/contrib/bridges/otelslog"
|
||||
"go.opentelemetry.io/otel"
|
||||
"go.opentelemetry.io/otel/attribute"
|
||||
"go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp"
|
||||
"go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp"
|
||||
"go.opentelemetry.io/otel/exporters/otlp/otlptrace"
|
||||
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp"
|
||||
"go.opentelemetry.io/otel/log/global"
|
||||
"go.opentelemetry.io/otel/propagation"
|
||||
sdklog "go.opentelemetry.io/otel/sdk/log"
|
||||
sdkMetric "go.opentelemetry.io/otel/sdk/metric"
|
||||
"go.opentelemetry.io/otel/sdk/resource"
|
||||
sdktrace "go.opentelemetry.io/otel/sdk/trace"
|
||||
"log/slog"
|
||||
"net/http"
|
||||
"os"
|
||||
|
||||
"go.opentelemetry.io/otel/trace"
|
||||
"time"
|
||||
)
|
||||
|
||||
var (
|
||||
serviceName = "拉单服务"
|
||||
collectorURL = "otel-collector.kkknametrans.buzz"
|
||||
)
|
||||
|
||||
func InitTracer() (func(context.Context) error, func(context.Context) error, func(context.Context) error) {
|
||||
ctx := context.Background()
|
||||
|
||||
traceExporter, err := otlptrace.New(
|
||||
ctx,
|
||||
otlptracehttp.NewClient(
|
||||
otlptracehttp.WithInsecure(),
|
||||
otlptracehttp.WithCompression(otlptracehttp.GzipCompression),
|
||||
otlptracehttp.WithEndpoint(collectorURL),
|
||||
),
|
||||
)
|
||||
|
||||
if err != nil {
|
||||
slog.ErrorContext(ctx, "failed to create trace exporter", slog.String("error", err.Error()))
|
||||
return nil, nil, nil
|
||||
}
|
||||
resources, err := resource.New(
|
||||
ctx,
|
||||
resource.WithAttributes(
|
||||
attribute.String("service.name", serviceName),
|
||||
attribute.String("library.language", "go"),
|
||||
),
|
||||
)
|
||||
if err != nil {
|
||||
slog.ErrorContext(ctx, "failed to create resources", slog.String("error", err.Error()))
|
||||
return nil, nil, nil
|
||||
}
|
||||
|
||||
otel.SetTracerProvider(
|
||||
sdktrace.NewTracerProvider(
|
||||
sdktrace.WithSampler(sdktrace.AlwaysSample()),
|
||||
sdktrace.WithSpanProcessor(sdktrace.NewBatchSpanProcessor(traceExporter,
|
||||
sdktrace.WithBatchTimeout(30*time.Second),
|
||||
sdktrace.WithMaxExportBatchSize(100),
|
||||
)),
|
||||
sdktrace.WithBatcher(traceExporter),
|
||||
sdktrace.WithResource(resources),
|
||||
),
|
||||
)
|
||||
// Set up meter provider.
|
||||
metricExporter, err := otlpmetrichttp.New(
|
||||
ctx,
|
||||
otlpmetrichttp.WithInsecure(),
|
||||
otlpmetrichttp.WithCompression(otlpmetrichttp.GzipCompression),
|
||||
otlpmetrichttp.WithEndpoint(collectorURL))
|
||||
if err != nil {
|
||||
slog.ErrorContext(ctx, "failed to create trace exporter", slog.String("error", err.Error()))
|
||||
return nil, nil, nil
|
||||
}
|
||||
otel.SetMeterProvider(
|
||||
sdkMetric.NewMeterProvider(
|
||||
sdkMetric.WithReader(
|
||||
sdkMetric.NewPeriodicReader(
|
||||
metricExporter,
|
||||
sdkMetric.WithInterval(30*time.Second),
|
||||
),
|
||||
),
|
||||
sdkMetric.WithResource(resources),
|
||||
),
|
||||
)
|
||||
|
||||
logExporter, err := otlploghttp.New(
|
||||
ctx,
|
||||
otlploghttp.WithCompression(otlploghttp.GzipCompression),
|
||||
otlploghttp.WithInsecure(),
|
||||
otlploghttp.WithEndpoint(collectorURL),
|
||||
)
|
||||
if err != nil {
|
||||
slog.ErrorContext(ctx, "failed to create log exporter", slog.String("error", err.Error()))
|
||||
return nil, nil, nil
|
||||
}
|
||||
loggerProvider := sdklog.NewLoggerProvider(
|
||||
sdklog.WithProcessor(
|
||||
sdklog.NewBatchProcessor(logExporter, sdklog.WithExportMaxBatchSize(100)),
|
||||
),
|
||||
sdklog.WithResource(resources),
|
||||
)
|
||||
global.SetLoggerProvider(loggerProvider)
|
||||
slog.SetDefault(slog.New(
|
||||
slogmulti.Fanout(
|
||||
otelslog.NewHandler(serviceName, otelslog.WithLoggerProvider(loggerProvider)),
|
||||
slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{
|
||||
AddSource: true,
|
||||
Level: slog.LevelDebug,
|
||||
}),
|
||||
),
|
||||
))
|
||||
return traceExporter.Shutdown, metricExporter.Shutdown, logExporter.Shutdown
|
||||
}
|
||||
|
||||
func Middleware(ctx *beecontext.Context, next web.FilterFunc) {
|
||||
req := ctx.Request
|
||||
routeTrace := otel.Tracer("router")
|
||||
// 提取跟踪上下文
|
||||
spanCtx := otel.GetTextMapPropagator().Extract(req.Context(), propagation.HeaderCarrier(req.Header))
|
||||
spanCtx, span := routeTrace.Start(spanCtx, req.URL.Path,
|
||||
trace.WithAttributes(
|
||||
attribute.String("http.method", req.Method),
|
||||
attribute.String("http.url", req.URL.String()),
|
||||
),
|
||||
)
|
||||
//添加slog
|
||||
defer span.End()
|
||||
//设置response status_code
|
||||
defer func() {
|
||||
if ctx.Request.Response != nil {
|
||||
span.SetAttributes(attribute.Int("http.status_code", ctx.Request.Response.StatusCode))
|
||||
}
|
||||
}()
|
||||
span.SetAttributes(attribute.String("http.method", ctx.Request.Method))
|
||||
span.SetAttributes(attribute.String("peer.hostname", ctx.Request.Host))
|
||||
span.SetAttributes(attribute.String("http.scheme", getScheme(ctx.Request)))
|
||||
span.SetAttributes(attribute.String("component", "beego"))
|
||||
ctx.Request = ctx.Request.WithContext(spanCtx)
|
||||
next(ctx)
|
||||
}
|
||||
|
||||
// Span 抽象span
|
||||
func Span(ctx context.Context, spanName string) func() {
|
||||
//tracer :=
|
||||
_, span := otel.Tracer("service").Start(ctx, spanName)
|
||||
return func() {
|
||||
defer span.End()
|
||||
}
|
||||
}
|
||||
|
||||
func getScheme(req *http.Request) string {
|
||||
scheme := req.Header.Get("X-Forwarded-Proto")
|
||||
if scheme == "" && req.TLS != nil {
|
||||
scheme = "https"
|
||||
} else if scheme == "" {
|
||||
scheme = "http"
|
||||
}
|
||||
return scheme
|
||||
}
|
||||
|
||||
// CustomHandler 自定义的 slog.Handler
|
||||
type CustomHandler struct {
|
||||
slog.Handler
|
||||
}
|
||||
|
||||
// NewCustomHandler 创建一个新的 CustomHandler
|
||||
func NewCustomHandler(handler slog.Handler) *CustomHandler {
|
||||
return &CustomHandler{Handler: handler}
|
||||
}
|
||||
@@ -2,11 +2,18 @@ package routers
|
||||
|
||||
import (
|
||||
"gateway/internal/controllers/gateway"
|
||||
"gateway/internal/otel"
|
||||
"gateway/internal/service/supplier/third_party"
|
||||
"github.com/beego/beego/v2/server/web"
|
||||
beecontext "github.com/beego/beego/v2/server/web/context"
|
||||
)
|
||||
|
||||
func init() {
|
||||
web.InsertFilterChain("*", func(next web.FilterFunc) web.FilterFunc {
|
||||
return func(ctx *beecontext.Context) {
|
||||
otel.Middleware(ctx, next)
|
||||
}
|
||||
})
|
||||
// 网关处理
|
||||
web.Router("/gateway/queryAccountInfo/:channel", &gateway.ScanController{}, "*:QueryAccountInfo")
|
||||
//提交订单接口
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"gateway/internal/config"
|
||||
@@ -62,16 +63,16 @@ func GetMerchantInfo(params map[string]any) *response.PayBaseResp {
|
||||
return c
|
||||
}
|
||||
|
||||
func JudgeParams(c *response.PayBaseResp) *response.PayBaseResp {
|
||||
c = OrderIsValid(c)
|
||||
c = NotifyUrlIsValid(c)
|
||||
c = OrderPeriodIsValid(c)
|
||||
c = OrderPriceIsValid(c)
|
||||
c = ExValueIsValid(c)
|
||||
func JudgeParams(ctx context.Context, c *response.PayBaseResp) *response.PayBaseResp {
|
||||
c = OrderIsValid(ctx, c)
|
||||
c = NotifyUrlIsValid(ctx, c)
|
||||
c = OrderPeriodIsValid(ctx, c)
|
||||
c = OrderPriceIsValid(ctx, c)
|
||||
c = ExValueIsValid(ctx, c)
|
||||
return c
|
||||
}
|
||||
|
||||
func ExValueIsValid(c *response.PayBaseResp) *response.PayBaseResp {
|
||||
func ExValueIsValid(ctx context.Context, c *response.PayBaseResp) *response.PayBaseResp {
|
||||
if c.Params["exValue"] == "" || len(convertor.ToString(c.Params["exValue"])) == 0 {
|
||||
c.Code = -1
|
||||
c.Msg = "扩展参数不能为空"
|
||||
@@ -122,7 +123,7 @@ func CompleteRechargeExValue(exValueStr string, faceValue string) (string, error
|
||||
}
|
||||
|
||||
// NotifyUrlIsValid 判断回调地址是否符合规则
|
||||
func NotifyUrlIsValid(c *response.PayBaseResp) *response.PayBaseResp {
|
||||
func NotifyUrlIsValid(ctx context.Context, c *response.PayBaseResp) *response.PayBaseResp {
|
||||
if c.Params["notifyUrl"] == "" || len(convertor.ToString(c.Params["notifyUrl"])) == 0 {
|
||||
c.Code = -1
|
||||
c.Msg = "订单回调不能为空"
|
||||
@@ -139,7 +140,7 @@ func OsTypeIsValid(c *response.PayBaseResp) *response.PayBaseResp {
|
||||
return c
|
||||
}
|
||||
|
||||
func OrderPeriodIsValid(c *response.PayBaseResp) *response.PayBaseResp {
|
||||
func OrderPeriodIsValid(ctx context.Context, c *response.PayBaseResp) *response.PayBaseResp {
|
||||
if c.Params["orderPeriod"] == "" || len(convertor.ToString(c.Params["orderPeriod"])) == 0 {
|
||||
c.Code = -1
|
||||
c.Msg = "订单过期时间不能为空,默认填写\"1\"即可"
|
||||
@@ -149,7 +150,7 @@ func OrderPeriodIsValid(c *response.PayBaseResp) *response.PayBaseResp {
|
||||
}
|
||||
|
||||
// OrderPriceIsValid 判断订单金额
|
||||
func OrderPriceIsValid(c *response.PayBaseResp) *response.PayBaseResp {
|
||||
func OrderPriceIsValid(ctx context.Context, c *response.PayBaseResp) *response.PayBaseResp {
|
||||
if c.Params["orderPrice"] == "" || len(convertor.ToString(c.Params["orderPrice"])) == 0 {
|
||||
c.Code = -1
|
||||
c.Msg = "订单金额不能为空"
|
||||
@@ -168,7 +169,7 @@ func OrderPriceIsValid(c *response.PayBaseResp) *response.PayBaseResp {
|
||||
}
|
||||
|
||||
// OrderIsValid 判断金额订单号是否为空或者有重复
|
||||
func OrderIsValid(c *response.PayBaseResp) *response.PayBaseResp {
|
||||
func OrderIsValid(ctx context.Context, c *response.PayBaseResp) *response.PayBaseResp {
|
||||
if c.Params["orderNo"] == "" || len(convertor.ToString(c.Params["orderNo"])) == 0 {
|
||||
c.Code = -1
|
||||
c.Msg = "商户订单号不能为空"
|
||||
|
||||
@@ -168,9 +168,9 @@ func SolvePaySuccess(bankOrderId string, factAmount float64, trxNo string, cardR
|
||||
}
|
||||
|
||||
// SolvePayFail 处理支付失败
|
||||
func SolvePayFail(bankOrderId, transId string, cardReturnData string) bool {
|
||||
func SolvePayFail(ctx context.Context, bankOrderId, transId string, cardReturnData string) bool {
|
||||
o := orm.NewOrm()
|
||||
err := o.DoTx(func(ctx context.Context, txOrm orm.TxOrmer) error {
|
||||
err := o.DoTxWithCtx(ctx, func(ctx context.Context, txOrm orm.TxOrmer) error {
|
||||
var orderTmp order.OrderInfo
|
||||
if err := txOrm.Raw("select * from order_info where bank_order_id = ?", bankOrderId).QueryRow(&orderTmp); err != nil || orderTmp.BankOrderId == "" {
|
||||
return err
|
||||
|
||||
@@ -212,7 +212,7 @@ func (c *AppleCardImpl) PayNotify() {
|
||||
}
|
||||
return
|
||||
}
|
||||
isOk := service.SolvePayFail(orderInfo.BankOrderId, "", params["remark"])
|
||||
isOk := service.SolvePayFail(c.Ctx.Request.Context(), orderInfo.BankOrderId, "", params["remark"])
|
||||
if isOk {
|
||||
c.Ctx.WriteString("SUCCESS")
|
||||
} else {
|
||||
|
||||
@@ -188,7 +188,7 @@ func (c *AppleCardSharkImpl) PayNotify() {
|
||||
c.Ctx.WriteString("FAIL")
|
||||
}
|
||||
} else {
|
||||
isOk := service.SolvePayFail(orderInfo.BankOrderId, "", "")
|
||||
isOk := service.SolvePayFail(c.Ctx.Request.Context(), orderInfo.BankOrderId, "", "")
|
||||
if isOk {
|
||||
c.Ctx.WriteString("SUCCESS")
|
||||
} else {
|
||||
|
||||
@@ -131,11 +131,11 @@ func (c *DaiLiImpl) PayNotify() {
|
||||
|
||||
// paySolveController := new(service.PaySolveController)
|
||||
if tradeStatus == "FAILED" {
|
||||
if !service.SolvePayFail(orderInfo.BankOrderId, "", "") {
|
||||
if !service.SolvePayFail(c.Ctx.Request.Context(), orderInfo.BankOrderId, "", "") {
|
||||
logs.Error("solve order fail fail")
|
||||
}
|
||||
} else if tradeStatus == "CANCELED" {
|
||||
if !service.SolvePayFail(orderInfo.BankOrderId, "", "") {
|
||||
if !service.SolvePayFail(c.Ctx.Request.Context(), orderInfo.BankOrderId, "", "") {
|
||||
logs.Error("solve order cancel fail")
|
||||
}
|
||||
} else if tradeStatus == "WAITING_PAYMENT" {
|
||||
@@ -157,7 +157,7 @@ func (c *DaiLiImpl) PayQuery(orderInfo order.OrderInfo, roadInfo road.RoadInfo)
|
||||
return false
|
||||
}
|
||||
} else if tradeStatus == "FAILED" {
|
||||
if !service.SolvePayFail(orderInfo.BankOrderId, "", "") {
|
||||
if !service.SolvePayFail(c.Ctx.Request.Context(), orderInfo.BankOrderId, "", "") {
|
||||
return false
|
||||
}
|
||||
} else {
|
||||
|
||||
@@ -194,7 +194,7 @@ func (f *FatSixImpl) PayNotify() {
|
||||
f.Ctx.WriteString("FAIL")
|
||||
}
|
||||
} else {
|
||||
isOk := service.SolvePayFail(orderInfo.BankOrderId, resp.Tid, "")
|
||||
isOk := service.SolvePayFail(f.Ctx.Request.Context(), orderInfo.BankOrderId, resp.Tid, "")
|
||||
if isOk {
|
||||
f.Ctx.WriteString("SUCCESS")
|
||||
} else {
|
||||
|
||||
2
internal/service/supplier/third_party/jd.go
vendored
2
internal/service/supplier/third_party/jd.go
vendored
@@ -183,7 +183,7 @@ func (c *JDCardImpl) PayNotify() {
|
||||
c.Ctx.WriteString("FAIL")
|
||||
}
|
||||
} else {
|
||||
isOk := service.SolvePayFail(orderInfo.BankOrderId, "", "")
|
||||
isOk := service.SolvePayFail(c.Ctx.Request.Context(), orderInfo.BankOrderId, "", "")
|
||||
if isOk {
|
||||
c.Ctx.WriteString("SUCCESS")
|
||||
} else {
|
||||
|
||||
@@ -154,11 +154,11 @@ func (c *KuaiFuImpl) PayNotify() {
|
||||
orderInfo.BankTransId = convertor.ToString(params["trxNo"])
|
||||
tradeStatus := params["tradeStatus"]
|
||||
if tradeStatus == "FAILED" {
|
||||
if !service.SolvePayFail(orderInfo.BankOrderId, "", "") {
|
||||
if !service.SolvePayFail(c.Ctx.Request.Context(), orderInfo.BankOrderId, "", "") {
|
||||
logs.Error("solve order fail fail")
|
||||
}
|
||||
} else if tradeStatus == "CANCELED" {
|
||||
if !service.SolvePayFail(orderInfo.BankOrderId, "", "") {
|
||||
if !service.SolvePayFail(c.Ctx.Request.Context(), orderInfo.BankOrderId, "", "") {
|
||||
logs.Error("solve order cancel fail")
|
||||
}
|
||||
} else if tradeStatus == "WAITING_PAYMENT" {
|
||||
@@ -213,7 +213,7 @@ func (c *KuaiFuImpl) PayQuery(orderInfo order.OrderInfo, roadInfo road.RoadInfo)
|
||||
return false
|
||||
}
|
||||
} else if tradeStatus == "FAILED" {
|
||||
if !service.SolvePayFail(orderInfo.BankOrderId, "", "") {
|
||||
if !service.SolvePayFail(c.Ctx.Request.Context(), orderInfo.BankOrderId, "", "") {
|
||||
return false
|
||||
}
|
||||
} else {
|
||||
|
||||
@@ -227,7 +227,7 @@ func (c *MFCardV2Impl) PayNotify() {
|
||||
}
|
||||
if params["status"] == "8" { // 失败
|
||||
logs.Info("【MF178】回调失败,订单信息", params)
|
||||
if !service.SolvePayFail(convertor.ToString(params["order_id"]), "", "") {
|
||||
if !service.SolvePayFail(c.Ctx.Request.Context(), convertor.ToString(params["order_id"]), "", "") {
|
||||
logs.Error("solve order fail fail")
|
||||
}
|
||||
} else if params["status"] == "9" && factAmount == orderInfo.FactAmount {
|
||||
|
||||
@@ -171,7 +171,7 @@ func (c *SelfThirdImpl) PayNotify() {
|
||||
c.Ctx.WriteString("FAIL")
|
||||
}
|
||||
} else {
|
||||
isOk := service.SolvePayFail(orderInfo.BankOrderId, "", "")
|
||||
isOk := service.SolvePayFail(c.Ctx.Request.Context(), orderInfo.BankOrderId, "", "")
|
||||
if isOk {
|
||||
c.Ctx.WriteString("SUCCESS")
|
||||
} else {
|
||||
|
||||
@@ -146,9 +146,9 @@ func (c *StarSilenceImpl) PayNotify() {
|
||||
if params["code"] == "1" && factAmount == orderInfo.OrderAmount {
|
||||
service.SolvePaySuccess(convertor.ToString(params["supplierOrderId"]), factAmount, "", "支付成功")
|
||||
} else if params["code"] == "1" && factAmount != orderInfo.OrderAmount {
|
||||
service.SolvePayFail(convertor.ToString(params["supplierOrderId"]), "", fmt.Sprintf("实付金额与订单金额不一致,实际金额%.2f,卡面金额:%.2f", factAmount, orderInfo.OrderAmount))
|
||||
service.SolvePayFail(c.Ctx.Request.Context(), convertor.ToString(params["supplierOrderId"]), "", fmt.Sprintf("实付金额与订单金额不一致,实际金额%.2f,卡面金额:%.2f", factAmount, orderInfo.OrderAmount))
|
||||
} else {
|
||||
if !service.SolvePayFail(convertor.ToString(params["supplierOrderId"]), "", params["msg"]) {
|
||||
if !service.SolvePayFail(c.Ctx.Request.Context(), convertor.ToString(params["supplierOrderId"]), "", params["msg"]) {
|
||||
logs.Error("【星寂】处理失败")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -195,7 +195,7 @@ func (c *TMAllGameImpl) PayNotify() {
|
||||
c.Ctx.WriteString("FAIL")
|
||||
}
|
||||
} else {
|
||||
isOk := service.SolvePayFail(orderInfo.BankOrderId, "", "")
|
||||
isOk := service.SolvePayFail(c.Ctx.Request.Context(), orderInfo.BankOrderId, "", "")
|
||||
if isOk {
|
||||
c.Ctx.WriteString("SUCCESS")
|
||||
} else {
|
||||
|
||||
@@ -187,7 +187,7 @@ func (c *WalmartSelfImpl) PayNotify() {
|
||||
c.Ctx.WriteString("FAIL")
|
||||
}
|
||||
} else {
|
||||
isOk := service.SolvePayFail(orderInfo.BankOrderId, "", params["remark"])
|
||||
isOk := service.SolvePayFail(c.Ctx.Request.Context(), orderInfo.BankOrderId, "", params["remark"])
|
||||
if isOk {
|
||||
c.Ctx.WriteString("SUCCESS")
|
||||
} else {
|
||||
|
||||
45
main.go
45
main.go
@@ -1,7 +1,9 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
_ "gateway/internal/models"
|
||||
"gateway/internal/otel"
|
||||
_ "gateway/internal/routers"
|
||||
"gateway/internal/schema/query"
|
||||
"gateway/internal/service"
|
||||
@@ -10,45 +12,26 @@ import (
|
||||
_ "gateway/internal/service/supplier/third_party"
|
||||
"github.com/beego/beego/v2/server/web"
|
||||
_ "github.com/go-sql-driver/mysql"
|
||||
"github.com/pkg/profile"
|
||||
"net/http"
|
||||
_ "net/http/pprof"
|
||||
)
|
||||
|
||||
func main() {
|
||||
go func() {
|
||||
_ = http.ListenAndServe("0.0.0.0:12390", nil)
|
||||
cleanup1, cleanup2, cleanup3 := otel.InitTracer()
|
||||
defer func() {
|
||||
ctx := context.Background()
|
||||
if cleanup1 != nil {
|
||||
_ = cleanup1(ctx)
|
||||
}
|
||||
if cleanup2 != nil {
|
||||
_ = cleanup2(ctx)
|
||||
}
|
||||
if cleanup3 != nil {
|
||||
_ = cleanup3(ctx)
|
||||
}
|
||||
}()
|
||||
defer profile.Start(profile.MemProfile,
|
||||
profile.CPUProfile,
|
||||
profile.GoroutineProfile,
|
||||
profile.MutexProfile,
|
||||
profile.MemProfileAllocs,
|
||||
profile.MemProfileHeap,
|
||||
profile.MemProfileRate(1),
|
||||
).Stop()
|
||||
web.BConfig.WebConfig.Session.SessionOn = true
|
||||
go notify.CreateOrderNotifyConsumer()
|
||||
go query.CreatePayForQueryConsumer()
|
||||
go service.OrderSettleInit()
|
||||
go query.CreateSupplierOrderQueryCuConsumer()
|
||||
web.Run()
|
||||
}
|
||||
|
||||
// RegisterLogs /
|
||||
//func RegisterLogs() {
|
||||
// _ = logs.SetLogger(logs.AdapterFile, `{
|
||||
// "filename":"./logs/app.log",
|
||||
// "level":4,
|
||||
// "maxlines":0,
|
||||
// "maxsize":0,
|
||||
// "daily":true,
|
||||
// "maxdays":10,
|
||||
// "color":true
|
||||
// }`)
|
||||
// logs.RegisterFormatter("pattern", &logs.PatternLogFormatter{
|
||||
// Pattern: "%F:%n|%w%t>> %m",
|
||||
// WhenFormat: "2006-01-02",
|
||||
// })
|
||||
// _ = logs.SetGlobalFormatter("pattern")
|
||||
//}
|
||||
|
||||
Reference in New Issue
Block a user