GithubHelp home page GithubHelp logo

42atomys / webhooked Goto Github PK

View Code? Open in Web Editor NEW
33.0 33.0 1.0 895 KB

A webhook receiver on steroids.

License: MIT License

Dockerfile 0.19% Go 95.06% Shell 0.43% JavaScript 3.20% Smarty 0.21% Makefile 0.92%
apps golang hacktoberfest webhooks

webhooked's Introduction

Hi 👋, I'm Atomys
Lead & Senior Architect

A french passionate developer, devops, sys-admin, designer since 16 years


Visits Badge Discord Badge LinkedIn Badge Twitter Badge Instagram Badge Youtube Badge


Since 16 years, I have been passionate about any field related to development. Whether it is pure development or network and server administration, everything is a passion for me which is now my job.

In 2022 I decided to open up to open source in order to share my knowledge and to keep learning!


👯 I’m looking to collaborate on An attractive project

💬 Ask me about architecture, go, kubernetes, helm.. Any things you want

⚡ Fun fact I'm stuck on my loopback network ::1, please halp


📩 Latest Blog Posts

I share my knowledge through blog posts. Go check it out

✨ How will Go Generics in Go 1.18 change your life? 💜


💼 Skills

If you are interested in seeing what I have mastered

More Skills


📈 Some statistics

Because everyone does it so why not, let's not be stubborn

Atomys's GitHub Stats

Atomys's GitHub Stats

42atomys's Dev Card


✨ Sponsors ✨

A big thank you to my sponsors who help me every day to drink more coffee
Sponsor me and join Team Rocket 🚀


No enough sponsors :(


webhooked's People

Contributors

42atomys avatar dependabot[bot] avatar rgaiffe avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

Forkers

rgaiffe

webhooked's Issues

fix: rabbitmq connection dont reconnect if the channel is closed

Describe the bug

When the connection between webhooked and rabbitmq server is interrupted, webhooked dont reconnect automatically and never send events.

To Reproduce

  1. Connect to a Rabbitmq backend
  2. Kill the Rabbitmq server
  3. Start the Rabbimq again
  4. Send a webhook

What happened

Weebhooked stay with closed error eternally

Expected behavior

Webhooked needs to reconnect and send event asap

Relevant log output

4:07PM INF Webhook is processed duration=1.259667ms secure=true spec=locations-close statusCode=500 version=v1alpha1
4:07PM ERR Error during webhook processing error="Exception (504) Reason: \"channel/connection is not open\"" apiVersion=v1alpha1


### Version of software

0.5

### Environment

Docker

### Environment version

_No response_

### Additional context

_No response_

### Code of Conduct

- [X] I agree to follow this project's Code of Conduct

Webhook: Webhooks Entries

Problem to solve

Receive and store data sended by 42 Intranet Webhooks API.

Intended

Unknown

Technical Documentation

All webhooks sended by Intranet is protected by a secret key send on header X-Secret. Each webhook registry have a separated secret.

Further details

Using Redis Pub/Sub seems a reasonable choice.

Testing

Maybe add a sub command or hack scripts to simulate data sended by intranet to simplify development and contributions.

What does success look like, and how can we measure that?

Create an application that will listen to the webhooks sent in HTTP POST by the intranet of 42 and that will store them in a pub/sub, in order to be processed later and not to lose this volatile data.

Links / References

No documentation of the webhooks is public.

feat: allow formatting the payload of webhook on the formatting module

Is your feature request related to a problem? Please describe

Currently we can format the stored data with the format feature but it is not possible to format the received payload.

Describe the solution you'd like

Being able to parse the payload json and then use it to extract only what is needed from the payload would be an amazing feature!

Describe alternatives you've considered

Example based on README

  formatting:
    templateString: |
      {
        "config": "{{ toJson .Config }}",
        "metadata": {
          "specName": "{{ .Spec.Name }}",
          "deliveryID": "{{ .Request.Header | getHeader "X-Delivery" | default "unknown" }}"
        },
        "payload": {{ .Payload }}
      }

We have a .Payload and send it on payload key but we can do some powerful things like following to structurate your payload as we want !

  formatting:
    templateString: |
      {
        "action": {{ .Spec.Name | default "unknown" }},
        "user_id": {{ parseJSON(.Payload).userID }},
        "user_name": "{{ parseJSON(.Payload).user.details.name }}"
      }

Additional context

No response

Code of Conduct

  • I agree to follow this project's Code of Conduct

fix: Empty environment variable is catch like empty string and cause 200 OK response when no header is send

Describe the bug
When the configuration of a webhook entry is defined to load a value from an environment variable and the env variable is not set, we can pass the security with an empty header or no header.

To Reproduce
Steps to reproduce the behavior:

  1. My config is
- name: exampleHook
  entrypointUrl: /webhooks/example
  security:
  - header:
      inputs:
      - name: headerName
        value: X-Hook-Secret
  - compare:
      inputs:
      - name: first
        value: '{{ .Outputs.header.value }}'
      - name: second
        valueFrom:
          envRef: HOOK_SECRET
  1. Try to store following payload '....'
curl --request POST \
  --url http://atomys.atomys.lab:8080/v1alpha1/webhooks/example \
  --header 'Content-Type: application/json' \
  --header 'X-Hook-Secret: ' \
  --data '{
	"type": 42,
	"payload": {
		"nested": "amazing"
	}
}'

Expected behavior
Check if the environment variable is correctly set before get it. Its usefull to prevent misspell or typo error

Webhook: Application Core

Create the core of the application which will allow to add the different functionalities of the application

feat: allow construction of postgres request like formatting module

Is your feature request related to a problem? Please describe

Actually the postgres configuration has really basic and dont allow us to do anything.

  # In which table do you want to store the data
  tableName: 'webhooks_deliveries'
  # In which column do you want to store the data (data is sent in string format on this field)
  dataField: 'raw_data'

the reflected code behind is

request := fmt.Sprintf("INSERT INTO %s(%s) VALUES ($1)", c.config.TableName, c.config.DataField)

We cant perform an update, a delete, base the updated value or inserted value on some part of the payload.

Describe the solution you'd like

To be able to use the same formating module in storages like redis and postgres to allow to do all actions according to the specs provided in the configuration

Describe alternatives you've considered

No response

Additional context

No response

Code of Conduct

  • I agree to follow this project's Code of Conduct

feat: Load configuration part from environment to add more security

Is your feature request related to a problem? Please describe.
Currently all configuration is loaded via the static configuration file. However it contains information like passwords or tokens that must be private and secure at least.

Describe the solution you'd like
Readable passwords and tokens in the config file

Describe alternatives you've considered
Possibility to load some parts of the config via environment variables. Example of configuration file with dynamic values:

apiVersion: v1alpha1
specs:
- name: exampleHook
  entrypointUrl: /webhooks/example
  security:
  - getHeader:
      name: X-Hook-Secret
  - compareWithStaticValue:
      valueFrom:
        envRef:
          name: 'XHOOKSECRET_TOKEN_VALUE'
  storage:
  - type: redis
    specs:
      host: localhost
      port: '6379'
      username:
        valueFrom:
          envRef:
            name: 'REDIS_USERNAME'
      password:
        valueFrom:
          envRef:
            name: 'REDIS_PASSWORD'
      database: 0
      key: foo

Security Factory: compareWithGeneratedHMAC

Add a factory that allows to compare 2 inputs with a generated HMAC.

Useful for Github or Twitch webhooks

Example of config (not final)

  security:
  - getHeader:
      name: X-Hook-Secret
  - compareWithGeneratedHMAC:
      secret: '{{ .env.HOOK_SECRET }}'
      algorithm: sha256

fix: Security Factory failed when multiple specs is used in same configuration

Describe the bug
When multiple specs is provided, all security pipelines of previous definition is overrided by the last.

To Reproduce
Steps to reproduce the behavior:

  1. My config is
apiVersion: v1alpha1
observability:
  metricsEnabled: true
specs:
- name: exampleHook
  entrypointUrl: /webhooks/example
  security:
  - header:
      inputs:
      - name: headerName
        value: X-Hook-Secret
  - compare:
      inputs:
      - name: first
        value: '{{ .Outputs.header.value }}'
      - name: second
        valueFrom:
          envRef: HOOK_SECRET
  storage:
  - type: redis
    specs:
      host: localhost
      port: '6379'
      database: 0
      key: foo
- name: gitlab
  entrypointUrl: /webhooks/gitlab
  security:
  - header:
      inputs:
      - name: headerName
        value: X-Gitlab-Token
  - compare:
      inputs:
      - name: first
        value: '{{ .Outputs.header.value }}'
      - name: second
        valueFrom:
          envRef: GITLAB_WEBHOOK_TOKEN
  storage:
  - type: redis
    specs:
      host: localhost
      port: '6379'
      database: 0
      key: gitlab
  1. Try to store following payload
env DEBUG=true GITLAB_WEBHOOK_TOKEN=houk2 curl --request POST \
  --url http://localhost:8080/v1alpha1/webhooks/example \
  --header 'Content-Type: application/json' \
  --header 'X-Gitlab-Token: houk2' \
  --data '{
	"type": 42,
	"payload": {
		"nested": "amazing"
	}
}'
  1. See error

Expected behavior
The security line need to return 401 due to missing X-Hook-Secret header in her spec definition.

Backtrace error / Logs

7:12PM DBG running factory header
7:12PM DBG factory header input request = &{Method:POST URL:/v1alpha1/webhooks/example Proto:HTTP/1.1 ProtoMajor:1 ProtoMinor:1 Header:map[Accept:[*/*] Content-Length:[55] Content-Type:[application/json] User-Agent:[insomnia/2022.1.0] X-Gitlab-Token:[houk2]] Body:0xc0001c1ec0 GetBody:<nil> ContentLength:55 TransferEncoding:[] Close:false Host:localhost:8080 Form:map[] PostForm:map[] MultipartForm:<nil> Trailer:map[] RemoteAddr:[::1]:53382 RequestURI:/v1alpha1/webhooks/example TLS:<nil> Cancel:<nil> Response:<nil> ctx:0xc00033c960}
7:12PM DBG factory header input headerName = &{Valuable:{Value:0xc0002509c0 Values:[] ValueFrom:<nil>} Name:headerName}
7:12PM DBG factory header output value = houk2
7:12PM DBG running factory compare
7:12PM DBG factory compare input first = &{Valuable:{Value:0xc000250b50 Values:[] ValueFrom:<nil>} Name:first}
7:12PM DBG factory compare input second = &{Valuable:{Value:<nil> Values:[] ValueFrom:0xc000250c60} Name:second}
7:12PM WRN [houk2] + [] = false
7:12PM DBG factory compare output result = false
7:12PM DBG security factory passed: false
7:12PM DBG Webhook processed apiVersion=v1alpha1 entry=exampleHook
7:12PM INF Webhook is processed duration="361.9µs" secure=true spec=exampleHook statusCode=403 version=v1alpha1

feat: Add http as storage to just forward a request to another endpoint

Is your feature request related to a problem? Please describe

In company, we need to split a single request to multiple http endpoint, only use webhooked as a forward to multiple endpoint without store it

Describe the solution you'd like

As an universal webhooks receiver, have a feature to juste forward request to another url is a good point. For usage and security also

Describe alternatives you've considered

No response

Additional context

No response

Code of Conduct

  • I agree to follow this project's Code of Conduct

fix: go routine overflow with amqp

Describe the bug

When using a RabbitMQ storage with long time (24h~) the webhooked program will crash due to an overflow of goroutine

To Reproduce

  1. Have a RabbitMQ storage and run it for long time

What happened

PANIC

Expected behavior

No response

Relevant log output

fatal error: concurrent map writes

goroutine 147366 [running]:
runtime.throw({0xb6b318, 0x10})
	/usr/local/go/src/runtime/panic.go:1198 +0x71 fp=0xc00084f218 sp=0xc00084f1e8 pc=0x435c71
runtime.mapassign_faststr(0xaad3e0, 0xc00025f770, {0xb62c61, 0x5})
	/usr/local/go/src/runtime/map_faststr.go:294 +0x38b fp=0xc00084f280 sp=0xc00084f218 pc=0x41300b
atomys.codes/webhooked/pkg/factory.(*Pipeline).Run(0xc0001f9740)
	/build/pkg/factory/pipeline.go:95 +0x71b fp=0xc00084f448 sp=0xc00084f280 pc=0x7df31b
atomys.codes/webhooked/internal/server/v1alpha1.(*Server).runSecurity(0x7f8a20c79198, 0xc000778400, 0xc000d42500, {0xc000c70600, 0xdf, 0x10})
	/build/internal/server/v1alpha1/handlers.go:147 +0x145 fp=0xc00084f4b0 sp=0xc00084f448 pc=0xa2e3e5
atomys.codes/webhooked/internal/server/v1alpha1.webhookService(0xc000270485, 0xc000087740, 0xc000d42500)
	/build/internal/server/v1alpha1/handlers.go:103 +0x113 fp=0xc00084f600 sp=0xc00084f4b0 pc=0xa2ddf3
atomys.codes/webhooked/internal/server/v1alpha1.(*Server).WebhookHandler.func1({0xc3ef20, 0xc00045cc78}, 0xc000d42500)
	/build/internal/server/v1alpha1/handlers.go:71 +0x218 fp=0xc00084f6f8 sp=0xc00084f600 pc=0xa2dab8
net/http.HandlerFunc.ServeHTTP(0x0, {0xc3ef20, 0xc00045cc78}, 0x74d6bd)
	/usr/local/go/src/net/http/server.go:2047 +0x2f fp=0xc00084f720 sp=0xc00084f6f8 pc=0x71be2f
atomys.codes/webhooked/internal/server.prometheusMiddleware.func1({0xc3ef20, 0xc00045cc60}, 0xc000d42500)
	/build/internal/server/middlewares.go:51 +0xf2 fp=0xc00084f848 sp=0xc00084f720 pc=0xa2e7f2
net/http.HandlerFunc.ServeHTTP(0x7f8a20a6cb28, {0xc3ef20, 0xc00045cc60}, 0x7f8a478cc5b8)
	/usr/local/go/src/net/http/server.go:2047 +0x2f fp=0xc00084f870 sp=0xc00084f848 pc=0x71be2f
atomys.codes/webhooked/internal/server.loggingMiddleware.func1({0xc3fdf0, 0xc000734e00}, 0xc000d42500)
	/build/internal/server/middlewares.go:73 +0xdd fp=0xc00084f970 sp=0xc00084f870 pc=0xa2ec9d
net/http.HandlerFunc.ServeHTTP(0xc000d42400, {0xc3fdf0, 0xc000734e00}, 0xc00084f9f8)
	/usr/local/go/src/net/http/server.go:2047 +0x2f fp=0xc00084f998 sp=0xc00084f970 pc=0x71be2f
github.com/gorilla/mux.(*Router).ServeHTTP(0xc000266000, {0xc3fdf0, 0xc000734e00}, 0xc000d42300)
	/go/pkg/mod/github.com/gorilla/[email protected]/mux.go:210 +0x1cf fp=0xc00084fac0 sp=0xc00084f998 pc=0xa0b90f
net/http.serverHandler.ServeHTTP({0xc3e5e8}, {0xc3fdf0, 0xc000734e00}, 0xc000d42300)
	/usr/local/go/src/net/http/server.go:2879 +0x43b fp=0xc00084fb80 sp=0xc00084fac0 pc=0x71f39b
net/http.(*conn).serve(0xc000268460, {0xc43f28, 0xc00025ed80})
	/usr/local/go/src/net/http/server.go:1930 +0xb08 fp=0xc00084ffb8 sp=0xc00084fb80 pc=0x71af08
net/http.(*Server).Serve·dwrap·87()
	/usr/local/go/src/net/http/server.go:3034 +0x2e fp=0xc00084ffe0 sp=0xc00084ffb8 pc=0x71fcee
runtime.goexit()
	/usr/local/go/src/runtime/asm_amd64.s:1581 +0x1 fp=0xc00084ffe8 sp=0xc00084ffe0 pc=0x465e81
created by net/http.(*Server).Serve
	/usr/local/go/src/net/http/server.go:3034 +0x4e8

goroutine 1 [IO wait]:
internal/poll.runtime_pollWait(0x7f8a20c483d8, 0x72)
	/usr/local/go/src/runtime/netpoll.go:303 +0x85
internal/poll.(*pollDesc).wait(0xc000221e80, 0xc000046800, 0x0)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Accept(0xc000221e80)
	/usr/local/go/src/internal/poll/fd_unix.go:402 +0x22c
net.(*netFD).accept(0xc000221e80)
	/usr/local/go/src/net/fd_unix.go:173 +0x35
net.(*TCPListener).accept(0xc00000d590)
	/usr/local/go/src/net/tcpsock_posix.go:140 +0x28
net.(*TCPListener).Accept(0xc00000d590)
	/usr/local/go/src/net/tcpsock.go:262 +0x3d
net/http.(*Server).Serve(0xc000264000, {0xc3fc10, 0xc00000d590})
	/usr/local/go/src/net/http/server.go:3002 +0x394
net/http.(*Server).ListenAndServe(0xc000264000)
	/usr/local/go/src/net/http/server.go:2931 +0x7d
atomys.codes/webhooked/internal/server.(*Server).Serve(0xc00000e190)
	/build/internal/server/serve.go:59 +0x16a
atomys.codes/webhooked/cmd.glob..func1(0x10f1760, {0xb62016, 0x0, 0x0})
	/build/cmd/serve.go:50 +0xd6
github.com/spf13/cobra.(*Command).execute(0x10f1760, {0x112c2b8, 0x0, 0x0})
	/go/pkg/mod/github.com/spf13/[email protected]/command.go:860 +0x5f8
github.com/spf13/cobra.(*Command).ExecuteC(0x10f14e0)
	/go/pkg/mod/github.com/spf13/[email protected]/command.go:974 +0x3bc
github.com/spf13/cobra.(*Command).Execute(...)
	/go/pkg/mod/github.com/spf13/[email protected]/command.go:902
atomys.codes/webhooked/cmd.Execute()
	/build/cmd/root.go:43 +0x25
main.main()
	/build/main.go:44 +0x17

goroutine 11 [IO wait]:
internal/poll.runtime_pollWait(0x7f8a20c48888, 0x72)
	/usr/local/go/src/runtime/netpoll.go:303 +0x85
internal/poll.(*pollDesc).wait(0xc000220780, 0xc000231000, 0x0)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc000220780, {0xc000231000, 0x1000, 0x1000})
	/usr/local/go/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc000220780, {0xc000231000, 0xadda05, 0xc000090de8})
	/usr/local/go/src/net/fd_posix.go:56 +0x29
net.(*conn).Read(0xc00000e058, {0xc000231000, 0x4, 0xc000090e18})
	/usr/local/go/src/net/net.go:183 +0x45
bufio.(*Reader).Read(0xc00020c5a0, {0xc0006e0d80, 0x7, 0x40d3a7})
	/usr/local/go/src/bufio/bufio.go:227 +0x1b4
io.ReadAtLeast({0xc35280, 0xc00020c5a0}, {0xc0006e0d80, 0x7, 0x7}, 0x7)
	/usr/local/go/src/io/io.go:328 +0x9a
io.ReadFull(...)
	/usr/local/go/src/io/io.go:347
github.com/streadway/amqp.(*reader).ReadFrame(0xc000090f30)
	/go/pkg/mod/github.com/streadway/[email protected]/read.go:49 +0x53
github.com/streadway/amqp.(*Connection).reader(0xc000202140, {0xc35ee0, 0xc00000e058})
	/go/pkg/mod/github.com/streadway/[email protected]/connection.go:521 +0x1ca
created by github.com/streadway/amqp.Open
	/go/pkg/mod/github.com/streadway/[email protected]/connection.go:233 +0x365

goroutine 51 [select]:
github.com/streadway/amqp.(*Connection).heartbeater(0xc000202280, 0x2540be400, 0xc00020c900)
	/go/pkg/mod/github.com/streadway/[email protected]/connection.go:551 +0x1c5
created by github.com/streadway/amqp.(*Connection).openTune
	/go/pkg/mod/github.com/streadway/[email protected]/connection.go:782 +0x535

goroutine 66 [IO wait]:
internal/poll.runtime_pollWait(0x7f8a20c485b8, 0x72)
	/usr/local/go/src/runtime/netpoll.go:303 +0x85
internal/poll.(*pollDesc).wait(0xc000221900, 0xc0002db000, 0x0)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc000221900, {0xc0002db000, 0x1000, 0x1000})
	/usr/local/go/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc000221900, {0xc0002db000, 0x5, 0x0})
	/usr/local/go/src/net/fd_posix.go:56 +0x29
net.(*conn).Read(0xc00009e920, {0xc0002db000, 0x4, 0xc00008ce18})
	/usr/local/go/src/net/net.go:183 +0x45
bufio.(*Reader).Read(0xc0001f9e60, {0xc00052c240, 0x7, 0x40d3a7})
	/usr/local/go/src/bufio/bufio.go:227 +0x1b4
io.ReadAtLeast({0xc35280, 0xc0001f9e60}, {0xc00052c240, 0x7, 0x7}, 0x7)
	/usr/local/go/src/io/io.go:328 +0x9a
io.ReadFull(...)
	/usr/local/go/src/io/io.go:347
github.com/streadway/amqp.(*reader).ReadFrame(0xc00008cf30)
	/go/pkg/mod/github.com/streadway/[email protected]/read.go:49 +0x53
github.com/streadway/amqp.(*Connection).reader(0xc00019d400, {0xc35ee0, 0xc00009e920})
	/go/pkg/mod/github.com/streadway/[email protected]/connection.go:521 +0x1ca
created by github.com/streadway/amqp.Open
	/go/pkg/mod/github.com/streadway/[email protected]/connection.go:233 +0x365

goroutine 62 [select]:
github.com/streadway/amqp.(*Connection).heartbeater(0xc00019d400, 0x2540be400, 0xc00020d2c0)
	/go/pkg/mod/github.com/streadway/[email protected]/connection.go:551 +0x1c5
created by github.com/streadway/amqp.(*Connection).openTune
	/go/pkg/mod/github.com/streadway/[email protected]/connection.go:782 +0x535

goroutine 50 [IO wait]:
internal/poll.runtime_pollWait(0x7f8a20c486a8, 0x72)
	/usr/local/go/src/runtime/netpoll.go:303 +0x85
internal/poll.(*pollDesc).wait(0xc000220c80, 0xc000233000, 0x0)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc000220c80, {0xc000233000, 0x1000, 0x1000})
	/usr/local/go/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc000220c80, {0xc000233000, 0x5, 0x0})
	/usr/local/go/src/net/fd_posix.go:56 +0x29
net.(*conn).Read(0xc00000e098, {0xc000233000, 0x4, 0xc000091e18})
	/usr/local/go/src/net/net.go:183 +0x45
bufio.(*Reader).Read(0xc00020c8a0, {0xc0006e0d90, 0x7, 0x40d3a7})
	/usr/local/go/src/bufio/bufio.go:227 +0x1b4
io.ReadAtLeast({0xc35280, 0xc00020c8a0}, {0xc0006e0d90, 0x7, 0x7}, 0x7)
	/usr/local/go/src/io/io.go:328 +0x9a
io.ReadFull(...)
	/usr/local/go/src/io/io.go:347
github.com/streadway/amqp.(*reader).ReadFrame(0xc000091f30)
	/go/pkg/mod/github.com/streadway/[email protected]/read.go:49 +0x53
github.com/streadway/amqp.(*Connection).reader(0xc000202280, {0xc35ee0, 0xc00000e098})
	/go/pkg/mod/github.com/streadway/[email protected]/connection.go:521 +0x1ca
created by github.com/streadway/amqp.Open
	/go/pkg/mod/github.com/streadway/[email protected]/connection.go:233 +0x365

goroutine 12 [select]:
github.com/streadway/amqp.(*Connection).heartbeater(0xc000202140, 0x2540be400, 0xc00020c600)
	/go/pkg/mod/github.com/streadway/[email protected]/connection.go:551 +0x1c5
created by github.com/streadway/amqp.(*Connection).openTune
	/go/pkg/mod/github.com/streadway/[email protected]/connection.go:782 +0x535

goroutine 60 [IO wait]:
internal/poll.runtime_pollWait(0x7f8a20c48798, 0x72)
	/usr/local/go/src/runtime/netpoll.go:303 +0x85
internal/poll.(*pollDesc).wait(0xc000221400, 0xc00024d000, 0x0)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc000221400, {0xc00024d000, 0x1000, 0x1000})
	/usr/local/go/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc000221400, {0xc00024d000, 0xb9b205, 0xc00020d0c0})
	/usr/local/go/src/net/fd_posix.go:56 +0x29
net.(*conn).Read(0xc00000e120, {0xc00024d000, 0x4, 0xc000092e18})
	/usr/local/go/src/net/net.go:183 +0x45
bufio.(*Reader).Read(0xc00020d0e0, {0xc0008955f0, 0x7, 0x40d3a7})
	/usr/local/go/src/bufio/bufio.go:227 +0x1b4
io.ReadAtLeast({0xc35280, 0xc00020d0e0}, {0xc0008955f0, 0x7, 0x7}, 0x7)
	/usr/local/go/src/io/io.go:328 +0x9a
io.ReadFull(...)
	/usr/local/go/src/io/io.go:347
github.com/streadway/amqp.(*reader).ReadFrame(0xc000092f30)
	/go/pkg/mod/github.com/streadway/[email protected]/read.go:49 +0x53
github.com/streadway/amqp.(*Connection).reader(0xc0002023c0, {0xc35ee0, 0xc00000e120})
	/go/pkg/mod/github.com/streadway/[email protected]/connection.go:521 +0x1ca
created by github.com/streadway/amqp.Open
	/go/pkg/mod/github.com/streadway/[email protected]/connection.go:233 +0x365

goroutine 38 [select]:
github.com/streadway/amqp.(*Connection).heartbeater(0xc0002023c0, 0x2540be400, 0xc0001f9440)
	/go/pkg/mod/github.com/streadway/[email protected]/connection.go:551 +0x1c5
created by github.com/streadway/amqp.(*Connection).openTune
	/go/pkg/mod/github.com/streadway/[email protected]/connection.go:782 +0x535

goroutine 172970 [IO wait]:
internal/poll.runtime_pollWait(0x7f8a20a5ba58, 0x72)
	/usr/local/go/src/runtime/netpoll.go:303 +0x85
internal/poll.(*pollDesc).wait(0xc0003b9680, 0xc0007c5000, 0x0)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc0003b9680, {0xc0007c5000, 0x1000, 0x1000})
	/usr/local/go/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc0003b9680, {0xc0007c5000, 0x496806, 0x47674d})
	/usr/local/go/src/net/fd_posix.go:56 +0x29
net.(*conn).Read(0xc000864bd8, {0xc0007c5000, 0x0, 0xc0007cac98})
	/usr/local/go/src/net/net.go:183 +0x45
net/http.(*connReader).Read(0xc0007cac90, {0xc0007c5000, 0x1000, 0x1000})
	/usr/local/go/src/net/http/server.go:780 +0x16d
bufio.(*Reader).fill(0xc0007099e0)
	/usr/local/go/src/bufio/bufio.go:101 +0x103
bufio.(*Reader).Peek(0xc0007099e0, 0x4)
	/usr/local/go/src/bufio/bufio.go:139 +0x5d
net/http.(*conn).readRequest(0xc000268be0, {0xc43e80, 0xc000779480})
	/usr/local/go/src/net/http/server.go:963 +0x1f8
net/http.(*conn).serve(0xc000268be0, {0xc43f28, 0xc00025ed80})
	/usr/local/go/src/net/http/server.go:1856 +0x865
created by net/http.(*Server).Serve
	/usr/local/go/src/net/http/server.go:3034 +0x4e8

goroutine 173039 [IO wait]:
internal/poll.runtime_pollWait(0x7f8a20a5b2d8, 0x72)
	/usr/local/go/src/runtime/netpoll.go:303 +0x85
internal/poll.(*pollDesc).wait(0xc0008d5000, 0xc000a22000, 0x0)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc0008d5000, {0xc000a22000, 0x1000, 0x1000})
	/usr/local/go/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc0008d5000, {0xc000a22000, 0x496806, 0x47674d})
	/usr/local/go/src/net/fd_posix.go:56 +0x29
net.(*conn).Read(0xc00000fdb0, {0xc000a22000, 0x0, 0xc000a17f88})
	/usr/local/go/src/net/net.go:183 +0x45
net/http.(*connReader).Read(0xc000a17f80, {0xc000a22000, 0x1000, 0x1000})
	/usr/local/go/src/net/http/server.go:780 +0x16d
bufio.(*Reader).fill(0xc00064f6e0)
	/usr/local/go/src/bufio/bufio.go:101 +0x103
bufio.(*Reader).Peek(0xc00064f6e0, 0x4)
	/usr/local/go/src/bufio/bufio.go:139 +0x5d
net/http.(*conn).readRequest(0xc0001d6780, {0xc43e80, 0xc000a0d280})
	/usr/local/go/src/net/http/server.go:963 +0x1f8
net/http.(*conn).serve(0xc0001d6780, {0xc43f28, 0xc00025ed80})
	/usr/local/go/src/net/http/server.go:1856 +0x865
created by net/http.(*Server).Serve
	/usr/local/go/src/net/http/server.go:3034 +0x4e8

goroutine 82 [IO wait]:
internal/poll.runtime_pollWait(0x7f8a20c484c8, 0x72)
	/usr/local/go/src/runtime/netpoll.go:303 +0x85
internal/poll.(*pollDesc).wait(0xc000221e00, 0xc000261000, 0x0)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc000221e00, {0xc000261000, 0x1000, 0x1000})
	/usr/local/go/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc000221e00, {0xc000261000, 0x5, 0x1})
	/usr/local/go/src/net/fd_posix.go:56 +0x29
net.(*conn).Read(0xc00000e178, {0xc000261000, 0x4, 0xc000093e18})
	/usr/local/go/src/net/net.go:183 +0x45
bufio.(*Reader).Read(0xc00020d6e0, {0xc0005f0b70, 0x7, 0x40d3a7})
	/usr/local/go/src/bufio/bufio.go:227 +0x1b4
io.ReadAtLeast({0xc35280, 0xc00020d6e0}, {0xc0005f0b70, 0x7, 0x7}, 0x7)
	/usr/local/go/src/io/io.go:328 +0x9a
io.ReadFull(...)
	/usr/local/go/src/io/io.go:347
github.com/streadway/amqp.(*reader).ReadFrame(0xc000093f30)
	/go/pkg/mod/github.com/streadway/[email protected]/read.go:49 +0x53
github.com/streadway/amqp.(*Connection).reader(0xc000202500, {0xc35ee0, 0xc00000e178})
	/go/pkg/mod/github.com/streadway/[email protected]/connection.go:521 +0x1ca
created by github.com/streadway/amqp.Open
	/go/pkg/mod/github.com/streadway/[email protected]/connection.go:233 +0x365

goroutine 112 [IO wait]:
internal/poll.runtime_pollWait(0x7f8a20c48018, 0x72)
	/usr/local/go/src/runtime/netpoll.go:303 +0x85
internal/poll.(*pollDesc).wait(0xc0002d8000, 0xc00045a000, 0x0)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc0002d8000, {0xc00045a000, 0x1000, 0x1000})
	/usr/local/go/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc0002d8000, {0xc00045a000, 0xb67fbc, 0x10})
	/usr/local/go/src/net/fd_posix.go:56 +0x29
net.(*conn).Read(0xc00009e018, {0xc00045a000, 0x28, 0xc000468098})
	/usr/local/go/src/net/net.go:183 +0x45
net/http.(*connReader).Read(0xc000468090, {0xc00045a000, 0x1000, 0x1000})
	/usr/local/go/src/net/http/server.go:780 +0x16d
bufio.(*Reader).fill(0xc0002dd260)
	/usr/local/go/src/bufio/bufio.go:101 +0x103
bufio.(*Reader).ReadSlice(0xc0002dd260, 0x0)
	/usr/local/go/src/bufio/bufio.go:360 +0x2f
bufio.(*Reader).ReadLine(0xc0002dd260)
	/usr/local/go/src/bufio/bufio.go:389 +0x27
net/textproto.(*Reader).readLineSlice(0xc0006531a0)
	/usr/local/go/src/net/textproto/reader.go:57 +0x99
net/textproto.(*Reader).ReadLine(...)
	/usr/local/go/src/net/textproto/reader.go:38
net/http.readRequest(0xc00009e018)
	/usr/local/go/src/net/http/request.go:1029 +0x79
net/http.(*conn).readRequest(0xc0002680a0, {0xc43e80, 0xc00047c040})
	/usr/local/go/src/net/http/server.go:966 +0x225
net/http.(*conn).serve(0xc0002680a0, {0xc43f28, 0xc00025ed80})
	/usr/local/go/src/net/http/server.go:1856 +0x865
created by net/http.(*Server).Serve
	/usr/local/go/src/net/http/server.go:3034 +0x4e8

goroutine 76 [select]:
github.com/streadway/amqp.(*Connection).heartbeater(0xc000202500, 0x2540be400, 0xc0002dc600)
	/go/pkg/mod/github.com/streadway/[email protected]/connection.go:551 +0x1c5
created by github.com/streadway/amqp.(*Connection).openTune
	/go/pkg/mod/github.com/streadway/[email protected]/connection.go:782 +0x535

goroutine 158353 [IO wait]:
internal/poll.runtime_pollWait(0x7f8a20a5bb48, 0x72)
	/usr/local/go/src/runtime/netpoll.go:303 +0x85
internal/poll.(*pollDesc).wait(0xc000221880, 0xc000848000, 0x0)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc000221880, {0xc000848000, 0x1000, 0x1000})
	/usr/local/go/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc000221880, {0xc000848000, 0x496806, 0x47674d})
	/usr/local/go/src/net/fd_posix.go:56 +0x29
net.(*conn).Read(0xc00009f358, {0xc000848000, 0x0, 0xc0005cb208})
	/usr/local/go/src/net/net.go:183 +0x45
net/http.(*connReader).Read(0xc0005cb200, {0xc000848000, 0x1000, 0x1000})
	/usr/local/go/src/net/http/server.go:780 +0x16d
bufio.(*Reader).fill(0xc0002dd860)
	/usr/local/go/src/bufio/bufio.go:101 +0x103
bufio.(*Reader).Peek(0xc0002dd860, 0x4)
	/usr/local/go/src/bufio/bufio.go:139 +0x5d
net/http.(*conn).readRequest(0xc000268960, {0xc43e80, 0xc00083c600})
	/usr/local/go/src/net/http/server.go:963 +0x1f8
net/http.(*conn).serve(0xc000268960, {0xc43f28, 0xc00025ed80})
	/usr/local/go/src/net/http/server.go:1856 +0x865
created by net/http.(*Server).Serve
	/usr/local/go/src/net/http/server.go:3034 +0x4e8

goroutine 158354 [IO wait]:
internal/poll.runtime_pollWait(0x7f8a20c47a78, 0x72)
	/usr/local/go/src/runtime/netpoll.go:303 +0x85
internal/poll.(*pollDesc).wait(0xc000221980, 0xc00086c000, 0x0)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc000221980, {0xc00086c000, 0x1000, 0x1000})
	/usr/local/go/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc000221980, {0xc00086c000, 0x496806, 0x47674d})
	/usr/local/go/src/net/fd_posix.go:56 +0x29
net.(*conn).Read(0xc00009f360, {0xc00086c000, 0x0, 0xc000574338})
	/usr/local/go/src/net/net.go:183 +0x45
net/http.(*connReader).Read(0xc000574330, {0xc00086c000, 0x1000, 0x1000})
	/usr/local/go/src/net/http/server.go:780 +0x16d
bufio.(*Reader).fill(0xc0002ddb60)
	/usr/local/go/src/bufio/bufio.go:101 +0x103
bufio.(*Reader).Peek(0xc0002ddb60, 0x4)
	/usr/local/go/src/bufio/bufio.go:139 +0x5d
net/http.(*conn).readRequest(0xc000268a00, {0xc43e80, 0xc00083cc80})
	/usr/local/go/src/net/http/server.go:963 +0x1f8
net/http.(*conn).serve(0xc000268a00, {0xc43f28, 0xc00025ed80})
	/usr/local/go/src/net/http/server.go:1856 +0x865
created by net/http.(*Server).Serve
	/usr/local/go/src/net/http/server.go:3034 +0x4e8

goroutine 173997 [runnable]:
net/http.(*connReader).startBackgroundRead·dwrap·75()
	/usr/local/go/src/net/http/server.go:668
runtime.goexit()
	/usr/local/go/src/runtime/asm_amd64.s:1581 +0x1
created by net/http.(*connReader).startBackgroundRead
	/usr/local/go/src/net/http/server.go:668 +0xcf

goroutine 173103 [IO wait]:
internal/poll.runtime_pollWait(0x7f8a20a70ef8, 0x72)
	/usr/local/go/src/runtime/netpoll.go:303 +0x85
internal/poll.(*pollDesc).wait(0xc000a33700, 0xc000589000, 0x0)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc000a33700, {0xc000589000, 0x1000, 0x1000})
	/usr/local/go/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc000a33700, {0xc000589000, 0x496806, 0x47674d})
	/usr/local/go/src/net/fd_posix.go:56 +0x29
net.(*conn).Read(0xc00000ffd0, {0xc000589000, 0x0, 0xc00084a8a8})
	/usr/local/go/src/net/net.go:183 +0x45
net/http.(*connReader).Read(0xc00084a8a0, {0xc000589000, 0x1000, 0x1000})
	/usr/local/go/src/net/http/server.go:780 +0x16d
bufio.(*Reader).fill(0xc0004bfd40)
	/usr/local/go/src/bufio/bufio.go:101 +0x103
bufio.(*Reader).Peek(0xc0004bfd40, 0x4)
	/usr/local/go/src/bufio/bufio.go:139 +0x5d
net/http.(*conn).readRequest(0xc0001d6b40, {0xc43e80, 0xc00042d200})
	/usr/local/go/src/net/http/server.go:963 +0x1f8
net/http.(*conn).serve(0xc0001d6b40, {0xc43f28, 0xc00025ed80})
	/usr/local/go/src/net/http/server.go:1856 +0x865
created by net/http.(*Server).Serve
	/usr/local/go/src/net/http/server.go:3034 +0x4e8

goroutine 173101 [IO wait]:
internal/poll.runtime_pollWait(0x7f8a20a710d8, 0x72)
	/usr/local/go/src/runtime/netpoll.go:303 +0x85
internal/poll.(*pollDesc).wait(0xc000a33600, 0xc00021d000, 0x0)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc000a33600, {0xc00021d000, 0x1000, 0x1000})
	/usr/local/go/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc000a33600, {0xc00021d000, 0x496806, 0x47674d})
	/usr/local/go/src/net/fd_posix.go:56 +0x29
net.(*conn).Read(0xc00000ffc0, {0xc00021d000, 0x0, 0xc00076d5c8})
	/usr/local/go/src/net/net.go:183 +0x45
net/http.(*connReader).Read(0xc00076d5c0, {0xc00021d000, 0x1000, 0x1000})
	/usr/local/go/src/net/http/server.go:780 +0x16d
bufio.(*Reader).fill(0xc0004bf860)
	/usr/local/go/src/bufio/bufio.go:101 +0x103
bufio.(*Reader).Peek(0xc0004bf860, 0x4)
	/usr/local/go/src/bufio/bufio.go:139 +0x5d
net/http.(*conn).readRequest(0xc0001d6a00, {0xc43e80, 0xc00042c580})
	/usr/local/go/src/net/http/server.go:963 +0x1f8
net/http.(*conn).serve(0xc0001d6a00, {0xc43f28, 0xc00025ed80})
	/usr/local/go/src/net/http/server.go:1856 +0x865
created by net/http.(*Server).Serve
	/usr/local/go/src/net/http/server.go:3034 +0x4e8

goroutine 172994 [IO wait, 1 minutes]:
internal/poll.runtime_pollWait(0x7f8a20a5b4b8, 0x72)
	/usr/local/go/src/runtime/netpoll.go:303 +0x85
internal/poll.(*pollDesc).wait(0xc0003b9a80, 0xc0009c5000, 0x0)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc0003b9a80, {0xc0009c5000, 0x1000, 0x1000})
	/usr/local/go/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc0003b9a80, {0xc0009c5000, 0x496806, 0x47674d})
	/usr/local/go/src/net/fd_posix.go:56 +0x29
net.(*conn).Read(0xc000864c18, {0xc0009c5000, 0x0, 0xc0009c1568})
	/usr/local/go/src/net/net.go:183 +0x45
net/http.(*connReader).Read(0xc0009c1560, {0xc0009c5000, 0x1000, 0x1000})
	/usr/local/go/src/net/http/server.go:780 +0x16d
bufio.(*Reader).fill(0xc0001f8ae0)
	/usr/local/go/src/bufio/bufio.go:101 +0x103
bufio.(*Reader).Peek(0xc0001f8ae0, 0x4)
	/usr/local/go/src/bufio/bufio.go:139 +0x5d
net/http.(*conn).readRequest(0xc000269220, {0xc43e80, 0xc00098f9c0})
	/usr/local/go/src/net/http/server.go:963 +0x1f8
net/http.(*conn).serve(0xc000269220, {0xc43f28, 0xc00025ed80})
	/usr/local/go/src/net/http/server.go:1856 +0x865
created by net/http.(*Server).Serve
	/usr/local/go/src/net/http/server.go:3034 +0x4e8

goroutine 172975 [IO wait, 1 minutes]:
internal/poll.runtime_pollWait(0x7f8a20a5b878, 0x72)
	/usr/local/go/src/runtime/netpoll.go:303 +0x85
internal/poll.(*pollDesc).wait(0xc0003b9900, 0xc0009a1000, 0x0)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc0003b9900, {0xc0009a1000, 0x1000, 0x1000})
	/usr/local/go/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc0003b9900, {0xc0009a1000, 0x496806, 0x47674d})
	/usr/local/go/src/net/fd_posix.go:56 +0x29
net.(*conn).Read(0xc000864c00, {0xc0009a1000, 0x0, 0xc00098cf38})
	/usr/local/go/src/net/net.go:183 +0x45
net/http.(*connReader).Read(0xc00098cf30, {0xc0009a1000, 0x1000, 0x1000})
	/usr/local/go/src/net/http/server.go:780 +0x16d
bufio.(*Reader).fill(0xc000709f80)
	/usr/local/go/src/bufio/bufio.go:101 +0x103
bufio.(*Reader).Peek(0xc000709f80, 0x4)
	/usr/local/go/src/bufio/bufio.go:139 +0x5d
net/http.(*conn).readRequest(0xc000269040, {0xc43e80, 0xc00098e6c0})
	/usr/local/go/src/net/http/server.go:963 +0x1f8
net/http.(*conn).serve(0xc000269040, {0xc43f28, 0xc00025ed80})
	/usr/local/go/src/net/http/server.go:1856 +0x865
created by net/http.(*Server).Serve
	/usr/local/go/src/net/http/server.go:3034 +0x4e8

goroutine 172993 [IO wait, 1 minutes]:
internal/poll.runtime_pollWait(0x7f8a20a5b788, 0x72)
	/usr/local/go/src/runtime/netpoll.go:303 +0x85
internal/poll.(*pollDesc).wait(0xc0003b9a00, 0xc0009b7000, 0x0)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc0003b9a00, {0xc0009b7000, 0x1000, 0x1000})
	/usr/local/go/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc0003b9a00, {0xc0009b7000, 0x496806, 0x47674d})
	/usr/local/go/src/net/fd_posix.go:56 +0x29
net.(*conn).Read(0xc000864c10, {0xc0009b7000, 0x0, 0xc0009c0788})
	/usr/local/go/src/net/net.go:183 +0x45
net/http.(*connReader).Read(0xc0009c0780, {0xc0009b7000, 0x1000, 0x1000})
	/usr/local/go/src/net/http/server.go:780 +0x16d
bufio.(*Reader).fill(0xc0001f86c0)
	/usr/local/go/src/bufio/bufio.go:101 +0x103
bufio.(*Reader).Peek(0xc0001f86c0, 0x4)
	/usr/local/go/src/bufio/bufio.go:139 +0x5d
net/http.(*conn).readRequest(0xc000269180, {0xc43e80, 0xc00098f380})
	/usr/local/go/src/net/http/server.go:963 +0x1f8
net/http.(*conn).serve(0xc000269180, {0xc43f28, 0xc00025ed80})
	/usr/local/go/src/net/http/server.go:1856 +0x865
created by net/http.(*Server).Serve
	/usr/local/go/src/net/http/server.go:3034 +0x4e8

goroutine 147367 [IO wait]:
internal/poll.runtime_pollWait(0x7f8a20a5bf08, 0x72)
	/usr/local/go/src/runtime/netpoll.go:303 +0x85
internal/poll.(*pollDesc).wait(0xc000511100, 0xc00021b000, 0x0)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc000511100, {0xc00021b000, 0x1000, 0x1000})
	/usr/local/go/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc000511100, {0xc00021b000, 0x496806, 0x47674d})
	/usr/local/go/src/net/fd_posix.go:56 +0x29
net.(*conn).Read(0xc00009e298, {0xc00021b000, 0x0, 0xc0007b5688})
	/usr/local/go/src/net/net.go:183 +0x45
net/http.(*connReader).Read(0xc0007b5680, {0xc00021b000, 0x1000, 0x1000})
	/usr/local/go/src/net/http/server.go:780 +0x16d
bufio.(*Reader).fill(0xc000709920)
	/usr/local/go/src/bufio/bufio.go:101 +0x103
bufio.(*Reader).Peek(0xc000709920, 0x4)
	/usr/local/go/src/bufio/bufio.go:139 +0x5d
net/http.(*conn).readRequest(0xc000268500, {0xc43e80, 0xc000688200})
	/usr/local/go/src/net/http/server.go:963 +0x1f8
net/http.(*conn).serve(0xc000268500, {0xc43f28, 0xc00025ed80})
	/usr/local/go/src/net/http/server.go:1856 +0x865
created by net/http.(*Server).Serve
	/usr/local/go/src/net/http/server.go:3034 +0x4e8

goroutine 173998 [runnable]:
text/template/parse.(*lexer).emit(...)
	/usr/local/go/src/text/template/parse/lex.go:157
text/template/parse.lexText(0xc000511980)
	/usr/local/go/src/text/template/parse/lex.go:269 +0x44a
text/template/parse.(*lexer).run(0xc000511980)
	/usr/local/go/src/text/template/parse/lex.go:230 +0x2a
created by text/template/parse.lex
	/usr/local/go/src/text/template/parse/lex.go:223 +0x1cf

goroutine 158377 [IO wait]:
internal/poll.runtime_pollWait(0x7f8a20c48108, 0x72)
	/usr/local/go/src/runtime/netpoll.go:303 +0x85
internal/poll.(*pollDesc).wait(0xc0001f7280, 0xc00089a000, 0x0)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc0001f7280, {0xc00089a000, 0x1000, 0x1000})
	/usr/local/go/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc0001f7280, {0xc00089a000, 0x496806, 0x47674d})
	/usr/local/go/src/net/fd_posix.go:56 +0x29
net.(*conn).Read(0xc00009f4d0, {0xc00089a000, 0x0, 0xc000896098})
	/usr/local/go/src/net/net.go:183 +0x45
net/http.(*connReader).Read(0xc000896090, {0xc00089a000, 0x1000, 0x1000})
	/usr/local/go/src/net/http/server.go:780 +0x16d
bufio.(*Reader).fill(0xc0001f8ea0)
	/usr/local/go/src/bufio/bufio.go:101 +0x103
bufio.(*Reader).Peek(0xc0001f8ea0, 0x4)
	/usr/local/go/src/bufio/bufio.go:139 +0x5d
net/http.(*conn).readRequest(0xc000268c80, {0xc43e80, 0xc000890500})
	/usr/local/go/src/net/http/server.go:963 +0x1f8
net/http.(*conn).serve(0xc000268c80, {0xc43f28, 0xc00025ed80})
	/usr/local/go/src/net/http/server.go:1856 +0x865
created by net/http.(*Server).Serve
	/usr/local/go/src/net/http/server.go:3034 +0x4e8

goroutine 124936 [runnable]:
text/template.builtins(...)
	/usr/local/go/src/text/template/funcs.go:41
text/template.(*Template).Parse(0xc00083de80, {0xc0001d00c0, 0x1b})
	/usr/local/go/src/text/template/template.go:210 +0x552
atomys.codes/webhooked/pkg/factory.goTemplateValue({0xc0001d00c0, 0x1b}, {0xae9340, 0xc0001f9740})
	/build/pkg/factory/factory.go:191 +0x105
atomys.codes/webhooked/pkg/factory.(*Factory).processInputConfig(0xc0001a9490, 0xc000282fc0)
	/build/pkg/factory/factory.go:174 +0x37d
atomys.codes/webhooked/pkg/factory.(*Factory).Input(0xc0001a9490, {0xb62a54, 0x203000})
	/build/pkg/factory/factory.go:126 +0x130
atomys.codes/webhooked/pkg/factory.(*compareFactory).Func.func1(0xc0001a9490, 0x10)
	/build/pkg/factory/f_compare.go:31 +0x50
atomys.codes/webhooked/pkg/factory.(*Factory).Run(0xc0001a9490)
	/build/pkg/factory/factory.go:152 +0x2a
atomys.codes/webhooked/pkg/factory.(*Pipeline).Run(0xc0001f9740)
	/build/pkg/factory/pipeline.go:76 +0x1af
atomys.codes/webhooked/internal/server/v1alpha1.(*Server).runSecurity(0x7f8a20c79198, 0xc00083cd80, 0xc00050ba00, {0xc00097e400, 0xdc, 0x10})
	/build/internal/server/v1alpha1/handlers.go:147 +0x145
atomys.codes/webhooked/internal/server/v1alpha1.webhookService(0xc00009c455, 0xc000087740, 0xc00050ba00)
	/build/internal/server/v1alpha1/handlers.go:103 +0x113
atomys.codes/webhooked/internal/server/v1alpha1.(*Server).WebhookHandler.func1({0xc3ef20, 0xc000726c90}, 0xc00050ba00)
	/build/internal/server/v1alpha1/handlers.go:71 +0x218
net/http.HandlerFunc.ServeHTTP(0x0, {0xc3ef20, 0xc000726c90}, 0x74d6bd)
	/usr/local/go/src/net/http/server.go:2047 +0x2f
atomys.codes/webhooked/internal/server.prometheusMiddleware.func1({0xc3ef20, 0xc000726c78}, 0xc00050ba00)
	/build/internal/server/middlewares.go:51 +0xf2
net/http.HandlerFunc.ServeHTTP(0x7f8a20b66810, {0xc3ef20, 0xc000726c78}, 0x7f8a478cc108)
	/usr/local/go/src/net/http/server.go:2047 +0x2f
atomys.codes/webhooked/internal/server.loggingMiddleware.func1({0xc3fdf0, 0xc000532700}, 0xc00050ba00)
	/build/internal/server/middlewares.go:73 +0xdd
net/http.HandlerFunc.ServeHTTP(0xc00050b900, {0xc3fdf0, 0xc000532700}, 0xc0008ad9f8)
	/usr/local/go/src/net/http/server.go:2047 +0x2f
github.com/gorilla/mux.(*Router).ServeHTTP(0xc000266000, {0xc3fdf0, 0xc000532700}, 0xc00050b800)
	/go/pkg/mod/github.com/gorilla/[email protected]/mux.go:210 +0x1cf
net/http.serverHandler.ServeHTTP({0xc3e5e8}, {0xc3fdf0, 0xc000532700}, 0xc00050b800)
	/usr/local/go/src/net/http/server.go:2879 +0x43b
net/http.(*conn).serve(0xc000268aa0, {0xc43f28, 0xc00025ed80})
	/usr/local/go/src/net/http/server.go:1930 +0xb08
created by net/http.(*Server).Serve
	/usr/local/go/src/net/http/server.go:3034 +0x4e8

goroutine 173042 [IO wait, 1 minutes]:
internal/poll.runtime_pollWait(0x7f8a20a5b008, 0x72)
	/usr/local/go/src/runtime/netpoll.go:303 +0x85
internal/poll.(*pollDesc).wait(0xc0008d5180, 0xc0008fe000, 0x0)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc0008d5180, {0xc0008fe000, 0x1000, 0x1000})
	/usr/local/go/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc0008d5180, {0xc0008fe000, 0x496806, 0x47674d})
	/usr/local/go/src/net/fd_posix.go:56 +0x29
net.(*conn).Read(0xc00000fdc8, {0xc0008fe000, 0x0, 0xc0008fa998})
	/usr/local/go/src/net/net.go:183 +0x45
net/http.(*connReader).Read(0xc0008fa990, {0xc0008fe000, 0x1000, 0x1000})
	/usr/local/go/src/net/http/server.go:780 +0x16d
bufio.(*Reader).fill(0xc00064ef00)
	/usr/local/go/src/bufio/bufio.go:101 +0x103
bufio.(*Reader).Peek(0xc00064ef00, 0x4)
	/usr/local/go/src/bufio/bufio.go:139 +0x5d
net/http.(*conn).readRequest(0xc0001d6960, {0xc43e80, 0xc0008cfbc0})
	/usr/local/go/src/net/http/server.go:963 +0x1f8
net/http.(*conn).serve(0xc0001d6960, {0xc43f28, 0xc00025ed80})
	/usr/local/go/src/net/http/server.go:1856 +0x865
created by net/http.(*Server).Serve
	/usr/local/go/src/net/http/server.go:3034 +0x4e8

goroutine 174000 [runnable]:
net/http.(*connReader).startBackgroundRead·dwrap·75()
	/usr/local/go/src/net/http/server.go:668
runtime.goexit()
	/usr/local/go/src/runtime/asm_amd64.s:1581 +0x1
created by net/http.(*connReader).startBackgroundRead
	/usr/local/go/src/net/http/server.go:668 +0xcf

goroutine 173994 [IO wait]:
internal/poll.runtime_pollWait(0x7f8a20c47f28, 0x72)
	/usr/local/go/src/runtime/netpoll.go:303 +0x85
internal/poll.(*pollDesc).wait(0xc0005ae980, 0xc0006ffb41, 0x0)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc0005ae980, {0xc0006ffb41, 0x1, 0x1})
	/usr/local/go/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc0005ae980, {0xc0006ffb41, 0x40537d, 0xc0009ec240})
	/usr/local/go/src/net/fd_posix.go:56 +0x29
net.(*conn).Read(0xc00000fb50, {0xc0006ffb41, 0xb619d5, 0xc0003e07a0})
	/usr/local/go/src/net/net.go:183 +0x45
net/http.(*connReader).backgroundRead(0xc0006ffb30)
	/usr/local/go/src/net/http/server.go:672 +0x3f
created by net/http.(*connReader).startBackgroundRead
	/usr/local/go/src/net/http/server.go:668 +0xcf

goroutine 158336 [IO wait, 1 minutes]:
internal/poll.runtime_pollWait(0x7f8a20c47d48, 0x72)
	/usr/local/go/src/runtime/netpoll.go:303 +0x85
internal/poll.(*pollDesc).wait(0xc000221800, 0xc00083a000, 0x0)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc000221800, {0xc00083a000, 0x1000, 0x1000})
	/usr/local/go/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc000221800, {0xc00083a000, 0x496806, 0x47674d})
	/usr/local/go/src/net/fd_posix.go:56 +0x29
net.(*conn).Read(0xc00009f350, {0xc00083a000, 0x0, 0xc0005ca398})
	/usr/local/go/src/net/net.go:183 +0x45
net/http.(*connReader).Read(0xc0005ca390, {0xc00083a000, 0x1000, 0x1000})
	/usr/local/go/src/net/http/server.go:780 +0x16d
bufio.(*Reader).fill(0xc0002dd560)
	/usr/local/go/src/bufio/bufio.go:101 +0x103
bufio.(*Reader).Peek(0xc0002dd560, 0x4)
	/usr/local/go/src/bufio/bufio.go:139 +0x5d
net/http.(*conn).readRequest(0xc000268780, {0xc43e80, 0xc0006e5f80})
	/usr/local/go/src/net/http/server.go:963 +0x1f8
net/http.(*conn).serve(0xc000268780, {0xc43f28, 0xc00025ed80})
	/usr/local/go/src/net/http/server.go:1856 +0x865
created by net/http.(*Server).Serve
	/usr/local/go/src/net/http/server.go:3034 +0x4e8

goroutine 173102 [IO wait]:
internal/poll.runtime_pollWait(0x7f8a20a70fe8, 0x72)
	/usr/local/go/src/runtime/netpoll.go:303 +0x85
internal/poll.(*pollDesc).wait(0xc000a33680, 0xc000604000, 0x0)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc000a33680, {0xc000604000, 0x1000, 0x1000})
	/usr/local/go/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc000a33680, {0xc000604000, 0x496806, 0x47674d})
	/usr/local/go/src/net/fd_posix.go:56 +0x29
net.(*conn).Read(0xc00000ffc8, {0xc000604000, 0x0, 0xc0008964e8})
	/usr/local/go/src/net/net.go:183 +0x45
net/http.(*connReader).Read(0xc0008964e0, {0xc000604000, 0x1000, 0x1000})
	/usr/local/go/src/net/http/server.go:780 +0x16d
bufio.(*Reader).fill(0xc0004bfaa0)
	/usr/local/go/src/bufio/bufio.go:101 +0x103
bufio.(*Reader).Peek(0xc0004bfaa0, 0x4)
	/usr/local/go/src/bufio/bufio.go:139 +0x5d
net/http.(*conn).readRequest(0xc0001d6aa0, {0xc43e80, 0xc00042cbc0})
	/usr/local/go/src/net/http/server.go:963 +0x1f8
net/http.(*conn).serve(0xc0001d6aa0, {0xc43f28, 0xc00025ed80})
	/usr/local/go/src/net/http/server.go:1856 +0x865
created by net/http.(*Server).Serve
	/usr/local/go/src/net/http/server.go:3034 +0x4e8

goroutine 172976 [IO wait]:
internal/poll.runtime_pollWait(0x7f8a20a5b968, 0x72)
	/usr/local/go/src/runtime/netpoll.go:303 +0x85
internal/poll.(*pollDesc).wait(0xc0003b9980, 0xc0009a9000, 0x0)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc0003b9980, {0xc0009a9000, 0x1000, 0x1000})
	/usr/local/go/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc0003b9980, {0xc0009a9000, 0x496806, 0x47674d})
	/usr/local/go/src/net/fd_posix.go:56 +0x29
net.(*conn).Read(0xc000864c08, {0xc0009a9000, 0x0, 0xc00098d988})
	/usr/local/go/src/net/net.go:183 +0x45
net/http.(*connReader).Read(0xc00098d980, {0xc0009a9000, 0x1000, 0x1000})
	/usr/local/go/src/net/http/server.go:780 +0x16d
bufio.(*Reader).fill(0xc0001f8360)
	/usr/local/go/src/bufio/bufio.go:101 +0x103
bufio.(*Reader).Peek(0xc0001f8360, 0x4)
	/usr/local/go/src/bufio/bufio.go:139 +0x5d
net/http.(*conn).readRequest(0xc0002690e0, {0xc43e80, 0xc00098ed00})
	/usr/local/go/src/net/http/server.go:963 +0x1f8
net/http.(*conn).serve(0xc0002690e0, {0xc43f28, 0xc00025ed80})
	/usr/local/go/src/net/http/server.go:1856 +0x865
created by net/http.(*Server).Serve
	/usr/local/go/src/net/http/server.go:3034 +0x4e8

goroutine 172969 [IO wait]:
internal/poll.runtime_pollWait(0x7f8a20c47e38, 0x72)
	/usr/local/go/src/runtime/netpoll.go:303 +0x85
internal/poll.(*pollDesc).wait(0xc0003b9600, 0xc000703000, 0x0)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc0003b9600, {0xc000703000, 0x1000, 0x1000})
	/usr/local/go/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc0003b9600, {0xc000703000, 0x496806, 0x47674d})
	/usr/local/go/src/net/fd_posix.go:56 +0x29
net.(*conn).Read(0xc000864bd0, {0xc000703000, 0x0, 0xc00077de98})
	/usr/local/go/src/net/net.go:183 +0x45
net/http.(*connReader).Read(0xc00077de90, {0xc000703000, 0x1000, 0x1000})
	/usr/local/go/src/net/http/server.go:780 +0x16d
bufio.(*Reader).fill(0xc000709740)
	/usr/local/go/src/bufio/bufio.go:101 +0x103
bufio.(*Reader).Peek(0xc000709740, 0x4)
	/usr/local/go/src/bufio/bufio.go:139 +0x5d
net/http.(*conn).readRequest(0xc0002688c0, {0xc43e80, 0xc000778e40})
	/usr/local/go/src/net/http/server.go:963 +0x1f8
net/http.(*conn).serve(0xc0002688c0, {0xc43f28, 0xc00025ed80})
	/usr/local/go/src/net/http/server.go:1856 +0x865
created by net/http.(*Server).Serve
	/usr/local/go/src/net/http/server.go:3034 +0x4e8

goroutine 158341 [IO wait]:
internal/poll.runtime_pollWait(0x7f8a20c47c58, 0x72)
	/usr/local/go/src/runtime/netpoll.go:303 +0x85
internal/poll.(*pollDesc).wait(0xc0003b9200, 0xc0007ac000, 0x0)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc0003b9200, {0xc0007ac000, 0x1000, 0x1000})
	/usr/local/go/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc0003b9200, {0xc0007ac000, 0x496806, 0x47674d})
	/usr/local/go/src/net/fd_posix.go:56 +0x29
net.(*conn).Read(0xc00000f0b0, {0xc0007ac000, 0x0, 0xc0004e7e38})
	/usr/local/go/src/net/net.go:183 +0x45
net/http.(*connReader).Read(0xc0004e7e30, {0xc0007ac000, 0x1000, 0x1000})
	/usr/local/go/src/net/http/server.go:780 +0x16d
bufio.(*Reader).fill(0xc0004c2c60)
	/usr/local/go/src/bufio/bufio.go:101 +0x103
bufio.(*Reader).Peek(0xc0004c2c60, 0x4)
	/usr/local/go/src/bufio/bufio.go:139 +0x5d
net/http.(*conn).readRequest(0xc0001d63c0, {0xc43e80, 0xc0007a6180})
	/usr/local/go/src/net/http/server.go:963 +0x1f8
net/http.(*conn).serve(0xc0001d63c0, {0xc43f28, 0xc00025ed80})
	/usr/local/go/src/net/http/server.go:1856 +0x865
created by net/http.(*Server).Serve
	/usr/local/go/src/net/http/server.go:3034 +0x4e8

goroutine 158683 [runnable]:
internal/poll.runtime_pollWait(0x7f8a20a5b698, 0x72)
	/usr/local/go/src/runtime/netpoll.go:303 +0x85
internal/poll.(*pollDesc).wait(0xc00053f600, 0xc00040d000, 0x0)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc00053f600, {0xc00040d000, 0x1000, 0x1000})
	/usr/local/go/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc00053f600, {0xc00040d000, 0x496806, 0x47674d})
	/usr/local/go/src/net/fd_posix.go:56 +0x29
net.(*conn).Read(0xc00000f4d0, {0xc00040d000, 0x0, 0xc000671838})
	/usr/local/go/src/net/net.go:183 +0x45
net/http.(*connReader).Read(0xc000671830, {0xc00040d000, 0x1000, 0x1000})
	/usr/local/go/src/net/http/server.go:780 +0x16d
bufio.(*Reader).fill(0xc00064eba0)
	/usr/local/go/src/bufio/bufio.go:101 +0x103
bufio.(*Reader).Peek(0xc00064eba0, 0x4)
	/usr/local/go/src/bufio/bufio.go:139 +0x5d
net/http.(*conn).readRequest(0xc000268820, {0xc43e80, 0xc00067a1c0})
	/usr/local/go/src/net/http/server.go:963 +0x1f8
net/http.(*conn).serve(0xc000268820, {0xc43f28, 0xc00025ed80})
	/usr/local/go/src/net/http/server.go:1856 +0x865
created by net/http.(*Server).Serve
	/usr/local/go/src/net/http/server.go:3034 +0x4e8

goroutine 124937 [runnable]:
bytes.(*Buffer).Write(0xc000717a10, {0xc00052cdba, 0x2, 0x2})
	/usr/local/go/src/bytes/buffer.go:168 +0xff
encoding/binary.Write({0xc35300, 0xc000717a10}, {0xc4ccb0, 0x112c2b8}, {0xa7f9e0, 0x10ad3c0})
	/usr/local/go/src/encoding/binary/binary.go:375 +0x1088
github.com/streadway/amqp.(*headerFrame).write(0xc000532620, {0xc352a0, 0xc0002835c0})
	/go/pkg/mod/github.com/streadway/[email protected]/write.go:72 +0x71
github.com/streadway/amqp.(*writer).WriteFrame(0xc0001fd2f0, {0xc3e1b0, 0xc000532620})
	/go/pkg/mod/github.com/streadway/[email protected]/write.go:19 +0x36
github.com/streadway/amqp.(*Connection).send(0xc00019d400, {0xc3e1b0, 0xc000532620})
	/go/pkg/mod/github.com/streadway/[email protected]/connection.go:364 +0x90
github.com/streadway/amqp.(*Channel).sendOpen(0xc0002c8360, {0xc44388, 0xc000cb0480})
	/go/pkg/mod/github.com/streadway/[email protected]/channel.go:240 +0x2de
github.com/streadway/amqp.(*Channel).send(0xac8d20, {0xc44388, 0xc000cb0480})
	/go/pkg/mod/github.com/streadway/[email protected]/channel.go:161 +0x3a
github.com/streadway/amqp.(*Channel).Publish(0xc0002c8360, {0x0, 0x0}, {0xc0000d90e0, _}, _, _, {0x0, {0xc0001d40e0, 0x10}, ...})
	/go/pkg/mod/github.com/streadway/[email protected]/channel.go:1334 +0x3f1
atomys.codes/webhooked/pkg/storage/rabbitmq.storage.Push({0xc0001f9800, 0xc00019d400, 0xc0002c8360, {{0xc0000d90e0, 0x13}, 0x0, 0x1}}, {0xa7f820, 0xc000757340})
	/build/pkg/storage/rabbitmq/rabbitmq.go:95 +0x1cb
atomys.codes/webhooked/internal/server/v1alpha1.webhookService(0xc00009c365, 0xc000087740, 0xc00050b600)
	/build/internal/server/v1alpha1/handlers.go:122 +0x54e
atomys.codes/webhooked/internal/server/v1alpha1.(*Server).WebhookHandler.func1({0xc3ef20, 0xc000726b40}, 0xc00050b600)
	/build/internal/server/v1alpha1/handlers.go:71 +0x218
net/http.HandlerFunc.ServeHTTP(0x0, {0xc3ef20, 0xc000726b40}, 0x74d6bd)
	/usr/local/go/src/net/http/server.go:2047 +0x2f
atomys.codes/webhooked/internal/server.prometheusMiddleware.func1({0xc3ef20, 0xc000726b28}, 0xc00050b600)
	/build/internal/server/middlewares.go:51 +0xf2
net/http.HandlerFunc.ServeHTTP(0x7f8a20b66810, {0xc3ef20, 0xc000726b28}, 0x7f8a478cc108)
	/usr/local/go/src/net/http/server.go:2047 +0x2f
atomys.codes/webhooked/internal/server.loggingMiddleware.func1({0xc3fdf0, 0xc000532540}, 0xc00050b600)
	/build/internal/server/middlewares.go:73 +0xdd
net/http.HandlerFunc.ServeHTTP(0xc00050b500, {0xc3fdf0, 0xc000532540}, 0xc00088d9f8)
	/usr/local/go/src/net/http/server.go:2047 +0x2f
github.com/gorilla/mux.(*Router).ServeHTTP(0xc000266000, {0xc3fdf0, 0xc000532540}, 0xc00050b400)
	/go/pkg/mod/github.com/gorilla/[email protected]/mux.go:210 +0x1cf
net/http.serverHandler.ServeHTTP({0xc3e5e8}, {0xc3fdf0, 0xc000532540}, 0xc00050b400)
	/usr/local/go/src/net/http/server.go:2879 +0x43b
net/http.(*conn).serve(0xc000268b40, {0xc43f28, 0xc00025ed80})
	/usr/local/go/src/net/http/server.go:1930 +0xb08
created by net/http.(*Server).Serve
	/usr/local/go/src/net/http/server.go:3034 +0x4e8

goroutine 172971 [IO wait]:
internal/poll.runtime_pollWait(0x7f8a20c481f8, 0x72)
	/usr/local/go/src/runtime/netpoll.go:303 +0x85
internal/poll.(*pollDesc).wait(0xc0003b9700, 0xc0007eb000, 0x0)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc0003b9700, {0xc0007eb000, 0x1000, 0x1000})
	/usr/local/go/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc0003b9700, {0xc0007eb000, 0x496806, 0x47674d})
	/usr/local/go/src/net/fd_posix.go:56 +0x29
net.(*conn).Read(0xc000864be0, {0xc0007eb000, 0x0, 0xc0007cba78})
	/usr/local/go/src/net/net.go:183 +0x45
net/http.(*connReader).Read(0xc0007cba70, {0xc0007eb000, 0x1000, 0x1000})
	/usr/local/go/src/net/http/server.go:780 +0x16d
bufio.(*Reader).fill(0xc000709c20)
	/usr/local/go/src/bufio/bufio.go:101 +0x103
bufio.(*Reader).Peek(0xc000709c20, 0x4)
	/usr/local/go/src/bufio/bufio.go:139 +0x5d
net/http.(*conn).readRequest(0xc000268d20, {0xc43e80, 0xc000779ac0})
	/usr/local/go/src/net/http/server.go:963 +0x1f8
net/http.(*conn).serve(0xc000268d20, {0xc43f28, 0xc00025ed80})
	/usr/local/go/src/net/http/server.go:1856 +0x865
created by net/http.(*Server).Serve
	/usr/local/go/src/net/http/server.go:3034 +0x4e8

goroutine 173104 [sync.Cond.Wait]:
sync.runtime_notifyListWait(0xc000283fd0, 0x3)
	/usr/local/go/src/runtime/sema.go:513 +0x13d
sync.(*Cond).Wait(0xc00000ffd8)
	/usr/local/go/src/sync/cond.go:56 +0x8c
net/http.(*connReader).abortPendingRead(0xc00076c900)
	/usr/local/go/src/net/http/server.go:720 +0xb5
net/http.(*response).finishRequest(0xc000734c40)
	/usr/local/go/src/net/http/server.go:1611 +0x87
net/http.(*conn).serve(0xc0001d6be0, {0xc43f28, 0xc00025ed80})
	/usr/local/go/src/net/http/server.go:1935 +0xb3f
created by net/http.(*Server).Serve
	/usr/local/go/src/net/http/server.go:3034 +0x4e8

goroutine 173040 [semacquire]:
sync.runtime_SemacquireMutex(0x0, 0x0, 0x0)
	/usr/local/go/src/runtime/sema.go:71 +0x25
sync.(*Mutex).lockSlow(0xc0002c836c)
	/usr/local/go/src/sync/mutex.go:138 +0x165
sync.(*Mutex).Lock(...)
	/usr/local/go/src/sync/mutex.go:81
github.com/streadway/amqp.(*Channel).Publish(0xc0002c8360, {0x0, 0x0}, {0xc0000d90e0, _}, _, _, {0x0, {0xc0001d40e0, 0x10}, ...})
	/go/pkg/mod/github.com/streadway/[email protected]/channel.go:1331 +0xb2
atomys.codes/webhooked/pkg/storage/rabbitmq.storage.Push({0xc0001f9800, 0xc00019d400, 0xc0002c8360, {{0xc0000d90e0, 0x13}, 0x0, 0x1}}, {0xa7f820, 0xc00055d530})
	/build/pkg/storage/rabbitmq/rabbitmq.go:95 +0x1cb
atomys.codes/webhooked/internal/server/v1alpha1.webhookService(0xc000270185, 0xc000087740, 0xc000733400)
	/build/internal/server/v1alpha1/handlers.go:122 +0x54e
atomys.codes/webhooked/internal/server/v1alpha1.(*Server).WebhookHandler.func1({0xc3ef20, 0xc00045c510}, 0xc000733400)
	/build/internal/server/v1alpha1/handlers.go:71 +0x218
net/http.HandlerFunc.ServeHTTP(0x0, {0xc3ef20, 0xc00045c510}, 0x74d6bd)
	/usr/local/go/src/net/http/server.go:2047 +0x2f
atomys.codes/webhooked/internal/server.prometheusMiddleware.func1({0xc3ef20, 0xc00045c4f8}, 0xc000733400)
	/build/internal/server/middlewares.go:51 +0xf2
net/http.HandlerFunc.ServeHTTP(0x7f8a20b647a8, {0xc3ef20, 0xc00045c4f8}, 0x7f8a478cc5b8)
	/usr/local/go/src/net/http/server.go:2047 +0x2f
atomys.codes/webhooked/internal/server.loggingMiddleware.func1({0xc3fdf0, 0xc0007348c0}, 0xc000733400)
	/build/internal/server/middlewares.go:73 +0xdd
net/http.HandlerFunc.ServeHTTP(0xc000733300, {0xc3fdf0, 0xc0007348c0}, 0xc0009f59f8)
	/usr/local/go/src/net/http/server.go:2047 +0x2f
github.com/gorilla/mux.(*Router).ServeHTTP(0xc000266000, {0xc3fdf0, 0xc0007348c0}, 0xc000733200)
	/go/pkg/mod/github.com/gorilla/[email protected]/mux.go:210 +0x1cf
net/http.serverHandler.ServeHTTP({0xc3e5e8}, {0xc3fdf0, 0xc0007348c0}, 0xc000733200)
	/usr/local/go/src/net/http/server.go:2879 +0x43b
net/http.(*conn).serve(0xc0001d6820, {0xc43f28, 0xc00025ed80})
	/usr/local/go/src/net/http/server.go:1930 +0xb08
created by net/http.(*Server).Serve
	/usr/local/go/src/net/http/server.go:3034 +0x4e8

goroutine 172953 [semacquire]:
sync.runtime_SemacquireMutex(0x0, 0x0, 0x0)
	/usr/local/go/src/runtime/sema.go:71 +0x25
sync.(*Mutex).lockSlow(0xc0002c836c)
	/usr/local/go/src/sync/mutex.go:138 +0x165
sync.(*Mutex).Lock(...)
	/usr/local/go/src/sync/mutex.go:81
github.com/streadway/amqp.(*Channel).Publish(0xc0002c8360, {0x0, 0x0}, {0xc0000d90e0, _}, _, _, {0x0, {0xc0001d40e0, 0x10}, ...})
	/go/pkg/mod/github.com/streadway/[email protected]/channel.go:1331 +0xb2
atomys.codes/webhooked/pkg/storage/rabbitmq.storage.Push({0xc0001f9800, 0xc00019d400, 0xc0002c8360, {{0xc0000d90e0, 0x13}, 0x0, 0x1}}, {0xa7f820, 0xc000c92250})
	/build/pkg/storage/rabbitmq/rabbitmq.go:95 +0x1cb
atomys.codes/webhooked/internal/server/v1alpha1.webhookService(0xc000270335, 0xc000087740, 0xc000733c00)
	/build/internal/server/v1alpha1/handlers.go:122 +0x54e
atomys.codes/webhooked/internal/server/v1alpha1.(*Server).WebhookHandler.func1({0xc3ef20, 0xc00045c8b8}, 0xc000733c00)
	/build/internal/server/v1alpha1/handlers.go:71 +0x218
net/http.HandlerFunc.ServeHTTP(0x0, {0xc3ef20, 0xc00045c8b8}, 0x74d6bd)
	/usr/local/go/src/net/http/server.go:2047 +0x2f
atomys.codes/webhooked/internal/server.prometheusMiddleware.func1({0xc3ef20, 0xc00045c8a0}, 0xc000733c00)
	/build/internal/server/middlewares.go:51 +0xf2
net/http.HandlerFunc.ServeHTTP(0x7f8a20b4bcc8, {0xc3ef20, 0xc00045c8a0}, 0x7f8a478cc5b8)
	/usr/local/go/src/net/http/server.go:2047 +0x2f
atomys.codes/webhooked/internal/server.loggingMiddleware.func1({0xc3fdf0, 0xc000734b60}, 0xc000733c00)
	/build/internal/server/middlewares.go:73 +0xdd
net/http.HandlerFunc.ServeHTTP(0xc000733b00, {0xc3fdf0, 0xc000734b60}, 0xc0008539f8)
	/usr/local/go/src/net/http/server.go:2047 +0x2f
github.com/gorilla/mux.(*Router).ServeHTTP(0xc000266000, {0xc3fdf0, 0xc000734b60}, 0xc000733a00)
	/go/pkg/mod/github.com/gorilla/[email protected]/mux.go:210 +0x1cf
net/http.serverHandler.ServeHTTP({0xc3e5e8}, {0xc3fdf0, 0xc000734b60}, 0xc000733a00)
	/usr/local/go/src/net/http/server.go:2879 +0x43b
net/http.(*conn).serve(0xc0001d6640, {0xc43f28, 0xc00025ed80})
	/usr/local/go/src/net/http/server.go:1930 +0xb08
created by net/http.(*Server).Serve
	/usr/local/go/src/net/http/server.go:3034 +0x4e8

goroutine 173980 [runnable]:
net/http.(*connReader).startBackgroundRead·dwrap·75()
	/usr/local/go/src/net/http/server.go:668
runtime.goexit()
	/usr/local/go/src/runtime/asm_amd64.s:1581 +0x1
created by net/http.(*connReader).startBackgroundRead
	/usr/local/go/src/net/http/server.go:668 +0xcf

goroutine 173041 [IO wait, 1 minutes]:
internal/poll.runtime_pollWait(0x7f8a20a5b0f8, 0x72)
	/usr/local/go/src/runtime/netpoll.go:303 +0x85
internal/poll.(*pollDesc).wait(0xc0008d5100, 0xc000a40000, 0x0)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc0008d5100, {0xc000a40000, 0x1000, 0x1000})
	/usr/local/go/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc0008d5100, {0xc000a40000, 0x496806, 0x47674d})
	/usr/local/go/src/net/fd_posix.go:56 +0x29
net.(*conn).Read(0xc00000fdc0, {0xc000a40000, 0x0, 0xc000a27b68})
	/usr/local/go/src/net/net.go:183 +0x45
net/http.(*connReader).Read(0xc000a27b60, {0xc000a40000, 0x1000, 0x1000})
	/usr/local/go/src/net/http/server.go:780 +0x16d
bufio.(*Reader).fill(0xc00064fb60)
	/usr/local/go/src/bufio/bufio.go:101 +0x103
bufio.(*Reader).Peek(0xc00064fb60, 0x4)
	/usr/local/go/src/bufio/bufio.go:139 +0x5d
net/http.(*conn).readRequest(0xc0001d68c0, {0xc43e80, 0xc000a0df00})
	/usr/local/go/src/net/http/server.go:963 +0x1f8
net/http.(*conn).serve(0xc0001d68c0, {0xc43f28, 0xc00025ed80})
	/usr/local/go/src/net/http/server.go:1856 +0x865
created by net/http.(*Server).Serve
	/usr/local/go/src/net/http/server.go:3034 +0x4e8

goroutine 172974 [IO wait, 1 minutes]:
internal/poll.runtime_pollWait(0x7f8a20a5b5a8, 0x72)
	/usr/local/go/src/runtime/netpoll.go:303 +0x85
internal/poll.(*pollDesc).wait(0xc0003b9880, 0xc000991000, 0x0)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc0003b9880, {0xc000991000, 0x1000, 0x1000})
	/usr/local/go/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc0003b9880, {0xc000991000, 0x496806, 0x47674d})
	/usr/local/go/src/net/fd_posix.go:56 +0x29
net.(*conn).Read(0xc000864bf8, {0xc000991000, 0x0, 0xc00098cc38})
	/usr/local/go/src/net/net.go:183 +0x45
net/http.(*connReader).Read(0xc00098cc30, {0xc000991000, 0x1000, 0x1000})
	/usr/local/go/src/net/http/server.go:780 +0x16d
bufio.(*Reader).fill(0xc000709f20)
	/usr/local/go/src/bufio/bufio.go:101 +0x103
bufio.(*Reader).Peek(0xc000709f20, 0x4)
	/usr/local/go/src/bufio/bufio.go:139 +0x5d
net/http.(*conn).readRequest(0xc000268fa0, {0xc43e80, 0xc00098e440})
	/usr/local/go/src/net/http/server.go:963 +0x1f8
net/http.(*conn).serve(0xc000268fa0, {0xc43f28, 0xc00025ed80})
	/usr/local/go/src/net/http/server.go:1856 +0x865
created by net/http.(*Server).Serve
	/usr/local/go/src/net/http/server.go:3034 +0x4e8

goroutine 172954 [IO wait]:
internal/poll.runtime_pollWait(0x7f8a20a5bd28, 0x72)
	/usr/local/go/src/runtime/netpoll.go:303 +0x85
internal/poll.(*pollDesc).wait(0xc0005aea00, 0xc000690000, 0x0)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc0005aea00, {0xc000690000, 0x1000, 0x1000})
	/usr/local/go/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc0005aea00, {0xc000690000, 0x496806, 0x47674d})
	/usr/local/go/src/net/fd_posix.go:56 +0x29
net.(*conn).Read(0xc00000fb58, {0xc000690000, 0x0, 0xc000655ec8})
	/usr/local/go/src/net/net.go:183 +0x45
net/http.(*connReader).Read(0xc000655ec0, {0xc000690000, 0x1000, 0x1000})
	/usr/local/go/src/net/http/server.go:780 +0x16d
bufio.(*Reader).fill(0xc000708480)
	/usr/local/go/src/bufio/bufio.go:101 +0x103
bufio.(*Reader).Peek(0xc000708480, 0x4)
	/usr/local/go/src/bufio/bufio.go:139 +0x5d
net/http.(*conn).readRequest(0xc0001d66e0, {0xc43e80, 0xc000587800})
	/usr/local/go/src/net/http/server.go:963 +0x1f8
net/http.(*conn).serve(0xc0001d66e0, {0xc43f28, 0xc00025ed80})
	/usr/local/go/src/net/http/server.go:1856 +0x865
created by net/http.(*Server).Serve
	/usr/local/go/src/net/http/server.go:3034 +0x4e8

goroutine 172973 [IO wait]:
internal/poll.runtime_pollWait(0x7f8a20c47988, 0x72)
	/usr/local/go/src/runtime/netpoll.go:303 +0x85
internal/poll.(*pollDesc).wait(0xc0003b9800, 0xc000981000, 0x0)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc0003b9800, {0xc000981000, 0x1000, 0x1000})
	/usr/local/go/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc0003b9800, {0xc000981000, 0x496806, 0x47674d})
	/usr/local/go/src/net/fd_posix.go:56 +0x29
net.(*conn).Read(0xc000864bf0, {0xc000981000, 0x0, 0xc00098c938})
	/usr/local/go/src/net/net.go:183 +0x45
net/http.(*connReader).Read(0xc00098c930, {0xc000981000, 0x1000, 0x1000})
	/usr/local/go/src/net/http/server.go:780 +0x16d
bufio.(*Reader).fill(0xc000709ec0)
	/usr/local/go/src/bufio/bufio.go:101 +0x103
bufio.(*Reader).Peek(0xc000709ec0, 0x4)
	/usr/local/go/src/bufio/bufio.go:139 +0x5d
net/http.(*conn).readRequest(0xc000268f00, {0xc43e80, 0xc00098e1c0})
	/usr/local/go/src/net/http/server.go:963 +0x1f8
net/http.(*conn).serve(0xc000268f00, {0xc43f28, 0xc00025ed80})
	/usr/local/go/src/net/http/server.go:1856 +0x865
created by net/http.(*Server).Serve
	/usr/local/go/src/net/http/server.go:3034 +0x4e8

goroutine 172995 [IO wait]:
internal/poll.runtime_pollWait(0x7f8a20a5b3c8, 0x72)
	/usr/local/go/src/runtime/netpoll.go:303 +0x85
internal/poll.(*pollDesc).wait(0xc0003b9b00, 0xc0001eb000, 0x0)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc0003b9b00, {0xc0001eb000, 0x1000, 0x1000})
	/usr/local/go/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc0003b9b00, {0xc0001eb000, 0x496806, 0x47674d})
	/usr/local/go/src/net/fd_posix.go:56 +0x29
net.(*conn).Read(0xc000864c20, {0xc0001eb000, 0x0, 0xc0007595f8})
	/usr/local/go/src/net/net.go:183 +0x45
net/http.(*connReader).Read(0xc0007595f0, {0xc0001eb000, 0x1000, 0x1000})
	/usr/local/go/src/net/http/server.go:780 +0x16d
bufio.(*Reader).fill(0xc0000868a0)
	/usr/local/go/src/bufio/bufio.go:101 +0x103
bufio.(*Reader).Peek(0xc0000868a0, 0x4)
	/usr/local/go/src/bufio/bufio.go:139 +0x5d
net/http.(*conn).readRequest(0xc0002692c0, {0xc43e80, 0xc00070bd40})
	/usr/local/go/src/net/http/server.go:963 +0x1f8
net/http.(*conn).serve(0xc0002692c0, {0xc43f28, 0xc00025ed80})
	/usr/local/go/src/net/http/server.go:1856 +0x865
created by net/http.(*Server).Serve
	/usr/local/go/src/net/http/server.go:3034 +0x4e8

goroutine 172972 [IO wait]:
internal/poll.runtime_pollWait(0x7f8a20a5bc38, 0x72)
	/usr/local/go/src/runtime/netpoll.go:303 +0x85
internal/poll.(*pollDesc).wait(0xc0003b9780, 0xc0007fb000, 0x0)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc0003b9780, {0xc0007fb000, 0x1000, 0x1000})
	/usr/local/go/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc0003b9780, {0xc0007fb000, 0x496806, 0x47674d})
	/usr/local/go/src/net/fd_posix.go:56 +0x29
net.(*conn).Read(0xc000864be8, {0xc0007fb000, 0x0, 0xc0007cbb08})
	/usr/local/go/src/net/net.go:183 +0x45
net/http.(*connReader).Read(0xc0007cbb00, {0xc0007fb000, 0x1000, 0x1000})
	/usr/local/go/src/net/http/server.go:780 +0x16d
bufio.(*Reader).fill(0xc000709c80)
	/usr/local/go/src/bufio/bufio.go:101 +0x103
bufio.(*Reader).Peek(0xc000709c80, 0x4)
	/usr/local/go/src/bufio/bufio.go:139 +0x5d
net/http.(*conn).readRequest(0xc000268e60, {0xc43e80, 0xc000779b80})
	/usr/local/go/src/net/http/server.go:963 +0x1f8
net/http.(*conn).serve(0xc000268e60, {0xc43f28, 0xc00025ed80})
	/usr/local/go/src/net/http/server.go:1856 +0x865
created by net/http.(*Server).Serve
	/usr/local/go/src/net/http/server.go:3034 +0x4e8

goroutine 173977 [IO wait]:
internal/poll.runtime_pollWait(0x7f8a20a5be18, 0x72)
	/usr/local/go/src/runtime/netpoll.go:303 +0x85
internal/poll.(*pollDesc).wait(0xc0001f7180, 0xc0006c9421, 0x0)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc0001f7180, {0xc0006c9421, 0x1, 0x1})
	/usr/local/go/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc0001f7180, {0xc0006c9421, 0x40537d, 0xc0004de060})
	/usr/local/go/src/net/fd_posix.go:56 +0x29
net.(*conn).Read(0xc00000eac0, {0xc0006c9421, 0xb9b288, 0xc000307fa0})
	/usr/local/go/src/net/net.go:183 +0x45
net/http.(*connReader).backgroundRead(0xc0006c9410)
	/usr/local/go/src/net/http/server.go:672 +0x3f
created by net/http.(*connReader).startBackgroundRead
	/usr/local/go/src/net/http/server.go:668 +0xcf

goroutine 173988 [IO wait]:
internal/poll.runtime_pollWait(0x7f8a20a5b1e8, 0x72)
	/usr/local/go/src/runtime/netpoll.go:303 +0x85
internal/poll.(*pollDesc).wait(0xc0008d5080, 0xc000a26d91, 0x0)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc0008d5080, {0xc000a26d91, 0x1, 0x1})
	/usr/local/go/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc0008d5080, {0xc000a26d91, 0x40537d, 0xc0009ec120})
	/usr/local/go/src/net/fd_posix.go:56 +0x29
net.(*conn).Read(0xc00000fdb8, {0xc000a26d91, 0xb9b288, 0xc0000147a0})
	/usr/local/go/src/net/net.go:183 +0x45
net/http.(*connReader).backgroundRead(0xc000a26d80)
	/usr/local/go/src/net/http/server.go:672 +0x3f
created by net/http.(*connReader).startBackgroundRead
	/usr/local/go/src/net/http/server.go:668 +0xcf

Version of software

0.5

Environment

Docker

Environment version

No response

Additional context

No response

Code of Conduct

  • I agree to follow this project's Code of Conduct

feat: Prometheus /metrics data exportation

Is your feature request related to a problem? Please describe.
No monitoring is actually available on Webhooked. To provide Webhooked production ready, we need a monitoring endpoint

Describe the solution you'd like
Actually, no data, logs or metrics is exposed about processing of webhook entries

Describe alternatives you've considered
I think create a Prometheus endpoints /metrics with prometheus go package to expose basic informations like req_counts, req_status, req_execution_time, webhook_entrypoint, webhook_kind, webhook_version, has_secure, storage_counts, storage_process_time, storage_kind, etc...

feat: customize the rabbitmq content-type

Is your feature request related to a problem? Please describe

Actually the data is sended to rabbitmq queue in text/plain. When we need to push a json or xml type, it's impossible

Describe the solution you'd like

add a configuration field to set the contentType of the payload

Describe alternatives you've considered

No response

Additional context

No response

Code of Conduct

  • I agree to follow this project's Code of Conduct

feat: Add possibility to load plugins to customize a storage solution

Is your feature request related to a problem? Please describe

Currently storages are interfaces that are included in the webhooked core. It is not possible to plug a homemade solution or a private storage into webhooked.

Describe the solution you'd like

Be able to use the go https://pkg.go.dev/plugin plugins to allow developers to create their own storage for private use or make their plugins public while requesting integration with webhooked core

Describe alternatives you've considered

No response

Additional context

No response

Code of Conduct

  • I agree to follow this project's Code of Conduct

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.