Reduce complexity of main() function
Signed-off-by: Pierros Papadeas <pierros@papadeas.gr>merge-requests/21/head
parent
fee88c5fc1
commit
19d1c4d235
|
@ -9,9 +9,9 @@ import lxml.html
|
|||
import argparse
|
||||
import logging
|
||||
from utils import get_active_transmitter_info, get_transmitter_stats, \
|
||||
get_groundstation_info, get_last_update, get_scheduled_passes_from_network, ordered_scheduler, \
|
||||
get_groundstation_info, get_scheduled_passes_from_network, ordered_scheduler, \
|
||||
efficiency, find_passes, schedule_observation, read_priorities_transmitters, \
|
||||
get_satellite_info
|
||||
get_satellite_info, update_needed, get_priority_passes
|
||||
import settings
|
||||
from tqdm import tqdm
|
||||
import sys
|
||||
|
@ -101,7 +101,8 @@ def main():
|
|||
"--wait",
|
||||
help="Wait time between consecutive observations (for setup and slewing)" +
|
||||
" [seconds; default: 0.0]",
|
||||
type=float,
|
||||
type=int,
|
||||
choices=range(0, 3600),
|
||||
default=0)
|
||||
parser.add_argument("-n",
|
||||
"--dryrun",
|
||||
|
@ -140,8 +141,6 @@ def main():
|
|||
length_hours = args.duration
|
||||
wait_time_seconds = args.wait
|
||||
min_horizon_arg = args.min_horizon
|
||||
if wait_time_seconds < 0:
|
||||
wait_time_seconds = 0.0
|
||||
cache_dir = "/tmp/cache"
|
||||
schedule = not args.dryrun
|
||||
search_transmitters = args.search_transmitters
|
||||
|
@ -155,25 +154,12 @@ def main():
|
|||
# Get ground station information
|
||||
ground_station = get_groundstation_info(ground_station_id)
|
||||
|
||||
# Exit if ground station is empty
|
||||
if not ground_station:
|
||||
sys.exit()
|
||||
|
||||
# Create cache
|
||||
if not os.path.isdir(cache_dir):
|
||||
os.mkdir(cache_dir)
|
||||
|
||||
# Get last update
|
||||
tlast = get_last_update(os.path.join(cache_dir, "last_update_%d.txt" % ground_station_id))
|
||||
|
||||
# Update logic
|
||||
update = False
|
||||
if tlast is None or (tnow - tlast).total_seconds() > settings.CACHE_AGE * 3600:
|
||||
update = True
|
||||
if not os.path.isfile(os.path.join(cache_dir, "transmitters_%d.txt" % ground_station_id)):
|
||||
update = True
|
||||
if not os.path.isfile(os.path.join(cache_dir, "tles_%d.txt" % ground_station_id)):
|
||||
update = True
|
||||
update = update_needed(tnow, ground_station_id, cache_dir)
|
||||
|
||||
# Update
|
||||
if update:
|
||||
|
@ -259,13 +245,7 @@ def main():
|
|||
# Find passes
|
||||
passes = find_passes(satellites, observer, tmin, tmax, minimum_altitude)
|
||||
|
||||
# Priorities and favorite transmitters
|
||||
# read the following format
|
||||
# 43017 1. KgazZMKEa74VnquqXLwAvD
|
||||
if priority_filename is not None and os.path.exists(priority_filename):
|
||||
priorities, favorite_transmitters = read_priorities_transmitters(priority_filename)
|
||||
else:
|
||||
priorities, favorite_transmitters = {}, {}
|
||||
|
||||
# List of scheduled passes
|
||||
scheduledpasses = get_scheduled_passes_from_network(ground_station_id, tmin, tmax)
|
||||
|
@ -273,26 +253,8 @@ def main():
|
|||
(len(scheduledpasses), tmin, tmax, ground_station_id))
|
||||
|
||||
# Get passes of priority objects
|
||||
prioritypasses = []
|
||||
normalpasses = []
|
||||
for satpass in passes:
|
||||
# Get user defined priorities
|
||||
if satpass['id'] in priorities:
|
||||
satpass['priority'] = priorities[satpass['id']]
|
||||
if satpass['id'] in favorite_transmitters:
|
||||
satpass['uuid'] = favorite_transmitters[satpass['id']]
|
||||
prioritypasses.append(satpass)
|
||||
elif search_transmitters:
|
||||
# Find satellite transmitter with highest number of good observations
|
||||
max_good_count = max([s['good_count'] for s in passes if s["id"] == satpass["id"]])
|
||||
if max_good_count > 0:
|
||||
satpass['priority'] = \
|
||||
(float(satpass['altt']) / 90.0) \
|
||||
* satpass['success_rate'] \
|
||||
* float(satpass['good_count']) / max_good_count
|
||||
else:
|
||||
satpass['priority'] = (float(satpass['altt']) / 90.0) * satpass['success_rate']
|
||||
normalpasses.append(satpass)
|
||||
prioritypasses, normalpasses = get_priority_passes(passes, priorities, favorite_transmitters,
|
||||
search_transmitters)
|
||||
|
||||
# Priority scheduler
|
||||
prioritypasses = sorted(prioritypasses, key=lambda satpass: -satpass['priority'])
|
||||
|
@ -306,7 +268,7 @@ def main():
|
|||
|
||||
# Compute scheduling efficiency
|
||||
dt, dttot, eff = efficiency(scheduledpasses)
|
||||
logging.info("%d passes scheduled out of %d, %.0f s out of %.0f s at %.3f%% efficiency" %
|
||||
logging.info("%d passes selected out of %d, %.0f s out of %.0f s at %.3f%% efficiency" %
|
||||
(len(scheduledpasses), len(passes), dt, dttot, 100 * eff))
|
||||
|
||||
# Find unique objects
|
||||
|
|
48
utils.py
48
utils.py
|
@ -7,6 +7,8 @@ import ephem
|
|||
import lxml
|
||||
import settings
|
||||
from tqdm import tqdm
|
||||
import os
|
||||
import sys
|
||||
|
||||
|
||||
def get_paginated_endpoint(url, max_entries=None):
|
||||
|
@ -27,6 +29,10 @@ def get_paginated_endpoint(url, max_entries=None):
|
|||
|
||||
|
||||
def read_priorities_transmitters(filename):
|
||||
# Priorities and favorite transmitters
|
||||
# read the following format
|
||||
# 43017 1. KgazZMKEa74VnquqXLwAvD
|
||||
if filename is not None and os.path.exists(filename):
|
||||
with open(filename, "r") as fp:
|
||||
satprio = {}
|
||||
sattrans = {}
|
||||
|
@ -39,6 +45,8 @@ def read_priorities_transmitters(filename):
|
|||
satprio[sat] = float(prio)
|
||||
sattrans[sat] = transmitter
|
||||
return (satprio, sattrans)
|
||||
else:
|
||||
return ({}, {})
|
||||
|
||||
|
||||
def get_satellite_info():
|
||||
|
@ -264,6 +272,30 @@ def find_passes(satellites, observer, tmin, tmax, minimum_altitude):
|
|||
return passes
|
||||
|
||||
|
||||
def get_priority_passes(passes, priorities, favorite_transmitters, search):
|
||||
priority = []
|
||||
normal = []
|
||||
for satpass in passes:
|
||||
# Get user defined priorities
|
||||
if satpass['id'] in priorities:
|
||||
satpass['priority'] = priorities[satpass['id']]
|
||||
if satpass['id'] in favorite_transmitters:
|
||||
satpass['uuid'] = favorite_transmitters[satpass['id']]
|
||||
priority.append(satpass)
|
||||
elif search:
|
||||
# Find satellite transmitter with highest number of good observations
|
||||
max_good_count = max([s['good_count'] for s in passes if s["id"] == satpass["id"]])
|
||||
if max_good_count > 0:
|
||||
satpass['priority'] = \
|
||||
(float(satpass['altt']) / 90.0) \
|
||||
* satpass['success_rate'] \
|
||||
* float(satpass['good_count']) / max_good_count
|
||||
else:
|
||||
satpass['priority'] = (float(satpass['altt']) / 90.0) * satpass['success_rate']
|
||||
normal.append(satpass)
|
||||
return (priority, normal)
|
||||
|
||||
|
||||
def get_groundstation_info(ground_station_id):
|
||||
|
||||
logging.info("Requesting information for ground station %d" % ground_station_id)
|
||||
|
@ -285,7 +317,8 @@ def get_groundstation_info(ground_station_id):
|
|||
return o
|
||||
else:
|
||||
logging.info('No ground station information found!')
|
||||
return {}
|
||||
# Exit if no ground station found
|
||||
sys.exit()
|
||||
|
||||
|
||||
def get_last_update(fname):
|
||||
|
@ -298,6 +331,19 @@ def get_last_update(fname):
|
|||
return None
|
||||
|
||||
|
||||
def update_needed(tnow, ground_station_id, cache_dir):
|
||||
# Get last update
|
||||
tlast = get_last_update(os.path.join(cache_dir, "last_update_%d.txt" % ground_station_id))
|
||||
|
||||
if tlast is None or (tnow - tlast).total_seconds() > settings.CACHE_AGE * 3600:
|
||||
return True
|
||||
if not os.path.isfile(os.path.join(cache_dir, "transmitters_%d.txt" % ground_station_id)):
|
||||
return True
|
||||
if not os.path.isfile(os.path.join(cache_dir, "tles_%d.txt" % ground_station_id)):
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
def schedule_observation(session, norad_cat_id, uuid, ground_station_id, starttime, endtime):
|
||||
|
||||
obsURL = '{}/observations/new/'.format(settings.NETWORK_BASE_URL) # Observation URL
|
||||
|
|
Loading…
Reference in New Issue