From d4f0cb36b6104a6dcb4989c942684b086f68f74e Mon Sep 17 00:00:00 2001 From: Jorrit Schaap <schaap@astron.nl> Date: Thu, 5 Nov 2015 11:19:51 +0000 Subject: [PATCH] Task #8705: added PyMessaging as lofar_package. Added MoMQueryService and a simple client --- .gitattributes | 5 ++ CMake/LofarPackageList.cmake | 3 + LCS/Messaging/python/messaging/CMakeLists.txt | 2 +- SAS/MoM/CMakeLists.txt | 3 + SAS/MoM/MoMQueryService/CMakeLists.txt | 14 +++++ SAS/MoM/MoMQueryService/__init__.py | 1 + .../MoMQueryService/momprojectdetailsquery.py | 26 +++++++++ SAS/MoM/MoMQueryService/momqueryservice.py | 57 +++++++++++++++++++ 8 files changed, 110 insertions(+), 1 deletion(-) create mode 100644 SAS/MoM/CMakeLists.txt create mode 100644 SAS/MoM/MoMQueryService/CMakeLists.txt create mode 100644 SAS/MoM/MoMQueryService/__init__.py create mode 100755 SAS/MoM/MoMQueryService/momprojectdetailsquery.py create mode 100755 SAS/MoM/MoMQueryService/momqueryservice.py diff --git a/.gitattributes b/.gitattributes index a75c0ab764f..c30c7891640 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 1e2efe49f3f..5a209546d42 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 142cd51e6ae..7da1a11a0d9 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 00000000000..fe7eed0755a --- /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 00000000000..4143cbec737 --- /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 00000000000..fbbab2d1199 --- /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 00000000000..b2f99eb823a --- /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 00000000000..b36b416e05d --- /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() -- GitLab