[Client] Improve server home widget
This commit is contained in:
		@@ -3,8 +3,10 @@
 | 
			
		||||
	<button onclick={ toggle } title="%i18n:desktop.tags.mk-server-home-widget.toggle%"><i class="fa fa-sort"></i></button>
 | 
			
		||||
	<p class="initializing" if={ initializing }><i class="fa fa-spinner fa-pulse fa-fw"></i>%i18n:common.loading%<mk-ellipsis/></p>
 | 
			
		||||
	<mk-server-home-widget-cpu-and-memory-usage if={ !initializing } show={ view == 0 } connection={ connection }/>
 | 
			
		||||
	<mk-server-home-widget-disk-usage if={ !initializing } show={ view == 1 } connection={ connection }/>
 | 
			
		||||
	<mk-server-home-widget-info if={ !initializing } show={ view == 2 } connection={ connection } meta={ meta }/>
 | 
			
		||||
	<mk-server-home-widget-cpu if={ !initializing } show={ view == 1 } connection={ connection } meta={ meta }/>
 | 
			
		||||
	<mk-server-home-widget-memory if={ !initializing } show={ view == 2 } connection={ connection }/>
 | 
			
		||||
	<mk-server-home-widget-disk if={ !initializing } show={ view == 3 } connection={ connection }/>
 | 
			
		||||
	<mk-server-home-widget-info if={ !initializing } show={ view == 4 } connection={ connection } meta={ meta }/>
 | 
			
		||||
	<style>
 | 
			
		||||
		:scope
 | 
			
		||||
			display block
 | 
			
		||||
@@ -74,7 +76,7 @@
 | 
			
		||||
 | 
			
		||||
		this.toggle = () => {
 | 
			
		||||
			this.view++;
 | 
			
		||||
			if (this.view == 3) this.view = 0;
 | 
			
		||||
			if (this.view == 5) this.view = 0;
 | 
			
		||||
		};
 | 
			
		||||
	</script>
 | 
			
		||||
</mk-server-home-widget>
 | 
			
		||||
@@ -177,47 +179,137 @@
 | 
			
		||||
	</script>
 | 
			
		||||
</mk-server-home-widget-cpu-and-memory-usage>
 | 
			
		||||
 | 
			
		||||
<mk-server-home-widget-disk-usage>
 | 
			
		||||
	<svg viewBox="0 0 1 1" preserveAspectRatio="none">
 | 
			
		||||
		<circle
 | 
			
		||||
			riot-r={ r }
 | 
			
		||||
			cx="50%" cy="50%"
 | 
			
		||||
			fill="none"
 | 
			
		||||
			stroke-width="0.1"
 | 
			
		||||
			stroke="rgba(0, 0, 0, 0.05)"/>
 | 
			
		||||
		<circle
 | 
			
		||||
			riot-r={ r }
 | 
			
		||||
			cx="50%" cy="50%"
 | 
			
		||||
			riot-stroke-dasharray={ Math.PI * (r * 2) }
 | 
			
		||||
			riot-stroke-dashoffset={ strokeDashoffset }
 | 
			
		||||
			fill="none"
 | 
			
		||||
			stroke-width="0.1"
 | 
			
		||||
			riot-stroke={ color }/>
 | 
			
		||||
		<text x="50%" y="50%" dy="0.05" text-anchor="middle">{ p }%</text>
 | 
			
		||||
	</svg>
 | 
			
		||||
<mk-server-home-widget-cpu>
 | 
			
		||||
	<mk-server-home-widget-pie ref="pie"/>
 | 
			
		||||
	<div>
 | 
			
		||||
		<p>Storage</p>
 | 
			
		||||
		<p>Total: { bytesToSize(total) }</p>
 | 
			
		||||
		<p>Available: { bytesToSize(available) }</p>
 | 
			
		||||
		<p>Used: { bytesToSize(used) }</p>
 | 
			
		||||
		<p>CPU</p>
 | 
			
		||||
		<p>{ cores } Cores</p>
 | 
			
		||||
	</div>
 | 
			
		||||
	<style>
 | 
			
		||||
		:scope
 | 
			
		||||
			display block
 | 
			
		||||
 | 
			
		||||
			> svg
 | 
			
		||||
				display block
 | 
			
		||||
			> mk-server-home-widget-pie
 | 
			
		||||
				padding 10px
 | 
			
		||||
				height 100px
 | 
			
		||||
				float left
 | 
			
		||||
 | 
			
		||||
				> circle
 | 
			
		||||
					transform-origin center
 | 
			
		||||
					transform rotate(-90deg)
 | 
			
		||||
			> div
 | 
			
		||||
				float left
 | 
			
		||||
				width calc(100% - 100px)
 | 
			
		||||
				padding 10px 10px 10px 0
 | 
			
		||||
 | 
			
		||||
				> text
 | 
			
		||||
					font-size 0.15px
 | 
			
		||||
					fill rgba(0, 0, 0, 0.6)
 | 
			
		||||
				> p
 | 
			
		||||
					margin 0
 | 
			
		||||
					font-size 12px
 | 
			
		||||
					color #505050
 | 
			
		||||
 | 
			
		||||
					&:first-child
 | 
			
		||||
						font-weight bold
 | 
			
		||||
 | 
			
		||||
			&:after
 | 
			
		||||
				content ""
 | 
			
		||||
				display block
 | 
			
		||||
				clear both
 | 
			
		||||
 | 
			
		||||
	</style>
 | 
			
		||||
	<script>
 | 
			
		||||
		this.cores = this.opts.meta.cpu.cores;
 | 
			
		||||
		this.connection = this.opts.connection;
 | 
			
		||||
 | 
			
		||||
		this.on('mount', () => {
 | 
			
		||||
			this.connection.on('stats', this.onStats);
 | 
			
		||||
		});
 | 
			
		||||
 | 
			
		||||
		this.on('unmount', () => {
 | 
			
		||||
			this.connection.off('stats', this.onStats);
 | 
			
		||||
		});
 | 
			
		||||
 | 
			
		||||
		this.onStats = stats => {
 | 
			
		||||
			this.refs.pie.render(stats.cpu_usage);
 | 
			
		||||
		};
 | 
			
		||||
	</script>
 | 
			
		||||
</mk-server-home-widget-cpu>
 | 
			
		||||
 | 
			
		||||
<mk-server-home-widget-memory>
 | 
			
		||||
	<mk-server-home-widget-pie ref="pie"/>
 | 
			
		||||
	<div>
 | 
			
		||||
		<p>Memory</p>
 | 
			
		||||
		<p>Total: { bytesToSize(total) }</p>
 | 
			
		||||
		<p>Used: { bytesToSize(used) }</p>
 | 
			
		||||
		<p>Free: { bytesToSize(free) }</p>
 | 
			
		||||
	</div>
 | 
			
		||||
	<style>
 | 
			
		||||
		:scope
 | 
			
		||||
			display block
 | 
			
		||||
 | 
			
		||||
			> mk-server-home-widget-pie
 | 
			
		||||
				padding 10px
 | 
			
		||||
				height 100px
 | 
			
		||||
				float left
 | 
			
		||||
 | 
			
		||||
			> div
 | 
			
		||||
				float left
 | 
			
		||||
				width calc(100% - 100px)
 | 
			
		||||
				padding 10px 10px 10px 0
 | 
			
		||||
 | 
			
		||||
				> p
 | 
			
		||||
					margin 0
 | 
			
		||||
					font-size 12px
 | 
			
		||||
					color #505050
 | 
			
		||||
 | 
			
		||||
					&:first-child
 | 
			
		||||
						font-weight bold
 | 
			
		||||
 | 
			
		||||
			&:after
 | 
			
		||||
				content ""
 | 
			
		||||
				display block
 | 
			
		||||
				clear both
 | 
			
		||||
 | 
			
		||||
	</style>
 | 
			
		||||
	<script>
 | 
			
		||||
		import bytesToSize from '../../../common/scripts/bytes-to-size';
 | 
			
		||||
 | 
			
		||||
		this.connection = this.opts.connection;
 | 
			
		||||
		this.bytesToSize = bytesToSize;
 | 
			
		||||
 | 
			
		||||
		this.on('mount', () => {
 | 
			
		||||
			this.connection.on('stats', this.onStats);
 | 
			
		||||
		});
 | 
			
		||||
 | 
			
		||||
		this.on('unmount', () => {
 | 
			
		||||
			this.connection.off('stats', this.onStats);
 | 
			
		||||
		});
 | 
			
		||||
 | 
			
		||||
		this.onStats = stats => {
 | 
			
		||||
			stats.mem.used = stats.mem.total - stats.mem.free;
 | 
			
		||||
			this.refs.pie.render(stats.mem.used / stats.mem.total);
 | 
			
		||||
 | 
			
		||||
			this.update({
 | 
			
		||||
				total: stats.mem.total,
 | 
			
		||||
				used: stats.mem.used,
 | 
			
		||||
				free: stats.mem.free
 | 
			
		||||
			});
 | 
			
		||||
		};
 | 
			
		||||
	</script>
 | 
			
		||||
</mk-server-home-widget-memory>
 | 
			
		||||
 | 
			
		||||
<mk-server-home-widget-disk>
 | 
			
		||||
	<mk-server-home-widget-pie ref="pie"/>
 | 
			
		||||
	<div>
 | 
			
		||||
		<p>Storage</p>
 | 
			
		||||
		<p>Total: { bytesToSize(total) }</p>
 | 
			
		||||
		<p>Available: { bytesToSize(available) }</p>
 | 
			
		||||
		<p>Used: { bytesToSize(used) }</p>
 | 
			
		||||
	</div>
 | 
			
		||||
	<style>
 | 
			
		||||
		:scope
 | 
			
		||||
			display block
 | 
			
		||||
 | 
			
		||||
			> mk-server-home-widget-pie
 | 
			
		||||
				padding 10px
 | 
			
		||||
				height 100px
 | 
			
		||||
				float left
 | 
			
		||||
 | 
			
		||||
			> div
 | 
			
		||||
				float left
 | 
			
		||||
@@ -241,7 +333,6 @@
 | 
			
		||||
	<script>
 | 
			
		||||
		import bytesToSize from '../../../common/scripts/bytes-to-size';
 | 
			
		||||
 | 
			
		||||
		this.r = 0.4;
 | 
			
		||||
		this.connection = this.opts.connection;
 | 
			
		||||
		this.bytesToSize = bytesToSize;
 | 
			
		||||
 | 
			
		||||
@@ -256,21 +347,16 @@
 | 
			
		||||
		this.onStats = stats => {
 | 
			
		||||
			stats.disk.used = stats.disk.total - stats.disk.free;
 | 
			
		||||
 | 
			
		||||
			const color = `hsl(${180 - (stats.disk.used / stats.disk.total * 180)}, 80%, 70%)`;
 | 
			
		||||
			const p = (stats.disk.used / stats.disk.total * 100).toFixed(0);
 | 
			
		||||
			const strokeDashoffset = (1 - (stats.disk.used / stats.disk.total)) * (Math.PI * (this.r * 2));
 | 
			
		||||
			this.refs.pie.render(stats.disk.used / stats.disk.total);
 | 
			
		||||
 | 
			
		||||
			this.update({
 | 
			
		||||
				color,
 | 
			
		||||
				p,
 | 
			
		||||
				strokeDashoffset,
 | 
			
		||||
				total: stats.disk.total,
 | 
			
		||||
				used: stats.disk.used,
 | 
			
		||||
				available: stats.disk.available
 | 
			
		||||
			});
 | 
			
		||||
		};
 | 
			
		||||
	</script>
 | 
			
		||||
</mk-server-home-widget-disk-usage>
 | 
			
		||||
</mk-server-home-widget-disk>
 | 
			
		||||
 | 
			
		||||
<mk-server-home-widget-info>
 | 
			
		||||
	<p>Maintainer: { meta.maintainer }</p>
 | 
			
		||||
@@ -283,3 +369,55 @@
 | 
			
		||||
		this.meta = this.opts.meta;
 | 
			
		||||
	</script>
 | 
			
		||||
</mk-server-home-widget-info>
 | 
			
		||||
 | 
			
		||||
<mk-server-home-widget-pie>
 | 
			
		||||
	<svg viewBox="0 0 1 1" preserveAspectRatio="none">
 | 
			
		||||
		<circle
 | 
			
		||||
			riot-r={ r }
 | 
			
		||||
			cx="50%" cy="50%"
 | 
			
		||||
			fill="none"
 | 
			
		||||
			stroke-width="0.1"
 | 
			
		||||
			stroke="rgba(0, 0, 0, 0.05)"/>
 | 
			
		||||
		<circle
 | 
			
		||||
			riot-r={ r }
 | 
			
		||||
			cx="50%" cy="50%"
 | 
			
		||||
			riot-stroke-dasharray={ Math.PI * (r * 2) }
 | 
			
		||||
			riot-stroke-dashoffset={ strokeDashoffset }
 | 
			
		||||
			fill="none"
 | 
			
		||||
			stroke-width="0.1"
 | 
			
		||||
			riot-stroke={ color }/>
 | 
			
		||||
		<text x="50%" y="50%" dy="0.05" text-anchor="middle">{ (p * 100).toFixed(0) }%</text>
 | 
			
		||||
	</svg>
 | 
			
		||||
	<style>
 | 
			
		||||
		:scope
 | 
			
		||||
			display block
 | 
			
		||||
 | 
			
		||||
			> svg
 | 
			
		||||
				display block
 | 
			
		||||
				height 100%
 | 
			
		||||
 | 
			
		||||
				> circle
 | 
			
		||||
					transform-origin center
 | 
			
		||||
					transform rotate(-90deg)
 | 
			
		||||
					transition stroke-dashoffset 0.5s ease
 | 
			
		||||
 | 
			
		||||
				> text
 | 
			
		||||
					font-size 0.15px
 | 
			
		||||
					fill rgba(0, 0, 0, 0.6)
 | 
			
		||||
 | 
			
		||||
	</style>
 | 
			
		||||
	<script>
 | 
			
		||||
		this.r = 0.4;
 | 
			
		||||
 | 
			
		||||
		this.render = p => {
 | 
			
		||||
			const color = `hsl(${180 - (p * 180)}, 80%, 70%)`;
 | 
			
		||||
			const strokeDashoffset = (1 - p) * (Math.PI * (this.r * 2));
 | 
			
		||||
 | 
			
		||||
			this.update({
 | 
			
		||||
				p,
 | 
			
		||||
				color,
 | 
			
		||||
				strokeDashoffset
 | 
			
		||||
			});
 | 
			
		||||
		};
 | 
			
		||||
	</script>
 | 
			
		||||
</mk-server-home-widget-pie>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user