extern const char *const pat_match_names[PAT_MATCH_NUM];
extern int const pat_match_types[PAT_MATCH_NUM];
+extern unsigned long long patterns_added;
+extern unsigned long long patterns_freed;
+
extern int (*const pat_parse_fcts[PAT_MATCH_NUM])(const char *, struct pattern *, int, char **);
extern int (*const pat_index_fcts[PAT_MATCH_NUM])(struct pattern_expr *, struct pattern *, char **);
extern void (*const pat_prune_fcts[PAT_MATCH_NUM])(struct pattern_expr *);
static THREAD_LOCAL struct lru64_head *pat_lru_tree;
static unsigned long long pat_lru_seed __read_mostly;
+unsigned long long patterns_added = 0;
+unsigned long long patterns_freed = 0;
+
/*
*
* The following functions are not exported and are used by internals process
ebmb_delete(&elt->node);
free(elt->sample);
free(elt);
+ HA_ATOMIC_INC(&patterns_freed);
}
/* This function removes the pattern matching the pointer <refelt> from
/* Even if calloc()'ed, ensure this node is not linked to a tree. */
elt->node.node.leaf_p = NULL;
ebst_insert(&ref->ebmb_root, &elt->node);
+ HA_ATOMIC_INC(&patterns_added);
return elt;
fail:
free(elt);
ebmb_delete(&elt->node);
free(elt->sample);
free(elt);
+ HA_ATOMIC_INC(&patterns_freed);
}
list_for_each_entry(expr, &ref->pat, list)
#include <haproxy/listener.h>
#include <haproxy/log.h>
#include <haproxy/map-t.h>
-#include <haproxy/pattern-t.h>
+#include <haproxy/pattern.h>
#include <haproxy/pipe.h>
#include <haproxy/pool.h>
#include <haproxy/proxy.h>
[ST_I_INF_CURR_STRM] = { .name = "CurrStreams", .alt_name = NULL, .desc = "Current number of streams on this worker process" },
[ST_I_INF_CUM_STRM] = { .name = "CumStreams", .alt_name = NULL, .desc = "Total number of streams created on this worker process since started" },
[ST_I_INF_WARN_BLOCKED] = { .name = "BlockedTrafficWarnings", .alt_name = NULL, .desc = "Total number of warnings issued about traffic being blocked by too slow a task" },
+ [ST_I_INF_PATTERNS_ADDED] = { .name = "PatternsAdded", .alt_name = "patterns_added_total", .desc = "Total number of patterns added (acl/map entries)" },
+ [ST_I_INF_PATTERNS_FREED] = { .name = "PatternsFreed", .alt_name = "patterns_freed_total", .desc = "Total number of patterns freed (acl/map entries)" },
};
/* one line of info */
line[ST_I_INF_CURR_STRM] = mkf_u64(0, glob_curr_strms);
line[ST_I_INF_CUM_STRM] = mkf_u64(0, glob_cum_strms);
line[ST_I_INF_WARN_BLOCKED] = mkf_u32(0, warn_blocked_issued);
+ line[ST_I_INF_PATTERNS_ADDED] = mkf_u64(0, patterns_added);
+ line[ST_I_INF_PATTERNS_FREED] = mkf_u64(0, patterns_freed);
return 1;
}