@Override public String doInBackground() { System.out.println("Strart Job Monitoring Worker"); String out = ""; String defStatus = "Unknown"; starttime = System.nanoTime(); CURRENT_STATUS = RUN_STATUS.NOT_RUN; try { while (CURRENT_STATUS == RUN_STATUS.ACTIVE || CURRENT_STATUS == RUN_STATUS.SUBMITTED || CURRENT_STATUS == RUN_STATUS.NOT_RUN) { List<String> resultsToPublish = new ArrayList<String>(); int updateTimeInMS = (int) (updateTimeInSeconds * 1000); Thread.sleep(updateTimeInMS); // get job status String status = Run.getJobStatusOnServer(jobid, defStatus, account, url, user, expName, password); resultsToPublish.add(0, defStatus); CURRENT_STATUS = RUN_STATUS.getStatus(status); // get outputs Run.getStatusFileFromServer( jobid, account, url, user, expName, analysDir, password, statusUpdateFiles); String report = ""; if (statusUpdateFiles.exists()) { report = IO.readFileToString(statusUpdateFiles); } publish(report); } } catch (Exception e) { e.printStackTrace(); } finally { publish(out); } return out; }
/** Execute these events by this run. */ public void run() { double segWithAccAhead; double start = System.currentTimeMillis() - startOfSimulation; for (PositionReport event : events) { if (event == null) System.out.println("NULL EVENT!!!"); if (run == null) System.out.println("NULL RUN!!!" + event.toString()); // READ: If a new vehicle on a travel lane arrives, lookup accidents ahead if (run.vehicles.get(event.id) == null && event.lane < 4) { if (event.min > run.time.minOfLastUpdateOfAccidentAhead) { segWithAccAhead = run.getSegWithAccidentAhead(runs, event); if (segWithAccAhead != -1) run.accidentsAhead.put(event.min, segWithAccAhead); run.time.minOfLastUpdateOfAccidentAhead = event.min; } else { segWithAccAhead = (run.accidentsAhead.containsKey(event.min)) ? run.accidentsAhead.get(event.min) : -1; } } else { segWithAccAhead = -1; } // System.out.println("Execute event " + event.toString() + " " + query_number + " times."); // Query replication for (int i = 1; i < query_number; i++) { run.fake_trafficManagement( event, segWithAccAhead, startOfSimulation, distrFinishTimes, schedStartTimes, accidentWarningsFailed, tollNotificationsFailed); run.fake_collectGarbage(event.min); } // Avoid multiple storage of complex events due to replicated queries // System.out.println("Size: " + (run.fake_output.tollNotifications.size() + // run.fake_output.accidentWarnings.size())); run.fake_output.tollNotifications.clear(); run.fake_output.accidentWarnings.clear(); // WRITE: Update this run and remove old data run.trafficManagement( event, segWithAccAhead, startOfSimulation, distrFinishTimes, schedStartTimes, accidentWarningsFailed, tollNotificationsFailed); run.collectGarbage(event.min); } double end = System.currentTimeMillis() - startOfSimulation; Double duration = end - start; // + (events.size()*query_number); // simulate replicated query execution total_exe_time.addAndGet(duration.intValue()); // System.out.println("Run id: " + run.runID + " Duration: " + duration + " Total execution // time: " + total_exe_time.toString()); // Count down the number of transactions transaction_number.countDown(); }