Files
maintenance-tools/maintenance_server_monitoring/models/maintenance_equipment.py
2024-04-02 13:26:45 +02:00

46 lines
1.6 KiB
Python

from odoo import fields, models
import subprocess
import sys
import psutil
class MaintenanceEquipment(models.Model):
_inherit = 'maintenance.equipment'
server_domain = fields.Char('Server Domain')
ssh_private_key_path = fields.Char("SSH private key path", default="/opt/odoo/auto/dev/ssh_keys/id_rsa")
last_monitoring_test_date = fields.Datetime('Date of last monitoring test', readonly=True)
ping_ok = fields.Boolean("Ping ok", readonly=True)
available_memory_percent = fields.Float('Percent of available memory', readonly=True)
def install_dependencies(self):
if "ping3" not in sys.modules:
command = ['pip','install',"ping3"]
response = subprocess.call(command)
return response
def monitoring_test(self):
self.install_dependencies()
self.test_ping()
self.test_available_memory_percent()
self.last_monitoring_test_date = fields.Datetime.now()
return
def test_available_memory_percent(self):
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(self.server_domain, username="root", key_filename=self.ssh_private_key_path)
_stdin, stdout, _stderr = ssh.exec_command("free | grep Mem | awk '{print $3/$2 * 100.0}'")
self.available_memory_percent = float(stdout.read().decode())
def test_ping(self):
from ping3 import ping
hostname = self.server_domain
r = ping(hostname)
if r:
self.ping_ok = True
else:
self.ping_ok = False
return