static const char progname[] = "varnishtop"; static float period = 60; /* seconds */ static int end_of_file = 0; struct top { uint8_t tag; const char *rec_data; char *rec_buf; int clen; unsigned hash; VRB_ENTRY(top) e_order; VRB_ENTRY(top) e_key; double count; }; static VRB_HEAD(t_order, top) h_order = VRB_INITIALIZER(&h_order); static VRB_HEAD(t_key, top) h_key = VRB_INITIALIZER(&h_key); static inline int cmp_key(const struct top *a, const struct top *b) { if (a->hash != b->hash) return (a->hash - b->hash); if (a->tag != b->tag) return (a->tag - b->tag); if (a->clen != b->clen) return (a->clen - b->clen); return (memcmp(a->rec_data, b->rec_data, a->clen)); } static inline int
static float period = 60; /* seconds */ static int end_of_file = 0; struct top { uint8_t tag; char *rec_data; int clen; unsigned hash; VRB_ENTRY(top) entry; double count; }; static int top_cmp(const struct top *tp, const struct top *tp2); static VRB_HEAD(top_tree, top) top_tree_head = VRB_INITIALIZER(&top_tree_head); VRB_PROTOTYPE(top_tree, top, entry, top_cmp); static unsigned ntop; /*--------------------------------------------------------------------*/ static pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER; static int f_flag = 0; static unsigned maxfieldlen = 0; VRB_GENERATE(top_tree, top, entry, top_cmp); static int