mirror of https://github.com/portainer/portainer
feat(ui): add more info about nodes in Swarm view (#92)
* feat(ui): add more info about nodes in Swarm view * style(ui): update title for section in swarm viewpull/94/head
parent
95b16919a6
commit
06c2635e82
|
@ -8,43 +8,7 @@
|
||||||
</rd-header>
|
</rd-header>
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-lg-3 col-md-6 col-xs-12">
|
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
|
||||||
<rd-widget>
|
|
||||||
<rd-widget-body>
|
|
||||||
<div class="widget-icon pull-left">
|
|
||||||
<i class="fa fa-code"></i>
|
|
||||||
</div>
|
|
||||||
<div class="title">{{ docker.Version }}</div>
|
|
||||||
<div class="comment">Swarm version</div>
|
|
||||||
</rd-widget-body>
|
|
||||||
</rd-widget>
|
|
||||||
</div>
|
|
||||||
<div class="col-lg-3 col-md-6 col-xs-12">
|
|
||||||
<rd-widget>
|
|
||||||
<rd-widget-body>
|
|
||||||
<div class="widget-icon pull-left">
|
|
||||||
<i class="fa fa-code"></i>
|
|
||||||
</div>
|
|
||||||
<div class="title">{{ docker.ApiVersion }}</div>
|
|
||||||
<div class="comment">API version</div>
|
|
||||||
</rd-widget-body>
|
|
||||||
</rd-widget>
|
|
||||||
</div>
|
|
||||||
<div class="col-lg-3 col-md-6 col-xs-12">
|
|
||||||
<rd-widget>
|
|
||||||
<rd-widget-body>
|
|
||||||
<div class="widget-icon pull-left">
|
|
||||||
<i class="fa fa-code"></i>
|
|
||||||
</div>
|
|
||||||
<div class="title">{{ docker.GoVersion }}</div>
|
|
||||||
<div class="comment">Go version</div>
|
|
||||||
</rd-widget-body>
|
|
||||||
</rd-widget>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-lg-6">
|
|
||||||
<rd-widget>
|
<rd-widget>
|
||||||
<rd-widget-header icon="fa-object-group" title="Cluster status"></rd-widget-header>
|
<rd-widget-header icon="fa-object-group" title="Cluster status"></rd-widget-header>
|
||||||
<rd-widget-body classes="no-padding">
|
<rd-widget-body classes="no-padding">
|
||||||
|
@ -58,34 +22,48 @@
|
||||||
<td>Images</td>
|
<td>Images</td>
|
||||||
<td>{{ info.Images }}</td>
|
<td>{{ info.Images }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Swarm version</td>
|
||||||
|
<td>{{ docker.Version|swarmversion }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Docker API version</td>
|
||||||
|
<td>{{ docker.ApiVersion }}</td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Strategy</td>
|
<td>Strategy</td>
|
||||||
<td>{{ swarm.Strategy }}</td>
|
<td>{{ swarm.Strategy }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>CPUs</td>
|
<td>Total CPU</td>
|
||||||
<td>{{ info.NCPU }}</td>
|
<td>{{ info.NCPU }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Total Memory</td>
|
<td>Total memory</td>
|
||||||
<td>{{ info.MemTotal|humansize }}</td>
|
<td>{{ info.MemTotal|humansize }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Operating System</td>
|
<td>Operating system</td>
|
||||||
<td>{{ info.OperatingSystem }}</td>
|
<td>{{ info.OperatingSystem }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Kernel Version</td>
|
<td>Kernel version</td>
|
||||||
<td>{{ info.KernelVersion }}</td>
|
<td>{{ info.KernelVersion }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Go version</td>
|
||||||
|
<td>{{ docker.GoVersion }}</td>
|
||||||
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</rd-widget-body>
|
</rd-widget-body>
|
||||||
</rd-widget>
|
</rd-widget>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-6">
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
|
||||||
<rd-widget>
|
<rd-widget>
|
||||||
<rd-widget-header icon="fa-hdd-o" title="Nodes status"></rd-widget-header>
|
<rd-widget-header icon="fa-hdd-o" title="Node status"></rd-widget-header>
|
||||||
<rd-widget-body classes="no-padding">
|
<rd-widget-body classes="no-padding">
|
||||||
<table class="table table-striped">
|
<table class="table table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
|
@ -97,6 +75,20 @@
|
||||||
<span ng-show="sortType == 'Name' && sortReverse" class="glyphicon glyphicon-chevron-up"></span>
|
<span ng-show="sortType == 'Name' && sortReverse" class="glyphicon glyphicon-chevron-up"></span>
|
||||||
</a>
|
</a>
|
||||||
</th>
|
</th>
|
||||||
|
<th>
|
||||||
|
<a ui-sref="swarm" ng-click="order('cpu')">
|
||||||
|
CPU
|
||||||
|
<span ng-show="sortType == 'cpu' && !sortReverse" class="glyphicon glyphicon-chevron-down"></span>
|
||||||
|
<span ng-show="sortType == 'cpu' && sortReverse" class="glyphicon glyphicon-chevron-up"></span>
|
||||||
|
</a>
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
<a ui-sref="swarm" ng-click="order('memory')">
|
||||||
|
Memory
|
||||||
|
<span ng-show="sortType == 'memory' && !sortReverse" class="glyphicon glyphicon-chevron-down"></span>
|
||||||
|
<span ng-show="sortType == 'memory' && sortReverse" class="glyphicon glyphicon-chevron-up"></span>
|
||||||
|
</a>
|
||||||
|
</th>
|
||||||
<th>
|
<th>
|
||||||
<a ui-sref="swarm" ng-click="order('IP')">
|
<a ui-sref="swarm" ng-click="order('IP')">
|
||||||
IP
|
IP
|
||||||
|
@ -123,6 +115,8 @@
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr ng-repeat="node in (state.filteredNodes = (swarm.Status | filter:state.filter | orderBy:sortType:sortReverse))">
|
<tr ng-repeat="node in (state.filteredNodes = (swarm.Status | filter:state.filter | orderBy:sortType:sortReverse))">
|
||||||
<td>{{ node.name }}</td>
|
<td>{{ node.name }}</td>
|
||||||
|
<td>{{ node.cpu }}</td>
|
||||||
|
<td>{{ node.memory }}</td>
|
||||||
<td>{{ node.ip }}</td>
|
<td>{{ node.ip }}</td>
|
||||||
<td>{{ node.version }}</td>
|
<td>{{ node.version }}</td>
|
||||||
<td><span class="label label-{{ node.status|nodestatusbadge }}">{{ node.status }}</span></td>
|
<td><span class="label label-{{ node.status|nodestatusbadge }}">{{ node.status }}</span></td>
|
||||||
|
|
|
@ -53,8 +53,8 @@ angular.module('swarm', [])
|
||||||
node.id = info[offset + 1][1];
|
node.id = info[offset + 1][1];
|
||||||
node.status = info[offset + 2][1];
|
node.status = info[offset + 2][1];
|
||||||
node.containers = info[offset + 3][1];
|
node.containers = info[offset + 3][1];
|
||||||
node.cpu = info[offset + 4][1];
|
node.cpu = info[offset + 4][1].split('/')[1];
|
||||||
node.memory = info[offset + 5][1];
|
node.memory = info[offset + 5][1].split('/')[1];
|
||||||
node.labels = info[offset + 6][1];
|
node.labels = info[offset + 6][1];
|
||||||
node.version = info[offset + 8][1];
|
node.version = info[offset + 8][1];
|
||||||
$scope.swarm.Status.push(node);
|
$scope.swarm.Status.push(node);
|
||||||
|
|
|
@ -21,18 +21,6 @@ function ContainerViewModel(data) {
|
||||||
this.Checked = false;
|
this.Checked = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
function EventViewModel(data) {
|
|
||||||
// Type, Action, Actor unavailable in Docker < 1.10
|
|
||||||
this.Time = data.time;
|
|
||||||
if (data.Type) {
|
|
||||||
this.Type = data.Type;
|
|
||||||
this.Details = createEventDetails(data);
|
|
||||||
} else {
|
|
||||||
this.Type = data.status;
|
|
||||||
this.Details = data.from;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function createEventDetails(event) {
|
function createEventDetails(event) {
|
||||||
var eventAttr = event.Actor.Attributes;
|
var eventAttr = event.Actor.Attributes;
|
||||||
var details = '';
|
var details = '';
|
||||||
|
@ -126,3 +114,15 @@ function createEventDetails(event) {
|
||||||
}
|
}
|
||||||
return details;
|
return details;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function EventViewModel(data) {
|
||||||
|
// Type, Action, Actor unavailable in Docker < 1.10
|
||||||
|
this.Time = data.time;
|
||||||
|
if (data.Type) {
|
||||||
|
this.Type = data.Type;
|
||||||
|
this.Details = createEventDetails(data);
|
||||||
|
} else {
|
||||||
|
this.Type = data.status;
|
||||||
|
this.Details = data.from;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue