Dolda2000 GitWeb
/
ashd.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
python: Improved error handling and logging in ashd-wsgi.
[ashd.git]
/
python3
/
ashd-wsgi3
diff --git
a/python3/ashd-wsgi3
b/python3/ashd-wsgi3
index
0e562ec
..
cdabec3
100755
(executable)
--- a/
python3/ashd-wsgi3
+++ b/
python3/ashd-wsgi3
@@
-1,6
+1,6
@@
#!/usr/bin/python3
#!/usr/bin/python3
-import sys, os, getopt, threading, time, locale, collections
+import sys, os, getopt, threading,
logging,
time, locale, collections
import ashd.proto, ashd.util, ashd.perf
try:
import pdm.srv
import ashd.proto, ashd.util, ashd.perf
try:
import pdm.srv
@@
-8,17
+8,20
@@
except:
pdm = None
def usage(out):
pdm = None
def usage(out):
- out.write("usage: ashd-wsgi3 [-hA] [-m PDM-SPEC] [-p MODPATH] [-l REQLIMIT] HANDLER-MODULE [ARGS...]\n")
+ out.write("usage: ashd-wsgi3 [-hA
L
] [-m PDM-SPEC] [-p MODPATH] [-l REQLIMIT] HANDLER-MODULE [ARGS...]\n")
reqlimit = 0
modwsgi_compat = False
reqlimit = 0
modwsgi_compat = False
-opts, args = getopt.getopt(sys.argv[1:], "+hAp:l:m:")
+setlog = True
+opts, args = getopt.getopt(sys.argv[1:], "+hALp:l:m:")
for o, a in opts:
if o == "-h":
usage(sys.stdout)
sys.exit(0)
elif o == "-p":
sys.path.insert(0, a)
for o, a in opts:
if o == "-h":
usage(sys.stdout)
sys.exit(0)
elif o == "-p":
sys.path.insert(0, a)
+ elif o == "-L":
+ setlog = False
elif o == "-A":
modwsgi_compat = True
elif o == "-l":
elif o == "-A":
modwsgi_compat = True
elif o == "-l":
@@
-29,6
+32,9
@@
for o, a in opts:
if len(args) < 1:
usage(sys.stderr)
sys.exit(1)
if len(args) < 1:
usage(sys.stderr)
sys.exit(1)
+if setlog:
+ logging.basicConfig(format="ashd-wsgi3(%(name)s): %(levelname)s: %(message)s")
+log = logging.getLogger("ashd-wsgi3")
try:
handlermod = __import__(args[0], fromlist = ["dummy"])
try:
handlermod = __import__(args[0], fromlist = ["dummy"])
@@
-186,18
+192,18
@@
def dowsgi(req):
return write
with ashd.perf.request(env) as reqevent:
return write
with ashd.perf.request(env) as reqevent:
- respiter = handler(env, startreq)
try:
try:
+ respiter = handler(env, startreq)
try:
for data in respiter:
write(data)
if resp:
flushreq()
try:
for data in respiter:
write(data)
if resp:
flushreq()
-
except closed
:
- pass
- finally:
-
if hasattr(respiter, "close")
:
- respiter.close()
+
finally
:
+ if hasattr(respiter, "close"):
+ respiter.close()
+
except closed
:
+ pass
if resp:
reqevent.response(resp)
if resp:
reqevent.response(resp)
@@
-226,6
+232,8
@@
class reqthread(threading.Thread):
with flightlock:
inflight -= 1
flightlock.notify()
with flightlock:
inflight -= 1
flightlock.notify()
+ except:
+ log.error("exception occurred in handler thread", exc_info=True)
finally:
self.req.close()
sys.stderr.flush()
finally:
self.req.close()
sys.stderr.flush()