2024-12-29 01:14:13 +01:00
|
|
|
<div>
|
2018-11-15 19:59:24 +01:00
|
|
|
|
2024-10-15 18:46:51 +02:00
|
|
|
<h1 class="section-header">
|
|
|
|
|
{{ 'system.title' | tr }}
|
|
|
|
|
<div style="flex-grow: 1;"></div>
|
|
|
|
|
<a class="btn btn-default" href="/logs.html?id=box" target="_blank">{{ 'main.action.logs' | tr }}</a>
|
|
|
|
|
<button class="btn btn-default" ng-click="$parent.reboot.show()">{{ 'main.action.reboot' | tr }}</button>
|
|
|
|
|
</h1>
|
2020-03-05 18:26:58 -08:00
|
|
|
|
2024-10-15 19:49:17 +02:00
|
|
|
<h3 class="graphs-toolbar">
|
|
|
|
|
{{ 'system.info.title' | tr }}
|
|
|
|
|
</h3>
|
2023-12-04 00:31:38 +01:00
|
|
|
|
2024-10-15 19:49:17 +02:00
|
|
|
<div class="card card-expand">
|
|
|
|
|
<div class="row">
|
|
|
|
|
<div class="col-xs-4 text-muted">{{ 'system.info.platformVersion' | tr }}</div>
|
|
|
|
|
<div class="col-xs-8 text-right">v{{ config.version }} ({{ config.ubuntuVersion }})</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="row">
|
|
|
|
|
<div class="col-xs-4 text-muted">{{ 'system.info.vendor' | tr }}</div>
|
|
|
|
|
<div class="col-xs-8 text-right">{{ info.sysVendor }}</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="row">
|
|
|
|
|
<div class="col-xs-4 text-muted">{{ 'system.info.product' | tr }}</div>
|
|
|
|
|
<div class="col-xs-8 text-right">{{ info.productName }}</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="row">
|
|
|
|
|
<div class="col-xs-4 text-muted">CPU</div>
|
|
|
|
|
<div class="col-xs-8 text-right">{{ cpus.length + ' Core "' + cpus[0].model + '"' }}</div>
|
2023-12-04 00:31:38 +01:00
|
|
|
</div>
|
2024-10-15 19:49:17 +02:00
|
|
|
<div class="row">
|
|
|
|
|
<div class="col-xs-4 text-muted">{{ 'system.info.memory' | tr }}</div>
|
|
|
|
|
<div class="col-xs-8 text-right">{{ memory.memory | prettyDiskSize }} RAM <span ng-show="memory.swap">& {{ memory.swap | prettyDiskSize }} Swap</span></div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="row">
|
|
|
|
|
<div class="col-xs-4 text-muted">{{ 'system.info.uptime' | tr }}</div>
|
|
|
|
|
<div class="col-xs-8 text-right">{{ info.uptimeSecs }}</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="row" ng-show="info.activationTime">
|
|
|
|
|
<div class="col-xs-4 text-muted">{{ 'system.info.activationTime' | tr }}</div>
|
|
|
|
|
<div class="col-xs-8 text-right">{{ info.activationTime | prettyDate }}</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
2023-12-04 00:31:38 +01:00
|
|
|
|
2024-10-15 19:49:17 +02:00
|
|
|
<div style="display: flex; flex-wrap: wrap; gap: 20px;">
|
|
|
|
|
<div style="flex-grow: 1;">
|
2022-10-12 16:00:41 +02:00
|
|
|
<h3 class="graphs-toolbar">
|
2023-12-04 16:59:18 +01:00
|
|
|
{{ 'system.graphs.title' | tr }}
|
2022-10-12 16:00:41 +02:00
|
|
|
<div class="graphs-toolbar-actions">
|
|
|
|
|
<button class="btn btn-sm btn-default" style="margin-right: 5px;" ng-click="graphs.refresh()" ng-disabled="graphs.busy"><i class="fas fa-sync-alt" ng-class="{ 'fa-spin': graphs.busy }"></i></button>
|
|
|
|
|
<div class="dropdown">
|
|
|
|
|
<button class="btn btn-sm btn-primary dropdown-toggle" type="button" data-toggle="dropdown">
|
|
|
|
|
{{ graphs.period | trKeyFromPeriod | tr }}
|
|
|
|
|
<span class="caret"></span>
|
|
|
|
|
</button>
|
|
|
|
|
<ul class="dropdown-menu">
|
|
|
|
|
<li><a href="" ng-click="graphs.setPeriod(6)">{{ 6 | trKeyFromPeriod | tr }}</a></li>
|
|
|
|
|
<li><a href="" ng-click="graphs.setPeriod(12)">{{ 12 | trKeyFromPeriod | tr }}</a></li>
|
|
|
|
|
<li><a href="" ng-click="graphs.setPeriod(24)">{{ 24 | trKeyFromPeriod | tr }}</a></li>
|
|
|
|
|
<li><a href="" ng-click="graphs.setPeriod(24*7)">{{ 24*7 | trKeyFromPeriod | tr }}</a></li>
|
|
|
|
|
<li><a href="" ng-click="graphs.setPeriod(24*30)">{{ 24*30 | trKeyFromPeriod | tr }}</a></li>
|
|
|
|
|
</ul>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</h3>
|
|
|
|
|
|
2024-10-15 19:49:17 +02:00
|
|
|
<div class="card card-expand" style="min-height: 300px;">
|
2022-10-12 16:00:41 +02:00
|
|
|
<label>{{ 'system.cpuUsage.title' | tr }}</label>
|
|
|
|
|
<canvas id="graphsCPUChart" style="width: 100%;"></canvas>
|
2022-10-13 23:22:17 +02:00
|
|
|
<div class="text-muted text-center text-small">{{ 'system.cpuUsage.graphSubtext' | tr:{ threshold: '20 %'} }}</div>
|
2022-10-12 16:00:41 +02:00
|
|
|
|
2022-10-11 21:22:56 +02:00
|
|
|
<br/>
|
2022-10-12 16:00:41 +02:00
|
|
|
|
|
|
|
|
<label>{{ 'system.systemMemory.title' | tr }}</label>
|
|
|
|
|
<canvas id="graphsSystemMemoryChart" style="width: 100%;"></canvas>
|
2022-10-13 23:22:17 +02:00
|
|
|
<div class="text-muted text-center text-small">{{ 'system.systemMemory.graphSubtext' | tr:{ threshold: '1 GiB'} }}</div>
|
2022-10-11 21:22:56 +02:00
|
|
|
</div>
|
2022-10-12 16:00:41 +02:00
|
|
|
</div>
|
2022-10-11 21:22:56 +02:00
|
|
|
|
2024-11-08 16:48:40 +01:00
|
|
|
<div style="flex-grow: 1; flex-basis: 500px;">
|
2022-10-12 16:00:41 +02:00
|
|
|
<h3 class="graphs-toolbar">
|
|
|
|
|
{{ 'system.diskUsage.title' | tr }}
|
2022-10-12 17:05:45 +02:00
|
|
|
<span class="small disks-last-updated" ng-show="!disks.busy && disks.ts">Last updated: {{ disks.ts | prettyDate }}</span>
|
2022-10-12 16:00:41 +02:00
|
|
|
<div class="graphs-toolbar-actions">
|
2022-10-12 17:05:45 +02:00
|
|
|
<button class="btn btn-sm btn-default" style="margin-right: 5px;" ng-click="disks.refresh()" ng-disabled="disks.busy || disks.busyRefresh"><i class="fas fa-sync-alt" ng-class="{ 'fa-spin': disks.busyRefresh }"></i></button>
|
2022-10-12 16:00:41 +02:00
|
|
|
</div>
|
|
|
|
|
</h3>
|
2022-10-11 21:22:56 +02:00
|
|
|
|
2024-10-15 19:49:17 +02:00
|
|
|
<div class="card card-expand">
|
2022-10-12 16:00:41 +02:00
|
|
|
<div class="row" ng-show="disks.busy">
|
2020-05-13 21:18:34 +02:00
|
|
|
<div class="col-md-12 text-center">
|
2022-10-13 02:19:38 +02:00
|
|
|
<h2 style="margin: 60px 0;"><i class="fa fa-circle-notch fa-spin"></i></h2>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="row" ng-show="!disks.busy && !disks.ts">
|
|
|
|
|
<div class="col-md-12 text-center">
|
|
|
|
|
<button class="btn btn-primary" style="margin: 60px 0;" ng-click="disks.refresh()" ng-disabled="disks.busyRefresh"><i class="fas fa-sync-alt fa-spin" ng-show="disks.busyRefresh"></i> Analyze Disk</button>
|
2020-05-13 21:18:34 +02:00
|
|
|
</div>
|
|
|
|
|
</div>
|
2022-10-12 16:27:19 +02:00
|
|
|
<div ng-hide="disks.busy" class="ng-hide">
|
2022-10-12 16:00:41 +02:00
|
|
|
<div class="row" ng-repeat="disk in disks.disks" style="margin-bottom: 20px;">
|
2023-08-01 14:01:57 +02:00
|
|
|
<hr style="margin: 5px 0px;" ng-show="$index !== 0"/>
|
2020-05-13 21:18:34 +02:00
|
|
|
<div class="col-md-12">
|
2022-11-04 12:05:21 +01:00
|
|
|
<div style="display: flex; align-items: baseline; justify-content: space-between;">
|
|
|
|
|
<h3 class="no-wrap" style="font-size: 20px;" ng-bind-html="'system.diskUsage.mountedAt' | tr:{ filesystem: disk.filesystem, mountpoint: disk.mountpoint }"></h3>
|
|
|
|
|
<div class="text-muted" style="white-space:nowrap;" ng-show="disk.available && disk.size" ng-bind-html="'system.diskUsage.usedInfo' | tr:{ used: (disk.used | prettyDiskSize), size: (disk.size | prettyDiskSize) }"></div>
|
|
|
|
|
<div class="text-muted" style="white-space:nowrap;" ng-hide="disk.available && disk.size">{{ 'system.diskUsage.notAvailableYet' | tr }}</div>
|
|
|
|
|
</div>
|
2020-05-13 21:18:34 +02:00
|
|
|
<div class="progress">
|
2022-10-12 16:26:09 +02:00
|
|
|
<div class="progress-bar" ng-repeat="content in disk.contents" style="width: {{ content.usage / disk.size * 100 }}%; background-color: {{ content.color }};" uib-tooltip="{{ content.label + ' ' + (content.usage | prettyDiskSize) }}"></div>
|
2022-11-22 20:17:54 +01:00
|
|
|
<div class="text-center text-muted" style="font-size: 12px; line-height: 20px;">{{ disk.available | prettyDiskSize }}</div>
|
2020-05-13 21:18:34 +02:00
|
|
|
</div>
|
2023-08-01 16:31:01 +05:30
|
|
|
<div class="text-right text-muted" style="margin-top: 10px;" ng-show="disk.speed !== -1">{{ 'system.diskUsage.diskSpeed' | tr:{ speed: disk.speed } }}</div>
|
2022-11-04 22:47:51 +01:00
|
|
|
<p ng-hide="disk.volume">{{ 'system.diskUsage.diskContent' | tr }}:</p>
|
2022-12-08 09:48:04 +01:00
|
|
|
<p ng-show="disk.volume" ng-bind-html="'system.diskUsage.volumeContent' | tr:{ name: disk.volume.name }"></p>
|
2022-10-12 16:47:25 +02:00
|
|
|
<div ng-repeat="content in disk.contents" class="disk-content">
|
|
|
|
|
<span class="color-indicator" style="background-color: {{ content.color }};"> </span>
|
2023-08-01 18:35:11 +05:30
|
|
|
<span ng-show="content.type === 'cloudron-backup-default'">{{ content.path }} (Old Backups)</span>
|
2023-12-14 13:01:59 +01:00
|
|
|
<span ng-show="content.type === 'standard'">{{ content.label }}</span>
|
|
|
|
|
<span ng-show="content.type === 'swap'">{{ content.label }}</span>
|
2022-10-14 12:31:45 +02:00
|
|
|
<span ng-show="content.type === 'app'">
|
2023-12-14 13:04:03 +01:00
|
|
|
<a href="/#/app/{{ content.app.id }}/storage" ng-hide="content.uninstalled">{{ content.label }}</a>
|
2022-10-14 12:31:45 +02:00
|
|
|
<span ng-show="content.uninstalled">{{ 'system.diskUsage.uninstalledApp' | tr }}</span>
|
|
|
|
|
</span>
|
2023-12-14 13:01:59 +01:00
|
|
|
<span ng-show="content.type === 'volume'"><a href="/#/volumes">{{ content.label }}</a></span>
|
2022-10-12 16:47:25 +02:00
|
|
|
<small class="text-muted">{{ content.usage | prettyDiskSize }}</small>
|
|
|
|
|
</div>
|
2020-05-13 21:18:34 +02:00
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
2022-10-12 16:00:41 +02:00
|
|
|
</div>
|
2020-05-13 21:18:34 +02:00
|
|
|
|
Fix SI and Decimal unit usage
SI: For 1000, it is kB, MB, GB
IEC: For 1024, it is KiB, MiB, GiB
JEDEC: For 1024, it is KB, MB (conflicts with SI, of course)
Ultimately, what we decided is for RAM use IEC and for Disk use SI.
This is what docker does and also suggested here -
https://stackoverflow.com/questions/8632269/displaying-file-size-1000b-1kb-or-1024b-1kb
2022-10-13 21:48:03 +02:00
|
|
|
</div>
|