Commit e63844a6 authored by Steven Murdoch's avatar Steven Murdoch
Browse files

Invert mapping so data is indexed by router

parent 190f0153
Loading
Loading
Loading
Loading
+104 −57
Original line number Diff line number Diff line
@@ -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 {
@@ -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: