Skip to content
vanstyn edited this page Feb 22, 2013 · 6 revisions

Brainstorming integrating DBIx::Class::AuditAny with DBIx::Class::Shadow ...

Rationale

Any module or application that needs to perform passive monitoring of DBIC has to solve the same basic set of problems. They need to hook into DBIC internals in the right places to intercept the data, and then structure/normalize it into a useful format. This can get hairy, especially covering all the edge-cases while properly interpreting relationships, primary key configurations, rekeys, cascades and so on. AuditAny aims to solve all these problems by providing ...

Shadow Collector Requirements/TODO

  • Generalize/abstract Shadow's logic out of inline subs
  • Can all of the data Shadow currently collects be defined in terms of Datapoints? If yes, which datapoints are already built-in and which would need to be created as new/custom datapoints? What are these?
  • Reconcile collection side logic with AuditAny. For example, Shadow walks relationships to find any that are "unshadowed". What are the specifics of this? Can this be handled correctly through the Datapoints API paradigm or will additional functionality be needed?
  • How to handle the front-end/query interfaces provided by Shadow?
  • Make Shadow work with an object API or make AuditAny work with a class API? (See API page)
  • changeset_do? Add this as a feature to AuditAny, and make automatic tracking on all txn_do calls optional/configurable
  • What other front-end interfaces are needed along the same lines as changeset_do?

General Shadow Questions

  • Where does Shadow hook to catch changes made on ResultSets?
  • Is DBIx::Class::Relationship::Cascade::Rekey meant to actually emulate rekey cascades? (i.e. if the RDBMS isn't doing it automatically?)
  • DBICTest::S::BaseResult method overrides: New attrs are 'is_foreign' and 'cascade_rekey', correct? It appears that all 'multi' rels get { is_foreign => 0, cascade_rekey => 1 } while all 'single' rels get { is_foreign => 1 } ... so can't this info just be implied? Is the only purpose of the new attrs to allow for override (which no one will be doing yet because they don't exist yet)?
Clone this wiki locally