import java.io.File;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Date;
import java.util.concurrent.TimeUnit;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import akka.util.Duration;
import play.Application;
import play.GlobalSettings;
import play.Play;
import play.mvc.Http.RequestHeader;
import play.mvc.Result;
import setups.AppConfig;
public class Global extends GlobalSettings {
@Override
public Result onError(RequestHeader arg1, Throwable arg0) {
if( !AppConfig.isDev() ) {
StringWriter errors = new StringWriter();
arg0.printStackTrace(new PrintWriter(errors));
// System.out.println( "stack: " + errors );
java.util.Properties props = new java.util.Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.host", AppConfig.mail_smtpHost);
props.put("mail.smtp.port", AppConfig.mail_smtpPort);
Session session = Session.getInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(AppConfig.mail_smtpUsername, AppConfig.mail_smtpPassword);
}
});
try {
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress( AppConfig.mail_fromEmail ));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse( AppConfig.developerEmail ));
message.setSubject("Server error in Tracker - " + ((play.api.PlayException.UsefulException)arg0).id());
String text = "mode: " + Play.application().configuration().getString("app.envirement") + "id: " + ((play.api.PlayException.UsefulException)arg0).id() + "\n title: " + ((play.api.PlayException.UsefulException)arg0).title() + "\n" + "descr: " + ((play.api.PlayException.UsefulException)arg0).description() + "\n " + "msg: " + arg0.getMessage() + "\nstack: " + errors;
message.setText( text );
Transport.send( message );
} catch (MessagingException e) {
}
return super.onError(arg1, arg0);
// return Results.internalServerError( views.html.custom_500.render( ((play.api.PlayException.UsefulException)arg0).id() ) );
} else {
return super.onError(arg1, arg0);
}
}
@Override
public Result onHandlerNotFound(play.mvc.Http.RequestHeader arg0) {
if( AppConfig.isProd() ) {
return super.onHandlerNotFound(arg0);
} else {
return super.onHandlerNotFound(arg0);
}
}
@Override
public void onStart(Application app) {
if( Play.application().configuration().getString("app.envirement").equals("dev") ) {
AppConfig.setupDevEnv();
} else if( Play.application().configuration().getString("app.envirement").equals("test") ) {
AppConfig.setupTestEnv();
} else if( Play.application().configuration().getString("app.envirement").equals("prod") ) {
AppConfig.setupProdEnv();
}
play.libs.Akka.system().scheduler().schedule(
Duration.create(0, TimeUnit.MILLISECONDS),
Duration.create(1, TimeUnit.DAYS),
new Runnable() {
public void run() {
System.out.println("tick");
File dir = new File( AppConfig.temporaryFilesDirectory );
for( String fname : dir.list() ) {
if( fname.equals(".") || fname.equals("..") ) continue;
File tmp = new File( AppConfig.temporaryFilesDirectory + fname );
if( tmp.exists() && tmp.isFile() && ( new Date().getTime() - tmp.lastModified() ) > ( 30L * 86400L * 1000L ) ) {
tmp.delete();
}
}
}
}
);
super.onStart(app);
}
}