shell-operator icon indicating copy to clipboard operation
shell-operator copied to clipboard

Add support for HTTP events a.k.a. webhooks

Open redbaron opened this issue 1 year ago • 3 comments

shell-operator is great tool to run small (or large) script snippets in response to events. Current event list is:

  • kubernetes watches
  • scheduled execution (cron)

I propose to add support for HTTP request events. Hooks can declare interest in HTTP request and will be called when matched request arrives. With this change binding context will have new key with HTTP request details (url, body, headers) and hook can optionally produce HTTP response by writing JSON into special path.

Upon startup hooks declare interest in certain incoming requests with jqFilter (for instance they can match on body or URL) similar to how they now subscribe to kubernetes watches. Config should also declare whether shell-operator waits for hook to produce response or preconfigured response can be returned immediately.

There are other projects in this space, like https://github.com/adnanh/webhook, but they lack k8s integration shell-operator provides and frankly don't look as ergonomic as shell-operator.

redbaron avatar Jul 29 '24 08:07 redbaron

@redbaron excellent idea! Are you ready to implement it by yourself?

raabdullaev avatar Aug 07 '24 11:08 raabdullaev

Looking at webhooks implementation I can see that handler is not added to queue . I'd prefer for HTTP event sources to be queued , is t OK with you?

If queued and hook is configured to provide direct response, what would be behaviour on timeout? remove hook from queue? what if it is already running?

redbaron avatar Aug 07 '24 13:08 redbaron

@redbaron timeout and queue - ok what if it is already running - wait

raabdullaev avatar Nov 20 '24 11:11 raabdullaev