
com.twitter.server.view.EndpointRegistryView.scala Maven / Gradle / Ivy
The newest version!
package com.twitter.server.view
import com.twitter.finagle.{Addr, Dentry, Dtab}
import com.twitter.finagle.Namer.AddrWeightKey
private[server] object EndpointRegistryView {
private[this] def renderDtab(dtab: Dtab): String =
s"""
${
(for (Dentry(prefix, dst) <- dtab) yield {
s"""- ${prefix.show} => ${dst.show}
"""
}).mkString("")
}
"""
/**
* Render current weights and socket addresses for paths in each dtab
* @param observations Map of Dtabs to map of paths to Addrs
*/
def render(
dtabEntries: Map[Dtab, Map[String, Addr]]
): String =
s"""
Endpoints
${
(for((dtab, observations) <- dtabEntries) yield {
s"""
- Dtab
${renderDtab(dtab)}
Resolved Endpoints
${
(for((path, addr) <- observations) yield {
s"""- Path: ${path}""" +
(addr match {
case Addr.Bound(endpoints, metadata) =>
val weight: Double = metadata.get(AddrWeightKey) match {
case Some(w: Double) => w
case Some(failed) =>
// Namer records weights as Doubles, so this should never happen.
-1.0
case None => 1.0
}
s"""Weight: ${weight}
Endpoints:
${
(for(endpoint <- endpoints) yield {
s"""- ${endpoint}
"""
}).mkString("\n")
}
"""
case Addr.Failed(why) =>
s"""Endpoint Resolution Failed: ${why}"""
case _ =>
s"""Unbound Addr: ${addr}"""
})
}).mkString("\n")
}
"""
}).mkString("\n")
}
"""
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy