In NH Prof, I have structured the application around the idea of message passing. I am not yet in the erlang world (which requires a framework that would keep hold of the state), but I am nearer than before.
The back end of the profiler is listening to the event streams generated by NHibernate. We get things like:
- Session opened on thread #1
- SQL Executed on thread #1
- SELECT * FROM Customers
- Session closed on thread #1
I am taking that and turning it into something that is more easily understandable.
Now, as you can imagine, order is pretty important here.
Currently I am dealing with this by assuming order in the stream, and ensuring that the bus will dispatch messages in order (and that recursive message dispatch is handled in place). This works, but I don't think that I like it much. Especially in light of the previous problem that I outlined.
Another option would be to avoid the order assumption, and use the timestamp in order to reorder the stream. That might be a challenge to solve, though.