Главная »
2015 » Сентябрь » 14 » Graph visualization in DOT / Визуализация графов в языке DOT
09:49 Graph visualization in DOT / Визуализация графов в языке DOT |
The English version of the post is below.Предыстория. Мы обрабатываем финансовые транзакции. Возникла задача профилирования. Решили записать путь прохода транзакции по системе и построить граф связей между модулями - кто кого вызывает. Два способа построения: на основе статического анализа исходников и через трассировку реальных вызовов во время выполнения.Итак, связи зафиксированы. Теперь их надо их как-то представить и построить граф, визуально.Вроде не самая тривиальная задача, но оказывается, решается весьма просто.Есть такой язык представления графов, называется DOT. Прелесть его в предельной простоте. Например, простейший граф:graph name { a -- b b -- c b -- d}Натравливаешь на это дело специальную программу и получаешь:Все! Картинка на выходе в SVG. Можно хоть на стену вешать.К сожалению, лучший софт, что я нашел для визуализации DOT - это Graphviz. Вроде и работает неплохо, строя весьма большие графы, и есть на всех платформах, благодаря Java, но по интерфейсу - это запредельный и неописуемый кусок говна. Увы.Если кому интересно, я выложил пример реальной трассировки (по понятным причинам, имена изменены). В целом дает представление о простоте исходника и о возможностях визуализации - PNG и SVG.Повторюсь - процесс формализации графа крайне прост - нужно только задать пары связанных вершин. Можно делать направленные графы, можно задавать вершинам и дугам разные атрибуты.В целом, отличная технология.Background. We do financial transactions processing. At some point we decided that we need profiling. We could record a path of how a transaction being passed amongst modules. There are two options - either to do static analysis or to trace the runtime.So, the connections are determined and now we have to formalize and visualize them.At the first glance this is not an easy task, but it turned out there is a simple and elegant solution.There is a plain text language to declare graphs -- DOT. Its beauty is in ultimate simplicity. For example, a trivial graph:graph name { a -- b b -- c b -- d}Feed it to special software and get this:That's it! The output is in SVG, ready to stick on a wall.Unfortunately, the best software I've found to visualize DOT is Graphviz. It does pretty decent job properly processing quite sophisticated graphs, but in terms of user experience it is shite.If anyone is interested, I've uploaded a real trace (obviously, names are obfuscated). It gives an idea about simplicity of the source and visualization capabilities - PNG and SVG.Again, the graph formalization is dead simple - you only need to specify pairs of connected vertices. Also, in DOT you can describe directed graphs and extra attributes of the vertices.To sum up, great technology.
|
Просмотров: 431 |
Добавил: admin
| Рейтинг: 0.0/0 |