mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-10-26 08:42:29 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			206 lines
		
	
	
		
			9.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			206 lines
		
	
	
		
			9.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| // Licensed to the Apache Software Foundation (ASF) under one
 | |
| // or more contributor license agreements.  See the NOTICE file
 | |
| // distributed with this work for additional information
 | |
| // regarding copyright ownership.  The ASF licenses this file
 | |
| // to you 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.
 | |
| (function($, cloudStack) {
 | |
|     cloudStack.uiCustom.dashboard = function() {
 | |
|         /**
 | |
|          * Retrieve chart data
 | |
|          */
 | |
|         var getData = function() {
 | |
|             // Populate data
 | |
|             $dashboard.find('[data-item]').hide();
 | |
|             cloudStack.sections.dashboard[dashboardType].dataProvider({
 | |
|                 response: {
 | |
|                     success: function(args) {
 | |
|                         var $browser = $dashboard.closest('#browser .container');
 | |
|                         var data = args.data;
 | |
| 
 | |
|                         // Iterate over data; populate corresponding DOM elements
 | |
|                         $.each(data, function(key, value) {
 | |
|                             var $elem = $dashboard.find('[data-item=' + key + ']');
 | |
| 
 | |
|                             // This assumes an array of data
 | |
|                             if ($elem.is('ul')) {
 | |
|                                 $elem.show();
 | |
|                                 var $liTmpl = $elem.find('li').remove();
 | |
|                                 $(value).each(function() {
 | |
|                                     var item = this;
 | |
|                                     var $li = $liTmpl.clone().appendTo($elem).hide();
 | |
| 
 | |
|                                     if ($li.is('.zone-stats li')) {
 | |
|                                         $li.click(function() {
 | |
|                                             $browser.cloudBrowser('addPanel', {
 | |
|                                                 title: _l('label.zone.details'),
 | |
|                                                 parent: $dashboard.closest('.panel'),
 | |
|                                                 maximizeIfSelected: true,
 | |
|                                                 complete: function($newPanel) {
 | |
|                                                     $newPanel.detailView($.extend(true, {},
 | |
|                                                         cloudStack.sections.dashboard.admin.zoneDetailView, {
 | |
|                                                             $browser: $browser,
 | |
|                                                             context: $.extend(true, {}, cloudStack.context, {
 | |
|                                                                 physicalResources: [{
 | |
|                                                                     id: item.zoneID
 | |
|                                                                 }]
 | |
|                                                             })
 | |
|                                                         }
 | |
|                                                     ));
 | |
|                                                 }
 | |
|                                             });
 | |
|                                         });
 | |
|                                     }
 | |
| 
 | |
|                                     $.each(item, function(arrayKey, arrayValue) {
 | |
|                                         if (!arrayValue) arrayValue = '';
 | |
| 
 | |
|                                         var $arrayElem = $li.find('[data-list-item=' + arrayKey + ']');
 | |
| 
 | |
|                                         $arrayElem.each(function() {
 | |
|                                             var $arrayElem = $(this);
 | |
| 
 | |
|                                             if ($arrayElem.hasClass('pie-chart')) {
 | |
|                                                 // Generate pie chart
 | |
|                                                 // -- values above 80 have a red color
 | |
|                                                 setTimeout(function() {
 | |
|                                                     pieChart($arrayElem, [{
 | |
|                                                         data: [
 | |
|                                                             [1, 100 - arrayValue]
 | |
|                                                         ],
 | |
|                                                         color: '#54697e'
 | |
|                                                     }, {
 | |
|                                                         data: [
 | |
|                                                             [1, arrayValue]
 | |
|                                                         ],
 | |
|                                                         color: arrayValue < 80 ? 'orange' : 'red'
 | |
|                                                     }]);
 | |
|                                                 });
 | |
|                                             } else {
 | |
|                                                 if ($li.attr('concat-value')) {
 | |
|                                                     var val = $(_l(arrayValue).toString().split(', ')).map(function() {
 | |
|                                                         var val = _s(this.toString());
 | |
|                                                         var concatValue = parseInt($li.attr('concat-value'));
 | |
| 
 | |
|                                                         return val.length >= concatValue ?
 | |
|                                                             val.substring(0, concatValue).concat('...') : val;
 | |
|                                                     }).toArray().join('<br />');
 | |
| 
 | |
|                                                     $arrayElem.html(val);
 | |
|                                                 } else {
 | |
|                                                     $arrayElem.html(_s(_l(arrayValue)));
 | |
|                                                 }
 | |
| 
 | |
|                                                 $arrayElem.attr('title', _l(arrayValue).toString().replace('<br/>', ', '));
 | |
|                                             }
 | |
|                                         });
 | |
|                                     });
 | |
| 
 | |
|                                     $li.attr({
 | |
|                                         title: _s(_l(item.description))
 | |
|                                     });
 | |
| 
 | |
|                                     $li.fadeIn();
 | |
|                                 });
 | |
|                             } else {
 | |
|                                 $elem.each(function() {
 | |
|                                     var $item = $(this);
 | |
|                                     if ($item.hasClass('chart-line')) {
 | |
|                                         $item.show().animate({
 | |
|                                             width: value + '%'
 | |
|                                         });
 | |
|                                     } else {
 | |
|                                         $item.hide().html(_s(value)).fadeIn();
 | |
|                                     }
 | |
|                                 });
 | |
|                             }
 | |
|                         });
 | |
|                     }
 | |
|                 }
 | |
|             });
 | |
|         };
 | |
| 
 | |
|         /**
 | |
|          * Render circular pie chart, without labels
 | |
|          */
 | |
|         var pieChart = function($container, data) {
 | |
|             $container.css({
 | |
|                 width: 70,
 | |
|                 height: 66
 | |
|             });
 | |
|             $.plot($container, data, {
 | |
|                 width: 100,
 | |
|                 height: 100,
 | |
|                 series: {
 | |
|                     pie: {
 | |
|                         innerRadius: 0.7,
 | |
|                         show: true,
 | |
|                         label: {
 | |
|                             show: false
 | |
|                         }
 | |
|                     }
 | |
|                 },
 | |
|                 legend: {
 | |
|                     show: false
 | |
|                 }
 | |
|             });
 | |
|         };
 | |
| 
 | |
|         // Determine if user or admin dashboard should be shown
 | |
|         var dashboardType = cloudStack.sections.dashboard.adminCheck({
 | |
|             context: cloudStack.context
 | |
|         }) ? 'admin' : 'user';
 | |
| 
 | |
|         // Get dashboard layout
 | |
|         var $dashboard = $('#template').find('div.dashboard.' + dashboardType).clone();
 | |
| 
 | |
|         // Update text
 | |
|         $dashboard.find('.button.view-all').html(_l('label.view.all'));
 | |
|         $dashboard.find('.dashboard-container.sub.alerts.first .top .title span').html(_l('label.general.alerts'));
 | |
|         $dashboard.find('.dashboard-container.sub.alerts.last .top .title span').html(_l('label.host.alerts'));
 | |
|         $dashboard.find('.dashboard-container.head .top .title span').html(_l('label.system.capacity'));
 | |
| 
 | |
|         // View all action
 | |
|         $dashboard.find('.view-all').click(function() {
 | |
|             var $browser = $('#browser .container');
 | |
| 
 | |
|             if ($(this).hasClass('network')) $('#navigation li.network').click();
 | |
|             else {
 | |
|                 $browser.cloudBrowser('addPanel', {
 | |
|                     title: $dashboard.hasClass('admin') ? 'Alerts' : 'Events',
 | |
|                     maximizeIfSelected: true,
 | |
|                     complete: function($newPanel) {
 | |
|                         $newPanel.listView({
 | |
|                             $browser: $browser,
 | |
|                             context: cloudStack.context,
 | |
|                             listView: $dashboard.hasClass('admin') ? cloudStack.sections.events.sections.alerts.listView : cloudStack.sections.events.sections.events.listView // Users cannot see events
 | |
|                         });
 | |
|                     }
 | |
|                 });
 | |
|             };
 | |
|         });
 | |
| 
 | |
|         //Fetch Latest action
 | |
|         $dashboard.find('.fetch-latest').click(function() {
 | |
|             window.fetchLatestflag = 1;
 | |
|             var $browser = $('#browser .container');
 | |
| 
 | |
|             if ($(this).hasClass('fetch-latest')) $('#navigation li.dashboard').click();
 | |
|         });
 | |
| 
 | |
|         getData();
 | |
| 
 | |
|         return $dashboard;
 | |
|     };
 | |
| }(jQuery, cloudStack));
 |