From: Anil-Kumar Vengalil Date: Mon, 17 Aug 2009 17:56:56 +0000 (+0000) Subject: logging and call tracing features X-Git-Tag: sfa-0.9-1~74 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;ds=sidebyside;h=a57602691559f9591877edeaebe512c7a5651fcf;p=sfa.git logging and call tracing features --- diff --git a/sfa/methods/create_slice.py b/sfa/methods/create_slice.py index 906bf63e..a2b07d55 100644 --- a/sfa/methods/create_slice.py +++ b/sfa/methods/create_slice.py @@ -10,6 +10,7 @@ from sfa.plc.slices import Slices from sfa.util.config import Config # RSpecManager_pl is not used. This is just to resolve issues with the dynamic __import__ that comes later. import sfa.rspecs.aggregates.rspec_manager_pl +from sfa.trust.credential import Credential class create_slice(Method): @@ -32,11 +33,16 @@ class create_slice(Method): returns = Parameter(int, "1 if successful") - def call(self, cred, hrn, rspec): + def call(self, cred, hrn, rspec, caller_cred=None): + if caller_cred==None: + caller_cred=cred + #log the call + self.api.logger.info("interface: %s\tcaller-hrn: %s\ttarget-hrn: %s\tmethod-name: %s"%(self.api.interface, Credential(string=caller_cred).get_gid_caller().get_hrn(), hrn, self.name)) + sfa_aggregate_type = Config().get_aggregate_rspec_type() self.api.auth.check(cred, 'createslice') if (sfa_aggregate_type == 'pl'): - slices = Slices(self.api) + slices = Slices(self.api, caller_cred=caller_cred) slices.create_slice(hrn, rspec) else: # To clean up after July 21 - SB diff --git a/sfa/methods/delete_slice.py b/sfa/methods/delete_slice.py index a1ca96de..418d8176 100644 --- a/sfa/methods/delete_slice.py +++ b/sfa/methods/delete_slice.py @@ -6,6 +6,7 @@ from sfa.util.misc import * from sfa.util.method import Method from sfa.util.parameter import Parameter, Mixed from sfa.trust.auth import Auth +from sfa.trust.credential import Credential from sfa.plc.slices import Slices @@ -27,9 +28,14 @@ class delete_slice(Method): returns = Parameter(int, "1 if successful") - def call(self, cred, hrn): + def call(self, cred, hrn, caller_cred=None): + if caller_cred==None: + caller_cred=cred + #log the call + self.api.logger.info("interface: %s\tcaller-hrn: %s\ttarget-hrn: %s\tmethod-name: %s"%(self.api.interface, Credential(string=caller_cred).get_gid_caller().get_hrn(), hrn, self.name)) + self.api.auth.check(cred, 'deleteslice') - slices = Slices(self.api) + slices = Slices(self.api, caller_cred=caller_cred) slices.delete_slice(hrn) return 1 diff --git a/sfa/methods/get_resources.py b/sfa/methods/get_resources.py index 468783c7..89cc654c 100644 --- a/sfa/methods/get_resources.py +++ b/sfa/methods/get_resources.py @@ -9,6 +9,7 @@ from sfa.util.config import Config from sfa.plc.nodes import Nodes # RSpecManager_pl is not used. This is just to resolve issues with the dynamic __import__ that comes later. import sfa.rspecs.aggregates.rspec_manager_pl +from sfa.trust.credential import Credential class get_resources(Method): """ @@ -30,12 +31,18 @@ class get_resources(Method): returns = Parameter(str, "String representatin of an rspec") - def call(self, cred, hrn=None): + def call(self, cred, hrn=None, caller_cred=None): sfa_aggregate_type = Config().get_aggregate_rspec_type() self.api.auth.check(cred, 'listnodes') + if caller_cred==None: + caller_cred=cred + + #log the call + self.api.logger.info("interface: %s\tcaller-hrn: %s\ttarget-hrn: %s\tmethod-name: %s"%(self.api.interface, Credential(string=caller_cred).get_gid_caller().get_hrn(), hrn, self.name)) + if (sfa_aggregate_type == 'pl'): - nodes = Nodes(self.api) + nodes = Nodes(self.api, caller_cred=caller_cred) if hrn: rspec = nodes.get_rspec(hrn) else: diff --git a/sfa/methods/list.py b/sfa/methods/list.py index e9be62e7..5ca15aac 100644 --- a/sfa/methods/list.py +++ b/sfa/methods/list.py @@ -8,6 +8,7 @@ from sfa.trust.auth import Auth from sfa.util.record import GeniRecord from sfa.server.registry import Registries from sfa.util.prefixTree import prefixTree +from sfa.trust.credential import Credential class list(Method): """ @@ -17,7 +18,6 @@ class list(Method): @param hrn human readable name of authority to list @return list of record dictionaries """ - interfaces = ['registry'] accepts = [ @@ -27,9 +27,14 @@ class list(Method): returns = [GeniRecord] - def call(self, cred, hrn): - + def call(self, cred, hrn, caller_cred=None): + self.api.auth.check(cred, 'list') + if caller_cred==None: + caller_cred=cred + + #log the call + self.api.logger.info("interface: %s\tcaller-hrn: %s\ttarget-hrn: %s\tmethod-name: %s"%(self.api.interface, Credential(string=caller_cred).get_gid_caller().get_hrn(), hrn, self.name)) records = [] # load all know registry names into a prefix tree and attempt to find @@ -47,9 +52,9 @@ class list(Method): # if the best match (longest matching hrn) is not the local registry, # forward the request if registry_hrn != self.api.hrn: - credential = self.api.getCredential() + credential = self.api.getCredential() try: - record_list = registries[registry_hrn].list(credential, hrn) + record_list = registries[registry_hrn].list(credential, hrn, caller_cred=caller_cred) records = [record.as_dict() for record in record_list] if records: return records