small refactoring to facilitate integration of the bond equation
This commit is contained in:
parent
23ef17d4c7
commit
3ad426916f
@ -31,6 +31,7 @@ main:
|
||||
- /root/brain.json
|
||||
- /root/.api-report.json
|
||||
- /root/handshakes/
|
||||
- /root/peers/
|
||||
- /etc/pwnagotchi/
|
||||
- /var/log/pwnagotchi.log
|
||||
commands:
|
||||
|
@ -1,17 +1,27 @@
|
||||
import time
|
||||
import logging
|
||||
import datetime
|
||||
|
||||
import pwnagotchi.ui.faces as faces
|
||||
|
||||
|
||||
def parse_rfc3339(dt):
|
||||
return datetime.datetime.strptime(dt.split('.')[0], "%Y-%m-%dT%H:%M:%S")
|
||||
|
||||
|
||||
class Peer(object):
|
||||
def __init__(self, obj):
|
||||
self.first_seen = time.time()
|
||||
self.last_seen = self.first_seen
|
||||
self.session_id = obj['session_id']
|
||||
self.last_channel = obj['channel']
|
||||
self.rssi = obj['rssi']
|
||||
self.adv = obj['advertisement']
|
||||
now = time.time()
|
||||
just_met = datetime.now().strftime("%Y-%m-%dT%H:%M:%S")
|
||||
self.first_met = parse_rfc3339(obj.get('met_at', just_met))
|
||||
self.first_seen = parse_rfc3339(obj.get('detected_at', just_met))
|
||||
self.prev_seen = parse_rfc3339(obj.get('prev_seen_at', just_met))
|
||||
self.last_seen = now # should be seen_at
|
||||
self.encounters = obj.get('encounters', 0)
|
||||
self.session_id = obj.get('session_id', '')
|
||||
self.last_channel = obj.get('channel', 1)
|
||||
self.rssi = obj.get('rssi', 0)
|
||||
self.adv = obj.get('advertisement', {})
|
||||
|
||||
def update(self, new):
|
||||
if self.name() != new.name():
|
||||
@ -24,39 +34,45 @@ class Peer(object):
|
||||
self.rssi = new.rssi
|
||||
self.session_id = new.session_id
|
||||
self.last_seen = time.time()
|
||||
self.prev_seen = new.prev_seen
|
||||
self.first_met = new.first_met
|
||||
self.encounters = new.encounters
|
||||
|
||||
def inactive_for(self):
|
||||
return time.time() - self.last_seen
|
||||
|
||||
def _adv_field(self, name, default='???'):
|
||||
return self.adv[name] if name in self.adv else default
|
||||
def first_encounter(self):
|
||||
return self.encounters == 1
|
||||
|
||||
def days_since_first_met(self):
|
||||
return (datetime.datetime.now() - self.first_met).days
|
||||
|
||||
def face(self):
|
||||
return self._adv_field('face', default=faces.FRIEND)
|
||||
return self.adv.get('face', faces.FRIEND)
|
||||
|
||||
def name(self):
|
||||
return self._adv_field('name')
|
||||
return self.adv.get('name')
|
||||
|
||||
def identity(self):
|
||||
return self._adv_field('identity')
|
||||
return self.adv.get('identity')
|
||||
|
||||
def version(self):
|
||||
return self._adv_field('version')
|
||||
return self.adv.get('version')
|
||||
|
||||
def pwnd_run(self):
|
||||
return int(self._adv_field('pwnd_run', default=0))
|
||||
return int(self.adv.get('pwnd_run', 0))
|
||||
|
||||
def pwnd_total(self):
|
||||
return int(self._adv_field('pwnd_tot', default=0))
|
||||
return int(self.adv.get('pwnd_tot', 0))
|
||||
|
||||
def uptime(self):
|
||||
return self._adv_field('uptime', default=0)
|
||||
return self.adv.get('uptime', 0)
|
||||
|
||||
def epoch(self):
|
||||
return self._adv_field('epoch', default=0)
|
||||
return self.adv.get('epoch', 0)
|
||||
|
||||
def full_name(self):
|
||||
return '%s@%s' % (self.name(), self.identity())
|
||||
|
||||
def is_closer(self, other):
|
||||
return self.rssi > other.rssi
|
||||
return self.rssi > other.rssi
|
@ -53,6 +53,14 @@ class AsyncAdvertiser(object):
|
||||
self._advertisement['face'] = new
|
||||
grid.set_advertisement_data(self._advertisement)
|
||||
|
||||
def _on_new_peer(self, peer):
|
||||
self._view.on_new_peer(peer)
|
||||
plugins.on('peer_detected', self, peer)
|
||||
|
||||
def _on_lost_peer(self, peer):
|
||||
self._view.on_lost_peer(peer)
|
||||
plugins.on('peer_lost', self, peer)
|
||||
|
||||
def _adv_poller(self):
|
||||
while True:
|
||||
logging.debug("polling pwngrid-peer for peers ...")
|
||||
@ -72,24 +80,22 @@ class AsyncAdvertiser(object):
|
||||
to_delete = []
|
||||
for ident, peer in self._peers.items():
|
||||
if ident not in new_peers:
|
||||
self._view.on_lost_peer(peer)
|
||||
plugins.on('peer_lost', self, peer)
|
||||
to_delete.append(ident)
|
||||
|
||||
for ident in to_delete:
|
||||
self._on_lost_peer(peer)
|
||||
del self._peers[ident]
|
||||
|
||||
for ident, peer in new_peers.items():
|
||||
# check who's new
|
||||
if ident not in self._peers:
|
||||
self._peers[ident] = peer
|
||||
self._view.on_new_peer(peer)
|
||||
plugins.on('peer_detected', self, peer)
|
||||
self._on_new_peer(peer)
|
||||
# update the rest
|
||||
else:
|
||||
self._peers[ident].update(peer)
|
||||
|
||||
except Exception as e:
|
||||
logging.exception("error while polling pwngrid-peer")
|
||||
logging.warning("error while polling pwngrid-peer: %s" % e)
|
||||
|
||||
time.sleep(1)
|
||||
|
@ -10,6 +10,7 @@ FILES_TO_BACKUP=(
|
||||
/root/brain.json
|
||||
/root/.api-report.json
|
||||
/root/handshakes
|
||||
/root/peers
|
||||
/etc/pwnagotchi/
|
||||
/var/log/pwnagotchi.log
|
||||
)
|
||||
|
Loading…
x
Reference in New Issue
Block a user