You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kyuubi.apache.org by GitBox <gi...@apache.org> on 2021/10/08 11:44:39 UTC

[GitHub] [incubator-kyuubi] ulysses-you commented on a change in pull request #1187: [KYUUBI #1159] Add Session stats on Kyuubi Query Engine Page

ulysses-you commented on a change in pull request #1187:
URL: https://github.com/apache/incubator-kyuubi/pull/1187#discussion_r724939545



##########
File path: externals/kyuubi-spark-sql-engine/src/main/scala/org/apache/spark/kyuubi/ui/EnginePage.scala
##########
@@ -83,4 +92,244 @@ case class EnginePage(parent: EngineTab) extends WebUIPage("") {
       Seq.empty
     }
   }
+
+  /** Generate stats of sessions for the engine */
+  private def generateSessionStatsTable(request: HttpServletRequest): Seq[Node] = {
+    val numSessions = store.getSessionList.size
+    val table = if (numSessions > 0) {
+
+      val sessionTableTag = "sessionstat"
+
+      val sessionTablePage =
+        Option(request.getParameter(s"$sessionTableTag.page")).map(_.toInt).getOrElse(1)
+
+      try {
+        Some(new SessionStatsPagedTable(
+          request,
+          parent,
+          store.getSessionList,
+          "kyuubi",
+          UIUtils.prependBaseUri(request, parent.basePath),
+          sessionTableTag
+        ).table(sessionTablePage))
+      } catch {
+        case e@(_: IllegalArgumentException | _: IndexOutOfBoundsException) =>
+          Some(<div class="alert alert-error">
+            <p>Error while rendering job table:</p>
+            <pre>
+              {Utils.stringifyException(e)}
+            </pre>
+          </div>)
+      }
+    } else {
+      None
+    }
+
+    val content =
+      <span id="sessionstat" class="collapse-aggregated-sessionstat collapse-table"
+            onClick="collapseTable('collapse-aggregated-sessionstat',
+                'aggregated-sessionstat')">
+        <h4>
+          <span class="collapse-table-arrow arrow-open"></span>
+          <a>Session Statistics ({numSessions})</a>
+        </h4>
+      </span> ++
+        <div class="aggregated-sessionstat collapsible-table">
+          {table.getOrElse("No statistics have been generated yet.")}
+        </div>
+
+    content
+  }
+
+  private class SessionStatsPagedTable(
+      request: HttpServletRequest,
+      parent: EngineTab,
+      data: Seq[SessionEvent],
+      subPath: String,
+      basePath: String,
+      sessionStatsTableTag: String) extends PagedTable[SessionEvent] {
+
+    private val (sortColumn, desc, pageSize) =
+      getRequestTableParameters(request, sessionStatsTableTag, "Start Time")
+
+    private val encodedSortColumn = URLEncoder.encode(sortColumn, UTF_8.name())
+
+    private val parameterPath =
+      s"$basePath/$subPath/?${getRequestParameterOtherTable(request, sessionStatsTableTag)}"
+
+    override val dataSource = new SessionStatsTableDataSource(data, pageSize, sortColumn, desc)
+
+    override def tableId: String = sessionStatsTableTag
+
+    override def tableCssClass: String =
+      "table table-bordered table-sm table-striped table-head-clickable table-cell-width-limited"
+
+    override def pageLink(page: Int): String = {
+      parameterPath +
+        s"&$pageNumberFormField=$page" +
+        s"&$sessionStatsTableTag.sort=$encodedSortColumn" +
+        s"&$sessionStatsTableTag.desc=$desc" +
+        s"&$pageSizeFormField=$pageSize" +
+        s"#$sessionStatsTableTag"
+    }
+
+    override def pageSizeFormField: String = s"$sessionStatsTableTag.pageSize"
+
+    override def pageNumberFormField: String = s"$sessionStatsTableTag.page"
+
+    override def goButtonFormPath: String =
+      s"$parameterPath&$sessionStatsTableTag.sort=$encodedSortColumn" +
+        s"&$sessionStatsTableTag.desc=$desc#$sessionStatsTableTag"
+
+    override def headers: Seq[Node] = {
+      val sessionTableHeadersAndTooltips: Seq[(String, Boolean, Option[String])] =
+        Seq(
+          ("User", true, None),
+          ("IP", true, None),
+          ("Session ID", true, None),
+          ("Start Time", true, None),
+          ("Finish Time", true, None),
+          ("Duration", true, None),
+          ("Total Execute", true, None))

Review comment:
       `Total Statements` seems better ?




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@kyuubi.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org