dey-examples/connectcore-demo-example/management.html

535 lines
29 KiB
HTML

<!DOCTYPE html>
<html>
<head>
<title>
Digi Demo - Management
</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
<link href="https://cdn.jsdelivr.net/gh/gitbrent/bootstrap4-toggle@3.6.1/css/bootstrap4-toggle.min.css" rel="stylesheet">
<link href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-slider/9.7.3/css/bootstrap-slider.min.css" rel="stylesheet">
<link rel="stylesheet" href="./static/css/login.css">
<link rel="stylesheet" href="./static/css/general.css">
<link rel="stylesheet" href="./static/css/toastr.css">
<link rel="stylesheet" href="./static/css/xterm.css">
<!-- JS, Popper.js, and jQuery -->
<script src="https://code.jquery.com/jquery-3.5.1.min.js" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js" integrity="sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js" integrity="sha384-B4gt1jrGC7Jh4AgTPSdUtOBvfO8shuf57BaghqFfPlYxofvL8/KUEfYiJOMMV+rV" crossorigin="anonymous"></script>
<script src="https://kit.fontawesome.com/1e66c78073.js" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/gh/gitbrent/bootstrap4-toggle@3.6.1/js/bootstrap4-toggle.min.js"></script>
<script src="https://www.gstatic.com/charts/loader.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-slider/9.7.3/bootstrap-slider.min.js"></script>
<script>
google.charts.load("current", {"packages":["line"]});
</script>
<script type="text/javascript" src="./static/js/common.js"></script>
<script type="text/javascript" src="./static/js/devices.js"></script>
<script type="text/javascript" src="./static/js/jquery.pjax.js"></script>
<script type="text/javascript" src="./static/js/jquery.matchHeight-min.js"></script>
<script type="text/javascript" src="./static/js/toastr.min.js"></script>
</head>
<body>
<nav id="topBar" class="navbar navbar-expand-lg navbar-light bg-white shadow-sm">
<div class="nav-container">
<a id="banner-link" class="navbar-brand align-middle" href="/">
<div class="d-flex align-items-baseline">
<img id="banner-logo" class="banner-icon" src="./static/images/Digi_logo_banner.png">
<p id="banner-text">ConnectCore Demo</p>
</div>
</a>
<div class="nav-right-container">
<div id="data_usage_panel" class="data-usage-panel" style="display: none;">
<div class="data-usage-panel-wrapper">
<div id="data_usage_loading" class="data-usage-loading">
<div class="data-usage-loading-background"></div>
<img class="data-usage-loading-icon" src="./static/images/loading.gif" alt="Loading..." />
<div class="data-usage-loading-text">Loading data...</div>
</div>
<div id="data_usage_content" class="data-usage-content">
<div class="data-usage-section">
<div class="data-usage-header">
<div class="data-usage-title">Total account data usage</div>
<div class="fas fa-sync device-card-header-button" onclick="refreshUsageData()"></div>
</div>
<div id="data_usage_total" class="data-usage-total-value">-</div>
<div class="data-usage-graphic-container">
<button id="data_usage_graphic_devices" class="fas data-usage-graphic data-usage-graphic-devices" data-toggle="tooltip" data-placement="bottom" title="Total data usage by devices"></button>
<button id="data_usage_graphic_web" class="fas data-usage-graphic data-usage-graphic-web" data-toggle="tooltip" data-placement="bottom" title="Total data usage by web APIs"></button>
</div>
<div class="data-usage-values-container">
<table>
<tr>
<td>
<div class="data-usage-legend data-usage-graphic-devices"></div>
</td>
<td>
<div class="data-usage-legend-text">Devices data usage</div>
</td>
</tr>
<tr>
<td>
<div class="data-usage-legend data-usage-graphic-web"></div>
</td>
<td>
<div class="data-usage-legend-text">Web APIs data usage</div>
</td>
</tr>
</table>
</div>
</div>
<div class="data-usage-section">
<div class="data-usage-title">Devices usage</div>
<div class="data-usage-values-container">
<table>
<tr>
<td>
<div class="data-usage-value-label-bold">Total devices usage:</div>
</td>
<td>
<div id="data_usage_devices" class="data-usage-value-bold">-</div>
</td>
</tr>
<tr>
<td>
<div class="data-usage-value-label">Current device usage:</div>
</td>
<td>
<div id="data_usage_current_device" class="data-usage-value">-</div>
</td>
</tr>
</table>
</div>
</div>
<div class="data-usage-section">
<div class="data-usage-title">Web APIs usage</div>
<div class="data-usage-values-container">
<table>
<tr>
<td>
<div class="data-usage-value-label-bold">Total web APIs usage:</div>
</td>
<td>
<div id="data_usage_web" class="data-usage-value-bold">-</div>
</td>
</tr>
<tr>
<td>
<div class="data-usage-value-label">Web services usage:</div>
</td>
<td>
<div id="data_usage_web_services" class="data-usage-value">-</div>
</td>
</tr>
<tr>
<td>
<div class="data-usage-value-label">Monitors usage:</div>
</td>
<td>
<div id="data_usage_monitors" class="data-usage-value">-</div>
</td>
</tr>
</table>
</div>
</div>
</div>
</div>
</div>
<div>
<img src="./static/images/board.png" class="device-title-img" title="Device">
</div>
<div id="device-name"></div>
<div>
<img src="./static/images/status_offline.png" id="device-connection-status" class="device-title-img" title="Offline">
</div>
<div class="vertical-separator"></div>
<div>
<button id="devices-list-button" class="btn widget-button" type="button" value="0" onclick="window.open('/','_self');">
<img src="./static/images/devices_list_gray.png" id="devices-list-icon" class="devices-list-icon" data-toggle="tooltip" data-placement="bottom" title="Open devices list">
</button>
<button id="data_usage_button" class="btn widget-button" type="button" value="0" onclick="toggleDataUsagePanel();">
<img src="./static/images/data_usage.png" id="data_usage_icon" class="devices-list-icon" data-toggle="tooltip" data-placement="bottom" title="Show data usage">
</button>
</div>
<div class="vertical-separator"></div>
<div class="dropdown digi-gray" id="profile-container">
<button class="btn dropdown-toggle" type="button" id="profileMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<img id="profile-logo" class="banner-icon" src="./static/images/profile_gray.png">
</button>
<div class="dropdown-menu shadow-sm" aria-labelledby="profileMenuButton">
<a class="dropdown-item" href="/access/logout/">Log out</a>
</div>
</div>
</div>
</div>
</nav>
<div class="bg-light" id="body-row">
<!-- Sidebar https://www.codeply.com/go/3e0RAjccRO/bootstrap-4-collapsing-sidebar-menu# -->
<div id="sidebar-container" class="sidebar-expanded d-none d-md-block">
<!-- d-* hides the Sidebar in smaller devices. Its items can be kept on the Navbar 'Menu' -->
<div id="sidebar-contents">
<!-- Bootstrap List Group -->
<ul id="sections" data-pjax class="list-group">
<li>
<a data-pjax href="/dashboard/" class="list-group-item list-group-item-action d-flex align-items-center">
<div class="d-flex w-100 justify-content-start align-items-center">
<span class="digi-menu-icon fas fa-tachometer-alt fa-fw fa-lg mr-3"></span>
<span class="menu-collapsed">Dashboard</span>
</div>
</a>
</li>
<li>
<a data-pjax href="/history/" class="list-group-item list-group-item-action d-flex align-items-center">
<div class="d-flex w-100 justify-content-start align-items-center">
<span class="digi-menu-icon fas fa-chart-area fa-fw fa-lg mr-3"></span>
<span class="menu-collapsed">Historical data</span>
</div>
</a>
</li>
<li>
<a data-pjax href="/management/" class="list-group-item list-group-item-action d-flex align-items-center">
<div class="d-flex w-100 justify-content-start align-items-center">
<span class="digi-menu-icon fas fa-cog fa-fw fa-lg mr-3"></span>
<span class="menu-collapsed">Management</span>
</div>
</a>
</li>
</ul>
<ul id="collapsator" class="list-group">
<a href="#top" data-toggle="sidebar-collapse" class="list-group-item list-group-item-action d-flex align-items-center">
<div class="d-flex w-100 justify-content-start align-items-center">
<span id="collapse-icon" class="digi-menu-icon fas fa-fw fa-lg mr-3"></span>
<span id="collapse-text" class="menu-collapsed">Collapse</span>
</div>
</a>
</ul>
</div>
</div>
<div class="container-fluid">
<div id="loading">
<img id="loading-image" src="./static/images/loading.gif" alt="Loading..." />
</div>
<div id="pjax-container">
<!-- <input type="file" id="firmware_file" style="display:none" onchange="firmwareFileChanged()" accept=".swu,.json,.txt"/>-->
<input type="file" id="firmware_file" style="display:none" onchange="firmwareFileChanged()"/>
<div class="row justify-content-lg-center">
<div class="col-lg-12 col-xl-12">
<div id="loading_popup" class="popup popup-loading shadow">
<img class="popup-item" src="./static/images/loading.gif" alt="Loading..." />
<div id="loading_popup_message" class="popup-text">Loading information...</div>
</div>
<div id="info_popup" class="popup popup-info shadow d-none">
<div id="info_popup_title" class="popup-title">Error</div>
<div id="info_popup_message" class="popup-text">-</div>
</div>
<div id="confirm_dialog" class="confirm-dialog d-none">
<div class="device-card-header">
<span class="fas fa-question-circle fa-lg mr-2"></span>
<span id="confirm_dialog_title"></span>
<div class="fas fa-window-close fa-lg device-card-header-button" onclick="showPopup(ID_LOADING_WRAPPER, ID_CONFIRM_DIALOG, false)"></div>
</div>
<div id="confirm_dialog_message" class="confirm-dialog-message"></div>
<div class="confirm-dialog-buttons-container">
<div id="confirm_dialog_no_button" class="device-card-button confirm-dialog-button">No</div>
<div id="confirm_dialog_yes_button" class="device-card-button confirm-dialog-button">Yes</div>
</div>
</div>
<div id="loading_wrapper" class="loading-wrapper element-grayed">
<div class="card shadow-sm">
<div class="card-body">
<h5 class="card-title">System monitor</h5>
<div>Configure the system monitor service parameters.</div>
<div class="system-monitor-param-container">
<span class="system-monitor-param-label">Time between samples:</span>
<input id="sample_rate" class="system-monitor-input" type="text"/>
<button class="fas fa-question-circle system-monitor-help" title="Time to wait between samples read (in seconds). Must be a positive number greater than 0." data-toggle="tooltip" data-placement="right"></button>
</div>
<div id="sample_rate_error" class="system-monitor-error"></div>
<div class="system-monitor-param-container">
<span class="system-monitor-param-label">Samples to buffer:</span>
<input id="num_samples_upload" class="system-monitor-input" type="text"/>
<button class="fas fa-question-circle system-monitor-help" title="Number of samples of each parameter to gather before uploading them to Digi Remote Manager. Must be a positive number greater than 0." data-toggle="tooltip" data-placement="right"></button>
</div>
<div id="samples_buffer_error" class="system-monitor-error"></div>
<div id="save_button" class="device-card-button system-monitor-save system-monitor-save-disabled" onclick="saveSystemMonitor()">Save</div>
</div>
</div>
<div class="card shadow-sm">
<div class="card-body">
<h5 class="card-title">Reboot device</h5>
<div>Click <b>REBOOT</b> to restart your device.</div>
<div id="reboot_button" class="device-card-button reboot-button" onclick="askReboot()">REBOOT</div>
</div>
</div>
<div class="card shadow-sm">
<div class="card-body">
<h5 class="card-title">Firmware update</h5>
<table style="margin: 15px;">
<tr>
<td style="width: 180px; vertical-align: top;">
<span class="device-card-content-text">Current DEY version:</span>
</td>
<td>
<span id="dey_version" class="device-card-content-value">-</span>
</td>
</tr>
<tr>
<td style="vertical-align: top;">
<span class="device-card-content-text">Current kernel version:</span>
</td>
<td>
<span id="kernel_version" class="device-card-content-value">-</span>
</td>
</tr>
<tr>
<td style="vertical-align: top;">
<span class="device-card-content-text">Current U-Boot version:</span>
</td>
<td>
<span id="uboot_version" class="device-card-content-value">-</span>
</td>
</tr>
</table>
<div class="firmware-tabs">
<div id="firmware_tab_upload_header" class="firmware-tab-header firmware-tab-header-active" onclick="showFirmwareTab(ID_FIRMWARE_TAB_UPLOAD)">
<span class="fas fa-upload fa-lg"></span>
<span class="firmware-tab-text">Upload file</span>
</div>
<div id="firmware_tab_fileset_header" class="firmware-tab-header" onclick="showFirmwareTab(ID_FIRMWARE_TAB_FILESET)">
<span class="fas fa-database fa-lg"></span>
<span class="firmware-tab-text">Download from storage</span>
</div>
</div>
<div class="firmware-tab-container">
<div id="firmware_tab_upload" class="firmware-tab firmware-tab-upload">
<div>Upload and install a firmware file from your computer.</div>
<div class="firmware-file-container">
<div id="select_firmware_button" class="device-card-button browse-firmware-button" onclick="openFirmwareBrowser()">Choose file...</div>
<div id="firmware_file_label" class="firmware-file-label">No file chosen</div>
</div>
</div>
<div id="firmware_tab_fileset" class="firmware-tab firmware-tab-fileset">
<div>Download and install firmware from Digi Remote Manager storage.</div>
<div class="fileset-items-header">
<div class="fileset-entry-icon"></div>
<div class="fileset-entry-name">Name</div>
<div class="fileset-entry-path">Path</div>
<div class="fileset-entry-size">Size</div>
<div class="fileset-entry-last-modified">Last modified</div>
</div>
<div id="fileset_items_container" class="fileset-items-container"></div>
<div id="refresh_fileset_button" class="device-card-button refresh-fileset-button" onclick="refreshFilesetFiles()">Refresh</div>
</div>
</div>
<div id="update_firmware_progress" class="update-firmware-progress">
<div id="update_firmware_progress_title" class="update-firmware-progress-title">Firmware update in progress...</div>
<div class="progress update-firmware-progress-bar">
<div id="update_firmware_progress_bar" class="progress-bar progress-bar-striped update-firmware-progress-bar update-firmware-progress-bar-info update-firmware-progress-bar-hover" role="progressbar" aria-valuenow="40" aria-valuemin="0" aria-valuemax="100" style="width:40%">40%</div>
</div>
<span id="update_firmware_progress_message" class="update-firmware-progress-status">Waiting for firmware update...</span>
</div>
<div>
<div id="update_firmware_button" class="device-card-button update-firmware-button management-button-disabled" onclick="askUpdateFirmware()">Update Firmware</div>
<div id="cancel_update_firmware_button" class="device-card-button cancel-firmware-update-button management-button-disabled" onclick="askCancelFirmwareUpdate()">Cancel update</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
$(document).ready(function() {
// Reset variables.
readingManagementInfo = false;
managementInfoRead = false;
deviceRebooting = false;
updatingFirmware = false;
firmwareUpdateTimer = null;
selectedFilesetEntry = null;
filesLoaded = false;
// Initialize page.
initializeManagementPage();
// Register system monitor input changed.
$("#sample_rate").on("input", function(event) {
validateSystemMonitor(event.target.value);
});
$("#num_samples_upload").on("input", function(event) {
validateSystemMonitor();
});
});
</script>
</div>
</div>
</div>
<script>
function getCookie(cName) {
if (document.cookie.length > 0) {
cStart = document.cookie.indexOf(cName + "=");
if (cStart != -1) {
cStart = cStart + cName.length + 1;
cEnd = document.cookie.indexOf(";", cStart);
if (cEnd == -1)
cEnd = document.cookie.length;
return unescape(document.cookie.substring(cStart, cEnd));
}
}
return "";
}
$.ajaxSetup({
headers: {
"X-CSRFToken": getCookie("csrftoken")
}
});
$(document).ready(function() {
$("#banner-link").on({
"mouseover" : function() {
$("#banner-logo").attr("src", "./static/images/Digi_logo_banner_gray.png");
},
"mouseout" : function() {
$("#banner-logo").attr("src", "./static/images/Digi_logo_banner.png");
}
});
});
// Enable the tooltip library.
$(function() {
$('[data-toggle="tooltip"]').tooltip();
});
</script>
<!-- Local JS files and functions -->
<script>
$( document ).ready(function() {
$("#profile-container").on({
"mouseover" : function() {
$("#profile-logo").attr("src", "./static/images/profile_green.png");
if (!$("#profile-container").hasClass("digi-green")) {
$("#profile-container").addClass("digi-green");
}
if ($("#profile-container").hasClass("digi-gray")) {
$("#profile-container").removeClass("digi-gray");
}
},
"mouseout" : function() {
$("#profile-logo").attr("src", "./static/images/profile_gray.png");
if (!$("#profile-container").hasClass("digi-gray")) {
$("#profile-container").addClass("digi-gray");
}
if ($("#profile-container").hasClass("digi-green")) {
$("#profile-container").removeClass("digi-green");
}
}
});
});
</script>
<!-- Local JS files and functions -->
<script type="text/javascript" src="./static/js/sidebar.js"></script>
<script type="text/javascript" src="./static/js/ccimx8mm-dvk.js"></script>
<script type="text/javascript" src="./static/js/ccimx8m-nano.js"></script>
<script type="text/javascript" src="./static/js/ccimx8x-sbc-pro.js"></script>
<script type="text/javascript" src="./static/js/dashboard.js"></script>
<script type="text/javascript" src="./static/js/management.js"></script>
<script type="text/javascript" src="./static/js/history.js"></script>
<script type="text/javascript" src="./static/js/xterm.js"></script>
<script type="text/javascript" src="./static/js/xterm-addon-fit.js"></script>
<script type="text/javascript" src="./static/js/console.js"></script>
<script type="text/javascript" src="./static/js/file-system.js"></script>
<script type="text/javascript" src="./static/js/data-usage.js"></script>
<script>
$(document).ready(function() {
// Don't show the loading spinner at the beginning. Initial page
// load is full, so not relying on AJAX.
$("#loading").hide();
verifyParameters();
// Set up PJAX.
if ($.support.pjax) {
$.pjax.defaults.timeout = 20000;
$.pjax.defaults.fragment = "#pjax-container";
$(document).pjax("a[data-pjax]", "#pjax-container");
$(document).on("pjax:beforeSend", function() {
// Do not load new content if there are unsaved changes.
if ($("#save-schedule").length && !$("#save-schedule").attr("disabled") && !confirm("There are unsaved changes. Do you want to exit?"))
return false;
});
$(document).on("pjax:send", function(e) {
setSelectedSection(e.currentTarget.activeElement);
$("#pjax-container").hide();
$("#loading").show();
});
$(document).on("pjax:complete", function() {
$("#loading").hide();
$("#pjax-container").show();
verifyParameters();
});
}
// Append the URL parameters to the section links.
var params = new URLSearchParams(window.location.search).toString();
if (params) {
$("#sections li").each(function(i, n) {
n.children[0].href += "?" + params;
});
}
// Set the selected section.
setSelectedSection();
// Set the name of the selected device.
$("#device-name").html("DEY device".toUpperCase());
// Change the color of the devices icon when hovering.
$("#devices-list-button").on({
"mouseover" : function() {
$("#devices-list-icon").attr("src", "./static/images/devices_list_green.png");
},
"mouseout" : function() {
$("#devices-list-icon").attr("src", "./static/images/devices_list_gray.png");
}
});
// Change the color of the data usage icon when hovering.
$("#data_usage_button").on({
"mouseover" : function() {
$("#data_usage_icon").attr("src", "./static/images/data_usage_green.png");
},
"mouseout" : function() {
$("#data_usage_icon").attr("src", "./static/images/data_usage.png");
}
});
// Check the device connection status.
checkDeviceConnectionStatus();
});
</script>
</body>
</html>