diff --git a/docker-compose.yml b/docker-compose.yml index 74589a2..e358395 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -113,9 +113,9 @@ services: - backend_sirm labels: ofelia.enabled: "true" - ofelia.job-exec.adq-exp.schedule: "@every 35s" + ofelia.job-exec.adq-exp.schedule: "@every 10s" ofelia.job-exec.adq-exp.command: "python manage.py adq_exp" - ofelia.job-exec.restart-exp.schedule: "@every 21600s" + ofelia.job-exec.restart-exp.schedule: "0 0 0/17 ? * *" ofelia.job-exec.restart-exp.command: "python manage.py restart_exp" logging: driver: "json-file" diff --git a/volumes/sirm/apps/main/management/commands/adq_exp.py b/volumes/sirm/apps/main/management/commands/adq_exp.py index 3dd2c7f..15a0a99 100644 --- a/volumes/sirm/apps/main/management/commands/adq_exp.py +++ b/volumes/sirm/apps/main/management/commands/adq_exp.py @@ -7,9 +7,9 @@ from datetime import datetime class Command(BaseCommand): """ - Check data acquisition each 90 seconds. + Check data acquisition each 10 seconds. Example: - manage.py adq_exp --pk=1 + manage.py adq_exp """ def handle(self, *args, **options): restart_experiment(self) @@ -20,20 +20,30 @@ def check_experiment(): else: return False -def experiment_start(self, id_exp): - exp = get_object_or_404(Experiment, pk=id_exp) - if exp.status != 2 and exp.mode_stop == 'adq': - exp.status = exp.start() - exp.save() - self.stdout.write(f'Experiment "{exp.name}" was restarted') +def acquisition_start(self, id_exp): + all_status = Experiment.objects.filter(status=2) + check_id = False -def experiment_stop(self, id_exp): - exp = get_object_or_404(Experiment, pk=id_exp) - if exp.status == 2 or exp.status == 4 or exp.status == 5: - exp.status = exp.stop() - exp.mode_stop = 'adq' - exp.save() - self.stdout.write(f'Experiment "{exp.name}" was stoped') + if len(all_status) > 0: + check_id = all_status[0].pk + + if check_id and check_id == id_exp: + exp = get_object_or_404(Experiment, pk=id_exp) + name = '{}-R@{}'.format(exp.name, datetime.now().strftime('%Y-%m-%dT%H-%M-%S')) + exp.reception_rx.start_device(name_experiment = name, restart = True) + self.stdout.write(f'"{exp.name}" experiment: Data acquisition was restarted') + +def acquisition_stop(self, id_exp): + all_status = Experiment.objects.filter(status=2) + check_id = False + + if len(all_status) > 0: + check_id = all_status[0].pk + + if check_id and check_id == id_exp: + exp = get_object_or_404(Experiment, pk=id_exp) + exp.reception_rx.stop_device() + self.stdout.write(f'"{exp.name}" experiment: Data acquisition "{exp.name}" was stopped') def count_data(datadir): pattern = "rf@*.h5" @@ -69,15 +79,16 @@ def check_count(datadir, old_numbers): numbers = count_data(datadir) for key, value in numbers.items(): + if old_numbers[key] > numbers[key]: + old_numbers[key] = 0 diff[key] = numbers[key] - old_numbers[key] return numbers, diff def restart_experiment(self): old_numbers={'ch0': 0, 'ch1': 0} - new_check = True - for _ in range(5): - time.sleep(2) - if check_experiment() and new_check: + for count in range(5): + time.sleep(1) + if check_experiment(): all_status = Experiment.objects.filter(status=2) id_exp = all_status[0].pk datadir_exp = all_status[0].reception_rx.datadir @@ -87,8 +98,11 @@ def restart_experiment(self): if diff['ch0'] > 0 and diff['ch1'] > 0: self.stdout.write(f'Data acquisition is running') else: - experiment_stop(self, id_exp) - time.sleep(14) - experiment_start(self, id_exp) - old_numbers={'ch0': 0, 'ch1': 0} - new_check = False \ No newline at end of file + count = count + 1 + if count == 5: + acquisition_stop(self, id_exp) + time.sleep(1) + acquisition_start(self, id_exp) + old_numbers={'ch0': 0, 'ch1': 0} + else: + self.stdout.write(f'An error ocurred while trying to read data acquisition, Retry!') \ No newline at end of file diff --git a/volumes/sirm/apps/usrp_rx/models.py b/volumes/sirm/apps/usrp_rx/models.py index 34c3762..debb16e 100644 --- a/volumes/sirm/apps/usrp_rx/models.py +++ b/volumes/sirm/apps/usrp_rx/models.py @@ -189,7 +189,7 @@ class USRPRXConfiguration(Configuration): return True - def start_device(self, name_experiment=False): + def start_device(self, name_experiment=False, restart = False): try: usrp = USRPRXConfiguration.objects.get(pk=self) @@ -199,8 +199,9 @@ class USRPRXConfiguration(Configuration): usrp_timesource = usrp.get_timesource_display() if name_experiment: - self.datadir = os.path.join(os.environ['EXPOSE_NAS'], name_experiment, 'rawdata') - self.save() + if not restart: + self.datadir = os.path.join(os.environ['EXPOSE_NAS'], name_experiment, 'rawdata') + self.save() name_experiment = name_experiment.split("@") dt = datetime.strptime(name_experiment[1], '%Y-%m-%dT%H-%M-%S')