improve server-side logging of exceptions
authorThierry Parmentelat <thierry.parmentelat@sophia.inria.fr>
Tue, 28 Sep 2010 16:07:13 +0000 (18:07 +0200)
committerThierry Parmentelat <thierry.parmentelat@sophia.inria.fr>
Tue, 28 Sep 2010 16:07:13 +0000 (18:07 +0200)
13 files changed:
sfa/client/sfi.py
sfa/methods/CreateSliver.py
sfa/plc/api-dev.py
sfa/plc/api.py
sfa/trust/auth.py
sfa/trust/certificate.py
sfa/trust/credential.py
sfa/trust/credential_legacy.py
sfa/trust/gid.py
sfa/util/api.py
sfa/util/method.py
sfa/util/server.py
sfa/util/sfalogging.py

index ffc2dc5..f3b8490 100755 (executable)
@@ -300,9 +300,6 @@ class Sfi:
        if errors:
           sys.exit(1)
     
-       if self.options.verbose :
-          print "Contacting Slice Manager at:", sm_url
-          print "Contacting Registry at:", reg_url
     
        # Get key and certificate
        key_file = self.get_key_file()
@@ -312,7 +309,9 @@ class Sfi:
        self.cert_file = cert_file
        self.cert = Certificate(filename=cert_file) 
        # Establish connection to server(s)
+       if self.options.verbose : print "Contacting Registry at:", reg_url
        self.registry = xmlrpcprotocol.get_server(reg_url, key_file, cert_file, self.options.debug)  
+       if self.options.verbose : print "Contacting Slice Manager at:", sm_url
        self.slicemgr = xmlrpcprotocol.get_server(sm_url, key_file, cert_file, self.options.debug)
 
        return
index d2654b2..7c7a00e 100644 (file)
@@ -5,7 +5,6 @@ from sfa.util.parameter import Parameter, Mixed
 from sfa.util.sfatablesRuntime import run_sfatables
 import sys
 from sfa.trust.credential import Credential
-from sfa.util.sfalogging import logger
 
 class CreateSliver(Method):
     """
index 29b0cc8..724d807 100644 (file)
@@ -10,6 +10,8 @@ import os
 import traceback
 import string
 import xmlrpclib
+
+import sfa.util.sfalogging
 from sfa.trust.auth import Auth
 from sfa.util.config import *
 from sfa.util.faults import *
@@ -20,7 +22,6 @@ from sfa.trust.certificate import *
 from sfa.util.namespace import *
 from sfa.util.api import *
 from sfa.util.nodemanager import NodeManager
-from sfa.util.sfalogging import *
 from collections import defaultdict
 
 
@@ -324,7 +325,7 @@ class SfaAPI(BaseAPI):
 
         self.hrn = self.config.SFA_INTERFACE_HRN
         self.time_format = "%Y-%m-%d %H:%M:%S"
-        self.logger=get_sfa_logger()
+        self.logger=sfa.util.sfalogging.logger
 
     def getPLCShell(self):
         self.plauth = {'Username': self.config.SFA_PLC_USER,
index 800ac3f..79555c4 100644 (file)
@@ -10,6 +10,8 @@ import os
 import traceback
 import string
 import xmlrpclib
+
+import sfa.util.sfalogging
 import sfa.util.xmlrpcprotocol as xmlrpcprotocol
 from sfa.trust.auth import Auth
 from sfa.util.config import *
@@ -21,7 +23,6 @@ from sfa.trust.certificate import *
 from sfa.util.namespace import *
 from sfa.util.api import *
 from sfa.util.nodemanager import NodeManager
-from sfa.util.sfalogging import *
 try:
     from collections import defaultdict
 except:
@@ -106,7 +107,7 @@ class SfaAPI(BaseAPI):
 
         self.hrn = self.config.SFA_INTERFACE_HRN
         self.time_format = "%Y-%m-%d %H:%M:%S"
-        self.logger=get_sfa_logger()
+        self.logger=sfa.util.sfalogging.logger
 
     def getPLCShell(self):
         self.plauth = {'Username': self.config.SFA_PLC_USER,
index 8832639..d0d4abf 100644 (file)
@@ -6,6 +6,7 @@
 #
 
 
+#import sfa.util.sfalogging
 from sfa.trust.certificate import Keypair, Certificate
 from sfa.trust.credential import Credential
 from sfa.trust.trustedroot import TrustedRootList
@@ -14,7 +15,6 @@ from sfa.trust.hierarchy import Hierarchy
 from sfa.util.config import *
 from sfa.util.namespace import *
 from sfa.util.sfaticket import *
-from sfa.util.sfalogging import logger
 import sys
 
 class Auth:
index fe7f291..ca4858b 100644 (file)
@@ -42,11 +42,13 @@ import os
 import tempfile
 import base64
 import traceback
+from tempfile import mkstemp
+
 from OpenSSL import crypto
 import M2Crypto
 from M2Crypto import X509
-from tempfile import mkstemp
-from sfa.util.sfalogging import logger
+
+import sfa.util.sfalogging
 from sfa.util.namespace import urn_to_hrn
 from sfa.util.faults import *
 
@@ -583,12 +585,12 @@ class Certificate:
         # if this cert is signed by a trusted_cert, then we are set
         for trusted_cert in trusted_certs:
             if self.is_signed_by_cert(trusted_cert):
-                logger.debug("Cert %s signed by trusted cert %s", self.get_subject(), trusted_cert.get_subject())
+                sfa.util.sfalogging.logger.debug("Cert %s signed by trusted cert %s", self.get_subject(), trusted_cert.get_subject())
                 # verify expiration of trusted_cert ?
                 if not trusted_cert.cert.has_expired():
                     return trusted_cert
                 else:
-                    logger.debug("Trusted cert %s is expired", trusted_cert.get_subject())       
+                    sfa.util.sfalogging.logger.debug("Trusted cert %s is expired", trusted_cert.get_subject())       
 
         # if there is no parent, then no way to verify the chain
         if not self.parent:
index 286894c..6384afc 100644 (file)
 
 import os
 import datetime
-from xml.dom.minidom import Document, parseString
 from tempfile import mkstemp
+from xml.dom.minidom import Document, parseString
+from dateutil.parser import parse
+
+import sfa.util.sfalogging
 from sfa.trust.certificate import Keypair
 from sfa.trust.credential_legacy import CredentialLegacy
 from sfa.trust.rights import *
 from sfa.trust.gid import *
 from sfa.util.faults import *
 
-from sfa.util.sfalogging import logger
-from dateutil.parser import parse
 
 
 
@@ -661,7 +662,7 @@ class Credential(object):
                 trusted_cert_objects.append(GID(filename=f))
                 ok_trusted_certs.append(f)
             except Exception, exc:
-                logger.error("Failed to load trusted cert from %s: %r", f, exc)
+                sfa.util.sfalogging.logger.error("Failed to load trusted cert from %s: %r", f, exc)
         trusted_certs = ok_trusted_certs
 
         # Use legacy verification if this is a legacy credential
@@ -744,7 +745,7 @@ class Credential(object):
         # Maybe should be (hrn, type) = urn_to_hrn(root_cred_signer.get_urn())
         root_cred_signer_type = root_cred_signer.get_type()
         if (root_cred_signer_type == 'authority'):
-            #logger.debug('Cred signer is an authority')
+            #sfa.util.sfalogging.logger.debug('Cred signer is an authority')
             # signer is an authority, see if target is in authority's domain
             hrn = root_cred_signer.get_hrn()
             if root_target_gid.get_hrn().startswith(hrn):
index c33ed6f..dc02941 100644 (file)
@@ -14,7 +14,6 @@ from sfa.trust.certificate import Certificate
 from sfa.trust.rights import *
 from sfa.trust.gid import *
 from sfa.util.faults import *
-from sfa.util.sfalogging import *
 
 ##
 # Credential is a tuple:
index cda25fc..678c1a3 100644 (file)
 ### $URL$
 import xmlrpclib
 import uuid
+
+import sfa.util.sfalogging
 from sfa.trust.certificate import Certificate
 from sfa.util.namespace import *
-from sfa.util.sfalogging import logger
 
 ##
 # Create a new uuid. Returns the UUID as a string.
@@ -81,7 +82,7 @@ class GID(Certificate):
         
         Certificate.__init__(self, create, subject, string, filename)
         if subject:
-            logger.debug("Creating GID for subject: %s" % subject)
+            sfa.util.sfalogging.logger.debug("Creating GID for subject: %s" % subject)
         if uuid:
             self.uuid = int(uuid)
         if hrn:
index cda8c88..65ccc88 100644 (file)
@@ -11,6 +11,7 @@ import traceback
 import string
 import xmlrpclib
 
+import sfa.util.sfalogging
 from sfa.trust.auth import Auth
 from sfa.util.config import *
 from sfa.util.faults import *
@@ -18,7 +19,6 @@ from sfa.util.debug import *
 from sfa.trust.credential import *
 from sfa.trust.certificate import *
 from sfa.util.namespace import *
-from sfa.util.sfalogging import *
 
 # See "2.2 Characters" in the XML specification:
 #
@@ -148,7 +148,7 @@ class BaseAPI:
         self.credential = None
         self.source = None 
         self.time_format = "%Y-%m-%d %H:%M:%S"
-        self.logger=get_sfa_logger()
+        self.logger=sfa.util.sfalogging.logger
         
         # load registries
         from sfa.server.registry import Registries
index 473bcd1..484b77b 100644 (file)
@@ -14,10 +14,11 @@ import textwrap
 import xmlrpclib
 
 
+import sfa.util.sfalogging
 from sfa.util.faults import * 
 from sfa.util.parameter import Parameter, Mixed, python_type, xmlrpc_type
 from sfa.trust.auth import Auth
-from sfa.util.debug import profile, log
+#from sfa.util.debug import profile, log
 
 # we inherit object because we use new-style classes for legacy methods
 class Method (object):
@@ -91,9 +92,10 @@ class Method (object):
             runtime = time.time() - start
 
             if self.api.config.SFA_API_DEBUG or hasattr(self, 'message'):
+                msg=getattr(self,'message',"method %s completed"%methodname)
+                sfa.util.sfalogging.logger.info(msg)
                 # XX print to some log file
                 # print >> log, "some output"
-                   pass
 
             return result
 
@@ -104,9 +106,9 @@ class Method (object):
             # Prepend caller and method name to expected faults
             fault.faultString = caller + ": " +  self.name + ": " + fault.faultString
             runtime = time.time() - start
-           
-            if self.api.config.SFA_API_DEBUG:
-                traceback.print_exc()
+#            if self.api.config.SFA_API_DEBUG:
+#                traceback.print_exc()
+            sfa.util.sfalogging.log_exc("Method %s raised an exception"%self.name) 
             raise fault
 
 
index 93c3e81..505c788 100644 (file)
@@ -19,13 +19,14 @@ import SimpleHTTPServer
 import SimpleXMLRPCServer
 from OpenSSL import SSL
 from Queue import Queue
+
+#import sfa.util.sfalogging
 from sfa.trust.certificate import Keypair, Certificate
 from sfa.trust.credential import *
 from sfa.util.faults import *
 from sfa.plc.api import SfaAPI
 from sfa.util.cache import Cache 
-from sfa.util.debug import log
-from sfa.util.sfalogging import logger
+#from sfa.util.debug import log
 ##
 # Verification callback for pyOpenSSL. We do our own checking of keys because
 # we have our own authentication spec. Thus we disable several of the normal
index 0e17ccb..006250c 100644 (file)
@@ -1,12 +1,14 @@
 import logging
 import os
+import traceback
 
 #SFA access log initialization
 TMPDIR = os.getenv("TMPDIR", "/tmp")
 SFA_HTTPD_ACCESS_LOGFILE = TMPDIR + "/" + 'sfa_httpd_access.log'
 SFA_ACCESS_LOGFILE='/var/log/sfa_access.log'
 logger=logging.getLogger()
-logger.setLevel(logging.INFO)
+#logger.setLevel(logging.INFO)
+logger.setLevel(logging.DEBUG)
 
 try:
     logfile=logging.FileHandler(SFA_ACCESS_LOGFILE)
@@ -15,8 +17,22 @@ except IOError:
     # owned by root, but httpd is trying to access it.
     logfile=logging.FileHandler(SFA_HTTPD_ACCESS_LOGFILE)
     
-formatter = logging.Formatter("%(asctime)s - %(message)s")
+formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")
 logfile.setFormatter(formatter)
 logger.addHandler(logfile)
 def get_sfa_logger():
     return logger
+
+# logs an exception - use in an except statement
+def log_exc(message):
+    logger.error("%s BEG TRACEBACK"%message+"\n"+traceback.format_exc().strip("\n"))
+    logger.error("%s END TRACEBACK"%message)
+    
+
+# for investigation purposes, can be placed anywhere
+def log_stack(message):
+    to_log="".join(traceback.format_stack())
+    logger.debug("%s BEG STACK"%message+"\n"+to_log)
+    logger.debug("%s END STACK"%message)
+    
+