Skip to content
Snippets Groups Projects
Unverified Commit 83445bd3 authored by kmadisa's avatar kmadisa Committed by GitHub
Browse files

Merge pull request #69 from ska-sa/user/kmadisa/LMC-451/register-global-properties-in-tango-db

Registering global properties in db.
parents 3b30e59b 1008c298
No related branches found
No related tags found
No related merge requests found
{
"api_version": "v1",
"global": {
"Logging": {
"CentralLoggingTarget": "central/logger/1",
"ElementLoggingTarget": "{{ my_id }}/elt/logger",
"StorageLoggingTarget": "/dev/log",
"CentralLoggingLevelDefault": 2,
"ElementLoggingLevelDefault": 3,
"StorageLoggingLevelDefault": 3
}
},
"devices": {
"{{ my_id }}/a/1": {
......@@ -125,5 +127,16 @@
"central/logger/1": {
"Config": []
}
},
"classes": {
"PDU": {
"SubscribeRetryPeriod": "60",
"PollingThreadPeriod": "3",
"StatisticsTimeWindow": ""
},
"Server": {
"SubscribeRetryPeriod": "60",
"PollingThreadPeriod": "3"
}
}
}
{
"api_version": "v1",
"global": {
"Logging": {
"CentralLoggingTarget": "central/logger/1",
"ElementLoggingTarget": "{{ my_id }}/elt/logger",
"StorageLoggingTarget": "/dev/log",
"CentralLoggingLevelDefault": 2,
"ElementLoggingLevelDefault": 3,
"StorageLoggingLevelDefault": 3
}
},
"devices": {
"{{ my_id }}/a/1": {
......
{
"api_version": "v1",
"global": {
"Logging": {
"CentralLoggingTarget": "central/logger/1",
"ElementLoggingTarget": "{{ my_id }}/elt/logger",
"StorageLoggingTarget": "/dev/log",
"CentralLoggingLevelDefault": 2,
"ElementLoggingLevelDefault": 3,
"StorageLoggingLevelDefault": 4
}
},
"devices": {
"{{ my_id }}/a/1": {
......
......@@ -42,10 +42,22 @@ registered_properties = []
properties_not_registered = []
def put_device_property(device_name, device_properties):
for property_name, property_value in device_properties.items():
print "Setting device {} properties {}: {}".format(
device_name, property_name, property_value)
def put_properties(property_type, target_name, properties):
"""
A generic helper function used to register properties in the TANGO database.
Parameters
----------
property_type: str
The type of property (device, class, or free).
target_name: str
The target which the property is going to be registered against. Either the
device-name, class-name or the name of the free property.
properties: dict
A collection of the property names and property values.
"""
for property_name, property_value in properties.items():
try:
if fandango.functional.isSequence(property_value):
property_values = []
......@@ -54,25 +66,30 @@ def put_device_property(device_name, device_properties):
prop_val = property_values
else:
prop_val = property_value
fantango.put_device_property(device_name, {str(property_name): prop_val})
fun = getattr(fantango, 'put_{}_property'.format(property_type))
fun(target_name, {str(property_name): prop_val})
except PyTango.DevError as deverr:
logging.error("FAILED to register device property {} {}."
.format(property_name, deverr))
print """Failed to register device property {} in the database.
""".format(property_name)
properties_not_registered.append("/".join([device_name,property_name]))
logging.error("FAILED to register {} property {} {}."
.format(property_type, property_name, deverr))
properties_not_registered.append("/".join([target_name, property_name]))
else:
print """Successfully registered device property {} in the database.
""".format(property_name)
registered_properties.append("/".join([device_name,property_name]))
registered_properties.append("/".join([target_name, property_name]))
def update_device_properties(config_data):
devices = config_data['devices']
def update_database_properties(config_data):
for device_name, device_properties in devices.items():
put_device_property(device_name, device_properties)
for property_type in config_data:
if property_type == 'devices':
for device_name, device_properties in config_data[property_type].items():
put_properties('device', device_name, device_properties)
elif property_type == 'classes':
for class_name, class_properties in config_data[property_type].items():
put_properties('class', class_name, class_properties)
elif property_type == 'global':
for global_property_category, free_properties in (
config_data[property_type].items()):
put_properties('free', global_property_category, free_properties)
def run_module():
......@@ -111,12 +128,12 @@ def run_module():
# Load config from file or json
if module.params['properties_json']:
config_data = json.loads(module.params['properties_json'])
update_device_properties(config_data)
update_database_properties(config_data)
elif module.params['properties_file']:
config_file = module.params['properties_file']
with open(config_file) as config_fileh:
config_data = json.load(config_fileh)
update_device_properties(config_data)
update_database_properties(config_data)
else:
module.fail_json(msg='Required parameter properties_json or properties_file'
' is missing', **result)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment