<template>
	<div class="container">
		<metadata title="Admin | Statistics" />
		<div class="columns">
			<div
				class="card column is-10-desktop is-offset-1-desktop is-12-mobile"
			>
				<header class="card-header">
					<p class="card-header-title">
						Average Logs
					</p>
				</header>
				<div class="card-content">
					<div class="content">
						<table class="table">
							<thead>
								<tr>
									<th>Name</th>
									<th>Status</th>
									<th>Stage</th>
									<th>Jobs in queue</th>
									<th>Jobs in progress</th>
									<th>Concurrency</th>
								</tr>
							</thead>
							<tbody>
								<tr
									v-for="module_ in modules"
									:key="module_.name"
								>
									<td>
										<router-link
											:to="'?moduleName=' + module_.name"
											>{{ module_.name }}</router-link
										>
									</td>
									<td>{{ module_.status }}</td>
									<td>{{ module_.stage }}</td>
									<td>{{ module_.jobsInQueue }}</td>
									<td>{{ module_.jobsInProgress }}</td>
									<td>{{ module_.concurrency }}</td>
								</tr>
							</tbody>
						</table>
					</div>
				</div>
			</div>
		</div>
		<br />
		<div class="columns" v-if="module_">
			<div
				class="card column is-10-desktop is-offset-1-desktop is-12-mobile"
			>
				<header class="card-header">
					<p class="card-header-title">
						Average Logs
					</p>
				</header>
				<div class="card-content">
					<div class="content">
						<table class="table">
							<thead>
								<tr>
									<th>Name</th>
									<th>Payload</th>
								</tr>
							</thead>
							<tbody>
								<tr
									v-for="job in module_.runningJobs"
									:key="JSON.stringify(job)"
								>
									<td>{{ job.name }}</td>
									<td>
										{{ JSON.stringify(job.payload) }}
									</td>
								</tr>
							</tbody>
						</table>
					</div>
				</div>
			</div>
		</div>
		<br />
		<div class="columns" v-if="module_">
			<div
				class="card column is-10-desktop is-offset-1-desktop is-12-mobile"
			>
				<header class="card-header">
					<p class="card-header-title">
						Average Logs
					</p>
				</header>
				<div class="card-content">
					<div class="content">
						<table class="table">
							<thead>
								<tr>
									<th>Job name</th>
									<th>Successful</th>
									<th>Failed</th>
									<th>Total</th>
									<th>Average timing</th>
								</tr>
							</thead>
							<tbody>
								<tr
									v-for="(job,
									jobName) in module_.jobStatistics"
									:key="jobName"
								>
									<td>{{ jobName }}</td>
									<td>
										{{ job.successful }}
									</td>
									<td>
										{{ job.failed }}
									</td>
									<td>
										{{ job.total }}
									</td>
									<td>
										{{ job.averageTiming }}
									</td>
								</tr>
							</tbody>
						</table>
					</div>
				</div>
			</div>
		</div>
	</div>
</template>

<script>
import io from "../../io";

export default {
	components: {},
	data() {
		return {
			modules: [],
			module_: null
		};
	},
	mounted() {
		io.getSocket(socket => {
			this.socket = socket;
			if (this.socket.connected) this.init();
			io.onConnect(() => this.init());
		});
	},
	methods: {
		init() {
			this.socket.emit("utils.getModules", data => {
				console.log(data);
				if (data.status === "success") {
					this.modules = data.modules;
				}
			});

			if (this.$route.query.moduleName) {
				this.socket.emit(
					"utils.getModule",
					this.$route.query.moduleName,
					data => {
						console.log(data);
						if (data.status === "success") {
							this.module_ = {
								runningJobs: data.runningJobs,
								jobStatistics: data.jobStatistics
							};
						}
					}
				);
			}
		},
		round(number) {
			return Math.round(number);
		}
	}
};
</script>

//
<style lang="scss" scoped>
@import "styles/global.scss";

.night-mode {
	.table {
		color: #ddd;
		background-color: #222;

		thead tr {
			background: $night-mode-secondary;
			td {
				color: #fff;
			}
		}

		tbody tr:hover {
			background-color: #111 !important;
		}

		tbody tr:nth-child(even) {
			background-color: #444;
		}

		strong {
			color: #ddd;
		}
	}

	.card {
		background-color: $night-mode-secondary;

		p {
			color: #ddd;
		}
	}
}

body {
	font-family: "Roboto", sans-serif;
}

.user-avatar {
	display: block;
	max-width: 50px;
	margin: 0 auto;
}

td {
	vertical-align: middle;
}

.is-primary:focus {
	background-color: $primary-color !important;
}
</style>