Author: ryota
Date: Wed Nov 27 01:14:59 2013
New Revision: 1545899
URL: http://svn.apache.org/r1545899
Log:
OOZIE-1605 Add common custom filter applied to Wf/Coord/Bundle jobs on oozie UI
(ryota)
Modified:
oozie/trunk/release-log.txt
oozie/trunk/webapp/src/main/webapp/oozie-console.js
Modified: oozie/trunk/release-log.txt
URL:
http://svn.apache.org/viewvc/oozie/trunk/release-log.txt?rev=1545899&r1=1545898&r2=1545899&view=diff
==============================================================================
--- oozie/trunk/release-log.txt (original)
+++ oozie/trunk/release-log.txt Wed Nov 27 01:14:59 2013
@@ -1,5 +1,6 @@
-- Oozie 4.1.0 release (trunk - unreleased)
+OOZIE-1605 Add common custom filter applied to Wf/Coord/Bundle jobs on oozie
UI (ryota)
OOZIE-1474 Fix logging issues - latency, accurate job ids, coord Job UI to
show job logs (mona)
OOZIE-1623 JPAService doesn't need to do reads in a transaction (rkanter)
OOZIE-1612 When printing Dates to log messages, we should make sure they are
in oozie.processing.timezone (gwenshap via rkanter)
Modified: oozie/trunk/webapp/src/main/webapp/oozie-console.js
URL:
http://svn.apache.org/viewvc/oozie/trunk/webapp/src/main/webapp/oozie-console.js?rev=1545899&r1=1545898&r2=1545899&view=diff
==============================================================================
--- oozie/trunk/webapp/src/main/webapp/oozie-console.js (original)
+++ oozie/trunk/webapp/src/main/webapp/oozie-console.js Wed Nov 27 01:14:59 2013
@@ -89,6 +89,37 @@ function getTimeZone() {
return Ext.state.Manager.get("TimezoneId","GMT");
}
+function getUserName() {
+ Ext.state.Manager.setProvider(new Ext.state.CookieProvider());
+ return Ext.state.Manager.get("UserName", null);
+}
+
+function getCustomFilter() {
+ var filter = '';
+ var userName = getUserName();
+ if(userName) {
+ filter = "user=" + userName;
+ }
+ Ext.state.Manager.setProvider(new Ext.state.CookieProvider());
+ var customFilter = Ext.state.Manager.get("GlobalCustomFilter", null);
+ if (customFilter) {
+ if (filter) {
+ filter = filter + ";" + customFilter;
+ } else {
+ filter = customFilter;
+ }
+ }
+ return filter;
+}
+
+function convertStatusToUpperCase(filterText) {
+ var converted = filterText.replace(/status=([a-zA-Z]+)/g, function(){
+ var text = arguments[1];
+ return "status="+ text.toUpperCase();
+ });
+ return converted;
+}
+
if ( !String.prototype.endsWith ) {
String.prototype.endsWith = function(pattern) {
var d = this.length - pattern.length;
@@ -554,7 +585,7 @@ function jobDetailsPopup(response, reque
}]
})]
});
-
+
// Tab to show list of child Job URLs for pig action
var childJobsItem = {
title : 'Child Job URLs',
@@ -1581,9 +1612,9 @@ function getConfigObject(responseTxt) {
}
// All the actions
var refreshCustomJobsAction = new Ext.Action({
- text: 'status=KILLED',
+ text: Ext.state.Manager.get('CustomWFJobFilter','status=KILLED'),
handler: function() {
- jobs_store.baseParams.filter = this.text;
+ jobs_store.baseParams.filter = getCustomFilter() ? getCustomFilter() +
";" + this.text : this.text;
jobs_store.baseParams.timezone = getTimeZone();
jobs_store.reload();
Ext.getCmp('jobs_active').setIconClass('');
@@ -1597,7 +1628,7 @@ var refreshActiveJobsAction = new Ext.Ac
id: 'jobs_active',
text: 'Active Jobs',
handler: function() {
- jobs_store.baseParams.filter = 'status=RUNNING';
+ jobs_store.baseParams.filter = getCustomFilter() ? getCustomFilter() +
';status=RUNNING' : 'status=RUNNING';
jobs_store.baseParams.timezone = getTimeZone();
jobs_store.reload();
Ext.getCmp('jobs_active').setIconClass('job-filter');
@@ -1611,7 +1642,7 @@ var refreshAllJobsAction = new Ext.Actio
id: 'jobs_all',
text: 'All Jobs',
handler: function() {
- jobs_store.baseParams.filter = '';
+ jobs_store.baseParams.filter = getCustomFilter()? getCustomFilter() :
"";
jobs_store.baseParams.timezone = getTimeZone();
jobs_store.reload();
Ext.getCmp('jobs_active').setIconClass('');
@@ -1625,7 +1656,8 @@ var refreshDoneJobsAction = new Ext.Acti
id: 'jobs_done',
text: 'Done Jobs',
handler: function() {
- jobs_store.baseParams.filter =
'status=SUCCEEDED;status=KILLED;status=FAILED';
+ var doneJobStatus = 'status=SUCCEEDED;status=KILLED;status=FAILED';
+ jobs_store.baseParams.filter = getCustomFilter() ? getCustomFilter() +
';' + doneJobStatus : doneJobStatus;
jobs_store.baseParams.timezone = getTimeZone();
jobs_store.reload();
Ext.getCmp('jobs_active').setIconClass('');
@@ -1635,9 +1667,9 @@ var refreshDoneJobsAction = new Ext.Acti
});
var refreshCoordCustomJobsAction = new Ext.Action({
- text: 'status=KILLED',
+ text: Ext.state.Manager.get('CustomCoordJobFilter', 'status=KILLED'),
handler: function() {
- coord_jobs_store.baseParams.filter = this.text;
+ coord_jobs_store.baseParams.filter = getCustomFilter() ?
getCustomFilter() + ';' + this.text : this.text;
coord_jobs_store.baseParams.timezone = getTimeZone();
coord_jobs_store.reload();
Ext.getCmp('coord_active').setIconClass('');
@@ -1651,7 +1683,8 @@ var refreshCoordActiveJobsAction = new E
id: 'coord_active',
text: 'Active Jobs',
handler: function() {
- coord_jobs_store.baseParams.filter =
'status=RUNNING;status=RUNNINGWITHERROR';
+ var coordActiveStatus = 'status=RUNNING;status=RUNNINGWITHERROR';
+ coord_jobs_store.baseParams.filter = getCustomFilter() ?
getCustomFilter() + ';' + coordActiveStatus : coordActiveStatus;
coord_jobs_store.baseParams.timezone = getTimeZone();
coord_jobs_store.reload();
Ext.getCmp('coord_active').setIconClass('job-filter');
@@ -1673,7 +1706,7 @@ var refreshCoordAllJobsAction = new Ext.
id: 'coord_all',
text: 'All Jobs',
handler: function() {
- coord_jobs_store.baseParams.filter = '';
+ coord_jobs_store.baseParams.filter = getCustomFilter() ?
getCustomFilter() : '';
coord_jobs_store.baseParams.timezone = getTimeZone();
coord_jobs_store.reload();
Ext.getCmp('coord_active').setIconClass('');
@@ -1695,7 +1728,8 @@ var refreshCoordDoneJobsAction = new Ext
id: 'coord_done',
text: 'Done Jobs',
handler: function() {
- coord_jobs_store.baseParams.filter =
'status=SUCCEEDED;status=KILLED;status=FAILED;status=DONEWITHERROR';
+ var coordDoneStatus =
'status=SUCCEEDED;status=KILLED;status=FAILED;status=DONEWITHERROR';
+ coord_jobs_store.baseParams.filter = getCustomFilter() ?
getCustomFilter() + ';' + coordDoneStatus : coordDoneStatus;
coord_jobs_store.baseParams.timezone = getTimeZone();
coord_jobs_store.reload();
Ext.getCmp('coord_active').setIconClass('');
@@ -1717,7 +1751,8 @@ var refreshBundleActiveJobsAction = new
id: 'bundle_active',
text: 'Active Jobs',
handler: function() {
- bundle_jobs_store.baseParams.filter =
'status=RUNNING;status=RUNNINGWITHERROR';
+ var bundleActiveStatus = 'status=RUNNING;status=RUNNINGWITHERROR';
+ bundle_jobs_store.baseParams.filter = getCustomFilter() ?
getCustomFilter() + ';' + bundleActiveStatus : bundleActiveStatus;
bundle_jobs_store.baseParams.timezone = getTimeZone();
bundle_jobs_store.reload();
Ext.getCmp('bundle_active').setIconClass('job-filter');
@@ -1730,10 +1765,10 @@ var refreshBundleAllJobsAction = new Ext
id: 'bundle_all',
text: 'All Jobs',
handler: function() {
- bundle_jobs_store.baseParams.filter = '';
+ bundle_jobs_store.baseParams.filter = getCustomFilter() ?
getCustomFilter() : '';
bundle_jobs_store.baseParams.timezone = getTimeZone();
- bundle_jobs_store.reload();
- Ext.getCmp('bundle_active').setIconClass('');
+ bundle_jobs_store.reload();
+ Ext.getCmp('bundle_active').setIconClass('');
Ext.getCmp('bundle_all').setIconClass('job-filter');
Ext.getCmp('bundle_done').setIconClass('');
}
@@ -1743,7 +1778,8 @@ var refreshBundleDoneJobsAction = new Ex
id: 'bundle_done',
text: 'Done Jobs',
handler: function() {
- bundle_jobs_store.baseParams.filter =
'status=SUCCEEDED;status=KILLED;status=FAILED;status=DONEWITHERROR';
+ var bundleDoneStatus =
'status=SUCCEEDED;status=KILLED;status=FAILED;status=DONEWITHERROR';
+ bundle_jobs_store.baseParams.filter = getCustomFilter() ?
getCustomFilter() + ';' + bundleDoneStatus : bundleDoneStatus
bundle_jobs_store.baseParams.timezone = getTimeZone();
bundle_jobs_store.reload();
Ext.getCmp('bundle_active').setIconClass('');
@@ -1753,9 +1789,9 @@ var refreshBundleDoneJobsAction = new Ex
});
var refreshBundleCustomJobsAction = new Ext.Action({
- text: 'status=KILLED',
+ text: Ext.state.Manager.get('CustomBundleJobFilter', 'status=KILLED'),
handler: function() {
- bundle_jobs_store.baseParams.filter = this.text;
+ bundle_jobs_store.baseParams.filter = getCustomFilter() ?
getCustomFilter() + this.text : this.text;
bundle_jobs_store.baseParams.timezone = getTimeZone();
bundle_jobs_store.reload();
Ext.getCmp('bundle_active').setIconClass('');
@@ -1781,8 +1817,13 @@ var changeFilterAction = new Ext.Action(
handler: function() {
Ext.Msg.prompt('Filter Criteria', 'Filter text:', function(btn, text) {
if (btn == 'ok' && text) {
- refreshCustomJobsAction.setText(text);
- jobs_store.baseParams.filter = text;
+ var filter = convertStatusToUpperCase(text);
+ refreshCustomJobsAction.setText(filter);
+ Ext.state.Manager.setProvider(new Ext.state.CookieProvider({
+ expires: new Date(new Date().getTime()+315569259747)
+ }));
+ Ext.state.Manager.set('CustomWFJobFilter', filter);
+ jobs_store.baseParams.filter = getCustomFilter() ?
getCustomFilter() + ";" + filter : filter;
jobs_store.baseParams.timezone = getTimeZone();
jobs_store.reload();
}
@@ -1795,8 +1836,13 @@ var changeCoordFilterAction = new Ext.Ac
handler: function() {
Ext.Msg.prompt('Filter Criteria', 'Filter text:', function(btn, text) {
if (btn == 'ok' && text) {
- refreshCoordCustomJobsAction.setText(text);
- coord_jobs_store.baseParams.filter = text;
+ var filter = convertStatusToUpperCase(text);
+ refreshCoordCustomJobsAction.setText(filter);
+ Ext.state.Manager.setProvider(new Ext.state.CookieProvider({
+ expires: new Date(new Date().getTime()+315569259747)
+ }));
+ Ext.state.Manager.set("CustomCoordJobFilter", filter);
+ coord_jobs_store.baseParams.filter = getCustomFilter() ?
getCustomFilter() + ";" + filter : filter;
coord_jobs_store.baseParams.timezone = getTimeZone();
coord_jobs_store.reload();
}
@@ -1809,8 +1855,13 @@ var changeBundleFilterAction = new Ext.A
handler: function() {
Ext.Msg.prompt('Filter Criteria', 'Filter text:', function(btn, text) {
if (btn == 'ok' && text) {
- refreshBundleCustomJobsAction.setText(text);
- bundle_jobs_store.baseParams.filter = text;
+ var filter = convertStatusToUpperCase(text);
+ refreshBundleCustomJobsAction.setText(filter);
+ Ext.state.Manager.setProvider(new Ext.state.CookieProvider({
+ expires: new Date(new Date().getTime()+315569259747)
+ }));
+ Ext.state.Manager.set("CustomBundleJobFilter", filter);
+ bundle_jobs_store.baseParams.filter = getCustomFilter() ?
getCustomFilter() + ";" + filter : filter;
bundle_jobs_store.baseParams.timezone = getTimeZone();
bundle_jobs_store.reload();
}
@@ -2041,6 +2092,7 @@ function initConsole() {
text: " ",
icon: 'ext-2.2/resources/images/default/grid/refresh.gif',
handler: function() {
+ jobs_store.baseParams.filter = getCustomFilter();
jobs_store.baseParams.timezone = getTimeZone();
jobs_store.reload();
}
@@ -2173,6 +2225,7 @@ function initConsole() {
text: " ",
icon: 'ext-2.2/resources/images/default/grid/refresh.gif',
handler: function() {
+ coord_jobs_store.baseParams.filter = getCustomFilter();
coord_jobs_store.baseParams.timezone = getTimeZone();
coord_jobs_store.reload();
}
@@ -2243,6 +2296,7 @@ function initConsole() {
text: " ",
icon: 'ext-2.2/resources/images/default/grid/refresh.gif',
handler: function() {
+ bundle_jobs_store.baseParams.filter = getCustomFilter();
bundle_jobs_store.baseParams.timezone = getTimeZone();
bundle_jobs_store.reload();
}
@@ -2264,6 +2318,8 @@ function initConsole() {
});
Ext.state.Manager.setProvider(new Ext.state.CookieProvider());
var currentTimezone = Ext.state.Manager.get("TimezoneId","GMT");
+ var userName = Ext.state.Manager.get("UserName","");
+ var commonFilter = Ext.state.Manager.get("GlobalCustomFilter","");
var settingsArea = new Ext.FormPanel({
title: 'Settings',
items: [{
@@ -2289,6 +2345,48 @@ function initConsole() {
Ext.state.Manager.set("TimezoneId",this.value);
}
}}
+ },{
+ xtype: 'label',
+ width: 300,
+ style: 'font: normal 12px tahoma',
+ text: 'Global Filter'
+ },{
+ xtype: 'field',
+ width: 300,
+ fieldLabel: '- by User Name',
+ inputType: 'text',
+ typeAhead: true,
+ editable: false,
+ triggerAction: 'all',
+ value: userName,
+ listeners:
+ { change: { fn:function(field, value)
+ {
+ Ext.state.Manager.setProvider(new
Ext.state.CookieProvider({
+ expires: new Date(new Date().getTime()+315569259747)
// about 10 years from now!
+ }));
+ Ext.state.Manager.set("UserName", value);
+ }
+ }}
+ },{
+ xtype: 'field',
+ width: 300,
+ fieldLabel: '- by Filter Text',
+ inputType: 'text',
+ typeAhead: true,
+ editable: false,
+ triggerAction: 'all',
+ value: commonFilter,
+ listeners:
+ { change: { fn:function(field, value)
+ {
+ Ext.state.Manager.setProvider(new
Ext.state.CookieProvider({
+ expires: new Date(new Date().getTime()+315569259747)
// about 10 years from now!
+ }));
+ var upper_value = convertStatusToUpperCase(value);
+ Ext.state.Manager.set("GlobalCustomFilter", upper_value);
+ }
+ }}
}]
});
// main tab panel containing Workflow Jobs, Coordinator Jobs, Bundle Jobs,
System Info, ...