|
From: Jonathan L. <le...@us...> - 2007-03-02 22:52:35
|
Update of /cvsroot/pyxida/Pyxida/src/edu/harvard/syrah/pyxida In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18862/src/edu/harvard/syrah/pyxida Modified Files: LogServer.java Log Message: LogServer writes per 10minute summary of nodes' coordinates. Index: LogServer.java =================================================================== RCS file: /cvsroot/pyxida/Pyxida/src/edu/harvard/syrah/pyxida/LogServer.java,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** LogServer.java 15 Feb 2007 18:01:26 -0000 1.4 --- LogServer.java 2 Mar 2007 22:52:30 -0000 1.5 *************** *** 1,9 **** package edu.harvard.syrah.pyxida; import edu.harvard.syrah.prp.ANSI; import edu.harvard.syrah.prp.Log; import edu.harvard.syrah.pyxida.log.ReportCoordReplyMsg; import edu.harvard.syrah.pyxida.log.ReportCoordReqMsg; ! import edu.harvard.syrah.sbon.async.*; import edu.harvard.syrah.sbon.async.CBResult.CBState; import edu.harvard.syrah.sbon.async.CallbacksIF.CB0; --- 1,21 ---- package edu.harvard.syrah.pyxida; + import java.io.BufferedWriter; + import java.io.File; + import java.io.FileWriter; + import java.io.PrintWriter; + import java.text.SimpleDateFormat; + import java.util.Date; + import java.util.HashMap; + import java.util.Map; + import edu.harvard.syrah.prp.ANSI; import edu.harvard.syrah.prp.Log; import edu.harvard.syrah.pyxida.log.ReportCoordReplyMsg; import edu.harvard.syrah.pyxida.log.ReportCoordReqMsg; ! import edu.harvard.syrah.pyxida.nc.lib.Coordinate; ! import edu.harvard.syrah.sbon.async.CBResult; ! import edu.harvard.syrah.sbon.async.Config; ! import edu.harvard.syrah.sbon.async.EventLoop; import edu.harvard.syrah.sbon.async.CBResult.CBState; import edu.harvard.syrah.sbon.async.CallbacksIF.CB0; *************** *** 11,15 **** import edu.harvard.syrah.sbon.comm.AddressFactory; import edu.harvard.syrah.sbon.comm.AddressIF; ! import edu.harvard.syrah.sbon.comm.obj.*; public class LogServer { --- 23,29 ---- import edu.harvard.syrah.sbon.comm.AddressFactory; import edu.harvard.syrah.sbon.comm.AddressIF; ! import edu.harvard.syrah.sbon.comm.obj.ObjComm; ! import edu.harvard.syrah.sbon.comm.obj.ObjCommCB; ! import edu.harvard.syrah.sbon.comm.obj.ObjCommIF; public class LogServer { *************** *** 29,39 **** public static final int COMM_PORT = Integer.parseInt(Config.getConfigProps().getProperty("pyxida.port", "55504")); ! // By default tell nodes to report their coords every 10 seconds ! private static final long LOG_INTERVAL = Long.valueOf(Config.getConfigProps().getProperty("pyxida.logserver.log_interval", "10000")); private static LogServer logServer = null; ObjCommIF comm; ! private void init(final CB0 cbDone) { // Initiliase the ObjComm communication module --- 43,72 ---- public static final int COMM_PORT = Integer.parseInt(Config.getConfigProps().getProperty("pyxida.port", "55504")); ! // By default tell nodes to report their coords every 10 seconds ! private static final long LOG_INTERVAL = Long.valueOf(Config.getConfigProps().getProperty("pyxida.logserver.log_interval", "10000")); + // Output a summary of nodes we have heard from recently at this rate (10 minutes) + private static final long DUMP_COORD_INTERVAL = Long.valueOf(Config.getConfigProps().getProperty("pyxida.logserver.dump_coord_interval", "600000")); + //private static final long DUMP_COORD_INTERVAL = Long.valueOf(Config.getConfigProps().getProperty("pyxida.logserver.dump_coord_interval", "20000")); + private static final String DUMP_COORD_PATH = String.valueOf(Config.getConfigProps().getProperty("pyxida.logserver.dump_coord_path", "/nc/log-pyxida-coords")); + + private static LogServer logServer = null; ObjCommIF comm; ! final CB0 dumpCoordsCB; ! final SimpleDateFormat dateFormat; ! Map<AddressIF,CoordDesc> addr2coords = new HashMap<AddressIF,CoordDesc>(); ! ! public LogServer () { ! dateFormat = new SimpleDateFormat("yyyyMMdd-HHmm"); ! dumpCoordsCB = new CB0() { ! protected void cb(CBResult result) { ! dumpCoords(); ! registerDumpCoordsTimer(); ! } ! }; ! } ! private void init(final CB0 cbDone) { // Initiliase the ObjComm communication module *************** *** 49,58 **** --- 82,97 ---- } }); + registerDumpCoordsTimer (); } + void registerDumpCoordsTimer () { + EventLoop.get().registerTimerCB(DUMP_COORD_INTERVAL, dumpCoordsCB); + } + /** * @param args */ public static void main(String[] args) { + log.main("Pyxida Log Server Version 0.1 starting..."); *************** *** 110,114 **** System.exit(0); } ! class ReportCoordMsgHandler extends ObjCommCB<ReportCoordReqMsg> { private final Log log = new Log(ReportCoordMsgHandler.class); --- 149,208 ---- System.exit(0); } ! ! class CoordDesc { ! public final Coordinate primarySysCoord; ! public final Coordinate primaryAppCoord; ! ! public final Coordinate secondarySysCoord; ! public final Coordinate secondaryAppCoord; ! ! // could be used to preserve coords longer than window ! //public final long timestamp; ! ! // could add counter to tell number of updates from a node ! ! // not doing clone -- problem? ! ! public CoordDesc (ReportCoordReqMsg msg) { ! primarySysCoord = msg.primarySysCoord; ! primaryAppCoord = msg.primaryAppCoord; ! ! secondarySysCoord = msg.secondarySysCoord; ! secondaryAppCoord = msg.secondaryAppCoord; ! //timestamp = ! } ! ! public String toString () { ! return (primaryAppCoord.toString()); ! //return (" sc1=" + primarySysCoord + " ac1=" + primaryAppCoord + " sc2=" + secondarySysCoord + " ac2=" + secondaryAppCoord); ! ! } ! ! } ! ! void dumpCoords () { ! ! String file = DUMP_COORD_PATH+"/"+dateFormat.format(new Date())+".coords"; ! log.info ("Dumping coords to file "+file); ! ! File coordFile = new File(file); ! try { ! PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(file))); ! ! for (Map.Entry<AddressIF,CoordDesc> entry : addr2coords.entrySet()) { ! out.write (entry.getKey()+ " "+entry.getValue()+"\n"); ! } ! ! out.flush(); ! out.close(); ! log.info("wrote to file "+file); ! } catch (Exception ex) { ! System.err.println("writing "+file+" failed. Exiting"); ! } ! ! ! addr2coords.clear(); ! } ! class ReportCoordMsgHandler extends ObjCommCB<ReportCoordReqMsg> { private final Log log = new Log(ReportCoordMsgHandler.class); *************** *** 118,123 **** switch (result.state) { case OK: { ! log.info("a=" + remoteAddr + " sc1=" + reqMsg.primarySysCoord + " ac1=" + reqMsg.primaryAppCoord + " sc2=" + reqMsg.secondarySysCoord + " ac2=" + reqMsg.secondaryAppCoord); ReportCoordReplyMsg replyMsg = new ReportCoordReplyMsg(); replyMsg.interval = LOG_INTERVAL; --- 212,220 ---- switch (result.state) { case OK: { ! log.info("a=" + remoteAddr + " sc1=" + reqMsg.primarySysCoord + " ac1=" + reqMsg.primaryAppCoord + " sc2=" + reqMsg.secondarySysCoord + " ac2=" + reqMsg.secondaryAppCoord); + // just scribble over old version if there is one + addr2coords.put(remoteAddr,new CoordDesc(reqMsg)); + ReportCoordReplyMsg replyMsg = new ReportCoordReplyMsg(); replyMsg.interval = LOG_INTERVAL; |