Skip to content

Commit

Permalink
Merge pull request #32 from HumanDynamics/develop
Browse files Browse the repository at this point in the history
Fix several small issues
Closes #30 
Closes #31
  • Loading branch information
OrenLederman authored May 15, 2018
2 parents 9517354 + 6b0b942 commit 0f0e2f1
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 18 deletions.
16 changes: 11 additions & 5 deletions src/badge_hub.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
from requests.exceptions import RequestException
import glob
import traceback
import random

from badge import *
from badge_discoverer import BadgeDiscoverer, BeaconDiscoverer
Expand Down Expand Up @@ -440,6 +441,9 @@ def pull_devices(mgr, mgrb, start_recording):
logger.info("Scanning for members...")
scanned_devices = scan_for_devices(mgr.badges.keys())

# Randomly shuffle devices
random.shuffle(scanned_devices)

# iterate before the actual data collection loop just to offload
# voltages to the server (and update heartbeat on server)
for device in scanned_devices:
Expand All @@ -452,8 +456,8 @@ def pull_devices(mgr, mgrb, start_recording):
observed_project_id = device['device_info']['adv_payload']['project_id']
if b.observed_id != b.badge_id or b.project_id != observed_project_id:
logger.debug("Warning! Observed IDs do not match server settings. "
"member_id:{} observed id:{}. project_id: {} observed id:{}"
.format(b.observed_id,b.badge_id,b.project_id,observed_project_id))
"Observed: member_id:{}, project_id:{}. Expected: member_id:{}. project_id: {}"
.format(b.observed_id,observed_project_id,b.badge_id,b.project_id))

b.last_seen_ts = time.time()

Expand All @@ -472,10 +476,12 @@ def pull_devices(mgr, mgrb, start_recording):

time.sleep(2) # requires sleep between devices


logger.info("Scanning for beacons...")
scanned_beacons = scan_for_bc_devices(mgrb.beacons.keys())

# Randomly shuffle devices
random.shuffle(scanned_beacons)

# iterate before the actual data collection loop just to offload
# voltages to the server (and update heartbeat on server)
for device in scanned_beacons:
Expand All @@ -486,8 +492,8 @@ def pull_devices(mgr, mgrb, start_recording):
observed_project_id = device['device_info']['adv_payload']['project_id']
if bcn.observed_id != bcn.badge_id or bcn.project_id != observed_project_id:
logger.debug("Warning! Observed IDs do not match server settings. "
"beacon_id:{} observed id:{}. project_id: {} observed id:{}"
.format(bcn.observed_id,bcn.badge_id,bcn.project_id,observed_project_id))
"Observed: beacon_id:{}, project_id:{}. Expected: beacon_id:{}. project_id: {}"
.format(bcn.observed_id,observed_project_id,bcn.badge_id,bcn.project_id))

bcn.last_seen_ts = time.time()

Expand Down
12 changes: 8 additions & 4 deletions src/badge_manager_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
import traceback

class BadgeManagerServer:
DEFAULT_TIMEOUT = (9.05, 15)

def __init__(self, logger):
self._badges = None
self.logger = logger
Expand Down Expand Up @@ -40,7 +42,7 @@ def _read_badges_list_from_server(self, retry=True, retry_delay_sec=5):
while not done:
try:
self.logger.info("Requesting devices from server...")
response = requests.get(BADGES_ENDPOINT, headers=request_headers())
response = requests.get(BADGES_ENDPOINT, headers=request_headers(), timeout=self.DEFAULT_TIMEOUT)
if response.ok:
self.logger.info("Updating devices list ({})...".format(len(response.json())))
for d in response.json():
Expand Down Expand Up @@ -73,7 +75,7 @@ def _read_badge_from_server(self, badge_key, retry=False, retry_delay_sec=5):
while not done:
try:
self.logger.info("Requesting device {} from server...".format(badge_key))
response = requests.get(BADGE_ENDPOINT(badge_key), headers=request_headers())
response = requests.get(BADGE_ENDPOINT(badge_key), headers=request_headers(), timeout=self.DEFAULT_TIMEOUT)
if response.ok:
#self.logger.debug("Received ({})...".format(response.json()))
return self._jason_badge_to_object(response.json())
Expand Down Expand Up @@ -191,7 +193,8 @@ def send_badge(self, mac):
}

self.logger.debug("Sending update badge data to server, badge {} : {}".format(badge.key, data))
response = requests.patch(BADGE_ENDPOINT(badge.key), data=data, headers=request_headers())
response = requests.patch(
BADGE_ENDPOINT(badge.key), data=data, headers=request_headers(), timeout=self.DEFAULT_TIMEOUT)
if response.ok is False:
if response.status_code == 400:
self.logger.debug("Server had more recent date, badge {} : {}".format(badge.key, response.text))
Expand All @@ -217,7 +220,8 @@ def create_badge(self, name, email, mac ):
}

self.logger.info("Creating new badge : {}".format(data))
response = requests.post(BADGES_ENDPOINT, data=data, headers=request_headers())
response = requests.post(
BADGES_ENDPOINT, data=data, headers=request_headers(), timeout=self.DEFAULT_TIMEOUT)
if response.ok is False:
s = traceback.format_exc()
raise Exception('Error creating badge {}. Status: {}, Error: {}, {}'.format(data, response.status_code,
Expand Down
12 changes: 8 additions & 4 deletions src/beacon_manager_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@


class BeaconManagerServer:
DEFAULT_TIMEOUT = (9.05, 15)

def __init__(self, logger):
self._beacons = None
Expand Down Expand Up @@ -37,7 +38,7 @@ def _read_beacons_list_from_server(self, retry=True, retry_delay_sec=5):
while not done:
try:
self.logger.info("Requesting devices from server...")
response = requests.get(BEACONS_ENDPOINT, headers=request_headers())
response = requests.get(BEACONS_ENDPOINT, headers=request_headers(), timeout=self.DEFAULT_TIMEOUT)
if response.ok:
self.logger.info("Updating beacons list ({})...".format(len(response.json())))
for d in response.json():
Expand Down Expand Up @@ -69,7 +70,8 @@ def _read_beacon_from_server(self, beacon_key, retry=False, retry_delay_sec=5):
while not done:
try:
self.logger.info("Requesting device {} from server...".format(beacon_key))
response = requests.get(BEACON_ENDPOINT(beacon_key), headers=request_headers())
response = requests.get(
BEACON_ENDPOINT(beacon_key), headers=request_headers(), timeout=self.DEFAULT_TIMEOUT)
if response.ok:
#self.logger.debug("Received ({})...".format(response.json()))
return self._jason_beacon_to_object(response.json())
Expand Down Expand Up @@ -143,7 +145,8 @@ def send_beacon(self, mac):
}

self.logger.debug("Sending update beacon data to server, beacon {} : {}".format(beacon.key, data))
response = requests.patch(BEACON_ENDPOINT(beacon.key), data=data, headers=request_headers())
response = requests.patch(
BEACON_ENDPOINT(beacon.key), data=data, headers=request_headers(), timeout=self.DEFAULT_TIMEOUT)
if response.ok is False:
if response.status_code == 400:
self.logger.debug("Server had more recent date, beacon {} : {}".format(beacon.key, response.text))
Expand Down Expand Up @@ -171,7 +174,8 @@ def create_beacon(self, name, mac , beacon_id ,project_id):
}

self.logger.info("Creating new beacon : {}".format(data))
response = requests.post(BEACONS_ENDPOINT, data=data, headers=request_headers())
response = requests.post(
BEACONS_ENDPOINT, data=data, headers=request_headers(), timeout=self.DEFAULT_TIMEOUT)
if response.ok is False:
s = traceback.format_exc()
raise Exception('Error creating beacon {}. Status: {}, Error: {}, {}'.format(data, response.status_code,
Expand Down
11 changes: 6 additions & 5 deletions src/hub_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@
from urllib import quote_plus

SLEEP_WAIT_SEC = 60 # 1 minute

LONG_TIMEOUT = (9.05, 900)
DEFAULT_TIMEOUT = (9.05, 15)

def get_uuid():
"""
Expand Down Expand Up @@ -54,7 +55,7 @@ def send_hub_ip():
}

logger.debug("Sending update to server: {}".format(data))
response = requests.patch(HUB_ENDPOINT(encoded_hostname), data=data)
response = requests.patch(HUB_ENDPOINT(encoded_hostname), data=data, timeout=DEFAULT_TIMEOUT)
if response.ok is False:
raise Exception('Server sent a {} status code instead of 200: {}'.format(response.status_code,
response.text))
Expand Down Expand Up @@ -86,7 +87,7 @@ def _read_hubs_list_from_server(logger, retry=True, retry_delay_sec=5):
while not done:
try:
logger.info("Requesting devices from server...")
response = requests.get(HUBS_ENDPOINT)
response = requests.get(HUBS_ENDPOINT, timeout=DEFAULT_TIMEOUT)
if response.ok:
logger.info("Updating hubs list ({})...".format(len(response.json())))
for d in response.json():
Expand All @@ -113,7 +114,7 @@ def pull_hubs_list(logger):


def _get_project_id(logger):
resp = requests.request("GET", PROJECTS_ENDPOINT, headers=request_headers())
resp = requests.request("GET", PROJECTS_ENDPOINT, headers=request_headers(), timeout=DEFAULT_TIMEOUT)
if resp.status_code == 200:
return resp.json()["key"]
else:
Expand Down Expand Up @@ -143,7 +144,7 @@ def send_data_to_server(logger, data_type, data):
"chunks": data
}
url = DATA_ENDPOINT(project_id)
response = requests.request("POST", url, data=json.dumps(payload), headers=headers)
response = requests.request("POST", url, data=json.dumps(payload), headers=headers, timeout=LONG_TIMEOUT)
response.raise_for_status()
return response.json()["chunks_written"]

Expand Down

0 comments on commit 0f0e2f1

Please sign in to comment.