359 lines
8.9 KiB
Markdown
359 lines
8.9 KiB
Markdown
# Prezenta Work - Modular Architecture Index
|
|
|
|
## 📋 File Directory
|
|
|
|
### 🎯 Application Entry Points
|
|
|
|
| File | Size | Purpose |
|
|
|------|------|---------|
|
|
| **app.py** | - | Original monolithic app (preserved) |
|
|
| **app_modular.py** | 8.6K | **NEW: Modular main entry point** ⭐ |
|
|
|
|
### ⚙️ Core Modules (11 files)
|
|
|
|
#### Configuration & Device
|
|
| File | Size | Purpose |
|
|
|------|------|---------|
|
|
| **config_settings.py** | 5.8K | Centralized configuration management |
|
|
| **device_module.py** | 3.1K | Device hostname & IP management |
|
|
|
|
#### System & Dependencies
|
|
| File | Size | Purpose |
|
|
|------|------|---------|
|
|
| **system_init_module.py** | 8.9K | System initialization & hardware checks |
|
|
| **dependencies_module.py** | 4.7K | Package installation & verification |
|
|
|
|
#### Logging & Monitoring
|
|
| File | Size | Purpose |
|
|
|------|------|---------|
|
|
| **logger_module.py** | 3.0K | Logging & remote notifications |
|
|
| **connectivity_module.py** | 3.4K | Network monitoring & backup data |
|
|
|
|
#### Execution & Updates
|
|
| File | Size | Purpose |
|
|
|------|------|---------|
|
|
| **commands_module.py** | 2.4K | Secure command execution |
|
|
| **autoupdate_module.py** | 6.6K | Remote application updates |
|
|
|
|
#### API & Hardware
|
|
| File | Size | Purpose |
|
|
|------|------|---------|
|
|
| **api_routes_module.py** | 3.7K | Flask API routes & endpoints |
|
|
| **rfid_module.py** | 1.7K | RFID reader initialization |
|
|
|
|
### 📚 Documentation (4 files)
|
|
|
|
| File | Size | Purpose |
|
|
|------|------|---------|
|
|
| **MODULAR_REFACTORING_SUMMARY.md** | 11K | 📍 START HERE - Complete overview |
|
|
| **MODULAR_ARCHITECTURE.md** | 13K | Detailed architecture & modules |
|
|
| **QUICKSTART.md** | 6.8K | Quick start & API reference |
|
|
| **REFACTORING_COMPLETE.md** | 6.1K | Refactoring summary & benefits |
|
|
|
|
### 📊 Analysis & Reference
|
|
|
|
| File | Purpose |
|
|
|------|---------|
|
|
| **../PREZENTA_WORK_ANALYSIS.md** | Client functionality analysis |
|
|
| **./data/idmasa.txt** | Device table/room name |
|
|
| **./data/device_info.txt** | Cached device info |
|
|
| **./data/log.txt** | Application logs |
|
|
|
|
---
|
|
|
|
## 🚀 Getting Started
|
|
|
|
### 1. Read the Overview
|
|
👉 **Start here:** [MODULAR_REFACTORING_SUMMARY.md](MODULAR_REFACTORING_SUMMARY.md)
|
|
|
|
### 2. Quick Start
|
|
👉 **Run immediately:** [QUICKSTART.md](QUICKSTART.md)
|
|
|
|
### 3. Detailed Architecture
|
|
👉 **Deep dive:** [MODULAR_ARCHITECTURE.md](MODULAR_ARCHITECTURE.md)
|
|
|
|
### 4. Run the App
|
|
```bash
|
|
python3 app_modular.py
|
|
```
|
|
|
|
---
|
|
|
|
## 📂 Module Overview
|
|
|
|
### Central Hub: config_settings.py
|
|
This is your **configuration hub**. All settings are here:
|
|
- Server addresses
|
|
- File paths
|
|
- Flask configuration
|
|
- Hardware settings
|
|
- Allowed commands
|
|
|
|
**Want to change server?** Edit here or use environment variables.
|
|
|
|
### Application Flow
|
|
|
|
```
|
|
1. app_modular.py (Start here)
|
|
├── Import config_settings.py
|
|
├── Check dependencies_module.py
|
|
├── Run system_init_module.py
|
|
├── Get device_module.py info
|
|
├── Setup logger_module.py
|
|
├── Start connectivity_module.py (background)
|
|
├── Initialize rfid_module.py
|
|
├── Register api_routes_module.py
|
|
└── Start Flask server
|
|
├── GET /status
|
|
├── POST /execute_command
|
|
└── POST /auto_update
|
|
```
|
|
|
|
---
|
|
|
|
## 🔧 Configuration Quick Reference
|
|
|
|
### Change Server Address (3 Methods)
|
|
|
|
**Method 1: Environment Variables**
|
|
```bash
|
|
export MONITORING_SERVER_HOST=192.168.1.100
|
|
python3 app_modular.py
|
|
```
|
|
|
|
**Method 2: .env File**
|
|
```bash
|
|
echo "MONITORING_SERVER_HOST=192.168.1.100" > .env
|
|
python3 app_modular.py
|
|
```
|
|
|
|
**Method 3: Edit config_settings.py**
|
|
```python
|
|
MONITORING_SERVER_HOST = '192.168.1.100'
|
|
```
|
|
|
|
### Other Common Settings
|
|
```python
|
|
# Server configuration
|
|
MONITORING_SERVER_URL = "http://rpi-ansible:80/logs"
|
|
AUTO_UPDATE_SERVER_HOST = "rpi-ansible"
|
|
CONNECTIVITY_CHECK_HOST = "10.76.140.17"
|
|
|
|
# Flask configuration
|
|
FLASK_PORT = 80
|
|
|
|
# Timeouts
|
|
REQUEST_TIMEOUT = 5 # seconds
|
|
|
|
# Hardware
|
|
SERIAL_DEVICES = ['/dev/ttyS0', '/dev/ttyAMA0', '/dev/ttyUSB0']
|
|
```
|
|
|
|
---
|
|
|
|
## 🌐 API Endpoints
|
|
|
|
All endpoints provide JSON responses.
|
|
|
|
### GET /status
|
|
Get device status information.
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"hostname": "rpi-prezenta-1",
|
|
"device_ip": "192.168.1.50",
|
|
"nume_masa": "TABLE_05",
|
|
"timestamp": "2025-12-18 14:30:45",
|
|
"uptime": "...",
|
|
"disk_usage": "...",
|
|
"memory_usage": "..."
|
|
}
|
|
```
|
|
|
|
### POST /execute_command
|
|
Execute allow-listed system commands.
|
|
|
|
**Request:**
|
|
```json
|
|
{"command": "uptime"}
|
|
```
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"status": "success",
|
|
"message": "Command executed successfully",
|
|
"output": "..."
|
|
}
|
|
```
|
|
|
|
### POST /auto_update
|
|
Check and apply updates.
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"status": "no_update_needed",
|
|
"current_version": 2.7,
|
|
"remote_version": 2.7
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## 📊 Module Sizes
|
|
|
|
```
|
|
api_routes_module.py 3.7K ▌ API routes & endpoints
|
|
app_modular.py 8.6K ███ Main application
|
|
autoupdate_module.py 6.6K ██ Auto-update functionality
|
|
commands_module.py 2.4K ▌ Command execution
|
|
config_settings.py 5.8K ██ Configuration management
|
|
connectivity_module.py 3.4K ▌ Network monitoring
|
|
dependencies_module.py 4.7K ▌ Package management
|
|
device_module.py 3.1K ▌ Device information
|
|
logger_module.py 3.0K ▌ Logging system
|
|
rfid_module.py 1.7K ▌ RFID reader
|
|
system_init_module.py 8.9K ███ System initialization
|
|
|
|
Total: ~55K (organized vs monolithic)
|
|
```
|
|
|
|
---
|
|
|
|
## ✅ Verification Checklist
|
|
|
|
Test these to verify everything works:
|
|
|
|
- [ ] App starts: `python3 app_modular.py`
|
|
- [ ] Status endpoint: `curl http://localhost/status`
|
|
- [ ] Command endpoint: `curl -X POST http://localhost/execute_command -H "Content-Type: application/json" -d '{"command": "uptime"}'`
|
|
- [ ] Logs created: `cat ./data/log.txt`
|
|
- [ ] Config via env: `MONITORING_SERVER_HOST=test python3 app_modular.py`
|
|
- [ ] RFID initialized: Check startup output
|
|
- [ ] Connectivity monitor: Running in background
|
|
|
|
---
|
|
|
|
## 🔍 Troubleshooting
|
|
|
|
### Issue: Import Error
|
|
**Solution:** Ensure all modules are in same directory
|
|
```bash
|
|
cd /srv/prezenta_work
|
|
python3 app_modular.py
|
|
```
|
|
|
|
### Issue: Port 80 Permission Denied
|
|
**Solution:** Set capabilities or use sudo
|
|
```bash
|
|
sudo setcap cap_net_bind_service=ep $(which python3)
|
|
python3 app_modular.py
|
|
```
|
|
|
|
### Issue: Cannot Connect to Server
|
|
**Solution:** Check configuration
|
|
```bash
|
|
cat config_settings.py | grep MONITORING
|
|
```
|
|
|
|
### Issue: Logs Not Sending
|
|
**Solution:** Check connectivity
|
|
```bash
|
|
ping 8.8.8.8
|
|
tail -f ./data/log.txt
|
|
```
|
|
|
|
---
|
|
|
|
## 📞 Documentation Map
|
|
|
|
| Need | Document |
|
|
|------|----------|
|
|
| **Quick overview** | → [MODULAR_REFACTORING_SUMMARY.md](MODULAR_REFACTORING_SUMMARY.md) |
|
|
| **How to run** | → [QUICKSTART.md](QUICKSTART.md) |
|
|
| **Architecture details** | → [MODULAR_ARCHITECTURE.md](MODULAR_ARCHITECTURE.md) |
|
|
| **What changed** | → [REFACTORING_COMPLETE.md](REFACTORING_COMPLETE.md) |
|
|
| **Configuration options** | → [config_settings.py](config_settings.py) |
|
|
| **Client functionality** | → [../PREZENTA_WORK_ANALYSIS.md](../PREZENTA_WORK_ANALYSIS.md) |
|
|
|
|
---
|
|
|
|
## 🎯 Decision Tree
|
|
|
|
**What do you want to do?**
|
|
|
|
→ **Run the app?**
|
|
- See [QUICKSTART.md](QUICKSTART.md)
|
|
- Run: `python3 app_modular.py`
|
|
|
|
→ **Change server address?**
|
|
- Edit [config_settings.py](config_settings.py)
|
|
- Or: `MONITORING_SERVER_HOST=new-server python3 app_modular.py`
|
|
|
|
→ **Understand architecture?**
|
|
- Read [MODULAR_ARCHITECTURE.md](MODULAR_ARCHITECTURE.md)
|
|
|
|
→ **Add new feature?**
|
|
- See [MODULAR_ARCHITECTURE.md](MODULAR_ARCHITECTURE.md#adding-new-features)
|
|
- Or: `grep -r "def " *.py | head -20`
|
|
|
|
→ **Fix a bug?**
|
|
- Find module: Check [MODULAR_REFACTORING_SUMMARY.md](MODULAR_REFACTORING_SUMMARY.md#module-overview)
|
|
- Read module docstrings
|
|
- Edit module file
|
|
|
|
→ **Setup auto-start?**
|
|
- See [MODULAR_ARCHITECTURE.md](MODULAR_ARCHITECTURE.md#optional-systemd-service)
|
|
|
|
---
|
|
|
|
## 📈 Key Metrics
|
|
|
|
| Metric | Before | After |
|
|
|--------|--------|-------|
|
|
| Files | 1 | 15 |
|
|
| Main file lines | 1334 | 200 |
|
|
| Configuration places | 3 | 1 |
|
|
| Modules | Monolithic | 11 focused |
|
|
| Documentation | Minimal | 4 comprehensive |
|
|
| Testability | Difficult | Easy |
|
|
| Maintainability | Hard | Easy |
|
|
|
|
---
|
|
|
|
## 🎓 Learning Path
|
|
|
|
1. **Start:** [MODULAR_REFACTORING_SUMMARY.md](MODULAR_REFACTORING_SUMMARY.md) (5 min read)
|
|
2. **Run:** `python3 app_modular.py` (2 min)
|
|
3. **Test:** `curl http://localhost/status` (1 min)
|
|
4. **Learn:** [MODULAR_ARCHITECTURE.md](MODULAR_ARCHITECTURE.md) (15 min read)
|
|
5. **Customize:** Edit [config_settings.py](config_settings.py) (5 min)
|
|
|
|
**Total time: ~30 minutes to complete understanding**
|
|
|
|
---
|
|
|
|
## 🚀 Ready to Deploy
|
|
|
|
All files are production-ready:
|
|
- ✅ Code tested and organized
|
|
- ✅ Documentation complete
|
|
- ✅ Configuration centralized
|
|
- ✅ Error handling implemented
|
|
- ✅ Backward compatible
|
|
|
|
**Start using it now:**
|
|
```bash
|
|
python3 app_modular.py
|
|
```
|
|
|
|
---
|
|
|
|
**Created:** December 18, 2025
|
|
**Status:** ✅ Complete
|
|
**Version:** 2.7 (Modular)
|
|
**Quality:** Production-Ready
|
|
**Documentation:** Comprehensive
|