blob: e2b78de4c387a83785cef7f9a0d2953659d8cbbf [file] [log] [blame]
/*
* Copyright 2017-present Open Networking Foundation
* Licensed under the Apache License, Version 2.0 (the 'License');
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an 'AS IS' BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import {IMicrosemiStats, IMicrosemiStatsData} from './stats-service';
import './cfmstat.component.scss';
class CfmStatComponent {
static $inject = [
'$interval',
'$stateParams',
'MicrosemiStats'
];
public options = {
animation: {
duration: 0
},
scales: {
yAxes: [{
ticks: {
beginAtZero: true,
fontColor: '#fff',
},
gridLines: {
color: '#555',
zeroLineColor: '#888'
}
}],
xAxes: [{
ticks: {
beginAtZero: true,
fontColor: '#fff',
},
gridLines: {
color: '#555'
}
}]
},
};
public lineOptions = {
animation: {
duration: 0
},
scales: {
yAxes: [{
ticks: {
beginAtZero: true,
callback: val => `${(Math.round(val * 1000) / 1000).toFixed(3)} ms`,
fontColor: '#fff',
},
gridLines: {
color: '#555',
zeroLineColor: '#888'
}
}],
xAxes: [{
ticks: {
beginAtZero: true,
fontColor: '#fff',
},
gridLines: {
color: '#555',
}
}]
},
bezierCurve: false
};
public lineChart = {
series: ['Jitter Avg', 'Jitter Max', 'Jitter Min', 'Delay Avg', 'Delay Max', 'Delay Min'],
labels: [],
data: [],
dataset: []
};
public delayBin = {
series: ['Current Delay Bin'],
labels: ['0 - 10 ms', '10 - 20 ms', '20 - 37 ms', '> 37 ms'],
data: [],
dataset: {
backgroundColor: '#6f6db9'
}
};
public jitterBin = {
series: ['Current Jitter Bin'],
labels: ['0 - 3 ms', '3 - 8 ms', '8 - 100 ms', '> 100 ms'],
data: [],
dataset: {
backgroundColor: '#ffa500'
}
};
public allLineColors = ['#c55d01', '#ffa500', '#8b0000', '#6f6db9', '#add8e6', '#00008b'];
public lineColors = this.allLineColors;
public lineFill = [
{fill: false, borderColor: '#c55d01'},
{fill: false, borderColor: '#ffa500'},
{fill: false, borderColor: '#8b0000'},
{fill: false, borderColor: '#6f6db9'},
{fill: false, borderColor: '#add8e6'},
{fill: false, borderColor: '#00008b'}];
public graphOption = 'both';
public graphTitle = 'Delay and Jitter Graph';
public linedata = [];
constructor(
private $interval: ng.IIntervalService,
private $stateParams: ng.ui.IStateParamsService,
private MicrosemiStats: IMicrosemiStats,
) {
}
$onInit() {
const load = () => {
this.MicrosemiStats.get(this.$stateParams.mdName, this.$stateParams.maName, this.$stateParams.mepId, this.$stateParams.dmId || 1)
.then((res: IMicrosemiStatsData) => {
const data = this.MicrosemiStats.getAllData(res);
this.linedata = data.line.data;
this.lineChart.labels = data.line.labels;
this.lineChart.data = data.line.data;
this.delayBin.data = data.delay.data;
this.jitterBin.data = data.jitter.data;
});
};
load();
this.renderGraph();
this.$interval(() => {
load();
}, 1000 * 60);
}
renderGraph() : void {
this.graphTitle = this.graphTitleRender();
this.graphDisplayRender();
}
graphTitleRender() : string {
let output;
switch (this.graphOption) {
default:
case 'both':
output = 'Delay and Jitter Graph';
break;
case 'delay':
output = 'Delay Graph';
break;
case 'jitter':
output = 'Jitter Graph';
break;
}
return output;
}
graphDisplayRender() : void {
switch (this.graphOption) {
default:
case 'both':
this.lineChart.series = ['Jitter Avg', 'Jitter Max', 'Jitter Min', 'Delay Avg', 'Delay Max', 'Delay Min'];
this.lineChart.data = this.linedata;
this.lineChart.dataset = this.lineFill;
this.lineColors = this.allLineColors;
break;
case 'delay':
this.lineChart.series = ['Delay Avg', 'Delay Max', 'Delay Min'];
this.lineChart.data = this.linedata.slice(3);
this.lineChart.dataset = this.lineFill.slice(3);
this.lineColors = this.allLineColors.slice(3);
break;
case 'jitter':
this.lineChart.series = ['Jitter Avg', 'Jitter Max', 'Jitter Min'];
this.lineChart.data = this.linedata.slice(0, 3);
this.lineChart.dataset = this.lineFill.slice(0, 3);
this.lineColors = this.allLineColors.slice(0, 3);
break;
}
}
}
export const cfmStatComponent: angular.IComponentOptions = {
template: require('./cfmstat.component.html'),
controllerAs: 'vm',
controller: CfmStatComponent
};