git://git.onelab.eu
/
sfa.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
2ac9cbb
)
improve server-side logging of exceptions
author
Thierry Parmentelat
<thierry.parmentelat@sophia.inria.fr>
Tue, 28 Sep 2010 16:07:13 +0000
(18:07 +0200)
committer
Thierry Parmentelat
<thierry.parmentelat@sophia.inria.fr>
Tue, 28 Sep 2010 16:07:13 +0000
(18:07 +0200)
13 files changed:
sfa/client/sfi.py
patch
|
blob
|
history
sfa/methods/CreateSliver.py
patch
|
blob
|
history
sfa/plc/api-dev.py
patch
|
blob
|
history
sfa/plc/api.py
patch
|
blob
|
history
sfa/trust/auth.py
patch
|
blob
|
history
sfa/trust/certificate.py
patch
|
blob
|
history
sfa/trust/credential.py
patch
|
blob
|
history
sfa/trust/credential_legacy.py
patch
|
blob
|
history
sfa/trust/gid.py
patch
|
blob
|
history
sfa/util/api.py
patch
|
blob
|
history
sfa/util/method.py
patch
|
blob
|
history
sfa/util/server.py
patch
|
blob
|
history
sfa/util/sfalogging.py
patch
|
blob
|
history
diff --git
a/sfa/client/sfi.py
b/sfa/client/sfi.py
index
ffc2dc5
..
f3b8490
100755
(executable)
--- a/
sfa/client/sfi.py
+++ b/
sfa/client/sfi.py
@@
-300,9
+300,6
@@
class Sfi:
if errors:
sys.exit(1)
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()
# 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)
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)
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
self.slicemgr = xmlrpcprotocol.get_server(sm_url, key_file, cert_file, self.options.debug)
return
diff --git
a/sfa/methods/CreateSliver.py
b/sfa/methods/CreateSliver.py
index
d2654b2
..
7c7a00e
100644
(file)
--- a/
sfa/methods/CreateSliver.py
+++ b/
sfa/methods/CreateSliver.py
@@
-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.sfatablesRuntime import run_sfatables
import sys
from sfa.trust.credential import Credential
-from sfa.util.sfalogging import logger
class CreateSliver(Method):
"""
class CreateSliver(Method):
"""
diff --git
a/sfa/plc/api-dev.py
b/sfa/plc/api-dev.py
index
29b0cc8
..
724d807
100644
(file)
--- a/
sfa/plc/api-dev.py
+++ b/
sfa/plc/api-dev.py
@@
-10,6
+10,8
@@
import os
import traceback
import string
import xmlrpclib
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 *
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.namespace import *
from sfa.util.api import *
from sfa.util.nodemanager import NodeManager
-from sfa.util.sfalogging import *
from collections import defaultdict
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.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,
def getPLCShell(self):
self.plauth = {'Username': self.config.SFA_PLC_USER,
diff --git
a/sfa/plc/api.py
b/sfa/plc/api.py
index
800ac3f
..
79555c4
100644
(file)
--- a/
sfa/plc/api.py
+++ b/
sfa/plc/api.py
@@
-10,6
+10,8
@@
import os
import traceback
import string
import xmlrpclib
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 *
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.namespace import *
from sfa.util.api import *
from sfa.util.nodemanager import NodeManager
-from sfa.util.sfalogging import *
try:
from collections import defaultdict
except:
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.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,
def getPLCShell(self):
self.plauth = {'Username': self.config.SFA_PLC_USER,
diff --git
a/sfa/trust/auth.py
b/sfa/trust/auth.py
index
8832639
..
d0d4abf
100644
(file)
--- a/
sfa/trust/auth.py
+++ b/
sfa/trust/auth.py
@@
-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
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.config import *
from sfa.util.namespace import *
from sfa.util.sfaticket import *
-from sfa.util.sfalogging import logger
import sys
class Auth:
import sys
class Auth:
diff --git
a/sfa/trust/certificate.py
b/sfa/trust/certificate.py
index
fe7f291
..
ca4858b
100644
(file)
--- a/
sfa/trust/certificate.py
+++ b/
sfa/trust/certificate.py
@@
-42,11
+42,13
@@
import os
import tempfile
import base64
import traceback
import tempfile
import base64
import traceback
+from tempfile import mkstemp
+
from OpenSSL import crypto
import M2Crypto
from M2Crypto import X509
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 *
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):
# 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:
# 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:
# if there is no parent, then no way to verify the chain
if not self.parent:
diff --git
a/sfa/trust/credential.py
b/sfa/trust/credential.py
index
286894c
..
6384afc
100644
(file)
--- a/
sfa/trust/credential.py
+++ b/
sfa/trust/credential.py
@@
-31,16
+31,17
@@
import os
import datetime
import os
import datetime
-from xml.dom.minidom import Document, parseString
from tempfile import mkstemp
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.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:
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
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'):
# 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):
# 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):
diff --git
a/sfa/trust/credential_legacy.py
b/sfa/trust/credential_legacy.py
index
c33ed6f
..
dc02941
100644
(file)
--- a/
sfa/trust/credential_legacy.py
+++ b/
sfa/trust/credential_legacy.py
@@
-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.trust.rights import *
from sfa.trust.gid import *
from sfa.util.faults import *
-from sfa.util.sfalogging import *
##
# Credential is a tuple:
##
# Credential is a tuple:
diff --git
a/sfa/trust/gid.py
b/sfa/trust/gid.py
index
cda25fc
..
678c1a3
100644
(file)
--- a/
sfa/trust/gid.py
+++ b/
sfa/trust/gid.py
@@
-29,9
+29,10
@@
### $URL$
import xmlrpclib
import uuid
### $URL$
import xmlrpclib
import uuid
+
+import sfa.util.sfalogging
from sfa.trust.certificate import Certificate
from sfa.util.namespace import *
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.
##
# 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:
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:
if uuid:
self.uuid = int(uuid)
if hrn:
diff --git
a/sfa/util/api.py
b/sfa/util/api.py
index
cda8c88
..
65ccc88
100644
(file)
--- a/
sfa/util/api.py
+++ b/
sfa/util/api.py
@@
-11,6
+11,7
@@
import traceback
import string
import xmlrpclib
import string
import xmlrpclib
+import sfa.util.sfalogging
from sfa.trust.auth import Auth
from sfa.util.config import *
from sfa.util.faults import *
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.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:
#
# 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.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
# load registries
from sfa.server.registry import Registries
diff --git
a/sfa/util/method.py
b/sfa/util/method.py
index
473bcd1
..
484b77b
100644
(file)
--- a/
sfa/util/method.py
+++ b/
sfa/util/method.py
@@
-14,10
+14,11
@@
import textwrap
import xmlrpclib
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.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):
# 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'):
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"
# XX print to some log file
# print >> log, "some output"
- pass
return result
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
# 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
raise fault
diff --git
a/sfa/util/server.py
b/sfa/util/server.py
index
93c3e81
..
505c788
100644
(file)
--- a/
sfa/util/server.py
+++ b/
sfa/util/server.py
@@
-19,13
+19,14
@@
import SimpleHTTPServer
import SimpleXMLRPCServer
from OpenSSL import SSL
from Queue import Queue
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.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
##
# 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
diff --git
a/sfa/util/sfalogging.py
b/sfa/util/sfalogging.py
index
0e17ccb
..
006250c
100644
(file)
--- a/
sfa/util/sfalogging.py
+++ b/
sfa/util/sfalogging.py
@@
-1,12
+1,14
@@
import logging
import os
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()
#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)
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)
# 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
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)
+
+