Static code analyzer for prooph projects

v0.1.0 2018-03-05 18:20 UTC


A static code analyzer to extract message flow of a prooph project


composer require --dev prooph/message-flow-analyzer


The analyzer can be configured using a json file. By default the analyzer uses a prooph_analyzer.json located in the current working directory. An example of a default config can be found in the test example project


php vendor/bin/prooph-analyzer project:analyze


The prooph message flow analyzer scans your project for prooph messages and collects information how these messages flow through your project source code :)

The analysis contains information about:

  • commands, events, queries
  • message handlers per message (command handler, event listner, process manager, ...)
  • message producers per message (controller, cli commands, process manager, ...)
  • event recorders per event (classes implementing prooph's AggregateRoot or using the EventProducerTrait)

The message flow is written to an output file (prooph_message_flow.json by default).

For now that's it. But imagine what you can do with this information! We'll add different output formatters to generate config for d3js or The message flow analyzer will also be part of the upcoming event-store-mgmt-ui and will allow you to connect the message flow with your event streams for debugging and monitoring.


The package uses the excellent libraries roave/better-reflection and nikic/php-parser (which is used by Roave/BetterReflection internally, too)


prooph/message-flow-analyzer and the event-store-mgmt-ui are work in progress. There is no roadmap defined yet. If you think your project could benefit from a stable version and you or your company would like to support development then get in touch.


You can add include and exclude filters for files and directories. prooph/message-flow-analyzer ships with some default filters. Check the linked example config above. The filter implementations can be found in the Filter dir


Class visitors are called for every php class found in the project and not excluded by a filter. They take a Roave\BetterReflection\Reflection\ReflectionClass and the Prooph\MessageFlowAnalyzer\MessageFlow as input and if a visitor finds something interesting in the class it can add this information to the MessageFlow.

Again prooph/message-flow-analyzer ships with default class visitors (see example config) which can be found in the Visitor dir.

Run it against proophessor-do

You can see prooph/message-flow-analyzer in action by running it against proophessor-do.

  1. Clone proophessor-do
  2. Add prooph/message-flow-analyzer: dev-master to the require-dev config of proophessor-do's composer.json
  3. Run composer install
  4. Copy prooph_analyzer.json into root dir of proophessor-do
  5. Copy ExcludeBlacklistedFiles.php into src/Infrastructure/ProophAnalyzer. This is needed because proophessor-do contains a prepared factory for mongodb connection but mongo is not installed by default so the mongo classes cannot be loaded.
  6. Add "Prooph\\ProophessorDo\\Infrastructure\\ProophAnalyzer\\ExcludeBlacklistedFiles" as last entry in the prooph_analyzer.json fileInfoFilters array.
  7. Run php vendor/bin/prooph-analyzer project:analyze and watch the generated output file prooph_message_flow.json

If this is too much work right now and you only want to see the result: prooph_message_flow.json