From 54e48e3c0fb26949b4f7eb45b9fec8c0b9865fac 2022-04-20 22:03:28 From: Edson Date: 2022-04-20 22:03:28 Subject: [PATCH] Update clone(), add experiment parameter and create sirm-cam volume --- diff --git a/.env b/.env index 617c2e2..9b44464 100644 --- a/.env +++ b/.env @@ -21,6 +21,7 @@ PGDATA=/var/lib/postgresql/data #Volumes - path EXPOSE_SIRM=./volumes/sirm EXPOSE_PROC=./volumes/proc +EXPOSE_CAM=/path/to/cam EXPOSE_NAS=/path/to/nas_data EXPOSE_PGDATA=/path/to/pg_data EXPOSE_CERTS=/path/to/certs diff --git a/README.md b/README.md index 92091e9..f880447 100644 --- a/README.md +++ b/README.md @@ -38,6 +38,7 @@ Update enviroment vars (/path/to/radarsys_met/.env) DB_PASSWORD=**** #Volumes - path + EXPOSE_CAM=/path/to/cam EXPOSE_NAS=/path/to/nas_data EXPOSE_PGDATA=/path/to/pg_data EXPOSE_CERTS=/path/to/certs diff --git a/docker-compose.yml b/docker-compose.yml index 6238ff5..f17de09 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -44,6 +44,13 @@ volumes: type: "none" o: "bind" device: "${EXPOSE_NAS}" + sirm_cam: + name: sirm_cam + driver: local + driver_opts: + type: "none" + o: "bind" + device: "${EXPOSE_CAM}" services: sirm-nginx-proxy: @@ -144,8 +151,6 @@ services: driver: "json-file" options: max-size: "12m" - # ports: - # - 8086:5000 sirm-monitor: container_name: 'sirm-monitor' @@ -174,6 +179,8 @@ services: restart: always environment: - VIRTUAL_HOST=${CAM_SITE} + volumes: + - 'sirm_cam:./.wine/drive_c/iVMS-4200' networks: - frontend_sirm logging: diff --git a/volumes/sirm/apps/generator/models.py b/volumes/sirm/apps/generator/models.py index 9dc8989..36ed068 100644 --- a/volumes/sirm/apps/generator/models.py +++ b/volumes/sirm/apps/generator/models.py @@ -190,6 +190,8 @@ class GeneratorConfiguration(Configuration): r = requests.get(complete_url_trmode) + self.clone(type=1, experiment = 'empty') + if r: self.device.status = 3 self.device.save() diff --git a/volumes/sirm/apps/main/models.py b/volumes/sirm/apps/main/models.py index 9256a15..82178ed 100644 --- a/volumes/sirm/apps/main/models.py +++ b/volumes/sirm/apps/main/models.py @@ -303,17 +303,14 @@ class Experiment(PolymorphicModel): 'heading': self.heading } - self.reception_rx.datadir = os.path.join(os.environ['EXPOSE_NAS'], data['name'], 'rawdata') - self.reception_rx.save() - try: - data['pedestal'] = self.pedestal.start_device() + data['pedestal'] = self.pedestal.start_device(name_experiment=data['name']) time.sleep(1.0) self.generator_start() time.sleep(1.0) - data['usrp_tx'] = self.transmission_tx.start_device() + data['usrp_tx'] = self.transmission_tx.start_device(name_experiment=data['name']) time.sleep(1.0) - data['usrp_rx'] = self.reception_rx.start_device() + data['usrp_rx'] = self.reception_rx.start_device(name_experiment=data['name']) time.sleep(0.1) proc_url = 'http://'+os.environ['PROC_SITE']+'/start' requests.post(proc_url, json=data) @@ -444,7 +441,8 @@ class Experiment(PolymorphicModel): class Configuration(PolymorphicModel): - id = models.AutoField(primary_key=True) + id = models.AutoField(primary_key=True) + experiment = models.CharField(default='empty', editable=False, max_length=64, null=True, blank=True) device = models.ForeignKey('Device', verbose_name='Device', null=True, on_delete=models.CASCADE) type = models.PositiveSmallIntegerField(default=0, choices=CONF_TYPES) created_date = models.DateTimeField(auto_now_add=True) @@ -452,7 +450,7 @@ class Configuration(PolymorphicModel): parameters = models.TextField(default='{}') author = models.ForeignKey(User, null=True, blank=True,on_delete=models.CASCADE) hash = models.CharField(default='', max_length=64, null=True, blank=True) - message = "" + message = "" class Meta: db_table = 'db_configurations' @@ -498,14 +496,15 @@ class Configuration(PolymorphicModel): return data def clone(self, **kwargs): + before_id = self.id self.pk = None self.id = None for attr, value in kwargs.items(): setattr(self, attr, value) - self.save() + self.id = before_id return self def parms_to_dict(self): diff --git a/volumes/sirm/apps/main/views.py b/volumes/sirm/apps/main/views.py index 9f85669..4152880 100644 --- a/volumes/sirm/apps/main/views.py +++ b/volumes/sirm/apps/main/views.py @@ -809,8 +809,11 @@ def dev_confs(request): if request.user.is_authenticated: fields.append('my configurations') form = FilterForm(initial=request.GET, extra_fields=fields) - kwargs['keys'] = ['name', 'device', - 'type', 'programmed_date', 'actions'] + kwargs['keys'] = ['name', 'device', 'type', + 'programmed_date', 'actions'] + if request.GET.get('historical') == 'on': + kwargs['keys'].insert(3, 'experiment') + kwargs['title'] = 'Configuration' kwargs['suptitle'] = 'List' kwargs['no_sidebar'] = True @@ -873,7 +876,6 @@ def dev_conf_new(request, id_exp=0, id_dev=0): if device.device_type.name == 'usrp_tx': validation_usrp_tx_code(request, conf) - conf.clone(type=1) conf.save() conf.author = request.user diff --git a/volumes/sirm/apps/pedestal/models.py b/volumes/sirm/apps/pedestal/models.py index 41751d6..21b6635 100644 --- a/volumes/sirm/apps/pedestal/models.py +++ b/volumes/sirm/apps/pedestal/models.py @@ -191,7 +191,7 @@ class PedestalConfiguration(Configuration): return True - def start_device(self): + def start_device(self, name_experiment=False): if self.mode == 'table': if len(self.angle.split(',')) > 1: @@ -255,6 +255,12 @@ class PedestalConfiguration(Configuration): if self.mode == 'table': payload['table'] = list_of_floats + if name_experiment: + name_experiment = name_experiment.split("@") + self.clone(experiment=name_experiment[0], programmed_date=name_experiment[1], type=1) + else: + self.clone(type=1, experiment = 'empty') + if r: self.device.status = 3 self.device.save() diff --git a/volumes/sirm/apps/usrp_rx/models.py b/volumes/sirm/apps/usrp_rx/models.py index 1bcc79b..70edea1 100644 --- a/volumes/sirm/apps/usrp_rx/models.py +++ b/volumes/sirm/apps/usrp_rx/models.py @@ -3,6 +3,8 @@ import json import requests import base64 from struct import pack +from datetime import datetime +import os from django.db import models from django.urls import reverse @@ -73,10 +75,11 @@ class USRPRXConfiguration(Configuration): datadir = models.CharField( verbose_name="Data Directory", max_length=100, - default='', + default='/to/path/NAME@YYYY-MM-DDTHH:MM:SS/rawdata', blank=False, null=False, - help_text='Fill with a directory. Example: /media/soporte/DATA' + help_text='Fill with a directory. Example: /media/soporte/DATA', + editable=False ) clocksource = models.CharField( @@ -186,7 +189,7 @@ class USRPRXConfiguration(Configuration): return True - def start_device(self): + def start_device(self, name_experiment=False): try: usrp = USRPRXConfiguration.objects.get(pk=self) @@ -194,12 +197,25 @@ class USRPRXConfiguration(Configuration): usrp_antenna_rx = usrp.get_antenna_rx_display() usrp_clocksource = usrp.get_clocksource_display() usrp_timesource = usrp.get_timesource_display() + + if name_experiment: + self.datadir = os.path.join(os.environ['EXPOSE_NAS'], name_experiment, 'rawdata') + self.save() + + name_experiment = name_experiment.split("@") + self.clone(experiment=name_experiment[0], programmed_date=name_experiment[1], type=1) + else: + data_name = 'empty@{}'.format(datetime.now().isoformat().split('.')[0]) + self.datadir = os.path.join(os.environ['EXPOSE_NAS'], data_name, 'rawdata') + self.save() + + self.clone(type=1, experiment = 'empty') payload = {'ip_address': usrp.ip_address_rx, 'daughterboard': usrp_daughterboard_rx, 'antenna': usrp_antenna_rx, 'sample_rate': usrp.samplerate_rx, 'frequency': usrp.frequency_rx, - 'datadir': usrp.datadir, 'clock_source': usrp_clocksource, 'time_source': usrp_timesource, 'clock_rate':usrp.clockrate} + 'datadir': self.datadir, 'clock_source': usrp_clocksource, 'time_source': usrp_timesource, 'clock_rate':usrp.clockrate} r = requests.post(self.device.url("usrprx"), json=payload) - + if r: self.device.status = 3 self.device.save() diff --git a/volumes/sirm/apps/usrp_tx/models.py b/volumes/sirm/apps/usrp_tx/models.py index e8fd94b..3c4ed10 100644 --- a/volumes/sirm/apps/usrp_tx/models.py +++ b/volumes/sirm/apps/usrp_tx/models.py @@ -245,7 +245,7 @@ class USRPTXConfiguration(Configuration): return True - def start_device(self): + def start_device(self, name_experiment=False): try: usrp = USRPTXConfiguration.objects.get(pk=self) @@ -265,6 +265,12 @@ class USRPTXConfiguration(Configuration): 'repetitions_1': usrp.repetitions_1, 'enable_2': usrp.enable_2} r = requests.post(self.device.url("usrptx"), json=payload) + + if name_experiment: + name_experiment = name_experiment.split("@") + self.clone(experiment=name_experiment[0], programmed_date=name_experiment[1], type=1) + else: + self.clone(type=1, experiment = 'empty') if r: self.device.status = 3