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});
|
||||
}
|
||||
|
|
10
src/net.c
10
src/net.c
|
@ -301,7 +301,7 @@ int main_loop(void)
|
|||
{
|
||||
struct timeval tv;
|
||||
int r;
|
||||
time_t last_ping_check, last_config_check, last_graph_dump;
|
||||
time_t last_ping_check, last_config_check;
|
||||
tevent_t *event;
|
||||
struct event timeout;
|
||||
|
||||
|
@ -309,7 +309,6 @@ int main_loop(void)
|
|||
|
||||
last_ping_check = now;
|
||||
last_config_check = now;
|
||||
last_graph_dump = now;
|
||||
|
||||
srand(now);
|
||||
|
||||
|
@ -431,13 +430,6 @@ int main_loop(void)
|
|||
|
||||
try_outgoing_connections();
|
||||
}
|
||||
|
||||
/* Dump graph if wanted every 60 seconds*/
|
||||
|
||||
if(last_graph_dump + 60 < now) {
|
||||
dump_graph();
|
||||
last_graph_dump = now;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
Loading…
Reference in a new issue