Merge branch 'pr/transmitter_handling' into 'master'
Use server-side filtering when fetching transmitter success rates See merge request cgbsat/auto-scheduler!5merge-requests/1/head
commit
dde72b7f45
|
@ -6,17 +6,20 @@ import ephem
|
|||
import math
|
||||
import random
|
||||
from datetime import datetime, timedelta
|
||||
import itertools
|
||||
from satellite_tle import fetch_tles
|
||||
import os
|
||||
import glob
|
||||
import lxml.html
|
||||
import argparse
|
||||
import logging
|
||||
from utils import get_active_transmitter_info, \
|
||||
get_transmitter_stats, \
|
||||
DB_BASE_URL, \
|
||||
NETWORK_BASE_URL
|
||||
|
||||
|
||||
_LOG_LEVEL_STRINGS = ['CRITICAL', 'ERROR', 'WARNING', 'INFO', 'DEBUG']
|
||||
|
||||
|
||||
class twolineelement:
|
||||
"""TLE class"""
|
||||
|
||||
|
@ -64,9 +67,9 @@ def get_scheduled_passes_from_network(ground_station, tmin, tmax):
|
|||
logging.info("Requesting scheduled passes for ground station %d" % ground_station)
|
||||
while True:
|
||||
if start:
|
||||
r = client.get(
|
||||
"https://network.satnogs.org/api/observations/?ground_station=%d" %
|
||||
ground_station)
|
||||
r = client.get('{}/observations/?ground_station={:d}'.format(
|
||||
NETWORK_BASE_URL,
|
||||
ground_station))
|
||||
start = False
|
||||
else:
|
||||
nextpage = r.links.get("next")
|
||||
|
@ -245,7 +248,9 @@ def get_groundstation_info(ground_station_id):
|
|||
|
||||
# Loop
|
||||
found = False
|
||||
r = client.get("https://network.satnogs.org/api/stations/?id=%d" % ground_station_id)
|
||||
r = client.get("{}/stations/?id={:d}".format(
|
||||
NETWORK_BASE_URL,
|
||||
ground_station_id))
|
||||
for o in r.json():
|
||||
if o['id'] == ground_station_id:
|
||||
found = True
|
||||
|
@ -258,25 +263,6 @@ def get_groundstation_info(ground_station_id):
|
|||
return {}
|
||||
|
||||
|
||||
def get_active_transmitter_info(fmin, fmax):
|
||||
# Open session
|
||||
logging.info("Fetching transmitter information from DB.")
|
||||
client = requests.session()
|
||||
r = client.get("https://db.satnogs.org/api/transmitters")
|
||||
logging.info("Transmitters received!")
|
||||
|
||||
# Loop
|
||||
transmitters = []
|
||||
for o in r.json():
|
||||
if o["downlink_low"]:
|
||||
if o["alive"] and o["downlink_low"] > fmin and o["downlink_low"] <= fmax:
|
||||
transmitter = {"norad_cat_id": o["norad_cat_id"],
|
||||
"uuid": o["uuid"]}
|
||||
transmitters.append(transmitter)
|
||||
logging.info("Transmitters filtered based on ground station capability.")
|
||||
return transmitters
|
||||
|
||||
|
||||
def get_last_update(fname):
|
||||
try:
|
||||
fp = open(fname, "r")
|
||||
|
@ -312,26 +298,6 @@ def schedule_observation(
|
|||
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):
|
||||
if log_level_string not in _LOG_LEVEL_STRINGS:
|
||||
message = 'invalid choice: {0} (choose from {1})'.format(log_level_string,
|
||||
|
@ -436,13 +402,15 @@ if __name__ == "__main__":
|
|||
fp.write(tnow.strftime("%Y-%m-%dT%H:%M:%S") + "\n")
|
||||
|
||||
# Get active transmitters in frequency range of each antenna
|
||||
transmitters = []
|
||||
transmitters = {}
|
||||
for antenna in ground_station['antenna']:
|
||||
transmitters.append(
|
||||
get_active_transmitter_info(
|
||||
antenna["frequency"],
|
||||
antenna["frequency_max"]))
|
||||
transmitters = list(itertools.chain.from_iterable(transmitters))
|
||||
for transmitter in get_active_transmitter_info(antenna["frequency"],
|
||||
antenna["frequency_max"]):
|
||||
transmitters[transmitter['uuid']] = transmitter
|
||||
|
||||
# Get NORAD IDs
|
||||
norad_cat_ids = sorted(
|
||||
set([transmitter["norad_cat_id"] for transmitter in transmitters.values()]))
|
||||
|
||||
# Store transmitters
|
||||
fp = open(
|
||||
|
@ -452,23 +420,22 @@ if __name__ == "__main__":
|
|||
ground_station_id),
|
||||
"w")
|
||||
logging.info("Requesting transmitter success rates.")
|
||||
for transmitter in transmitters:
|
||||
success_rate, good_count, data_count = get_transmitter_success_rate(
|
||||
transmitter["norad_cat_id"], transmitter["uuid"])
|
||||
transmitters_stats = get_transmitter_stats()
|
||||
for transmitter in transmitters_stats:
|
||||
if not transmitter['uuid'] in transmitters.keys():
|
||||
pass
|
||||
|
||||
fp.write(
|
||||
"%05d %s %d %d %d\n" %
|
||||
(transmitter["norad_cat_id"],
|
||||
transmitter["uuid"],
|
||||
success_rate,
|
||||
good_count,
|
||||
data_count))
|
||||
transmitter["success_rate"],
|
||||
transmitter["good_count"],
|
||||
transmitter["data_count"]))
|
||||
|
||||
logging.info("Transmitter success rates received!")
|
||||
fp.close()
|
||||
|
||||
# Get NORAD IDs
|
||||
norad_cat_ids = sorted(
|
||||
set([transmitter["norad_cat_id"] for transmitter in transmitters]))
|
||||
|
||||
# Get TLEs
|
||||
tles = fetch_tles(norad_cat_ids)
|
||||
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
import requests
|
||||
import logging
|
||||
|
||||
DB_BASE_URL = 'https://db.satnogs.org/api'
|
||||
NETWORK_BASE_URL = 'https://network.satnogs.org/api'
|
||||
|
||||
|
||||
def get_active_transmitter_info(fmin, fmax):
|
||||
# Open session
|
||||
logging.info("Fetching transmitter information from DB.")
|
||||
r = requests.get('{}/transmitters'.format(DB_BASE_URL))
|
||||
logging.info("Transmitters received!")
|
||||
|
||||
# Loop
|
||||
transmitters = []
|
||||
for o in r.json():
|
||||
if o["downlink_low"]:
|
||||
if o["alive"] and o["downlink_low"] > fmin and o["downlink_low"] <= fmax:
|
||||
transmitter = {"norad_cat_id": o["norad_cat_id"],
|
||||
"uuid": o["uuid"]}
|
||||
transmitters.append(transmitter)
|
||||
logging.info("Transmitters filtered based on ground station capability.")
|
||||
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()
|
Loading…
Reference in New Issue