device_status.html 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. {% extends 'dcim/device.html' %}
  2. {% load static %}
  3. {% block title %}{{ device }} - Status{% endblock %}
  4. {% block content %}
  5. {% include 'inc/ajax_loader.html' %}
  6. <div class="row">
  7. <div class="col-md-6">
  8. <div class="panel panel-default">
  9. <div class="panel-heading"><strong>Device Facts</strong></div>
  10. <table class="table panel-body">
  11. <tr>
  12. <th>Hostname</th>
  13. <td id="hostname"></td>
  14. </tr>
  15. <tr>
  16. <th>FQDN</th>
  17. <td id="fqdn"></td>
  18. </tr>
  19. <tr>
  20. <th>Vendor</th>
  21. <td id="vendor"></td>
  22. </tr>
  23. <tr>
  24. <th>Model</th>
  25. <td id="model"></td>
  26. </tr>
  27. <tr>
  28. <th>Serial Number</th>
  29. <td id="serial_number"></td>
  30. </tr>
  31. <tr>
  32. <th>OS Version</th>
  33. <td id="os_version"></td>
  34. </tr>
  35. <tr>
  36. <th>Uptime</th>
  37. <td id="uptime"></td>
  38. </tr>
  39. </table>
  40. </div>
  41. </div>
  42. <div class="col-md-6">
  43. <div class="panel panel-default">
  44. <div class="panel-heading"><strong>Environment</strong></div>
  45. <table class="table panel-body">
  46. <tr id="cpu">
  47. <th colspan="2"><i class="fa fa-tachometer"></i> CPU</th>
  48. </tr>
  49. <tr id="memory">
  50. <th colspan="2"><i class="fa fa-microchip"></i> Memory</th>
  51. </tr>
  52. <tr id="temperature">
  53. <th colspan="2"><i class="fa fa-thermometer"></i> Temperature</th>
  54. </tr>
  55. <tr id="fans">
  56. <th colspan="2"><i class="fa fa-superpowers"></i> Fans</th>
  57. </tr>
  58. <tr id="power">
  59. <th colspan="2"><i class="fa fa-bolt"></i> Power</th>
  60. </tr>
  61. </table>
  62. </div>
  63. </div>
  64. </div>
  65. {% endblock %}
  66. {% block javascript %}
  67. <script type="text/javascript">
  68. $(document).ready(function() {
  69. $.ajax({
  70. url: "{% url 'dcim-api:device-napalm' pk=device.pk %}?method=get_facts&method=get_environment",
  71. dataType: 'json',
  72. success: function(json) {
  73. if (!json['get_facts']['error']) {
  74. $('#hostname').html(json['get_facts']['hostname']);
  75. $('#fqdn').html(json['get_facts']['fqdn']);
  76. $('#vendor').html(json['get_facts']['vendor']);
  77. $('#model').html(json['get_facts']['model']);
  78. $('#serial_number').html(json['get_facts']['serial_number']);
  79. $('#os_version').html(json['get_facts']['os_version']);
  80. // Calculate uptime
  81. var uptime = json['get_facts']['uptime'];
  82. console.log(uptime);
  83. var uptime_days = Math.floor(uptime / 86400);
  84. var uptime_hours = Math.floor(uptime % 86400 / 3600);
  85. var uptime_minutes = Math.floor(uptime % 3600 / 60);
  86. $('#uptime').html(uptime_days + "d " + uptime_hours + "h " + uptime_minutes + "m");
  87. }
  88. if (!json['get_environment']['error']) {
  89. $.each(json['get_environment']['cpu'], function(name, obj) {
  90. var row="<tr><td>" + name + "</td><td>" + obj['%usage'] + "%</td></tr>";
  91. $("#cpu").after(row)
  92. });
  93. $('#memory').after("<tr><td>Used</td><td>" + json['get_environment']['memory']['used_ram'] + "</td></tr>");
  94. $('#memory').after("<tr><td>Available</td><td>" + json['get_environment']['memory']['available_ram'] + "</td></tr>");
  95. $.each(json['get_environment']['temperature'], function(name, obj) {
  96. var style = "success";
  97. if (obj['is_alert']) {
  98. style = "warning";
  99. } else if (obj['is_critical']) {
  100. style = "danger";
  101. }
  102. var row="<tr class=\"" + style +"\"><td>" + name + "</td><td>" + obj['temperature'] + "°C</td></tr>";
  103. $("#temperature").after(row)
  104. });
  105. $.each(json['get_environment']['fans'], function(name, obj) {
  106. var row;
  107. if (obj['status']) {
  108. row="<tr class=\"success\"><td>" + name + "</td><td><i class=\"fa fa-check text-success\"></i></td></tr>";
  109. } else {
  110. row="<tr class=\"error\"><td>" + name + "</td><td><i class=\"fa fa-close text-error\"></i></td></tr>";
  111. }
  112. $("#fans").after(row)
  113. });
  114. $.each(json['get_environment']['power'], function(name, obj) {
  115. var row;
  116. if (obj['status']) {
  117. row="<tr class=\"success\"><td>" + name + "</td><td><i class=\"fa fa-check text-success\"></i></td></tr>";
  118. } else {
  119. row="<tr class=\"danger\"><td>" + name + "</td><td><i class=\"fa fa-close text-danger\"></i></td></tr>";
  120. }
  121. $("#power").after(row)
  122. });
  123. }
  124. },
  125. error: function(xhr) {
  126. alert(xhr.responseText);
  127. }
  128. });
  129. });
  130. </script>
  131. {% endblock %}