Files
Server_Monitorizare_v2/main.py
2026-04-23 15:55:46 +03:00

179 lines
7.0 KiB
Python

"""
Enhanced Server Monitoring System v2.0
Main application entry point
This is the main file to start the enhanced server monitoring system.
It includes all the improvements requested:
- Better database structure with message compression
- File upload support
- SSH/Ansible management interface
- Modular architecture
- Smaller client message sizes through templates
"""
import os
import sys
from app import create_app
from config.database_config import get_db
def main():
"""Main application entry point"""
# Create application
app = create_app()
# Setup database if needed (after app creation to avoid circular imports)
with app.app_context():
from config.database_config import get_db
db = get_db()
if not os.path.exists('data/enhanced_monitoring.db'):
print("🔧 Setting up database for first time...")
success = db.create_tables()
if success:
print("✅ Database initialized successfully")
else:
print("❌ Database initialization failed")
return 1
# Create initial dummy data if database is empty (for testing)
create_sample_data_if_needed()
# Print startup information
print_startup_info()
# Run application
try:
app.run(
host='0.0.0.0',
port=int(os.environ.get('PORT', 80)),
debug=app.config.get('DEBUG', False)
)
except KeyboardInterrupt:
print("\n👋 Shutting down Enhanced Server Monitoring System")
return 0
except Exception as e:
print(f"❌ Failed to start server: {e}")
return 1
def create_sample_data_if_needed():
"""Create sample data for testing if database is empty"""
try:
from config.database_config import get_db
from app.models import Device, MessageTemplate
db = get_db()
with db.get_session() as session:
# Check if we have any devices
device_count = session.query(Device).count()
if device_count == 0:
print("📝 Creating sample data for testing...")
# Create sample devices
sample_devices = [
Device(
hostname='rpi-device-01',
device_ip='192.168.1.100',
nume_masa='Masa-01',
device_type='Raspberry Pi',
status='active',
location='Office Floor 1'
),
Device(
hostname='rpi-device-02',
device_ip='192.168.1.101',
nume_masa='Masa-02',
device_type='Raspberry Pi',
status='active',
location='Office Floor 2'
)
]
for device in sample_devices:
session.add(device)
# Create sample message templates
sample_templates = [
MessageTemplate(
template_hash='sample1',
template_text='Card detected: {card_id}',
category='card_detection',
alias='CD001'
),
MessageTemplate(
template_hash='sample2',
template_text='System startup completed in {time}s',
category='system_startup',
alias='SS001'
)
]
for template in sample_templates:
session.add(template)
session.commit()
print("✅ Sample data created successfully")
except Exception as e:
print(f"⚠️ Warning: Could not create sample data: {e}")
def print_startup_info():
"""Print startup information and available endpoints"""
print("\n" + "="*60)
print("🚀 ENHANCED SERVER MONITORING SYSTEM v2.0")
print("="*60)
print("\n📊 Enhanced Features:")
print(" • Message compression and aliasing")
print(" • File upload support")
print(" • SSH/Ansible management interface")
print(" • Improved database structure")
print(" • Modular architecture")
print(" • Real-time device monitoring")
print("\n🌐 API Endpoints:")
print(" • POST /api/logs/ - Submit compressed logs")
print(" • POST /api/logs/template/<alias> - Submit using template alias")
print(" • POST /api/logs/file - Upload log files")
print(" • GET /api/logs/query - Query logs with filters")
print(" • GET /api/logs/stats - Get compression statistics")
print(" • GET /api/logs/templates - View message templates")
print("\n🔧 Ansible Management:")
print(" • GET /api/ansible/inventory - View device inventory")
print(" • POST /api/ansible/execute - Execute playbooks")
print(" • GET /api/ansible/executions - View execution history")
print(" • POST /api/ansible/ssh/test - Test SSH connectivity")
print("\n💻 Web Interface:")
print(" • / - Enhanced dashboard")
print(" • /devices - Device management")
print(" • /logs - Log viewer with filters")
print(" • /templates - Message template manager")
print(" • /ansible/ - Ansible management dashboard")
print(" • /ansible/execute - Execute playbooks via web")
print(" • /ansible/ssh/setup - SSH key management")
print("\n🔗 Integration with Prezenta App:")
print(" • Prezenta devices can now send smaller messages using template aliases")
print(" • Example: Instead of 'Card detected: ABC123', send alias 'CD001' + variables")
print(" • 60-80% reduction in message size for common log patterns")
print("\n💾 Database Improvements:")
print(" • Normalized schema with separate device/log/template tables")
print(" • Message deduplication and compression")
print(" • File upload tracking and metadata")
print(" • Ansible execution history")
print(" • System statistics and metrics")
print(f"\n🔧 Quick Setup for Prezenta Clients:")
print(f" 1. Update server URL to: http://YOUR-SERVER-IP/api/logs/")
print(f" 2. Use new compressed message format")
print(f" 3. Optional: Upload config files via /api/logs/file")
print("\n" + "="*60)
print("✅ Server ready! Access web interface at http://YOUR-IP/")
print("="*60 + "\n")
if __name__ == '__main__':
sys.exit(main())