Merge pull request #13 from kerel-fs/fix/dependencies

Fix dependencies; add pep8 check; move gateway to a separate file.
pull/17/head
Fabian P. Schmidt 2015-11-29 22:49:50 +01:00
commit 76ec41a2ae
8 zmienionych plików z 104 dodań i 88 usunięć

Wyświetl plik

@ -3,6 +3,9 @@ language: python
python:
- 3.4
before_script:
- "pep8 --ignore=E501 --exclude=logbook.py,utils.py ogn"
script:
- nosetests --with-coverage --cover-package=ogn

Wyświetl plik

@ -28,6 +28,7 @@ $ apt-get install redis-server
3. Create database
```
$ ./manage.py db.init
$ alembic stamp head
```
## Running the aprs client and task server

Wyświetl plik

@ -1,15 +1,14 @@
from ogn.model import Base
from ogn.collect.fetchddb import update_ddb_from_ogn, update_ddb_from_file
from ogn.commands.dbutils import engine
from manager import Manager
manager = Manager()
from ogn.collect.fetchddb import update_ddb_from_ogn, update_ddb_from_file
@manager.command
def init():
"""Initialize the database."""
from ogn.commands.dbutils import engine
Base.metadata.create_all(engine)
print("Done.")

Wyświetl plik

@ -1,26 +1,26 @@
from datetime import datetime, timedelta
from sqlalchemy.sql import func
from sqlalchemy import distinct, and_
from ogn.model import ReceiverBeacon, Receiver
from ogn.commands.dbutils import session
back_24h = datetime.utcnow() - timedelta(days=1)
receiver_messages_per_24h = 24 * 60 / 5
from manager import Manager
manager = Manager()
receiver_beacons_per_day = 24 * 60 / 5
@manager.command
def list_all():
"""Show a list of all receivers."""
sq = session.query(distinct(ReceiverBeacon.name).label('name'), func.max(ReceiverBeacon.timestamp).label('lastseen'), func.count(ReceiverBeacon.name).label('messages_count')).\
filter(ReceiverBeacon.timestamp > back_24h).\
group_by(ReceiverBeacon.name).\
subquery()
timestamp_24h_ago = datetime.utcnow() - timedelta(days=1)
sq = session.query(distinct(ReceiverBeacon.name).label('name'),
func.max(ReceiverBeacon.timestamp).label('lastseen'),
func.count(ReceiverBeacon.name).label('messages_count')
).filter(ReceiverBeacon.timestamp > timestamp_24h_ago).group_by(ReceiverBeacon.name).subquery()
query = session.query(Receiver, sq.c.messages_count).\
filter(Receiver.name == sq.c.name).\
@ -28,14 +28,21 @@ def list_all():
print('--- Receivers ---')
for [receiver, messages_count] in query.all():
print('%9s (%2s): %3d%% avail, %s, %s ' % (receiver.name, receiver.country_code, 100.0*float(messages_count/receiver_messages_per_24h), receiver.version, receiver.platform))
print('%9s (%2s): %3d%% avail, %s, %s ' % (receiver.name,
receiver.country_code,
100.0 * float(messages_count / receiver_beacons_per_day),
receiver.version,
receiver.platform))
@manager.command
def software_stats():
"""Show some statistics of receiver software."""
timestamp_24h_ago = datetime.utcnow() - timedelta(days=1)
sq = session.query(ReceiverBeacon.name, func.max(ReceiverBeacon.timestamp).label('lastseen')).\
filter(ReceiverBeacon.timestamp > back_24h).\
filter(ReceiverBeacon.timestamp > timestamp_24h_ago).\
group_by(ReceiverBeacon.name).\
subquery()
@ -52,8 +59,11 @@ def software_stats():
@manager.command
def hardware_stats():
"""Show some statistics of receiver hardware."""
timestamp_24h_ago = datetime.utcnow() - timedelta(days=1)
sq = session.query(ReceiverBeacon.name, func.max(ReceiverBeacon.timestamp).label('lastseen')).\
filter(ReceiverBeacon.timestamp > back_24h).\
filter(ReceiverBeacon.timestamp > timestamp_24h_ago).\
group_by(ReceiverBeacon.name).\
subquery()

Wyświetl plik

@ -1,69 +0,0 @@
import socket
from time import time
from ogn.gateway import settings
from ogn.commands.dbutils import session
from ogn.aprs_parser import parse_aprs
from ogn.aprs_utils import create_aprs_login
from ogn.exceptions import AprsParseError, OgnParseError
from ogn.logger import logger
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from ogn.model import Base
class ognGateway:
def __init__(self):
pass
def connect_db(self):
self.session = session
def connect(self, aprs_user):
# create socket, connect to server, login and make a file object associated with the socket
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
self.sock.connect((settings.APRS_SERVER_HOST, settings.APRS_SERVER_PORT))
login = create_aprs_login(aprs_user, -1, settings.APRS_APP_NAME, settings.APRS_APP_VER, settings.APRS_FILTER)
self.sock.send(login.encode())
self.sock_file = self.sock.makefile('rw')
def disconnect(self):
# close everything
self.sock.shutdown(0)
self.sock.close()
def run(self):
keepalive_time = time()
while True:
if time() - keepalive_time > settings.APRS_KEEPALIVE_TIME:
logger.debug('Sending keepalive')
self.sock.send("#keepalive".encode())
keepalive_time = time()
# Read packet string from socket
packet_str = self.sock_file.readline().strip()
# A zero length line should not be return if keepalives are being sent
# A zero length line will only be returned after ~30m if keepalives are not sent
if len(packet_str) == 0:
logger.warning('Read returns zero length string. Failure. Orderly closeout')
break
self.proceed_line(packet_str)
def proceed_line(self, line):
try:
beacon = parse_aprs(line)
except AprsParseError:
logger.error('AprsParseError while parsing line: %s' % line, exc_info=True)
return
except OgnParseError:
logger.error('OgnParseError while parsing line: ' % line, exc_info=True)
return
if beacon is not None:
self.session.add(beacon)
self.session.commit()

Wyświetl plik

@ -0,0 +1,69 @@
import socket
from time import time
from ogn.gateway import settings
from ogn.commands.dbutils import session
from ogn.aprs_parser import parse_aprs
from ogn.aprs_utils import create_aprs_login
from ogn.exceptions import AprsParseError, OgnParseError
from ogn.logger import logger
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from ogn.model import Base
class ognGateway:
def __init__(self):
pass
def connect_db(self):
self.session = session
def connect(self, aprs_user):
# create socket, connect to server, login and make a file object associated with the socket
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
self.sock.connect((settings.APRS_SERVER_HOST, settings.APRS_SERVER_PORT))
login = create_aprs_login(aprs_user, -1, settings.APRS_APP_NAME, settings.APRS_APP_VER, settings.APRS_FILTER)
self.sock.send(login.encode())
self.sock_file = self.sock.makefile('rw')
def disconnect(self):
# close everything
self.sock.shutdown(0)
self.sock.close()
def run(self):
keepalive_time = time()
while True:
if time() - keepalive_time > settings.APRS_KEEPALIVE_TIME:
logger.debug('Sending keepalive')
self.sock.send("#keepalive".encode())
keepalive_time = time()
# Read packet string from socket
packet_str = self.sock_file.readline().strip()
# A zero length line should not be return if keepalives are being sent
# A zero length line will only be returned after ~30m if keepalives are not sent
if len(packet_str) == 0:
logger.warning('Read returns zero length string. Failure. Orderly closeout')
break
self.proceed_line(packet_str)
def proceed_line(self, line):
try:
beacon = parse_aprs(line)
except AprsParseError:
logger.error('AprsParseError while parsing line: %s' % line, exc_info=True)
return
except OgnParseError:
logger.error('OgnParseError while parsing line: ' % line, exc_info=True)
return
if beacon is not None:
self.session.add(beacon)
self.session.commit()

Wyświetl plik

@ -1,17 +1,18 @@
import socket
from ogn.gateway import ognGateway
from ogn.gateway.client import ognGateway
from ogn.logger import logger
DB_URI = 'sqlite:///beacons.db'
from manager import Manager
manager = Manager()
DB_URI = 'sqlite:///beacons.db'
@manager.command
def run(aprs_user="anon-dev"):
"""Run the aprs client."""
if len(aprs_user) < 3 or len(aprs_user) > 9:
print("aprs_user must be a string of 3-9 characters")
return

Wyświetl plik

@ -1,6 +1,8 @@
SQLAlchemy==1.0.8
nose==1.3.7
coveralls==0.4.4
pep8==1.6.2
SQLAlchemy==1.0.8
geopy==1.11.0
manage.py==0.2.10
celery[redis]>=3.1,<3.2
alembic==0.8.3