package dk.daoas.adressevedligehold; import java.util.HashMap; import java.util.List; import java.util.Map.Entry; import java.util.Properties; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import dk.daoas.adressevedligehold.beans.Address; import dk.daoas.adressevedligehold.beans.Address.AddressState; import dk.daoas.adressevedligehold.tasks.TaskLogger; import dk.daoas.adressevedligehold.util.TimingHelper; /* * TODO: detail rapport pr postnr * TODO: ved mangel oversigten - skeln mellem om det er nye/CREATED eller om det er gamle kendte adresser */ public class AddressReport { static class NumEntry { int open = 0; int closed = 0; int modified = 0; int created = 0; public void updateFromState(AddressState st) { if (st == AddressState.OPENED) open++; if (st == AddressState.MODIFIED) modified++; if (st == AddressState.CLOSED) closed++; } public void updateFromOther(NumEntry other) { this.open += other.open; this.modified += other.modified; this.closed += other.closed; this.created += other.created; } } static class WeekEntry { NumEntry man = new NumEntry(); NumEntry tir = new NumEntry(); NumEntry ons = new NumEntry(); NumEntry tor = new NumEntry(); NumEntry fre = new NumEntry(); NumEntry lor = new NumEntry(); NumEntry son = new NumEntry(); public void incrementFromOther(WeekEntry other) { man.updateFromOther(other.man); tir.updateFromOther(other.tir); ons.updateFromOther(other.ons); tor.updateFromOther(other.tor); fre.updateFromOther(other.fre); lor.updateFromOther(other.lor); son.updateFromOther(other.son); } public void incrementCreated() { man.created++; tir.created++; ons.created++; tor.created++; fre.created++; lor.created++; son.created++; } } private static TaskLogger logger = TaskLogger.getInstance(); AddressManager addrManager; List
addressList; int entryCount; EntryUgedage ugedage; AddressSource source; TimingHelper timer; boolean writeBack; //TODO: Afviste adresser public AddressReport(AddressManager addrManager, int entryCount, EntryUgedage ugedage, AddressSource source, TimingHelper timer, boolean writeBack ) { this.addrManager = addrManager; addressList = addrManager.getAddressList(); this.entryCount = entryCount; this.ugedage = ugedage; this.source = source; this.timer = timer; this.writeBack = writeBack; } public void sendRapport() { logger.info("Sending mail"); String reportData = getReportData(); String subject = "Indlæsnings rapport for " + source.getDistributor(); AddressReport.sendMail(subject, reportData); } public static void sendMail(String subject, String htmlBody) { Properties props = new Properties(); props.put("mail.smtp.host", "10.30.1.28"); //props.put("mail.smtp.host", "192.168.12.10"); try { // create some properties and get the default Session Session session = Session.getDefaultInstance(props, null); session.setDebug(false); MimeMessage msg = new MimeMessage(session); msg.setFrom( new InternetAddress("no-reply@daoas.dk") ); msg.setRecipient(Message.RecipientType.TO, new InternetAddress("thn@daoas.dk") );//TODO: mulighed for at ændre modtager mail msg.setSubject( subject ); msg.setContent(htmlBody, "text/html; charset=utf-8"); Transport.send(msg); } catch (MessagingException e) { logger.warning("Unable to send report mail ", e ); } } public String getReportData() { WeekEntry total = new WeekEntry(); HashMap postnrEntries = new HashMap(); int createFailCount = 0; int antalUdenGadeid = 0; int antalUdenKommunekode = 0; int antalUdenLatitude = 0; int antalUdenDBKBane = 0; // first gather the intel for (Address a : addressList) { if (a.state == AddressState.CREATE_FAIL) { createFailCount++; continue; } if (a.gadeid == 0) { antalUdenGadeid++; } if (a.kommunekode == 0 || a.vejkode == 0) { antalUdenKommunekode++; } if (a.latitude == 0 || a.longitude == 0) { antalUdenLatitude++; } if (a.state == AddressState.NOT_CHANGED) { continue; } if (a.dbkBane == 0) { antalUdenDBKBane++; } WeekEntry weekEntry = postnrEntries.get(a.postnr); if (weekEntry == null) { weekEntry = new WeekEntry(); postnrEntries.put(a.postnr, weekEntry); } if (a.state == AddressState.CREATED) { weekEntry.incrementCreated(); } else { weekEntry.man.updateFromState(a.stateMan); weekEntry.tir.updateFromState(a.stateTir); weekEntry.ons.updateFromState(a.stateOns); weekEntry.tor.updateFromState(a.stateTor); weekEntry.fre.updateFromState(a.stateFre); weekEntry.lor.updateFromState(a.stateLor); weekEntry.son.updateFromState(a.stateSon); } } for (WeekEntry w : postnrEntries.values()) { total.incrementFromOther(w); } StringBuilder sb = new StringBuilder(); sb.append("

Indlæsnings rapport for " + source.getDistributor() + "

"); sb.append("Filnavn: ").append( source.getFilename() ).append("
"); sb.append("Tidsforbrug: ").append( timer.getElapsed() ).append("ms.
"); sb.append("Skriv til DB: ").append( writeBack ).append("
"); sb.append("Antal entries: " ).append( entryCount ).append("
"); sb.append("Antal afviste: " ).append( addrManager.getRejectedCount() ).append("
"); sb.append("Antal fejlede inserts: ").append(createFailCount).append("
"); sb.append("Filen indeholder data til: "); if (ugedage.mandag) sb.append("Mandag, "); if (ugedage.tirsdag) sb.append("Tirsdag, "); if (ugedage.onsdag) sb.append("Onsdag, "); if (ugedage.torsdag) sb.append("Torsdag, "); if (ugedage.fredag) sb.append("Fredag, "); if (ugedage.lordag) sb.append("Lørdag, "); if (ugedage.sondag) sb.append("Søndag, "); sb.append("
"); sb.append("

Data Mangler

\n"); sb.append("
");
		sb.append("Mangler kommune/vejkode: ").append(antalUdenKommunekode).append("\n");
		sb.append("Mangler gadeid: ").append(antalUdenGadeid).append("\n");
		sb.append("Mangler DBK bane: ").append(antalUdenDBKBane).append("\n");
		sb.append("Mangler latitude/longitude: ").append(antalUdenLatitude).append("\n");
		sb.append("
"); sb.append("

Ændrings oversigt

\n"); sb.append(""); sb.append(""); sb.append(""); sb.append(""); sb.append(""); sb.append(""); sb.append("
 MandagTirsdagOnsdagTorsdagFredagLørdagSøndag
Oprettet:").append(total.man.created).append("").append(total.tir.created).append("").append(total.ons.created).append("").append(total.tor.created).append("").append(total.fre.created).append("").append(total.lor.created).append("").append(total.son.created).append("
Åbnet:").append(total.man.open).append("").append(total.tir.open).append("").append(total.ons.open).append("").append(total.tor.open).append("").append(total.fre.open).append("").append(total.lor.open).append("").append(total.son.open).append("
Ændret:").append(total.man.modified).append("").append(total.tir.modified).append("").append(total.ons.modified).append("").append(total.tor.modified).append("").append(total.fre.modified).append("").append(total.lor.modified).append("").append(total.son.modified).append("
Lukket:").append(total.man.closed).append("").append(total.tir.closed).append("").append(total.ons.closed).append("").append(total.tor.closed).append("").append(total.fre.closed).append("").append(total.lor.closed).append("").append(total.son.closed).append("
"); sb.append("
"); sb.append("

Nye/Ukendte gader

"); sb.append(""); sb.append(""); for( Entry unknownStreet : addrManager.getUnknownStreets().entrySet() ) { sb.append(""); } sb.append("
GadeidVejnavn
").append(unknownStreet.getKey()).append("").append(unknownStreet.getValue()).append("
"); sb.append("
\n"); return sb.toString(); } }