The question here is whether something like this already exists or, if not, whether there's a better way to achieve it than what I describe below.
I need to allow an arbitrary Principal (User, Group, Site Admin) to add Event Sinks (like email addresses, Webhook URLs, etc.) to the system (through the web interface) and, for each one, specify which kinds of <Event Source, Event Type> should be sent to it. Since I'm doing this for ReviewBoard, I'll give a concrete example with a hypothetical implementation:
- John creates a new
event_sink(a webhook), identified bypostbin1; - John specifies that
postbin1will receive events of typepublishonReviewRequests (a class-levelsubscription-- thesource_idis unspecified); - When a new
review_requestis created, theEvent Manager, lists (through a JOIN withsubscriptions) allevent_sinksinterested inReviewRequests and creates a (instance-level)subscriptionbinding them as a listener to their particularevent_type(the name of a django signal) of interest and to the specificreview_request; - When that
review_requestgets published, theEvent Manager(who listens to thepublishsignal) lists allevent_sinksinterested in thatreview_requestinstance and thepublishsignal and dispatches the signal parameters to theirsinkmethod. - The Webhook
event_sinkmarshals the data however pleases it and POSTs it to its URL.
This is the schema I thought of: alt text http://bayimg.com/image/aadgoaacd.jpg
I'm about to start implementing this myself, but I just want to make sure I'm not reinventing the wheel. Couldn't find anything on Google. Ready-to-use package names, half-way package names that will help me, and/or criticism to my DIY approach are all welcome.