adminStats.html 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. <!DOCTYPE html>
  2. <html xmlns="http://www.w3.org/1999/xhtml"
  3. xmlns:th="http://www.thymeleaf.org">
  4. <head th:replace="~{layouts/common.html :: head}"></head>
  5. <body id="page-top">
  6. <!-- Navigation -->
  7. <nav th:replace="~{layouts/common.html :: navbar}"></nav>
  8. <!-- Content -->
  9. <div class="content uv-content d-flex" id="uv-wrapper">
  10. <div class="bg-light border-right" id="uv-sidebar-wrapper" th:replace="~{layouts/sidebar.html :: sidebar}"></div>
  11. <div class="container uv-home-section navVisible" id="uv-content-wrapper">
  12. <div class="uv-loading-spinner" th:text="#{global.loading}"></div>
  13. <div class="col-sm-12"></div>
  14. <div class="uv-container">
  15. <div class="col-sm-12 uv-table-section">
  16. <div class="uv-table-subheader">
  17. <h6 class="uv-table-subheader-h6"><strong th:text="#{admin.stats.sessions.title}">Active Sessions</strong></h6>
  18. </div>
  19. <div class="uv-table-title">
  20. </div>
  21. <table class="table table-striped table-bordered display responsive no-wrap">
  22. <thead>
  23. <tr>
  24. <th class="uv-table-no-sort" th:text="#{admin.stats.sessions.id}">Session ID</th>
  25. <th class="uv-table-no-sort" th:text="#{admin.stats.sessions.username}">Username</th>
  26. <th class="uv-table-no-sort" th:text="#{admin.stats.sessions.last}">Last Request</th>
  27. <th class="uv-table-no-sort" th:text="#{admin.stats.sessions.expired}">Expired</th>
  28. </tr>
  29. </thead>
  30. <tbody>
  31. <tr th:each="item,inRowID : ${activeSessions}">
  32. <td>
  33. <span th:text="${item.id}"></span>
  34. </td>
  35. <td>
  36. <span th:text="${item.username + ' ('+item.fullName+')' }"></span>
  37. </td>
  38. <td>
  39. <span th:text="${item.lastRequest}"></span>
  40. </td>
  41. <td>
  42. <span th:text="${item.expired}"></span>
  43. </td>
  44. </tr>
  45. </tbody>
  46. <tfoot>
  47. <tr class="uv-table-footer-right">
  48. <td class="uv-table-footer-td" colspan="4">
  49. <h6 class="uv-table-title-h6">
  50. <strong> <span th:text="#{admin.stats.sessions.active.total}"> Total active sessions: </span>: <span th:text="${totalActiveSessions}"></span></strong>
  51. <br>
  52. <strong><span th:text="#{admin.stats.sessions.expired.total}">Total expired sessions: </span>: <span th:text="${totalExpiredSessions}"></span></strong>
  53. </h6>
  54. </td>
  55. </tr>
  56. </tfoot>
  57. </table>
  58. <div class="uv-table-subheader">
  59. <h6 class="uv-table-subheader-h6"><strong th:text="#{admin.stats.pending.title}">Pending emails</strong></h6>
  60. </div>
  61. <div class="uv-table-title">
  62. </div>
  63. <table class="table table-striped table-bordered display responsive no-wrap">
  64. <thead>
  65. <tr>
  66. <th class="uv-table-no-sort" th:text="#{admin.stats.pending.username}">Username</th>
  67. <th class="uv-table-no-sort" th:text="#{admin.stats.pending.fullname}">Full name</th>
  68. <th class="uv-table-no-sort" th:text="#{admin.stats.pending.email}">Email</th>
  69. </tr>
  70. </thead>
  71. <tbody>
  72. <tr th:each="item,inRowID : ${pendingEmails}">
  73. <td>
  74. <span th:text="${item.username}"></span>
  75. </td>
  76. <td>
  77. <span th:text="${item.fullName}"></span>
  78. </td>
  79. <td>
  80. <span th:text="${item.email}"></span>
  81. </td>
  82. </tr>
  83. </tbody>
  84. <tfoot>
  85. <tr class="uv-table-footer-right">
  86. <td class="uv-table-footer-td" colspan="3">
  87. <h6 class="uv-table-title-h6">
  88. <strong><span th:text="#{admin.stats.pending.total}">Total pending emails: </span>: <span th:text="${#lists.size(pendingEmails)}"></span></strong>
  89. </h6>
  90. </td>
  91. </tr>
  92. </tfoot>
  93. </table>
  94. </div>
  95. </div>
  96. </div>
  97. </div>
  98. <!-- contactModal -->
  99. <div th:replace="~{layouts/common.html :: contactModal}"></div>
  100. <!-- Footer -->
  101. <footer class="uv-footer uv-footer-text" th:replace="~{layouts/common.html :: footer}"></footer>
  102. <script th:src="@{/js/jquery/jquery.min.js}"></script>
  103. <script th:src="@{/js/bootstrap/bootstrap.min.js}"></script>
  104. <script th:src="@{/js/fa/all.js}"></script>
  105. <script th:src="@{/js/jquery/jquery.dataTables.min.js}"></script>
  106. <script th:src="@{/js/jquery/jquery.dataTables.responsive.min.js}"></script>
  107. <script th:src="@{/js/jquery/jquery.dataTables.rowReorder.min.js}"></script>
  108. <script th:src="@{/js/bootstrap/dataTables.bootstrap4.min.js}"></script>
  109. <script th:src="@{/js/jquery-easing/jquery.easing.min.js}"></script>
  110. <script th:src="@{/js/saic.js}"></script>
  111. <script type="text/javascript">
  112. $( document ).ready(function(){
  113. layout = new Layout("No data to display");
  114. layout.initTableLayout({
  115. paging: true,
  116. language:{
  117. "lengthMenu": "[[#{admin.stats.table.lengthMenu}]]",
  118. "zeroRecords": "[[#{admin.stats.table.zeroRecords}]]",
  119. "info": "[[#{admin.stats.table.info}]]",
  120. "infoEmpty": "[[#{admin.stats.table.infoEmpty}]]",
  121. "infoFiltered": "[[#{admin.stats.table.infoFiltered}]]",
  122. "paginate": {
  123. "previous": "[[#{admin.stats.table.previous}]]",
  124. "next": "[[#{admin.stats.table.next}]]"
  125. }
  126. },
  127. searching: true,
  128. order: false,
  129. orderCellsTop: false,
  130. fixedHeader: false,
  131. info: false,
  132. responsive: true,
  133. initComplete: function(){return true;}
  134. });
  135. layout.closeLoadingSpinner(".uv-loading-spinner");
  136. });
  137. </script>
  138. </body>
  139. </html>