}
#ifdef HAVE_LIBJANSSON
-json_t *RulesGroupPrintSghStats(const SigGroupHead *sgh)
+json_t *RulesGroupPrintSghStats(const SigGroupHead *sgh,
+ const int add_rules, const int add_mpm_stats)
{
uint32_t mpm_cnt = 0;
uint32_t nonmpm_cnt = 0;
s = sgh->match_array[x];
if (s == NULL)
continue;
-#if 0
- json_t *js_sig = json_object();
- if (unlikely(js == NULL))
- continue;
- json_object_set_new(js_sig, "sig_id", json_integer(s->id));
-#endif
+
int any = 0;
if (s->proto.flags & DETECT_PROTO_ANY) {
any++;
if (s->alproto != ALPROTO_UNKNOWN) {
alstats[s->alproto]++;
}
-// json_array_append_new(js_array, js_sig);
+
+ if (add_rules) {
+ json_t *js_sig = json_object();
+ if (unlikely(js == NULL))
+ continue;
+ json_object_set_new(js_sig, "sig_id", json_integer(s->id));
+ json_array_append_new(js_array, js_sig);
+ }
}
json_object_set_new(js, "rules", js_array);
}
}
- json_t *mpm_js = json_object();
+ if (add_mpm_stats) {
+ json_t *mpm_js = json_object();
- for (i = 0; i < DETECT_SM_LIST_MAX; i++) {
- if (mpm_stats[i].cnt > 0) {
+ for (i = 0; i < DETECT_SM_LIST_MAX; i++) {
+ if (mpm_stats[i].cnt > 0) {
- json_t *mpm_sizes_array = json_array();
- for (x = 0; x < 256; x++) {
- if (mpm_sizes[i][x] == 0)
- continue;
+ json_t *mpm_sizes_array = json_array();
+ for (x = 0; x < 256; x++) {
+ if (mpm_sizes[i][x] == 0)
+ continue;
- json_t *e = json_object();
- json_object_set_new(e, "size", json_integer(x));
- json_object_set_new(e, "count", json_integer(mpm_sizes[i][x]));
- json_array_append_new(mpm_sizes_array, e);
- }
+ json_t *e = json_object();
+ json_object_set_new(e, "size", json_integer(x));
+ json_object_set_new(e, "count", json_integer(mpm_sizes[i][x]));
+ json_array_append_new(mpm_sizes_array, e);
+ }
- json_t *buf = json_object();
- json_object_set_new(buf, "total", json_integer(mpm_stats[i].cnt));
- json_object_set_new(buf, "avg_strength", json_integer(mpm_stats[i].total / mpm_stats[i].cnt));
- json_object_set_new(buf, "min_strength", json_integer(mpm_stats[i].min));
- json_object_set_new(buf, "max_strength", json_integer(mpm_stats[i].max));
+ json_t *buf = json_object();
+ json_object_set_new(buf, "total", json_integer(mpm_stats[i].cnt));
+ json_object_set_new(buf, "avg_strength", json_integer(mpm_stats[i].total / mpm_stats[i].cnt));
+ json_object_set_new(buf, "min_strength", json_integer(mpm_stats[i].min));
+ json_object_set_new(buf, "max_strength", json_integer(mpm_stats[i].max));
- json_object_set_new(buf, "sizes", mpm_sizes_array);
+ json_object_set_new(buf, "sizes", mpm_sizes_array);
- json_object_set_new(mpm_js, DetectListToHumanString(i), buf);
+ json_object_set_new(mpm_js, DetectListToHumanString(i), buf);
+ }
}
- }
- json_object_set_new(stats, "mpm", mpm_js);
+ json_object_set_new(stats, "mpm", mpm_js);
+ }
json_object_set_new(js, "stats", stats);
json_object_set_new(js, "whitelist", json_integer(sgh->init->whitelist));
}
#endif /* HAVE_LIBJANSSON */
-void RulesDumpGrouping(const DetectEngineCtx *de_ctx)
+void RulesDumpGrouping(const DetectEngineCtx *de_ctx,
+ const int add_rules, const int add_mpm_stats)
{
#ifdef HAVE_LIBJANSSON
json_t *js = json_object();
json_object_set_new(port, "port", json_integer(list->port));
json_object_set_new(port, "port2", json_integer(list->port2));
- json_t *tcp_ts = RulesGroupPrintSghStats(list->sh);
+ json_t *tcp_ts = RulesGroupPrintSghStats(list->sh,
+ add_rules, add_mpm_stats);
json_object_set_new(port, "rulegroup", tcp_ts);
json_array_append_new(ts_array, port);
json_object_set_new(port, "port", json_integer(list->port));
json_object_set_new(port, "port2", json_integer(list->port2));
- json_t *tcp_tc = RulesGroupPrintSghStats(list->sh);
+ json_t *tcp_tc = RulesGroupPrintSghStats(list->sh,
+ add_rules, add_mpm_stats);
json_object_set_new(port, "rulegroup", tcp_tc);
json_array_append_new(tc_array, port);
* after the initialization phase. */
SigGroupHeadHashFree(de_ctx);
- RulesDumpGrouping(de_ctx);
+ int dump_grouping = 0;
+ (void)ConfGetBool("detect.profiling.grouping.dump-to-disk", &dump_grouping);
+
+ if (dump_grouping) {
+ int add_rules = 0;
+ (void)ConfGetBool("detect.profiling.grouping.include-rules", &add_rules);
+ int add_mpm_stats = 0;
+ (void)ConfGetBool("detect.profiling.grouping.include-mpm-stats", &add_rules);
+
+ RulesDumpGrouping(de_ctx, add_rules, add_mpm_stats);
+ }
#ifdef PROFILING
SCProfilingSghInitCounters(de_ctx);