Loading src/org/torproject/metrics/autopromotion/AutoPromotion.scala +13 −26 Original line number Diff line number Diff line Loading @@ -95,34 +95,21 @@ object AutoPromotion { } 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 => { runningNodes.foldLeft[Map[RouterName, RouterInfo]](TreeMap.empty){ (acc: Map[RouterName, RouterInfo], ds: (Date, Status)) => val (date, status) = ds status.runningRouters.toList.foldLeft(acc){(ri, n) => if (ri.contains(n)) { val routerInfo = ri(n) routerInfo.addDate(k) updateNodeInfo(ns, ri) routerInfo.addDate(date) ri } else { val routerInfo = new RouterInfo routerInfo.addDate(k) updateNodeInfo(ns, ri + (n -> routerInfo)) } } } } invertMapping(rns, updateNodeInfo(v.runningRouters.toList, acc)) routerInfo.addDate(date) ri + (n -> routerInfo) } } } invertMapping(runningNodes.toList, TreeMap.empty) } def main(args: Array[String]) { Loading Loading
src/org/torproject/metrics/autopromotion/AutoPromotion.scala +13 −26 Original line number Diff line number Diff line Loading @@ -95,34 +95,21 @@ object AutoPromotion { } 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 => { runningNodes.foldLeft[Map[RouterName, RouterInfo]](TreeMap.empty){ (acc: Map[RouterName, RouterInfo], ds: (Date, Status)) => val (date, status) = ds status.runningRouters.toList.foldLeft(acc){(ri, n) => if (ri.contains(n)) { val routerInfo = ri(n) routerInfo.addDate(k) updateNodeInfo(ns, ri) routerInfo.addDate(date) ri } else { val routerInfo = new RouterInfo routerInfo.addDate(k) updateNodeInfo(ns, ri + (n -> routerInfo)) } } } } invertMapping(rns, updateNodeInfo(v.runningRouters.toList, acc)) routerInfo.addDate(date) ri + (n -> routerInfo) } } } invertMapping(runningNodes.toList, TreeMap.empty) } def main(args: Array[String]) { Loading