|
17 | 17 | (function($, cloudStack) { |
18 | 18 |
|
19 | 19 | cloudStack.uiCustom.metricsView = function(args) { |
20 | | - return function() { |
| 20 | + return function(ctxArgs) { |
| 21 | + |
21 | 22 | var metricsListView = cloudStack.sections.metrics.listView; |
22 | 23 | var metricsLabel = _l('label.metrics'); |
| 24 | + var context = {}; |
| 25 | + if (ctxArgs && ctxArgs.hasOwnProperty('context')) { |
| 26 | + context = ctxArgs.context; |
| 27 | + } |
23 | 28 |
|
24 | 29 | if (args.resource == 'zones') { |
25 | | - metricsListView = cloudStack.sections.metrics.zones.listView; |
26 | 30 | metricsLabel = _l('label.zones') + ' ' + metricsLabel; |
| 31 | + metricsListView = cloudStack.sections.metrics.zones.listView; |
| 32 | + |
27 | 33 | } else if (args.resource == 'clusters') { |
28 | | - metricsListView = cloudStack.sections.metrics.clusters.listView; |
29 | 34 | metricsLabel = _l('label.clusters') + ' ' + metricsLabel; |
| 35 | + metricsListView = cloudStack.sections.metrics.clusters.listView; |
| 36 | + |
30 | 37 | } else if (args.resource == 'hosts') { |
31 | | - metricsListView = cloudStack.sections.metrics.hosts.listView; |
32 | 38 | metricsLabel = _l('label.hosts') + ' ' + metricsLabel; |
| 39 | + metricsListView = cloudStack.sections.metrics.hosts.listView; |
| 40 | + |
| 41 | + if (context && !context.filterBy) { |
| 42 | + if (context.hasOwnProperty('clusters') && context.clusters[0]) { |
| 43 | + context.filterBy = 'clusterid'; |
| 44 | + context.id = context.clusters[0].id; |
| 45 | + } |
| 46 | + if (context.hasOwnProperty('instances') && context.instances[0]) { |
| 47 | + context.filterBy = 'virtualmachineid'; |
| 48 | + context.id = context.instances[0].id; |
| 49 | + } |
| 50 | + } |
33 | 51 | } else if (args.resource == 'storagepool') { |
34 | | - metricsListView = cloudStack.sections.metrics.storagepool.listView; |
35 | 52 | metricsLabel = _l('label.primary.storage') + ' ' + metricsLabel; |
| 53 | + metricsListView = cloudStack.sections.metrics.storagepool.listView; |
| 54 | + |
36 | 55 | } else if (args.resource == 'vms') { |
37 | | - metricsListView = cloudStack.sections.metrics.instances.listView; |
38 | 56 | metricsLabel = _l('label.instances') + ' ' + metricsLabel; |
| 57 | + metricsListView = cloudStack.sections.metrics.instances.listView; |
| 58 | + metricsListView.advSearchFields = cloudStack.sections.instances.listView.advSearchFields; |
| 59 | + |
| 60 | + if (context && !context.filterBy) { |
| 61 | + if (context.hasOwnProperty('hosts') && context.hosts[0]) { |
| 62 | + context.filterBy = 'hostid'; |
| 63 | + context.id = context.hosts[0].id; |
| 64 | + } |
| 65 | + } |
39 | 66 | } else if (args.resource == 'volumes') { |
40 | | - metricsListView = cloudStack.sections.metrics.volumes.listView; |
41 | 67 | metricsLabel = _l('label.volumes') + ' ' + metricsLabel; |
| 68 | + metricsListView = cloudStack.sections.metrics.volumes.listView; |
| 69 | + metricsListView.advSearchFields = cloudStack.sections.storage.sections.volumes.listView.advSearchFields; |
| 70 | + metricsListView.groupableColumns = false; |
| 71 | + |
| 72 | + if (context && !context.filterBy) { |
| 73 | + if (context.hasOwnProperty('instances') && context.instances[0]) { |
| 74 | + context.filterBy = 'virtualmachineid'; |
| 75 | + context.id = context.instances[0].id; |
| 76 | + } |
| 77 | + if (context.hasOwnProperty('primarystorages') && context.primarystorages[0]) { |
| 78 | + context.filterBy = 'storageid'; |
| 79 | + context.id = context.primarystorages[0].id; |
| 80 | + } |
| 81 | + } |
| 82 | + } |
| 83 | + |
| 84 | + if (context.metricsFilterData) { |
| 85 | + delete context.metricsFilterData; |
| 86 | + } |
| 87 | + |
| 88 | + if (context.filterBy) { |
| 89 | + context.metricsFilterData = { |
| 90 | + key: context.filterBy, |
| 91 | + value: context.id |
| 92 | + }; |
42 | 93 | } |
43 | 94 |
|
44 | 95 | // list view refresh button |
|
56 | 107 | } |
57 | 108 | }; |
58 | 109 |
|
59 | | - metricsListView.hideSearchBar = true; |
| 110 | + metricsListView.hideSearchBar = false; |
60 | 111 | metricsListView.needsRefresh = true; |
61 | 112 | metricsListView.noSplit = true; |
62 | 113 | metricsListView.horizontalOverflow = true; |
63 | 114 | metricsListView.groupableColumns = true; |
64 | 115 |
|
65 | | - if (args.resource == 'volumes') { |
66 | | - metricsListView.groupableColumns = false; |
67 | | - } |
| 116 | + if (args.resource != 'vms' && args.resource != 'volumes' && args.resource != 'zones') { |
| 117 | + metricsListView.advSearchFields = { |
| 118 | + name: { |
| 119 | + label: 'label.name' |
| 120 | + }, |
| 121 | + zoneid: { |
| 122 | + label: 'label.zone', |
| 123 | + select: function(args) { |
| 124 | + $.ajax({ |
| 125 | + url: createURL('listZones'), |
| 126 | + data: { |
| 127 | + listAll: true |
| 128 | + }, |
| 129 | + success: function(json) { |
| 130 | + var zones = json.listzonesresponse.zone ? json.listzonesresponse.zone : []; |
68 | 131 |
|
69 | | - var metricsContext = cloudStack.context; |
70 | | - if (metricsContext.metricsFilterData) { |
71 | | - delete metricsContext.metricsFilterData; |
72 | | - } |
73 | | - if (args.filterBy) { |
74 | | - metricsContext.metricsFilterData = { |
75 | | - key: args.filterBy, |
76 | | - value: args.id |
| 132 | + args.response.success({ |
| 133 | + data: $.map(zones, function(zone) { |
| 134 | + return { |
| 135 | + id: zone.id, |
| 136 | + description: zone.name |
| 137 | + }; |
| 138 | + }) |
| 139 | + }); |
| 140 | + } |
| 141 | + }); |
| 142 | + } |
| 143 | + } |
77 | 144 | }; |
78 | 145 | } |
79 | 146 |
|
|
84 | 151 | complete: function($newPanel) { |
85 | 152 | $newPanel.listView({ |
86 | 153 | $browser: $browser, |
87 | | - context: metricsContext, |
| 154 | + context: context, |
88 | 155 | listView: metricsListView |
89 | 156 | }); |
90 | 157 | // Make metrics tables horizontally scrollable |
|
105 | 172 | } |
106 | 173 | } |
107 | 174 | $browser.cloudBrowser('removeLastPanel', {}); |
108 | | - var refreshedPanel = cloudStack.uiCustom.metricsView(args)(); |
| 175 | + var refreshedPanel = cloudStack.uiCustom.metricsView(args)(ctxArgs); |
109 | 176 | if (wasSorted && thClassName) { |
110 | 177 | refreshedPanel.find('th.' + thClassName).filter(function() { |
111 | 178 | return $(this).index() == thIndex; |
112 | 179 | }).addClass('sorted').addClass(sortClassName); |
113 | 180 | } |
114 | 181 | }); |
115 | 182 |
|
116 | | - var filterMetricView = metricsListView.browseBy; |
117 | | - if (filterMetricView) { |
| 183 | + var browseBy = metricsListView.browseBy; |
| 184 | + if (browseBy) { |
118 | 185 | $newPanel.bind('click', function(event) { |
119 | 186 | event.stopPropagation(); |
120 | 187 | var $target = $(event.target); |
121 | 188 | var id = $target.closest('tr').data('list-view-item-id'); |
122 | 189 | var jsonObj = $target.closest('tr').data('jsonObj'); |
123 | | - if (filterMetricView.filterKey && jsonObj) { |
124 | | - if (jsonObj.hasOwnProperty(filterMetricView.filterKey)) { |
125 | | - id = jsonObj[filterMetricView.filterKey]; |
| 190 | + if (browseBy.filterKey && jsonObj) { |
| 191 | + if (jsonObj.hasOwnProperty(browseBy.filterKey)) { |
| 192 | + id = jsonObj[browseBy.filterKey]; |
126 | 193 | } else { |
127 | 194 | return; // return if provided key is missing |
128 | 195 | } |
129 | 196 | } |
130 | 197 | if (id && ($target.hasClass('first') || $target.parent().hasClass('first')) && ($target.is('td') || $target.parent().is('td'))) { |
131 | | - filterMetricView.id = id; |
132 | | - cloudStack.uiCustom.metricsView(filterMetricView)(); |
| 198 | + context.id = id; |
| 199 | + context.filterBy = browseBy.filterBy; |
| 200 | + ctxArgs.context = context; |
| 201 | + cloudStack.uiCustom.metricsView({resource: browseBy.resource})(ctxArgs); |
133 | 202 | } |
134 | 203 | }); |
135 | 204 | } |
|
0 commit comments