Fix fetching of stats from Network
And various codestyle fixes Signed-off-by: Pierros Papadeas <pierros@papadeas.gr>merge-requests/17/head
parent
11edc9df7b
commit
02ec88ba03
|
@ -72,40 +72,49 @@ def _log_level_string_to_int(log_level_string):
|
||||||
return log_level_int
|
return log_level_int
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
def main():
|
||||||
# Parse arguments
|
# Parse arguments
|
||||||
parser = argparse.ArgumentParser(
|
parser = argparse.ArgumentParser(
|
||||||
description="Automatically schedule observations on a SatNOGS station.")
|
description="Automatically schedule observations on a SatNOGS station.")
|
||||||
parser.add_argument("-s", "--station", help="Ground station ID", type=int)
|
parser.add_argument("-s", "--station", help="Ground station ID", type=int)
|
||||||
parser.add_argument("-t", "--starttime", help="Start time (YYYY-MM-DD HH:MM:SS) [default: now]",
|
parser.add_argument("-t", "--starttime", help="Start time (YYYY-MM-DD HH:MM:SS) [default: now]",
|
||||||
default=datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%S"))
|
default=datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%S"))
|
||||||
parser.add_argument("-d", "--duration", help="Duration to schedule [hours; default 1.0]", type=float, default=1)
|
parser.add_argument("-d", "--duration", help="Duration to schedule [hours; default 1.0]",
|
||||||
parser.add_argument("-m", "--min-horizon", help="Minimum horizon [default 0]", type=float, default=0.)
|
type=float, default=1)
|
||||||
parser.add_argument("-f", "--no-search-transmitters", help="Do not search good transmitters [default searching]",
|
parser.add_argument("-m", "--min-horizon", help="Minimum horizon [default 0]", type=float,
|
||||||
|
default=0.)
|
||||||
|
parser.add_argument("-f", "--no-search-transmitters",
|
||||||
|
help="Do not search good transmitters [default searching]",
|
||||||
dest='search_transmitters', action='store_false')
|
dest='search_transmitters', action='store_false')
|
||||||
parser.set_defaults(search_transmitters=True)
|
parser.set_defaults(search_transmitters=True)
|
||||||
parser.add_argument("-w", "--wait",
|
parser.add_argument("-w", "--wait",
|
||||||
help="Wait time between consecutive observations (for setup and slewing) [seconds; default: 0.0]",
|
help="Wait time between consecutive observations (for setup and slewing)" +
|
||||||
type=float, default=0)
|
" [seconds; default: 0.0]", type=float, default=0)
|
||||||
parser.add_argument("-u", "--username", help="old SatNOGS Network username (NOT the new Auth0 username)")
|
parser.add_argument("-u", "--username",
|
||||||
|
help="old SatNOGS Network username (NOT the new Auth0 username)")
|
||||||
parser.add_argument("-p", "--password", help="old SatNOGS Network password")
|
parser.add_argument("-p", "--password", help="old SatNOGS Network password")
|
||||||
parser.add_argument("-n", "--dryrun", help="Dry run (do not schedule passes)", action="store_true")
|
parser.add_argument("-n", "--dryrun", help="Dry run (do not schedule passes)",
|
||||||
parser.add_argument("-P", "--priorities", help="File with transmitter priorities. Should have columns of the form |NORAD priority UUID| like |43017 0.9 KgazZMKEa74VnquqXLwAvD|. Priority is fractional, one transmitter per line.", default=None)
|
action="store_true")
|
||||||
|
parser.add_argument("-P", "--priorities", help="File with transmitter priorities. Should have" +
|
||||||
|
"columns of the form |NORAD priority UUID| like |43017 0.9" +
|
||||||
|
" KgazZMKEa74VnquqXLwAvD|. Priority is fractional, one transmitter " +
|
||||||
|
"per line.", default=None)
|
||||||
parser.add_argument("-l", "--log-level", default="INFO", dest="log_level",
|
parser.add_argument("-l", "--log-level", default="INFO", dest="log_level",
|
||||||
type=_log_level_string_to_int, nargs="?",
|
type=_log_level_string_to_int, nargs="?",
|
||||||
help="Set the logging output level. {0}".format(_LOG_LEVEL_STRINGS))
|
help="Set the logging output level. {0}".format(_LOG_LEVEL_STRINGS))
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
# Check arguments
|
# Check arguments
|
||||||
if args.station == None:
|
if args.station is None:
|
||||||
parser.print_help()
|
parser.print_help()
|
||||||
sys.exit()
|
sys.exit()
|
||||||
|
|
||||||
# Setting logging level
|
# Setting logging level
|
||||||
numeric_level = args.log_level
|
numeric_level = args.log_level
|
||||||
if not isinstance(numeric_level, int):
|
if not isinstance(numeric_level, int):
|
||||||
raise ValueError("Invalid log level")
|
raise ValueError("Invalid log level")
|
||||||
logging.basicConfig(level=numeric_level, format="%(asctime)s - %(name)s - %(levelname)s - %(message)s")
|
logging.basicConfig(level=numeric_level,
|
||||||
|
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s")
|
||||||
|
|
||||||
# Settings
|
# Settings
|
||||||
ground_station_id = args.station
|
ground_station_id = args.station
|
||||||
|
@ -165,31 +174,32 @@ if __name__ == "__main__":
|
||||||
|
|
||||||
# Get satellites which are alive
|
# Get satellites which are alive
|
||||||
alive_norad_cat_ids = get_satellite_info()
|
alive_norad_cat_ids = get_satellite_info()
|
||||||
|
|
||||||
# Get NORAD IDs
|
# Get NORAD IDs
|
||||||
norad_cat_ids = sorted(
|
norad_cat_ids = sorted(
|
||||||
set([transmitter["norad_cat_id"] for transmitter in transmitters.values()
|
set([transmitter["norad_cat_id"] for transmitter in transmitters.values()
|
||||||
if transmitter["norad_cat_id"] < settings.MAX_NORAD_CAT_ID
|
if transmitter["norad_cat_id"] < settings.MAX_NORAD_CAT_ID and
|
||||||
and transmitter["norad_cat_id"] in alive_norad_cat_ids]))
|
transmitter["norad_cat_id"] in alive_norad_cat_ids]))
|
||||||
|
|
||||||
# Store transmitters
|
# Store transmitters
|
||||||
fp = open(os.path.join(cache_dir, "transmitters_%d.txt" % ground_station_id), "w")
|
fp = open(os.path.join(cache_dir, "transmitters_%d.txt" % ground_station_id), "w")
|
||||||
logging.info("Requesting transmitter success rates.")
|
logging.info("Requesting transmitter success rates.")
|
||||||
transmitters_stats = get_transmitter_stats()
|
transmitters_stats = get_transmitter_stats()
|
||||||
for transmitter in transmitters_stats:
|
for transmitter in transmitters_stats:
|
||||||
|
uuid = transmitter["uuid"]
|
||||||
# Skip absent transmitters
|
# Skip absent transmitters
|
||||||
if not transmitter['uuid'] in transmitters.keys():
|
if uuid not in transmitters.keys():
|
||||||
continue
|
continue
|
||||||
# Skip dead satellites
|
# Skip dead satellites
|
||||||
if transmitter["norad_cat_id"] not in alive_norad_cat_ids:
|
if transmitters[uuid]["norad_cat_id"] not in alive_norad_cat_ids:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
fp.write("%05d %s %d %d %d\n" %
|
fp.write("%05d %s %d %d %d\n" %
|
||||||
(transmitter["norad_cat_id"],
|
(transmitters[uuid]["norad_cat_id"],
|
||||||
transmitter["uuid"],
|
uuid,
|
||||||
transmitter["success_rate"],
|
transmitter["stats"]["success_rate"],
|
||||||
transmitter["good_count"],
|
transmitter["stats"]["good_count"],
|
||||||
transmitter["data_count"]))
|
transmitter["stats"]["total_count"]))
|
||||||
|
|
||||||
logging.info("Transmitter success rates received!")
|
logging.info("Transmitter success rates received!")
|
||||||
fp.close()
|
fp.close()
|
||||||
|
@ -215,7 +225,7 @@ if __name__ == "__main__":
|
||||||
lines = f.readlines()
|
lines = f.readlines()
|
||||||
tles = [twolineelement(lines[i], lines[i + 1], lines[i + 2])
|
tles = [twolineelement(lines[i], lines[i + 1], lines[i + 2])
|
||||||
for i in range(0, len(lines), 3)]
|
for i in range(0, len(lines), 3)]
|
||||||
|
|
||||||
# Read transmitters
|
# Read transmitters
|
||||||
satellites = []
|
satellites = []
|
||||||
with open(os.path.join(cache_dir, "transmitters_%d.txt" % ground_station_id), "r") as f:
|
with open(os.path.join(cache_dir, "transmitters_%d.txt" % ground_station_id), "r") as f:
|
||||||
|
@ -232,14 +242,14 @@ if __name__ == "__main__":
|
||||||
success_rate,
|
success_rate,
|
||||||
good_count,
|
good_count,
|
||||||
data_count))
|
data_count))
|
||||||
|
|
||||||
# Find passes
|
# Find passes
|
||||||
passes = find_passes(satellites, observer, tmin, tmax, minimum_altitude)
|
passes = find_passes(satellites, observer, tmin, tmax, minimum_altitude)
|
||||||
|
|
||||||
# Priorities and favorite transmitters
|
# Priorities and favorite transmitters
|
||||||
# read the following format
|
# read the following format
|
||||||
# 43017 1. KgazZMKEa74VnquqXLwAvD
|
# 43017 1. KgazZMKEa74VnquqXLwAvD
|
||||||
if priority_filename!=None and os.path.exists(priority_filename):
|
if priority_filename is not None and os.path.exists(priority_filename):
|
||||||
priorities, favorite_transmitters = read_priorities_transmitters(priority_filename)
|
priorities, favorite_transmitters = read_priorities_transmitters(priority_filename)
|
||||||
else:
|
else:
|
||||||
priorities, favorite_transmitters = {}, {}
|
priorities, favorite_transmitters = {}, {}
|
||||||
|
@ -308,7 +318,7 @@ if __name__ == "__main__":
|
||||||
satpass['name'].rstrip()))
|
satpass['name'].rstrip()))
|
||||||
if not satpass['scheduled']:
|
if not satpass['scheduled']:
|
||||||
schedule_needed = True
|
schedule_needed = True
|
||||||
|
|
||||||
# Login and schedule passes
|
# Login and schedule passes
|
||||||
if schedule and schedule_needed:
|
if schedule and schedule_needed:
|
||||||
loginUrl = '{}/accounts/login/'.format(settings.NETWORK_BASE_URL) # login URL
|
loginUrl = '{}/accounts/login/'.format(settings.NETWORK_BASE_URL) # login URL
|
||||||
|
@ -354,3 +364,7 @@ if __name__ == "__main__":
|
||||||
satpass['ts'].strftime("%Y-%m-%d %H:%M:%S") + ".000")
|
satpass['ts'].strftime("%Y-%m-%d %H:%M:%S") + ".000")
|
||||||
|
|
||||||
logging.info("All passes are scheduled. Exiting!")
|
logging.info("All passes are scheduled. Exiting!")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
||||||
|
|
6
utils.py
6
utils.py
|
@ -8,6 +8,7 @@ import lxml
|
||||||
import settings
|
import settings
|
||||||
from tqdm import tqdm
|
from tqdm import tqdm
|
||||||
|
|
||||||
|
|
||||||
def get_paginated_endpoint(url, max_entries=None):
|
def get_paginated_endpoint(url, max_entries=None):
|
||||||
r = requests.get(url=url)
|
r = requests.get(url=url)
|
||||||
r.raise_for_status()
|
r.raise_for_status()
|
||||||
|
@ -24,6 +25,7 @@ def get_paginated_endpoint(url, max_entries=None):
|
||||||
|
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
def read_priorities_transmitters(filename):
|
def read_priorities_transmitters(filename):
|
||||||
with open(filename, "r") as fp:
|
with open(filename, "r") as fp:
|
||||||
satprio = {}
|
satprio = {}
|
||||||
|
@ -38,6 +40,7 @@ def read_priorities_transmitters(filename):
|
||||||
sattrans[sat] = transmitter
|
sattrans[sat] = transmitter
|
||||||
return (satprio, sattrans)
|
return (satprio, sattrans)
|
||||||
|
|
||||||
|
|
||||||
def get_satellite_info():
|
def get_satellite_info():
|
||||||
# Open session
|
# Open session
|
||||||
logging.info("Fetching satellite information from DB.")
|
logging.info("Fetching satellite information from DB.")
|
||||||
|
@ -52,6 +55,7 @@ def get_satellite_info():
|
||||||
|
|
||||||
return norad_cat_ids
|
return norad_cat_ids
|
||||||
|
|
||||||
|
|
||||||
def get_active_transmitter_info(fmin, fmax):
|
def get_active_transmitter_info(fmin, fmax):
|
||||||
# Open session
|
# Open session
|
||||||
logging.info("Fetching transmitter information from DB.")
|
logging.info("Fetching transmitter information from DB.")
|
||||||
|
@ -62,7 +66,7 @@ def get_active_transmitter_info(fmin, fmax):
|
||||||
transmitters = []
|
transmitters = []
|
||||||
for o in r.json():
|
for o in r.json():
|
||||||
if o["downlink_low"]:
|
if o["downlink_low"]:
|
||||||
if o["alive"] and o["downlink_low"] > fmin and o["downlink_low"] <= fmax:
|
if o["status"] == "active" and o["downlink_low"] > fmin and o["downlink_low"] <= fmax:
|
||||||
transmitter = {"norad_cat_id": o["norad_cat_id"],
|
transmitter = {"norad_cat_id": o["norad_cat_id"],
|
||||||
"uuid": o["uuid"]}
|
"uuid": o["uuid"]}
|
||||||
transmitters.append(transmitter)
|
transmitters.append(transmitter)
|
||||||
|
|
Loading…
Reference in New Issue