|  |  |  | 
|---|
|  |  |  | <template> | 
|---|
|  |  |  | <div id="app"> | 
|---|
|  |  |  | <el-container> | 
|---|
|  |  |  | <el-header> | 
|---|
|  |  |  | <uiHeader></uiHeader> | 
|---|
|  |  |  | </el-header> | 
|---|
|  |  |  | <el-main> | 
|---|
|  |  |  | <div style="background-color: #FFFFFF; margin-bottom: 1rem; position: relative; padding: 0.5rem; text-align: left;"> | 
|---|
|  |  |  | <span style="font-size: 1rem; font-weight: bold;">控制台</span> | 
|---|
|  |  |  | <div style="position: absolute; right: 1rem; top: 0.3rem;"> | 
|---|
|  |  |  | <el-popover placement="bottom" width="750" height="300" trigger="click"> | 
|---|
|  |  |  | <div style="height: 600px;overflow:auto;"> | 
|---|
|  |  |  | <table class="table-c" cellspacing="0"> | 
|---|
|  |  |  | <tr v-for="(value, key, index) in serverConfig"> | 
|---|
|  |  |  | <td style="width: 18rem; text-align: right;">{{ key }}</td> | 
|---|
|  |  |  | <td style="width: 33rem; text-align:left">{{ value }}</td> | 
|---|
|  |  |  | </tr> | 
|---|
|  |  |  | </table> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | <el-button type="primary" slot="reference" size="mini" @click="getServerConfig()">查看服务器配置</el-button> | 
|---|
|  |  |  | </el-popover> | 
|---|
|  |  |  | <el-button style="margin-left: 1rem;" type="danger" size="mini" @click="reStartServer()">重启服务器</el-button> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | <el-row :gutter="30"> | 
|---|
|  |  |  | <el-col :span="12"><div class="control-table" id="ThreadsLoad">table1</div></el-col> | 
|---|
|  |  |  | <el-col :span="12"><div class="control-table" id="WorkThreadsLoad">table2</div></el-col> | 
|---|
|  |  |  | </el-row> | 
|---|
|  |  |  | <el-table :data="allSessionData" style="margin-top: 1rem;"> | 
|---|
|  |  |  | <el-table-column prop="peer_ip" label="远端"></el-table-column> | 
|---|
|  |  |  | <el-table-column prop="local_ip" label="本地"></el-table-column> | 
|---|
|  |  |  | <el-table-column prop="typeid" label="类型"></el-table-column> | 
|---|
|  |  |  | <el-table-column align="right"> | 
|---|
|  |  |  | <template slot="header" slot-scope="scope"> | 
|---|
|  |  |  | <el-button icon="el-icon-refresh-right" circle @click="getAllSession()"></el-button> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  | <template slot-scope="scope"> | 
|---|
|  |  |  | <el-button @click.native.prevent="deleteRow(scope.$index, allSessionData)" type="text" size="small">移除</el-button> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  | </el-table-column> | 
|---|
|  |  |  | </el-table> | 
|---|
|  |  |  | <div id="app"> | 
|---|
|  |  |  | <el-container> | 
|---|
|  |  |  | <el-header> | 
|---|
|  |  |  | <uiHeader></uiHeader> | 
|---|
|  |  |  | </el-header> | 
|---|
|  |  |  | <el-main> | 
|---|
|  |  |  | <div style="background-color: #FFFFFF; margin-bottom: 1rem; position: relative; padding: 0.5rem; text-align: left;"> | 
|---|
|  |  |  | <span style="font-size: 1rem; font-weight: bold;">控制台</span> | 
|---|
|  |  |  | <div style="position: absolute; right: 17rem; top: 0.3rem;"> | 
|---|
|  |  |  | 节点选择: <el-select size="mini" @change="chooseMediaChange" style="width: 18rem; margin-right: 8rem;" v-model="mediaServerChoose" placeholder="请选择" default-first-option> | 
|---|
|  |  |  | <el-option | 
|---|
|  |  |  | v-for="item in mediaServerList" | 
|---|
|  |  |  | :key="item.id" | 
|---|
|  |  |  | :label="item.id + '( ' + item.streamIp + ' )'" | 
|---|
|  |  |  | :value="item.id"> | 
|---|
|  |  |  | </el-option> | 
|---|
|  |  |  | </el-select> | 
|---|
|  |  |  | <span >{{loadCount}}</span> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | <div style="position: absolute; right: 1rem; top: 0.3rem;"> | 
|---|
|  |  |  | <el-popover placement="bottom" width="750" height="300" trigger="click"> | 
|---|
|  |  |  | <div style="height: 600px;overflow:auto;"> | 
|---|
|  |  |  | <table class="table-c" cellspacing="0"> | 
|---|
|  |  |  | <tr v-for="(value, key, index) in serverConfig"> | 
|---|
|  |  |  | <td style="width: 18rem; text-align: right;">{{ key }}</td> | 
|---|
|  |  |  | <td style="width: 33rem; text-align:left">{{ value }}</td> | 
|---|
|  |  |  | </tr> | 
|---|
|  |  |  | </table> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | <el-button type="primary" slot="reference" size="mini" @click="getServerConfig()">媒体服务器配置</el-button> | 
|---|
|  |  |  | </el-popover> | 
|---|
|  |  |  | <el-popover placement="bottom" width="750" height="300" trigger="click"> | 
|---|
|  |  |  | <div style="height: 600px;overflow:auto;"> | 
|---|
|  |  |  | <div v-for="(value, key, index) in wvpServerConfig"> | 
|---|
|  |  |  | {{ key }}: | 
|---|
|  |  |  | <table v-if="key != 'server.port'" class="table-c" cellspacing="0"> | 
|---|
|  |  |  | <tr  v-for="(subValue, subKey, subIndex) in value"> | 
|---|
|  |  |  | <td style="width: 18rem; text-align: right;">{{ subKey }}</td> | 
|---|
|  |  |  | <td style="width: 33rem; text-align:left">{{ subValue }}</td> | 
|---|
|  |  |  | </tr> | 
|---|
|  |  |  | </table> | 
|---|
|  |  |  | <span v-if="key == 'server.port'">{{ value }}</span> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | </el-main> | 
|---|
|  |  |  | <!-- <el-footer style="position: absolute; bottom: 0; width: 100%;">ZLMediaKit-VUE_UI v1</el-footer> --> | 
|---|
|  |  |  | </el-container> | 
|---|
|  |  |  | <div style="margin-top: 1rem"> | 
|---|
|  |  |  | 版本信息: | 
|---|
|  |  |  | <table class="table-c" cellspacing="0"> | 
|---|
|  |  |  | <tr v-for="(value, key, index) in wvpServerVersion"> | 
|---|
|  |  |  | <td style="width: 18rem; text-align: right;">{{ key }}</td> | 
|---|
|  |  |  | <td style="width: 33rem; text-align:left">{{ value }}</td> | 
|---|
|  |  |  | </tr> | 
|---|
|  |  |  | </table> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | <el-button type="primary" slot="reference" size="mini" @click="getWVPServerConfig()">信令服务器配置</el-button> | 
|---|
|  |  |  | </el-popover> | 
|---|
|  |  |  | <el-button style="margin-left: 1rem;" type="danger" size="mini" @click="reStartServer()">重启媒体服务器</el-button> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | <el-row :gutter="30"> | 
|---|
|  |  |  | <el-col :span="12"> | 
|---|
|  |  |  | <div class="control-table" id="ThreadsLoad">table1</div> | 
|---|
|  |  |  | </el-col> | 
|---|
|  |  |  | <el-col :span="12"> | 
|---|
|  |  |  | <div class="control-table" id="WorkThreadsLoad">table2</div> | 
|---|
|  |  |  | </el-col> | 
|---|
|  |  |  | </el-row> | 
|---|
|  |  |  | <el-table :data="allSessionData" style="margin-top: 1rem;"> | 
|---|
|  |  |  | <el-table-column prop="peer_ip" label="远端"></el-table-column> | 
|---|
|  |  |  | <el-table-column prop="local_ip" label="本地"></el-table-column> | 
|---|
|  |  |  | <el-table-column prop="typeid" label="类型"></el-table-column> | 
|---|
|  |  |  | <el-table-column align="right"> | 
|---|
|  |  |  | <template slot="header" slot-scope="scope"> | 
|---|
|  |  |  | <el-button icon="el-icon-refresh-right" circle @click="getAllSession()"></el-button> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  | <template slot-scope="scope"> | 
|---|
|  |  |  | <el-button @click.native.prevent="deleteRow(scope.$index, allSessionData)" type="text" size="small">移除</el-button> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  | </el-table-column> | 
|---|
|  |  |  | </el-table> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </el-main> | 
|---|
|  |  |  | <!-- <el-footer style="position: absolute; bottom: 0; width: 100%;">ZLMediaKit-VUE_UI v1</el-footer> --> | 
|---|
|  |  |  | </el-container> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <script> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import uiHeader from './UiHeader.vue' | 
|---|
|  |  |  | import MediaServer from './service/MediaServer' | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import echarts from 'echarts'; | 
|---|
|  |  |  | export default { | 
|---|
|  |  |  | name: 'app', | 
|---|
|  |  |  | components: { | 
|---|
|  |  |  | echarts, | 
|---|
|  |  |  | uiHeader | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | data() { | 
|---|
|  |  |  | return { | 
|---|
|  |  |  | tableOption: { | 
|---|
|  |  |  | // legend: {}, | 
|---|
|  |  |  | xAxis: {}, | 
|---|
|  |  |  | yAxis: {}, | 
|---|
|  |  |  | label: {}, | 
|---|
|  |  |  | tooltip: {}, | 
|---|
|  |  |  | dataZoom: [], | 
|---|
|  |  |  | series: [] | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | table1Option: { | 
|---|
|  |  |  | // legend: {}, | 
|---|
|  |  |  | xAxis: {}, | 
|---|
|  |  |  | yAxis: {}, | 
|---|
|  |  |  | label: {}, | 
|---|
|  |  |  | tooltip: {}, | 
|---|
|  |  |  | series: [] | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | mChart: null, | 
|---|
|  |  |  | mChart1: null, | 
|---|
|  |  |  | charZoomStart: 0, | 
|---|
|  |  |  | charZoomEnd: 100, | 
|---|
|  |  |  | chartInterval: 0, //更新图表统计图定时任务标识 | 
|---|
|  |  |  | allSessionData: [], | 
|---|
|  |  |  | visible: false, | 
|---|
|  |  |  | serverConfig: {} | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | mounted() { | 
|---|
|  |  |  | this.getAllSession(); | 
|---|
|  |  |  | this.initTable(); | 
|---|
|  |  |  | this.updateData(); | 
|---|
|  |  |  | this.chartInterval = setInterval(this.updateData, 3000); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | destroyed() { | 
|---|
|  |  |  | clearInterval(this.chartInterval); //释放定时任务 | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | methods: { | 
|---|
|  |  |  | updateData: function() { | 
|---|
|  |  |  | this.getThreadsLoad(); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 获取线程状态 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | getThreadsLoad: function() { | 
|---|
|  |  |  | let that = this; | 
|---|
|  |  |  | this.$axios({ | 
|---|
|  |  |  | method: 'get', | 
|---|
|  |  |  | url: '/zlm/index/api/getThreadsLoad' | 
|---|
|  |  |  | }).then(function(res) { | 
|---|
|  |  |  | if (res.data.code == 0) { | 
|---|
|  |  |  | that.tableOption.xAxis.data.push(new Date().toLocaleTimeString()); | 
|---|
|  |  |  | that.table1Option.xAxis.data.push(new Date().toLocaleTimeString()); | 
|---|
|  |  |  | name: 'app', | 
|---|
|  |  |  | components: { | 
|---|
|  |  |  | echarts, | 
|---|
|  |  |  | uiHeader | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | data() { | 
|---|
|  |  |  | return { | 
|---|
|  |  |  | tableOption: { | 
|---|
|  |  |  | // legend: {}, | 
|---|
|  |  |  | xAxis: {}, | 
|---|
|  |  |  | yAxis: {}, | 
|---|
|  |  |  | label: {}, | 
|---|
|  |  |  | tooltip: {}, | 
|---|
|  |  |  | dataZoom: [], | 
|---|
|  |  |  | series: [] | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | table1Option: { | 
|---|
|  |  |  | // legend: {}, | 
|---|
|  |  |  | xAxis: {}, | 
|---|
|  |  |  | yAxis: {}, | 
|---|
|  |  |  | label: {}, | 
|---|
|  |  |  | tooltip: {}, | 
|---|
|  |  |  | series: [] | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | mChart: null, | 
|---|
|  |  |  | mChart1: null, | 
|---|
|  |  |  | charZoomStart: 0, | 
|---|
|  |  |  | charZoomEnd: 100, | 
|---|
|  |  |  | chartInterval: 0, //更新图表统计图定时任务标识 | 
|---|
|  |  |  | allSessionData: [], | 
|---|
|  |  |  | visible: false, | 
|---|
|  |  |  | wvpVisible: false, | 
|---|
|  |  |  | serverConfig: {}, | 
|---|
|  |  |  | wvpServerConfig: {}, | 
|---|
|  |  |  | wvpServerVersion: {}, | 
|---|
|  |  |  | mediaServer : new MediaServer(), | 
|---|
|  |  |  | mediaServerChoose : null, | 
|---|
|  |  |  | loadCount : 0, | 
|---|
|  |  |  | mediaServerList : [] | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | mounted() { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | for (var i = 0; i < res.data.data.length; i++) { | 
|---|
|  |  |  | if (that.tableOption.series[i] === undefined) { | 
|---|
|  |  |  | let data = { | 
|---|
|  |  |  | data: [], | 
|---|
|  |  |  | type: 'line' | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | let data1 = { | 
|---|
|  |  |  | data: [], | 
|---|
|  |  |  | type: 'line' | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | data.data.push(res.data.data[i].delay); | 
|---|
|  |  |  | data1.data.push(res.data.data[i].load); | 
|---|
|  |  |  | that.tableOption.series.push(data); | 
|---|
|  |  |  | that.table1Option.series.push(data1); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | that.tableOption.series[i].data.push(res.data.data[i].delay); | 
|---|
|  |  |  | that.table1Option.series[i].data.push(res.data.data[i].load); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | that.tableOption.dataZoom[0].start = that.charZoomStart; | 
|---|
|  |  |  | that.tableOption.dataZoom[0].end = that.charZoomEnd; | 
|---|
|  |  |  | that.table1Option.dataZoom[0].start = that.charZoomStart; | 
|---|
|  |  |  | that.table1Option.dataZoom[0].end = that.charZoomEnd; | 
|---|
|  |  |  | //that.myChart = echarts.init(document.getElementById('ThreadsLoad')); | 
|---|
|  |  |  | that.myChart.setOption(that.tableOption, true); | 
|---|
|  |  |  | // that.myChart1 = echarts.init(document.getElementById('WorkThreadsLoad')); | 
|---|
|  |  |  | that.myChart1.setOption(that.table1Option, true); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | initTable: function() { | 
|---|
|  |  |  | let that = this; | 
|---|
|  |  |  | this.tableOption.xAxis = { | 
|---|
|  |  |  | type: 'category', | 
|---|
|  |  |  | data: [], // x轴数据 | 
|---|
|  |  |  | name: '时间', // x轴名称 | 
|---|
|  |  |  | // x轴名称样式 | 
|---|
|  |  |  | nameTextStyle: { | 
|---|
|  |  |  | fontWeight: 300, | 
|---|
|  |  |  | fontSize: 15 | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | this.tableOption.yAxis = { | 
|---|
|  |  |  | type: 'value', | 
|---|
|  |  |  | name: '延迟率', // y轴名称 | 
|---|
|  |  |  | boundaryGap: [0, '100%'], | 
|---|
|  |  |  | max: 100, | 
|---|
|  |  |  | axisLabel: { | 
|---|
|  |  |  | show: true, | 
|---|
|  |  |  | interval: 'auto', | 
|---|
|  |  |  | formatter: '{value} %' | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | // y轴名称样式 | 
|---|
|  |  |  | nameTextStyle: { | 
|---|
|  |  |  | fontWeight: 300, | 
|---|
|  |  |  | fontSize: 15 | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | this.tableOption.dataZoom = [ | 
|---|
|  |  |  | { | 
|---|
|  |  |  | show: true, | 
|---|
|  |  |  | start: this.charZoomStart, | 
|---|
|  |  |  | end: this.charZoomEnd | 
|---|
|  |  |  | } | 
|---|
|  |  |  | ]; | 
|---|
|  |  |  | this.myChart = echarts.init(document.getElementById('ThreadsLoad')); | 
|---|
|  |  |  | this.myChart.setOption(this.tableOption); | 
|---|
|  |  |  | this.myChart.on('dataZoom', function(event) { | 
|---|
|  |  |  | if (event.batch) { | 
|---|
|  |  |  | that.charZoomStart = event.batch[0].start; | 
|---|
|  |  |  | that.charZoomEnd = event.batch[0].end; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | that.charZoomStart = event.start; | 
|---|
|  |  |  | that.charZoomEnd = event.end; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | this.initTable(); | 
|---|
|  |  |  | this.chartInterval = setInterval(this.updateData, 3000); | 
|---|
|  |  |  | this.mediaServer.getOnlineMediaServerList((data)=>{ | 
|---|
|  |  |  | this.mediaServerList = data.data; | 
|---|
|  |  |  | if (this.mediaServerList && this.mediaServerList.length > 0) { | 
|---|
|  |  |  | this.mediaServerChoose = this.mediaServerList[0].id | 
|---|
|  |  |  | this.loadCount = this.mediaServerList[0].count; | 
|---|
|  |  |  | this.updateData(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | destroyed() { | 
|---|
|  |  |  | clearInterval(this.chartInterval); //释放定时任务 | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | methods: { | 
|---|
|  |  |  | chooseMediaChange: function (val) { | 
|---|
|  |  |  | this.loadCount = 0 | 
|---|
|  |  |  | this.initTable() | 
|---|
|  |  |  | this.updateData(); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | updateData: function () { | 
|---|
|  |  |  | this.getThreadsLoad(); | 
|---|
|  |  |  | this.getLoadCount(); | 
|---|
|  |  |  | this.getAllSession(); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 获取线程状态 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | getThreadsLoad: function () { | 
|---|
|  |  |  | let that = this; | 
|---|
|  |  |  | if (that.mediaServerChoose != null) { | 
|---|
|  |  |  | this.$axios({ | 
|---|
|  |  |  | method: 'get', | 
|---|
|  |  |  | url: '/zlm/' + that.mediaServerChoose +'/index/api/getThreadsLoad' | 
|---|
|  |  |  | }).then(function (res) { | 
|---|
|  |  |  | if (res.data.code == 0) { | 
|---|
|  |  |  | that.tableOption.xAxis.data.push(new Date().toLocaleTimeString('chinese', { | 
|---|
|  |  |  | hour12: false | 
|---|
|  |  |  | })); | 
|---|
|  |  |  | that.table1Option.xAxis.data.push(new Date().toLocaleTimeString('chinese', { | 
|---|
|  |  |  | hour12: false | 
|---|
|  |  |  | })); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | this.table1Option.xAxis = { | 
|---|
|  |  |  | type: 'category', | 
|---|
|  |  |  | data: [], // x轴数据 | 
|---|
|  |  |  | name: '时间', // x轴名称 | 
|---|
|  |  |  | // x轴名称样式 | 
|---|
|  |  |  | nameTextStyle: { | 
|---|
|  |  |  | fontWeight: 300, | 
|---|
|  |  |  | fontSize: 15 | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | this.table1Option.yAxis = { | 
|---|
|  |  |  | type: 'value', | 
|---|
|  |  |  | name: '负载率', // y轴名称 | 
|---|
|  |  |  | boundaryGap: [0, '100%'], | 
|---|
|  |  |  | max: 100, | 
|---|
|  |  |  | axisLabel: { | 
|---|
|  |  |  | show: true, | 
|---|
|  |  |  | interval: 'auto', | 
|---|
|  |  |  | formatter: '{value} %' | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | // y轴名称样式 | 
|---|
|  |  |  | nameTextStyle: { | 
|---|
|  |  |  | fontWeight: 300, | 
|---|
|  |  |  | fontSize: 15 | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | this.table1Option.dataZoom = [ | 
|---|
|  |  |  | { | 
|---|
|  |  |  | show: true, | 
|---|
|  |  |  | start: this.charZoomStart, | 
|---|
|  |  |  | end: this.charZoomEnd | 
|---|
|  |  |  | } | 
|---|
|  |  |  | ]; | 
|---|
|  |  |  | this.myChart1 = echarts.init(document.getElementById('WorkThreadsLoad')); | 
|---|
|  |  |  | this.myChart1.setOption(this.table1Option); | 
|---|
|  |  |  | this.myChart1.on('dataZoom', function(event) { | 
|---|
|  |  |  | if (event.batch) { | 
|---|
|  |  |  | that.charZoomStart = event.batch[0].start; | 
|---|
|  |  |  | that.charZoomEnd = event.batch[0].end; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | that.charZoomStart = event.start; | 
|---|
|  |  |  | that.charZoomEnd = event.end; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | for (var i = 0; i < res.data.data.length; i++) { | 
|---|
|  |  |  | if (that.tableOption.series[i] === undefined) { | 
|---|
|  |  |  | let data = { | 
|---|
|  |  |  | data: [], | 
|---|
|  |  |  | type: 'line' | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | let data1 = { | 
|---|
|  |  |  | data: [], | 
|---|
|  |  |  | type: 'line' | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | data.data.push(res.data.data[i].delay); | 
|---|
|  |  |  | data1.data.push(res.data.data[i].load); | 
|---|
|  |  |  | that.tableOption.series.push(data); | 
|---|
|  |  |  | that.table1Option.series.push(data1); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | that.tableOption.series[i].data.push(res.data.data[i].delay); | 
|---|
|  |  |  | that.table1Option.series[i].data.push(res.data.data[i].load); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | that.tableOption.dataZoom[0].start = that.charZoomStart; | 
|---|
|  |  |  | that.tableOption.dataZoom[0].end = that.charZoomEnd; | 
|---|
|  |  |  | that.table1Option.dataZoom[0].start = that.charZoomStart; | 
|---|
|  |  |  | that.table1Option.dataZoom[0].end = that.charZoomEnd; | 
|---|
|  |  |  | //that.myChart = echarts.init(document.getElementById('ThreadsLoad')); | 
|---|
|  |  |  | that.myChart.setOption(that.tableOption, true); | 
|---|
|  |  |  | // that.myChart1 = echarts.init(document.getElementById('WorkThreadsLoad')); | 
|---|
|  |  |  | that.myChart1.setOption(that.table1Option, true); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | getAllSession: function() { | 
|---|
|  |  |  | let that = this; | 
|---|
|  |  |  | that.allSessionData = []; | 
|---|
|  |  |  | console.log("地址:"+'/zlm/index/api/getAllSession'); | 
|---|
|  |  |  | this.$axios({ | 
|---|
|  |  |  | method: 'get', | 
|---|
|  |  |  | url: '/zlm/index/api/getAllSession' | 
|---|
|  |  |  | }).then(function(res) { | 
|---|
|  |  |  | res.data.data.forEach(item => { | 
|---|
|  |  |  | let data = { | 
|---|
|  |  |  | peer_ip: item.peer_ip, | 
|---|
|  |  |  | local_ip: item.local_ip, | 
|---|
|  |  |  | typeid: item.typeid, | 
|---|
|  |  |  | id: item.id | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | that.allSessionData.push(data); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | getServerConfig: function() { | 
|---|
|  |  |  | let that = this; | 
|---|
|  |  |  | this.$axios({ | 
|---|
|  |  |  | method: 'get', | 
|---|
|  |  |  | url: '/zlm/index/api/getServerConfig' | 
|---|
|  |  |  | }).then(function(res) { | 
|---|
|  |  |  | that.serverConfig = res.data.data[0]; | 
|---|
|  |  |  | that.visible = true; | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | reStartServer: function() { | 
|---|
|  |  |  | let that = this; | 
|---|
|  |  |  | this.$confirm('此操作将重启媒体服务器, 是否继续?', '提示', { | 
|---|
|  |  |  | confirmButtonText: '确定', | 
|---|
|  |  |  | cancelButtonText: '取消', | 
|---|
|  |  |  | type: 'warning' | 
|---|
|  |  |  | }).then(() => { | 
|---|
|  |  |  | let that = this; | 
|---|
|  |  |  | this.$axios({ | 
|---|
|  |  |  | method: 'get', | 
|---|
|  |  |  | url: '/zlm/index/api/restartServer' | 
|---|
|  |  |  | }).then(function(res) { | 
|---|
|  |  |  | that.getAllSession(); | 
|---|
|  |  |  | if (res.data.code == 0) { | 
|---|
|  |  |  | that.$message({ | 
|---|
|  |  |  | type: 'success', | 
|---|
|  |  |  | message: '操作完成' | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | deleteRow: function(index, tabledata) { | 
|---|
|  |  |  | let that = this; | 
|---|
|  |  |  | this.$confirm('此操作将断开该通信链路, 是否继续?', '提示', { | 
|---|
|  |  |  | confirmButtonText: '确定', | 
|---|
|  |  |  | cancelButtonText: '取消', | 
|---|
|  |  |  | type: 'warning' | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | .then(() => { | 
|---|
|  |  |  | that.deleteSession(tabledata[index].id); | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | .catch(() => { | 
|---|
|  |  |  | console.log('id:' + JSON.stringify(tabledata[index])); | 
|---|
|  |  |  | this.$message({ | 
|---|
|  |  |  | type: 'info', | 
|---|
|  |  |  | message: '已取消删除' | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | console.log(JSON.stringify(tabledata[index])); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | deleteSession: function(id) { | 
|---|
|  |  |  | let that = this; | 
|---|
|  |  |  | this.$axios({ | 
|---|
|  |  |  | method: 'get', | 
|---|
|  |  |  | url: '/zlm/index/api/kick_session&id=' + id | 
|---|
|  |  |  | }).then(function(res) { | 
|---|
|  |  |  | that.getAllSession(); | 
|---|
|  |  |  | that.$message({ | 
|---|
|  |  |  | type: 'success', | 
|---|
|  |  |  | message: '删除成功!' | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | getLoadCount: function (){ | 
|---|
|  |  |  | let that = this; | 
|---|
|  |  |  | if (that.mediaServerChoose != null) { | 
|---|
|  |  |  | that.mediaServer.getMediaServer(that.mediaServerChoose, (data)=>{ | 
|---|
|  |  |  | if (data.code == 0) { | 
|---|
|  |  |  | that.loadCount = data.data.count | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | initTable: function () { | 
|---|
|  |  |  | let that = this; | 
|---|
|  |  |  | this.tableOption.xAxis = { | 
|---|
|  |  |  | type: 'category', | 
|---|
|  |  |  | data: [], // x轴数据 | 
|---|
|  |  |  | name: '时间', // x轴名称 | 
|---|
|  |  |  | // x轴名称样式 | 
|---|
|  |  |  | nameTextStyle: { | 
|---|
|  |  |  | fontWeight: 300, | 
|---|
|  |  |  | fontSize: 15 | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | this.tableOption.yAxis = { | 
|---|
|  |  |  | type: 'value', | 
|---|
|  |  |  | name: '延迟率', // y轴名称 | 
|---|
|  |  |  | boundaryGap: [0, '100%'], | 
|---|
|  |  |  | max: 100, | 
|---|
|  |  |  | axisLabel: { | 
|---|
|  |  |  | show: true, | 
|---|
|  |  |  | interval: 'auto', | 
|---|
|  |  |  | formatter: '{value} %' | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | // y轴名称样式 | 
|---|
|  |  |  | nameTextStyle: { | 
|---|
|  |  |  | fontWeight: 300, | 
|---|
|  |  |  | fontSize: 15 | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | this.tableOption.dataZoom = [{ | 
|---|
|  |  |  | show: true, | 
|---|
|  |  |  | start: this.charZoomStart, | 
|---|
|  |  |  | end: this.charZoomEnd | 
|---|
|  |  |  | }]; | 
|---|
|  |  |  | this.myChart = echarts.init(document.getElementById('ThreadsLoad')); | 
|---|
|  |  |  | this.myChart.setOption(this.tableOption); | 
|---|
|  |  |  | this.myChart.on('dataZoom', function (event) { | 
|---|
|  |  |  | if (event.batch) { | 
|---|
|  |  |  | that.charZoomStart = event.batch[0].start; | 
|---|
|  |  |  | that.charZoomEnd = event.batch[0].end; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | that.charZoomStart = event.start; | 
|---|
|  |  |  | that.charZoomEnd = event.end; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | this.table1Option.xAxis = { | 
|---|
|  |  |  | type: 'category', | 
|---|
|  |  |  | data: [], // x轴数据 | 
|---|
|  |  |  | name: '时间', // x轴名称 | 
|---|
|  |  |  | // x轴名称样式 | 
|---|
|  |  |  | nameTextStyle: { | 
|---|
|  |  |  | fontWeight: 300, | 
|---|
|  |  |  | fontSize: 15 | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | this.table1Option.yAxis = { | 
|---|
|  |  |  | type: 'value', | 
|---|
|  |  |  | name: '负载率', // y轴名称 | 
|---|
|  |  |  | boundaryGap: [0, '100%'], | 
|---|
|  |  |  | max: 100, | 
|---|
|  |  |  | axisLabel: { | 
|---|
|  |  |  | show: true, | 
|---|
|  |  |  | interval: 'auto', | 
|---|
|  |  |  | formatter: '{value} %' | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | // y轴名称样式 | 
|---|
|  |  |  | nameTextStyle: { | 
|---|
|  |  |  | fontWeight: 300, | 
|---|
|  |  |  | fontSize: 15 | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | this.table1Option.dataZoom = [{ | 
|---|
|  |  |  | show: true, | 
|---|
|  |  |  | start: this.charZoomStart, | 
|---|
|  |  |  | end: this.charZoomEnd | 
|---|
|  |  |  | }]; | 
|---|
|  |  |  | this.myChart1 = echarts.init(document.getElementById('WorkThreadsLoad')); | 
|---|
|  |  |  | this.myChart1.setOption(this.table1Option); | 
|---|
|  |  |  | this.myChart1.on('dataZoom', function (event) { | 
|---|
|  |  |  | if (event.batch) { | 
|---|
|  |  |  | that.charZoomStart = event.batch[0].start; | 
|---|
|  |  |  | that.charZoomEnd = event.batch[0].end; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | that.charZoomStart = event.start; | 
|---|
|  |  |  | that.charZoomEnd = event.end; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  |  | 
|---|
|  |  |  | getAllSession: function () { | 
|---|
|  |  |  | let that = this; | 
|---|
|  |  |  | that.allSessionData = []; | 
|---|
|  |  |  | this.$axios({ | 
|---|
|  |  |  | method: 'get', | 
|---|
|  |  |  | url: '/zlm/' + that.mediaServerChoose +'/index/api/getAllSession' | 
|---|
|  |  |  | }).then(function (res) { | 
|---|
|  |  |  | res.data.data.forEach(item => { | 
|---|
|  |  |  | let data = { | 
|---|
|  |  |  | peer_ip: item.peer_ip, | 
|---|
|  |  |  | local_ip: item.local_ip, | 
|---|
|  |  |  | typeid: item.typeid, | 
|---|
|  |  |  | id: item.id | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | that.allSessionData.push(data); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | getServerConfig: function () { | 
|---|
|  |  |  | let that = this; | 
|---|
|  |  |  | this.$axios({ | 
|---|
|  |  |  | method: 'get', | 
|---|
|  |  |  | url: '/zlm/' + that.mediaServerChoose +'/index/api/getServerConfig' | 
|---|
|  |  |  | }).then(function (res) { | 
|---|
|  |  |  | that.serverConfig = res.data.data[0]; | 
|---|
|  |  |  | that.visible = true; | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | getWVPServerConfig: function () { | 
|---|
|  |  |  | let that = this; | 
|---|
|  |  |  | this.$axios({ | 
|---|
|  |  |  | method: 'get', | 
|---|
|  |  |  | url: '/api/server/config' | 
|---|
|  |  |  | }).then(function (res) { | 
|---|
|  |  |  | console.log(res) | 
|---|
|  |  |  | that.wvpServerConfig = res.data.data; | 
|---|
|  |  |  | that.wvpVisible = true; | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | this.$axios({ | 
|---|
|  |  |  | method: 'get', | 
|---|
|  |  |  | url: '/api/server/version' | 
|---|
|  |  |  | }).then(function (res) { | 
|---|
|  |  |  | console.log(res) | 
|---|
|  |  |  | that.wvpServerVersion = res.data.data; | 
|---|
|  |  |  | that.wvpVisible = true; | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | reStartServer: function () { | 
|---|
|  |  |  | let that = this; | 
|---|
|  |  |  | this.$confirm('此操作将重启媒体服务器, 是否继续?', '提示', { | 
|---|
|  |  |  | confirmButtonText: '确定', | 
|---|
|  |  |  | cancelButtonText: '取消', | 
|---|
|  |  |  | type: 'warning' | 
|---|
|  |  |  | }).then(() => { | 
|---|
|  |  |  | let that = this; | 
|---|
|  |  |  | this.$axios({ | 
|---|
|  |  |  | method: 'get', | 
|---|
|  |  |  | url: '/zlm/' + that.mediaServerChoose +'/index/api/restartServer' | 
|---|
|  |  |  | }).then(function (res) { | 
|---|
|  |  |  | that.getAllSession(); | 
|---|
|  |  |  | if (res.data.code == 0) { | 
|---|
|  |  |  | that.$message({ | 
|---|
|  |  |  | type: 'success', | 
|---|
|  |  |  | message: '操作完成' | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | deleteRow: function (index, tabledata) { | 
|---|
|  |  |  | let that = this; | 
|---|
|  |  |  | this.$confirm('此操作将断开该通信链路, 是否继续?', '提示', { | 
|---|
|  |  |  | confirmButtonText: '确定', | 
|---|
|  |  |  | cancelButtonText: '取消', | 
|---|
|  |  |  | type: 'warning' | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | .then(() => { | 
|---|
|  |  |  | that.deleteSession(tabledata[index].id); | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | .catch(() => { | 
|---|
|  |  |  | console.log('id:' + JSON.stringify(tabledata[index])); | 
|---|
|  |  |  | this.$message({ | 
|---|
|  |  |  | type: 'info', | 
|---|
|  |  |  | message: '已取消删除' | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | console.log(JSON.stringify(tabledata[index])); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | deleteSession: function (id) { | 
|---|
|  |  |  | let that = this; | 
|---|
|  |  |  | this.$axios({ | 
|---|
|  |  |  | method: 'get', | 
|---|
|  |  |  | url: '/zlm/' + that.mediaServerChoose +'/index/api/kick_session&id=' + id | 
|---|
|  |  |  | }).then(function (res) { | 
|---|
|  |  |  | that.getAllSession(); | 
|---|
|  |  |  | that.$message({ | 
|---|
|  |  |  | type: 'success', | 
|---|
|  |  |  | message: '删除成功!' | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | </script> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <style> | 
|---|
|  |  |  | #app { | 
|---|
|  |  |  | height: 100%; | 
|---|
|  |  |  | height: 100%; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .control-table { | 
|---|
|  |  |  | background-color: #ffffff; | 
|---|
|  |  |  | height: 25rem; | 
|---|
|  |  |  | background-color: #ffffff; | 
|---|
|  |  |  | height: 25rem; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .table-c { | 
|---|
|  |  |  | border-right: 1px solid #dcdcdc; | 
|---|
|  |  |  | border-bottom: 1px solid #dcdcdc; | 
|---|
|  |  |  | border-right: 1px solid #dcdcdc; | 
|---|
|  |  |  | border-bottom: 1px solid #dcdcdc; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .table-c td { | 
|---|
|  |  |  | border-left: 1px solid #dcdcdc; | 
|---|
|  |  |  | border-top: 1px solid #dcdcdc; | 
|---|
|  |  |  | padding: 0.2rem; | 
|---|
|  |  |  | border-left: 1px solid #dcdcdc; | 
|---|
|  |  |  | border-top: 1px solid #dcdcdc; | 
|---|
|  |  |  | padding: 0.2rem; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .el-table { | 
|---|
|  |  |  | width: 99.9% !important; | 
|---|
|  |  |  | width: 99.9% !important; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | </style> | 
|---|