# cristianism0/cassandra architecture

> Architecture diagram of the GitHub repository cristianism0/cassandra, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/cristianism0/cassandra
- Repository: https://github.com/cristianism0/cassandra

## Overview

Cassandra is a Linux log-reading CLI: users choose a source and options, then receive filtered and formatted log records. The map covers source discovery, text and binary log parsing, systemd journal access, shared record types, time handling, and display modes. README documents filtering and output capabilities; the sampled excerpts do not show the CLI’s internal orchestration, so those links are limited to documented responsibilities and evident module boundaries.

Main entry points: [`src/models.rs`](https://github.com/cristianism0/cassandra/blob/master/src/models.rs) (Entry types), [`src/cli.rs`](https://github.com/cristianism0/cassandra/blob/master/src/cli.rs) (CLI workflow), [`src/parsers/selector.rs`](https://github.com/cristianism0/cassandra/blob/master/src/parsers/selector.rs) (Parser dispatch), [`src/parsers/sys.rs`](https://github.com/cristianism0/cassandra/blob/master/src/parsers/sys.rs) (Syslog parser)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["CLI entry"]
  node_main["Program entry<br/>[main.rs]"]
  node_cli["CLI workflow<br/>[cli.rs]"]
end

subgraph group_sources["Log sources"]
  node_discovery["Path discovery<br/>[discovery.rs]"]
  node_selector["Parser dispatch<br/>[selector.rs]"]
  node_sysparse["Syslog parser<br/>[sys.rs]"]
  node_authparse["Auth parser<br/>[auth.rs]"]
  node_wtmpparse["Wtmp parser<br/>[wtmp.rs]"]
  node_journalparse["Journal parser<br/>[journal.rs]"]
end

subgraph group_records["Records and filters"]
  node_models["Entry types<br/>[models.rs]"]
  node_sysrecord["Sys records<br/>[sys.rs]"]
  node_authrecord["Auth records<br/>[auth.rs]"]
  node_journalrecord["Journal records<br/>[journal.rs]"]
  node_wtmptypes["Wtmp records<br/>[wtmp.rs]"]
  node_time["Time parsing<br/>[time.rs]"]
end

subgraph group_output["Output"]
  node_table["Table rendering<br/>[table_cli.rs]"]
  node_pager["Pager output<br/>[pager.rs]"]
  node_display["Display modes<br/>[display.rs]"]
end

node_user(("User"))
node_filesystem["Log files"]
node_journald[("systemd journal")]

node_user -->|"runs"| node_main
node_main -->|"starts CLI"| node_cli
node_cli -->|"finds sources"| node_discovery
node_discovery -->|"checks paths"| node_filesystem
node_cli -->|"selects parser"| node_selector
node_selector -->|"dispatches"| node_sysparse
node_selector -->|"dispatches"| node_authparse
node_selector -->|"dispatches"| node_wtmpparse
node_selector -->|"dispatches"| node_journalparse
node_sysparse -->|"reads"| node_filesystem
node_authparse -->|"reads"| node_filesystem
node_wtmpparse -->|"reads"| node_filesystem
node_journalparse -->|"reads entries"| node_journald
node_sysparse -->|"creates entries"| node_models
node_authparse -->|"creates entries"| node_models
node_wtmpparse -->|"creates entries"| node_models
node_journalparse -->|"creates entries"| node_models
node_models -->|"includes"| node_sysrecord
node_models -->|"includes"| node_authrecord
node_models -->|"includes"| node_journalrecord
node_models -->|"includes"| node_wtmptypes
node_cli -->|"parses time filters"| node_time
node_cli -->|"renders entries"| node_table
node_cli -->|"selects mode"| node_display
node_display -->|"formats output"| node_table
node_cli -->|"pages output"| node_pager

click node_main "https://github.com/cristianism0/cassandra/blob/master/src/main.rs"
click node_cli "https://github.com/cristianism0/cassandra/blob/master/src/cli.rs"
click node_discovery "https://github.com/cristianism0/cassandra/blob/master/src/utils/discovery.rs"
click node_selector "https://github.com/cristianism0/cassandra/blob/master/src/parsers/selector.rs"
click node_sysparse "https://github.com/cristianism0/cassandra/blob/master/src/parsers/sys.rs"
click node_authparse "https://github.com/cristianism0/cassandra/blob/master/src/parsers/auth.rs"
click node_wtmpparse "https://github.com/cristianism0/cassandra/blob/master/src/parsers/wtmp.rs"
click node_journalparse "https://github.com/cristianism0/cassandra/blob/master/src/parsers/journal.rs"
click node_models "https://github.com/cristianism0/cassandra/blob/master/src/models.rs"
click node_sysrecord "https://github.com/cristianism0/cassandra/blob/master/src/models/sys.rs"
click node_authrecord "https://github.com/cristianism0/cassandra/blob/master/src/models/auth.rs"
click node_journalrecord "https://github.com/cristianism0/cassandra/blob/master/src/models/journal.rs"
click node_wtmptypes "https://github.com/cristianism0/cassandra/blob/master/src/models/wtmp.rs"
click node_time "https://github.com/cristianism0/cassandra/blob/master/src/utils/time.rs"
click node_table "https://github.com/cristianism0/cassandra/blob/master/src/display/table_cli.rs"
click node_pager "https://github.com/cristianism0/cassandra/blob/master/src/display/pager.rs"
click node_display "https://github.com/cristianism0/cassandra/blob/master/src/display.rs"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_main,node_cli,node_user toneBlue
class node_discovery,node_selector,node_sysparse,node_authparse,node_wtmpparse,node_journalparse,node_journald toneAmber
class node_models,node_sysrecord,node_authrecord,node_journalrecord,node_wtmptypes,node_time toneMint
class node_table,node_pager,node_display toneRose
class node_filesystem toneIndigo
```

## Components

### CLI entry

- [Program entry](https://github.com/cristianism0/cassandra/blob/master/src/main.rs): `src/main.rs`
- [CLI workflow](https://github.com/cristianism0/cassandra/blob/master/src/cli.rs): `src/cli.rs`

### Log sources

- [Path discovery](https://github.com/cristianism0/cassandra/blob/master/src/utils/discovery.rs): `src/utils/discovery.rs`
- [Parser dispatch](https://github.com/cristianism0/cassandra/blob/master/src/parsers/selector.rs): `src/parsers/selector.rs`
- [Syslog parser](https://github.com/cristianism0/cassandra/blob/master/src/parsers/sys.rs): `src/parsers/sys.rs`
- [Auth parser](https://github.com/cristianism0/cassandra/blob/master/src/parsers/auth.rs): `src/parsers/auth.rs`
- [Wtmp parser](https://github.com/cristianism0/cassandra/blob/master/src/parsers/wtmp.rs): `src/parsers/wtmp.rs`
- [Journal parser](https://github.com/cristianism0/cassandra/blob/master/src/parsers/journal.rs): `src/parsers/journal.rs`

### Records and filters

- [Entry types](https://github.com/cristianism0/cassandra/blob/master/src/models.rs): `src/models.rs`
- [Sys records](https://github.com/cristianism0/cassandra/blob/master/src/models/sys.rs): `src/models/sys.rs`
- [Auth records](https://github.com/cristianism0/cassandra/blob/master/src/models/auth.rs): `src/models/auth.rs`
- [Journal records](https://github.com/cristianism0/cassandra/blob/master/src/models/journal.rs): `src/models/journal.rs`
- [Wtmp records](https://github.com/cristianism0/cassandra/blob/master/src/models/wtmp.rs): `src/models/wtmp.rs`
- [Time parsing](https://github.com/cristianism0/cassandra/blob/master/src/utils/time.rs): `src/utils/time.rs`

### Output

- [Table rendering](https://github.com/cristianism0/cassandra/blob/master/src/display/table_cli.rs): `src/display/table_cli.rs`
- [Pager output](https://github.com/cristianism0/cassandra/blob/master/src/display/pager.rs): `src/display/pager.rs`
- [Display modes](https://github.com/cristianism0/cassandra/blob/master/src/display.rs): `src/display.rs`

### Other components

- **User**
- **Log files**
- **systemd journal**

## Connections

- User → Program entry: runs
- Program entry → CLI workflow: starts CLI
- CLI workflow → Path discovery: finds sources
- Path discovery → Log files: checks paths
- CLI workflow → Parser dispatch: selects parser
- Parser dispatch → Syslog parser: dispatches
- Parser dispatch → Auth parser: dispatches
- Parser dispatch → Wtmp parser: dispatches
- Parser dispatch → Journal parser: dispatches
- Syslog parser → Log files: reads
- Auth parser → Log files: reads
- Wtmp parser → Log files: reads
- Journal parser → systemd journal: reads entries
- Syslog parser → Entry types: creates entries
- Auth parser → Entry types: creates entries
- Wtmp parser → Entry types: creates entries
- Journal parser → Entry types: creates entries
- Entry types → Sys records: includes
- Entry types → Auth records: includes
- Entry types → Journal records: includes
- Entry types → Wtmp records: includes
- CLI workflow → Time parsing: parses time filters
- CLI workflow → Table rendering: renders entries
- CLI workflow → Display modes: selects mode
- Display modes → Table rendering: formats output
- CLI workflow → Pager output: pages output
