43 lines
1.3 KiB
Python
43 lines
1.3 KiB
Python
# Copyright 2018 Creu Blanca
|
|
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
|
import logging
|
|
import socket
|
|
|
|
from odoo import api, fields, models
|
|
|
|
|
|
class ResRemote(models.Model):
|
|
_name = "res.remote"
|
|
_description = "Remotes"
|
|
|
|
name = fields.Char(required=True, string="Hostname", index=True, readonly=True)
|
|
ip = fields.Char(required=True)
|
|
in_network = fields.Boolean(
|
|
required=True, help="Shows if the remote can be found through the socket"
|
|
)
|
|
|
|
_sql_constraints = [("name_unique", "unique(name)", "Hostname must be unique")]
|
|
|
|
@api.model
|
|
def _create_vals(self, addr, hostname):
|
|
return {
|
|
"name": hostname or addr,
|
|
"ip": addr,
|
|
"in_network": bool(hostname),
|
|
}
|
|
|
|
@api.model
|
|
def _get_remote(self, addr):
|
|
try:
|
|
hostname, alias, ips = socket.gethostbyaddr(addr)
|
|
except socket.herror:
|
|
logging.warning("Remote with ip %s could not be found" % addr)
|
|
hostname = False
|
|
remote = self.search([("name", "=ilike", hostname or addr)])
|
|
if not remote:
|
|
remote = self.create(self._create_vals(addr, hostname))
|
|
if remote.ip != addr:
|
|
# IPs can change through time, but hostname should not change
|
|
remote.write({"ip": addr})
|
|
return remote
|