From cdc1ef09efdf92dc867c1dc6730b10083d4a4207 Mon Sep 17 00:00:00 2001 From: "Joseph P. White" Date: Wed, 17 Oct 2018 14:19:22 -0400 Subject: [PATCH 1/3] Remove hard-coded SUPREMM references from the core. The realm settings were hardcoded in a couple of places in the code. --- .../WarehouseControllerProvider.php | 43 +++- configuration/rawstatistics.d/.gitignore | 0 configuration/rawstatistics.json | 3 + html/gui/js/modules/job_viewer/SearchPanel.js | 243 +++++++----------- .../modules/metric_explorer/MetricExplorer.js | 6 +- html/index.php | 5 + open_xdmod/modules/xdmod/build.json | 2 + 7 files changed, 137 insertions(+), 165 deletions(-) create mode 100644 configuration/rawstatistics.d/.gitignore create mode 100644 configuration/rawstatistics.json diff --git a/classes/Rest/Controllers/WarehouseControllerProvider.php b/classes/Rest/Controllers/WarehouseControllerProvider.php index fab498f2ce..1bbe4bca15 100644 --- a/classes/Rest/Controllers/WarehouseControllerProvider.php +++ b/classes/Rest/Controllers/WarehouseControllerProvider.php @@ -1482,8 +1482,15 @@ private function getJobData(Application $app, XDUser $user, $realm, $jobId, $act */ private function getJobDataSet(XDUser $user, $realm, $jobId, $action) { + $config = \Xdmod\Config::factory(); + + $rawstats = $config['rawstatistics']; + if (!isset($rawstats['realms'][$realm])) { + throw new \DataWarehouse\Query\Exceptions\AccessDeniedException; + } + $params = array( - new \DataWarehouse\Query\Model\Parameter('_id', '=', $jobId) + new \DataWarehouse\Query\Model\Parameter($rawstats['realms'][$realm]['primary_key'], '=', $jobId) ); $QueryClass = "\\DataWarehouse\\Query\\$realm\\JobDataset"; @@ -1761,17 +1768,26 @@ private function processHistoryRequest(Application $app, XDUser $user, $realm, $ */ private function processHistoryDefaultRealmRequest(Application $app, $action) { + $config = \Xdmod\Config::factory(); + + $rawstats = $config['rawstatistics']; + + $results = array(); + + if (isset($rawstats['realms'])) { + foreach($rawstats['realms'] as $realm => $realmconfig) { + $results[] = array('dtype' => 'realm', + 'realm' => $realm, + 'text' => $realmconfig['name'] + ); + } + } + return $app->json( array( 'success' => true, 'action' => $action, - 'results' => array( - array( - 'dtype' => 'realm', - 'realm' => 'SUPREMM', - 'text' => 'SUPREMM' - ) - ) + 'results' => $results ) ); } @@ -2062,14 +2078,21 @@ private function getJobTimeSeriesData(Application $app, Request $request, \XDUse */ private function getJobByPrimaryKey(Application $app, \XDUser $user, $realm, $searchparams) { + $config = \Xdmod\Config::factory(); + + $rawstats = $config['rawstatistics']; + if (!isset($rawstats['realms'][$realm])) { + throw new \DataWarehouse\Query\Exceptions\AccessDeniedException; + } + if (isset($searchparams['jobref'])) { $params = array( - new \DataWarehouse\Query\Model\Parameter('_id', '=', $searchparams['jobref']) + new \DataWarehouse\Query\Model\Parameter($rawstats['realms'][$realm]['primary_key'], '=', $searchparams['jobref']) ); } else { $params = array( new \DataWarehouse\Query\Model\Parameter("resource_id", "=", $searchparams['resource_id']), - new \DataWarehouse\Query\Model\Parameter("local_job_id", "=", $searchparams['local_job_id']) + new \DataWarehouse\Query\Model\Parameter($rawstats['realms'][$realm]['ident_key'], "=", $searchparams['local_job_id']) ); } diff --git a/configuration/rawstatistics.d/.gitignore b/configuration/rawstatistics.d/.gitignore new file mode 100644 index 0000000000..e69de29bb2 diff --git a/configuration/rawstatistics.json b/configuration/rawstatistics.json new file mode 100644 index 0000000000..0809b81b40 --- /dev/null +++ b/configuration/rawstatistics.json @@ -0,0 +1,3 @@ +{ + "realms": [] +} diff --git a/html/gui/js/modules/job_viewer/SearchPanel.js b/html/gui/js/modules/job_viewer/SearchPanel.js index 1f51af81ac..5500974807 100644 --- a/html/gui/js/modules/job_viewer/SearchPanel.js +++ b/html/gui/js/modules/job_viewer/SearchPanel.js @@ -129,8 +129,6 @@ XDMoD.Module.JobViewer.SearchPanel = Ext.extend(Ext.Panel, { window.setWidth(adjWidth); window.setPosition(adjX, adjY); - this._selectInitial('realm-field', 0, null); - this.shown = true; if (!this.children) { this.children = []; @@ -291,25 +289,38 @@ XDMoD.Module.JobViewer.SearchPanel = Ext.extend(Ext.Panel, { }); }, // search_requested + basic_search_realm_selected: function (realm) { + var basicSearch = Ext.getCmp('job-viewer-search-lookup'); + basicSearch.disable(); + var jobidField = Ext.getCmp('basic-localjobid'); + jobidField.reset(); + var resource = Ext.getCmp('basic-resource'); + resource.store.load({ + params: { + realm: realm + } + }); + }, + /** * Event fired when a realm has been selected. * * @param realm */ realm_selected: function (realm) { - var self = this; - if (CCR.exists(self.valueField) && CCR.exists(self.valueField.store)) { - Ext.apply(self.valueField.store.baseParams, { - realm: realm - }); - } - if (CCR.exists(self.searchField) && CCR.exists(self.searchField.store)) { - Ext.apply(self.searchField.store.baseParams, { + Ext.getCmp('search-add').disable(); + Ext.getCmp('job-viewer-search-search').disable(); + this.searchStore.removeAll(); + this.valueField.store.setBaseParam({ + realm: realm + }); + this.searchField.reset(); + this.searchField.store.load({ + params: { realm: realm - }); - self._selectInitial('search-field'); - } - }, // realm_selected + } + }); + }, validate_search_criteria: function() { var lookupValid, searchValid; @@ -908,12 +919,18 @@ XDMoD.Module.JobViewer.SearchPanel = Ext.extend(Ext.Panel, { qtip: 'Use the quick lookup form to search for a job based on its ID and the resource on which it ran.' }], layout: 'border', - height: 135, + height: 160, items: [ { xtype: 'fieldset', region: 'center', items: [ + { + xtype: 'realmcombo', + id: 'basic-search-realm', + panel: self, + realmSelectEvent: 'basic_search_realm_selected' + }, { xtype: 'combo', fieldLabel: 'Resource', @@ -929,10 +946,15 @@ XDMoD.Module.JobViewer.SearchPanel = Ext.extend(Ext.Panel, { enableKeyEvents: true, store: new Ext.data.JsonStore({ proxy: new Ext.data.HttpProxy({ - url: XDMoD.REST.url + '/' + self.jobViewer.rest.warehouse + '/dimensions/resource?querygroup=tg_usage&realm=SUPREMM&filter=true&token=' + self.token + url: XDMoD.REST.url + '/' + self.jobViewer.rest.warehouse + '/dimensions/resource', + method: 'GET' }), - idProperty: 'id', - autoLoad: false, + baseParams: { + realm: CCR.xdmod.ui.rawDataAllowedRealms[0], + token: self.token + }, + storeId: 'jobviewer-basicsearch-resource', + autoLoad: true, root: 'results', fields: [ {name: 'id', type: 'string'}, @@ -949,12 +971,6 @@ XDMoD.Module.JobViewer.SearchPanel = Ext.extend(Ext.Panel, { } }), listeners: { - render: { - fn: function (combo) { - combo.getStore().load(); - }, - single: true - }, select: function( /* combo, record, index */ ) { self.fireEvent('validate_search_criteria'); }, @@ -992,7 +1008,7 @@ XDMoD.Module.JobViewer.SearchPanel = Ext.extend(Ext.Panel, { handler: function( /*button, event*/ ) { var resourceField = Ext.getCmp('basic-resource'); var localjobidField = Ext.getCmp('basic-localjobid'); - var realmField = Ext.getCmp('realm-field'); + var realmField = Ext.getCmp('basic-search-realm'); var params = { realm: realmField.getValue(), params: JSON.stringify({ @@ -1013,7 +1029,7 @@ XDMoD.Module.JobViewer.SearchPanel = Ext.extend(Ext.Panel, { id: 'help', qtip: 'Use the advanced search form to search for jobs based on one or more filters and a date range.' }], - height: 400, + height: 375, layout: 'border', items: [{ region: 'center', @@ -1070,73 +1086,9 @@ XDMoD.Module.JobViewer.SearchPanel = Ext.extend(Ext.Panel, { }, { id: 'realm-field', - xtype: 'combo', - hidden: true, - fieldLabel: 'Realm', - disabled: true, - emptyText: 'Select a Realm', - triggerAction: 'all', - selectOnFocus: true, - displayField: 'name', - valueField: 'name', - forceSelection: true, - store: new Ext.data.JsonStore({ - proxy: new Ext.data.HttpProxy({ - method: 'GET', - /*'/rest/datawarehouse/explorer/realms/'*/ - url: XDMoD.REST.url + '/' + self.jobViewer.rest.warehouse + '/realms' - }), - baseParams: { - token: self.token, - querygroup: 'tg_usage', - filter: true - }, - storeId: 'realmStore', - root: 'results', - fields: ['name'], - listeners: { - - load: function (store, records /*, options*/) { - if (CCR.exists(records)) { - for (var i = 0; i < records.length; i++) { - var record = records[i]; - record.set('name', record.json); - if ('SUPREMM' !== record.get('name')) { - store.remove(record); - } - } - } - }, - exception: function (proxy, type, action, exception, response) { - switch (response.status) { - case 403: - case 500: - var details = Ext.decode(response.responseText); - Ext.Msg.alert("Error " + response.status + " " + response.statusText, details.message); - break; - case 401: - // Do nothing - break; - default: - Ext.Msg.alert(response.status + ' ' + response.statusText, response.responseText); - } - } - } - }), - listeners: { - select: function (field, record /*, index*/) { - if (CCR.exists(record)) { - var value = record.get('name'); - self.fireEvent('realm_selected', value); - } - - }, - afterrender: function (field) { - if (!CCR.exists(self.realmField)) { - self.realmField = field; - } - } - } + xtype: 'realmcombo', + panel: self, + realmSelectEvent: 'realm_selected' }, { xtype: 'compositefield', @@ -1167,6 +1119,7 @@ XDMoD.Module.JobViewer.SearchPanel = Ext.extend(Ext.Panel, { }), baseParams: { token: self.token, + realm: CCR.xdmod.ui.rawDataAllowedRealms[0], querygroup: 'tg_usage' }, @@ -1175,6 +1128,7 @@ XDMoD.Module.JobViewer.SearchPanel = Ext.extend(Ext.Panel, { direction: 'ASC' }, groupField: 'Category', + autoLoad: true, storeId: 'dimensionResults', reader: new Ext.data.JsonReader({ root: 'results', @@ -1247,6 +1201,7 @@ XDMoD.Module.JobViewer.SearchPanel = Ext.extend(Ext.Panel, { baseParams: { token: self.token, querygroup: 'tg_usage', + realm: CCR.xdmod.ui.rawDataAllowedRealms[0], filter: 'true' }, storeId: 'valueStore', @@ -1595,8 +1550,7 @@ XDMoD.Module.JobViewer.SearchPanel = Ext.extend(Ext.Panel, { }, /** - * Perform the steps necessary to get the SearchPanel ready - * for the editing of a 'Quick Search' + * Load the Quick Job Lookup form with the provided searchTerms. * * @param {Object} searchTerms */ @@ -1605,32 +1559,19 @@ XDMoD.Module.JobViewer.SearchPanel = Ext.extend(Ext.Panel, { var params = JSON.parse(searchTerms.params); - // populate the basic settings. - var resourceField = Ext.getCmp('basic-resource'); - var localJobIdField = Ext.getCmp('basic-localjobid'); - - var setLocalJobId = function() { - localJobIdField.setValue(params.local_job_id); - localJobIdField.focus(); - self.fireEvent('validate_search_criteria'); - }; - var setResourceId = function() { - resourceField.setValue(params.resource_id); - var id = resourceField.store.find('id', params.resource_id); - resourceField.selectedIndex = id || - 1; - setLocalJobId(); - }; - - var loadListener = function() { - setResourceId(); - resourceField.un('load', loadListener); - }; + Ext.getCmp('basic-search-realm').setValue(searchTerms.realm); + Ext.getCmp('basic-localjobid').setValue(params.local_job_id); - if (resourceField.store.getTotalCount() < 1) { - resourceField.store.on('load', loadListener); - } else { - setResourceId(); - } + var resourceField = Ext.getCmp('basic-resource'); + resourceField.store.load({ + params: { + realm: searchTerms.realm + }, + callback: function () { + resourceField.setValue(params.resource_id); + self.fireEvent('validate_search_criteria'); + } + }); }, /** @@ -1651,21 +1592,10 @@ XDMoD.Module.JobViewer.SearchPanel = Ext.extend(Ext.Panel, { startDateField.setValue(startDate); endDateField.setValue(endDate); - var realm = searchTerms.realm; - - var setRealm = function() { - if (realm === undefined) { - var defaultRealm = self.realmField.store.getAt(0); - if (defaultRealm) { - realm = defaultRealm.get('name'); - } - } - - self.realmField.setValue(realm); + var realmField = Ext.getCmp('realm-field'); - var id = self.realmField.store.find('name', realm); - self.realmField.selectedIndex = id || - 1; - }; + var realm = searchTerms.realm; + realmField.setValue(searchTerms.realm); var clearSearchCriteria = function() { var store = CCR.exists(self.searchStore) ? self.searchStore : null; @@ -1733,23 +1663,9 @@ XDMoD.Module.JobViewer.SearchPanel = Ext.extend(Ext.Panel, { } }; - var setState = function() { - setRealm(); - clearSearchCriteria(); - addSearchCriteria(); - self.resetResults(); - }; - - var realmLoadListener = function() { - setState(); - self.realmField.store.un('load', realmLoadListener); - }; - - if (this.realmField.store.getTotalCount() < 1) { - this.realmField.store.on('load', realmLoadListener); - } else { - setState(); - } + clearSearchCriteria(); + addSearchCriteria(); + self.resetResults(); }, /** @@ -2039,3 +1955,28 @@ XDMoD.Module.JobViewer.SearchPanel = Ext.extend(Ext.Panel, { }); + +XDMoD.Module.JobViewer.RealmCombo = Ext.extend(Ext.form.ComboBox, { + fieldLabel: 'Realm', + mode: 'local', + typeAhead: true, + triggerAction: 'all', + selectOnFocus: true, + forceSelection: true, + store: CCR.xdmod.ui.rawDataAllowedRealms, + value: CCR.xdmod.ui.rawDataAllowedRealms[0], + listeners: { + select: function (field) { + if (field.startValue !== field.getValue()) { + this.panel.fireEvent(this.realmSelectEvent, field.getValue()); + } + }, + blur: function (field) { + if (field.startValue !== field.getValue()) { + this.panel.fireEvent(this.realmSelectEvent, field.getValue()); + } + } + } +}); + +Ext.reg('realmcombo', XDMoD.Module.JobViewer.RealmCombo); diff --git a/html/gui/js/modules/metric_explorer/MetricExplorer.js b/html/gui/js/modules/metric_explorer/MetricExplorer.js index a363ad02d4..7d324fc81e 100644 --- a/html/gui/js/modules/metric_explorer/MetricExplorer.js +++ b/html/gui/js/modules/metric_explorer/MetricExplorer.js @@ -887,12 +887,10 @@ Ext.apply(XDMoD.Module.MetricExplorer, { if (drillId) { if (CCR.xdmod.ui.jobViewer && legendItemClick === false) { - var raw_data_allowed_realms = ['SUPREMM']; - var raw_data_disabled = true; - var raw_data_tooltip = 'Show raw data is only available for the following data realms: ' + raw_data_allowed_realms.join(', '); + var raw_data_tooltip = 'Show raw data is only available for the following data realms: ' + CCR.xdmod.ui.rawDataAllowedRealms.join(', '); - if (raw_data_allowed_realms.indexOf(realm) !== -1) { + if (CCR.xdmod.ui.rawDataAllowedRealms.indexOf(realm) !== -1) { if (dimension == 'none') { raw_data_disabled = true; raw_data_tooltip = 'Show raw data is only available for drilled-down datasets.
' + diff --git a/html/index.php b/html/index.php index 14d8bfd265..5e5775c8dd 100644 --- a/html/index.php +++ b/html/index.php @@ -282,6 +282,11 @@ function isReferrer($referrer) print "CCR.xdmod.ui.isCenterDirector = $primary_center_director;\n"; } + $config = \Xdmod\Config::factory(); + $rawDataRealms = array_keys($config['rawstatistics']['realms']); + + print "CCR.xdmod.ui.rawDataAllowedRealms = " . json_encode($rawDataRealms) . ";\n"; + print "CCR.xdmod.ui.disabledMenus = " . json_encode(Acls::getDisabledMenus($user, $realms)) . ";\n"; if ($userLoggedIn) { diff --git a/open_xdmod/modules/xdmod/build.json b/open_xdmod/modules/xdmod/build.json index 19a97a79ed..324daa8b96 100644 --- a/open_xdmod/modules/xdmod/build.json +++ b/open_xdmod/modules/xdmod/build.json @@ -64,6 +64,8 @@ "configuration/portal_settings.ini", "configuration/portal_settings.d", "configuration/processor_buckets.json", + "configuration/rawstatistics.json", + "configuration/rawstatistics.d", "configuration/resource_specs.json", "configuration/resource_types.json", "configuration/resources.json", From 2f695bef2336734384f67a5a9a5943db871c74b0 Mon Sep 17 00:00:00 2001 From: "Joseph P. White" Date: Wed, 17 Oct 2018 15:08:38 -0400 Subject: [PATCH 2/3] Indentation fixes --- html/gui/js/modules/job_viewer/SearchPanel.js | 42 +++++++++---------- 1 file changed, 20 insertions(+), 22 deletions(-) diff --git a/html/gui/js/modules/job_viewer/SearchPanel.js b/html/gui/js/modules/job_viewer/SearchPanel.js index 5500974807..9313d8cee7 100644 --- a/html/gui/js/modules/job_viewer/SearchPanel.js +++ b/html/gui/js/modules/job_viewer/SearchPanel.js @@ -920,12 +920,10 @@ XDMoD.Module.JobViewer.SearchPanel = Ext.extend(Ext.Panel, { }], layout: 'border', height: 160, - items: [ - { + items: [{ xtype: 'fieldset', region: 'center', - items: [ - { + items: [{ xtype: 'realmcombo', id: 'basic-search-realm', panel: self, @@ -1019,24 +1017,24 @@ XDMoD.Module.JobViewer.SearchPanel = Ext.extend(Ext.Panel, { self.fireEvent('search_requested', self, 'Lookup', params); } }] - }] - }, - { - xtype: "panel", - id: "job-viewer-advanced-search", - title: "Advanced Search", - tools: [{ - id: 'help', - qtip: 'Use the advanced search form to search for jobs based on one or more filters and a date range.' - }], - height: 375, - layout: 'border', - items: [{ - region: 'center', - id: 'criteria_advanced', - xtype: 'fieldset', - labelWidth: 55, + }] + }, + { + xtype: 'panel', + id: 'job-viewer-advanced-search', + title: 'Advanced Search', + tools: [{ + id: 'help', + qtip: 'Use the advanced search form to search for jobs based on one or more filters and a date range.' + }], + height: 375, + layout: 'border', items: [{ + region: 'center', + id: 'criteria_advanced', + xtype: 'fieldset', + labelWidth: 55, + items: [{ xtype: 'datefield', id: 'search_start_date', format: 'Y-m-d', @@ -1369,7 +1367,7 @@ XDMoD.Module.JobViewer.SearchPanel = Ext.extend(Ext.Panel, { self.fireEvent('search_requested', self, 'Search', params); } }] - }] + }] }, { From acff1cf5b17bd22f58b12fd5c21e80ef2009721e Mon Sep 17 00:00:00 2001 From: Ben Plessinger Date: Fri, 19 Oct 2018 09:56:51 -0400 Subject: [PATCH 3/3] Update classes/Rest/Controllers/WarehouseControllerProvider.php Co-Authored-By: jpwhite4 --- classes/Rest/Controllers/WarehouseControllerProvider.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/classes/Rest/Controllers/WarehouseControllerProvider.php b/classes/Rest/Controllers/WarehouseControllerProvider.php index 1bbe4bca15..364c99f889 100644 --- a/classes/Rest/Controllers/WarehouseControllerProvider.php +++ b/classes/Rest/Controllers/WarehouseControllerProvider.php @@ -1776,7 +1776,8 @@ private function processHistoryDefaultRealmRequest(Application $app, $action) if (isset($rawstats['realms'])) { foreach($rawstats['realms'] as $realm => $realmconfig) { - $results[] = array('dtype' => 'realm', + $results[] = array( + 'dtype' => 'realm', 'realm' => $realm, 'text' => $realmconfig['name'] );