Use libevent to dump graphs when necessary.
event_add() can be called repeatedly, the second and later calls are ignored if the event hasn't been removed yet.
This commit is contained in:
parent
0f6f54ff8a
commit
4d0621b1f3
2 changed files with 15 additions and 24 deletions
29
src/graph.c
29
src/graph.c
|
|
@ -58,8 +58,6 @@
|
|||
#include "subnet.h"
|
||||
#include "utils.h"
|
||||
|
||||
static bool graph_changed = true;
|
||||
|
||||
/* Implementation of Kruskal's algorithm.
|
||||
Running time: O(EN)
|
||||
Please note that sorting on weight is already done by add_edge().
|
||||
|
|
@ -311,22 +309,13 @@ void sssp_bfs(void)
|
|||
}
|
||||
}
|
||||
|
||||
void graph(void)
|
||||
{
|
||||
sssp_bfs();
|
||||
mst_kruskal();
|
||||
graph_changed = true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Dump nodes and edges to a graphviz file.
|
||||
|
||||
The file can be converted to an image with
|
||||
dot -Tpng graph_filename -o image_filename.png -Gconcentrate=true
|
||||
*/
|
||||
|
||||
void dump_graph(void)
|
||||
static void dump_graph(int fd, short events, void *data)
|
||||
{
|
||||
avl_node_t *node;
|
||||
node_t *n;
|
||||
|
|
@ -334,11 +323,9 @@ void dump_graph(void)
|
|||
char *filename = NULL, *tmpname = NULL;
|
||||
FILE *file;
|
||||
|
||||
if(!graph_changed || !get_config_string(lookup_config(config_tree, "GraphDumpFile"), &filename))
|
||||
if(!get_config_string(lookup_config(config_tree, "GraphDumpFile"), &filename))
|
||||
return;
|
||||
|
||||
graph_changed = false;
|
||||
|
||||
ifdebug(PROTOCOL) logger(LOG_NOTICE, "Dumping graph");
|
||||
|
||||
if(filename[0] == '|') {
|
||||
|
|
@ -381,3 +368,15 @@ void dump_graph(void)
|
|||
free(tmpname);
|
||||
}
|
||||
}
|
||||
|
||||
void graph(void)
|
||||
{
|
||||
static struct event ev;
|
||||
|
||||
sssp_bfs();
|
||||
mst_kruskal();
|
||||
|
||||
if(!ev.ev_callback)
|
||||
timeout_set(&ev, dump_graph, NULL);
|
||||
event_add(&ev, &(struct timeval){5, 0});
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue