Oups, add a lot of missing files
This commit is contained in:
parent
d234d83df8
commit
061e73722f
21 changed files with 937 additions and 2 deletions
5
modules/whereis/Delayed.py
Normal file
5
modules/whereis/Delayed.py
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
# coding=utf-8
|
||||
|
||||
class Delayed:
|
||||
def __init__(self):
|
||||
self.names = dict()
|
||||
57
modules/whereis/UpdatedStorage.py
Normal file
57
modules/whereis/UpdatedStorage.py
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
# coding=utf-8
|
||||
|
||||
import socket
|
||||
from datetime import datetime
|
||||
from datetime import timedelta
|
||||
|
||||
from .User import User
|
||||
|
||||
class UpdatedStorage:
|
||||
def __init__(self, url, port):
|
||||
sock = connect_to_ns(url, port)
|
||||
self.users = dict()
|
||||
if sock != None:
|
||||
users = list_users(sock)
|
||||
if users is not None:
|
||||
for l in users:
|
||||
u = User(l)
|
||||
if u.login not in self.users:
|
||||
self.users[u.login] = list()
|
||||
self.users[u.login].append(u)
|
||||
self.lastUpdate = datetime.now ()
|
||||
else:
|
||||
self.users = None
|
||||
sock.close()
|
||||
else:
|
||||
self.users = None
|
||||
|
||||
def update(self):
|
||||
if datetime.now () - self.lastUpdate < timedelta(minutes=10):
|
||||
return self
|
||||
else:
|
||||
return None
|
||||
|
||||
|
||||
def connect_to_ns(server, port):
|
||||
try:
|
||||
s = socket.socket()
|
||||
s.settimeout(3)
|
||||
s.connect((server, port))
|
||||
except socket.error:
|
||||
return None
|
||||
s.recv(8192)
|
||||
return s
|
||||
|
||||
|
||||
def list_users(sock):
|
||||
try:
|
||||
sock.send('list_users\n'.encode())
|
||||
buf = ''
|
||||
while True:
|
||||
tmp = sock.recv(8192).decode()
|
||||
buf += tmp
|
||||
if '\nrep 002' in tmp or tmp == '':
|
||||
break
|
||||
return buf.split('\n')[:-2]
|
||||
except socket.error:
|
||||
return None
|
||||
35
modules/whereis/User.py
Normal file
35
modules/whereis/User.py
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
# coding=utf-8
|
||||
|
||||
class User(object):
|
||||
def __init__(self, line):
|
||||
fields = line.split()
|
||||
self.login = fields[1]
|
||||
self.ip = fields[2]
|
||||
self.location = fields[8]
|
||||
self.promo = fields[9]
|
||||
|
||||
@property
|
||||
def sm(self):
|
||||
for sm in CONF.getNodes("sm"):
|
||||
if self.ip.startswith(sm["ip"]):
|
||||
return sm["name"]
|
||||
return None
|
||||
|
||||
@property
|
||||
def poste(self):
|
||||
if self.sm is None:
|
||||
if self.ip.startswith('10.'):
|
||||
return 'quelque part sur le PIE (%s)'%self.ip
|
||||
else:
|
||||
return "chez lui"
|
||||
else:
|
||||
if self.ip.startswith('10.247') or self.ip.startswith('10.248') or self.ip.startswith('10.249') or self.ip.startswith('10.250'):
|
||||
return "en " + self.sm + " rangée " + self.ip.split('.')[2] + " poste " + self.ip.split('.')[3]
|
||||
else:
|
||||
return "en " + self.sm
|
||||
|
||||
def __cmp__(self, other):
|
||||
return cmp(self.login, other.login)
|
||||
|
||||
def __hash__(self):
|
||||
return hash(self.login)
|
||||
Loading…
Add table
Add a link
Reference in a new issue