Files
Cactidocumentation/Standards-FileSystem-Layout.md
Thomas Vincent 57b8088e13 docs: comprehensive validation audit, Spine poller overhaul, and technical refactor (#229)
* docs: comprehensive audit, Spine poller overhaul, and technical refactor

- Overhaul Spine documentation (Spine.md) with complete end-to-end guide: architecture, prerequisites for modern distros (EL8/9 CRB, Ubuntu 22/24, Debian 11/12, FreeBSD), SUID root permissions, secure spine.conf setup (0640), Web UI configuration (Paths, Poller type, Data Collectors tuning), MySQL max_connections sizing, and troubleshooting.
- Fix broken links and anchors (Hardening, SNMP data queries, Hook API references).
- Fix broken image reference in Sites.md (add-site.JPG -> add-site.png).
- Fix syntax errors in documentation PHP code blocks, including invalid parenthesization, missing SQL execute quotes, and malformed comments in FAQ.
- Fix DevOps installation commands: use config.php.dist, correct systemctl service names for MySQL/MariaDB/PHP-FPM, remove nonexistent php-json, add missing composer install, and correct Debian/Ubuntu systemd environment path.
- Correct grammatical errors, repeated words, and typos across all markdown documents.
- Remove obsolete unreferenced duplicate installation guides.

Signed-off-by: Thomas Vincent <thomasvincent@gmail.com>

* docs: correct reviewed examples and guidance

Signed-off-by: Thomas Vincent <thomasvincent@gmail.com>

* docs: correct guidance that disagrees with the Cacti source

Verified each claim against include/global_arrays.php, lib/auth.php,
lib/functions.php, host_templates.php and the Spine config parser. The
notable ones: api_plugin_safe_exec() does not exist on either branch,
Spine reads DB_Pass rather than DB_Password, and the CDEF special data
source table was missing five entries and renamed four others.

Signed-off-by: Thomas Vincent <thomasvincent@gmail.com>

* docs: wrap Spine prose and fence the connection sizing formula

The formula's bare asterisks rendered as emphasis, dropping the multiplication signs.

Signed-off-by: Thomas Vincent <thomasvincent@gmail.com>

* chore: refresh copyright year in scripts and issue templates

Signed-off-by: Thomas Vincent <thomasvincent@gmail.com>

---------

Signed-off-by: Thomas Vincent <thomasvincent@gmail.com>
2026-09-08 09:41:21 -04:00

190 lines
5.8 KiB
Markdown

# File System Layout
It is important that files are well placed and named within Cacti's directory
structure. The naming structure may contain a **category token** and/or an
**action**.
## Token
Under each category directory, functions should be broken out into multiple
files where applicable. All files must begin with the name of category (ie. its
parent directory name). Valid token names are
* auth
* automation
* color_template
* data_input
* data_query
* data_source
* data_source_profile
* data_template
* device (rename from host)
* device_template
* event (if we have event management in core)
* graph
* graph_template
* graph_tree
* package
* plugin
* poller
* preset (colors, cdefs, vdefs, gprints, etc)
* site
* user
## Actions
This part should reflect what type of actions the file contains. Specific
examples are listed below.
* info - reads information
* update - writes (or changes) information
* form - draws form-related information
* execute - performs some action that does not modify or return information
* utility - contains miscellaneous functions
## Function Verbs
Functions in those PHP modules shall name their token and shall contain a verb
to explain the purpose. Specific examples are listed below.
* list
* get
* save
* copy
* clear
* remove
* update
## Directory Structure
### cli/
`[token]_[action].php`
### images/
* icons/ # 16x16, 32x32 icons
* buttons/ # button images (save, cancel, etc)
* tabs/ # tab images
### include/
Code that must be accessed globally but is not contained inside of a function
should be stored in the `include/` directory. The most common examples are to
store globally accessible constants and arrays.
Directly under the `include/` directory, the files beginning with `global` are
used to store information that is accessible everywhere in the code. Only store
information in these files that are meaningful to the entire program. Also
under the `include/` directory is a directory for each category (graph, device,
etc), where information specific to that category is to be stored.
Constants that are made available everyone in the program
```console
include/global_constants.php
```
Arrays that are only used with graphs
```console
include/graph_arrays.php
```
```console
content/
fa/ # FontAwesome files
js/ # javascript files
themes/[theme]/ # Visual theme files
vendor/
csrf/ # CSRF Magic
flag-icon-css/ # Flag Icons
phpgettext/ # PHP GetText Library
phpmailer/ # PHP Mailer Library
phpseclib/ # PHP Security Library
phpsnmp/ # PHP Snmp Library
```
```console
auth.php # Ensures user authenticate and
# includes global.php
cacti_version
cli_check.php # Default Command Line Include also
# includes global.php
global_arrays.php
global_constants.php # Constants only
global_form.php # Form field definitions
global_languages.php # Language selector
global.php
global_session.php # Session variable management
global_settings.php # Setting definitions
session.php # Session management
plugins.php # Global plugin variables
bottom_footer.php # Standard Footer
top_general_header.php
top_graph_header.php
top_header.php
layout.js # Main layout javascript
realtime.js # Realtime javascript functions
```
### lib/
Functions that must be accessed globally should be stored in the ''lib/''
directory. This is where most of the heavy lifting in Cacti occurs.
Directly under the `lib/` directory, the files beginning with the `api`
prefix are core Cacti API's that are only to be used by third party
developers and should NEVER include a call to a
`$_REQUEST`, `$_POST`, or `$_GET` variable.
Files that have the `html` prefix, generally involve the rendering of page
content, for example the `html_form.php` library draws forms and
`html_validate.php` includes functions to validate page variables there
are other various files in the current cacti `lib/` directory that will
over time be changing with the migration to the next major version of
Cacti. So, these rules may change over time.
Here is the core API for the Cacti `graphs.php` page, and that deals with
the manipulation of **Graphs**.
```console
lib/api_graph.php
```
### locales/
Language-related files are stored here to handle the multi-lingual natural of
Cacti. These can be updated by running the `update-pot.sh` script. It is
advised to do this whenever you are submitting a change to the Cacti via Pull
Request. Otherwise, language translations can be missed.
### plugins/
Directly under the `plugins/` directory are sub directories that contain
plugins for Cacti. Since Cacti 1.0.0, all plugins must have an accompanying
INFO file that details the plugin.
## Including and Requiring Files
To reduce bloat, each file and/or function should include any and all files
which it relies on.
The following function directly relies the libraries related to sequences and
reading graph information. The `require_once` directive is used instead of
`require` to prevent PHP re-declaration errors.
```php
function api_graph_item_save($graph_item_id, &$_fields_graph_item) {
require_once(CACTI_BASE_PATH . '/lib/sys/sequence.php');
require_once(CACTI_BASE_PATH . '/lib/graph/graph_info.php');
// Function implementation...
}
```
---
Copyright (c) 2004-2026 The Cacti Group