X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lib%2Fcoverage.c;h=cdc796ec3e661b63a69519a1cd89437c8f21b4e5;hb=0a6d2aa6732dbf15686149a7cccf6ae71e3749c9;hp=eaa441c0db905665da332b3c38c1d9f4f9c27597;hpb=34e63086edddcae06d7c1a4fa84fec0861e50758;p=sliver-openvswitch.git diff --git a/lib/coverage.c b/lib/coverage.c index eaa441c0d..cdc796ec3 100644 --- a/lib/coverage.c +++ b/lib/coverage.c @@ -21,6 +21,7 @@ #include "coverage-counters.h" #include "dynamic-string.h" #include "hash.h" +#include "unixctl.h" #include "util.h" #define THIS_MODULE VLM_coverage @@ -28,6 +29,19 @@ static unsigned int epoch; +static void +coverage_unixctl_log(struct unixctl_conn *conn, const char *args UNUSED) +{ + coverage_log(VLL_WARN, false); + unixctl_command_reply(conn, 200, NULL); +} + +void +coverage_init(void) +{ + unixctl_command_register("coverage/log", coverage_unixctl_log); +} + /* Sorts coverage counters in descending order by count, within equal counts * alphabetically by name. */ static int @@ -107,9 +121,13 @@ coverage_log_counter(enum vlog_level level, const struct coverage_counter *c) VLOG(level, "%-24s %5u / %9llu", c->name, c->count, c->count + c->total); } -/* Logs the coverage counters at the given vlog 'level'. */ +/* Logs the coverage counters at the given vlog 'level'. If + * 'suppress_dups' is true, then duplicate events are not displayed. + * Care should be taken in the value used for 'level'. Depending on the + * configuration, syslog can write changes synchronously, which can + * cause the coverage messages to take several seconds to write. */ void -coverage_log(enum vlog_level level) +coverage_log(enum vlog_level level, bool suppress_dups) { size_t n_never_hit; uint32_t hash; @@ -120,10 +138,12 @@ coverage_log(enum vlog_level level) } hash = coverage_hash(); - if (coverage_hit(hash)) { - VLOG(level, "Skipping details of duplicate event coverage for " - "hash=%08"PRIx32" in epoch %u", hash, epoch); - return; + if (suppress_dups) { + if (coverage_hit(hash)) { + VLOG(level, "Skipping details of duplicate event coverage for " + "hash=%08"PRIx32" in epoch %u", hash, epoch); + return; + } } n_never_hit = 0;