overview.html 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. {% set page_title = _("Overview") %}
  2. {% extends theme("management/management_layout.html") %}
  3. {% block breadcrumb %}
  4. <ol class="breadcrumb flaskbb-breadcrumb">
  5. <li class="breadcrumb-item"><a href="{{ url_for('forum.index') }}">{% trans %}Forum{% endtrans %}</a></li>
  6. <li class="breadcrumb-item active">{% trans %}Management{% endtrans %}</li>
  7. </ol>
  8. {% endblock %}
  9. {% block management_content %}
  10. <div class="col-md-12 settings-col">
  11. <div class="card settings">
  12. <div class="card-header settings-header">
  13. <span class="fa fa-tasks"></span> {% trans %}Overview{% endtrans %}
  14. </div>
  15. <div class="card-body settings-body">
  16. <div class="settings-content">
  17. <div class="stats">
  18. <div class="row stats-row">
  19. <div class="overview-notifications col-12">
  20. {% if unread_reports > 0 %}
  21. <div class="alert-message alert-message-warning">
  22. <h4>{% trans %}There is something that wants your attention.{% endtrans %}</h4>
  23. <p>{% trans url=url_for('management.unread_reports') %}You have <a href="{{ url }}">{{ unread_reports }} unread reports</a>.{% endtrans %}</p>
  24. </div>
  25. {% else %}
  26. <div id="overview-no-notifications" class="alert-message alert-message-success">
  27. <h4>{% trans %}Everything seems alright.{% endtrans %}</h4>
  28. <p>{% trans %}No new notifications.{% endtrans %}</p>
  29. </div>
  30. {% endif %}
  31. </div>
  32. </div>
  33. <div class="row stats-row">
  34. <div class="col-4">
  35. <div class="stats-widget">
  36. <div class="icon">
  37. <i class="fa fa-users text-success"></i>
  38. </div>
  39. <div class="text">
  40. <var>{{ all_users }}</var>
  41. <label class="text-muted">{% trans %}users{% endtrans %}</label>
  42. </div>
  43. </div>
  44. </div>
  45. <div class="col-4">
  46. <div class="stats-widget">
  47. <div class="icon">
  48. <i class="fa fa-comment text-primary"></i>
  49. </div>
  50. <div class="text">
  51. <var>{{ post_count }}</var>
  52. <label class="text-muted">{% trans %}posts{% endtrans %}</label>
  53. </div>
  54. </div>
  55. </div>
  56. <div class="col-4">
  57. <div class="stats-widget">
  58. <div class="icon">
  59. <i class="fa fa-comments text-info"></i>
  60. </div>
  61. <div class="text">
  62. <var>{{ topic_count }}</var>
  63. <label class="text-muted">{% trans %}topics{% endtrans %}</label>
  64. </div>
  65. </div>
  66. </div>
  67. </div>
  68. <div class="row stats-row">
  69. <div class="col-4">
  70. <div class="row stats-heading">{% trans %}Statistics{% endtrans %}</div>
  71. <div class="row">
  72. <div class="col key text-start">{% trans %}Registered users{% endtrans %}</div><div class="col text-end">{{ all_users }}</div>
  73. </div>
  74. <div class="row">
  75. <div class="col">{% trans %}Online users{% endtrans %}</div><div class="col text-end">{{ online_users }}</div>
  76. </div>
  77. <div class="row">
  78. <div class="col">{% trans %}Banned users{% endtrans %}</div><div class="col text-end">{{ banned_users }}</div>
  79. </div>
  80. <div class="row">
  81. <div class="col">{% trans %}Groups{% endtrans %}</div><div class="col text-end">{{ all_groups }}</div>
  82. </div>
  83. <div class="row">
  84. <div class="col">{% trans %}Topics{% endtrans %}</div><div class="col text-end">{{ topic_count }}</div>
  85. </div>
  86. <div class="row">
  87. <div class="col">{% trans %}Posts{% endtrans %}</div><div class="col text-end">{{ post_count }}</div>
  88. </div>
  89. <div class="row">
  90. <div class="col">{% trans %}Reports{% endtrans %}</div><div class="col text-end">{{ report_count }}</div>
  91. </div>
  92. </div>
  93. <div class="col-4">
  94. <div class="row stats-heading">{% trans %}Components{% endtrans %}</div>
  95. <div class="row">
  96. <div class="col">FlaskBB</div><div class="col text-end">{{ flaskbb_version }}</div>
  97. </div>
  98. <div class="row">
  99. <div class="col">Celery</div>
  100. <div class="col text-end">
  101. <span id="celery-status" class="text-warning">{% trans %}checking status{% endtrans %}</span>
  102. {{ celery_version }}
  103. </div>
  104. </div>
  105. <div class="row">
  106. <div class="col">Flask</div><div class="col text-end">{{ flask_version }}</div>
  107. </div>
  108. <div class="row">
  109. <div class="col">Python</div><div class="col text-end">{{ python_version }}</div>
  110. </div>
  111. </div>
  112. <div class="col-4">
  113. <div class="row stats-heading">{% trans %}Plugins{% endtrans %}</div>
  114. {% for plugin in plugins %}
  115. <div class="row">
  116. <div class="col">
  117. {% if plugin.installed %}
  118. <a href="{{ url_for('management.settings', plugin=plugin.name) }}">{{ plugin.name.title() }}</a>
  119. {% else %}
  120. <a href="{{ url_for('management.plugins') }}">{{ plugin.name.title() }}</a>
  121. {% endif %}
  122. </div>
  123. <div class="col text-end">
  124. {% if not plugin.enabled %}
  125. <span class="text-danger">{% trans %}not enabled{% endtrans %}</span>
  126. {% elif plugin.enabled %}
  127. {% if plugin.is_installed %}
  128. <span class="text-success">{% trans %}enabled &amp; installed{% endtrans %}</span>
  129. {% elif not plugin.is_installable %}
  130. <span class="text-success">{% trans %}enabled{% endtrans %}</span>
  131. {% elif not plugin.is_installed %}
  132. <span class="text-warning">{% trans %}not installed{% endtrans %}</span>
  133. {% endif %}
  134. {% endif %}
  135. {{ plugin.version }}
  136. </div>
  137. </div>
  138. {% endfor %}
  139. </div>
  140. </div>
  141. </div>
  142. </div>
  143. </div>
  144. </div>
  145. </div>
  146. {% endblock %}
  147. {% block scripts %}
  148. <script>
  149. // TOOD: Put this into management.celery_status
  150. const running = "<span id='celery-status' class='text-success'><strong>{% trans %}running{% endtrans %}</strong></span>";
  151. const not_running = "<span id='celery-status' class='text-danger'><strong>{% trans %}not running{% endtrans %}</strong></span>";
  152. const notification = `
  153. <div class='alert-message alert-message-danger'>
  154. <h4>{% trans %}There is a problem.{% endtrans %}</h4>
  155. <p class="mb-0">{% trans %}Celery is <strong>not</strong> running.{% endtrans %}</p>
  156. <p class="mb-0">{% trans %}You can start celery with this command:{% endtrans %}</p>
  157. <pre>flaskbb --config {{ current_app.config["CONFIG_PATH"] }} celery worker</pre>
  158. </div>
  159. `;
  160. const endpoint = "{{ url_for('management.celery_status') }}";
  161. window.app.check_overview_status(endpoint, notification, running, not_running);
  162. </script>
  163. {% endblock %}