Skip to content

Commit ae41a03

Browse files
committed
Add myshoes_webhook_jobs_enqueued_total for auto-scaling from metrics
1 parent 0139697 commit ae41a03

File tree

4 files changed

+116
-34
lines changed

4 files changed

+116
-34
lines changed

go.mod

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,23 +6,23 @@ require (
66
github.com/bradleyfalzon/ghinstallation/v2 v2.11.0
77
github.com/go-sql-driver/mysql v1.8.1
88
github.com/golang-jwt/jwt/v4 v4.5.1
9-
github.com/google/go-cmp v0.6.0
9+
github.com/google/go-cmp v0.7.0
1010
github.com/google/go-github/v47 v47.1.0
1111
github.com/hashicorp/go-plugin v1.6.2
1212
github.com/hashicorp/go-version v1.7.0
1313
github.com/jmoiron/sqlx v1.4.0
1414
github.com/m4ns0ur/httpcache v0.0.0-20200426190423-1040e2e8823f
1515
github.com/ory/dockertest/v3 v3.11.0
1616
github.com/patrickmn/go-cache v2.1.0+incompatible
17-
github.com/prometheus/client_golang v1.20.5
17+
github.com/prometheus/client_golang v1.22.0
1818
github.com/r3labs/diff/v2 v2.15.1
1919
github.com/satori/go.uuid v1.2.0
2020
goji.io v2.0.2+incompatible
2121
golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c
2222
golang.org/x/oauth2 v0.24.0
23-
golang.org/x/sync v0.9.0
23+
golang.org/x/sync v0.10.0
2424
google.golang.org/grpc v1.68.0
25-
google.golang.org/protobuf v1.35.1
25+
google.golang.org/protobuf v1.36.5
2626
)
2727

2828
require (
@@ -48,7 +48,6 @@ require (
4848
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect
4949
github.com/hashicorp/go-hclog v1.6.3 // indirect
5050
github.com/hashicorp/yamux v0.1.2 // indirect
51-
github.com/klauspost/compress v1.17.11 // indirect
5251
github.com/kr/text v0.2.0 // indirect
5352
github.com/mattn/go-colorable v0.1.13 // indirect
5453
github.com/mattn/go-isatty v0.0.20 // indirect
@@ -62,17 +61,17 @@ require (
6261
github.com/opencontainers/runc v1.2.1 // indirect
6362
github.com/pkg/errors v0.9.1 // indirect
6463
github.com/prometheus/client_model v0.6.1 // indirect
65-
github.com/prometheus/common v0.60.1 // indirect
64+
github.com/prometheus/common v0.62.0 // indirect
6665
github.com/prometheus/procfs v0.15.1 // indirect
6766
github.com/sirupsen/logrus v1.9.3 // indirect
6867
github.com/vmihailenco/msgpack v4.0.4+incompatible // indirect
6968
github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect
7069
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect
7170
github.com/xeipuuv/gojsonschema v1.2.0 // indirect
72-
golang.org/x/crypto v0.29.0 // indirect
73-
golang.org/x/net v0.30.0 // indirect
74-
golang.org/x/sys v0.27.0 // indirect
75-
golang.org/x/text v0.20.0 // indirect
71+
golang.org/x/crypto v0.31.0 // indirect
72+
golang.org/x/net v0.33.0 // indirect
73+
golang.org/x/sys v0.30.0 // indirect
74+
golang.org/x/text v0.21.0 // indirect
7675
google.golang.org/appengine v1.6.8 // indirect
7776
google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28 // indirect
7877
gopkg.in/yaml.v2 v2.4.0 // indirect

go.sum

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,9 @@ github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek
5353
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
5454
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
5555
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
56-
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
5756
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
57+
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
58+
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
5859
github.com/google/go-github/v47 v47.1.0 h1:Cacm/WxQBOa9lF0FT0EMjZ2BWMetQ1TQfyurn4yF1z8=
5960
github.com/google/go-github/v47 v47.1.0/go.mod h1:VPZBXNbFSJGjyjFRUKo9vZGawTajnWzC/YjGw/oFKi0=
6061
github.com/google/go-github/v62 v62.0.0 h1:/6mGCaRywZz9MuHyw9gD1CwsbmBX8GWsbFkwMmHdhl4=
@@ -77,8 +78,8 @@ github.com/jmoiron/sqlx v1.4.0 h1:1PLqN7S1UYp5t4SrVVnt4nUVNemrDAtxlulVe+Qgm3o=
7778
github.com/jmoiron/sqlx v1.4.0/go.mod h1:ZrZ7UsYB/weZdl2Bxg6jCRO9c3YHl8r3ahlKmRT4JLY=
7879
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
7980
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
80-
github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc=
81-
github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0=
81+
github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo=
82+
github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ=
8283
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
8384
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
8485
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
@@ -124,12 +125,12 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
124125
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
125126
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
126127
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
127-
github.com/prometheus/client_golang v1.20.5 h1:cxppBPuYhUnsO6yo/aoRol4L7q7UFfdm+bR9r+8l63Y=
128-
github.com/prometheus/client_golang v1.20.5/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE=
128+
github.com/prometheus/client_golang v1.22.0 h1:rb93p9lokFEsctTys46VnV1kLCDpVZ0a/Y92Vm0Zc6Q=
129+
github.com/prometheus/client_golang v1.22.0/go.mod h1:R7ljNsLXhuQXYZYtw6GAE9AZg8Y7vEW5scdCXrWRXC0=
129130
github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
130131
github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
131-
github.com/prometheus/common v0.60.1 h1:FUas6GcOw66yB/73KC+BOZoFJmbo/1pojoILArPAaSc=
132-
github.com/prometheus/common v0.60.1/go.mod h1:h0LYf1R1deLSKtD4Vdg8gy4RuOvENW2J/h19V5NADQw=
132+
github.com/prometheus/common v0.62.0 h1:xasJaQlnWAeyHdUBeGjXmutelfJHWMRr+Fg4QszZ2Io=
133+
github.com/prometheus/common v0.62.0/go.mod h1:vyBcEuLSvWos9B1+CyL7JZ2up+uFzXhkqml0W5zIY1I=
133134
github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc=
134135
github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk=
135136
github.com/r3labs/diff/v2 v2.15.1 h1:EOrVqPUzi+njlumoqJwiS/TgGgmZo83619FNDB9xQUg=
@@ -145,8 +146,8 @@ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UV
145146
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
146147
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
147148
github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals=
148-
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
149-
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
149+
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
150+
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
150151
github.com/vmihailenco/msgpack v4.0.4+incompatible h1:dSLoQfGFAo3F6OoNhwUmLwVgaUXK79GlxNBwueZn0xI=
151152
github.com/vmihailenco/msgpack v4.0.4+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk=
152153
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
@@ -165,8 +166,8 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk
165166
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
166167
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
167168
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
168-
golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ=
169-
golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg=
169+
golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U=
170+
golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
170171
golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c h1:7dEasQXItcW1xKJ2+gg5VOiBnqWrJc+rq0DPKyvvdbY=
171172
golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c/go.mod h1:NQtJDoLvd6faHhE7m4T/1IY708gDefGGjR/iUW8yQQ8=
172173
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
@@ -179,16 +180,16 @@ golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLL
179180
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
180181
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
181182
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
182-
golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4=
183-
golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU=
183+
golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I=
184+
golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
184185
golang.org/x/oauth2 v0.24.0 h1:KTBBxWqUa0ykRPLtV69rRto9TLXcqYkeswu48x/gvNE=
185186
golang.org/x/oauth2 v0.24.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
186187
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
187188
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
188189
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
189190
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
190-
golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ=
191-
golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
191+
golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ=
192+
golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
192193
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
193194
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
194195
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -205,17 +206,17 @@ golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBc
205206
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
206207
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
207208
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
208-
golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s=
209-
golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
209+
golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc=
210+
golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
210211
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
211212
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
212213
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
213214
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
214215
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
215216
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
216217
golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
217-
golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug=
218-
golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4=
218+
golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
219+
golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
219220
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
220221
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
221222
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
@@ -234,8 +235,8 @@ google.golang.org/grpc v1.68.0 h1:aHQeeJbo8zAkAa3pRzrVjZlbz6uSfeOXlJNQM0RAbz0=
234235
google.golang.org/grpc v1.68.0/go.mod h1:fmSPC5AsjSBCK54MyHRx48kpOti1/jRfOlwEWywNjWA=
235236
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
236237
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
237-
google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA=
238-
google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
238+
google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM=
239+
google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
239240
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
240241
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
241242
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=

pkg/metric/webhook.go

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package metric
2+
3+
import (
4+
"github.com/prometheus/client_golang/prometheus"
5+
"github.com/prometheus/client_golang/prometheus/promauto"
6+
)
7+
8+
var (
9+
// WebhookReceivedTotal is the total number of webhooks received
10+
WebhookReceivedTotal = promauto.NewCounterVec(
11+
prometheus.CounterOpts{
12+
Namespace: namespace,
13+
Subsystem: "webhook",
14+
Name: "received_total",
15+
Help: "Total number of webhooks received from GitHub",
16+
},
17+
[]string{"event_type", "status", "runs_on"},
18+
)
19+
20+
// WebhookProcessingDuration is the duration of webhook processing
21+
WebhookProcessingDuration = promauto.NewHistogramVec(
22+
prometheus.HistogramOpts{
23+
Namespace: namespace,
24+
Subsystem: "webhook",
25+
Name: "processing_duration_seconds",
26+
Help: "Duration of webhook processing in seconds",
27+
Buckets: prometheus.DefBuckets,
28+
},
29+
[]string{"event_type", "runs_on"},
30+
)
31+
32+
// WebhookJobsEnqueued is the total number of jobs enqueued from webhooks
33+
WebhookJobsEnqueued = promauto.NewCounterVec(
34+
prometheus.CounterOpts{
35+
Namespace: namespace,
36+
Subsystem: "webhook",
37+
Name: "jobs_enqueued_total",
38+
Help: "Total number of jobs enqueued from webhooks",
39+
},
40+
[]string{"event_type", "repository", "runs_on"},
41+
)
42+
)

pkg/web/webhook.go

Lines changed: 43 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"net/http"
99
"net/url"
1010
"strings"
11+
"time"
1112

1213
"github.com/google/go-github/v47/github"
1314
uuid "github.com/satori/go.uuid"
@@ -16,34 +17,51 @@ import (
1617
"github.com/whywaita/myshoes/pkg/datastore"
1718
"github.com/whywaita/myshoes/pkg/gh"
1819
"github.com/whywaita/myshoes/pkg/logger"
20+
"github.com/whywaita/myshoes/pkg/metric"
1921
)
2022

2123
// HandleGitHubEvent handle GitHub webhook event
2224
func HandleGitHubEvent(w http.ResponseWriter, r *http.Request, ds datastore.Datastore) {
2325
ctx := r.Context()
26+
startTime := time.Now()
27+
eventType := github.WebHookType(r)
2428

2529
payload, err := github.ValidatePayload(r, config.Config.GitHub.AppSecret)
2630
if err != nil {
2731
logger.Logf(false, "failed to validate webhook payload: %+v\n", err)
2832
w.WriteHeader(http.StatusBadRequest)
33+
metric.WebhookReceivedTotal.WithLabelValues(eventType, "invalid", "unknown").Inc()
2934
return
3035
}
31-
webhookEvent, err := github.ParseWebHook(github.WebHookType(r), payload)
36+
webhookEvent, err := github.ParseWebHook(eventType, payload)
3237
if err != nil {
3338
logger.Logf(false, "failed to parse webhook payload: %+v\n", err)
3439
w.WriteHeader(http.StatusBadRequest)
40+
metric.WebhookReceivedTotal.WithLabelValues(eventType, "parse_error", "unknown").Inc()
3541
return
3642
}
3743

44+
// Extract runs-on labels
45+
runsOn := "unknown"
46+
if eventType == "workflow_job" {
47+
labels, err := gh.ExtractRunsOnLabels(payload)
48+
if err == nil && len(labels) > 0 {
49+
runsOn = strings.Join(labels, ",")
50+
}
51+
}
52+
3853
switch event := webhookEvent.(type) {
3954
case *github.PingEvent:
4055
if err := receivePingWebhook(ctx, event); err != nil {
4156
logger.Logf(false, "failed to process ping event: %+v\n", err)
4257
w.WriteHeader(http.StatusInternalServerError)
58+
metric.WebhookReceivedTotal.WithLabelValues("ping", "error", "n/a").Inc()
4359
return
4460
}
4561

4662
w.WriteHeader(http.StatusOK)
63+
metric.WebhookReceivedTotal.WithLabelValues("ping", "success", "n/a").Inc()
64+
metric.WebhookProcessingDuration.WithLabelValues("ping", "n/a").Observe(time.Since(startTime).Seconds())
4765
return
4866
case *github.CheckRunEvent:
4967
if !config.Config.ModeWebhookType.Equal("check_run") {
@@ -54,10 +72,13 @@ func HandleGitHubEvent(w http.ResponseWriter, r *http.Request, ds datastore.Data
5472
if err := receiveCheckRunWebhook(ctx, event, ds); err != nil {
5573
logger.Logf(false, "failed to process check_run event: %+v\n", err)
5674
w.WriteHeader(http.StatusInternalServerError)
75+
metric.WebhookReceivedTotal.WithLabelValues("check_run", "error", "n/a").Inc()
5776
return
5877
}
5978

6079
w.WriteHeader(http.StatusOK)
80+
metric.WebhookReceivedTotal.WithLabelValues("check_run", "success", "n/a").Inc()
81+
metric.WebhookProcessingDuration.WithLabelValues("check_run", "n/a").Observe(time.Since(startTime).Seconds())
6182
return
6283
case *github.WorkflowJobEvent:
6384
if !config.Config.ModeWebhookType.Equal("workflow_job") {
@@ -68,14 +89,18 @@ func HandleGitHubEvent(w http.ResponseWriter, r *http.Request, ds datastore.Data
6889
if err := receiveWorkflowJobWebhook(ctx, event, ds); err != nil {
6990
logger.Logf(false, "failed to process workflow_job event: %+v\n", err)
7091
w.WriteHeader(http.StatusInternalServerError)
92+
metric.WebhookReceivedTotal.WithLabelValues("workflow_job", "error", runsOn).Inc()
7193
return
7294
}
7395

7496
w.WriteHeader(http.StatusOK)
97+
metric.WebhookReceivedTotal.WithLabelValues("workflow_job", "success", runsOn).Inc()
98+
metric.WebhookProcessingDuration.WithLabelValues("workflow_job", runsOn).Observe(time.Since(startTime).Seconds())
7599
return
76100
default:
77101
logger.Logf(false, "receive not register event(%+v), return NotFound", event)
78102
w.WriteHeader(http.StatusNotFound)
103+
metric.WebhookReceivedTotal.WithLabelValues(eventType, "not_found", "unknown").Inc()
79104
return
80105
}
81106
}
@@ -102,7 +127,14 @@ func receiveCheckRunWebhook(ctx context.Context, event *github.CheckRunEvent, ds
102127
if err != nil {
103128
return fmt.Errorf("failed to json.Marshal: %w", err)
104129
}
105-
return processCheckRun(ctx, ds, repoName, repoURL, installationID, jb)
130+
if err := processCheckRun(ctx, ds, repoName, repoURL, installationID, jb); err != nil {
131+
return err
132+
}
133+
134+
// Record job enqueued metric
135+
metric.WebhookJobsEnqueued.WithLabelValues("check_run", repoName, "n/a").Inc()
136+
137+
return nil
106138
}
107139

108140
// processCheckRun process webhook event
@@ -178,7 +210,15 @@ func receiveWorkflowJobWebhook(ctx context.Context, event *github.WorkflowJobEve
178210
return fmt.Errorf("failed to json.Marshal: %w", err)
179211
}
180212

181-
return processCheckRun(ctx, ds, repoName, repoURL, installationID, jb)
213+
if err := processCheckRun(ctx, ds, repoName, repoURL, installationID, jb); err != nil {
214+
return err
215+
}
216+
217+
// Record job enqueued metric for workflow_job
218+
runsOn := strings.Join(labels, ",")
219+
metric.WebhookJobsEnqueued.WithLabelValues("workflow_job", repoName, runsOn).Inc()
220+
221+
return nil
182222
}
183223

184224
func isRequestedMyshoesLabel(labels []string) bool {

0 commit comments

Comments
 (0)