| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209 |
- /* global d3 */
- /*eslint-disable no-unused-vars*/
- var Gauge = function (wrapper, percent, options) {
- if (!wrapper || !percent) {
- //console.error('wrapper and percentage are required. Please check your code.');
- return;
- }
- var label = (!options.label) ? '' : options.label;
- var textClass = options.textClass || 'progress-meter';
- var width = options.width || 200,
- height = options.height || 200,
- twoPi = 2 * Math.PI,
- progress = 0,
- total = 100,
- formatPercent = d3.format('.0%');
- var colorScale = d3.scaleLinear()
- .domain([0, 0.40, 0.50, 1])
- .range(['green', 'green', 'goldenrod', 'red']);
- var arc = d3.arc()
- .startAngle(0)
- .innerRadius(width * 0.4)
- .outerRadius(width * 0.5)
- ;
- var svg = d3.select(wrapper).append('svg')
- .attr('width', width)
- .attr('height', height)
- .attr('fill', '#2E7AF9')
- .append('g')
- .attr('transform', 'translate(' + width / 2 + ',' + height / 2 + ')');
- var meter = svg.append('g')
- .attr('class', textClass);
- meter.append('path')
- .attr('class', 'background')
- .attr('d', arc.endAngle(twoPi));
- var foreground = meter.append('path')
- .attr('class', 'foreground');
- var text = meter.append('text')
- .attr('text-anchor', 'middle');
- var text2 = meter.append('text')
- .attr('y', height * 0.15)
- .attr('text-anchor', 'middle')
- .attr('class', 'text2');
- text2.text(label);
- var animate = function (percentage) {
- var i = d3.interpolate(progress, percentage);
- foreground.transition().duration(2000)
- .tween('progress', function () {
- return function (t) {
- progress = i(t);
- foreground.style('fill', colorScale(progress));
- foreground.attr('d', arc.endAngle(twoPi * progress));
- text.text(formatPercent(progress));
- };
- });
- };
- // init
- (function () {
- setTimeout(function () {
- animate(percent);
- }, 500);
- })();
- return {
- update: function (newPercent) {
- animate(newPercent);
- }
- };
- };
- function upTime(countTo, el) {
- var wrapper = document.getElementById('card-uptime');
- var element = document.getElementById(el);
- var difference = new Date(countTo*1000);
- var days = Math.floor(difference / (60 * 60 * 1000 * 24) * 1);
- var hours = Math.floor((difference % (60 * 60 * 1000 * 24)) / (60 * 60 * 1000) * 1);
- var mins = Math.floor(((difference % (60 * 60 * 1000 * 24)) % (60 * 60 * 1000)) / (60 * 1000) * 1);
- var secs = Math.floor((((difference % (60 * 60 * 1000 * 24)) % (60 * 60 * 1000)) % (60 * 1000)) / 1000 * 1);
- clearTimeout(upTime.to);
- if (isNaN(days) || isNaN(hours) || isNaN(mins) || isNaN(secs) ) {
- wrapper.style.display = 'none';
- } else {
- days = (days == 1) ? days + ' day ' : days + ' days ';
- hours = (hours == 1) ? hours + ' hour ' : hours + ' hours ';
- mins = (mins == 1) ? mins + ' minute ' : mins + ' minutes ';
- secs = (secs == 1) ? secs + ' second ' : secs + ' seconds';
- var timeString = '<span class="upTime">' + days + hours + mins + secs + '</span>';
- element.innerHTML = timeString;
- wrapper.style.display = 'block';
- upTime.to = setTimeout(function() {
- countTo = countTo + 1;
- upTime(countTo, el);
- },1000);
- }
- }
- var analytics = document.getElementById('expiredSts');
- var casStatistics = function (urls, messages) {
- var timers = {
- memory: 5000,
- availability: 15000,
- tickets: 5000
- };
- var memoryGauage;
- var getRemoteJSON = function(url) {
- return $.getJSON( url);
- };
- var tickets = function() {
- var data = getRemoteJSON(urls.tickets);
- data.done(function( data ) {
- updateElementValue( 'unexpiredTgts', data.unexpiredTgts );
- updateElementValue( 'unexpiredSts', data.unexpiredSts );
- updateElementValue( 'expiredTgts', data.expiredTgts );
- updateElementValue( 'expiredSts', data.expiredSts );
- setTimeout( tickets, timers.tickets );
- });
- };
- var updateElementValue = function(el, val) {
- $( '#' + el ).text( val );
- };
- var memory = function() {
- var data = getRemoteJSON(urls.memory);
- data.done(function( data ) {
- updateElementValue('freeMemory', data.freeMemory.toFixed(2));
- // updateElementValue('totalMemory', data.totalMemory);
- // updateElementValue('maxMemory', data.maxMemory);
- // updateElementValue('availableProcessors', data.availableProcessors);
- var memCalc = (data.totalMemory / data.maxMemory).toFixed(2);
- if ( !memoryGauage ) {
- memoryGauage = new Gauge('#maxMemoryGauge', memCalc, {width: 200, height: 200,
- label: messages.memoryGaugeTitle,
- textClass: 'runtimeStatistics'});
- } else {
- memoryGauage.update( memCalc );
- }
- setTimeout( memory, timers.memory );
- });
- };
- var availability = function() {
- var data = getRemoteJSON(urls.availability);
- data.done(function( data ) {
- updateElementValue('upTime', data.upTime);
- setTimeout( availability, timers.availability );
- });
- };
- // initialization *******
- ( function init () {
- $('#loading, .statisticsView').toggle();
- tickets();
- memory();
- // availability();
- })();
- // Public Methods
- return {
- getTickets: function() {
- return tickets();
- },
- getMemory: function() {
- return memory();
- },
- getAvailability: function() {
- return availability();
- },
- updateGauge: function(val){
- if (memoryGauage) {
- memoryGauage.update( val );
- } else {
- return 'unable to update';
- }
- }
- };
- };
|