diff --git a/SAS/ResourceAssignment/SystemStatusDatabase/ssdb.py b/SAS/ResourceAssignment/SystemStatusDatabase/ssdb.py index e97ac20636637324dd4e791ee233f3e0821b50f3..cb869b21e1a86715a51f26f6a32e96b3daeebd9a 100644 --- a/SAS/ResourceAssignment/SystemStatusDatabase/ssdb.py +++ b/SAS/ResourceAssignment/SystemStatusDatabase/ssdb.py @@ -5,21 +5,16 @@ import psycopg2 as pg import psycopg2.extras as pgdefs from lofar.messaging import Service from lofar.common.util import waitForInterrupt +from lofar.common import dbcredentials import logging import sys logging.basicConfig(stream=sys.stdout, level=logging.INFO) logger = logging.getLogger(__name__) -DATABASE = "datamonitor" -USER = "lofarsys" -PASSWORD = "welkom001" - class SSDB: def __init__(self,**kwargs): - self.username = kwargs.pop("username", USER) - self.password = kwargs.pop("password", PASSWORD) - self.database = kwargs.pop("database", DATABASE) + self.dbcreds = kwargs.pop("dbcreds", None) self.conn = None self.DBconnected = (self.conn and self.conn.status==1) self.Qlistall="select * from hosts inner join datapaths on hosts.id = datapaths.hostid;" @@ -42,10 +37,14 @@ class SSDB: self.DBconnected = (self.conn and self.conn.status==1) if not self.DBconnected: try: - self.conn= pg.connect("dbname=%s user=%s password=%s" % (DATABASE,USER,PASSWORD)) + self.conn = pg.connect(host=self.dbcreds.host, + user=self.dbcreds.user, + password=self.dbcreds.password, + database=self.dbcreds.database, + connect_timeout=5) self.DBconnected = (self.conn and self.conn.status==1) except Exception as e: - logger.error("[SSDBconnector]: DB connection could not be restored.") + logger.error("[SSDBconnector]: DB connection could not be restored: %s" % (e,)) return self.DBconnected def _doquery(self,q): diff --git a/SAS/ResourceAssignment/SystemStatusService/SSDBQueryService.py b/SAS/ResourceAssignment/SystemStatusService/SSDBQueryService.py index 7201d5d92aee28d686c08d1bf1690f2dd1d0c558..81cbf0b9bd4ee9e48da7403a657c9eecea9259b9 100644 --- a/SAS/ResourceAssignment/SystemStatusService/SSDBQueryService.py +++ b/SAS/ResourceAssignment/SystemStatusService/SSDBQueryService.py @@ -3,6 +3,7 @@ from lofar.messaging import Service, MessageHandlerInterface from lofar.common.util import waitForInterrupt from lofar.sas.systemstatus.database.ssdb import SSDB +from lofar.common import dbcredentials import logging import sys @@ -11,18 +12,13 @@ logger = logging.getLogger(__name__) SERVICENAME = "GetServerState" BUSNAME = "simpletest" -DATABASE = "datamonitor" -USER = "lofarsys" -PASSWORD = "welkom001" class DataMonitorQueryService(MessageHandlerInterface): def __init__(self,**kwargs): super(DataMonitorQueryService,self).__init__(**kwargs) - self.username = kwargs.pop("username", USER) - self.password = kwargs.pop("password", PASSWORD) - self.database = kwargs.pop("database", DATABASE) + self.dbcreds = kwargs.pop("dbcreds", None) self.service2MethodMap = { 'GetStateNames':self.getstatenames, @@ -35,7 +31,7 @@ class DataMonitorQueryService(MessageHandlerInterface): def prepare_loop(self): - self.ssdb = SSDB(username=self.username,password=self.password,database=self.database) + self.ssdb = SSDB(dbcreds=self.dbcreds) def prepare_receive(self): self.ssdb.ensure_connected() @@ -99,9 +95,14 @@ class DataMonitorQueryService(MessageHandlerInterface): jobinfo = self.ssdb.getIngestJobs() return { "main" : maininfo, "jobs" : jobinfo }; -def createService(busname=BUSNAME,servicename=SERVICENAME): - return Service(servicename,DataMonitorQueryService,busname=busname,numthreads=4,use_service_methods=True) +def createService(busname=BUSNAME,servicename=SERVICENAME, dbcreds=None): + return Service(servicename, + DataMonitorQueryService, + busname=busname, + numthreads=4, + handler_args={'dbcreds': dbcreds}, + use_service_methods=True) -def runservice(busname=BUSNAME,servicename=SERVICENAME): - with createService(busname,servicename) as GetServerState: +def runservice(busname=BUSNAME,servicename=SERVICENAME, dbcreds=None): + with createService(busname,servicename,dbcreds) as GetServerState: waitForInterrupt() diff --git a/SAS/ResourceAssignment/SystemStatusService/ssdbservice b/SAS/ResourceAssignment/SystemStatusService/ssdbservice index 11b7adb47e2e6840552111db4e4d52832fb3ee7a..9f69e52043c0d40c8c36fc4da41d7f75d3217877 100755 --- a/SAS/ResourceAssignment/SystemStatusService/ssdbservice +++ b/SAS/ResourceAssignment/SystemStatusService/ssdbservice @@ -7,6 +7,7 @@ runs the systemstatus database service import logging from optparse import OptionParser from lofar.sas.systemstatus.service.SSDBQueryService import runservice +from lofar.common import dbcredentials logger = logging.getLogger(__name__) DEFAULT_BUSNAME="amq.topic" @@ -18,8 +19,18 @@ if __name__ == '__main__': # Check the invocation arguments parser = OptionParser("%prog [options]", description='runs the systemstatus database service') - parser.add_option("-b", "--busname", dest="busname", type="string", default=DEFAULT_BUSNAME, help="Name of the bus exchange on the qpid broker, default: %s" % DEFAULT_BUSNAME) - parser.add_option("-s", "--servicename", dest="servicename", type="string", default=DEFAULT_SERVICENAME, help="Name for this service, default: %s" % DEFAULT_SERVICENAME) + parser.add_option("-b", "--busname", dest="busname", type="string", + default=DEFAULT_BUSNAME, + help="Name of the bus exchange on the qpid broker, default: %s" % DEFAULT_BUSNAME) + parser.add_option("-s", "--servicename", dest="servicename", type="string", + default=DEFAULT_SERVICENAME, + help="Name for this service, default: %s" % DEFAULT_SERVICENAME) + parser.add_option_group(dbcredentials.options_group(parser)) + parser.set_defaults(dbcredentials="SSDB") (options, args) = parser.parse_args() - runservice(busname=options.busname, servicename=options.servicename) + dbcreds = dbcredentials.parse_options(options) + + logger.info("Using dbcreds: %s" % dbcreds.stringWithHiddenPassword()) + + runservice(busname=options.busname, servicename=options.servicename, dbcreds=dbcreds)