user_audit_log.html 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. {% extends "base.html" %}
  2. {% set active_page = "users" %}
  3. {% block title %} User {{ user.username }} {% endblock %}
  4. {% block divs %}
  5. <div class="container-fluid">
  6. <div class="row">
  7. <div class="sensors-asset card">
  8. <h3>History of actions for user <a href="/users/{{ user.id }}">{{ user.username }}</a></h3>
  9. <div class="table-responsive">
  10. <table id="userAuditLog" class="table table-striped paginate nav-on-click" title="View data">
  11. </table>
  12. </div>
  13. </div>
  14. </div>
  15. </div>
  16. <script>
  17. function AuditLog(event_datetime, event, acting_user_name) {
  18. this.event_datetime = event_datetime;
  19. this.event = event;
  20. this.acting_user_name = acting_user_name;
  21. }
  22. $(document).ready(function() {
  23. $('#userAuditLog').DataTable({
  24. "order": [[ 0, "desc" ]], // Default sort by the hidden UTC Timestamp column
  25. serverSide: true,
  26. columns: [
  27. { data: "event_datetime", title: "Event Datetime", orderable: true },
  28. { data: "event", title: "Event Name", orderable: false, width: "80%" },
  29. { data: "acting_user_name", title: "Acting User", orderable: false },
  30. ],
  31. ajax: function (data, callback, settings) {
  32. const basePath = window.location.origin;
  33. let filter = data["search"]["value"];
  34. let orderColumnIndex = data["order"][0]["column"];
  35. let orderDirection = data["order"][0]["dir"];
  36. let orderColumnName = data["columns"][orderColumnIndex]["data"];
  37. let url = `${basePath}/api/v3_0/users/{{ user.id }}/auditlog?page=${Math.floor(data["start"] / data["length"]) + 1}&per_page=${data["length"]}`;
  38. if (filter.length > 0) {
  39. url = `${url}&filter=${filter}`;
  40. }
  41. if (orderColumnName){
  42. url = `${url}&sort_by=${orderColumnName}&sort_dir=${orderDirection}`;
  43. }
  44. $.ajax({
  45. type: "get",
  46. url: url,
  47. success: function(response, text) {
  48. let clean_response = [];
  49. response["data"].forEach( (element) => clean_response.push(
  50. new AuditLog(element["event_datetime"], element["event"], `${element["active_user_name"]} (Id: ${element["active_user_id"]})`)
  51. ));
  52. callback({"data": clean_response, "recordsTotal": response["num-records"], "recordsFiltered": response["filtered-records"]});
  53. },
  54. error: function (request, status, error) {
  55. console.log("Error: ", error)
  56. }
  57. });
  58. }
  59. });
  60. });
  61. </script>
  62. {% endblock %}