package net.ftb.tracking.piwik; import java.awt.HeadlessException; import java.awt.Toolkit; import java.io.IOException; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.util.Calendar; import java.util.Random; import java.util.UUID; import com.google.common.hash.Hashing; import net.ftb.data.Constants; import net.ftb.data.Settings; import net.ftb.log.Logger; public class PiwikTracker extends Thread { private final String thingToTrack, urlFrom; private String extraParamaters = new String(); public PiwikTracker (String thingToTrack, String urlFrom) { this.thingToTrack = thingToTrack; this.urlFrom = urlFrom; this.extraParamaters = ""; } public void addExtraPair (String key, String value) { extraParamaters += "&" + PiwikUtils.addPair(key, value); } public void newSession () { extraParamaters += "&new_visit=1"; } @Override public void run () { HttpURLConnection con = null; try { // TODO make this not dependent on having a headed server!! if (Settings.getSettings().getGeneratedID() == null || Settings.getSettings().getGeneratedID().isEmpty()) { Settings.getSettings().setGeneratedID(Hashing.md5().hashUnencodedChars(UUID.randomUUID().toString()).toString().substring(0, 16)); }// TODO this needs to put bits, and the OS version in the UA data properly!! if (thingToTrack.startsWith("Launcher Start v")) { newSession(); } Calendar time = Calendar.getInstance(); String s = "http://stats.feed-the-beast.com/piwik.php?action_name=" + PiwikUtils.urlEncode(thingToTrack) + extraParamaters + "&url=" + PiwikUtils.urlEncode(urlFrom) + "&idsite=6&%20rand=" + new Random().nextInt(999999) + "&%20h=" + time.get(Calendar.HOUR_OF_DAY) + " &%20m=" + time.get(Calendar.MINUTE) + "&%20s=" + time.get(Calendar.SECOND) + "%20" + "&rec=1&%20apiv=1&%20cookie=%20&%20urlref=http://feed-the-beast.com%20" + "&_id=" + Settings.getSettings().getGeneratedID() + "%20&res=" + (int)Toolkit.getDefaultToolkit().getScreenSize().getWidth() + "x" + (int)Toolkit.getDefaultToolkit().getScreenSize().getHeight() + "&_cvar={1:[\"Launcher_Version\",\"" + Constants.version + "\"]}&ua=" + "Java/" + PiwikUtils.urlEncode(System.getProperty("java.version")) + " (" + PiwikUtils.urlEncode(System.getProperty("os.name")) + "; " + PiwikUtils.urlEncode(System.getProperty("os.arch")) + ")" + "&"; extraParamaters = ""; con = (HttpURLConnection)new URL(s).openConnection(); con.setRequestMethod("GET"); int result = con.getResponseCode(); if (result != 200) { Logger.logDebug("Tracker request failed. Return code: " + result); } } catch (MalformedURLException e) { Logger.logDebug("Malformed Tracker URL", e); } catch (HeadlessException e) { Logger.logDebug("Headless Exception from Piwik", e); } catch (IOException e) { Logger.logDebug("Error Contacting tracking server", e); } finally { if (con != null) { con.disconnect(); } } } }