misc/incident-gatherer: add classify_tahoe.py: a foolscap incident-gatherer classification plugin

This commit is contained in:
Brian Warner 2008-10-15 15:09:40 -07:00
parent 8a6d1e5da6
commit f3d730428f

View File

@ -0,0 +1,67 @@
import re
umidmap = {
'lp1vaQ': 'download-not-enough-shares',
'3uuBUQ': 'download-connection-lost-in-get-buckets',
'LkD9Pw': 'user-incident-button',
}
def classify_incident(trigger):
m = trigger.get('message', '')
f = trigger.get('format', '')
umid_value = umidmap.get(trigger.get('umid',''), None)
if umid_value:
return umid_value
if re.search(r"^they had shares .* that we didn't know about$", m):
# Publish._got_write_answer
return "mutable-publish-surprise-shares"
if m.startswith("error during query"):
# there are a couple of different places that can generate this
# message (the result of cut-and-paste error-handling), so it isn't
# clear which is which
if re.search(r'mutable/servermap\.py.*_do_query', m):
# servermap.ServermapUpdater._query_failed()
where = "mapupdate"
elif re.search(r'mutable/retrieve\.py.*_got_results_one_share', m):
where = "retrieve"
else:
where = "unknown"
if ("Calling Stale Broker" in m and "DeadReferenceError" in m):
# a storage server went offline while we were talking to it (or
# because the client was shut off in the middle of an operation)
what = "lost-server"
elif "IOError" in m:
what = "ioerror"
elif ("UncoordinatedWriteError" in m and
"someone wrote to the data since we read the servermap" in m):
what = "uncoordinated-write-error"
elif "ConnectionLost" in m:
what = "lost-server"
else:
what = "unknown"
return "mutable-" + where + "-query-" + what
if (f.startswith("ran out of peers:") and
"have" in trigger and "need" in trigger):
return "mutable-retrieve-failure"
if m.startswith("invalid privkey from "):
# TODO: a UCW causes this, after the prefix has changed. Compare the
# prefix before trying to validate the privkey, to avoid the
# duplicate error.
return "mutable-mapupdate-bad-privkey"
if trigger.get('facility', '') == "tahoe.introducer":
if (trigger.get('isError', False)
and "ConnectionDone" in str(trigger.get('failure',''))):
return "introducer-lost-connection"
if "Initial Introducer connection failed" in m:
return "introducer-connection-failed"
return None