Giter VIP home page Giter VIP logo

habitat's Introduction

habitat - Next Generation High Altitude Balloon Tracking System

habitat is a web application for tracking the flight path of high altitude balloons, relying on a network of users with radios sending in received telemetry strings which are parsed into position information and displayed on maps.

Written by various UKHAS members, see AUTHORS.

Dependencies

    $ pip install -r requirements.txt

    # for testing
    $ pip install nose mox

Installation

habitat isn't really ready to be installed just yet. Watch this space!

Project Homepage

License

habitat is licensed under the GNU GPLv3, see LICENSE.

habitat's People

Contributors

adamgreig avatar danielrichman avatar danielsaul avatar darksidelemm avatar priyeshpatel avatar rossengeorgiev avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

habitat's Issues

Race condition in SCGI.py

FAIL: test_habitat.test_http.test_scgi.TestSCGIStartupShutdown.test_shutdown_tolerates_stuck_sockets
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/local/lib/python2.6/dist-packages/nose-0.11.4-py2.6.egg/nose/case.py", line 186, in runTest
    self.test(*self.arg)
  File "/home/adam/Projects/habitat/tests/test_habitat/test_http/test_scgi.py", line 135, in test_shutdown_tolerates_stuck_sockets
    threading_checks.check_threads(live=0)
  File "/home/adam/Projects/habitat/tests/test_habitat/lib/threading_checks.py", line 35, in check_threads
    assert len(filter(lambda x: x.isAlive(), a)) == live
AssertionError: 
-------------------- >> begin captured logging << --------------------
habitat.http: ERROR: IOError while handling SCGI request
Traceback (most recent call last):
  File "/home/adam/Projects/habitat/habitat/http.py", line 257, in handle
    self.read_scgi_req()
  File "/home/adam/Projects/habitat/habitat/http.py", line 276, in read_scgi_req
    self.read_more()
  File "/home/adam/Projects/habitat/habitat/http.py", line 310, in read_more
    new_data = self.request.recv(4096)
timeout: timed out
--------------------- >> end captured logging << ---------------------```

make archivesink threaded

archivesink should thread so that it can return quickly from message() and have the thread do the io waiting on couch. couch takes parallel write requests way better anyway, so this is good stuff all around.

perhaps have a pool of threads for couch? or alternatively just spawn a new thread for each message.

flight doc related views

  • payload_config: for the parser. Sort: [callsign, '{un,}approved', end] approved will sort before unapproved and will be used first.
  • flights: for the web ui flight list and dl-fldigi. Sort: ['{un,}approved', 'end'], allowing guis to place dev docs in another tab or exclude in download to save bandwidth.

Make garbage collector

  • removes unapproved docs older than a few months but not if it is the most recent doc for any of the callsigns inside.
  • removes unreferenced listener info, listener telemetry, payload telemetry

level=SILENT for logging breaks stuff

would work in python3.1 though, instead do this

import logging
class NullHandler(logging.Handler):
def emit(self, record):
pass

then use NullHandler rather than logging.NullHandler

Web interface to clone/copy flight docs

  • e.g., enter callsign or log in, get list of previously created flight docs
  • if logged in, then don't show testing docs created by other users to avoid accidental selection
  • perhaps warn if a doc will be shadowed by another, approved, doc (conflict)
  • admin interface to approve docs.

Add approved flag to flight docs

unapproved docs are:

  • hidden in the web ui (live, archive) by default
  • hidden in dl-fldigi by default (have a [X] show dev flights checkbox)
  • considered last for parsing, to prevent abuse.

dangerous jsoncpp behaviour

jsoncpp uses assert dangerously, and will abort if you attempt to access a non-object as if it were an object (i.e., a = [2, 3, 4]; a[“what”] = ) -- this could be bad. Maybe extra error checking is required.

Finish tidying up documentation

  • tidy up the hand-written docs in /docs
  • RST and link docs where appropriate
  • remove references to config couch docs (that are now in config.yml)

level= some random crap breaks stuff

File "/home/adam/Projects/habitat_load_test/habitat/habitat/main.py", line 191, in get_options_parse_log_level
parser.error("invalid value for "{0}"".format(levelarg))
NameError: global name 'levelarg' is not defined

figure out how to deal with strings where there is no gps lock

  • some payloads appear to send 0,0,0 (lat, lon, alt) so the string parses but the point is clearly invalid and messes up the tracker
  • some payloads send ,,, so the string does not parse
  • curerntly spacenear.us prunes 0,0 points; the habitat web gui demo does this too (hacky addition)

@danielrichman 's suggestion:

  • add a fix invalid key; doc[“data”][“fix_invalid”]. Payloads that send a fix valid field can be set from this and the points therefore ignored. Absence of key assumes valid fix.
  • perhaps allow payloads to send either empty strings or a special character ‘!’ or something to set the fix_invalid field to false? This is a slight pain to implement.
  • add a common post filter that detects if lat == lon == 0.0000 and sets fix_invalid = false, for use on payloads that do not do either of the above
  • encourage people to do one of the two first options (or something else, better?)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.