clean up
This commit is contained in:
		
							parent
							
								
									aa0eaf37b6
								
							
						
					
					
						commit
						459151c1f2
					
				
					 1 changed files with 0 additions and 439 deletions
				
			
		|  | @ -1,439 +0,0 @@ | |||
| <template> | ||||
| <div class="_debobigegoItem"> | ||||
| 	<div class="_debobigegoLabel"><i class="fas fa-microchip"></i> {{ $ts.cpuAndMemory }}</div> | ||||
| 	<div class="_debobigegoPanel xhexznfu"> | ||||
| 		<div> | ||||
| 			<canvas :ref="cpumem"></canvas> | ||||
| 		</div> | ||||
| 		<div v-if="serverInfo"> | ||||
| 			<div class="_table"> | ||||
| 				<div class="_row"> | ||||
| 					<div class="_cell"><div class="_label">MEM total</div>{{ bytes(serverInfo.mem.total) }}</div> | ||||
| 					<div class="_cell"><div class="_label">MEM used</div>{{ bytes(memUsage) }} ({{ (memUsage / serverInfo.mem.total * 100).toFixed(0) }}%)</div> | ||||
| 					<div class="_cell"><div class="_label">MEM free</div>{{ bytes(serverInfo.mem.total - memUsage) }} ({{ ((serverInfo.mem.total - memUsage) / serverInfo.mem.total * 100).toFixed(0) }}%)</div> | ||||
| 				</div> | ||||
| 			</div> | ||||
| 		</div> | ||||
| 	</div> | ||||
| </div> | ||||
| <div class="_debobigegoItem"> | ||||
| 	<div class="_debobigegoLabel"><i class="fas fa-hdd"></i> {{ $ts.disk }}</div> | ||||
| 	<div class="_debobigegoPanel xhexznfu"> | ||||
| 		<div> | ||||
| 			<canvas :ref="disk"></canvas> | ||||
| 		</div> | ||||
| 		<div v-if="serverInfo"> | ||||
| 			<div class="_table"> | ||||
| 				<div class="_row"> | ||||
| 					<div class="_cell"><div class="_label">Disk total</div>{{ bytes(serverInfo.fs.total) }}</div> | ||||
| 					<div class="_cell"><div class="_label">Disk used</div>{{ bytes(serverInfo.fs.used) }} ({{ (serverInfo.fs.used / serverInfo.fs.total * 100).toFixed(0) }}%)</div> | ||||
| 					<div class="_cell"><div class="_label">Disk free</div>{{ bytes(serverInfo.fs.total - serverInfo.fs.used) }} ({{ ((serverInfo.fs.total - serverInfo.fs.used) / serverInfo.fs.total * 100).toFixed(0) }}%)</div> | ||||
| 				</div> | ||||
| 			</div> | ||||
| 		</div> | ||||
| 	</div> | ||||
| </div> | ||||
| <div class="_debobigegoItem"> | ||||
| 	<div class="_debobigegoLabel"><i class="fas fa-exchange-alt"></i> {{ $ts.network }}</div> | ||||
| 	<div class="_debobigegoPanel xhexznfu"> | ||||
| 		<div> | ||||
| 			<canvas :ref="net"></canvas> | ||||
| 		</div> | ||||
| 		<div v-if="serverInfo"> | ||||
| 			<div class="_table"> | ||||
| 				<div class="_row"> | ||||
| 					<div class="_cell"><div class="_label">Interface</div>{{ serverInfo.net.interface }}</div> | ||||
| 				</div> | ||||
| 			</div> | ||||
| 		</div> | ||||
| 	</div> | ||||
| </div> | ||||
| </template> | ||||
| 
 | ||||
| <script lang="ts"> | ||||
| import { defineComponent, markRaw } from 'vue'; | ||||
| import { Chart } from 'chart.js'; | ||||
| import MkwFederation from '../../widgets/federation.vue'; | ||||
| import MkButton from '@/components/MkButton.vue'; | ||||
| import MkSelect from '@/components/form/select.vue'; | ||||
| import MkInput from '@/components/form/input.vue'; | ||||
| import MkContainer from '@/components/MkContainer.vue'; | ||||
| import MkFolder from '@/components/MkFolder.vue'; | ||||
| import { version, url } from '@/config'; | ||||
| import bytes from '@/filters/bytes'; | ||||
| import number from '@/filters/number'; | ||||
| import * as os from '@/os'; | ||||
| import { stream } from '@/stream'; | ||||
| import { alpha } from '@/scripts/color'; | ||||
| import { initChart } from '@/scripts/init-chart'; | ||||
| 
 | ||||
| initChart(); | ||||
| 
 | ||||
| export default defineComponent({ | ||||
| 	components: { | ||||
| 		MkButton, | ||||
| 		MkSelect, | ||||
| 		MkInput, | ||||
| 		MkContainer, | ||||
| 		MkFolder, | ||||
| 		MkwFederation, | ||||
| 	}, | ||||
| 
 | ||||
| 	data() { | ||||
| 		return { | ||||
| 			version, | ||||
| 			url, | ||||
| 			stats: null, | ||||
| 			serverInfo: null, | ||||
| 			connection: null, | ||||
| 			queueConnection: markRaw(stream.useChannel('queueStats')), | ||||
| 			memUsage: 0, | ||||
| 			chartCpuMem: null, | ||||
| 			chartNet: null, | ||||
| 			jobs: [], | ||||
| 			logs: [], | ||||
| 			logLevel: 'all', | ||||
| 			logDomain: '', | ||||
| 			modLogs: [], | ||||
| 			dbInfo: null, | ||||
| 			overviewHeight: '1fr', | ||||
| 			queueHeight: '1fr', | ||||
| 			paused: false, | ||||
| 		}; | ||||
| 	}, | ||||
| 
 | ||||
| 	computed: { | ||||
| 		gridColor() { | ||||
| 			// TODO: var(--panel)の色が暗いか明るいかで判定する | ||||
| 			return this.$store.state.darkMode ? 'rgba(255, 255, 255, 0.1)' : 'rgba(0, 0, 0, 0.1)'; | ||||
| 		}, | ||||
| 	}, | ||||
| 
 | ||||
| 	mounted() { | ||||
| 		this.fetchJobs(); | ||||
| 
 | ||||
| 		Chart.defaults.color = getComputedStyle(document.documentElement).getPropertyValue('--fg'); | ||||
| 
 | ||||
| 		os.api('admin/server-info', {}).then(res => { | ||||
| 			this.serverInfo = res; | ||||
| 
 | ||||
| 			this.connection = markRaw(stream.useChannel('serverStats')); | ||||
| 			this.connection.on('stats', this.onStats); | ||||
| 			this.connection.on('statsLog', this.onStatsLog); | ||||
| 			this.connection.send('requestLog', { | ||||
| 				id: Math.random().toString().substr(2, 8), | ||||
| 				length: 150, | ||||
| 			}); | ||||
| 
 | ||||
| 			this.$nextTick(() => { | ||||
| 				this.queueConnection.send('requestLog', { | ||||
| 					id: Math.random().toString().substr(2, 8), | ||||
| 					length: 200, | ||||
| 				}); | ||||
| 			}); | ||||
| 		}); | ||||
| 	}, | ||||
| 
 | ||||
| 	beforeUnmount() { | ||||
| 		if (this.connection) { | ||||
| 			this.connection.off('stats', this.onStats); | ||||
| 			this.connection.off('statsLog', this.onStatsLog); | ||||
| 			this.connection.dispose(); | ||||
| 		} | ||||
| 		this.queueConnection.dispose(); | ||||
| 	}, | ||||
| 
 | ||||
| 	methods: { | ||||
| 		cpumem(el) { | ||||
| 			if (this.chartCpuMem != null) return; | ||||
| 			this.chartCpuMem = markRaw(new Chart(el, { | ||||
| 				type: 'line', | ||||
| 				data: { | ||||
| 					labels: [], | ||||
| 					datasets: [{ | ||||
| 						label: 'CPU', | ||||
| 						pointRadius: 0, | ||||
| 						tension: 0, | ||||
| 						borderWidth: 2, | ||||
| 						borderColor: '#86b300', | ||||
| 						backgroundColor: alpha('#86b300', 0.1), | ||||
| 						data: [], | ||||
| 					}, { | ||||
| 						label: 'MEM (active)', | ||||
| 						pointRadius: 0, | ||||
| 						tension: 0, | ||||
| 						borderWidth: 2, | ||||
| 						borderColor: '#935dbf', | ||||
| 						backgroundColor: alpha('#935dbf', 0.02), | ||||
| 						data: [], | ||||
| 					}, { | ||||
| 						label: 'MEM (used)', | ||||
| 						pointRadius: 0, | ||||
| 						tension: 0, | ||||
| 						borderWidth: 2, | ||||
| 						borderColor: '#935dbf', | ||||
| 						borderDash: [5, 5], | ||||
| 						fill: false, | ||||
| 						data: [], | ||||
| 					}], | ||||
| 				}, | ||||
| 				options: { | ||||
| 					aspectRatio: 3, | ||||
| 					layout: { | ||||
| 						padding: { | ||||
| 							left: 16, | ||||
| 							right: 16, | ||||
| 							top: 16, | ||||
| 							bottom: 0, | ||||
| 						}, | ||||
| 					}, | ||||
| 					legend: { | ||||
| 						position: 'bottom', | ||||
| 						labels: { | ||||
| 							boxWidth: 16, | ||||
| 						}, | ||||
| 					}, | ||||
| 					scales: { | ||||
| 						x: { | ||||
| 							gridLines: { | ||||
| 								display: false, | ||||
| 								color: this.gridColor, | ||||
| 								zeroLineColor: this.gridColor, | ||||
| 							}, | ||||
| 							ticks: { | ||||
| 								display: false, | ||||
| 							}, | ||||
| 						}, | ||||
| 						y: { | ||||
| 							position: 'right', | ||||
| 							gridLines: { | ||||
| 								display: true, | ||||
| 								color: this.gridColor, | ||||
| 								zeroLineColor: this.gridColor, | ||||
| 							}, | ||||
| 							ticks: { | ||||
| 								display: false, | ||||
| 								max: 100, | ||||
| 							}, | ||||
| 						}, | ||||
| 					}, | ||||
| 					tooltips: { | ||||
| 						intersect: false, | ||||
| 						mode: 'index', | ||||
| 					}, | ||||
| 				}, | ||||
| 			})); | ||||
| 		}, | ||||
| 
 | ||||
| 		net(el) { | ||||
| 			if (this.chartNet != null) return; | ||||
| 			this.chartNet = markRaw(new Chart(el, { | ||||
| 				type: 'line', | ||||
| 				data: { | ||||
| 					labels: [], | ||||
| 					datasets: [{ | ||||
| 						label: 'In', | ||||
| 						pointRadius: 0, | ||||
| 						tension: 0, | ||||
| 						borderWidth: 2, | ||||
| 						borderColor: '#94a029', | ||||
| 						backgroundColor: alpha('#94a029', 0.1), | ||||
| 						data: [], | ||||
| 					}, { | ||||
| 						label: 'Out', | ||||
| 						pointRadius: 0, | ||||
| 						tension: 0, | ||||
| 						borderWidth: 2, | ||||
| 						borderColor: '#ff9156', | ||||
| 						backgroundColor: alpha('#ff9156', 0.1), | ||||
| 						data: [], | ||||
| 					}], | ||||
| 				}, | ||||
| 				options: { | ||||
| 					aspectRatio: 3, | ||||
| 					layout: { | ||||
| 						padding: { | ||||
| 							left: 16, | ||||
| 							right: 16, | ||||
| 							top: 16, | ||||
| 							bottom: 0, | ||||
| 						}, | ||||
| 					}, | ||||
| 					legend: { | ||||
| 						position: 'bottom', | ||||
| 						labels: { | ||||
| 							boxWidth: 16, | ||||
| 						}, | ||||
| 					}, | ||||
| 					scales: { | ||||
| 						x: { | ||||
| 							gridLines: { | ||||
| 								display: false, | ||||
| 								color: this.gridColor, | ||||
| 								zeroLineColor: this.gridColor, | ||||
| 							}, | ||||
| 							ticks: { | ||||
| 								display: false, | ||||
| 							}, | ||||
| 						}, | ||||
| 						y: { | ||||
| 							position: 'right', | ||||
| 							gridLines: { | ||||
| 								display: true, | ||||
| 								color: this.gridColor, | ||||
| 								zeroLineColor: this.gridColor, | ||||
| 							}, | ||||
| 							ticks: { | ||||
| 								display: false, | ||||
| 							}, | ||||
| 						}, | ||||
| 					}, | ||||
| 					tooltips: { | ||||
| 						intersect: false, | ||||
| 						mode: 'index', | ||||
| 					}, | ||||
| 				}, | ||||
| 			})); | ||||
| 		}, | ||||
| 
 | ||||
| 		disk(el) { | ||||
| 			if (this.chartDisk != null) return; | ||||
| 			this.chartDisk = markRaw(new Chart(el, { | ||||
| 				type: 'line', | ||||
| 				data: { | ||||
| 					labels: [], | ||||
| 					datasets: [{ | ||||
| 						label: 'Read', | ||||
| 						pointRadius: 0, | ||||
| 						tension: 0, | ||||
| 						borderWidth: 2, | ||||
| 						borderColor: '#94a029', | ||||
| 						backgroundColor: alpha('#94a029', 0.1), | ||||
| 						data: [], | ||||
| 					}, { | ||||
| 						label: 'Write', | ||||
| 						pointRadius: 0, | ||||
| 						tension: 0, | ||||
| 						borderWidth: 2, | ||||
| 						borderColor: '#ff9156', | ||||
| 						backgroundColor: alpha('#ff9156', 0.1), | ||||
| 						data: [], | ||||
| 					}], | ||||
| 				}, | ||||
| 				options: { | ||||
| 					aspectRatio: 3, | ||||
| 					layout: { | ||||
| 						padding: { | ||||
| 							left: 16, | ||||
| 							right: 16, | ||||
| 							top: 16, | ||||
| 							bottom: 0, | ||||
| 						}, | ||||
| 					}, | ||||
| 					legend: { | ||||
| 						position: 'bottom', | ||||
| 						labels: { | ||||
| 							boxWidth: 16, | ||||
| 						}, | ||||
| 					}, | ||||
| 					scales: { | ||||
| 						x: { | ||||
| 							gridLines: { | ||||
| 								display: false, | ||||
| 								color: this.gridColor, | ||||
| 								zeroLineColor: this.gridColor, | ||||
| 							}, | ||||
| 							ticks: { | ||||
| 								display: false, | ||||
| 							}, | ||||
| 						}, | ||||
| 						y: { | ||||
| 							position: 'right', | ||||
| 							gridLines: { | ||||
| 								display: true, | ||||
| 								color: this.gridColor, | ||||
| 								zeroLineColor: this.gridColor, | ||||
| 							}, | ||||
| 							ticks: { | ||||
| 								display: false, | ||||
| 							}, | ||||
| 						}, | ||||
| 					}, | ||||
| 					tooltips: { | ||||
| 						intersect: false, | ||||
| 						mode: 'index', | ||||
| 					}, | ||||
| 				}, | ||||
| 			})); | ||||
| 		}, | ||||
| 
 | ||||
| 		fetchJobs() { | ||||
| 			os.api('admin/queue/deliver-delayed', {}).then(jobs => { | ||||
| 				this.jobs = jobs; | ||||
| 			}); | ||||
| 		}, | ||||
| 
 | ||||
| 		onStats(stats) { | ||||
| 			if (this.paused) return; | ||||
| 
 | ||||
| 			const cpu = (stats.cpu * 100).toFixed(0); | ||||
| 			const memActive = (stats.mem.active / this.serverInfo.mem.total * 100).toFixed(0); | ||||
| 			const memUsed = (stats.mem.used / this.serverInfo.mem.total * 100).toFixed(0); | ||||
| 			this.memUsage = stats.mem.active; | ||||
| 
 | ||||
| 			this.chartCpuMem.data.labels.push(''); | ||||
| 			this.chartCpuMem.data.datasets[0].data.push(cpu); | ||||
| 			this.chartCpuMem.data.datasets[1].data.push(memActive); | ||||
| 			this.chartCpuMem.data.datasets[2].data.push(memUsed); | ||||
| 			this.chartNet.data.labels.push(''); | ||||
| 			this.chartNet.data.datasets[0].data.push(stats.net.rx); | ||||
| 			this.chartNet.data.datasets[1].data.push(stats.net.tx); | ||||
| 			this.chartDisk.data.labels.push(''); | ||||
| 			this.chartDisk.data.datasets[0].data.push(stats.fs.r); | ||||
| 			this.chartDisk.data.datasets[1].data.push(stats.fs.w); | ||||
| 			if (this.chartCpuMem.data.datasets[0].data.length > 150) { | ||||
| 				this.chartCpuMem.data.labels.shift(); | ||||
| 				this.chartCpuMem.data.datasets[0].data.shift(); | ||||
| 				this.chartCpuMem.data.datasets[1].data.shift(); | ||||
| 				this.chartCpuMem.data.datasets[2].data.shift(); | ||||
| 				this.chartNet.data.labels.shift(); | ||||
| 				this.chartNet.data.datasets[0].data.shift(); | ||||
| 				this.chartNet.data.datasets[1].data.shift(); | ||||
| 				this.chartDisk.data.labels.shift(); | ||||
| 				this.chartDisk.data.datasets[0].data.shift(); | ||||
| 				this.chartDisk.data.datasets[1].data.shift(); | ||||
| 			} | ||||
| 			this.chartCpuMem.update(); | ||||
| 			this.chartNet.update(); | ||||
| 			this.chartDisk.update(); | ||||
| 		}, | ||||
| 
 | ||||
| 		onStatsLog(statsLog) { | ||||
| 			for (const stats of [...statsLog].reverse()) { | ||||
| 				this.onStats(stats); | ||||
| 			} | ||||
| 		}, | ||||
| 
 | ||||
| 		bytes, | ||||
| 
 | ||||
| 		number, | ||||
| 
 | ||||
| 		pause() { | ||||
| 			this.paused = true; | ||||
| 		}, | ||||
| 
 | ||||
| 		resume() { | ||||
| 			this.paused = false; | ||||
| 		}, | ||||
| 	}, | ||||
| }); | ||||
| </script> | ||||
| 
 | ||||
| <style lang="scss" scoped> | ||||
| .xhexznfu { | ||||
| 	> div:nth-child(2) { | ||||
| 		padding: 16px; | ||||
| 		border-top: solid 0.5px var(--divider); | ||||
| 	} | ||||
| } | ||||
| </style> | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue