Skip to content

Commit c9a81c7

Browse files
committed
add request metrics
Signed-off-by: Jie WU <[email protected]> add request metrics Signed-off-by: Jie WU <[email protected]> rename api and metrics fix go mod Adding metrics handler Signed-off-by: Jie WU <[email protected]> Adding metrics handler Signed-off-by: Jie WU <[email protected]> add request metrics rename api and metrics fix mod Updated request metrics to be handled in server processing loop Signed-off-by: Jie WU <[email protected]> Updated request metrics to be handled in server processing loop Signed-off-by: Jie WU <[email protected]> fix go mod Signed-off-by: Jie WU <[email protected]> fix go mod Signed-off-by: Jie WU <[email protected]> remove preconfigured buffered response Signed-off-by: Jie WU <[email protected]> Add streamed response Signed-off-by: Jie WU <[email protected]> Handle latency with response Signed-off-by: Jie WU <[email protected]> refactor Signed-off-by: Jie WU <[email protected]> fmt Signed-off-by: Jie WU <[email protected]> fmt Signed-off-by: Jie WU <[email protected]> fmt Signed-off-by: Jie WU <[email protected]> refactor server Signed-off-by: Jie WU <[email protected]> metrics auth add docs and go mod tidy refactor move file move file
1 parent 25f5156 commit c9a81c7

13 files changed

+689
-6
lines changed

go.mod

+22-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ require (
1212
github.com/jhump/protoreflect v1.17.0
1313
github.com/onsi/ginkgo/v2 v2.22.2
1414
github.com/onsi/gomega v1.36.2
15+
github.com/prometheus/client_golang v1.20.4
1516
github.com/prometheus/client_model v0.6.1
1617
github.com/prometheus/common v0.61.0
1718
github.com/stretchr/testify v1.10.0
@@ -22,6 +23,7 @@ require (
2223
k8s.io/apimachinery v0.31.4
2324
k8s.io/client-go v0.31.4
2425
k8s.io/code-generator v0.31.4
26+
k8s.io/component-base v0.31.4
2527
k8s.io/klog/v2 v2.130.1
2628
sigs.k8s.io/controller-runtime v0.19.4
2729
sigs.k8s.io/structured-merge-diff/v4 v4.5.0
@@ -37,8 +39,12 @@ require (
3739
github.com/Masterminds/sprig v2.22.0+incompatible // indirect
3840
github.com/Masterminds/sprig/v3 v3.2.3 // indirect
3941
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 // indirect
42+
github.com/antlr4-go/antlr/v4 v4.13.0 // indirect
43+
github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a // indirect
4044
github.com/beorn7/perks v1.0.1 // indirect
45+
github.com/blang/semver/v4 v4.0.0 // indirect
4146
github.com/bufbuild/protocompile v0.14.1 // indirect
47+
github.com/cenkalti/backoff/v4 v4.3.0 // indirect
4248
github.com/cespare/xxhash/v2 v2.3.0 // indirect
4349
github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78 // indirect
4450
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
@@ -48,9 +54,11 @@ require (
4854
github.com/envoyproxy/protoc-gen-validate v1.1.0 // indirect
4955
github.com/evanphx/json-patch/v5 v5.9.0 // indirect
5056
github.com/fatih/color v1.16.0 // indirect
57+
github.com/felixge/httpsnoop v1.0.4 // indirect
5158
github.com/fsnotify/fsnotify v1.7.0 // indirect
5259
github.com/fxamacker/cbor/v2 v2.7.0 // indirect
5360
github.com/go-logr/logr v1.4.2 // indirect
61+
github.com/go-logr/stdr v1.2.2 // indirect
5462
github.com/go-openapi/jsonpointer v0.19.6 // indirect
5563
github.com/go-openapi/jsonreference v0.20.2 // indirect
5664
github.com/go-openapi/swag v0.22.4 // indirect
@@ -60,17 +68,20 @@ require (
6068
github.com/gogo/protobuf v1.3.2 // indirect
6169
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
6270
github.com/golang/protobuf v1.5.4 // indirect
71+
github.com/google/cel-go v0.20.1 // indirect
6372
github.com/google/gnostic-models v0.6.8 // indirect
6473
github.com/google/gofuzz v1.2.0 // indirect
6574
github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad // indirect
6675
github.com/google/uuid v1.6.0 // indirect
76+
github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 // indirect
6777
github.com/huandu/xstrings v1.3.3 // indirect
6878
github.com/imdario/mergo v0.3.11 // indirect
6979
github.com/inconshreveable/mousetrap v1.1.0 // indirect
7080
github.com/jinzhu/configor v1.2.1 // indirect
7181
github.com/josharian/intern v1.0.0 // indirect
7282
github.com/json-iterator/go v1.1.12 // indirect
7383
github.com/klauspost/compress v1.17.9 // indirect
84+
github.com/kylelemons/godebug v1.1.0 // indirect
7485
github.com/mailru/easyjson v0.7.7 // indirect
7586
github.com/mattn/go-colorable v0.1.13 // indirect
7687
github.com/mattn/go-isatty v0.0.20 // indirect
@@ -82,13 +93,21 @@ require (
8293
github.com/pkg/errors v0.9.1 // indirect
8394
github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect
8495
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
85-
github.com/prometheus/client_golang v1.20.4 // indirect
8696
github.com/prometheus/procfs v0.15.1 // indirect
8797
github.com/shopspring/decimal v1.2.0 // indirect
8898
github.com/spf13/cast v1.4.1 // indirect
8999
github.com/spf13/cobra v1.8.1 // indirect
90100
github.com/spf13/pflag v1.0.5 // indirect
101+
github.com/stoewer/go-strcase v1.2.0 // indirect
91102
github.com/x448/float16 v0.8.4 // indirect
103+
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 // indirect
104+
go.opentelemetry.io/otel v1.31.0 // indirect
105+
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0 // indirect
106+
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0 // indirect
107+
go.opentelemetry.io/otel/metric v1.31.0 // indirect
108+
go.opentelemetry.io/otel/sdk v1.31.0 // indirect
109+
go.opentelemetry.io/otel/trace v1.31.0 // indirect
110+
go.opentelemetry.io/proto/otlp v1.3.1 // indirect
92111
go.uber.org/zap v1.27.0 // indirect
93112
golang.org/x/crypto v0.31.0 // indirect
94113
golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc // indirect
@@ -110,9 +129,11 @@ require (
110129
gopkg.in/yaml.v2 v2.4.0 // indirect
111130
gopkg.in/yaml.v3 v3.0.1 // indirect
112131
k8s.io/apiextensions-apiserver v0.31.0 // indirect
132+
k8s.io/apiserver v0.31.4 // indirect
113133
k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70 // indirect
114134
k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 // indirect
115135
k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 // indirect
136+
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.30.3 // indirect
116137
sigs.k8s.io/controller-tools v0.14.0 // indirect
117138
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
118139
sigs.k8s.io/yaml v1.4.0 // indirect

go.sum

+31
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,20 @@ github.com/Masterminds/sprig/v3 v3.2.3 h1:eL2fZNezLomi0uOLqjQoN6BfsDD+fyLtgbJMAj
1717
github.com/Masterminds/sprig/v3 v3.2.3/go.mod h1:rXcFaZ2zZbLRJv/xSysmlgIM1u11eBaRMhvYXJNkGuM=
1818
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM=
1919
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
20+
github.com/antlr4-go/antlr/v4 v4.13.0 h1:lxCg3LAv+EUK6t1i0y1V6/SLeUi0eKEKdhQAlS8TVTI=
21+
github.com/antlr4-go/antlr/v4 v4.13.0/go.mod h1:pfChB/xh/Unjila75QW7+VU4TSnWnnk9UTnmpPaOR2g=
22+
github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a h1:idn718Q4B6AGu/h5Sxe66HYVdqdGu2l9Iebqhi/AEoA=
23+
github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
2024
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
2125
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
26+
github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM=
27+
github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ=
2228
github.com/bojand/ghz v0.120.0 h1:6F4wsmZVwFg5UnD+/R+IABWk6sKE/0OKIBdUQUZnOdo=
2329
github.com/bojand/ghz v0.120.0/go.mod h1:HfECuBZj1v02XObGnRuoZgyB1PR24/25dIYiJIMjJnE=
2430
github.com/bufbuild/protocompile v0.14.1 h1:iA73zAf/fyljNjQKwYzUHD6AD4R8KMasmwa/FBatYVw=
2531
github.com/bufbuild/protocompile v0.14.1/go.mod h1:ppVdAIhbr2H8asPk6k4pY7t9zB1OU5DoEw9xY/FUi1c=
32+
github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
33+
github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
2634
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
2735
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
2836
github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78 h1:QVw89YDxXxEe+l8gU8ETbOasdwEV+avkR75ZzsVV9WI=
@@ -53,10 +61,13 @@ github.com/evanphx/json-patch/v5 v5.9.0 h1:kcBlZQbplgElYIlo/n1hJbls2z/1awpXxpRi0
5361
github.com/evanphx/json-patch/v5 v5.9.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ=
5462
github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM=
5563
github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE=
64+
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
65+
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
5666
github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
5767
github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
5868
github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E=
5969
github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ=
70+
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
6071
github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
6172
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
6273
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
@@ -89,6 +100,8 @@ github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l
89100
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
90101
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
91102
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
103+
github.com/google/cel-go v0.20.1 h1:nDx9r8S3L4pE61eDdt8igGj8rf5kjYR3ILxWIpWNi84=
104+
github.com/google/cel-go v0.20.1/go.mod h1:kWcIzTsPX0zmQ+H3TirHstLLf9ep5QTsZBN9u4dOYLg=
92105
github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I=
93106
github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U=
94107
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
@@ -102,6 +115,8 @@ github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad/go.mod h1:vavhavw2zAx
102115
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
103116
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
104117
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
118+
github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 h1:bkypFPDjIYGfCYD5mRBvpqxfYX1YCS1PXdKYWi8FsN0=
119+
github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0/go.mod h1:P+Lt/0by1T8bfcF3z737NnSbmxQAppXMRziHUxPOC8k=
105120
github.com/huandu/xstrings v1.3.3 h1:/Gcsuc1x8JVbJ9/rlye4xZnVAbEkGauT8lbebqcQws4=
106121
github.com/huandu/xstrings v1.3.3/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
107122
github.com/imdario/mergo v0.3.11 h1:3tnifQM4i+fbajXKBHXWEH+KvNHqojZ778UH75j3bGA=
@@ -186,6 +201,8 @@ github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM=
186201
github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y=
187202
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
188203
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
204+
github.com/stoewer/go-strcase v1.2.0 h1:Z2iHWqGXH00XYgqDmNgQbIBxf3wrNq0F3feEy0ainaU=
205+
github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8=
189206
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
190207
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
191208
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
@@ -202,8 +219,14 @@ github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcY
202219
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
203220
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
204221
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
222+
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 h1:4K4tsIXefpVJtvA/8srF4V4y0akAoPHkIslgAkjixJA=
223+
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0/go.mod h1:jjdQuTGVsXV4vSs+CJ2qYDeDPf9yIJV23qlIzBm73Vg=
205224
go.opentelemetry.io/otel v1.31.0 h1:NsJcKPIW0D0H3NgzPDHmo0WW6SptzPdqg/L1zsIm2hY=
206225
go.opentelemetry.io/otel v1.31.0/go.mod h1:O0C14Yl9FgkjqcCZAsE053C13OaddMYr/hz6clDkEJE=
226+
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0 h1:3Q/xZUyC1BBkualc9ROb4G8qkH90LXEIICcs5zv1OYY=
227+
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0/go.mod h1:s75jGIWA9OfCMzF0xr+ZgfrB5FEbbV7UuYo32ahUiFI=
228+
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0 h1:qFffATk0X+HD+f1Z8lswGiOQYKHRlzfmdJm0wEaVrFA=
229+
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0/go.mod h1:MOiCmryaYtc+V0Ei+Tx9o5S1ZjA7kzLucuVuyzBZloQ=
207230
go.opentelemetry.io/otel/metric v1.31.0 h1:FSErL0ATQAmYHUIzSezZibnyVlft1ybhy4ozRPcF2fE=
208231
go.opentelemetry.io/otel/metric v1.31.0/go.mod h1:C3dEloVbLuYoX41KpmAhOqNriGbA+qqH6PQ5E5mUfnY=
209232
go.opentelemetry.io/otel/sdk v1.31.0 h1:xLY3abVHYZ5HSfOg3l2E5LUj2Cwva5Y7yGxnSW9H5Gk=
@@ -212,6 +235,8 @@ go.opentelemetry.io/otel/sdk/metric v1.31.0 h1:i9hxxLJF/9kkvfHppyLL55aW7iIJz4Jjx
212235
go.opentelemetry.io/otel/sdk/metric v1.31.0/go.mod h1:CRInTMVvNhUKgSAMbKyTMxqOBC0zgyxzW55lZzX43Y8=
213236
go.opentelemetry.io/otel/trace v1.31.0 h1:ffjsj1aRouKewfr85U2aGagJ46+MvodynlQ1HYdmJys=
214237
go.opentelemetry.io/otel/trace v1.31.0/go.mod h1:TXZkRk7SM2ZQLtR6eoAWQFIHPvzQ06FJAsO1tJg480A=
238+
go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0=
239+
go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8=
215240
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
216241
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
217242
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
@@ -319,10 +344,14 @@ k8s.io/apiextensions-apiserver v0.31.0 h1:fZgCVhGwsclj3qCw1buVXCV6khjRzKC5eCFt24
319344
k8s.io/apiextensions-apiserver v0.31.0/go.mod h1:b9aMDEYaEe5sdK+1T0KU78ApR/5ZVp4i56VacZYEHxk=
320345
k8s.io/apimachinery v0.31.4 h1:8xjE2C4CzhYVm9DGf60yohpNUh5AEBnPxCryPBECmlM=
321346
k8s.io/apimachinery v0.31.4/go.mod h1:rsPdaZJfTfLsNJSQzNHQvYoTmxhoOEofxtOsF3rtsMo=
347+
k8s.io/apiserver v0.31.4 h1:JbtnTaXVYEAYIHJil6Wd74Wif9sd8jVcBw84kwEmp7o=
348+
k8s.io/apiserver v0.31.4/go.mod h1:JJjoTjZ9PTMLdIFq7mmcJy2B9xLN3HeAUebW6xZyIP0=
322349
k8s.io/client-go v0.31.4 h1:t4QEXt4jgHIkKKlx06+W3+1JOwAFU/2OPiOo7H92eRQ=
323350
k8s.io/client-go v0.31.4/go.mod h1:kvuMro4sFYIa8sulL5Gi5GFqUPvfH2O/dXuKstbaaeg=
324351
k8s.io/code-generator v0.31.4 h1:Vu+8fKz+239rKiVDHFVHgjQ162cg5iUQPtTyQbwXeQw=
325352
k8s.io/code-generator v0.31.4/go.mod h1:yMDt13Kn7m4MMZ4LxB1KBzdZjEyxzdT4b4qXq+lnI90=
353+
k8s.io/component-base v0.31.4 h1:wCquJh4ul9O8nNBSB8N/o8+gbfu3BVQkVw9jAUY/Qtw=
354+
k8s.io/component-base v0.31.4/go.mod h1:G4dgtf5BccwiDT9DdejK0qM6zTK0jwDGEKnCmb9+u/s=
326355
k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70 h1:NGrVE502P0s0/1hudf8zjgwki1X/TByhmAoILTarmzo=
327356
k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70/go.mod h1:VH3AT8AaQOqiGjMF9p0/IM1Dj+82ZwjfxUP1IxaHE+8=
328357
k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
@@ -331,6 +360,8 @@ k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 h1:BZqlfIlq5YbRMFko6/PM7F
331360
k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340/go.mod h1:yD4MZYeKMBwQKVht279WycxKyM84kkAx2DPrTXaeb98=
332361
k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 h1:pUdcCO1Lk/tbT5ztQWOBi5HBgbBP1J8+AsQnQCKsi8A=
333362
k8s.io/utils v0.0.0-20240711033017-18e509b52bc8/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
363+
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.30.3 h1:2770sDpzrjjsAtVhSeUFseziht227YAWYHLGNM8QPwY=
364+
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.30.3/go.mod h1:Ve9uj1L+deCXFrPOk1LpFXqTg7LCFzFso6PA48q/XZw=
334365
sigs.k8s.io/controller-runtime v0.19.4 h1:SUmheabttt0nx8uJtoII4oIP27BVVvAKFvdvGFwV/Qo=
335366
sigs.k8s.io/controller-runtime v0.19.4/go.mod h1:iRmWllt8IlaLjvTTDLhRBXIEtkCK6hwVBJJsYS9Ajf4=
336367
sigs.k8s.io/controller-tools v0.14.0 h1:rnNoCC5wSXlrNoBKKzL70LNJKIQKEzT6lloG6/LF73A=

pkg/ext-proc/handlers/request.go

+2
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,8 @@ func (s *Server) HandleRequestBody(reqCtx *RequestContext, req *extProcPb.Proces
7676
klog.V(3).Infof("Selected target model %v in target pod: %v\n", llmReq.ResolvedTargetModel, targetPod)
7777

7878
reqCtx.Model = llmReq.Model
79+
reqCtx.ResolvedTargetModel = llmReq.ResolvedTargetModel
80+
reqCtx.RequestSize = len(v.RequestBody.Body)
7981
reqCtx.TargetPod = targetPod
8082

8183
// Insert "target-pod" to instruct Envoy to route requests to the specified target pod.

pkg/ext-proc/handlers/response.go

+6
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,12 @@ func (s *Server) HandleResponseBody(reqCtx *RequestContext, req *extProcPb.Proce
7373
return nil, fmt.Errorf("unmarshaling response body: %v", err)
7474
}
7575
reqCtx.Response = res
76+
// ResponseComplete is to indicate the response is complete. In non-streaming
77+
// case, it will be set to be true once the response is processed; in
78+
// streaming case, it will be set to be true once the last chunk is processed.
79+
// TODO(https://github.com/kubernetes-sigs/gateway-api-inference-extension/issues/178)
80+
// will add the processing for streaming case.
81+
reqCtx.ResponseComplete = true
7682
klog.V(3).Infof("Response: %+v", res)
7783

7884
resp := &extProcPb.ProcessingResponse{

pkg/ext-proc/handlers/server.go

+19-4
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,15 @@ package handlers
22

33
import (
44
"io"
5+
"time"
56

67
extProcPb "github.com/envoyproxy/go-control-plane/envoy/service/ext_proc/v3"
78
envoyTypePb "github.com/envoyproxy/go-control-plane/envoy/type/v3"
89
"google.golang.org/grpc/codes"
910
"google.golang.org/grpc/status"
1011
"inference.networking.x-k8s.io/gateway-api-inference-extension/api/v1alpha1"
1112
"inference.networking.x-k8s.io/gateway-api-inference-extension/pkg/ext-proc/backend"
13+
"inference.networking.x-k8s.io/gateway-api-inference-extension/pkg/ext-proc/metrics"
1214
"inference.networking.x-k8s.io/gateway-api-inference-extension/pkg/ext-proc/scheduling"
1315
klog "k8s.io/klog/v2"
1416
)
@@ -75,22 +77,30 @@ func (s *Server) Process(srv extProcPb.ExternalProcessor_ProcessServer) error {
7577
var resp *extProcPb.ProcessingResponse
7678
switch v := req.Request.(type) {
7779
case *extProcPb.ProcessingRequest_RequestHeaders:
80+
reqCtx.RequestReceivedTimestamp = time.Now()
7881
resp = HandleRequestHeaders(reqCtx, req)
7982
klog.V(3).Infof("Request context after HandleRequestHeaders: %+v", reqCtx)
8083
case *extProcPb.ProcessingRequest_RequestBody:
8184
resp, err = s.HandleRequestBody(reqCtx, req)
85+
if err == nil {
86+
metrics.RecordRequestCounter(reqCtx.Model, reqCtx.ResolvedTargetModel)
87+
metrics.RecordRequestSizes(reqCtx.Model, reqCtx.ResolvedTargetModel, reqCtx.RequestSize)
88+
}
8289
klog.V(3).Infof("Request context after HandleRequestBody: %+v", reqCtx)
8390
case *extProcPb.ProcessingRequest_ResponseHeaders:
8491
resp, err = s.HandleResponseHeaders(reqCtx, req)
8592
klog.V(3).Infof("Request context after HandleResponseHeaders: %+v", reqCtx)
8693
case *extProcPb.ProcessingRequest_ResponseBody:
8794
resp, err = s.HandleResponseBody(reqCtx, req)
95+
if err == nil && reqCtx.ResponseComplete {
96+
reqCtx.ResponseCompleteTimestamp = time.Now()
97+
metrics.RecordRequestLatencies(reqCtx.Model, reqCtx.ResolvedTargetModel, reqCtx.RequestReceivedTimestamp, reqCtx.ResponseCompleteTimestamp)
98+
}
8899
klog.V(3).Infof("Request context after HandleResponseBody: %+v", reqCtx)
89100
default:
90101
klog.Errorf("Unknown Request type %+v", v)
91102
return status.Error(codes.Unknown, "unknown request type")
92103
}
93-
94104
if err != nil {
95105
klog.Errorf("failed to process request: %v", err)
96106
switch status.Code(err) {
@@ -121,7 +131,12 @@ func (s *Server) Process(srv extProcPb.ExternalProcessor_ProcessServer) error {
121131

122132
// RequestContext stores context information during the life time of an HTTP request.
123133
type RequestContext struct {
124-
TargetPod backend.Pod
125-
Model string
126-
Response Response
134+
TargetPod backend.Pod
135+
Model string
136+
ResolvedTargetModel string
137+
RequestReceivedTimestamp time.Time
138+
ResponseCompleteTimestamp time.Time
139+
RequestSize int
140+
Response Response
141+
ResponseComplete bool
127142
}

0 commit comments

Comments
 (0)