digitalmars.D.announce - Automatilc e-mail crach reporting
-
BCS
(124/124)
Jun 13 2006
/* * Hacked this together, though y'all might like it.
* */ - Georg Wrede (4/6) Jun 15 2006 Excellent!
- BCS (11/23) Jun 15 2006 IMNSHO if it end up in there , it had better be *off* by default.
- Georg Wrede (2/17) Jun 16 2006 True.
/* * Hacked this together, though y'all might like it. <g>* */
module email;
private import std.date;
private import std.string;
private import std.socket;
private import std.socketstream;
//private import std.stdio;
/**
encapsulate an e-mail logging system.
usage:
declare at global scope:
EmailMessage email;
as first lines in main:
email = new EmailMessage(SMTPSrv, to, from, Sub);
scope(failure) email.send();
as first line in every other function put:
scope(failure)email.log(__FILE__,__LINE__,<some message>);
at other important points put in:
email.log(__FILE__,__LINE__,<some message>);
*/
class EmailMessage
{
char[] server, to, from, subject;
char[][] message;
int at;
/**
arg srv: the outbound SMTP server
arg t: the to address
arg f: the from address
arg sub: the subject
*/
this(char[] srv, char[] t, char[] f, char[] sub)
{
server = srv.dup;
to = t.dup;
from = f.dup;
subject = sub.dup;
at=0;
}
/**
arg file: __FILE__
arg line: __LINE__
agr msg: the message to print
*/
void log(char[] file, int line, char[] msg)
{
if(message.length <= at)
message.length = at+10;
auto time = getUTCtime();
message[at] = (
file ~ ":" ~
std.string.toString(line)~" "~
toTimeString(time)~"("~
std.string.toString(time%TicksPerSecond)~
") >"~msg).dup;
at++;
}
/** sne off the message */
void send()
{
Stream outs;
auto sock = new Socket(AddressFamily.INET, SocketType.STREAM);
sock.connect(new InternetAddress(server, 25));
outs = new SocketStream(sock);
outs.writeString("HELO none anon.org\r\n"
"MAIL FROM:<"~from~">\r\n"
"RCPT TO:<"~to~">\r\n"
"DATA\r\n"
"Subject: "~subject~\r\n
"Content-Type: text/plain; charset=us-ascii\r\n\r\n");
foreach(line; message[0..at])
{
if("." == line)
{
outs.writeString("..\r\n");
}
else
{
outs.writeString(line~\r\n);
}
}
outs.writeString(".\r\nQUIT\r\n");
outs.close;
at = 0;
}
}
/***EXAMPLE****/
private import std.compiler;
EmailMessage email;
void main()
{
email = new EmailMessage("10.0.0.1", "sendto 10.0.0.1",
"sendto 10.0.0.1", "a test of somthing");
email.log(__FILE__,__LINE__,"Built "__DATE__" "__TIME__);
email.log(__FILE__,__LINE__,std.compiler.name);
scope(failure)
{
writef("sending error report\n");
email.send();
}
email.log(__FILE__,__LINE__,"Global catch");
writef("going\n");
foo(30);
writef("done\n");
}
void foo(int i)
{
scope(failure)email.log(__FILE__,__LINE__,"foo catch");
if(i) bar(i-1);
throw new Error("foo");
}
void bar(int i)
{
scope(failure)email.log(__FILE__,__LINE__,"foo catch");
if(i) baz(i-1);
throw new Error("foo");
}
void baz(int i)
{
scope(failure)email.log(__FILE__,__LINE__,"foo catch");
if(i) foo(i-1);
throw new Error("foo");
}
Jun 13 2006
BCS wrote:/* * Hacked this together, though y'all might like it. <g>* */...encapsulate an e-mail logging system.Excellent! IMNSHO This ought to be in both Phobos and Ares.
Jun 15 2006
Georg Wrede wrote:BCS wrote:IMNSHO if it end up in there , it had better be *off* by default. version(EMAIL_DUMP) pragma(msg, "WARNING: E-mail crash reporting ON.") ... version(EMAIL_DUMP) scope(failure) email.log(... I can just see someone getting 100,000 emails from a one line bug, and of course someone will keep using the broken version until who only knowns when. Hmmm.. A timeout feature in send() might not be a bad idea ("don't send e-mails after..."). OTOH I think I might have posted a broken version. Could someone test it out and such?/* * Hacked this together, though y'all might like it. <g>* */...encapsulate an e-mail logging system.Excellent! IMNSHO This ought to be in both Phobos and Ares.
Jun 15 2006
BCS wrote:Georg Wrede wrote:True.BCS wrote:IMNSHO if it end up in there , it had better be *off* by default./* * Hacked this together, though y'all might like it. <g>* */...encapsulate an e-mail logging system.Excellent! IMNSHO This ought to be in both Phobos and Ares.
Jun 16 2006








Georg Wrede <georg.wrede nospam.org>