import java.lang.reflect.*; import java.net.URL; import java.text.*; import java.util.*; import org.apache.axis.types.*; import gw.*; public class Slurp { private GWPort proxy; Slurp(String gateway) { try { URL portURL = new URL("http://restsoap:AIIT@" + gateway + "/gw/soap"); GWServiceLocator locator = new GWServiceLocator(); proxy = locator.getGWPort(portURL); } catch (Exception e) { e.printStackTrace(); System.exit(2); } } public void slurp(double t1, double t2, String name, String addr) { UnsignedInt offset = new UnsignedInt(0); while (true) { try { GW__eventsRead_Result soapResult; soapResult = proxy.eventsRead(t1, t2, name, addr, offset); GW__Event_Result[] events = soapResult.getResults(); for (int i = 0; i < events.length; i++) { GW__Event_Result result = events[i]; GW__Event value = result.getValue(); Method m = value.getClass().getMethod("get" + value.getName(), (Class[])null); Object o = m.invoke(value, (Object[])null); printEvent(result.getTimestamp(), value.getName(), result.getAddr(),o); } if ((soapResult.getOffset().longValue() + events.length) == soapResult.getTotal().longValue()) break; offset = new UnsignedInt(offset.longValue() + events.length); } catch (Exception e) { e.printStackTrace(); System.exit(2); } } } public void printEvent(double timestamp, String name, String addr, Object eventValue) { DateFormat df = DateFormat.getDateTimeInstance(); Date date = new Date((long)timestamp * 1000); // msecs in Java String datestr = df.format(date); if (name.compareTo("TemperatureReadEvent") == 0) { UnsignedInt v = (UnsignedInt)eventValue; System.out.println(datestr + ", mote " + addr); System.out.println(" TemperatureReadEvent value : " + v + "\n"); } else if (name.compareTo("NodeStatsEvent") == 0) { Nx_node_stats_t v = (Nx_node_stats_t)eventValue; System.out.println(datestr + ", mote " + addr); System.out.println(" NodeStatsEvent link_sent : " + v.getLink_sent() + " packets"); System.out.println(" NodeStatsEvent link_received : " + v.getLink_received() + " packets" + "\n"); } } public static void main(String [] args) { if (args.length != 2) { System.out.println("Usage: java Slurp gateway date"); System.exit(3); } try { String gateway = args[0]; String date = args[1]; // Compute start and end times for day based on local time Calendar cal = Calendar.getInstance(); String[] pieces = date.split("-"); int year = Integer.valueOf(pieces[0]).intValue(); int month = Integer.valueOf(pieces[1]).intValue() - 1; // 0-based in Java int day = Integer.valueOf(pieces[2]).intValue(); double t1, t2; cal.set(year, month, day, 0, 0, 0); t1 = cal.getTime().getTime() / 1000.0; // msecs in Java t2 = t1 + 86400; // Read events Slurp slurp = new Slurp(gateway); slurp.slurp(t1, t2, "*", "ffffffffffffffff"); } catch (Exception e) { e.printStackTrace(); System.exit(2); } } }