mirror of https://github.com/statping/statping
				
				
				
			vue js beginning
							parent
							
								
									72f1889a94
								
							
						
					
					
						commit
						23b230f61f
					
				| 
						 | 
					@ -15,7 +15,6 @@ html/scss/.sass-cache
 | 
				
			||||||
dart-sass
 | 
					dart-sass
 | 
				
			||||||
.sass-cache
 | 
					.sass-cache
 | 
				
			||||||
public
 | 
					public
 | 
				
			||||||
assets
 | 
					 | 
				
			||||||
*.log
 | 
					*.log
 | 
				
			||||||
.env
 | 
					.env
 | 
				
			||||||
logs
 | 
					logs
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,21 @@
 | 
				
			||||||
 | 
					.DS_Store
 | 
				
			||||||
 | 
					node_modules
 | 
				
			||||||
 | 
					/dist
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# local env files
 | 
				
			||||||
 | 
					.env.local
 | 
				
			||||||
 | 
					.env.*.local
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Log files
 | 
				
			||||||
 | 
					npm-debug.log*
 | 
				
			||||||
 | 
					yarn-debug.log*
 | 
				
			||||||
 | 
					yarn-error.log*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Editor directories and files
 | 
				
			||||||
 | 
					.idea
 | 
				
			||||||
 | 
					.vscode
 | 
				
			||||||
 | 
					*.suo
 | 
				
			||||||
 | 
					*.ntvs*
 | 
				
			||||||
 | 
					*.njsproj
 | 
				
			||||||
 | 
					*.sln
 | 
				
			||||||
 | 
					*.sw?
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,5 @@
 | 
				
			||||||
 | 
					module.exports = {
 | 
				
			||||||
 | 
					  presets: [
 | 
				
			||||||
 | 
					    '@vue/cli-plugin-babel/preset'
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,45 @@
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  "name": "statping",
 | 
				
			||||||
 | 
					  "version": "0.1.0",
 | 
				
			||||||
 | 
					  "private": true,
 | 
				
			||||||
 | 
					  "scripts": {
 | 
				
			||||||
 | 
					    "serve": "vue-cli-service serve",
 | 
				
			||||||
 | 
					    "build": "vue-cli-service build",
 | 
				
			||||||
 | 
					    "lint": "vue-cli-service lint"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "dependencies": {
 | 
				
			||||||
 | 
					    "apexcharts": "^3.15.0",
 | 
				
			||||||
 | 
					    "axios": "^0.19.1",
 | 
				
			||||||
 | 
					    "core-js": "^3.4.4",
 | 
				
			||||||
 | 
					    "vue": "^2.6.10",
 | 
				
			||||||
 | 
					    "vue-apexcharts": "^1.5.2",
 | 
				
			||||||
 | 
					    "vue-router": "^3.1.3"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "devDependencies": {
 | 
				
			||||||
 | 
					    "@vue/cli-plugin-babel": "^4.1.0",
 | 
				
			||||||
 | 
					    "@vue/cli-plugin-eslint": "^4.1.0",
 | 
				
			||||||
 | 
					    "@vue/cli-service": "^4.1.0",
 | 
				
			||||||
 | 
					    "babel-eslint": "^10.0.3",
 | 
				
			||||||
 | 
					    "eslint": "^5.16.0",
 | 
				
			||||||
 | 
					    "eslint-plugin-vue": "^5.0.0",
 | 
				
			||||||
 | 
					    "vue-template-compiler": "^2.6.10"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "eslintConfig": {
 | 
				
			||||||
 | 
					    "root": true,
 | 
				
			||||||
 | 
					    "env": {
 | 
				
			||||||
 | 
					      "node": true
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "extends": [
 | 
				
			||||||
 | 
					      "plugin:vue/essential",
 | 
				
			||||||
 | 
					      "eslint:recommended"
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    "rules": {},
 | 
				
			||||||
 | 
					    "parserOptions": {
 | 
				
			||||||
 | 
					      "parser": "babel-eslint"
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "browserslist": [
 | 
				
			||||||
 | 
					    "> 1%",
 | 
				
			||||||
 | 
					    "last 2 versions"
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 2.9 KiB  | 
| 
						 | 
					@ -0,0 +1,17 @@
 | 
				
			||||||
 | 
					<!DOCTYPE html>
 | 
				
			||||||
 | 
					<html lang="en">
 | 
				
			||||||
 | 
					  <head>
 | 
				
			||||||
 | 
					    <meta charset="utf-8">
 | 
				
			||||||
 | 
					    <meta http-equiv="X-UA-Compatible" content="IE=edge">
 | 
				
			||||||
 | 
					    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no, maximum-scale=1.0, user-scalable=0">
 | 
				
			||||||
 | 
					    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
 | 
				
			||||||
 | 
					    <title>Statping</title>
 | 
				
			||||||
 | 
					  </head>
 | 
				
			||||||
 | 
					  <body>
 | 
				
			||||||
 | 
					    <noscript>
 | 
				
			||||||
 | 
					      <strong>We're sorry but Statping doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
 | 
				
			||||||
 | 
					    </noscript>
 | 
				
			||||||
 | 
					    <div id="app"></div>
 | 
				
			||||||
 | 
					    <!-- built files will be auto injected -->
 | 
				
			||||||
 | 
					  </body>
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,17 @@
 | 
				
			||||||
 | 
					<template>
 | 
				
			||||||
 | 
					  <div id="app">
 | 
				
			||||||
 | 
					    <router-view></router-view>
 | 
				
			||||||
 | 
					      <Footer/>
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					import Footer from "./components/Footer";
 | 
				
			||||||
 | 
					export default {
 | 
				
			||||||
 | 
					  name: 'app',
 | 
				
			||||||
 | 
					  components: {Footer},
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<style>
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,651 @@
 | 
				
			||||||
 | 
					/*    Index Page      */
 | 
				
			||||||
 | 
					/*    Status Container   */
 | 
				
			||||||
 | 
					/*    Button Colors      */
 | 
				
			||||||
 | 
					/*   Footer Settings   */
 | 
				
			||||||
 | 
					/*   Global Settings */
 | 
				
			||||||
 | 
					/*   Mobile Settings   */
 | 
				
			||||||
 | 
					/*   Mobile Service Container   */
 | 
				
			||||||
 | 
					HTML, BODY {
 | 
				
			||||||
 | 
					  background-color: #fcfcfc;
 | 
				
			||||||
 | 
					  padding-bottom: 10px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.container {
 | 
				
			||||||
 | 
					  padding-top: 20px;
 | 
				
			||||||
 | 
					  padding-bottom: 25px;
 | 
				
			||||||
 | 
					  max-width: 860px;
 | 
				
			||||||
 | 
					  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.header-title {
 | 
				
			||||||
 | 
					  color: #464646;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.header-desc {
 | 
				
			||||||
 | 
					  color: #939393;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.btn {
 | 
				
			||||||
 | 
					  border-radius: 0.2rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.online_list .badge {
 | 
				
			||||||
 | 
					  margin-top: 0.2rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.navbar {
 | 
				
			||||||
 | 
					  margin-bottom: 30px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.btn-sm {
 | 
				
			||||||
 | 
					  line-height: 1.3;
 | 
				
			||||||
 | 
					  font-size: 0.75rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.view_service_btn {
 | 
				
			||||||
 | 
					  position: absolute;
 | 
				
			||||||
 | 
					  bottom: -40px;
 | 
				
			||||||
 | 
					  right: 40px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.service_lower_info {
 | 
				
			||||||
 | 
					  position: absolute;
 | 
				
			||||||
 | 
					  bottom: -40px;
 | 
				
			||||||
 | 
					  left: 40px;
 | 
				
			||||||
 | 
					  color: #d1ffca;
 | 
				
			||||||
 | 
					  font-size: 0.85rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.lg_number {
 | 
				
			||||||
 | 
					  font-size: 2.3rem;
 | 
				
			||||||
 | 
					  font-weight: bold;
 | 
				
			||||||
 | 
					  display: block;
 | 
				
			||||||
 | 
					  color: #4f4f4f;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.stats_area {
 | 
				
			||||||
 | 
					  text-align: center;
 | 
				
			||||||
 | 
					  color: #a5a5a5;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.lower_canvas {
 | 
				
			||||||
 | 
					  height: 3.4rem;
 | 
				
			||||||
 | 
					  width: 100%;
 | 
				
			||||||
 | 
					  background-color: #48d338;
 | 
				
			||||||
 | 
					  padding: 15px 10px;
 | 
				
			||||||
 | 
					  margin-left: 0px !important;
 | 
				
			||||||
 | 
					  margin-right: 0px !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.lower_canvas SPAN {
 | 
				
			||||||
 | 
					  font-size: 1rem;
 | 
				
			||||||
 | 
					  color: #fff;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.footer {
 | 
				
			||||||
 | 
					  text-decoration: none;
 | 
				
			||||||
 | 
					  margin-top: 20px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.footer A {
 | 
				
			||||||
 | 
					  color: #8d8d8d;
 | 
				
			||||||
 | 
					  text-decoration: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.footer A:HOVER {
 | 
				
			||||||
 | 
					  color: #6d6d6d;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.badge {
 | 
				
			||||||
 | 
					  color: white;
 | 
				
			||||||
 | 
					  border-radius: 0.2rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.btn-group {
 | 
				
			||||||
 | 
					  height: 25px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.btn-group A {
 | 
				
			||||||
 | 
					  padding: 0.1rem 0.75rem;
 | 
				
			||||||
 | 
					  font-size: 0.8rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.card-body .badge {
 | 
				
			||||||
 | 
					  color: #fff;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.nav-pills .nav-link {
 | 
				
			||||||
 | 
					  border-radius: 0.2rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.form-control {
 | 
				
			||||||
 | 
					  border-radius: 0.2rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.card {
 | 
				
			||||||
 | 
					  background-color: #ffffff;
 | 
				
			||||||
 | 
					  border: 1px solid rgba(0, 0, 0, 0.125);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.card-body {
 | 
				
			||||||
 | 
					  overflow: hidden;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.card-body H4 A {
 | 
				
			||||||
 | 
					  color: #444444;
 | 
				
			||||||
 | 
					  text-decoration: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.chart-container {
 | 
				
			||||||
 | 
					  position: relative;
 | 
				
			||||||
 | 
					  height: 190px;
 | 
				
			||||||
 | 
					  width: 100%;
 | 
				
			||||||
 | 
					  overflow: hidden;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.service-chart-container {
 | 
				
			||||||
 | 
					  position: relative;
 | 
				
			||||||
 | 
					  height: 400px;
 | 
				
			||||||
 | 
					  width: 100%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.service-chart-heatmap {
 | 
				
			||||||
 | 
					  position: relative;
 | 
				
			||||||
 | 
					  height: 300px;
 | 
				
			||||||
 | 
					  width: 100%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.inputTags-field {
 | 
				
			||||||
 | 
					  border: 0;
 | 
				
			||||||
 | 
					  background-color: transparent;
 | 
				
			||||||
 | 
					  padding-top: 0.13rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					input.inputTags-field:focus {
 | 
				
			||||||
 | 
					  outline-width: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.inputTags-list {
 | 
				
			||||||
 | 
					  display: block;
 | 
				
			||||||
 | 
					  width: 100%;
 | 
				
			||||||
 | 
					  min-height: calc(2.25rem + 2px);
 | 
				
			||||||
 | 
					  padding: 0.2rem 0.35rem;
 | 
				
			||||||
 | 
					  font-size: 1rem;
 | 
				
			||||||
 | 
					  font-weight: 400;
 | 
				
			||||||
 | 
					  line-height: 1.5;
 | 
				
			||||||
 | 
					  color: #495057;
 | 
				
			||||||
 | 
					  background-color: #fff;
 | 
				
			||||||
 | 
					  background-clip: padding-box;
 | 
				
			||||||
 | 
					  border: 1px solid #ced4da;
 | 
				
			||||||
 | 
					  border-radius: 0.25rem;
 | 
				
			||||||
 | 
					  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.inputTags-item {
 | 
				
			||||||
 | 
					  background-color: #3aba39;
 | 
				
			||||||
 | 
					  margin-right: 5px;
 | 
				
			||||||
 | 
					  padding: 5px 8px;
 | 
				
			||||||
 | 
					  font-size: 10pt;
 | 
				
			||||||
 | 
					  color: white;
 | 
				
			||||||
 | 
					  border-radius: 4px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.inputTags-item .close-item {
 | 
				
			||||||
 | 
					  margin-left: 6px;
 | 
				
			||||||
 | 
					  font-size: 13pt;
 | 
				
			||||||
 | 
					  font-weight: bold;
 | 
				
			||||||
 | 
					  cursor: pointer;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.btn-primary {
 | 
				
			||||||
 | 
					  background-color: #3e9bff;
 | 
				
			||||||
 | 
					  border-color: #006fe6;
 | 
				
			||||||
 | 
					  color: white;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.btn-primary.dyn-dark {
 | 
				
			||||||
 | 
					  background-color: #32a825 !important;
 | 
				
			||||||
 | 
					  border-color: #2c9320 !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.btn-primary.dyn-light {
 | 
				
			||||||
 | 
					  background-color: #75de69 !important;
 | 
				
			||||||
 | 
					  border-color: #88e37e !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.btn-success {
 | 
				
			||||||
 | 
					  background-color: #47d337;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.btn-success.dyn-dark {
 | 
				
			||||||
 | 
					  background-color: #32a825 !important;
 | 
				
			||||||
 | 
					  border-color: #2c9320 !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.btn-success.dyn-light {
 | 
				
			||||||
 | 
					  background-color: #75de69 !important;
 | 
				
			||||||
 | 
					  border-color: #88e37e !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.btn-danger {
 | 
				
			||||||
 | 
					  background-color: #dd3545;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.btn-danger.dyn-dark {
 | 
				
			||||||
 | 
					  background-color: #b61f2d !important;
 | 
				
			||||||
 | 
					  border-color: #a01b28 !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.btn-danger.dyn-light {
 | 
				
			||||||
 | 
					  background-color: #e66975 !important;
 | 
				
			||||||
 | 
					  border-color: #e97f89 !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.bg-success {
 | 
				
			||||||
 | 
					  background-color: #47d337 !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.bg-danger {
 | 
				
			||||||
 | 
					  background-color: #dd3545 !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.bg-success .dyn-dark {
 | 
				
			||||||
 | 
					  background-color: #35b027 !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.bg-danger .dyn-dark {
 | 
				
			||||||
 | 
					  background-color: #bf202f !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.nav-pills .nav-link.active, .nav-pills .show > .nav-link {
 | 
				
			||||||
 | 
					  background-color: #13a00d;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.nav-pills A {
 | 
				
			||||||
 | 
					  color: #424242;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.nav-pills I {
 | 
				
			||||||
 | 
					  margin-right: 10px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.CodeMirror {
 | 
				
			||||||
 | 
					  /* Bootstrap Settings */
 | 
				
			||||||
 | 
					  box-sizing: border-box;
 | 
				
			||||||
 | 
					  margin: 0;
 | 
				
			||||||
 | 
					  font: inherit;
 | 
				
			||||||
 | 
					  overflow: auto;
 | 
				
			||||||
 | 
					  font-family: inherit;
 | 
				
			||||||
 | 
					  display: block;
 | 
				
			||||||
 | 
					  width: 100%;
 | 
				
			||||||
 | 
					  padding: 0px;
 | 
				
			||||||
 | 
					  font-size: 14px;
 | 
				
			||||||
 | 
					  line-height: 1.5;
 | 
				
			||||||
 | 
					  color: #555;
 | 
				
			||||||
 | 
					  background-color: #fff;
 | 
				
			||||||
 | 
					  background-image: none;
 | 
				
			||||||
 | 
					  border: 1px solid #ccc;
 | 
				
			||||||
 | 
					  border-radius: 4px;
 | 
				
			||||||
 | 
					  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
 | 
				
			||||||
 | 
					  transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;
 | 
				
			||||||
 | 
					  /* Code Mirror Settings */
 | 
				
			||||||
 | 
					  font-family: monospace;
 | 
				
			||||||
 | 
					  position: relative;
 | 
				
			||||||
 | 
					  overflow: hidden;
 | 
				
			||||||
 | 
					  height: 80vh;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.CodeMirror-focused {
 | 
				
			||||||
 | 
					  /* Bootstrap Settings */
 | 
				
			||||||
 | 
					  border-color: #66afe9;
 | 
				
			||||||
 | 
					  outline: 0;
 | 
				
			||||||
 | 
					  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);
 | 
				
			||||||
 | 
					  transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.switch {
 | 
				
			||||||
 | 
					  font-size: 1rem;
 | 
				
			||||||
 | 
					  position: relative;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.switch input {
 | 
				
			||||||
 | 
					  position: absolute;
 | 
				
			||||||
 | 
					  height: 1px;
 | 
				
			||||||
 | 
					  width: 1px;
 | 
				
			||||||
 | 
					  background: none;
 | 
				
			||||||
 | 
					  border: 0;
 | 
				
			||||||
 | 
					  clip: rect(0 0 0 0);
 | 
				
			||||||
 | 
					  clip-path: inset(50%);
 | 
				
			||||||
 | 
					  overflow: hidden;
 | 
				
			||||||
 | 
					  padding: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.switch input + label {
 | 
				
			||||||
 | 
					  position: relative;
 | 
				
			||||||
 | 
					  min-width: calc(calc(2.375rem * .8) * 2);
 | 
				
			||||||
 | 
					  border-radius: calc(2.375rem * .8);
 | 
				
			||||||
 | 
					  height: calc(2.375rem * .8);
 | 
				
			||||||
 | 
					  line-height: calc(2.375rem * .8);
 | 
				
			||||||
 | 
					  display: inline-block;
 | 
				
			||||||
 | 
					  cursor: pointer;
 | 
				
			||||||
 | 
					  outline: none;
 | 
				
			||||||
 | 
					  user-select: none;
 | 
				
			||||||
 | 
					  vertical-align: middle;
 | 
				
			||||||
 | 
					  text-indent: calc(calc(calc(2.375rem * .8) * 2) + .5rem);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.switch input + label::before,
 | 
				
			||||||
 | 
					.switch input + label::after {
 | 
				
			||||||
 | 
					  content: "";
 | 
				
			||||||
 | 
					  position: absolute;
 | 
				
			||||||
 | 
					  top: 0;
 | 
				
			||||||
 | 
					  left: 0;
 | 
				
			||||||
 | 
					  width: calc(calc(2.375rem * .8) * 2);
 | 
				
			||||||
 | 
					  bottom: 0;
 | 
				
			||||||
 | 
					  display: block;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.switch input + label::before {
 | 
				
			||||||
 | 
					  right: 0;
 | 
				
			||||||
 | 
					  background-color: #dee2e6;
 | 
				
			||||||
 | 
					  border-radius: calc(2.375rem * .8);
 | 
				
			||||||
 | 
					  transition: 0.2s all;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.switch input + label::after {
 | 
				
			||||||
 | 
					  top: 2px;
 | 
				
			||||||
 | 
					  left: 2px;
 | 
				
			||||||
 | 
					  width: calc(calc(2.375rem * .8) - calc(2px * 2));
 | 
				
			||||||
 | 
					  height: calc(calc(2.375rem * .8) - calc(2px * 2));
 | 
				
			||||||
 | 
					  border-radius: 50%;
 | 
				
			||||||
 | 
					  background-color: white;
 | 
				
			||||||
 | 
					  transition: 0.2s all;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.switch input:checked + label::before {
 | 
				
			||||||
 | 
					  background-color: #08d;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.switch input:checked + label::after {
 | 
				
			||||||
 | 
					  margin-left: calc(2.375rem * .8);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.switch input:focus + label::before {
 | 
				
			||||||
 | 
					  outline: none;
 | 
				
			||||||
 | 
					  box-shadow: 0 0 0 0.2rem rgba(0, 136, 221, 0.25);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.switch input:disabled + label {
 | 
				
			||||||
 | 
					  color: #868e96;
 | 
				
			||||||
 | 
					  cursor: not-allowed;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.switch input:disabled + label::before {
 | 
				
			||||||
 | 
					  background-color: #e9ecef;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.switch.switch-sm {
 | 
				
			||||||
 | 
					  font-size: 0.875rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.switch.switch-sm input + label {
 | 
				
			||||||
 | 
					  min-width: calc(calc(1.9375rem * .8) * 2);
 | 
				
			||||||
 | 
					  height: calc(1.9375rem * .8);
 | 
				
			||||||
 | 
					  line-height: calc(1.9375rem * .8);
 | 
				
			||||||
 | 
					  text-indent: calc(calc(calc(1.9375rem * .8) * 2) + .5rem);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.switch.switch-sm input + label::before {
 | 
				
			||||||
 | 
					  width: calc(calc(1.9375rem * .8) * 2);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.switch.switch-sm input + label::after {
 | 
				
			||||||
 | 
					  width: calc(calc(1.9375rem * .8) - calc(2px * 2));
 | 
				
			||||||
 | 
					  height: calc(calc(1.9375rem * .8) - calc(2px * 2));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.switch.switch-sm input:checked + label::after {
 | 
				
			||||||
 | 
					  margin-left: calc(1.9375rem * .8);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.switch.switch-lg {
 | 
				
			||||||
 | 
					  font-size: 1.25rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.switch.switch-lg input + label {
 | 
				
			||||||
 | 
					  min-width: calc(calc(3rem * .8) * 2);
 | 
				
			||||||
 | 
					  height: calc(3rem * .8);
 | 
				
			||||||
 | 
					  line-height: calc(3rem * .8);
 | 
				
			||||||
 | 
					  text-indent: calc(calc(calc(3rem * .8) * 2) + .5rem);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.switch.switch-lg input + label::before {
 | 
				
			||||||
 | 
					  width: calc(calc(3rem * .8) * 2);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.switch.switch-lg input + label::after {
 | 
				
			||||||
 | 
					  width: calc(calc(3rem * .8) - calc(2px * 2));
 | 
				
			||||||
 | 
					  height: calc(calc(3rem * .8) - calc(2px * 2));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.switch.switch-lg input:checked + label::after {
 | 
				
			||||||
 | 
					  margin-left: calc(3rem * .8);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.switch + .switch {
 | 
				
			||||||
 | 
					  margin-left: 1rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@keyframes pulse_animation {
 | 
				
			||||||
 | 
					  0% {
 | 
				
			||||||
 | 
					    transform: scale(1);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  30% {
 | 
				
			||||||
 | 
					    transform: scale(1);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  40% {
 | 
				
			||||||
 | 
					    transform: scale(1.02);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  50% {
 | 
				
			||||||
 | 
					    transform: scale(1);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  60% {
 | 
				
			||||||
 | 
					    transform: scale(1);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  70% {
 | 
				
			||||||
 | 
					    transform: scale(1.05);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  80% {
 | 
				
			||||||
 | 
					    transform: scale(1);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  100% {
 | 
				
			||||||
 | 
					    transform: scale(1);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.pulse {
 | 
				
			||||||
 | 
					  animation-name: pulse_animation;
 | 
				
			||||||
 | 
					  animation-duration: 1500ms;
 | 
				
			||||||
 | 
					  transform-origin: 70% 70%;
 | 
				
			||||||
 | 
					  animation-iteration-count: infinite;
 | 
				
			||||||
 | 
					  animation-timing-function: linear;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@keyframes glow-grow {
 | 
				
			||||||
 | 
					  0% {
 | 
				
			||||||
 | 
					    opacity: 0;
 | 
				
			||||||
 | 
					    transform: scale(1);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  80% {
 | 
				
			||||||
 | 
					    opacity: 1;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  100% {
 | 
				
			||||||
 | 
					    transform: scale(2);
 | 
				
			||||||
 | 
					    opacity: 0;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.pulse-glow {
 | 
				
			||||||
 | 
					  animation-name: glow-grown;
 | 
				
			||||||
 | 
					  animation-duration: 100ms;
 | 
				
			||||||
 | 
					  transform-origin: 70% 30%;
 | 
				
			||||||
 | 
					  animation-iteration-count: infinite;
 | 
				
			||||||
 | 
					  animation-timing-function: linear;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.pulse-glow:before,
 | 
				
			||||||
 | 
					.pulse-glow:after {
 | 
				
			||||||
 | 
					  position: absolute;
 | 
				
			||||||
 | 
					  content: "";
 | 
				
			||||||
 | 
					  height: 0.4rem;
 | 
				
			||||||
 | 
					  width: 1.7rem;
 | 
				
			||||||
 | 
					  top: 1.3rem;
 | 
				
			||||||
 | 
					  right: 2.15rem;
 | 
				
			||||||
 | 
					  border-radius: 0;
 | 
				
			||||||
 | 
					  box-shadow: 0 0 6px #47d337;
 | 
				
			||||||
 | 
					  animation: glow-grow 2s ease-out infinite;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.sortable_drag {
 | 
				
			||||||
 | 
					  background-color: #0000000f;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.drag_icon {
 | 
				
			||||||
 | 
					  cursor: move;
 | 
				
			||||||
 | 
					  /* fallback if grab cursor is unsupported */
 | 
				
			||||||
 | 
					  cursor: grab;
 | 
				
			||||||
 | 
					  cursor: -moz-grab;
 | 
				
			||||||
 | 
					  cursor: -webkit-grab;
 | 
				
			||||||
 | 
					  width: 25px;
 | 
				
			||||||
 | 
					  height: 25px;
 | 
				
			||||||
 | 
					  display: inline-block;
 | 
				
			||||||
 | 
					  margin-right: 5px;
 | 
				
			||||||
 | 
					  margin-left: -10px;
 | 
				
			||||||
 | 
					  text-align: center;
 | 
				
			||||||
 | 
					  color: #b1b1b1;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* (Optional) Apply a "closed-hand" cursor during drag operation. */
 | 
				
			||||||
 | 
					.drag_icon:active {
 | 
				
			||||||
 | 
					  cursor: grabbing;
 | 
				
			||||||
 | 
					  cursor: -moz-grabbing;
 | 
				
			||||||
 | 
					  cursor: -webkit-grabbing;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.switch_btn {
 | 
				
			||||||
 | 
					  float: right;
 | 
				
			||||||
 | 
					  margin: -1px 0px 0px 0px;
 | 
				
			||||||
 | 
					  display: block;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#start_container {
 | 
				
			||||||
 | 
					  position: absolute;
 | 
				
			||||||
 | 
					  z-index: 99999;
 | 
				
			||||||
 | 
					  margin-top: 20px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#end_container {
 | 
				
			||||||
 | 
					  position: absolute;
 | 
				
			||||||
 | 
					  z-index: 99999;
 | 
				
			||||||
 | 
					  margin-top: 20px;
 | 
				
			||||||
 | 
					  right: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.pointer {
 | 
				
			||||||
 | 
					  cursor: pointer;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.jumbotron {
 | 
				
			||||||
 | 
					  background-color: white;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.toggle-service {
 | 
				
			||||||
 | 
					  font-size: 18pt;
 | 
				
			||||||
 | 
					  float: left;
 | 
				
			||||||
 | 
					  margin: 2px 3px 0 0;
 | 
				
			||||||
 | 
					  cursor: pointer;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@media (max-width: 767px) {
 | 
				
			||||||
 | 
					  HTML, BODY {
 | 
				
			||||||
 | 
					    background-color: #fcfcfc;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .sm-container {
 | 
				
			||||||
 | 
					    margin-top: 0px !important;
 | 
				
			||||||
 | 
					    padding: 0 !important;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .list-group-item H5 {
 | 
				
			||||||
 | 
					    font-size: 0.9rem;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .container {
 | 
				
			||||||
 | 
					    padding: 0px !important;
 | 
				
			||||||
 | 
					    padding-top: 15px !important;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .group_header {
 | 
				
			||||||
 | 
					    margin-left: 15px;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .navbar {
 | 
				
			||||||
 | 
					    margin-left: 0px;
 | 
				
			||||||
 | 
					    margin-top: 0px;
 | 
				
			||||||
 | 
					    width: 100%;
 | 
				
			||||||
 | 
					    margin-bottom: 0;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .btn-sm {
 | 
				
			||||||
 | 
					    line-height: 0.9rem;
 | 
				
			||||||
 | 
					    font-size: 0.65rem;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .full-col-12 {
 | 
				
			||||||
 | 
					    padding-left: 0px;
 | 
				
			||||||
 | 
					    padding-right: 0px;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .card {
 | 
				
			||||||
 | 
					    border: 0;
 | 
				
			||||||
 | 
					    border-radius: 0rem;
 | 
				
			||||||
 | 
					    padding: 0;
 | 
				
			||||||
 | 
					    background-color: #ffffff;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .card-body {
 | 
				
			||||||
 | 
					    font-size: 10pt;
 | 
				
			||||||
 | 
					    padding: 10px 10px;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .lg_number {
 | 
				
			||||||
 | 
					    font-size: 7.8vw;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .stats_area {
 | 
				
			||||||
 | 
					    margin-top: 1.5rem !important;
 | 
				
			||||||
 | 
					    margin-bottom: 1.5rem !important;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .stats_area .col-4 {
 | 
				
			||||||
 | 
					    padding-left: 0;
 | 
				
			||||||
 | 
					    padding-right: 0;
 | 
				
			||||||
 | 
					    font-size: 0.6rem;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .list-group-item {
 | 
				
			||||||
 | 
					    border-top: 1px solid #e4e4e4;
 | 
				
			||||||
 | 
					    border: 0px;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .list-group-item:first-child {
 | 
				
			||||||
 | 
					    border-top-left-radius: 0;
 | 
				
			||||||
 | 
					    border-top-right-radius: 0;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .list-group-item:last-child {
 | 
				
			||||||
 | 
					    border-bottom-right-radius: 0;
 | 
				
			||||||
 | 
					    border-bottom-left-radius: 0;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .list-group-item P {
 | 
				
			||||||
 | 
					    font-size: 0.7rem;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .service-chart-container {
 | 
				
			||||||
 | 
					    height: 200px;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*# sourceMappingURL=base.css.map */
 | 
				
			||||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 6.7 KiB  | 
| 
						 | 
					@ -0,0 +1,17 @@
 | 
				
			||||||
 | 
					<template>
 | 
				
			||||||
 | 
					    <footer>
 | 
				
			||||||
 | 
					        <div class="footer text-center mb-4 p-2">
 | 
				
			||||||
 | 
					            <a href="https://github.com/hunterlong/statping" target="_blank">Statping 0.80.70 made with <i class="text-danger fas fa-heart"></i></a> | <a href="dashboard">Dashboard</a>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					    </footer>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					export default {
 | 
				
			||||||
 | 
					  name: 'Footer'
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<!-- Add "scoped" attribute to limit CSS to this component only -->
 | 
				
			||||||
 | 
					<style scoped>
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,28 @@
 | 
				
			||||||
 | 
					<template>
 | 
				
			||||||
 | 
					    <div class="col-12 full-col-12">
 | 
				
			||||||
 | 
					        <h4 class="group_header">{{group.name}}</h4>
 | 
				
			||||||
 | 
					        <div class="list-group online_list mb-3">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <GroupedService/>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					import GroupedService from './GroupedService'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default {
 | 
				
			||||||
 | 
					  name: 'Group',
 | 
				
			||||||
 | 
					  components: {
 | 
				
			||||||
 | 
					    GroupedService
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  props: {
 | 
				
			||||||
 | 
					    group: Object
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<!-- Add "scoped" attribute to limit CSS to this component only -->
 | 
				
			||||||
 | 
					<style scoped>
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,19 @@
 | 
				
			||||||
 | 
					<template>
 | 
				
			||||||
 | 
					    <a href="#" class="service_li list-group-item list-group-item-action " data-id="7">
 | 
				
			||||||
 | 
					        Statping API
 | 
				
			||||||
 | 
					        <span class="badge bg-success float-right pulse-glow">ONLINE</span>
 | 
				
			||||||
 | 
					    </a>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					export default {
 | 
				
			||||||
 | 
					  name: 'GroupedService',
 | 
				
			||||||
 | 
					  props: {
 | 
				
			||||||
 | 
					    service: Object
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<!-- Add "scoped" attribute to limit CSS to this component only -->
 | 
				
			||||||
 | 
					<style scoped>
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,19 @@
 | 
				
			||||||
 | 
					<template>
 | 
				
			||||||
 | 
					    <div>
 | 
				
			||||||
 | 
					        <h1 class="col-12 text-center mb-4 mt-sm-3 header-title">{{core.name}}</h1>
 | 
				
			||||||
 | 
					        <h5 class="col-12 text-center mb-5 header-desc">{{core.description}}</h5>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					export default {
 | 
				
			||||||
 | 
					  name: 'Header',
 | 
				
			||||||
 | 
					  props: {
 | 
				
			||||||
 | 
					    core: Object
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<!-- Add "scoped" attribute to limit CSS to this component only -->
 | 
				
			||||||
 | 
					<style scoped>
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,20 @@
 | 
				
			||||||
 | 
					<template>
 | 
				
			||||||
 | 
					    <div class="alert alert-primary" role="alert">
 | 
				
			||||||
 | 
					        <h3>Login as Admin!</h3>
 | 
				
			||||||
 | 
					        <span class="mb-3">This is the Demo Statping instance, the database gets reset every 30 minutes. Login as "admin" password is "admin".</span>
 | 
				
			||||||
 | 
					        <div class="d-block mt-2 mb-4">
 | 
				
			||||||
 | 
					            <span class="float-left small">Starts on Tuesday January  8, 2019 at 08:00PM</span>
 | 
				
			||||||
 | 
					            <span class="float-right small">Ends on Thursday May 12, 2022 at 07:00PM</span>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					export default {
 | 
				
			||||||
 | 
					  name: 'MessageBlock'
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<!-- Add "scoped" attribute to limit CSS to this component only -->
 | 
				
			||||||
 | 
					<style scoped>
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,22 @@
 | 
				
			||||||
 | 
					<template>
 | 
				
			||||||
 | 
					    <div>
 | 
				
			||||||
 | 
					        <apexchart width="500" type="line" :options="options" :series="series"></apexchart>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					import VueApexCharts from 'vue-apexcharts'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Vue.component('apexchart', VueApexCharts)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default {
 | 
				
			||||||
 | 
					  name: 'ServiceChart',
 | 
				
			||||||
 | 
					  props: {
 | 
				
			||||||
 | 
					    service: Object
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<!-- Add "scoped" attribute to limit CSS to this component only -->
 | 
				
			||||||
 | 
					<style scoped>
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,77 @@
 | 
				
			||||||
 | 
					<template>
 | 
				
			||||||
 | 
					    <div class="container col-md-7 col-sm-12 mt-2 sm-container">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <Header :core="core"/>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <Group/>
 | 
				
			||||||
 | 
					        <Group/>
 | 
				
			||||||
 | 
					        <Group/>
 | 
				
			||||||
 | 
					        <div v-for="(group, index) in groups" v-bind:key="index">
 | 
				
			||||||
 | 
					            <Group :group=group />
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <div class="col-12">
 | 
				
			||||||
 | 
					            <MessageBlock/>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <div class="col-12 full-col-12">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <div v-for="(service, index) in services" v-bind:key="index">
 | 
				
			||||||
 | 
					                <ServiceBlock :service=service />
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					import ServiceBlock from '../Service/ServiceBlock.vue'
 | 
				
			||||||
 | 
					import MessageBlock from "../Index/MessageBlock";
 | 
				
			||||||
 | 
					import Group from "../Index/Group";
 | 
				
			||||||
 | 
					import Header from "../Index/Header";
 | 
				
			||||||
 | 
					const axios = require('axios');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default {
 | 
				
			||||||
 | 
					  name: 'Index',
 | 
				
			||||||
 | 
					  components: {
 | 
				
			||||||
 | 
					    Header,
 | 
				
			||||||
 | 
					    Group,
 | 
				
			||||||
 | 
					    MessageBlock,
 | 
				
			||||||
 | 
					    ServiceBlock,
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  data () {
 | 
				
			||||||
 | 
					    return {
 | 
				
			||||||
 | 
					      services: null,
 | 
				
			||||||
 | 
					      groups: null,
 | 
				
			||||||
 | 
					      core: null,
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  beforeMount() {
 | 
				
			||||||
 | 
					    this.getAPI()
 | 
				
			||||||
 | 
					    this.getGroups()
 | 
				
			||||||
 | 
					    this.getServices()
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  methods: {
 | 
				
			||||||
 | 
					    getAPI: function() {
 | 
				
			||||||
 | 
					      axios
 | 
				
			||||||
 | 
					        .get('/api')
 | 
				
			||||||
 | 
					        .then(response => (this.core = response.data))
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    getServices: function() {
 | 
				
			||||||
 | 
					      axios
 | 
				
			||||||
 | 
					        .get('/api/services')
 | 
				
			||||||
 | 
					        .then(response => (this.services = response.data))
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    getGroups: function() {
 | 
				
			||||||
 | 
					      axios
 | 
				
			||||||
 | 
					        .get('/api/groups')
 | 
				
			||||||
 | 
					        .then(response => (this.groups = response.data))
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<!-- Add "scoped" attribute to limit CSS to this component only -->
 | 
				
			||||||
 | 
					<style scoped>
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,56 @@
 | 
				
			||||||
 | 
					<template>
 | 
				
			||||||
 | 
					    <div class="mb-4" id="service_id_1">
 | 
				
			||||||
 | 
					        <div class="card">
 | 
				
			||||||
 | 
					            <div class="card-body">
 | 
				
			||||||
 | 
					                <div class="col-12">
 | 
				
			||||||
 | 
					                    <h4 class="mt-3"><a href="service/1">{{service.name}}</a>
 | 
				
			||||||
 | 
					                        <span class="badge bg-success float-right">{{service.online ? "ONLINE" : "OFFLINE"}}</span>
 | 
				
			||||||
 | 
					                    </h4>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    <div class="row stats_area mt-5">
 | 
				
			||||||
 | 
					                        <div class="col-4">
 | 
				
			||||||
 | 
					                            <span class="lg_number">131ms</span>
 | 
				
			||||||
 | 
					                            Average Response
 | 
				
			||||||
 | 
					                        </div>
 | 
				
			||||||
 | 
					                        <div class="col-4">
 | 
				
			||||||
 | 
					                            <span class="lg_number">100%</span>
 | 
				
			||||||
 | 
					                            Uptime last 24 Hours
 | 
				
			||||||
 | 
					                        </div>
 | 
				
			||||||
 | 
					                        <div class="col-4">
 | 
				
			||||||
 | 
					                            <span class="lg_number">100%</span>
 | 
				
			||||||
 | 
					                            Uptime last 7 Days
 | 
				
			||||||
 | 
					                        </div>
 | 
				
			||||||
 | 
					                    </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <div class="chart-container">
 | 
				
			||||||
 | 
					                <div id="service_1"></div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <div class="row lower_canvas full-col-12 text-white">
 | 
				
			||||||
 | 
					                <div class="col-10 text-truncate">
 | 
				
			||||||
 | 
					                    <span class="d-none d-md-inline">Online, last Failure was Wednesday 1:16:49PM, Dec 18 2019</span>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					                <div class="col-sm-12 col-md-2">
 | 
				
			||||||
 | 
					                    <a href="service/1" class="btn btn-success btn-sm float-right dyn-dark btn-block">View Service</a>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					export default {
 | 
				
			||||||
 | 
					  name: 'ServiceBlock',
 | 
				
			||||||
 | 
					  props: {
 | 
				
			||||||
 | 
					    service: Object
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<!-- Add "scoped" attribute to limit CSS to this component only -->
 | 
				
			||||||
 | 
					<style scoped>
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,26 @@
 | 
				
			||||||
 | 
					import Vue from 'vue'
 | 
				
			||||||
 | 
					import App from './App.vue'
 | 
				
			||||||
 | 
					import VueRouter from 'vue-router'
 | 
				
			||||||
 | 
					import Index from "./components/Pages/Index";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					require("./assets/css/bootstrap.min.css")
 | 
				
			||||||
 | 
					require("./assets/css/base.css")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Vue.use(VueRouter)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const router = new VueRouter({
 | 
				
			||||||
 | 
					  routes: [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      path: '/',
 | 
				
			||||||
 | 
					      name: 'Index',
 | 
				
			||||||
 | 
					      component: Index
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Vue.config.productionTip = false
 | 
				
			||||||
 | 
					new Vue({
 | 
				
			||||||
 | 
					  router,
 | 
				
			||||||
 | 
					  render: h => h(App),
 | 
				
			||||||
 | 
					}).$mount('#app')
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,14 @@
 | 
				
			||||||
 | 
					import Index from "./components/Pages/Index";
 | 
				
			||||||
 | 
					import VueRouter from 'vue-router'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const router = new VueRouter({
 | 
				
			||||||
 | 
					  routes: [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      path: '/',
 | 
				
			||||||
 | 
					      name: 'Index',
 | 
				
			||||||
 | 
					      component: Index
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default router
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,11 @@
 | 
				
			||||||
 | 
					module.exports = {
 | 
				
			||||||
 | 
					  assetsDir: 'assets',
 | 
				
			||||||
 | 
					  devServer: {
 | 
				
			||||||
 | 
					    proxy: {
 | 
				
			||||||
 | 
					      '/api': {
 | 
				
			||||||
 | 
					        logLevel: 'debug',
 | 
				
			||||||
 | 
					        target: 'http://0.0.0.0:8585'
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Loading…
	
		Reference in New Issue