diff --git a/ui/scripts/metrics.js b/ui/scripts/metrics.js index 23faafea759..f0c031b4cf5 100644 --- a/ui/scripts/metrics.js +++ b/ui/scripts/metrics.js @@ -780,8 +780,9 @@ url: createURL('listVirtualMachines'), data: data, success: function(json) { - var items = json.listvirtualmachinesresponse.virtualmachine; - if (items) { + var items = []; + if (json && json.listvirtualmachinesresponse && json.listvirtualmachinesresponse.virtualmachine) { + items = json.listvirtualmachinesresponse.virtualmachine; $.each(items, function(idx, vm) { items[idx].cores = vm.cpunumber; items[idx].cputotal = (parseFloat(vm.cpunumber) * parseFloat(vm.cpuspeed)).toFixed(2) + 'Mhz'; @@ -826,4 +827,94 @@ }; + // Volumes Metrics + cloudStack.sections.metrics.volumes = { + title: 'label.metrics', + listView: { + id: 'volumes', + fields: { + name: { + label: 'label.metrics.name' + }, + state: { + label: 'label.metrics.state', + converter: function (str) { + // For localization + return str; + }, + indicator: { + 'Ready': 'on', + 'Allocated': 'warning', + 'Destroyed': 'off' + }, + compact: true + }, + vmname: { + label: 'label.metrics.vm.name' + }, + diskoffering: { + label: 'label.metrics.disk.offering' + }, + disksize: { + label: 'label.metrics.disk.size' + }, + storagetype: { + label: 'label.metrics.disk.storagetype' + }, + }, + dataProvider: function(args) { + console.log('in vlumes'); + console.log(args); + var data = {listAll: true}; + listViewDataProvider(args, data); + if (args.context.metricsFilterData && args.context.metricsFilterData.key && args.context.metricsFilterData.value) { + data[args.context.metricsFilterData.key] = args.context.metricsFilterData.value; + } + $.ajax({ + url: createURL('listVolumes'), + data: data, + success: function(json) { + var items = []; + if (json && json.listvolumesresponse && json.listvolumesresponse.volume) { + items = json.listvolumesresponse.volume; + $.each(items, function(idx, volume) { + items[idx].name = volume.name; + items[idx].vmname = volume.vmname; + items[idx].diskoffering = volume.diskofferingname; + items[idx].disksize = parseFloat(volume.size)/(1024.0*1024.0*1024.0) + "GB"; + items[idx].storagetype = volume.storagetype; + + var keys = [{'memoryused': 'memused'}, + {'networkkbsread': 'networkread'}, + {'networkkbswrite': 'networkwrite'}, + {'diskkbsread': 'diskread'}, + {'diskkbswrite': 'diskwrite'}, + {'diskioread': 'diskiopstotal'}]; + for (keyIdx in keys) { + var map = keys[keyIdx]; + var key = Object.keys(map)[0]; + var uiKey = map[key]; + if (!volume.hasOwnProperty(key)) { + items[idx][uiKey] = 'N/A'; + } + } + }); + } + args.response.success({ + data: items + }); + } + }); + }, + browseBy: { + filterBy: 'virtualmachineid', + resource: 'vms' + }, + detailView: cloudStack.sections.storage.sections.volumes.listView.detailView + } + }; + + + + })(cloudStack); diff --git a/ui/scripts/ui-custom/metricsView.js b/ui/scripts/ui-custom/metricsView.js index f66cbc6c65d..676ba5477f6 100644 --- a/ui/scripts/ui-custom/metricsView.js +++ b/ui/scripts/ui-custom/metricsView.js @@ -36,6 +36,7 @@ metricsListView = cloudStack.sections.metrics.instances.listView; metricsLabel = _l('label.instances') + ' ' + metricsLabel; } else if (args.resource == 'volumes') { + metricsListView = cloudStack.sections.metrics.volumes.listView; metricsLabel = _l('label.volumes') + ' ' + metricsLabel; }