##// END OF EJS Templates
Update restart_reception and Add restart_pedestal
Update restart_reception and Add restart_pedestal

File last commit:

r438:4bd0c7e20a9b
r443:8c926b45a918
Show More
models.py
295 lines | 9.9 KiB | text/x-python | PythonLexer
1)Update schain contenainer - 2)Add acq template - 3)Add AZ OFFSET pedestal parameter - 4)Add scheduler (sudo crontab) - 5)Add sirm-job container
r438 import os
Add 'experiment_date' parameter
r429 from datetime import datetime
Juan C. Espinoza
Updates to models, views & forms for CR...
r25 import json
Juan C. Espinoza
Improve RC pulses plot and Operation view...
r175 import requests
Primer commit radarsys_met
r345 import base64
Limpieza de código y funcionalidades usrp
r346 import struct
Juan C. Espinoza
Update RC model, RC api for testing...
r185 from struct import pack
Limpieza de código y funcionalidades usrp
r346 import time
from django.contrib import messages
Juan C. Espinoza
Proyecto base en Django (refs #259) ...
r0 from django.db import models
Nueva plantilla, prueba comunicacion y nuevos campos ddsrest
r335 from django.urls import reverse
Juan C. Espinoza
Add rc config mods...
r23 from django.core.validators import MinValueValidator, MaxValueValidator
Juan C. Espinoza
Updating base models and views ...
r6 from apps.main.models import Configuration
Juan C. Espinoza
- Update rc app...
r79
Experiment detail view update
r365 MODE_VALUE = (
Clean code and update Pedestal model
r368 ('position', 'Position'),
('speed', 'Speed'),
('table', 'Table')
Primer commit radarsys_met
r345 )
Juan C. Espinoza
Updating base models and views ...
r6
Limpieza de código y funcionalidades usrp
r346 class PedestalConfiguration(Configuration):
Juan C. Espinoza
Update code for django 1.10, python 3 and latest third party packages, review operation view ...
r172
Experiment detail view update
r365 mode = models.CharField(
verbose_name='Mode',
New experiment views
r360 max_length=10,
Experiment detail view update
r365 choices=MODE_VALUE,
Primer commit radarsys_met
r345 null=False,
blank=False
)
Clean code and update Pedestal model
r368 axis = models.CharField(
verbose_name="Axis",
Add 'experiment_date' parameter
r429 max_length=1000,
Clean code and update Pedestal model
r368 blank=False,
null=False,
help_text="Please separate the values with commas when using table mode"
)
speed = models.CharField(
verbose name (pedestal and experiments)
r419 verbose_name='Speed [°/s]',
Add 'experiment_date' parameter
r429 max_length=1000,
Validators (Pedestal) and Update models.py file (Usrp Rx and Tx)
r407 blank=True,
null=True
Primer commit radarsys_met
r345 )
Clean code and update Pedestal model
r368 angle = models.CharField(
verbose name (pedestal and experiments)
r419 verbose_name="Angle(s) [°]",
Add 'experiment_date' parameter
r429 max_length=1000,
Validators (Pedestal) and Update models.py file (Usrp Rx and Tx)
r407 blank=True,
null=True,
Clean code and update Pedestal model
r368 help_text="Please separate the values with commas when using table mode"
)
min_value = models.FloatField(
verbose name (pedestal and experiments)
r419 verbose_name='Min angle [°]',
Clean code and update Pedestal model
r368 validators=[MinValueValidator(-5), MaxValueValidator(185)],
Validators (Pedestal) and Update models.py file (Usrp Rx and Tx)
r407 blank=True,
null=True
Clean code and update Pedestal model
r368 )
max_value = models.FloatField(
verbose name (pedestal and experiments)
r419 verbose_name='Max angle [°]',
Clean code and update Pedestal model
r368 validators=[MinValueValidator(-5), MaxValueValidator(185)],
Validators (Pedestal) and Update models.py file (Usrp Rx and Tx)
r407 blank=True,
null=True
Primer commit radarsys_met
r345 )
Juan C. Espinoza
Updating base models and views ...
r6
class Meta:
Primer commit radarsys_met
r345 db_table = 'pedestal_configurations'
def __str__(self):
Clean code and update Pedestal model
r368 if self.mode=='position':
return u'Position: {}º {}'.format(self.angle, self.axis.upper())
if self.mode=='speed':
return u'Speed: {}º/s {}'.format(self.speed, self.axis.upper())
if self.mode=='table':
axis = [x.strip().upper() for x in self.axis.split(',')]
Update models.py Pedestal
r390 speeds = [float(x.strip()) for x in self.speed.split(',')]
table = [float(x.strip()) for x in self.angle.split(',')]
Clean code and update Pedestal model
r368 return u'Table: Axis {}, Speed {}º/s, Steps {}'.format(axis, speeds, table)
@property
def label(self):
return str(self)
Juan C. Espinoza
Update code for django 1.10, python 3 and latest third party packages, review operation view ...
r172
Juan C. Espinoza
- Update rc app...
r79 def get_absolute_url_plot(self):
Primer commit radarsys_met
r345 return reverse('url_plot_pedestal_pulses', args=[str(self.id)])
Juan C. Espinoza
Update code for django 1.10, python 3 and latest third party packages, review operation view ...
r172
Fiorella Quino
RC files have been updated...
r264 def request(self, cmd, method='get', **kwargs):
req = getattr(requests, method)(self.device.url(cmd), **kwargs)
payload = req.json()
return payload
Juan C. Espinoza
Improve RC pulses plot and Operation view...
r175 def status_device(self):
Juan C. Espinoza
Update code for django 1.10, python 3 and latest third party packages, review operation view ...
r172
Juan C. Espinoza
Update RC API methods...
r222 try:
Generator parameter type fixed, devices status & warning messages
r350 payload = requests.get(self.device.url())
Clean code and update Pedestal model
r368
Generator parameter type fixed, devices status & warning messages
r350 if payload:
self.device.status = 1
Fiorella Quino
RC files have been updated...
r264 elif payload['status']=='disable':
Juan C. Espinoza
Update RC API methods...
r222 self.device.status = 2
Juan C. Espinoza
Update RC model, RC api for testing...
r185 else:
Fiorella Quino
import/export functions have been updated...
r243 self.device.status = 1
Juan C. Espinoza
Update RC API methods...
r222 self.device.save()
Limpieza de código y funcionalidades usrp
r346 self.message = 'Pedestal status: {}'.format(payload['status'])
Juan C. Espinoza
Update RC API methods...
r222 return False
Juan C. Espinoza
Update RC model, RC api for testing...
r185 except Exception as e:
Juan C. Espinoza
Update RC API methods...
r222 if 'No route to host' not in str(e):
self.device.status = 4
self.device.save()
Limpieza de código y funcionalidades usrp
r346 self.message = 'Pedestal status: {}'.format(str(e))
Juan C. Espinoza
Update RC model, RC api for testing...
r185 return False
Fiorella Quino
import/export functions have been updated...
r243
self.device.save()
return True
Juan C. Espinoza
Improve RC pulses plot and Operation view...
r175
Update models.py Pedestal (reset_device)
r395 def reset_device(self, axi, angle):
Fiorella Quino
import/export functions have been updated...
r243
Juan C. Espinoza
Update RC model, RC api for testing...
r185 try:
Update models.py Pedestal
r390 url = self.device.url() + "position?params="
Clean code and update Pedestal model
r368
Update models.py Pedestal (reset_device)
r395 payload_el = {'axis': 'elevation'}
payload_az = {'axis': 'azimuth'}
if axi == 'elevation':
1)Update schain contenainer - 2)Add acq template - 3)Add AZ OFFSET pedestal parameter - 4)Add scheduler (sudo crontab) - 5)Add sirm-job container
r438 # CORRECT AZ OFFSET
azi = angle - float(os.environ.get('AZ_OFFSET', 26.27))
if azi<0: azi += 360
payload_az['position'] = round(azi, 2)
Update models.py Pedestal (reset_device)
r395 payload_el['position'] = 0
elif axi == 'azimuth':
payload_el['position'] = angle
payload_az['position'] = 0
else:
payload_el['position'] = 0
payload_az['position'] = 0
Update models.py Pedestal
r390 json_data_el = json.dumps(payload_el)
Update models.py Pedestal (reset_device)
r395 json_data_az = json.dumps(payload_az)
Update models.py Pedestal
r390 base64_table_el = base64.standard_b64encode(json_data_el.encode('ascii'))
Update models.py Pedestal (reset_device)
r395 base64_table_az = base64.standard_b64encode(json_data_az.encode('ascii'))
Clean code and update Pedestal model
r368
Update models.py files (pedestal and main/generator)
r402 time.sleep(0.1)
Clean code and update Pedestal model
r368 r = requests.get(url + base64_table_el.decode('ascii'))
Update models.py files (pedestal and main/generator)
r402 time.sleep(0.1)
Clean code and update Pedestal model
r368 r = requests.get(url + base64_table_az.decode('ascii'))
Update models.py Pedestal (reset_device)
r395
Clean code and update Pedestal model
r368 if r:
self.device.status = 3
Fiorella Quino
RC files have been updated...
r264 self.device.save()
Clean code and update Pedestal model
r368 self.message = 'Pedestal reset'
Juan C. Espinoza
Update RC model, RC api for testing...
r185 else:
Clean code and update Pedestal model
r368 return False
Juan C. Espinoza
Update RC model, RC api for testing...
r185 except Exception as e:
Limpieza de código y funcionalidades usrp
r346 self.message = 'Pedestal reset: {}'.format(str(e))
Juan C. Espinoza
Update RC model, RC api for testing...
r185 return False
Fiorella Quino
import/export functions have been updated...
r243
Juan C. Espinoza
Update RC model, RC api for testing...
r185 return True
Fiorella Quino
import/export functions have been updated...
r243
Juan C. Espinoza
Improve RC pulses plot and Operation view...
r175 def stop_device(self):
Juan C. Espinoza
Update code for django 1.10, python 3 and latest third party packages, review operation view ...
r172
Juan C. Espinoza
Update RC model, RC api for testing...
r185 try:
Limpieza de código y funcionalidades usrp
r346 command = self.device.url() + "stop"
r = requests.get(command)
Update models.py (generator, pedestal, usrp tx, ursp rx, experiments
r398
if self.mode == 'table':
AX = {'az':'azimuth', 'el':'elevation'}
axis = [AX[x.lower().strip()] for x in self.axis.split(',')]
list_of_floats = [float(x.strip()) for x in self.angle.split(",")]
self.reset_device(axis[0], list_of_floats[0])
Limpieza de código y funcionalidades usrp
r346 if r:
self.device.status = 4
Juan C. Espinoza
Update RC model, RC api for testing...
r185 self.device.save()
Limpieza de código y funcionalidades usrp
r346 self.message = 'Pedestal stopped'
Juan C. Espinoza
Update RC model, RC api for testing...
r185 else:
self.device.status = 4
self.device.save()
return False
except Exception as e:
Juan C. Espinoza
Update RC API methods...
r222 if 'No route to host' not in str(e):
self.device.status = 4
else:
self.device.status = 0
Generator parameter type fixed, devices status & warning messages
r350 #self.message = 'Pedestal stop: {}'.format(str(e))
self.message = "Pedestal can't start, please check network/device connection or IP address/port configuration"
Juan C. Espinoza
Update RC API methods...
r222 self.device.save()
Fiorella Quino
import/export functions have been updated...
r243 return False
Juan C. Espinoza
Update RC model, RC api for testing...
r185 return True
Juan C. Espinoza
Update code for django 1.10, python 3 and latest third party packages, review operation view ...
r172
Update clone(), add experiment parameter and create sirm-cam volume
r427 def start_device(self, name_experiment=False):
Generator parameter type fixed, devices status & warning messages
r350
Validators (Pedestal) and Update models.py file (Usrp Rx and Tx)
r407 if self.mode == 'table':
if len(self.angle.split(',')) > 1:
list_speed = []
list_axis = []
for _ in range(len(self.angle.split(','))):
list_axis.append(self.axis)
list_speed.append(self.speed)
if len(self.axis.split(',')) == 1:
self.axis = ",".join(map(str, list_axis))
if len(self.speed.split(',')) == 1:
self.speed = ",".join(map(str, list_speed))
Clean code and update Pedestal model
r368 AX = {'az':'azimuth', 'el':'elevation'}
axis = [AX[x.lower().strip()] for x in self.axis.split(',')]
if len(axis)==1:
axis = axis[0]
Limpieza de código y funcionalidades usrp
r346
Clean code and update Pedestal model
r368 try:
if self.mode == 'position':
Update models.py Pedestal
r390 url = self.device.url() + "position?params="
Clean code and update Pedestal model
r368 payload = {'axis': axis, 'position': float(self.angle)}
elif self.mode == 'speed':
Update models.py Pedestal
r390 url = self.device.url() + "speed?params="
Clean code and update Pedestal model
r368 payload = {'axis': axis, 'speed': float(self.speed)}
elif self.mode == 'table':
url = self.device.url() + "combinedtable?params="
list_of_floats = [float(x.strip()) for x in self.angle.split(",")]
1)Update schain contenainer - 2)Add acq template - 3)Add AZ OFFSET pedestal parameter - 4)Add scheduler (sudo crontab) - 5)Add sirm-job container
r438
# CORRECT AZ OFFSET
for i, ax in enumerate(axis):
if ax == 'elevation':
azi = list_of_floats[i] - float(os.environ.get('AZ_OFFSET', 26.27))
if azi<0: azi += 360
list_of_floats[i] = round(azi, 2)
Clean code and update Pedestal model
r368 byte_table = []
for x in list_of_floats:
temp = bytearray(struct.pack("f", x))
byte_table.append(temp[3])
byte_table.append(temp[2])
byte_table.append(temp[1])
byte_table.append(temp[0])
coded_table = base64.standard_b64encode(bytes(byte_table))
coded_table_ascii = coded_table.decode('ascii')
speed = [float(x.strip()) for x in self.speed.split(',')]
Create 'ip_address_rx', 'daughterboard_rx' and 'antenna_rx' parameters (USRP Rx) and Update models.py file (Pedestal)
r413
if isinstance(axis, str):
axis = [axis]
Update settings for postgres and pedestal start function
r374 payload = {
'arraylength': len(speed),
'axis': axis,
'speed': speed,
Update models.py Pedestal
r390 'bottom': self.min_value,
Update settings for postgres and pedestal start function
r374 'top': self.max_value,
Experiment (Validations)
r409 'table': coded_table_ascii
Update settings for postgres and pedestal start function
r374 }
Clean code and update Pedestal model
r368
json_data = json.dumps(payload)
print(json_data)
changed base64.urlsafe to base64.standard
r357 base64_table = base64.standard_b64encode(json_data.encode('ascii'))
Clean code and update Pedestal model
r368 url += base64_table.decode('ascii')
print(url)
r = requests.get(url)
Update models.py (generator, pedestal, usrp tx, ursp rx, experiments
r398
if self.mode == 'table':
payload['table'] = list_of_floats
Limpieza de código y funcionalidades usrp
r346
Update clone(), add experiment parameter and create sirm-cam volume
r427 if name_experiment:
name_experiment = name_experiment.split("@")
Change Experiment name format
r432 dt = datetime.strptime(name_experiment[1], '%Y-%m-%dT%H-%M-%S')
self.clone(experiment=name_experiment[0], experiment_date=dt, type=1)
Update clone(), add experiment parameter and create sirm-cam volume
r427 else:
Add 'experiment_date' parameter
r429 self.clone(type=1, experiment = 'empty', experiment_date=datetime.now())
Update clone(), add experiment parameter and create sirm-cam volume
r427
Limpieza de código y funcionalidades usrp
r346 if r:
Juan C. Espinoza
Update RC model, RC api for testing...
r185 self.device.status = 3
self.device.save()
Limpieza de código y funcionalidades usrp
r346 self.message = 'Pedestal configured and started'
Juan C. Espinoza
Update RC model, RC api for testing...
r185 else:
return False
except Exception as e:
Juan C. Espinoza
Update RC API methods...
r222 if 'No route to host' not in str(e):
self.device.status = 4
else:
self.device.status = 0
Generator parameter type fixed, devices status & warning messages
r350 #self.message = 'Pedestal start: {}'.format(str(e))
self.message = "Pedestal can't start, please check network/device connection or IP address/port configuration"
Juan C. Espinoza
Update RC API methods...
r222 self.device.save()
Juan C. Espinoza
Update RC model, RC api for testing...
r185 return False
Fiorella Quino
import/export functions have been updated...
r243
Update models.py (generator, pedestal, usrp tx, ursp rx, experiments
r398 return payload
Juan C. Espinoza
Update code for django 1.10, python 3 and latest third party packages, review operation view ...
r172
Fiorella Quino
RC files have been updated...
r264 def get_absolute_url_import(self):
1)Update schain contenainer - 2)Add acq template - 3)Add AZ OFFSET pedestal parameter - 4)Add scheduler (sudo crontab) - 5)Add sirm-job container
r438 return reverse('url_import_pedestal_conf', args=[str(self.id)])