Use server-side filtering when fetching transmitter success rates

merge-requests/1/head
Fabian P. Schmidt 2018-12-02 17:05:50 +01:00
parent 511bf03ad6
commit f0c2228d65
2 changed files with 28 additions and 37 deletions

View File

@ -12,11 +12,13 @@ import glob
import lxml.html import lxml.html
import argparse import argparse
import logging import logging
from utils import get_active_transmitter_info, DB_BASE_URL from utils import get_active_transmitter_info, \
get_transmitter_stats, \
DB_BASE_URL, \
NETWORK_BASE_URL
_LOG_LEVEL_STRINGS = ['CRITICAL', 'ERROR', 'WARNING', 'INFO', 'DEBUG'] _LOG_LEVEL_STRINGS = ['CRITICAL', 'ERROR', 'WARNING', 'INFO', 'DEBUG']
NETWORK_BASE_URL = 'https://network.satnogs.org/api'
class twolineelement: class twolineelement:
"""TLE class""" """TLE class"""
@ -296,26 +298,6 @@ def schedule_observation(
session.post(obsURL, data=form, headers={'referer': obsURL}) session.post(obsURL, data=form, headers={'referer': obsURL})
def get_transmitter_success_rate(norad, uuid):
logging.debug("Requesting transmitter success rates for satellite %d" % norad)
transmitters = requests.get(
"https://network.satnogs.org/transmitters/" +
str(norad)).json()["transmitters"]
success_rate = 0
good_count = 0
data_count = 0
for transmitter in transmitters:
logging.debug("Fetching transmitter %s success rates" % transmitter["uuid"])
if transmitter["uuid"] == uuid:
success_rate = transmitter["success_rate"]
good_count = transmitter["good_count"]
data_count = transmitter["data_count"]
break
logging.debug("Transmitter success rates for satellite %d received!" % norad)
return success_rate, good_count, data_count
def _log_level_string_to_int(log_level_string): def _log_level_string_to_int(log_level_string):
if log_level_string not in _LOG_LEVEL_STRINGS: if log_level_string not in _LOG_LEVEL_STRINGS:
message = 'invalid choice: {0} (choose from {1})'.format(log_level_string, message = 'invalid choice: {0} (choose from {1})'.format(log_level_string,
@ -420,12 +402,15 @@ if __name__ == "__main__":
fp.write(tnow.strftime("%Y-%m-%dT%H:%M:%S") + "\n") fp.write(tnow.strftime("%Y-%m-%dT%H:%M:%S") + "\n")
# Get active transmitters in frequency range of each antenna # Get active transmitters in frequency range of each antenna
transmitters = [] transmitters = {}
for antenna in ground_station['antenna']: for antenna in ground_station['antenna']:
transmitters.extend( for transmitter in get_active_transmitter_info(antenna["frequency"],
get_active_transmitter_info( antenna["frequency_max"]):
antenna["frequency"], transmitters[transmitter['uuid']] = transmitter
antenna["frequency_max"]))
# Get NORAD IDs
norad_cat_ids = sorted(
set([transmitter["norad_cat_id"] for transmitter in transmitters.values()]))
# Store transmitters # Store transmitters
fp = open( fp = open(
@ -435,23 +420,22 @@ if __name__ == "__main__":
ground_station_id), ground_station_id),
"w") "w")
logging.info("Requesting transmitter success rates.") logging.info("Requesting transmitter success rates.")
for transmitter in transmitters: transmitters_stats = get_transmitter_stats()
success_rate, good_count, data_count = get_transmitter_success_rate( for transmitter in transmitters_stats:
transmitter["norad_cat_id"], transmitter["uuid"]) if not transmitter['uuid'] in transmitters.keys():
pass
fp.write( fp.write(
"%05d %s %d %d %d\n" % "%05d %s %d %d %d\n" %
(transmitter["norad_cat_id"], (transmitter["norad_cat_id"],
transmitter["uuid"], transmitter["uuid"],
success_rate, transmitter["success_rate"],
good_count, transmitter["good_count"],
data_count)) transmitter["data_count"]))
logging.info("Transmitter success rates received!") logging.info("Transmitter success rates received!")
fp.close() fp.close()
# Get NORAD IDs
norad_cat_ids = sorted(
set([transmitter["norad_cat_id"] for transmitter in transmitters]))
# Get TLEs # Get TLEs
tles = fetch_tles(norad_cat_ids) tles = fetch_tles(norad_cat_ids)

View File

@ -2,6 +2,7 @@ import requests
import logging import logging
DB_BASE_URL = 'https://db.satnogs.org/api' DB_BASE_URL = 'https://db.satnogs.org/api'
NETWORK_BASE_URL = 'https://network.satnogs.org/api'
def get_active_transmitter_info(fmin, fmax): def get_active_transmitter_info(fmin, fmax):
@ -20,3 +21,9 @@ def get_active_transmitter_info(fmin, fmax):
transmitters.append(transmitter) transmitters.append(transmitter)
logging.info("Transmitters filtered based on ground station capability.") logging.info("Transmitters filtered based on ground station capability.")
return transmitters return transmitters
def get_transmitter_stats():
logging.debug("Requesting transmitter success rates for all satellite")
transmitters = requests.get('{}/transmitters/'.format(NETWORK_BASE_URL))
return transmitters.json()