# frese/eye-of-god architecture

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

- Interactive diagram: https://gitdiagram.com/frese/eye-of-god
- Repository: https://github.com/frese/eye-of-god

## Overview

Eye-of-God is a file-backed server-monitoring system: client collectors run service scripts and send measurements through a queue driver; the server receives them into RRD files; CGI pages let users select monitored hosts/services and view generated graphs. The README documents these principal relationships. Source excerpts are limited to queue drivers and browser tree widgets, so internal dispatch details and the widgets’ integration with the CGI pages are not verified.

Main entry points: [`bin/collector`](https://github.com/frese/eye-of-god/blob/master/bin/collector) (Collector), [`bin/godd`](https://github.com/frese/eye-of-god/blob/master/bin/godd) (Server processor), [`cgi/god`](https://github.com/frese/eye-of-god/blob/master/cgi/god) (Monitoring interface), [`cgi/eye`](https://github.com/frese/eye-of-god/blob/master/cgi/eye) (Graph renderer)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_collection["Client collection"]
  node_service_config["Service configuration<br/>[services.yaml]"]
  node_service_scripts["Service scripts"]
  node_collector["Collector"]
  node_collect["Ad hoc collection"]
  node_bunny["Bunny driver<br/>[bunnydriver.rb]"]
  node_sqs["SQS driver<br/>[sqsdriver.rb]"]
  node_stomp["STOMP driver<br/>[stompdriver.rb]"]
end

subgraph group_ingestion["Server ingestion"]
  node_receiver["Receiver"]
  node_godd["Server processor"]
  node_server_config["Server configuration<br/>[god.yaml]"]
end

subgraph group_storage["RRD storage"]
  node_rrd_files[("RRD data files")]
end

subgraph group_presentation["Web presentation"]
  node_god_cgi["Monitoring interface"]
  node_eye_cgi["Graph renderer"]
  node_info_cgi["Info endpoint"]
  node_god_template["Page template<br/>[god.rhtml]"]
  node_checkbox_tree["Checkbox tree"]
  node_treeview["Tree navigation<br/>[jquery.treeview.js]"]
end

node_operator(("Operator"))
node_client(("Monitored servers"))
node_queue["Message queue"]
node_rrdtool["RRDtool"]

node_client -->|"runs on"| node_collector
node_collector -->|"uses settings"| node_service_config
node_collector -->|"runs scripts"| node_service_scripts
node_collector -->|"publishes via"| node_bunny
node_collector -->|"publishes via"| node_sqs
node_collector -->|"publishes via"| node_stomp
node_bunny -->|"publishes to"| node_queue
node_sqs -->|"publishes to"| node_queue
node_stomp -->|"publishes to"| node_queue
node_collect -.->|"updates data sets"| node_queue
node_queue -->|"delivers messages"| node_receiver
node_receiver -.->|"server receives"| node_godd
node_godd -->|"stores measurements"| node_rrd_files
node_godd -->|"reads status settings"| node_server_config
node_operator -->|"selects monitors"| node_god_cgi
node_god_cgi -->|"requests graphs"| node_eye_cgi
node_eye_cgi -->|"reads data"| node_rrd_files
node_eye_cgi -->|"draws graphs"| node_rrdtool
node_god_cgi -.->|"renders framework"| node_god_template

click node_service_config "https://github.com/frese/eye-of-god/blob/master/config/services.yaml"
click node_service_scripts "https://github.com/frese/eye-of-god/tree/master/scripts"
click node_collector "https://github.com/frese/eye-of-god/blob/master/bin/collector"
click node_collect "https://github.com/frese/eye-of-god/blob/master/bin/collect"
click node_bunny "https://github.com/frese/eye-of-god/blob/master/bin/drivers/bunnydriver.rb"
click node_sqs "https://github.com/frese/eye-of-god/blob/master/bin/drivers/sqsdriver.rb"
click node_stomp "https://github.com/frese/eye-of-god/blob/master/bin/drivers/stompdriver.rb"
click node_receiver "https://github.com/frese/eye-of-god/blob/master/bin/receiver"
click node_godd "https://github.com/frese/eye-of-god/blob/master/bin/godd"
click node_server_config "https://github.com/frese/eye-of-god/blob/master/config/god.yaml"
click node_rrd_files "https://github.com/frese/eye-of-god/tree/master/rrd"
click node_god_cgi "https://github.com/frese/eye-of-god/blob/master/cgi/god"
click node_eye_cgi "https://github.com/frese/eye-of-god/blob/master/cgi/eye"
click node_info_cgi "https://github.com/frese/eye-of-god/blob/master/cgi/info"
click node_god_template "https://github.com/frese/eye-of-god/blob/master/include/god.rhtml"
click node_checkbox_tree "https://github.com/frese/eye-of-god/blob/master/include/jquery.checkboxtree.js"
click node_treeview "https://github.com/frese/eye-of-god/blob/master/include/jquery.treeview.js"

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_service_config,node_service_scripts,node_collector,node_collect,node_bunny,node_sqs,node_stomp toneBlue
class node_receiver,node_godd,node_server_config toneAmber
class node_rrd_files,node_client toneMint
class node_god_cgi,node_eye_cgi,node_info_cgi,node_god_template,node_checkbox_tree,node_treeview,node_queue toneRose
class node_operator,node_rrdtool toneIndigo
```

## Components

### Client collection

- [Service configuration](https://github.com/frese/eye-of-god/blob/master/config/services.yaml): `config/services.yaml`
- [Service scripts](https://github.com/frese/eye-of-god/tree/master/scripts): `scripts`
- [Collector](https://github.com/frese/eye-of-god/blob/master/bin/collector): `bin/collector`
- [Ad hoc collection](https://github.com/frese/eye-of-god/blob/master/bin/collect): `bin/collect`
- [Bunny driver](https://github.com/frese/eye-of-god/blob/master/bin/drivers/bunnydriver.rb): `bin/drivers/bunnydriver.rb`
- [SQS driver](https://github.com/frese/eye-of-god/blob/master/bin/drivers/sqsdriver.rb): `bin/drivers/sqsdriver.rb`
- [STOMP driver](https://github.com/frese/eye-of-god/blob/master/bin/drivers/stompdriver.rb): `bin/drivers/stompdriver.rb`

### Server ingestion

- [Receiver](https://github.com/frese/eye-of-god/blob/master/bin/receiver): `bin/receiver`
- [Server processor](https://github.com/frese/eye-of-god/blob/master/bin/godd): `bin/godd`
- [Server configuration](https://github.com/frese/eye-of-god/blob/master/config/god.yaml): `config/god.yaml`

### RRD storage

- [RRD data files](https://github.com/frese/eye-of-god/tree/master/rrd): `rrd`

### Web presentation

- [Monitoring interface](https://github.com/frese/eye-of-god/blob/master/cgi/god): `cgi/god`
- [Graph renderer](https://github.com/frese/eye-of-god/blob/master/cgi/eye): `cgi/eye`
- [Info endpoint](https://github.com/frese/eye-of-god/blob/master/cgi/info): `cgi/info`
- [Page template](https://github.com/frese/eye-of-god/blob/master/include/god.rhtml): `include/god.rhtml`
- [Checkbox tree](https://github.com/frese/eye-of-god/blob/master/include/jquery.checkboxtree.js): `include/jquery.checkboxtree.js`
- [Tree navigation](https://github.com/frese/eye-of-god/blob/master/include/jquery.treeview.js): `include/jquery.treeview.js`

### Other components

- **Operator**
- **Monitored servers**
- **Message queue**
- **RRDtool**

## Connections

- Monitored servers → Collector: runs on (evidence: `README.md`)
- Collector → Service configuration: uses settings (evidence: `README.md`)
- Collector → Service scripts: runs scripts (evidence: `README.md`)
- Collector → Bunny driver: publishes via (evidence: `README.md`)
- Collector → SQS driver: publishes via (evidence: `README.md`)
- Collector → STOMP driver: publishes via (evidence: `README.md`)
- Bunny driver → Message queue: publishes to (evidence: `bin/drivers/bunnydriver.rb`)
- SQS driver → Message queue: publishes to (evidence: `bin/drivers/sqsdriver.rb`)
- STOMP driver → Message queue: publishes to (evidence: `bin/drivers/stompdriver.rb`)
- Ad hoc collection → Message queue: updates data sets (evidence: `README.md`)
- Message queue → Receiver: delivers messages (evidence: `README.md`)
- Receiver → Server processor: server receives
- Server processor → RRD data files: stores measurements (evidence: `README.md`)
- Server processor → Server configuration: reads status settings (evidence: `README.md`)
- Operator → Monitoring interface: selects monitors (evidence: `README.md`)
- Monitoring interface → Graph renderer: requests graphs (evidence: `README.md`)
- Graph renderer → RRD data files: reads data (evidence: `README.md`)
- Graph renderer → RRDtool: draws graphs (evidence: `README.md`)
- Monitoring interface → Page template: renders framework
