mirror of
https://github.com/portainer/portainer.git
synced 2025-08-05 05:45:22 +02:00
chore(project): add prettier for code format (#3645)
* chore(project): install prettier and lint-staged * chore(project): apply prettier to html too * chore(project): git ignore eslintcache * chore(project): add a comment about format script * chore(prettier): update printWidth * chore(prettier): remove useTabs option * chore(prettier): add HTML validation * refactor(prettier): fix closing tags * feat(prettier): define angular parser for html templates * style(prettier): run prettier on codebase Co-authored-by: Anthony Lapenna <lapenna.anthony@gmail.com>
This commit is contained in:
parent
6663073be1
commit
cf5056d9c0
714 changed files with 31228 additions and 28305 deletions
|
@ -28,7 +28,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td>Total memory</td>
|
||||
<td>{{ totalMemory|humansize: 2 }}</td>
|
||||
<td>{{ totalMemory | humansize: 2 }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
|
@ -47,12 +47,14 @@
|
|||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
<nodes-datatable
|
||||
title-text="Nodes" title-icon="fa-hdd"
|
||||
dataset="nodes" table-key="nodes"
|
||||
order-by="Hostname"
|
||||
show-ip-address-column="applicationState.endpoint.apiVersion >= 1.25"
|
||||
access-to-node-details="!applicationState.application.authentication || isAdmin"
|
||||
refresh-callback="getNodes"
|
||||
title-text="Nodes"
|
||||
title-icon="fa-hdd"
|
||||
dataset="nodes"
|
||||
table-key="nodes"
|
||||
order-by="Hostname"
|
||||
show-ip-address-column="applicationState.endpoint.apiVersion >= 1.25"
|
||||
access-to-node-details="!applicationState.application.authentication || isAdmin"
|
||||
refresh-callback="getNodes"
|
||||
></nodes-datatable>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,101 +1,110 @@
|
|||
angular.module('portainer.docker')
|
||||
.controller('SwarmController', ['$q', '$scope', 'SystemService', 'NodeService', 'Notifications', 'StateManager', 'Authentication',
|
||||
function ($q, $scope, SystemService, NodeService, Notifications, StateManager, Authentication) {
|
||||
$scope.info = {};
|
||||
$scope.docker = {};
|
||||
$scope.swarm = {};
|
||||
$scope.totalCPU = 0;
|
||||
$scope.totalMemory = 0;
|
||||
angular.module('portainer.docker').controller('SwarmController', [
|
||||
'$q',
|
||||
'$scope',
|
||||
'SystemService',
|
||||
'NodeService',
|
||||
'Notifications',
|
||||
'StateManager',
|
||||
'Authentication',
|
||||
function ($q, $scope, SystemService, NodeService, Notifications, StateManager, Authentication) {
|
||||
$scope.info = {};
|
||||
$scope.docker = {};
|
||||
$scope.swarm = {};
|
||||
$scope.totalCPU = 0;
|
||||
$scope.totalMemory = 0;
|
||||
|
||||
function extractSwarmInfo(info) {
|
||||
// Swarm info is available in SystemStatus object
|
||||
var systemStatus = info.SystemStatus;
|
||||
// Swarm strategy
|
||||
$scope.swarm[systemStatus[1][0]] = systemStatus[1][1];
|
||||
// Swarm filters
|
||||
$scope.swarm[systemStatus[2][0]] = systemStatus[2][1];
|
||||
// Swarm node count
|
||||
var nodes = systemStatus[0][1] === 'primary' ? systemStatus[3][1] : systemStatus[4][1];
|
||||
var node_count = parseInt(nodes, 10);
|
||||
$scope.swarm[systemStatus[3][0]] = node_count;
|
||||
function extractSwarmInfo(info) {
|
||||
// Swarm info is available in SystemStatus object
|
||||
var systemStatus = info.SystemStatus;
|
||||
// Swarm strategy
|
||||
$scope.swarm[systemStatus[1][0]] = systemStatus[1][1];
|
||||
// Swarm filters
|
||||
$scope.swarm[systemStatus[2][0]] = systemStatus[2][1];
|
||||
// Swarm node count
|
||||
var nodes = systemStatus[0][1] === 'primary' ? systemStatus[3][1] : systemStatus[4][1];
|
||||
var node_count = parseInt(nodes, 10);
|
||||
$scope.swarm[systemStatus[3][0]] = node_count;
|
||||
|
||||
$scope.swarm.Status = [];
|
||||
extractNodesInfo(systemStatus, node_count);
|
||||
}
|
||||
|
||||
function extractNodesInfo(info, node_count) {
|
||||
// First information for node1 available at element #4 of SystemStatus if connected to a primary
|
||||
// If connected to a replica, information for node1 is available at element #5
|
||||
// The next 10 elements are information related to the node
|
||||
var node_offset = info[0][1] === 'primary' ? 4 : 5;
|
||||
for (let i = 0; i < node_count; i++) {
|
||||
extractNodeInfo(info, node_offset);
|
||||
node_offset += 9;
|
||||
}
|
||||
}
|
||||
|
||||
function extractNodeInfo(info, offset) {
|
||||
var node = {};
|
||||
node.name = info[offset][0];
|
||||
node.ip = info[offset][1];
|
||||
node.Id = info[offset + 1][1];
|
||||
node.status = info[offset + 2][1];
|
||||
node.containers = info[offset + 3][1];
|
||||
node.cpu = info[offset + 4][1].split('/')[1];
|
||||
node.memory = info[offset + 5][1].split('/')[1];
|
||||
node.labels = info[offset + 6][1];
|
||||
node.version = info[offset + 8][1];
|
||||
$scope.swarm.Status.push(node);
|
||||
}
|
||||
|
||||
function processTotalCPUAndMemory(nodes) {
|
||||
var CPU = 0, memory = 0;
|
||||
angular.forEach(nodes, function(node) {
|
||||
CPU += node.CPUs;
|
||||
memory += node.Memory;
|
||||
});
|
||||
$scope.totalCPU = CPU / 1000000000;
|
||||
$scope.totalMemory = memory;
|
||||
}
|
||||
|
||||
$scope.getNodes = getNodes;
|
||||
function getNodes() {
|
||||
var provider = $scope.applicationState.endpoint.mode.provider;
|
||||
if (provider === 'DOCKER_SWARM_MODE') {
|
||||
NodeService.nodes().then(function(data) {
|
||||
var nodes = data;
|
||||
processTotalCPUAndMemory(nodes);
|
||||
$scope.nodes = nodes;
|
||||
})
|
||||
.catch(function error(err) {
|
||||
Notifications.error('Failure', err, 'Unable to retrieve cluster details');
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function initView() {
|
||||
if (StateManager.getState().application.authentication) {
|
||||
$scope.isAdmin = Authentication.isAdmin();
|
||||
$scope.swarm.Status = [];
|
||||
extractNodesInfo(systemStatus, node_count);
|
||||
}
|
||||
|
||||
var provider = $scope.applicationState.endpoint.mode.provider;
|
||||
$q.all({
|
||||
version: SystemService.version(),
|
||||
info: SystemService.info()
|
||||
})
|
||||
.then(function success(data) {
|
||||
$scope.docker = data.version;
|
||||
$scope.info = data.info;
|
||||
if (provider === 'DOCKER_SWARM_MODE') {
|
||||
getNodes();
|
||||
} else {
|
||||
extractSwarmInfo(data.info);
|
||||
function extractNodesInfo(info, node_count) {
|
||||
// First information for node1 available at element #4 of SystemStatus if connected to a primary
|
||||
// If connected to a replica, information for node1 is available at element #5
|
||||
// The next 10 elements are information related to the node
|
||||
var node_offset = info[0][1] === 'primary' ? 4 : 5;
|
||||
for (let i = 0; i < node_count; i++) {
|
||||
extractNodeInfo(info, node_offset);
|
||||
node_offset += 9;
|
||||
}
|
||||
})
|
||||
.catch(function error(err) {
|
||||
Notifications.error('Failure', err, 'Unable to retrieve cluster details');
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
initView();
|
||||
}]);
|
||||
function extractNodeInfo(info, offset) {
|
||||
var node = {};
|
||||
node.name = info[offset][0];
|
||||
node.ip = info[offset][1];
|
||||
node.Id = info[offset + 1][1];
|
||||
node.status = info[offset + 2][1];
|
||||
node.containers = info[offset + 3][1];
|
||||
node.cpu = info[offset + 4][1].split('/')[1];
|
||||
node.memory = info[offset + 5][1].split('/')[1];
|
||||
node.labels = info[offset + 6][1];
|
||||
node.version = info[offset + 8][1];
|
||||
$scope.swarm.Status.push(node);
|
||||
}
|
||||
|
||||
function processTotalCPUAndMemory(nodes) {
|
||||
var CPU = 0,
|
||||
memory = 0;
|
||||
angular.forEach(nodes, function (node) {
|
||||
CPU += node.CPUs;
|
||||
memory += node.Memory;
|
||||
});
|
||||
$scope.totalCPU = CPU / 1000000000;
|
||||
$scope.totalMemory = memory;
|
||||
}
|
||||
|
||||
$scope.getNodes = getNodes;
|
||||
function getNodes() {
|
||||
var provider = $scope.applicationState.endpoint.mode.provider;
|
||||
if (provider === 'DOCKER_SWARM_MODE') {
|
||||
NodeService.nodes()
|
||||
.then(function (data) {
|
||||
var nodes = data;
|
||||
processTotalCPUAndMemory(nodes);
|
||||
$scope.nodes = nodes;
|
||||
})
|
||||
.catch(function error(err) {
|
||||
Notifications.error('Failure', err, 'Unable to retrieve cluster details');
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function initView() {
|
||||
if (StateManager.getState().application.authentication) {
|
||||
$scope.isAdmin = Authentication.isAdmin();
|
||||
}
|
||||
|
||||
var provider = $scope.applicationState.endpoint.mode.provider;
|
||||
$q.all({
|
||||
version: SystemService.version(),
|
||||
info: SystemService.info(),
|
||||
})
|
||||
.then(function success(data) {
|
||||
$scope.docker = data.version;
|
||||
$scope.info = data.info;
|
||||
if (provider === 'DOCKER_SWARM_MODE') {
|
||||
getNodes();
|
||||
} else {
|
||||
extractSwarmInfo(data.info);
|
||||
}
|
||||
})
|
||||
.catch(function error(err) {
|
||||
Notifications.error('Failure', err, 'Unable to retrieve cluster details');
|
||||
});
|
||||
}
|
||||
|
||||
initView();
|
||||
},
|
||||
]);
|
||||
|
|
|
@ -1,152 +1,156 @@
|
|||
angular.module('portainer.docker')
|
||||
.controller('SwarmVisualizerController', ['$q', '$scope', '$document', '$interval', 'NodeService', 'ServiceService', 'TaskService', 'Notifications', 'LocalStorage',
|
||||
function ($q, $scope, $document, $interval, NodeService, ServiceService, TaskService, Notifications, LocalStorage) {
|
||||
angular.module('portainer.docker').controller('SwarmVisualizerController', [
|
||||
'$q',
|
||||
'$scope',
|
||||
'$document',
|
||||
'$interval',
|
||||
'NodeService',
|
||||
'ServiceService',
|
||||
'TaskService',
|
||||
'Notifications',
|
||||
'LocalStorage',
|
||||
function ($q, $scope, $document, $interval, NodeService, ServiceService, TaskService, Notifications, LocalStorage) {
|
||||
$scope.state = {
|
||||
ShowInformationPanel: true,
|
||||
DisplayOnlyRunningTasks: false,
|
||||
DisplayNodeLabels: false,
|
||||
refreshRate: '5',
|
||||
};
|
||||
|
||||
$scope.state = {
|
||||
ShowInformationPanel: true,
|
||||
DisplayOnlyRunningTasks: false,
|
||||
DisplayNodeLabels: false,
|
||||
refreshRate: '5'
|
||||
};
|
||||
$scope.$on('$destroy', function () {
|
||||
stopRepeater();
|
||||
});
|
||||
|
||||
$scope.$on('$destroy', function() {
|
||||
stopRepeater();
|
||||
});
|
||||
|
||||
$scope.changeShowInformationPanel = function(value) {
|
||||
$scope.changeShowInformationPanel = function (value) {
|
||||
$scope.state.ShowInformationPanel = value;
|
||||
LocalStorage.storeSwarmVisualizerSettings('show_info_panel', value);
|
||||
};
|
||||
};
|
||||
|
||||
$scope.changeDisplayOnlyRunningTasks = function() {
|
||||
$scope.changeDisplayOnlyRunningTasks = function () {
|
||||
var value = $scope.state.DisplayOnlyRunningTasks;
|
||||
LocalStorage.storeSwarmVisualizerSettings('display_only_running_tasks', value);
|
||||
};
|
||||
};
|
||||
|
||||
$scope.changeDisplayNodeLabels = function() {
|
||||
var value = $scope.state.DisplayNodeLabels;
|
||||
LocalStorage.storeSwarmVisualizerSettings('display_node_labels', value);
|
||||
};
|
||||
$scope.changeDisplayNodeLabels = function () {
|
||||
var value = $scope.state.DisplayNodeLabels;
|
||||
LocalStorage.storeSwarmVisualizerSettings('display_node_labels', value);
|
||||
};
|
||||
|
||||
$scope.changeUpdateRepeater = function() {
|
||||
stopRepeater();
|
||||
setUpdateRepeater();
|
||||
$('#refreshRateChange').show();
|
||||
$('#refreshRateChange').fadeOut(1500);
|
||||
LocalStorage.storeSwarmVisualizerSettings('refresh_rate', $scope.state.refreshRate);
|
||||
};
|
||||
$scope.changeUpdateRepeater = function () {
|
||||
stopRepeater();
|
||||
setUpdateRepeater();
|
||||
$('#refreshRateChange').show();
|
||||
$('#refreshRateChange').fadeOut(1500);
|
||||
LocalStorage.storeSwarmVisualizerSettings('refresh_rate', $scope.state.refreshRate);
|
||||
};
|
||||
|
||||
function stopRepeater() {
|
||||
var repeater = $scope.repeater;
|
||||
if (angular.isDefined(repeater)) {
|
||||
$interval.cancel(repeater);
|
||||
repeater = null;
|
||||
function stopRepeater() {
|
||||
var repeater = $scope.repeater;
|
||||
if (angular.isDefined(repeater)) {
|
||||
$interval.cancel(repeater);
|
||||
repeater = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function setUpdateRepeater() {
|
||||
var refreshRate = $scope.state.refreshRate;
|
||||
$scope.repeater = $interval(function() {
|
||||
function setUpdateRepeater() {
|
||||
var refreshRate = $scope.state.refreshRate;
|
||||
$scope.repeater = $interval(function () {
|
||||
$q.all({
|
||||
nodes: NodeService.nodes(),
|
||||
services: ServiceService.services(),
|
||||
tasks: TaskService.tasks(),
|
||||
})
|
||||
.then(function success(data) {
|
||||
var nodes = data.nodes;
|
||||
$scope.nodes = nodes;
|
||||
var services = data.services;
|
||||
$scope.services = services;
|
||||
var tasks = data.tasks;
|
||||
$scope.tasks = tasks;
|
||||
prepareVisualizerData(nodes, services, tasks);
|
||||
})
|
||||
.catch(function error(err) {
|
||||
stopRepeater();
|
||||
Notifications.error('Failure', err, 'Unable to retrieve cluster information');
|
||||
});
|
||||
}, refreshRate * 1000);
|
||||
}
|
||||
|
||||
function assignServiceInfo(services, tasks) {
|
||||
for (var i = 0; i < services.length; i++) {
|
||||
var service = services[i];
|
||||
|
||||
for (var j = 0; j < tasks.length; j++) {
|
||||
var task = tasks[j];
|
||||
|
||||
if (task.ServiceId === service.Id) {
|
||||
task.ServiceName = service.Name;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function assignTasksToNode(nodes, tasks) {
|
||||
for (var i = 0; i < nodes.length; i++) {
|
||||
var node = nodes[i];
|
||||
node.Tasks = [];
|
||||
|
||||
for (var j = 0; j < tasks.length; j++) {
|
||||
var task = tasks[j];
|
||||
|
||||
if (task.NodeId === node.Id) {
|
||||
node.Tasks.push(task);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function prepareVisualizerData(nodes, services, tasks) {
|
||||
var visualizerData = {};
|
||||
|
||||
assignServiceInfo(services, tasks);
|
||||
assignTasksToNode(nodes, tasks);
|
||||
|
||||
visualizerData.nodes = nodes;
|
||||
$scope.visualizerData = visualizerData;
|
||||
}
|
||||
|
||||
function loadState() {
|
||||
var showInfoPanel = LocalStorage.getSwarmVisualizerSettings('show_info_panel');
|
||||
if (showInfoPanel !== undefined && showInfoPanel !== null) $scope.state.ShowInformationPanel = showInfoPanel;
|
||||
|
||||
var displayOnlyRunningTasks = LocalStorage.getSwarmVisualizerSettings('display_only_running_tasks');
|
||||
if (displayOnlyRunningTasks !== undefined && displayOnlyRunningTasks !== null) $scope.state.DisplayOnlyRunningTasks = displayOnlyRunningTasks;
|
||||
|
||||
var displayNodeLabels = LocalStorage.getSwarmVisualizerSettings('display_node_labels');
|
||||
if (displayNodeLabels !== undefined && displayNodeLabels !== null) $scope.state.DisplayNodeLabels = displayNodeLabels;
|
||||
|
||||
var refreshRate = LocalStorage.getSwarmVisualizerSettings('refresh_rate');
|
||||
if (refreshRate !== undefined && refreshRate !== null) $scope.state.refreshRate = refreshRate;
|
||||
}
|
||||
|
||||
function initView() {
|
||||
$q.all({
|
||||
nodes: NodeService.nodes(),
|
||||
services: ServiceService.services(),
|
||||
tasks: TaskService.tasks()
|
||||
tasks: TaskService.tasks(),
|
||||
})
|
||||
.then(function success(data) {
|
||||
var nodes = data.nodes;
|
||||
$scope.nodes = nodes;
|
||||
var services = data.services;
|
||||
$scope.services = services;
|
||||
var tasks = data.tasks;
|
||||
$scope.tasks = tasks;
|
||||
prepareVisualizerData(nodes, services, tasks);
|
||||
})
|
||||
.catch(function error(err) {
|
||||
stopRepeater();
|
||||
Notifications.error('Failure', err, 'Unable to retrieve cluster information');
|
||||
});
|
||||
}, refreshRate * 1000);
|
||||
}
|
||||
.then(function success(data) {
|
||||
var nodes = data.nodes;
|
||||
$scope.nodes = nodes;
|
||||
var services = data.services;
|
||||
$scope.services = services;
|
||||
var tasks = data.tasks;
|
||||
$scope.tasks = tasks;
|
||||
prepareVisualizerData(nodes, services, tasks);
|
||||
setUpdateRepeater();
|
||||
})
|
||||
.catch(function error(err) {
|
||||
Notifications.error('Failure', err, 'Unable to initialize cluster visualizer');
|
||||
});
|
||||
|
||||
function assignServiceInfo(services, tasks) {
|
||||
for (var i = 0; i < services.length; i++) {
|
||||
var service = services[i];
|
||||
|
||||
for (var j = 0; j < tasks.length; j++) {
|
||||
var task = tasks[j];
|
||||
|
||||
if (task.ServiceId === service.Id) {
|
||||
task.ServiceName = service.Name;
|
||||
}
|
||||
}
|
||||
loadState();
|
||||
}
|
||||
}
|
||||
|
||||
function assignTasksToNode(nodes, tasks) {
|
||||
for (var i = 0; i < nodes.length; i++) {
|
||||
var node = nodes[i];
|
||||
node.Tasks = [];
|
||||
|
||||
for (var j = 0; j < tasks.length; j++) {
|
||||
var task = tasks[j];
|
||||
|
||||
if (task.NodeId === node.Id) {
|
||||
node.Tasks.push(task);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function prepareVisualizerData(nodes, services, tasks) {
|
||||
var visualizerData = {};
|
||||
|
||||
assignServiceInfo(services, tasks);
|
||||
assignTasksToNode(nodes, tasks);
|
||||
|
||||
visualizerData.nodes = nodes;
|
||||
$scope.visualizerData = visualizerData;
|
||||
}
|
||||
|
||||
function loadState() {
|
||||
var showInfoPanel = LocalStorage.getSwarmVisualizerSettings('show_info_panel');
|
||||
if (showInfoPanel !== undefined && showInfoPanel !== null)
|
||||
$scope.state.ShowInformationPanel = showInfoPanel;
|
||||
|
||||
var displayOnlyRunningTasks = LocalStorage.getSwarmVisualizerSettings('display_only_running_tasks');
|
||||
if (displayOnlyRunningTasks !== undefined && displayOnlyRunningTasks !== null)
|
||||
$scope.state.DisplayOnlyRunningTasks = displayOnlyRunningTasks;
|
||||
|
||||
var displayNodeLabels = LocalStorage.getSwarmVisualizerSettings('display_node_labels');
|
||||
if (displayNodeLabels !== undefined && displayNodeLabels !== null)
|
||||
$scope.state.DisplayNodeLabels = displayNodeLabels;
|
||||
|
||||
var refreshRate = LocalStorage.getSwarmVisualizerSettings('refresh_rate');
|
||||
if (refreshRate !== undefined && refreshRate !== null)
|
||||
$scope.state.refreshRate = refreshRate;
|
||||
}
|
||||
|
||||
function initView() {
|
||||
$q.all({
|
||||
nodes: NodeService.nodes(),
|
||||
services: ServiceService.services(),
|
||||
tasks: TaskService.tasks()
|
||||
})
|
||||
.then(function success(data) {
|
||||
var nodes = data.nodes;
|
||||
$scope.nodes = nodes;
|
||||
var services = data.services;
|
||||
$scope.services = services;
|
||||
var tasks = data.tasks;
|
||||
$scope.tasks = tasks;
|
||||
prepareVisualizerData(nodes, services, tasks);
|
||||
setUpdateRepeater();
|
||||
})
|
||||
.catch(function error(err) {
|
||||
Notifications.error('Failure', err, 'Unable to initialize cluster visualizer');
|
||||
});
|
||||
|
||||
loadState();
|
||||
}
|
||||
|
||||
initView();
|
||||
}]);
|
||||
initView();
|
||||
},
|
||||
]);
|
||||
|
|
|
@ -4,9 +4,7 @@
|
|||
<i class="fa fa-sync" aria-hidden="true"></i>
|
||||
</a>
|
||||
</rd-header-title>
|
||||
<rd-header-content>
|
||||
<a ui-sref="docker.swarm">Swarm</a> > <a ui-sref="docker.swarm.visualizer">Cluster visualizer</a>
|
||||
</rd-header-content>
|
||||
<rd-header-content> <a ui-sref="docker.swarm">Swarm</a> > <a ui-sref="docker.swarm.visualizer">Cluster visualizer</a> </rd-header-content>
|
||||
</rd-header>
|
||||
|
||||
<div class="row">
|
||||
|
@ -45,16 +43,14 @@
|
|||
Only display running tasks
|
||||
</label>
|
||||
<label class="switch" style="margin-left: 20px;">
|
||||
<input type="checkbox" ng-model="state.DisplayOnlyRunningTasks" ng-change="changeDisplayOnlyRunningTasks()"><i></i>
|
||||
<input type="checkbox" ng-model="state.DisplayOnlyRunningTasks" ng-change="changeDisplayOnlyRunningTasks()" /><i></i>
|
||||
</label>
|
||||
</div>
|
||||
<div class="col-sm-12">
|
||||
<label class="control-label text-left">
|
||||
Display node labels
|
||||
</label>
|
||||
<label class="switch" style="margin-left: 20px;">
|
||||
<input type="checkbox" ng-model="state.DisplayNodeLabels" ng-change="changeDisplayNodeLabels()"><i></i>
|
||||
</label>
|
||||
<label class="switch" style="margin-left: 20px;"> <input type="checkbox" ng-model="state.DisplayNodeLabels" ng-change="changeDisplayNodeLabels()" /><i></i> </label>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
@ -101,22 +97,26 @@
|
|||
</div>
|
||||
<div>{{ node.Role }}</div>
|
||||
<div>CPU: {{ node.CPUs / 1000000000 }}</div>
|
||||
<div>Memory: {{ node.Memory|humansize: 2 }}</div>
|
||||
<div><span class="label label-{{ node.Status | nodestatusbadge }}">{{ node.Status }}</span></div>
|
||||
<div>Memory: {{ node.Memory | humansize: 2 }}</div>
|
||||
<div
|
||||
><span class="label label-{{ node.Status | nodestatusbadge }}">{{ node.Status }}</span></div
|
||||
>
|
||||
<div class="node_labels" ng-if="node.Labels.length > 0 && state.DisplayNodeLabels">
|
||||
<div>Labels</div>
|
||||
<div class="node_label" ng-repeat="label in node.Labels">
|
||||
<span class="label_key">
|
||||
{{ label.key }}
|
||||
</span>
|
||||
<span class="label_value" ng-if="label.value">
|
||||
= {{ label.value }}
|
||||
</span>
|
||||
<span class="label_value" ng-if="label.value"> = {{ label.value }} </span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tasks">
|
||||
<div class="task task_{{ task.Status.State | visualizerTask }}" style="border: 2px solid {{ task.ServiceId | visualizerTaskBorderColor }}" ng-repeat="task in node.Tasks | orderBy: 'ServiceName' | filter: (state.DisplayOnlyRunningTasks || '') && { Status: { State: 'running' } }">
|
||||
<div
|
||||
class="task task_{{ task.Status.State | visualizerTask }}"
|
||||
style="border: 2px solid {{ task.ServiceId | visualizerTaskBorderColor }}"
|
||||
ng-repeat="task in node.Tasks | orderBy: 'ServiceName' | filter: (state.DisplayOnlyRunningTasks || '') && { Status: { State: 'running' } }"
|
||||
>
|
||||
<div class="service_name">{{ task.ServiceName }}</div>
|
||||
<div>Image: {{ task.Spec.ContainerSpec.Image | hideshasum }}</div>
|
||||
<div>Status: {{ task.Status.State }}</div>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue