All good questions. I'm early enough in the cycle that I haven't made the decision on a lot of this stuff yet, but, here goes :
- External events will prob. be either via signals for occasional triggers, or using sockets for regular changes.
- Whether to iterate over all rules is really a performance issue. One option is a register of variable that would change per rule, so on a change, only those affected would need to be evaluated. I expect the eval loop to be so quick though that this won't be needed initially
- Picking up rules - There would be a set of startup rules. Some would need to be created dynamically. My ideal would be to parse non-Perl expressions and interpret them.
- Triggers on DB columns - I considered this, but don't want the business logic encoded in the DB. What would be ideal is for e.g. a new/changed row in a DB to trigger an external event to prompt the Watcher to reevaluate. The DB will be MySQL, not sure if this would be possible with callbacks. May need some homework.