# Project layout

```{code-block} bash
:linenos:
$ tree . -a --gitignore -I ".git*"
.
├── .gitignore  # files and directories to exclude from Git versionning
│
├── .gitlab-ci.yml  # configuration file for the GitLab CI
│
├── .vale      # vale is a syntax-aware linter for documentation prose
│   │
│   └── ...    # all the style guides used by vale
│
├── .vale.ini  # vale's configuration file
│
├── Makefile  # EPICS generated Makefile to build and manage this project
│
├── README.md  # project home page
│
├── configure              # EPICS configuration directory
│   │
│   ├── CONFIG             # EPICS configuration file for builds
│   ├── CONFIG_SITE        # EPICS configuration file for application-specific builds
│   ├── CONFIG_SITE.local  # EPICS configuration file allowing to override CONFIG_SITE without having to modify it
│   ├── Makefile           # EPICS generated Makefile to build and manage configuration files
│   ├── RELEASE            # EPICS configuration file for base and external support modules location
│   ├── RELEASE.local      # EPICS configuration file allowing to override RELEASE without having to modify it
│   ├── RULES              # EPICS configuration file including the appropriate rules configuration file
│   ├── RULES.ioc          # EPICS build configuration file of the iocBoot/ sub-directorie(s)
│   ├── RULES_DIRS         # EPICS build configuration file of each subdirectory
│   └── RULES_TOP          # EPICS configuration specific to a Top
│                          # see web-archive:20240909130952/https://docs.epics-controls.org/en/latest/build-system/specifications.html#configuration-files
│
├── documentation  # SSH Monitor documentation directory
│   │
│   ├── .checks        # scripts used to check the documentation when building it
│   │   │
│   │   └── checks.py  # Python code used to check the documentation (syntax, formating, etc)
│   │
│   ├── .doxygen                                   # doxgen configuration directory, also used to store doxygen builds results
│   │   │
│   │   ├── doxyfile.conf                          # doxygen configuration file
│   │   ├── doxygen_layout.xml                     # doxygen custom page layout
│   │   └── filter-patterns-scripts                # doxygen Python scripts used to modify .substitutions and .template files 
│   │       │                                      # just before doxygen interprets them, in order to trick doxygen into thinking 
│   │       │                                      # those files have a valid Python syntax (which is obviously not the cas) 
│   │       │                                      # allowing to generate documentation for those files with doxygen 
│   │       │
│   │       ├── epics_substitutions_to_doxygen.py  # Python script tricking doxygen into thinking .substitutions have a valid Python syntax
│   │       └── epics_template_to_doxygen.py       # Python script tricking doxygen into thinking .template have a valid Python syntax
│   │
│   ├── .site  # this folder is where Sphinx will generate the web site content (e.g. .html pages) of the documentation
│   │
│   ├── .static  # this folder is used to store some static content that will by Sphinx to generate the web site hosting the documentation
│   │   └── ...
│   │
│   ├── CHANGELOG.md  # record of all notable changes made to this project
│   │
│   ├── conf.py  # Sphinx configuration file
│   │
│   ├── contribution_guide.md  # doc about how to contribute to the SSH Monitor project
│   │
│   ├── explanations                                  # doc about SSH Monitor explanations (https://diataxis.fr/explanation/)
│   │   │
│   │   ├── cmd_and_sub_explanations.md               # doc explaning SSH Monitor `.cmd` and `.substitutions` files
│   │   ├── custom_shell_instructions_explanations.md # doc explaning SSH Monitor custom command-lines
│   │   ├── index.md                                  # index page listing the other documentations of this directory
│   │   ├── security_explanations.md                  # doc explaning SSH Monitor security
│   │   └── tcp_ports_limitation_explanations.md      # doc explaning SSH Monitor TCP ports limitation
│   │
│   ├── glossary.md  # doc describing some EPICS and SSH Monitor terminology
│   │
│   ├── how-to-guides  # doc about SSH Monitor how-to guides (https://diataxis.fr/how-to-guides/)
│   │   │
│   │   ├── basics                                  # documentation about SSH Monitor basics
│   │   │   │
│   │   │   ├── alarm_server_how_to.md              # doc about EPICS alarm servers
│   │   │   ├── cmd_and_sub_how_to.md               # doc showing how to configure and use `.cmd` and `.substitutions` files with SSH Monitor
│   │   │   ├── custom_shell_instructions_how_to.md # doc showing how to specify SSH Monitor custom commands
│   │   │   ├── epics_records_fields_how_to.md      # doc showing how to configure and use some EPICS records fields with SSH Monitor
│   │   │   ├── firewall_how_to.md                  # doc showing how to configure firewalls for SSH Monitor use
│   │   │   ├── index.md                            # index page listing the other documentations of this directory
│   │   │   ├── install_update_remove_how_to.md     # doc showing how to install, update and remove SSH Monitor
│   │   │   ├── run_ssh_monitor_how_to.md           # doc showing how to run SSH Monitor
│   │   │   ├── security_how_to.md                  # doc showing how to configure SSH Monitor targets for better security
│   │   │   ├── ssh_how_to.md                       # doc showing how to configure SSH for SSH Monitor
│   │   │   ├── ssh_monitor_daemon_how_to.md        # doc showing how to set up a daemon for SSH Monitor
│   │   │   └── ssh_monitor_service_how_to.md       # doc showing how to set up a service for SSH Monitor
│   │   │
│   │   ├── index.md  # index page listing the other documentations of this directory
│   │   │
│   │   ├── recommended                                          # doc about SSH Monitor recommended features
│   │   │   │
│   │   │   ├── archiver_appliance_monitoring_how_to.md          # doc about archiver appliance monitoring through SSH Monitor
│   │   │   ├── hardware_raid_monitoring_with_megacli_how_to.md  # doc about megacli monitoring through SSH Monitor
│   │   │   ├── hardware_raid_monitoring_with_perccli_how_to.md  # doc about perccli monitoring through SSH Monitor
│   │   │   ├── hardware_raid_monitoring_with_storcli_how_to.md  # doc about storcli monitoring through SSH Monitor
│   │   │   ├── index.md                                         # index page listing the other documentations of this directory
│   │   │   ├── memory_monitoring_how_to.md                      # doc about memory monitoring through SSH Monitor
│   │   │   ├── network_connection_monitoring_how_to.md          # doc about network connection monitoring through SSH Monitor
│   │   │   ├── partitions_monitoring_how_to.md                  # doc about partitions monitoring through SSH Monitor
│   │   │   ├── processors_monitoring_how_to.md                  # doc about processors monitoring through SSH Monitor
│   │   │   ├── smart_data_monitoring_how_to.md                  # doc about S.M.A.R.T. monitoring through SSH Monitor
│   │   │   ├── software_raid_monitoring_with_btrfs_how_to.md    # doc about btrf monitoring through SSH Monitor
│   │   │   ├── software_raid_monitoring_with_lvm_how_to.md      # doc about lvm monitoring through SSH Monitor
│   │   │   ├── software_raid_monitoring_with_mdadm_how_to.md    # doc about mdadm monitoring through SSH Monitor
│   │   │   ├── software_raid_monitoring_with_zfs_how_to.md      # doc about zfs monitoring through SSH Monitor
│   │   │   ├── system_monitoring_with_idrac_how_to.md           # doc about idrac monitoring through SSH Monitor
│   │   │   ├── system_monitoring_with_ilo_how_to.md             # doc about ilow monitoring through SSH Monitor
│   │   │   ├── system_monitoring_with_ipmi_how_to.md            # doc about ipmi monitoring through SSH Monitor
│   │   │   └── system_monitoring_with_xclarity_how_to.md        # doc about xclarity monitoring through SSH Monitor
│   │   │
│   │   └── tips                            # doc about SSH Monitor tips
│   │       │
│   │       ├── index.md                    # index page listing the other documentations of this directory
│   │       ├── local_monitoring_how_to.md  # doc about monitoring the monitoring machine (i.e. the target machine is also the host)
│   │       ├── mixed_commands_how_to.md    # doc about processing -- on the host -- the result of a command send to a target
│   │       └── ssh_jump_how_to.md          # doc about monitoring targets through intermediate machines (thanks to SSH jumps)
│   │
│   ├── index.md  # index page listing the other documentations of this directory
│   │
│   ├── presentations                        # presentations about SSH Monitor in general
│   │   │
│   │   ├── ssh_monitor.drawio               # drawio image source summarizing SSH Monitor
│   │   ├── ssh_monitor.png                  # image summarizing SSH Monitor
│   │   ├── ssh_monitor_presentation_en.odp  # english presentation about SSH Monitor (.odp format)
│   │   ├── ssh_monitor_presentation_en.pdf  # english presentation about SSH Monitor (.pdf format)
│   │   ├── ssh_monitor_presentation_fr.odp  # french presentation about SSH Monitor (.odp format)
│   │   └── ssh_monitor_presentation_fr.pdf  # french presentation about SSH Monitor (.pdf format)
│   │
│   ├── project_layout.md  # current file
│   │
│   ├── references                                              # doc about SSH Monitor references (https://diataxis.fr/reference/)
│   │   │
│   │   ├── index.md                                            # index page listing the other documentations of this directory
│   │   │
│   │   ├── source-code                                         # doc about SSH Monitor source code
│   │   │   │
│   │   │   ├── index.md                                        # index page listing the other documentations of this directory
│   │   │   ├── menuScan_dbd.md                                 # doc about the EPICS DataBase Definition enhancing the EPICS 'SCAN' field
│   │   │   ├── sshmonitorASubCore_c.md                         # doc about the EPICS aSub record code (the core of the SSH Monitor logic)
│   │   │   ├── sshmonitorASubCore_dbd.md                       # doc about the EPICS DataBase Definition declaring previous aSub records
│   │   │   ├── sshmonitorASubUtils_c.md                        # doc about the source code of some utility fonctions
│   │   │   └── sshmonitorMain_cpp.md                           # doc about the source code main file (starting point)
│   │   │
│   │   ├── substitutions                                       # doc about SSH Monitor .substitutions files
│   │   │   │
│   │   │   ├── archiver_appliance_monitoring_substitutions.md  # doc about the archiver appliance monitoring .substitutions file
│   │   │   ├── connection_monitoring_substitutions.md          # doc about the connection monitoring .substitutions file
│   │   │   ├── example_monitoring_substitutions.md             # doc about the example monitoring .substitutions file
│   │   │   ├── index.md                                        # index page listing the other documentations of this directory
│   │   │   ├── memory_monitoring_substitutions.md              # doc about the memory monitoring .substitutions file
│   │   │   ├── partitions_monitoring_substitutions.md          # doc about the partitions monitoring .substitutions file
│   │   │   └── processors_monitoring_substitutions.md          # doc about the processors monitoring .substitutions file
│   │   │
│   │   └── template                                            # doc about SSH Monitor .template file
│   │       │
│   │       ├── index.md                                        # index page listing the other documentations of this directory
│   │       └── ssh_monitor_core_template.md                    # doc about the EPICS DataBase file defining monitoring records
│   │
│   ├── similar_work_and_alternatives.md  # doc about SSH Monitor similar programs and alternatives
│   │
│   ├── troubleshooting_guide.md  # doc about common SSH Monitor pitfalls and associated troubleshoot
│   │
│   └── tutorials                                               # doc about SSH Monitor tutorials (https://diataxis.fr/tutorials/)
│       │
│       ├── index.md
│       ├── quick_step_by_step_tutorial_on_a_nixos_linux_vm.md  # step-by-step SSH Monitor tutorial using a NixOS virtual machine
│       └── step_by_step_tutorial_on_a_rocky_linux_vm.md        # step-by-step SSH Monitor tutorial using a Rocky virtual machine
│
├── flake.lock  # Nix lock file
├── flake.nix   # Nix configuration file
│               # see https://github.com/epics-extensions/EPNix
│
├── gui                                        # HMIs examples
│   │
│   ├── css                                    # HMIs examples for CSS
│   │   │
│   │   ├── archiver_appliance_monitoring.opi  # archiver appliance monitoring HMI example for CSS
│   │   ├── connection_monitoring.opi          # connection monitoring HMI example for CSS
│   │   ├── main_display.opi                   # main HMI example for CSS
│   │   ├── memory_monitoring.opi              # memory monitoring HMI example for CSS
│   │   ├── partitions_monitoring.opi          # parittions monitoring HMI example for CSS
│   │   └── processors_monitoring.opi          # processors monitoring HMI example for CSS
│   │
│   └── phoebus                                # HMIs examples for Phoebus
│       │
│       ├── archiver_appliance_monitoring.bob  # archiver appliance monitoring HMI example for Phoebus
│       ├── connection_monitoring.bob          # connection monitoring HMI example for Phoebus
│       ├── main_display.bob                   # main HMI example for Phoebus
│       ├── memory_monitoring.bob              # memory monitoring HMI example for Phoebus
│       ├── partitions_monitoring.bob          # parittions monitoring HMI example for Phoebus
│       └── processors_monitoring.bob          # processors monitoring HMI example for Phoebus
│
├── iocBoot                      # EPICS generated directory used to IOC programs with the intended configuration
│   │
│   ├── Makefile                 # EPICS generated Makefile to build and manage iocBoot/ sub-directorie(s)
│   └── iocsshmonitor
│       ├── Makefile             # EPICS generated Makefile to build and manage files associated to the .cmd
│       └── st_tests.cmd         # EPICS executable file instructing the program loader to run the associated IOC program
│
├── poetry.lock  # Python Poetry lock file
├── pyproject.toml  # Python Poetry configuration file, used for Sphinx and other documentation build/checking dependencies
│
├── sshmonitorApp                                        # EPICS generated directory where the source code and database related files 
│   │                                                    # are located
│   │
│   ├── Makefile                                         # EPICS generated Makefile to build and manage an App
│   │
│   ├── db                                               # EPICS generated directory where database related files are located
│   │   │
│   │   ├── Makefile                                     # EPICS generated Makefile to build and manage database related files
│   │   ├── archiver_appliance_monitoring.substitutions  # SSH Monitor .substitutions file for default archiver appliance monitoring
│   │   ├── connection_monitoring.substitutions          # SSH Monitor .substitutions file for default connection monitoring
│   │   ├── example_monitoring.substitutions             # SSH Monitor .substitutions file used as a monitoring example
│   │   ├── memory_monitoring.substitutions              # SSH Monitor .substitutions file for default memory monitoring
│   │   ├── partitions_monitoring.substitutions          # SSH Monitor .substitutions file for default partitions monitoring
│   │   ├── processors_monitoring.substitutions          # SSH Monitor .substitutions file for default processors monitoring
│   │   └── ssh_monitor_core.template                    # EPICS DataBase file defining monitoring records
│   │
│   └── src                                              # EPICS generated directory where source code files are located
│       │
│       ├── Makefile                                     # EPICS generated Makefile to build and manage source files
│       ├── menuScan.dbd                                 # EPICS DataBase Definition enhancing the EPICS 'SCAN' field
│       ├── sshmonitorASubCore.c                         # EPICS aSub record source code (the core of the SSH Monitor logic)
│       ├── sshmonitorASubCore.dbd                       # EPICS DataBase Definition declaring previous aSub records
│       ├── sshmonitorASubUtils.c                        # source code of some utility fonctions
│       ├── sshmonitorASubUtils.h                        # header file of the previous utility fonctions
│       └── sshmonitorMain.cpp                           # source code main file (starting point)
│
├── tests                      # SSH Monitor tests
│   │
│   ├── full_tests.nix         # Nix file preparing the tests environment and running full_test_script.py
│   ├── full_tests_script.py   # Python script containning all the tests
│   ├── pyproject.toml         # Python configuration file (e.g. for ruff configuration)
│   ├── quick_tests.nix        # Nix file preparing the tests environment and running quick_test_script.py
│   └── quick_tests_script.py  # TODO Python script containning less tests (for faster iterations when working locally)
│
└── training-vm            # Nix files allowing to generate the NixOS training virtual machine
    │
    ├── configuration.nix  # Nix configuration file for the NixOS training virtual machine
    └── default.nix        # default Nix configuration file
```

