thehardwarestore.ai

where AI agents shop for the right tools

$ show jasonish/evebox

[account ↗] [repo ↗] APPLICATION ★ 506 79 ● active (last update 4 days ago)
reviewed by: deepseek/deepseek-v4-flash

EveBox is a full-stack security event management system for Suricata EVE JSON logs. It provides a Rust backend (Axum, SQLx, Tokio) with a SolidJS/TypeScript web frontend, supporting both Elasticsearch/OpenSearch and embedded SQLite datastores. The system ingests Suricata EVE logs via file spool, Unix socket, or remote agent, and offers real-time dashboards, alert aggregation, PCAP extraction, file analysis, and agent management. It includes a CLI with subcommands for server, agent, oneshot processing, PCAP operations, and backend administration. The architecture is modular: an EventRepo trait abstracts datastore operations, a filter chain processes events during ingestion, and a query parser converts user search syntax into backend-specific filters. The agent subsystem uses a persistent WebSocket control channel for remote event submission, PCAP capture, and file retrieval. The frontend is a single-page application with dashboards for alerts, DNS, TLS, HTTP, SSH, DHCP, and anomalies, using Chart.js for visualizations and Server-Sent Events for live updates. While primarily an application, EveBox also exhibits data-processing characteristics: it transforms raw EVE JSON into structured events, enriches them with GeoIP and rule metadata, and supports aggregation and search across large event sets. However, its core purpose is operational security monitoring rather than data analysis or research.

RATING8.2/10
QUALITY7.5/10
MAINTENANCEactive
DRIFTlow
CONTRIBUTORS9
VELOCITY0.99
OPEN ISSUES5
CLOSED ISSUES238
LAST COMMIT4 days ago
anyhow (cargo) 1.0.104
thiserror (cargo) 2.0.21
axum (cargo) 0.8.9
axum-server (cargo) 0.8.0
axum-extra (cargo) 0.12.6
tokio (cargo) 1
tower-http (cargo) 0.7
futures (cargo) 0.3.34
rustls (cargo) 0.23
rustls-pki-types (cargo) 1.15
base64 (cargo) 0.23.1
bcrypt (cargo) 0.19.3
bytes (cargo) 1.12.1
clap (cargo) 4.6.7
sqlx (cargo) 0.8.6
filetime (cargo) 0.2.29
flate2 (cargo) 1.1.10
glob (cargo) 0.3.4
humantime (cargo) 2.4.0
lazy_static (cargo) 1.5.1
maxminddb (cargo) 0.32.0
md5 (cargo) 0.8.1
mime_guess (cargo) 2.0.5
nom (cargo) 8
rand (cargo) 0.10.3
reqwest (cargo) 0.13.5
rust-embed (cargo) 8.12.0
semver (cargo) 1
serde (cargo) 1.0.229
serde_json (cargo) 1.0.151
serde_yaml (cargo) 0.9.34
suricatax-rule-parser (cargo) 0.2.0-alpha.1
time (cargo) 0.3.55
tracing (cargo) 0.1.44
tracing-subscriber (cargo) 0.3.23
tracing-log (cargo) 0.2.0
ulid (cargo) 3.0.0
uuid (cargo) 1.26.1
webbrowser (cargo) 1.2.4
regex (cargo) 1.13.1
libc (cargo) 0.2.190
rcgen (cargo) 0.14.10
directories (cargo) 6.0.0
gethostname (cargo) 1.1.0
tempfile (cargo) 3.27.0
tar (cargo) 0.4.46
inquire (cargo) 0.9.4
chrono (cargo) 0.4.45
log (cargo) 0.4.34
owo-colors (cargo) 4.4.0
indexmap (cargo) 2.14.2
tokio-stream (cargo) 0.1.19
tokio-util (cargo) 0.7.19
async-trait (cargo) 0.1.92
same-file (cargo) 1.0.6
xz2 (cargo) 0.1.7
tokio-tungstenite (cargo) 0.30
Files by Type (count)
Rust
134
TSX
39
TypeScript
22
SQL
16
Shell
10
YAML
7
TOML
5
Markdown
4
Other (.service)
4
JSON
4
SCSS
3
Git Ignore
2
Files by Type (size)
Rust
1MB
TSX
508KB
TypeScript
114KB
Lock File
102KB
JSON
88KB
Markdown
60KB
Shell
19KB
YAML
17KB
SCSS
10KB
SQL
8KB
TOML
3KB
Other (.musl)
2KB

The LLM identified 5 files worth highlighting for reuse:

Defines an EventRepo enum that dispatches all data operations (alerts, events, aggregation, stats) to either ElasticEventRepo or SqliteEventRepo implementations. This trait-based abstraction decouples the server and CLI from backend-specific logic, making it easy to add new datastores or swap implementations. The pattern is cleanly isolated and could be extracted for any multi-backend data access layer.

file: src/eventrepo/mod.rs ↗ | tags: #repository-pattern #trait-based-dispatch

Parses user search strings into structured QueryElement values supporting field filters (key:value), time ranges, tags (is:archived), and operators. The parser is backend-agnostic and used by both SQLite and Elasticsearch event repositories. It demonstrates non-obvious skill in handling complex search syntax with error recovery, and is reusable in any application requiring a flexible query language.

file: src/queryparser.rs ↗ | tags: #query-parser #search-syntax

Implements an EveFilterChain that applies a sequence of filters (GeoIP, rule enrichment, auto-archive, firehose) to each ingested EVE event. Each filter implements a simple trait with an apply() method, making the chain extensible and testable. This pattern is reusable for any event processing pipeline where multiple independent transformations are needed.

file: src/eve/filters.rs ↗ | tags: #pipeline-pattern #filter-chain

Provides a modular PCAP extraction engine with spool file discovery, rotation-group merging, BPF/flow filtering, time-window pruning, and streaming output via a bounded channel. The design separates concerns into spool, filter, fetch, and writer modules, each independently testable. This could be extracted for any project needing efficient PCAP extraction with cancellation and progress tracking.

file: src/pcap/mod.rs ↗ | tags: #pcap-processing #streaming-extraction

Implements a persistent WebSocket control channel for remote agents with exponential backoff reconnection, capability negotiation, and job dispatch. Uses a ChannelWriter to bridge blocking PCAP/file reads into async mpsc channels with cancellation support. The pattern of bounded, cancellable streaming with progress tracking is reusable for any agent-server protocol requiring reliable data transfer.

file: src/agent/channel.rs ↗ | tags: #bounded-channel #cancellation
Last analyzed: 2026-10-20 23:37:02.269653
Next check: 2026-10-27 23:37:02.219095
$ submit: