#Callbacks: --

Internal Metrics

Source

import com.fastscala.templates.bootstrap5.helpers.BSHelpers.*
val rerenderable = JS.rerenderable(rerenderer => implicit fsc => {
  val totalMem = Runtime.getRuntime.totalMemory()
  val freeMem = Runtime.getRuntime.freeMemory()
  val usedMem = totalMem - freeMem
  div.apply {
  <div>
    {
    BSProgress().striped.animated.bgWarning.renderXofY(usedMem, totalMem, readableSize(usedMem)).mt_1.mb_2
    }
  </div>
  <ul>
    <li><b>Total Memory:</b> {readableSize(totalMem)}</li>
    <li><b>Free Memory:</b> {readableSize(freeMem)}</li>
    <li><b>#GC runs:</b> {fsc.session.fsSystem.stats.gcRunsTotal.get().toLong}</li>
    <li><b>Total GC time:</b> {fsc.session.fsSystem.stats.gcTimeTotal.get().formatted("%.3f")}s</li>
    <li><b>Total #Sessions:</b> {fsc.session.fsSystem.sessions.size}</li>
    <li><b>Total #Pages:</b> {fsc.session.fsSystem.sessions.map(_._2.pages.size).sum}</li>
    <li class="ms-2"><b>Total #Defunct Pages:</b> {fsc.session.fsSystem.sessions.map(_._2.pages.count(_._2.isDefunct_?)).sum}</li>
    <li><b>Total #Anonymous Pages:</b> {fsc.session.fsSystem.sessions.map(_._2.anonymousPages.size).sum}</li>
    <li><b>Total #Callback Functions:</b> {fsc.session.fsSystem.sessions.flatMap(_._2.pages.map(_._2.callbacks.size)).sum}</li>
    <li><b>Total #File Download Callback Functions:</b> {fsc.session.fsSystem.sessions.flatMap(_._2.pages.map(_._2.fileDownloadCallbacks.size)).sum}</li>
    <li><b>Total #File Upload Callback Functions:</b> {fsc.session.fsSystem.sessions.flatMap(_._2.pages.map(_._2.fileUploadCallbacks.size)).sum}</li>
  </ul>
    <h6>This session:</h6>
    <ul>
      <li><b>#Pages:</b> {fsc.session.pages.size}</li>
      <li class="ms-2"><b>#Defunct Pages:</b> {fsc.session.pages.count(_._2.isDefunct_?)}</li>
      <li><b>#Anonymous Pages:</b> {fsc.session.anonymousPages.size}</li>
      <li><b>#Callback Functions:</b> {fsc.session.pages.map(_._2.callbacks.size).sum}</li>
      <li><b>#File Download Callback Functions:</b> {fsc.session.pages.map(_._2.fileDownloadCallbacks.size).sum}</li>
      <li><b>#File Upload Callback Functions:</b> {fsc.session.pages.map(_._2.fileUploadCallbacks.size).sum}</li>
    </ul>
}
})

import scala.concurrent.duration.DurationInt
def updateMetrics(): IO[Unit] = for {
  _ <- IO.sleep(1000.millis)
  _ <- IO(fsc.sendToPage(rerenderable.rerender()))
  _ <- if (fsc.page.isDefunct_?) IO.unit else updateMetrics()
} yield ()

import cats.effect.unsafe.implicits.global
updateMetrics().unsafeRunAndForget()
border.p_2.rounded.apply {
  rerenderable.render() ++
    d_flex.justify_content_center.apply {
      BSBtn().BtnPrimary.lbl("System GC").ajax(_ => {
        fsc.page.session.fsSystem.freeUpSpace()
        JS.void
      }).btn.me_2 ++
        BSBtn().BtnPrimary.lbl("Free Space").ajax(_ => {
          fsc.page.session.fsSystem.freeUpSpace()
          JS.void
        }).btn
    }
}
61.6 MB
  • Total Memory: 600 MB
  • Free Memory: 538.4 MB
  • #GC runs: 0
  • Total GC time: 0.000s
  • Total #Sessions: 41
  • Total #Pages: 17
  • Total #Defunct Pages: 16
  • Total #Anonymous Pages: 0
  • Total #Callback Functions: 91
  • Total #File Download Callback Functions: 0
  • Total #File Upload Callback Functions: 0
This session:
  • #Pages: 1
  • #Defunct Pages: 0
  • #Anonymous Pages: 0
  • #Callback Functions: 0
  • #File Download Callback Functions: 0
  • #File Upload Callback Functions: 0