X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?a=blobdiff_plain;f=src%2Fcom%2Ftedpearson%2Fypp%2Fmarket%2FMarketUploader.java;h=b3fa49fdb99ed99dc0eb60974d88bc4f18fd380d;hb=985508c692b6de7964d89ede3b6cf3da1b5b55c7;hp=f91de7aedd25e93cbadbb3df782e46bfee03f0f6;hpb=9ad21c9f459da2539c8b537af8e8bfb32b22f89d;p=jarrg-ian.git diff --git a/src/com/tedpearson/ypp/market/MarketUploader.java b/src/com/tedpearson/ypp/market/MarketUploader.java index f91de7a..b3fa49f 100644 --- a/src/com/tedpearson/ypp/market/MarketUploader.java +++ b/src/com/tedpearson/ypp/market/MarketUploader.java @@ -40,6 +40,7 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis private JButton findMarket = null; private JLabel resultSummary = null; private JLabel arbitrageResult = null; + private long startTime = 0; private final static String PCTB_LIVE_HOST_URL = "http://pctb.crabdance.com/"; private final static String PCTB_TEST_HOST_URL = "http://pctb.ilk.org/"; @@ -64,6 +65,7 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis private AccessibleContext sidePanel; private HashMap commodMap; + public PrintStream dtxt = null; private PropertyChangeListener changeListener = new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent e) { @@ -74,7 +76,7 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis int index = text.indexOf(":"); String name = text.substring(0,index); islandName = name; - //System.out.println(islandName); + // if (dtxt!=null) dtxt.println(islandName); sidePanel.removePropertyChangeListener(this); latch.countDown(); } @@ -89,6 +91,12 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis } } + private void progresslog(String s) { + if (dtxt == null) return; + long now = new Date().getTime(); + dtxt.println("progress "+(now - startTime)+"ms "+s); + } + private void progressNote(ProgressMonitor pm, String s) { String arb = null; if (arbitrageResult != null) @@ -230,6 +238,14 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis // check if we've been turned off in the control panel Preferences prefs = Preferences.userNodeForPackage(getClass()); + if (prefs.getBoolean("writeDebugFiles", false)) { + try { + dtxt = new PrintStream(new File("jarrg-debug-log.txt")); + } catch (java.io.FileNotFoundException e) { + System.err.println("JARRG: Error opening debug log: "+e); + } + } + if (prefs.getBoolean("useLiveServers", false)) { YARRG_URL = YARRG_LIVE_URL; PCTB_HOST_URL = PCTB_LIVE_HOST_URL; @@ -272,10 +288,11 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis findMarket.setEnabled(false); new Thread() { public void run() { + startTime = new Date().getTime(); resultSummary.setText(""); arbitrageResult.setText(""); try { - runPCTB(); + runUpload(); } catch(Exception e) { error(e.toString()); e.printStackTrace(); @@ -379,7 +396,7 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis html = m.replaceAll(" "); } String whole_msg = "

Error

"+msg+"

PCTB Server said:

"+html+"
"; - System.err.println("###" + whole_msg + "###"); + if (dtxt!=null) dtxt.println("###" + whole_msg + "###"); JOptionPane.showMessageDialog(frame,whole_msg,"Error",JOptionPane.ERROR_MESSAGE); } @@ -392,7 +409,9 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis * * @exception Exception if an error we didn't expect occured */ - private void runPCTB() throws Exception { + private void runUpload() throws Exception { + progresslog("starting"); + String yarrgts = ""; ProgressMonitor pm = new ProgressMonitor(frame,"Processing Market Data","Getting table data",0,100); pm.setMillisToDecideToPopup(0); @@ -400,7 +419,9 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis boolean doneyarrg = false, donepctb = false; if (uploadToYarrg) { + progresslog("yarrg timestamp..."); yarrgts = getYarrgTimestamp(); + progresslog("yarrg timestamp done."); } AccessibleTable accesstable = findMarketTable(); @@ -417,12 +438,23 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis return; } + progresslog("(async) getisland..."); getIsland(); + progresslog("getocean..."); getOcean(); + progresslog("getocean done"); if (latch != null) { latch.await(2, java.util.concurrent.TimeUnit.SECONDS); } + progresslog("(async) getisland done"); + + if (islandName == null) { + error("Could not find island name in YPP user interface."); + return; + } + + progresslog("table check..."); String headings_expected[] = new String[] { "Commodity", "Trading outlet", "Buy price", "Will buy", "Sell price", "Will sell" }; @@ -446,13 +478,18 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis } } + progresslog("table read..."); + ArrayList> data = getData(accesstable); if (showArbitrage) { + progresslog("arbitrage..."); calculateArbitrage(data); + progresslog("arbitrage done."); } if (uploadToYarrg && yarrgts != null) { + progresslog("yarrg prepare..."); progressNote(pm, "Yarrg: Preparing data"); pm.setProgress(10); @@ -474,15 +511,14 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis yarrgdata = yarrgsb.toString(); progressNote(pm, "Yarrg: Uploading"); + progresslog("yarrg upload..."); - if (islandName != null) { - doneyarrg = runYarrg(yarrgts, oceanName, islandName, yarrgdata); - } else { - System.out.println("Couldn't upload to Yarrg - no island name found"); - } + doneyarrg = runYarrg(yarrgts, oceanName, islandName, yarrgdata); + progresslog("yarrg done."); } if (uploadToPCTB) { + progresslog("pctb prepare..."); progressNote(pm, "PCTB: Getting stall names"); pm.setProgress(20); if(pm.isCanceled()) { @@ -498,14 +534,16 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis } // get commod map + progresslog("pctb commodmap..."); HashMap commodMap = getCommodMap(); if(commodMap == null) { return; } + progresslog("pctb commodmap done."); int[] offerCount = getBuySellMaps(data,buys,sells,stallMap,commodMap); //println(buys.toString()); - //System.out.println(sells); - //System.out.println("\n\n\n"+buys); + // if (dtxt!=null) dtxt.println(sells); + // if (dtxt!=null) dtxt.println("\n\n\n"+buys); ByteArrayOutputStream outStream = new ByteArrayOutputStream(); pm.setProgress(60); @@ -521,14 +559,26 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis dos.writeBytes(getAbbrevStallList(stallMap)); writeBuySellOffers(buys,sells,offerCount,out); out.finish(); - InputStream in = sendInitialData(new ByteArrayInputStream(outStream.toByteArray())); + progresslog("pctb send..."); + + byte[] ba = outStream.toByteArray(); + if (dtxt!=null) { + FileOutputStream dbgdata = new FileOutputStream(new File("jarrg-debug-pctb-marketdata.gz")); + dbgdata.write(ba); + dbgdata.close(); + } + + InputStream in = sendInitialData(new ByteArrayInputStream(ba)); + progresslog("pctb sent."); if (in == null) return; pm.setProgress(80); if(pm.isCanceled()) { return; } progressNote(pm, "PCTB: Waiting ..."); + progresslog("pctb finish..."); donepctb = finishUpload(in); + progresslog("pctb done."); } pm.setProgress(100); @@ -540,6 +590,7 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis } else { resultSummary.setText("uploaded nowhere!"); } + progresslog("done."); } /** @@ -567,13 +618,13 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis Accessible node1 = window; Accessible node = descendNodes(node1,new int[] {0,1,0,0,0,0,1,0,0,1,0,0}); // commod market // commod market: {0,1,0,0,0,0,1,0,0,1,0} {0,1,0,0,0,0,1,0,1,0,0,1,0,0}) - //System.out.println(node); + // if (dtxt!=null) dtxt.println(node); if (!(node instanceof JTable)) { node = descendNodes(node1,new int[] {0,1,0,0,0,0,1,0,1,0,0,1,0,0}); // commod market } if (!(node instanceof JTable)) return null; AccessibleTable table = node.getAccessibleContext().getAccessibleTable(); - //System.out.println(table); + // if (dtxt!=null) dtxt.println(table); return table; } @@ -590,7 +641,7 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis private Accessible descendNodes(Accessible parent, int[] path) { for(int i=0;iPreferences. - *

- * Potential issues: When more commodities are added to the server, this - * program will currently break unless the user deletes the preferences - * file or we give them a new release with a slighly different storage - * location for the data. * * @return a map where the key is the commodity and the value is the commodity id. */ @@ -662,7 +706,6 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis return commodMap; } HashMap map = new HashMap(); - Preferences prefs = Preferences.userNodeForPackage(getClass()); String xml; try { URL host = new URL(PCTB_HOST_URL + "commodmap.php"); @@ -675,7 +718,14 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis int first = sb.indexOf("

") + 5;
 			int last = sb.indexOf("");
 			xml = sb.substring(first,last);
-			//System.out.println(xml);
+			//if (dtxt!=null) {
+			//        dtxt.println(">>");
+			//	  dtxt.println(sb);;
+			//	  dtxt.println("||");
+			//	  dtxt.println(xml);
+			//	  dtxt.println("<<");
+			//}
+			// if (dtxt!=null) dtxt.println(xml);
 			Reader reader = new CharArrayReader(xml.toCharArray());
 			Document d = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new InputSource(reader));
 			NodeList maps = d.getElementsByTagName("CommodMap");
@@ -745,7 +795,7 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis
 					buySellCount[1]++;
 				}
 			} catch(IllegalArgumentException e) {
-				System.err.println("Error: Unsupported Commodity \"" + offer.get(0) + "\"");
+				if (dtxt!=null) dtxt.println("Error: Unsupported Commodity \"" + offer.get(0) + "\"");
 			}
 		}
 		if (buySellCount[0]==0 && buySellCount[1]==0) {
@@ -915,7 +965,7 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis
 	*/
 	private boolean finishUpload(InputStream in) throws IOException {
 		String html = readstreamstring(in);
-		//System.out.println(html);
+		// if (dtxt!=null) dtxt.println(html);
 		Matcher m;
 
 		Pattern params = Pattern.compile("(?s).+?.+?");
@@ -950,7 +1000,7 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis
 		Pattern done = Pattern.compile("Your data has been integrated into the database. Thank you!");
 		m = done.matcher(complete);
 		if(m.find()) {
-			System.out.println("FILE upload successful!!!");
+			if (dtxt!=null) dtxt.println("FILE upload successful!!!");
 			return true;
 		} else {
 			error_html("Something was wrong with the final upload parameters!", complete);
@@ -1000,13 +1050,13 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis
 	BufferedReader br = new BufferedReader(new InputStreamReader(in));
 	String yarrgresult; 
 	while((yarrgresult = br.readLine()) != null) {
-	    System.out.println(yarrgresult);
+	    if (dtxt!=null) dtxt.println(yarrgresult);
 	}
 	return true;
     }
 
     private int calculateArbitrageCommodity(ArrayList> arb_bs) {
-	//System.out.println("ARBITRAGE?");
+	// if (dtxt!=null) dtxt.println("ARBITRAGE?");
 	int profit = 0;
 	SortedSet buys = arb_bs.get(0);
 	SortedSet sells = arb_bs.get(1);
@@ -1022,7 +1072,7 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis
 
 	    int unitprofit = buy[0] - sell[0];
 	    int count = buy[1] < sell[1] ? buy[1] : sell[1];
-	    //System.out.println(" sell @"+sell[0]+" x"+sell[1]+" buy @"+buy[0]+" x"+buy[1]
+	    // if (dtxt!=null) dtxt.println(" sell @"+sell[0]+" x"+sell[1]+" buy @"+buy[0]+" x"+buy[1]
 	    //		       +" => x"+count+" @"+unitprofit);
 
 	    if (unitprofit <= 0)
@@ -1034,7 +1084,7 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis
 	    if (buy[1]==0) buys.remove(buy);
 	    if (sell[1]==0) sells.remove(sell);
 	}
-	//System.out.println(" PROFIT "+profit);
+	// if (dtxt!=null) dtxt.println(" PROFIT "+profit);
 	return profit;
     }
 
@@ -1055,15 +1105,15 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis
 
 	for (ArrayList row : data) {
 	    String thiscommod = row.get(0);
-	    //System.out.println("ROW "+row.toString());
+	    // if (dtxt!=null) dtxt.println("ROW "+row.toString());
 	    if (lastcommod == null || !thiscommod.equals(lastcommod)) {
 		if (lastcommod != null)
 		    arbitrage += calculateArbitrageCommodity(arb_bs);
-		//System.out.println("ROW rdy");
+		// if (dtxt!=null) dtxt.println("ROW rdy");
 		arb_bs = new ArrayList>(2);
 		arb_bs.add(0, new TreeSet(compar));
 		arb_bs.add(1, new TreeSet(compar));
-		//System.out.println("ROW init");
+		// if (dtxt!=null) dtxt.println("ROW init");
 		lastcommod = thiscommod;
 	    }
 	    for (int bs = 0; bs < 2; bs++) {
@@ -1071,7 +1121,7 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis
 		if (pricestr == null)
 		    continue;
 		int[] entry = new int[2];
-		//System.out.println("ROW BS "+bs);
+		// if (dtxt!=null) dtxt.println("ROW BS "+bs);
 		entry[0] = parseQty(pricestr);
 		entry[1] = parseQty(row.get(bs*2 + 3));
 		arb_bs.get(bs).add(entry);