zeus
3 years ago
7 changed files with 708 additions and 17 deletions
@ -0,0 +1,51 @@ |
|||||
|
<template> |
||||
|
<card class="card-user" style="max-height:100%"> |
||||
|
|
||||
|
<div class="row" > |
||||
|
<div class="col-12 order-first " > |
||||
|
<br> |
||||
|
<dashboard-view> |
||||
|
|
||||
|
</dashboard-view> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
|
||||
|
</card> |
||||
|
</template> |
||||
|
<script> |
||||
|
import {mapState, mapGetters, mapActions} from 'vuex' |
||||
|
import card from '@/components/Card.vue' |
||||
|
import DashboardView from "./manageservices/view-dashboard.vue"; |
||||
|
//import CalendarView from "./manageservices/view-service.vue"; |
||||
|
//import CalendarViewEvents from "./manageservices/view-events.vue"; |
||||
|
export default { |
||||
|
components: { |
||||
|
card, |
||||
|
DashboardView |
||||
|
// CalendarViewEvents |
||||
|
}, |
||||
|
data () { |
||||
|
return { |
||||
|
hybridshowlog:1, |
||||
|
loading: false, |
||||
|
consoleView: 'off', |
||||
|
productIndex: 1 |
||||
|
} |
||||
|
}, |
||||
|
mounted() { |
||||
|
this.$root.$on('hybrid_labobject_view', (v) => { |
||||
|
this.hybridshowlog=2 |
||||
|
}) |
||||
|
}, |
||||
|
beforeDestroy () { |
||||
|
}, |
||||
|
|
||||
|
|
||||
|
created () { |
||||
|
} |
||||
|
}; |
||||
|
</script> |
||||
|
<style> |
||||
|
</style> |
||||
|
|
@ -0,0 +1,326 @@ |
|||||
|
<template> |
||||
|
<div class="container-fluid content-row h-50"> |
||||
|
|
||||
|
<div class="row "> |
||||
|
|
||||
|
<div class="col-sm-12 col-lg-6"> |
||||
|
<div class="card h-50 shadow p-3 mb-5 bg-white rounded"> |
||||
|
<v-chart class="chart" :key="stats_stats_imagescontainers" style="min-width: 100%;" :option="optionsystem" /> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<div class="col-sm-12 col-lg-6"> |
||||
|
<div class="card h-50 shadow p-3 mb-5 bg-white rounded"> |
||||
|
<v-chart class="chart" :key="stats_stats_container" :option="optiondocker" /> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
</div> |
||||
|
|
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
|
||||
|
import store from '@/store/index' |
||||
|
import {mapState, mapGetters, mapActions,dispatch} from 'vuex' |
||||
|
import Vue from 'vue' |
||||
|
import card from '@/components/Card.vue' |
||||
|
import {ApiConfig} from "@/config/index"; |
||||
|
|
||||
|
|
||||
|
import { use } from "echarts/core"; |
||||
|
import { CanvasRenderer } from "echarts/renderers"; |
||||
|
import { PieChart, BarChart } from "echarts/charts"; |
||||
|
import { |
||||
|
TitleComponent, |
||||
|
TooltipComponent, |
||||
|
LegendComponent, |
||||
|
GridComponent |
||||
|
} from "echarts/components"; |
||||
|
import VChart, { THEME_KEY } from "vue-echarts"; |
||||
|
|
||||
|
use([ |
||||
|
CanvasRenderer, |
||||
|
PieChart, |
||||
|
TitleComponent, |
||||
|
TooltipComponent, |
||||
|
LegendComponent, |
||||
|
GridComponent, |
||||
|
BarChart |
||||
|
]); |
||||
|
|
||||
|
export default { |
||||
|
components: { |
||||
|
card, |
||||
|
VChart |
||||
|
}, |
||||
|
provide: { |
||||
|
[THEME_KEY]: "white" |
||||
|
}, |
||||
|
data() { |
||||
|
return { |
||||
|
// width/height get this for refresh charts |
||||
|
stats_stats_imagescontainers:0, |
||||
|
stats_stats_container:0, |
||||
|
width: document.documentElement.clientWidth, |
||||
|
height: document.documentElement.clientHeight, |
||||
|
|
||||
|
optiondocker: { |
||||
|
height: '100%', |
||||
|
width: '100%', |
||||
|
responsive: true, |
||||
|
maintainAspectRatio: false, |
||||
|
title: { |
||||
|
text: "Containers Memory", |
||||
|
left: "center" |
||||
|
}, |
||||
|
tooltip: { |
||||
|
trigger: "item", |
||||
|
formatter: "{a} <br/>{b} : {c} ({d}%)" |
||||
|
}, |
||||
|
/* |
||||
|
legend: { |
||||
|
orient: "vertical", |
||||
|
left: "left", |
||||
|
data: [ |
||||
|
"Direct", |
||||
|
"Email", |
||||
|
"Ad Networks", |
||||
|
"Video Ads", |
||||
|
"Search Engines" |
||||
|
] |
||||
|
}, |
||||
|
*/ |
||||
|
series: [ |
||||
|
{ |
||||
|
name: "Container Memory", |
||||
|
type: "pie", |
||||
|
radius: "55%", |
||||
|
center: ["50%", "60%"], |
||||
|
data: [ |
||||
|
// { value: 335, name: "Direct" }, |
||||
|
// { value: 310, name: "Email" }, |
||||
|
// { value: 234, name: "Ad Networks" }, |
||||
|
// { value: 135, name: "Video Ads" }, |
||||
|
// { value: 1548, name: "Search Engines" } |
||||
|
], |
||||
|
emphasis: { |
||||
|
itemStyle: { |
||||
|
shadowBlur: 10, |
||||
|
shadowOffsetX: 0, |
||||
|
shadowColor: "rgba(0, 0, 0, 0.5)" |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
] |
||||
|
}, |
||||
|
/* |
||||
|
optiondocker: { |
||||
|
legend: { |
||||
|
top: 'bottom' |
||||
|
}, |
||||
|
toolbox: { |
||||
|
show: true, |
||||
|
feature: { |
||||
|
mark: { show: true }, |
||||
|
dataView: { show: true, readOnly: false }, |
||||
|
restore: { show: true }, |
||||
|
saveAsImage: { show: true } |
||||
|
} |
||||
|
}, |
||||
|
series: [ |
||||
|
{ |
||||
|
name: 'Nightingale Chart', |
||||
|
type: 'pie', |
||||
|
radius: [50, 250], |
||||
|
center: ['50%', '50%'], |
||||
|
roseType: 'area', |
||||
|
itemStyle: { |
||||
|
borderRadius: 8 |
||||
|
}, |
||||
|
data: [ |
||||
|
{ value: 40, name: 'rose 1' }, |
||||
|
{ value: 38, name: 'rose 2' }, |
||||
|
{ value: 32, name: 'rose 3' }, |
||||
|
{ value: 30, name: 'rose 4' }, |
||||
|
{ value: 28, name: 'rose 5' }, |
||||
|
{ value: 26, name: 'rose 6' }, |
||||
|
{ value: 22, name: 'rose 7' }, |
||||
|
{ value: 18, name: 'rose 8' } |
||||
|
] |
||||
|
} |
||||
|
] |
||||
|
}, |
||||
|
*/ |
||||
|
optionsystem: { |
||||
|
title: { |
||||
|
text: 'Image/Containers' |
||||
|
}, |
||||
|
tooltip: { |
||||
|
trigger: 'axis', |
||||
|
axisPointer: { |
||||
|
type: 'shadow' |
||||
|
} |
||||
|
}, |
||||
|
legend: {}, |
||||
|
grid: { |
||||
|
left: '3%', |
||||
|
right: '4%', |
||||
|
bottom: '3%', |
||||
|
containLabel: true |
||||
|
}, |
||||
|
xAxis: { |
||||
|
type: 'value', |
||||
|
boundaryGap: [0, 0.01] |
||||
|
}, |
||||
|
yAxis: { |
||||
|
type: 'category', |
||||
|
data: ['Containers', 'Images'] |
||||
|
}, |
||||
|
series: [ |
||||
|
{ |
||||
|
name: 'TOTAL', |
||||
|
type: 'bar', |
||||
|
data: [5, 20], |
||||
|
emphasis: { |
||||
|
itemStyle: { |
||||
|
shadowBlur: 10, |
||||
|
shadowOffsetX: 0, |
||||
|
shadowColor: "rgba(0, 0, 0, 0.5)" |
||||
|
} |
||||
|
} |
||||
|
}, |
||||
|
{ |
||||
|
name: 'ACTIVE', |
||||
|
type: 'bar', |
||||
|
data: [2, 3], |
||||
|
emphasis: { |
||||
|
itemStyle: { |
||||
|
shadowBlur: 10, |
||||
|
shadowOffsetX: 0, |
||||
|
shadowColor: "rgba(0, 0, 0, 0.5)" |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
] |
||||
|
} |
||||
|
|
||||
|
}; |
||||
|
}, |
||||
|
mounted() { |
||||
|
window.addEventListener('resize', this.getDimensions); |
||||
|
}, |
||||
|
created() { |
||||
|
var url_string = window.location.href |
||||
|
var url = new URL(url_string); |
||||
|
this.token = url.searchParams.get("token"); |
||||
|
//console.log("token "+ this.token); |
||||
|
|
||||
|
(async () => { |
||||
|
var log = await store.dispatch("pipelineLLO/get_stats_imagescontainers",{ |
||||
|
token:this.token, |
||||
|
action:'images_containers' |
||||
|
}) |
||||
|
//console.log(log.data) |
||||
|
|
||||
|
var datajsonlength = log.data.data.length |
||||
|
var datajson = log.data.data |
||||
|
for(var i = 0; i < datajsonlength; i++) { |
||||
|
|
||||
|
if(datajson[i].Type == 'Images'){ |
||||
|
var Images_TotalCount = datajson[i].TotalCount |
||||
|
var Images_Active = datajson[i].Active |
||||
|
} |
||||
|
if(datajson[i].Type == 'Containers'){ |
||||
|
var Containers_TotalCount = datajson[i].TotalCount |
||||
|
var Containers_Active = datajson[i].Active |
||||
|
} |
||||
|
|
||||
|
this.optionsystem.series = [ |
||||
|
{ |
||||
|
name: 'TOTAL', |
||||
|
type: 'bar', |
||||
|
data: [Containers_TotalCount, Images_TotalCount] |
||||
|
}, |
||||
|
{ |
||||
|
name: 'ACTIVE', |
||||
|
type: 'bar', |
||||
|
data: [Containers_Active, Images_Active] |
||||
|
} |
||||
|
] |
||||
|
|
||||
|
} |
||||
|
|
||||
|
var logcontainers = await store.dispatch("pipelineLLO/get_stats_containers",{ |
||||
|
token:this.token, |
||||
|
action:'containers' |
||||
|
}) |
||||
|
if(logcontainers.data.data){ |
||||
|
var containerslength = logcontainers.data.data.length |
||||
|
var datajson1 = logcontainers.data.data |
||||
|
this.optiondocker.series[0].data = [] |
||||
|
for(var i = 0; i < containerslength; i++) { |
||||
|
|
||||
|
if(datajson1[i].container){ |
||||
|
var memtmp = datajson1[i].memory.percent.split('%') |
||||
|
var obj = { |
||||
|
value: memtmp[0], name: datajson1[i].container |
||||
|
} |
||||
|
//console.log(obj) |
||||
|
//var container_cpu = datajson1[i].cpu |
||||
|
//var container_memory_raw = datajson1[i].memory.raw |
||||
|
//var container_memory_percent = datajson1[i].memory.percent |
||||
|
} |
||||
|
|
||||
|
this.optiondocker.series[0].data.push(obj) |
||||
|
|
||||
|
} |
||||
|
|
||||
|
//console.log(logcontainers.data) |
||||
|
//console.log(this.optiondocker) |
||||
|
//this.stats_stats_container += 1 |
||||
|
} |
||||
|
|
||||
|
})(); |
||||
|
|
||||
|
}, |
||||
|
beforeDestroy () { |
||||
|
window.removeEventListener('resize', this.getDimensions); |
||||
|
}, |
||||
|
computed: { |
||||
|
httpOptions() { |
||||
|
var token = this.token |
||||
|
var p="headers: {Authorization: token}}"; //table props -> :http-options="httpOptions" |
||||
|
return {headers: {Authorization: 'Bearer ' + token}} //table props -> :http-options="httpOptions" |
||||
|
}, |
||||
|
|
||||
|
}, |
||||
|
methods: { |
||||
|
async getDimensions() { |
||||
|
this.width = document.documentElement.clientWidth; |
||||
|
this.height = document.documentElement.clientHeight; |
||||
|
//console.log( this.width + ' ' + this.height) |
||||
|
this.refresh() |
||||
|
}, |
||||
|
async refresh() { |
||||
|
this.stats_stats_imagescontainers += 1 |
||||
|
this.stats_stats_container += 1 |
||||
|
} |
||||
|
}, |
||||
|
actions: { |
||||
|
} |
||||
|
}; |
||||
|
</script> |
||||
|
|
||||
|
<style scoped> |
||||
|
.chart { |
||||
|
height: 100vh; |
||||
|
} |
||||
|
</style> |
||||
|
|
||||
|
<style> |
||||
|
body { |
||||
|
margin: 0; |
||||
|
} |
||||
|
</style> |
Loading…
Reference in new issue