Github user mccheah commented on a diff in the pull request:
https://github.com/apache/spark/pull/22215#discussion_r214491177
--- Diff:
resource-managers/kubernetes/core/src/main/scala/org/apache/spark/deploy/k8s/KubernetesUtils.scala
---
@@ -60,4 +64,81 @@ private[spark] object KubernetesUtils {
}
def parseMasterUrl(url: String): String = url.substring("k8s://".length)
+
+ def formatPairsBundle(pairs: Seq[(String, String)], indent: Int = 1) :
String = {
+ // Use more loggable format if value is null or empty
+ val indentStr = "\t" * indent
+ pairs.map {
+ case (k, v) => s"\n$indentStr $k:
${Option(v).filter(_.nonEmpty).getOrElse("N/A")}"
+ }.mkString("")
+ }
+
+ /**
+ * Given a pod, output a human readable representation of its state
+ *
+ * @param pod Pod
+ * @return Human readable pod state
+ */
+ def formatPodState(pod: Pod): String = {
+ val details = Seq[(String, String)](
+ // pod metadata
+ ("pod name", pod.getMetadata.getName),
+ ("namespace", pod.getMetadata.getNamespace),
+ ("labels", pod.getMetadata.getLabels.asScala.mkString(", ")),
+ ("pod uid", pod.getMetadata.getUid),
+ ("creation time", formatTime(pod.getMetadata.getCreationTimestamp)),
+
+ // spec details
+ ("service account name", pod.getSpec.getServiceAccountName),
+ ("volumes",
pod.getSpec.getVolumes.asScala.map(_.getName).mkString(", ")),
+ ("node name", pod.getSpec.getNodeName),
+
+ // status
+ ("start time", formatTime(pod.getStatus.getStartTime)),
+ ("phase", pod.getStatus.getPhase),
+ ("container status", containersDescription(pod, 2))
+ )
+
+ formatPairsBundle(details)
+ }
+
+ def containersDescription(p: Pod, indent: Int = 1): String = {
+ p.getStatus.getContainerStatuses.asScala.map { status =>
+ Seq(
+ ("container name", status.getName),
+ ("container image", status.getImage)) ++
+ containerStatusDescription(status)
+ }.map(p => formatPairsBundle(p, indent)).mkString("\n\n")
+ }
+
+ def containerStatusDescription(containerStatus: ContainerStatus)
+ : Seq[(String, String)] = {
+ val state = containerStatus.getState
+ Option(state.getRunning)
--- End diff --
This is a really cool use of partial functions - wonder if there's other
places where we should be matching this way (of course doesn't have to be done
here).
---
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]