chiark
/
gitweb
/
~ian
/
hippotat.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
do not crash on unexpected connectionLost
[hippotat.git]
/
hippotat
diff --git
a/hippotat
b/hippotat
index 43faf28715e1ab2a27f71b496cf1fc6226f1696a..b8477bb24bf33d745649a0082d363bff167c574c 100755
(executable)
--- a/
hippotat
+++ b/
hippotat
@@
-21,7
+21,7
@@
# along with this program, in the file GPLv3. If not,
# see <http://www.gnu.org/licenses/>.
# along with this program, in the file GPLv3. If not,
# see <http://www.gnu.org/licenses/>.
-#@ sys.path.append('@PYBUILD_INSTALL_DIR@')
+#@
import sys;
sys.path.append('@PYBUILD_INSTALL_DIR@')
from hippotatlib import *
import twisted.web
from hippotatlib import *
import twisted.web
@@
-56,9
+56,10
@@
class ResponseConsumer(GeneralResponseConsumer):
self._handleexception()
def connectionLost(self, reason):
self._handleexception()
def connectionLost(self, reason):
- self._log(DBG.HTTP_CTRL, 'connectionLost ' + str(reason))
+ reason_msg = 'connectionLost ' + str(reason)
+ self._log(DBG.HTTP_CTRL, reason_msg)
if not reason.check(twisted.web.client.ResponseDone):
if not reason.check(twisted.web.client.ResponseDone):
- self.
latefailure(
)
+ self.
_latefailure(reason_msg
)
return
try:
self._log(DBG.HTTP, 'ResponseDone')
return
try:
self._log(DBG.HTTP, 'ResponseDone')
@@
-150,9
+151,11
@@
class Client():
# later, by ResponsConsumer or ErrorResponsConsumer
try:
cl.log(DBG.HTTP_CTRL, 'req_err ' + str(err), idof=req)
# later, by ResponsConsumer or ErrorResponsConsumer
try:
cl.log(DBG.HTTP_CTRL, 'req_err ' + str(err), idof=req)
+ cl.running_reported = False
if isinstance(err, twisted.python.failure.Failure):
err = err.getTraceback()
if isinstance(err, twisted.python.failure.Failure):
err = err.getTraceback()
- print('[%#x] %s' % (id(req), err), file=sys.stderr)
+ print('%s[%#x] %s' % (cl.desc, id(req), err.strip('\n').replace('\n',' / ')),
+ file=sys.stderr)
if not isinstance(cl.outstanding[req], int):
raise RuntimeError('[%#x] previously %s' %
(id(req), cl.outstanding[req]))
if not isinstance(cl.outstanding[req], int):
raise RuntimeError('[%#x] previously %s' %
(id(req), cl.outstanding[req]))
@@
-184,13
+187,15
@@
class Client():
d = mime_translate(d)
d = mime_translate(d)
+ token = authtoken_make(cl.c.secret)
+
crlf = b'\r\n'
lf = b'\n'
mime = (b'--b' + crlf +
b'Content-Type: text/plain; charset="utf-8"' + crlf +
b'Content-Disposition: form-data; name="m"' + crlf + crlf +
str(cl.c.client) .encode('ascii') + crlf +
crlf = b'\r\n'
lf = b'\n'
mime = (b'--b' + crlf +
b'Content-Type: text/plain; charset="utf-8"' + crlf +
b'Content-Disposition: form-data; name="m"' + crlf + crlf +
str(cl.c.client) .encode('ascii') + crlf +
-
cl.c.password
+ crlf +
+
token
+ crlf +
str(cl.c.target_requests_outstanding)
.encode('ascii') + crlf +
str(cl.c.http_timeout) .encode('ascii') + crlf +
str(cl.c.target_requests_outstanding)
.encode('ascii') + crlf +
str(cl.c.http_timeout) .encode('ascii') + crlf +
@@
-243,6
+248,8
@@
def process_cfg(_opts, putative_servers, putative_clients):
sections = cfg_process_client_common(c,ss,cs,ci)
if not sections: continue
sections = cfg_process_client_common(c,ss,cs,ci)
if not sections: continue
+ log_debug_config('processing client [%s %s]' % (ss, cs))
+
def srch(getter,key): return cfg_search(getter,key,sections)
c.http_timeout += srch(cfg.getint, 'http_timeout_grace')
def srch(getter,key): return cfg_search(getter,key,sections)
c.http_timeout += srch(cfg.getint, 'http_timeout_grace')
@@
-252,6
+259,9
@@
def process_cfg(_opts, putative_servers, putative_clients):
c.max_queue_time = srch(cfg.getint, 'max_queue_time')
c.vroutes = srch(cfg.get, 'vroutes')
c.max_queue_time = srch(cfg.getint, 'max_queue_time')
c.vroutes = srch(cfg.get, 'vroutes')
+ try: c.ifname = srch(cfg_get_raw, 'ifname_client')
+ except NoOptionError: pass
+
try: c.url = srch(cfg.get,'url')
except NoOptionError:
cfg_process_saddrs(c, ss)
try: c.url = srch(cfg.get,'url')
except NoOptionError:
cfg_process_saddrs(c, ss)