3 from twisted.internet import reactor
4 from twisted.mail import smtp, relaymanager
6 from email import Encoders
7 from email.MIMEBase import MIMEBase
8 from email.MIMEText import MIMEText
9 from email.MIMEMultipart import MIMEMultipart
11 g_config_after_file_status = ""
13 def getMailExchange(H):
15 return str(mxRecord.name)
16 return relaymanager.MXCalculator().getMX(H).addCallback(cbMX)
20 if d is None or d == "":
22 for f in os.listdir(d):
23 if f.startswith("enigma2_crash_") and f.endswith(".log"):
24 print "[CrashReport] found : ", os.path.basename(f)
28 def sendEmail(F, T, M, S="", FL=[]):
30 print "[CrashReport] Error >> \n", e.getErrorMessage()
34 print "[CrashReport] Success >> after action : [%s], success message : [%s]" % (g_config_after_file_status, r)
35 global g_config_after_file_status
37 if f.startswith("/tmp/"):
39 if g_config_after_file_status == "rename":
40 n = "%s/%s.summited" % (os.path.dirname(f), os.path.basename(f))
41 print "[CrashReport] rename : [%s] to [%s]" % (f,n)
43 elif g_config_after_file_status == "delete":
44 print "[CrashReport] remove : [%s]" % (f)
49 context = MIMEMultipart('alternative')
52 context['Subject'] = S
53 #context['Date'] = smtp.rfc822date()
54 context['MIME-Version'] = '1.0'
55 context.attach(MIMEText(M, 'plain'))
58 ctype, encoding = mimetypes.guess_type(f)
59 if ctype is None or encoding is not None:
60 ctype = 'application/octet-stream'
61 maintype, subtype = ctype.split('/', 1)
63 tmp = MIMEBase(maintype, subtype)
64 tmp.set_payload(file(f).read())
65 Encoders.encode_base64(tmp)
67 tmp.add_header("Content-Transfer-Encoding", 'base64')
68 tmp.add_header('Content-Disposition', 'attachment', filename=os.path.basename(f))
69 tmp.add_header('Content-Description', 'vuplus crashlog')
72 print "[CrashReport] host:[%s], from:[%s], to:[%s]" % (H, F, T)
73 sending = smtp.sendmail(str(H), F, T, context.as_string())
74 sending.addCallback(cbSuccess).addErrback(cbError)
75 return getMailExchange(T.split("@")[1]).addCallback(cbSend)
77 def doSummit(summitTo, summitFrom, summitName, afterFileStatus="rename"):
78 fileList = getLogList('/media/hdd')
79 if len(fileList) == 0:
82 fileListLen = len(fileList)
83 if os.path.exists("/tmp/machine.info"):
84 fileList.append("/tmp/machine.info")
86 global g_config_after_file_status
87 g_config_after_file_status = afterFileStatus
88 summitText = "There are %d crash logs found for you.\n" % (fileListLen)
89 if summitName is not None or summitName != "":
90 summitText += "\nSubmitter : %s (%s)\n" % (summitName, summitFrom)
91 summitText += "\nThis is an automatically generated email from the CrashlogReport-Plugin.\nGood luck.\n"
92 summitSubject = "Submit automatically generated crashlog."
93 sendEmail(summitFrom, summitTo, summitText, summitSubject, fileList)
97 print "[CrashReport] argvs : ", sys.argv
98 if len(sys.argv) == 4:
99 doSummit(summitTo='vuplus@code.vuplus.com', summitFrom=sys.argv[1], summitName=sys.argv[2], afterFileStatus=sys.argv[3])