def get_jobs(): """Query SatNOGS Network API to GET jobs.""" url = urljoin(settings.NETWORK_API_URL, 'jobs/') params = {'ground_station': settings.GROUND_STATION_ID} headers = {'Authorization': 'Token {0}'.format(settings.API_TOKEN)} logger.debug('URL: {0}'.format(url)) logger.debug('Params: {0}'.format(params)) logger.debug('Headers: {0}'.format(headers)) logger.info('Trying to GET observation jobs from the network') response = requests.get(url, params=params, headers=headers, verify=settings.VERIFY_SSL) if not response.status_code == 200: raise Exception('Status code: {0} on request: {1}'.format(response.status_code, url)) for job in scheduler.get_jobs(): if job.name in [spawn_observer.__name__, spawn_receiver.__name__]: job.remove() for obj in response.json(): start = parser.parse(obj['start']) job_id = str(obj['id']) kwargs = {'obj': obj} receiver_start = start - timedelta(seconds=settings.DEMODULATOR_INIT_TIME) logger.info('Adding new job: {0}'.format(job_id)) logger.debug('Observation obj: {0}'.format(obj)) scheduler.add_job(spawn_observer, 'date', run_date=start, id='observer_{0}'.format(job_id), kwargs=kwargs) scheduler.add_job(spawn_receiver, 'date', run_date=receiver_start, id='receiver_{0}'.format(job_id), kwargs=kwargs)
def add_observation(obj): start = parser.parse(obj['start']) job_id = str(obj['id']) kwargs = {'obj': obj} logger.info('Adding new job: {0}'.format(job_id)) logger.debug('Observation obj: {0}'.format(obj)) scheduler.add_job(spawn_observer, 'date', run_date=start, id='observer_{0}'.format(job_id), kwargs=kwargs)
def get_jobs(): logger.info('Get jobs started') """Query SatNOGS Network API to GET jobs.""" url = urljoin(settings.SATNOGS_NETWORK_API_URL, 'jobs/') params = {'ground_station': settings.SATNOGS_STATION_ID} headers = {'Authorization': 'Token {0}'.format(settings.SATNOGS_API_TOKEN)} logger.debug('URL: {0}'.format(url)) logger.debug('Params: {0}'.format(params)) logger.debug('Headers: {0}'.format(headers)) logger.info('Trying to GET observation jobs from the network') response = requests.get(url, params=params, headers=headers, verify=settings.SATNOGS_VERIFY_SSL) if not response.status_code == 200: raise Exception('Status code: {0} on request: {1}'.format( response.status_code, url)) for job in scheduler.get_jobs(): if job.name in [spawn_observer.__name__]: job.remove() sock = Commsocket('127.0.0.1', settings.TASK_FEEDER_TCP_PORT) tasks = [] for obj in response.json(): tasks.append(obj) start = parser.parse(obj['start']) job_id = str(obj['id']) kwargs = {'obj': obj} logger.info('Adding new job: {0}'.format(job_id)) logger.debug('Observation obj: {0}'.format(obj)) scheduler.add_job(spawn_observer, 'date', run_date=start, id='observer_{0}'.format(job_id), kwargs=kwargs) tasks.reverse() while sys.getsizeof(json.dumps(tasks)) > sock.tasks_buffer_size: tasks.pop() b = sock.connect() if b: sock.send_not_recv(json.dumps(tasks)) else: logger.info('Task listener thread not online')
def status_listener(): logger.info('Starting scheduler...') scheduler.start() scheduler.remove_all_jobs() interval = settings.SATNOGS_NETWORK_API_QUERY_INTERVAL scheduler.add_job(get_jobs, 'interval', minutes=interval) msg = 'Registering `get_jobs` periodic task ({0} min. interval)'.format( interval) logger.info(msg) interval = settings.SATNOGS_NETWORK_API_POST_INTERVAL msg = 'Registering `post_data` periodic task ({0} min. interval)'.format( interval) logger.info(msg) scheduler.add_job(post_data, 'interval', minutes=interval) os.environ['GNURADIO_SCRIPT_PID'] = '0' os.environ['SCHEDULER'] = 'ON'
def get_jobs(): logger.info('Get jobs started') """Query SatNOGS Network API to GET jobs.""" url = urljoin(settings.NETWORK_API_URL, 'jobs/') params = {'ground_station': settings.GROUND_STATION_ID} headers = {'Authorization': 'Token {0}'.format(settings.API_TOKEN)} logger.debug('URL: {0}'.format(url)) logger.debug('Params: {0}'.format(params)) logger.debug('Headers: {0}'.format(headers)) logger.info('Trying to GET observation jobs from the network') response = requests.get(url, params=params, headers=headers, verify=settings.VERIFY_SSL) if not response.status_code == 200: raise Exception('Status code: {0} on request: {1}'.format(response.status_code, url)) for job in scheduler.get_jobs(): if job.name in [spawn_observer.__name__]: job.remove() sock = Commsocket('127.0.0.1', settings.TASK_FEEDER_TCP_PORT) tasks = [] for obj in response.json(): tasks.append(obj) start = parser.parse(obj['start']) job_id = str(obj['id']) kwargs = {'obj': obj} logger.info('Adding new job: {0}'.format(job_id)) logger.debug('Observation obj: {0}'.format(obj)) scheduler.add_job(spawn_observer, 'date', run_date=start, id='observer_{0}'.format(job_id), kwargs=kwargs) tasks.reverse() while sys.getsizeof(json.dumps(tasks)) > sock.tasks_buffer_size: tasks.pop() b = sock.connect() if b: sock.send_not_recv(json.dumps(tasks)) else: logger.info('Task listener thread not online')
def get_jobs(): """Query SatNOGS Network API to GET jobs.""" logger.info('Get jobs started') url = urljoin(settings.SATNOGS_NETWORK_API_URL, 'jobs/') params = {'ground_station': settings.SATNOGS_STATION_ID} headers = {'Authorization': 'Token {0}'.format(settings.SATNOGS_API_TOKEN)} logger.debug('URL: {0}'.format(url)) logger.debug('Params: {0}'.format(params)) logger.debug('Headers: {0}'.format(headers)) logger.info('Trying to GET observation jobs from the network') response = requests.get(url, params=params, headers=headers, verify=settings.SATNOGS_VERIFY_SSL, timeout=45) if not response.status_code == 200: raise Exception('Status code: {0} on request: {1}'.format( response.status_code, url)) for job in scheduler.get_jobs(): if job.name in [spawn_observer.__name__]: job.remove() tasks = [] for obj in response.json(): tasks.append(obj) start = parser.parse(obj['start']) job_id = str(obj['id']) obj['origin'] = 'network' kwargs = {'obj': obj} logger.info('Adding new job: {0}'.format(job_id)) logger.debug('Observation obj: {0}'.format(obj)) scheduler.add_job(spawn_observer, 'date', run_date=start, id='observer_{0}'.format(job_id), kwargs=kwargs) tasks.reverse()
def add_observation(obj): start = parser.parse(obj['start']) job_id = str(obj['id']) kwargs = {'obj': obj} logger.info('Adding new job: {0}'.format(job_id)) logger.debug('Observation obj: {0}'.format(obj)) obs = scheduler.add_job(spawn_observer, 'date', run_date=start, id=format(job_id), kwargs=kwargs) socketio.emit('update_scheduled', obj, namespace='/update_status') return obs
def status_listener(): logger.info('Started upsat status listener') logger.info('Starting scheduler...') scheduler.start() scheduler.remove_all_jobs() interval = settings.SATNOGS_NETWORK_API_QUERY_INTERVAL scheduler.add_job(get_jobs, 'interval', minutes=interval) msg = 'Registering `get_jobs` periodic task ({0} min. interval)'.format(interval) logger.info(msg) interval = settings.SATNOGS_NETWORK_API_POST_INTERVAL msg = 'Registering `post_data` periodic task ({0} min. interval)'.format(interval) logger.info(msg) scheduler.add_job(post_data, 'interval', minutes=interval) tf = Process(target=task_feeder, args=(settings.TASK_FEEDER_TCP_PORT,)) tf.start() d = Process(target=downlink, args=()) d.daemon = True d.start() os.environ['TASK_FEEDER_PID'] = str(tf.pid) sock = Udpsocket(('127.0.0.1', settings.STATUS_LISTENER_PORT)) os.environ['BACKEND_TX_PID'] = '0' os.environ['BACKEND_RX_PID'] = '0' os.environ['BACKEND'] = "" os.environ['MODE'] = "network" os.environ['ECSS_FEEDER_PID'] = '0' os.environ['GNURADIO_SCRIPT_PID'] = '0' os.environ['SCHEDULER'] = 'ON' while 1: conn = sock.recv() dictionary = json.loads(conn[0]) if 'backend' in dictionary.keys(): if dictionary['backend'] == os.environ['BACKEND']: continue kill_cmd_ctrl_proc() if dictionary['backend'] == 'gnuradio': if os.environ['BACKEND'] == 'serial': serial_handler.close() os.environ['BACKEND'] = 'gnuradio' rx = Process(target=read_from_gnuradio, args=()) rx.daemon = True rx.start() logger.info('Started gnuradio rx process %d', rx.pid) os.environ['BACKEND_RX_PID'] = str(rx.pid) elif dictionary['backend'] == 'serial': os.environ['BACKEND'] = 'serial' serial_handler.init() rx = Process(target=serial_handler.read_from_serial, args=()) rx.daemon = True rx.start() os.environ['BACKEND_RX_PID'] = str(rx.pid) if 'mode' in dictionary.keys(): if dictionary['mode'] == os.environ['MODE']: continue logger.info('Changing mode') if dictionary['mode'] == 'cmd_ctrl': logger.info('Starting ecss feeder thread...') os.environ['MODE'] = 'cmd_ctrl' kill_netw_proc() ef = Process(target=ecss_feeder, args=(settings.ECSS_FEEDER_UDP_PORT,)) start_wod_thread() ef.start() os.environ['ECSS_FEEDER_PID'] = str(ef.pid) logger.info('Started ecss_feeder process %d', ef.pid) elif dictionary['mode'] == 'network': os.environ['MODE'] = 'network' kill_cmd_ctrl_proc() kill_wod_thread() if int(os.environ['ECSS_FEEDER_PID']) != 0: os.kill(int(os.environ['ECSS_FEEDER_PID']), signal.SIGTERM) os.environ['ECSS_FEEDER_PID'] = '0' os.environ['SCHEDULER'] = 'ON' scheduler.start() tf = Process(target=task_feeder, args=(settings.TASK_FEEDER_TCP_PORT,)) tf.start() os.environ['TASK_FEEDER_PID'] = str(tf.pid) logger.info('Started task feeder process %d', tf.pid)
def status_listener(): logger.info('Started upsat status listener') logger.info('Starting scheduler...') scheduler.start() scheduler.remove_all_jobs() interval = settings.NETWORK_API_QUERY_INTERVAL scheduler.add_job(get_jobs, 'interval', minutes=interval) msg = 'Registering `get_jobs` periodic task ({0} min. interval)'.format(interval) logger.info(msg) interval = settings.NETWORK_API_POST_INTERVAL msg = 'Registering `post_data` periodic task ({0} min. interval)'.format(interval) logger.info(msg) scheduler.add_job(post_data, 'interval', minutes=interval) tf = Process(target=task_feeder, args=(settings.TASK_FEEDER_TCP_PORT,)) tf.start() d = Process(target=downlink, args=()) d.daemon = True d.start() os.environ['TASK_FEEDER_PID'] = str(tf.pid) sock = Udpsocket(('127.0.0.1', settings.STATUS_LISTENER_PORT)) os.environ['BACKEND_TX_PID'] = '0' os.environ['BACKEND_RX_PID'] = '0' os.environ['BACKEND'] = "" os.environ['MODE'] = "network" os.environ['ECSS_FEEDER_PID'] = '0' os.environ['GNURADIO_SCRIPT_PID'] = '0' os.environ['SCHEDULER'] = 'ON' while 1: conn = sock.recv() dictionary = json.loads(conn[0]) if 'backend' in dictionary.keys(): if dictionary['backend'] == os.environ['BACKEND']: continue kill_cmd_ctrl_proc() if dictionary['backend'] == 'gnuradio': if os.environ['BACKEND'] == 'serial': serial_handler.close() os.environ['BACKEND'] = 'gnuradio' rx = Process(target=read_from_gnuradio, args=()) rx.daemon = True rx.start() logger.info('Started gnuradio rx process %d', rx.pid) os.environ['BACKEND_RX_PID'] = str(rx.pid) elif dictionary['backend'] == 'serial': os.environ['BACKEND'] = 'serial' serial_handler.init() rx = Process(target=serial_handler.read_from_serial, args=()) rx.daemon = True rx.start() os.environ['BACKEND_RX_PID'] = str(rx.pid) if 'mode' in dictionary.keys(): if dictionary['mode'] == os.environ['MODE']: continue logger.info('Changing mode') if dictionary['mode'] == 'cmd_ctrl': logger.info('Starting ecss feeder thread...') os.environ['MODE'] = 'cmd_ctrl' kill_netw_proc() ef = Process(target=ecss_feeder, args=(settings.ECSS_FEEDER_UDP_PORT,)) start_wod_thread() ef.start() os.environ['ECSS_FEEDER_PID'] = str(ef.pid) logger.info('Started ecss_feeder process %d', ef.pid) elif dictionary['mode'] == 'network': os.environ['MODE'] = 'network' kill_cmd_ctrl_proc() kill_wod_thread() if int(os.environ['ECSS_FEEDER_PID']) != 0: os.kill(int(os.environ['ECSS_FEEDER_PID']), signal.SIGTERM) os.environ['ECSS_FEEDER_PID'] = '0' os.environ['SCHEDULER'] = 'ON' scheduler.start() tf = Process(target=task_feeder, args=(settings.TASK_FEEDER_TCP_PORT,)) tf.start() os.environ['TASK_FEEDER_PID'] = str(tf.pid) logger.info('Started task feeder process %d', tf.pid)