diff --git a/src/output-json-alert.c b/src/output-json-alert.c index 91a55828a7a1..48672b98516d 100644 --- a/src/output-json-alert.c +++ b/src/output-json-alert.c @@ -778,28 +778,40 @@ static int AlertJson(ThreadVars *tv, JsonAlertLogThread *aft, const Packet *p) static int AlertJsonDecoderEvent(ThreadVars *tv, JsonAlertLogThread *aft, const Packet *p) { AlertJsonOutputCtx *json_output_ctx = aft->json_output_ctx; - char timebuf[64]; if (p->alerts.cnt == 0) return TM_ECODE_OK; - CreateIsoTimeString(p->ts, timebuf, sizeof(timebuf)); - for (int i = 0; i < p->alerts.cnt; i++) { const PacketAlert *pa = &p->alerts.alerts[i]; if (unlikely(pa->s == NULL)) { continue; } - JsonBuilder *jb = jb_new_object(); - if (unlikely(jb == NULL)) { + JsonBuilder *jb = + CreateEveHeader(p, LOG_DIR_PACKET, "alert", NULL, json_output_ctx->eve_ctx); + if (unlikely(jb == NULL)) return TM_ECODE_OK; + + AlertJsonHeader(p, pa, jb, json_output_ctx->flags, NULL, NULL); + + if (PacketIsTunnel(p)) { + AlertJsonTunnel(p, jb); } - /* just the timestamp, no tuple */ - jb_set_string(jb, "timestamp", timebuf); + /* base64-encoded full packet */ + if (json_output_ctx->flags & LOG_JSON_PACKET) { + EvePacket(p, jb, 0); + } - AlertJsonHeader(p, pa, jb, json_output_ctx->flags, NULL, NULL); + char *pcap_filename = PcapLogGetFilename(); + if (pcap_filename != NULL) { + jb_set_string(jb, "capture_file", pcap_filename); + } + + if (json_output_ctx->flags & LOG_JSON_VERDICT) { + EveAddVerdict(jb, p); + } OutputJsonBuilderBuffer(tv, p, p->flow, jb, aft->ctx); jb_free(jb);