diff --git a/.gitattributes b/.gitattributes index a75c0ab764f960e9e2a69832daedd5dcfa4abf02..c30c7891640dabd3ca23f69759bfab0e98ba8450 100644 --- a/.gitattributes +++ b/.gitattributes @@ -4599,6 +4599,11 @@ SAS/Feedback_Service/src/Feedback.h -text SAS/Feedback_Service/src/FeedbackMain.cc -text SAS/Feedback_Service/src/FeedbackService.conf -text SAS/Feedback_Service/src/fb_data_44883.txt -text +SAS/MoM/CMakeLists.txt -text +SAS/MoM/MoMQueryService/CMakeLists.txt -text +SAS/MoM/MoMQueryService/__init__.py -text +SAS/MoM/MoMQueryService/momprojectdetailsquery.py -text +SAS/MoM/MoMQueryService/momqueryservice.py -text SAS/OTB/OTB-distribution/assembly.xml -text SAS/OTB/OTB-distribution/pom.xml -text SAS/OTB/OTB/assembly.xml -text diff --git a/CMake/LofarPackageList.cmake b/CMake/LofarPackageList.cmake index 1e2efe49f3fc4aab51141a21b84b52c770b9dc87..5a209546d421f49af9b1c3557e40d0b1bdda4f9f 100644 --- a/CMake/LofarPackageList.cmake +++ b/CMake/LofarPackageList.cmake @@ -66,6 +66,8 @@ if(NOT DEFINED LOFAR_PACKAGE_LIST_INCLUDED) set(MessageBus_SOURCE_DIR ${CMAKE_SOURCE_DIR}/LCS/MessageBus) set(MessageDaemons_SOURCE_DIR ${CMAKE_SOURCE_DIR}/LCS/MessageDaemons) set(Messaging_SOURCE_DIR ${CMAKE_SOURCE_DIR}/LCS/Messaging) + set(PyCommon_SOURCE_DIR ${CMAKE_SOURCE_DIR}/LCS/Messaging/python/common) + set(PyMessaging_SOURCE_DIR ${CMAKE_SOURCE_DIR}/LCS/Messaging/python/messaging) set(MSLofar_SOURCE_DIR ${CMAKE_SOURCE_DIR}/LCS/MSLofar) set(pyparameterset_SOURCE_DIR ${CMAKE_SOURCE_DIR}/LCS/pyparameterset) set(pytools_SOURCE_DIR ${CMAKE_SOURCE_DIR}/LCS/pytools) @@ -151,4 +153,5 @@ if(NOT DEFINED LOFAR_PACKAGE_LIST_INCLUDED) set(SAS_Tools_SOURCE_DIR ${CMAKE_SOURCE_DIR}/SubSystems/SAS_Tools) set(PVSS_DB_SOURCE_DIR ${CMAKE_SOURCE_DIR}/SubSystems/PVSS_DB) set(LAPS_CEP_SOURCE_DIR ${CMAKE_SOURCE_DIR}/SubSystems/LAPS_CEP) + set(MoMQueryService_SOURCE_DIR ${CMAKE_SOURCE_DIR}/SAS/MoM/MoMQueryService) endif(NOT DEFINED LOFAR_PACKAGE_LIST_INCLUDED) diff --git a/LCS/Messaging/python/messaging/CMakeLists.txt b/LCS/Messaging/python/messaging/CMakeLists.txt index 142cd51e6ae2bcf14fc2a5e83ff7dc3c38635948..7da1a11a0d96fee3aa46de0b60518c58f9edb52f 100644 --- a/LCS/Messaging/python/messaging/CMakeLists.txt +++ b/LCS/Messaging/python/messaging/CMakeLists.txt @@ -1,6 +1,6 @@ # $Id$ -#lofar_package(PyMessaging 1.0 DEPENDS PyCommon) +lofar_package(PyMessaging 1.0 DEPENDS PyCommon) include(PythonInstall) diff --git a/SAS/MoM/CMakeLists.txt b/SAS/MoM/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..fe7eed0755a032b13c9df21e015f81196840570a --- /dev/null +++ b/SAS/MoM/CMakeLists.txt @@ -0,0 +1,3 @@ +# $Id: CMakeLists.txt 32745 2015-11-01 20:17:08Z schoenmakers $ + +add_directory(MoMQueryService) diff --git a/SAS/MoM/MoMQueryService/CMakeLists.txt b/SAS/MoM/MoMQueryService/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..4143cbec73786ab9f97a167366e1dc18bd91fed2 --- /dev/null +++ b/SAS/MoM/MoMQueryService/CMakeLists.txt @@ -0,0 +1,14 @@ +# $Id$ + +lofar_package(MoMQueryService 1.0 DEPENDS PyMessaging) + +include(PythonInstall) + +set(_py_files + __init__.py + momqueryservice.py + momprojectdetailsquery.py +) + +python_install(${_py_files} DESTINATION lofar/mom/momqueryservice) + diff --git a/SAS/MoM/MoMQueryService/__init__.py b/SAS/MoM/MoMQueryService/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..fbbab2d1199b1de168c7f25fb5e7eac727b3d066 --- /dev/null +++ b/SAS/MoM/MoMQueryService/__init__.py @@ -0,0 +1 @@ +# $Id$ diff --git a/SAS/MoM/MoMQueryService/momprojectdetailsquery.py b/SAS/MoM/MoMQueryService/momprojectdetailsquery.py new file mode 100755 index 0000000000000000000000000000000000000000..b2f99eb823a875cae5525fa97954e6d6c6fee746 --- /dev/null +++ b/SAS/MoM/MoMQueryService/momprojectdetailsquery.py @@ -0,0 +1,26 @@ +#!/usr/bin/python + +import sys +from lofar.messaging.RPC import RPC + +''' Simple RPC client for Service momqueryservice.GetProjectDetails +''' + +if __name__ == '__main__': + if len(sys.argv) <= 1: + print 'Please provide one or more mom ids' + sys.exit(1) + + ids = ','.join(sys.argv[1:]) + with RPC('momqueryservice','GetProjectDetails',timeout=10) as getProjectDetails: + res,status=getProjectDetails(ids) + + if status == 'OK': + for id,obj in res.items(): + print 'Object %s' % (id) + for k,v in obj.items(): + print ' %s: %s' % (k, v) + print + else: + print status, res + diff --git a/SAS/MoM/MoMQueryService/momqueryservice.py b/SAS/MoM/MoMQueryService/momqueryservice.py new file mode 100755 index 0000000000000000000000000000000000000000..b36b416e05dc647a2675ee9a1977cbbe26494045 --- /dev/null +++ b/SAS/MoM/MoMQueryService/momqueryservice.py @@ -0,0 +1,57 @@ +#!/usr/bin/python +# $Id$ + +''' +Simple Service listening on momqueryservice.GetProjectDetails +which gives the project details for each requested mom object id +''' + +from mysql import connector +from lofar.messaging import Service + +# do not commit passwd in svn +passwd='' + +class DBlistener: + def __init__(self): + self.conn = connector.connect(host="mysql1.control.lofar", + user="momreadonly", + passwd=passwd, + database="lofar_mom3") + + def __call__(self, text): + # parse text + # it should contain a list of ints + # filter out everything else to prevent sql injection + mom_ids = [x.strip() for x in text.split(',')] + mom_ids = [x for x in mom_ids if x.isdigit()] + + cursor = self.conn.cursor() + # TODO: make a view for this query in momdb! + query = '''SELECT project.mom2id as project_mom2id, project.name as project_name, project.description as project_description, + object.mom2id as object_mom2id, object.name as object_name, object.description as object_description, object.mom2objecttype as object_type, object.group_id as object_group_id + FROM lofar_mom3.mom2object as object + inner join lofar_mom3.mom2object as project on project.id = object.ownerprojectid + where object.mom2id in (%s) + order by project_mom2id + ''' % (','.join(mom_ids)) + cursor.execute(query) + + result={} + + rows= cursor.fetchall() + for row in rows: + item = {'project_mom2id': int(row[0]), + 'project_name': row[1], + 'project_description': row[2], + 'object_mom2id': int(row[3]), + 'object_name': row[4], + 'object_description': row[5], + 'object_type': row[6], + 'object_group_id': int(row[7]) if row[7] else None} + result[str(row[3])] = item + + return result + +with Service("momqueryservice", "GetProjectDetails", DBlistener(), startonwith=True) as getProjectDetailsService: + getProjectDetailsService.WaitForInterrupt()