Loading src/org/torproject/metrics/autopromotion/AutoPromotion.scala +104 −57 Original line number Diff line number Diff line Loading @@ -6,8 +6,22 @@ import _root_.java.util.Date import _root_.scala.collection.immutable._ class Status(runningRouters: Set[AutoPromotion.RouterName]) { class Status(mRunningRouters: Set[AutoPromotion.RouterName]) { override def toString = runningRouters.size.toString + " running routers" def runningRouters = mRunningRouters } class RouterInfo { var runningDates: List[Date] = Nil def addDate(d: Date) { runningDates = d :: runningDates } override def toString = { val sortedDates = runningDates.reverse sortedDates.toString + "\n" } } object AutoPromotion { Loading Loading @@ -71,11 +85,44 @@ object AutoPromotion { getRunningNodes(allFiles, TreeMap.empty) } def invertMapping(runningNodes: Map[Date, Status]) = { // Loop over all dates def invertMapping(runningNodes: List[(Date, Status)], acc: Map[RouterName, RouterInfo]): Map[RouterName, RouterInfo] = { runningNodes match { case Nil => acc case (k,v) :: rns => { // Loop over all routers running at that date def updateNodeInfo(names: List[RouterName], ri: Map[RouterName, RouterInfo]): Map[RouterName, RouterInfo] = { names match { case Nil => ri case n :: ns => { if (ri.contains(n)) { val routerInfo = ri(n) routerInfo.addDate(k) updateNodeInfo(ns, ri) } else { val routerInfo = new RouterInfo routerInfo.addDate(k) updateNodeInfo(ns, ri + (n -> routerInfo)) } } } } invertMapping(rns, updateNodeInfo(v.runningRouters.toList, acc)) } } } invertMapping(runningNodes.toList, TreeMap.empty) } def main(args: Array[String]) { val inDir = new File(args(0)) // Directory to search val allFiles = getAllFiles(inDir) System.out.println(getRunningNodes(allFiles)) val allFiles = getAllFiles(inDir) // All files to read val runningNodes = getRunningNodes(allFiles) // Mapping of date -> running nodes val nodeInfo = invertMapping(runningNodes) // Mapping of node -> dates when running System.out.println(nodeInfo) } } // vim: set ts=4 sw=4 et: // vim: set ts=2 sw=2 et: Loading
src/org/torproject/metrics/autopromotion/AutoPromotion.scala +104 −57 Original line number Diff line number Diff line Loading @@ -6,8 +6,22 @@ import _root_.java.util.Date import _root_.scala.collection.immutable._ class Status(runningRouters: Set[AutoPromotion.RouterName]) { class Status(mRunningRouters: Set[AutoPromotion.RouterName]) { override def toString = runningRouters.size.toString + " running routers" def runningRouters = mRunningRouters } class RouterInfo { var runningDates: List[Date] = Nil def addDate(d: Date) { runningDates = d :: runningDates } override def toString = { val sortedDates = runningDates.reverse sortedDates.toString + "\n" } } object AutoPromotion { Loading Loading @@ -71,11 +85,44 @@ object AutoPromotion { getRunningNodes(allFiles, TreeMap.empty) } def invertMapping(runningNodes: Map[Date, Status]) = { // Loop over all dates def invertMapping(runningNodes: List[(Date, Status)], acc: Map[RouterName, RouterInfo]): Map[RouterName, RouterInfo] = { runningNodes match { case Nil => acc case (k,v) :: rns => { // Loop over all routers running at that date def updateNodeInfo(names: List[RouterName], ri: Map[RouterName, RouterInfo]): Map[RouterName, RouterInfo] = { names match { case Nil => ri case n :: ns => { if (ri.contains(n)) { val routerInfo = ri(n) routerInfo.addDate(k) updateNodeInfo(ns, ri) } else { val routerInfo = new RouterInfo routerInfo.addDate(k) updateNodeInfo(ns, ri + (n -> routerInfo)) } } } } invertMapping(rns, updateNodeInfo(v.runningRouters.toList, acc)) } } } invertMapping(runningNodes.toList, TreeMap.empty) } def main(args: Array[String]) { val inDir = new File(args(0)) // Directory to search val allFiles = getAllFiles(inDir) System.out.println(getRunningNodes(allFiles)) val allFiles = getAllFiles(inDir) // All files to read val runningNodes = getRunningNodes(allFiles) // Mapping of date -> running nodes val nodeInfo = invertMapping(runningNodes) // Mapping of node -> dates when running System.out.println(nodeInfo) } } // vim: set ts=4 sw=4 et: // vim: set ts=2 sw=2 et: