You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ol...@apache.org on 2016/04/25 17:14:37 UTC

[2/9] ambari git commit: AMBARI-16034. Incremental changes to LogSearch to bring it up to date in the trunk (Dharmesh Makwana via oleewere)

http://git-wip-us.apache.org/repos/asf/ambari/blob/888faf26/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/dashboard/BubbleGraphTableLayoutView.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/dashboard/BubbleGraphTableLayoutView.js b/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/dashboard/BubbleGraphTableLayoutView.js
index 96eea8d..1dd6bc7 100644
--- a/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/dashboard/BubbleGraphTableLayoutView.js
+++ b/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/dashboard/BubbleGraphTableLayoutView.js
@@ -93,7 +93,7 @@ define(['require',
 			this.collection = new VLogList([], {
                 state: {
                     firstPage: 0,
-                    pageSize: 50
+                    pageSize: 25
                 }
             });
 			this.collection.url = Globals.baseURL + "dashboard/solr/logs_search";
@@ -108,7 +108,7 @@ define(['require',
 			this.listenTo(this.collection, "backgrid:refresh",function(){
 				$(".contextMenuBody [data-id='F']").show();
             	$(".contextMenuBody").hide();
-            	this.$("#loaderGraph").hide();
+            	//this.$("#loaderGraph").hide();
 				this.$(".loader").hide();
             	//this.ui.find.trigger("keyup");
 //            	if (this.quickHelp)
@@ -170,7 +170,7 @@ define(['require',
             },this);
 		},
 		fetchAllTogether : function(value){
-			this.$("#loaderGraph").show();
+			//this.$("#loaderGraph").show();
 			this.fetchTableData(value);
         	_.extend(this.graphParams,value);
         	//this.fetchGraphData(this.graphParams);
@@ -431,7 +431,17 @@ define(['require',
 		fetchTableData : function(params){
 			var that = this;
 			$.extend(this.collection.queryParams,params);
-			this.collection.getFirstPage({reset:true});
+			this.collection.getFirstPage({
+				reset:true,
+				beforeSend : function(){
+        			that.$("#loaderGraph").show();
+        			that.$(".loader").show();
+        		},
+        		complete : function(){
+					that.$("#loaderGraph").hide();
+					that.$(".loader").hide();
+				}
+			});
 		},
 		fetchTableCollection : function(queryParams, param){
 			var that = this;
@@ -440,12 +450,17 @@ define(['require',
 				reset:true,
 				beforeSend : function(){
         			that.$("#loaderGraph").show();
-        		}
+        			that.$(".loader").show();
+        		},
+        		complete : function(){
+					that.$("#loaderGraph").hide();
+					that.$(".loader").hide();
+				}
 			},param));
 		},
 		fetchGraphData : function(params){
 			var that = this;
-			that.$("#loaderGraph").show();
+			//that.$("#loaderGraph").show();
 			that.$(".loader").show();
 			this.graphModel.fetch({
 				dataType:"json",
@@ -456,7 +471,7 @@ define(['require',
 				error : function(){
 				},
 				complete : function(){
-					that.$("#loaderGraph").hide();
+					//that.$("#loaderGraph").hide();
 					that.$(".loader").hide();
 				}
 			});

http://git-wip-us.apache.org/repos/asf/ambari/blob/888faf26/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/dashboard/HostListView.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/dashboard/HostListView.js b/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/dashboard/HostListView.js
index 6c9b224..9c426f5 100644
--- a/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/dashboard/HostListView.js
+++ b/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/dashboard/HostListView.js
@@ -279,8 +279,7 @@ define(['require',
 				
 			}
 			var data = this.getCheckedHierarchyData();
-			console.log(data);
-			this.vent.trigger("tree:search",{treeParams : JSON.stringify(data)});
+			this.vent.trigger("tree:search",{treeParams : JSON.stringify(_.pluck(data,"h"))});
 		},
 		getCheckedHierarchyData : function(){
 			var data=[];
@@ -305,7 +304,7 @@ define(['require',
 				this.$('.tree  input[type="checkbox"]').prop({"checked":false,"indeterminate":false});
 			var data = this.getCheckedHierarchyData();
 			this.params.treeParams = _.extend({},data);
-			this.vent.trigger("tree:search",{treeParams : JSON.stringify(data)});
+			this.vent.trigger("tree:search",{treeParams : JSON.stringify(_.pluck(data,"h"))});
 			
 		},
 		onSearchHostClick : function(e){

http://git-wip-us.apache.org/repos/asf/ambari/blob/888faf26/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/dialog/SaveSearchFilterView.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/dialog/SaveSearchFilterView.js b/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/dialog/SaveSearchFilterView.js
index 33cd400..2ef2f94 100644
--- a/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/dialog/SaveSearchFilterView.js
+++ b/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/dialog/SaveSearchFilterView.js
@@ -80,7 +80,9 @@ define(['require',
                     that = this;
 
                 _.each(this.params, function(value, key) {
-                    if ((key != "from" && value != "" && key != "to" && key != "bundleId" && key != "start_time" && key != "end_time" && key != "q" && key != "unit" && key != "query" && key != "type" && key != "time" && key != "dateRangeLabel" && key != "advanceSearch")) {
+                    if ((key != "from" && value != "" && key != "to" && key != "bundleId" && key != "start_time" && 
+                    		key != "end_time" && key != "q" && key != "unit" && key != "query" && key != "type" && 
+                    		key != "time" && key != "dateRangeLabel" && key != "advanceSearch" && !_.isUndefined(Globals.paramsNameMapping[key]) )) {
                         tableSting += '<tr class="' + key + '"><td>' + Globals.paramsNameMapping[key].label + '</td><td>' + (that.createInnerSpan(key)) + '</td><tr>'
                     }
                 })

http://git-wip-us.apache.org/repos/asf/ambari/blob/888faf26/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/filter/CreateLogfeederFilterView.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/filter/CreateLogfeederFilterView.js b/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/filter/CreateLogfeederFilterView.js
index 611a51e..2560103 100644
--- a/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/filter/CreateLogfeederFilterView.js
+++ b/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/filter/CreateLogfeederFilterView.js
@@ -49,6 +49,10 @@ define(['require',
             events: function() {
                 var events = {};
                 events["click [data-override]"] = 'onDataOverrideClick';
+                events["click [data-value]"] = 'onLogLevelHeaderClick';
+                events["click #filterContent input[type='checkbox']"] = 'onAnyCheckboxClick';
+                events["click .overrideRow a"] = 'onEditHost';
+                
                 return events;
             },
 
@@ -97,8 +101,7 @@ define(['require',
                 var that = this;
                 // this.setupSelect2Fields(this.levelCollection, "type", "type", "levelSelect2", 'Select Level');
                 
-                $.when(this.hostList.fetch({ reset: true }), this.componentsList.fetch({ reset: true }), this.model.fetch({})).done(function(c1, c2, m1) {
-                    
+                $.when(this.hostList.fetch({ reset: true }), this.componentsList.fetch({ reset: true }), this.model.fetch({})).then(function(c1, c2, m1) {
                     // if (!_.isUndefined(that.model.get('components'))) {
                     //     that.ui.componentSelect2.select2('val', that.model.get('components'));
                     // }
@@ -108,7 +111,7 @@ define(['require',
                     // if (!_.isUndefined(that.model.get('levels'))) {
                     //     that.ui.levelSelect2.select2('val', that.model.get('levels'));
                     // }
-                    that.ui.loader.hide();
+                    that.hideLoading();
                     that.trigger("toggle:okBtn",true);
 
                     //that.dataLevels = [];
@@ -118,14 +121,24 @@ define(['require',
                     //that.dataList = _.pluck(that.componentsList.models, 'attributes');
                     that.renderComponents();
                     that.populateValues();
+                },function(error){
+                	that.hideLoading();
+                	Utils.notifyError({
+                        content: "There is some issues on server, Please try again later."
+                    });
+                	that.trigger("closeDialog");
                 });
             },
+            hideLoading : function(){
+            	this.ui.loader.hide();
+            },
             renderComponents : function(){
             	var that =this;
             	_.each(that.componentsList.models, function(model){
-                    var levels='<td align="left">'+model.get("type")+'<span class="pull-right"><small><i>Override</i></small> <input data-override type="checkbox" data-name='+model.get("type")+'></span></td>';
-                    levels += that.getLevelForComponent(model.get("type"),true);
-                    var html = '<tr data-component="'+model.get("type")+'">'+levels+'</tr>';
+                    var levels='<td align="left">'+model.get("type")+'</td>';
+                    var override = '<td class="text-left"><span class="pull-left"><!--small><i>Override</i></small--> <input data-override type="checkbox" data-name='+model.get("type")+'></span></td>';
+                    levels +=  override + that.getLevelForComponent(model.get("type"),false);
+                    var html = '<tr class="overrideSpacer"></tr><tr class="componentRow borderShow" data-component="'+model.get("type")+'">'+levels+'</tr><tr></tr>';
                     that.ui.filterContent.append(html);
                 });
             },
@@ -135,6 +148,7 @@ define(['require',
             		var components = this.model.get("filter");
             		_.each(components,function(value,key){
             			var obj = components[key];
+            			
             			if((_.isArray(obj.overrideLevels) && obj.overrideLevels.length) || 
             					(_.isArray(obj.hosts) && obj.hosts.length) || obj.expiryTime){
             				var $el = that.$("input[data-name='"+key+"']").filter("[data-override]");
@@ -150,6 +164,7 @@ define(['require',
             							var $checkbox = $override.find("input[data-id='"+obj.overrideLevels[z]+"']");
             							if(! $checkbox.is(":checked")){
             								$checkbox.prop("checked",true);
+            								// that.showHostSelect2(key);
             							}
             						}
             					}
@@ -160,15 +175,75 @@ define(['require',
             				var dateObj = Utils.dateUtil.getMomentObject(obj.expiryTime);
             				that.$("[data-date='"+key+"']").data('daterangepicker').setStartDate(dateObj);
             				that.$("[data-date='"+key+"']").val(dateObj.format("MM/DD/YYYY HH:mm"));
+            				that.showExpiry(key)
             			}
             			//setting hosts
             			if(_.isArray(obj.hosts)){
             				if(obj.hosts.length){
             					that.$("[data-host='"+key+"']").select2("val",obj.hosts);
+                                that.showHostSelect2(key);
             				}
             			}
+            			//setting default values
+            			if(obj.defaultLevels && _.isArray(obj.defaultLevels) && obj.defaultLevels.length){
+            				var $default = that.$("tr[data-component='"+key+"']");
+        					if($default.length){
+        						for(var z=0; z<obj.defaultLevels.length; z++){
+        							var $checkbox = $default.find("input[data-id='"+obj.defaultLevels[z]+"']");
+        							if(! $checkbox.is(":checked")){
+        								$checkbox.prop("checked",true);
+        							}
+        						}
+        					}
+            			}
             		});
             	}
+            	//set check all value
+            	_.each(this.levelCollection.models,function(model){
+            		that.setCheckAllValue(model.get("type"));
+            	});
+            	
+            },
+            onAnyCheckboxClick : function(e){
+            	var $el = $(e.currentTarget);
+            	this.setCheckAllValue($el.data("id"));
+            },
+            onEditHost : function(e){
+            	var $el = $(e.currentTarget);
+            	$el.hide();
+            	if($el.data("type") == "host"){
+            		this.showHostSelect2($el.data("component"));
+                }else{
+            		this.showExpiry($el.data("component"));
+                }
+            },
+            hideHostSelect2 : function(forComponent){
+            	this.ui[forComponent].siblings(".select2-container").hide();
+            	this.$("a[data-component='"+forComponent+"'][data-type='host']").show();
+                this.$('i.hostDown[data-component="'+forComponent+'"]').show();
+            },
+            showHostSelect2 : function(forComponent){
+            	this.ui[forComponent].siblings(".select2-container").show();
+            	this.$("a[data-component='"+forComponent+"'][data-type='host']").hide();
+                this.$('i.hostDown[data-component="'+forComponent+'"]').hide();
+            },
+            showExpiry : function(forComponent){
+            	this.$("[data-date='"+forComponent+"']").show();
+            	this.$("a[data-component='"+forComponent+"'][data-type='expiry']").hide();
+            },
+            hideExpiry : function(forComponent){
+            	this.$("[data-date='"+forComponent+"']").hide();
+            	this.$("a[data-component='"+forComponent+"'][data-type='expiry']").show();
+            },
+            setCheckAllValue : function(type){
+            	var that = this;
+            	if(! type)
+            		return
+            	if(that.$("[data-id='"+type+"']:checked").length == that.$("[data-id='"+type+"']").length){
+        			that.$("[data-value='"+type+"']").prop("checked",true);
+        		}else{
+        			that.$("[data-value='"+type+"']").prop("checked",false);
+        		}
             },
             getLevelForComponent : function(type,checked){
             	var html="";
@@ -181,19 +256,35 @@ define(['require',
             	var $el = $(e.currentTarget);
             	if(e.currentTarget.checked){
             		this.addOverrideRow($el.data("name"));
+                    this.$('tr[data-component="'+$el.data("name")+'"]').removeClass('borderShow ');
+                    this.$('tr[data-component="'+$el.data("name")+'"]').addClass('bgHighlight ');
             	}else{
             		this.removeOverrideRow($el.data("name"));
+                    this.$('tr[data-component="'+$el.data("name")+'"]').addClass('bgHighlight borderShow ');
+                    this.$('tr[data-component="'+$el.data("name")+'"]').removeClass('bgHighlight ');
+            	}
+            },
+            onLogLevelHeaderClick : function(e){
+            	var $el = $(e.currentTarget);
+            	if(e.currentTarget.checked){
+            		this.$("[data-id='"+$el.data("value")+"']").prop("checked",true);
+            	}else{
+            		this.$("[data-id='"+$el.data("value")+"']").prop("checked",false);
             	}
             },
             addOverrideRow : function(forComponent){
-            	var $el = this.ui.filterContent.find("tr[data-component='"+forComponent+"']");
+            	var $el = this.ui.filterContent.find("tr[data-component='"+forComponent+"']"),textForHost = "Click here to apply on specific host",
+            	textForExpiry="Select Expiry Date";
             	if($el.length){
-            		var html = "<tr class='overrideRow "+forComponent+"'><td>&nbsp;</td>"+this.getLevelForComponent($el.data("component"),false)+"</tr>";
-            		html += "<tr class='overrideRow "+forComponent+"'><td>&nbsp;</td><td colspan='3'><input class='datepickerFilter' data-date='"+forComponent+"'></td>" +
-            				"<td colspan='3'><div ><input data-host='"+forComponent+"' type='hidden' /></div></td></tr>"
+            		var html = "<tr class='overrideRow bgHighlight "+forComponent+"'><td class='text-left'><i data-component='"+forComponent+"' class='fa fa-level-down hostDown' aria-hidden='true'></i><a href='javascript:void(0);' data-type='host' data-component='"+forComponent+"'>"+textForHost+"</a><input data-host='"+forComponent+"' type='hidden' /></td>" +
+            				"<td  class='text-left'><a href='javascript:void(0);' data-type='expiry' data-component='"+forComponent+"'>"+textForExpiry+"</a>" +
+            				"<input class='datepickerFilter' data-date='"+forComponent+"'></td>"+this.getLevelForComponent($el.data("component"),false)+"</tr>";
+            		//html += "<tr class='overrideRow "+forComponent+"'><td>&nbsp;</td><td>&nbsp;</td><td colspan='3'><input class='datepickerFilter' data-date='"+forComponent+"'></td>" +
+            			//	"<td colspan='3'><div ><input data-host='"+forComponent+"' type='hidden' /></div></td></tr>"
             		$el.after(html);
             		this.ui[forComponent] = this.$("[data-host='"+forComponent+"']");
             		this.setupSelect2Fields(this.hostList, "host", 'host', forComponent, 'Select Host', 'hostBoolean');
+            		this.hideHostSelect2(forComponent);
             		this.$("[data-date='"+forComponent+"']").daterangepicker({
             	        singleDatePicker: true,
             	        showDropdowns: true,
@@ -208,6 +299,7 @@ define(['require',
 //                        "timePickerIncrement": 1,
                         "timePicker24Hour": true,
             	    });
+            		this.hideExpiry(forComponent);
             	}
             },
             removeOverrideRow : function(foComponent){
@@ -252,7 +344,6 @@ define(['require',
             				expiryTime : (date && date.startDate) ? date.startDate.toJSON() : ""
             		};
             	});
-            	console.log(obj);
             	return (obj);
             },
             getOverideValues : function(ofComponent){

http://git-wip-us.apache.org/repos/asf/ambari/blob/888faf26/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/tabs/LogFileView.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/tabs/LogFileView.js b/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/tabs/LogFileView.js
index 3abfc8d..e8cbba6 100644
--- a/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/tabs/LogFileView.js
+++ b/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/tabs/LogFileView.js
@@ -96,7 +96,7 @@ define(['require',
                 this.logFileCollection = new VLogList([], {
                     state: {
                         firstPage: 0,
-                        pageSize: 50
+                        pageSize: 25
                     }
                 });
                 this.logFileCollection.url = Globals.baseURL + "dashboard/solr/logs_search";
@@ -620,7 +620,7 @@ define(['require',
                     this.RLogFileTable.currentView.$el.find(".logMessage").highlight(selection.toString().trim(), true, e.currentTarget);
                     this.ui.contextMenu.show();
                     this.ui.contextMenu.css({
-                        'top': e.pageY - 88,
+                        'top': e.pageY - 140,
                         'left': e.pageX
                     });
                 } else {
@@ -636,7 +636,11 @@ define(['require',
                         this.ui.find.val(this.selectionText);
                         this.ui.find.trigger("keyup");
                         this.ui.find.focus();
-                    } else {
+                    }else if(type === "IA" || type === "EA"){
+    					this.vent.trigger("toggle:facet",{viewName:((type === "IA") ? "include" : "exclude") +"ServiceColumns",
+    						key:Globals.serviceLogsColumns["log_message"],value:"*"+this.selectionText+"*"});
+    				} 
+                    else {
                         //this.vent.trigger("add:include:exclude",{type:type,value:this.selectionText});
                         this.vent.trigger("toggle:facet", { viewName: ((type === "I") ? "include" : "exclude") + "ServiceColumns", key: Globals.serviceLogsColumns["log_message"], value: this.selectionText });
                     }
@@ -778,7 +782,8 @@ define(['require',
                         error: function(col, response, errorThrown) {
                             that.resetFindParams();
                             if (!!errorThrown.xhr.getAllResponseHeaders()) {
-                                Utils.notifyInfo({ content: "Keyword '" + val + "' not found in " + (keywordType == 1 ? "next" : "previous") + " page !" });
+                              //  Utils.notifyInfo({ content: "Keyword '" + val + "' not found in " + (keywordType == 1 ? "next" : "previous") + " page !" });
+                                that.ui.clearSearch.css({ 'right': 82 + 'px' });
                             }
                         },
                         complete: function() {

http://git-wip-us.apache.org/repos/asf/ambari/blob/888faf26/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/tabs/TreeView.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/tabs/TreeView.js b/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/tabs/TreeView.js
index d2bcd3b..2918606 100644
--- a/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/tabs/TreeView.js
+++ b/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/tabs/TreeView.js
@@ -302,7 +302,6 @@ define(['require',
 				
 			}
 			var data = this.getCheckedHierarchyData();
-			console.log(data);
 			this.vent.trigger("tree:search",{treeParams : JSON.stringify(data)});
 		},
 		onNewTabIconClick : function(e){

http://git-wip-us.apache.org/repos/asf/ambari/blob/888faf26/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/troubleshoot/TroubleShootLayoutView.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/troubleshoot/TroubleShootLayoutView.js b/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/troubleshoot/TroubleShootLayoutView.js
index 58b6707..892bc57 100644
--- a/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/troubleshoot/TroubleShootLayoutView.js
+++ b/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/troubleshoot/TroubleShootLayoutView.js
@@ -71,7 +71,7 @@ define(['backbone',
                 this.vent = new Backbone.Wreqr.EventAggregator();
                 //this.servicesData = {services:{ranger:{label:"Ranger",components:[{name:"ranger_admin"}],dealsWithServices:[{name:"hdfs"},{name:"kms"}],dealsWithComponents:[{name:"security_admin"},{name:"portal"}],},ambari:{label:"Ambari",dealsWithServices:[{name:"ranger"},{name:"hive"}]},hdfs:{label:"Hdfs",components:[{name:"hdfs_namenode"},{name:"hdfs_datanode"}],dealsWithServices:[],dealsWithComponents:[],}}};
                 var todayRange = Utils.dateUtil.getTodayRange();
-                this.params = _.pick(ViewUtils.getDefaultParamsForHierarchy(),"from","to","bundle_id");
+                this.params = _.pick(ViewUtils.getDefaultParamsForHierarchy(),"from","to","bundle_id","host_name","component_name","file_name");
                 this.initializeCollection();
                 this.bindEvents();
             },
@@ -107,6 +107,7 @@ define(['backbone',
             },
             bindEvents : function(){
             	this.listenTo(this.serviceLogsCollection,"reset",function(){
+            		this.renderBarGraph();
             		this.renderLogLevelTable();
             	},this);
             	this.listenTo(this.serviceLogsCollection, 'request', function() {
@@ -126,7 +127,8 @@ define(['backbone',
             	this.listenTo(this.vent,"logtime:filter",function(params){
             		//this.fetchServiceLogsData(params);
             		//this.vent.trigger("graph:data:update",params,this.graphPropModel.attributes);
-            		this.renderGraph(params);
+            		//this.renderGraph(params);
+            		this.fetchLevelCollection(params);
             		this.fetchTopUsers(params);
             	},this);
             },
@@ -141,7 +143,8 @@ define(['backbone',
                 	}
                 });
             	this.renderDateRange();
-            	this.renderGraph(this.params);
+            	//this.renderGraph(this.params);
+            	this.fetchLevelCollection(this.params);
             },
             fetchTopUsers : function(params){
     			var that = this;
@@ -218,9 +221,10 @@ define(['backbone',
             	}
             	this.ui.components.select2("val",selectedComponents);
             	var params = this.getParams();
-            	this.renderGraph(params);
+            	//this.renderGraph(params);
             	//this.fetchServiceLogsData(params);
             	//this.fetchTopUsers(params);
+            	this.fetchLevelCollection(params);
             },
             renderServices : function(data){
             	var that = this;
@@ -255,9 +259,10 @@ define(['backbone',
     				}
     			}).on("change",function(e){
     				var params = that.getParams();
-    				that.renderGraph(params);
+    				//that.renderGraph(params);
                 	//that.fetchServiceLogsData(params);
                 	//that.fetchTopUsers(params);
+    				that.fetchLevelCollection(params);
     			});
             },
             renderDateRange : function(){
@@ -315,6 +320,13 @@ define(['backbone',
             	}
             	return params;
             },
+            fetchLevelCollection : function(params){
+            	_.extend(this.serviceLogsCollection.queryParams, params,{"yAxis":"count",
+        			"xAxis":"level"});
+                this.serviceLogsCollection.fetch({
+                    reset: true
+                });
+            },
             renderGraph : function(params){
             	//var that=this,model = new Backbone.Model({"id":"grid_histo0","title":"test","showX":"showX","xAxis":"access","xTimeFormat":"","xNormalFormat":"","showY":"showY","yAxis":"count","yAxisFormat":"","showLegend":"showLegend","stackOrGroup":"Normal","params":{"from":"2016-03-08T18:30:01.000Z","to":"2016-03-09T18:29:59.999Z","unit":"+1HOUR","yAxis":"count","xAxis":"access"},"myData":{"type":2,"dataId":"grid_histo0"},"col":1,"row":1,"size_x":3,"size_y":2});
             	var that=this,model = new Backbone.Model({
@@ -341,6 +353,53 @@ define(['backbone',
     				}));
                 });
             },
+            renderBarGraph : function(){
+            	var data=[],that=this;
+            	this.serviceLogsCollection.each(function(model){
+            		var d = {
+            				key : "Levels",
+            				values : []
+            		}
+            		for(var z=0; z<model.get("dataCount").length; z++){
+            			var name = model.get("dataCount")[z].name;
+            			d.values.push({
+            				label : (""+name).toUpperCase(),
+            				value : parseInt(model.get("dataCount")[z].value,10),
+            				color : (((""+name).toUpperCase() === 'ERROR') ? ("#E81D1D") :
+                                ( (""+name).toUpperCase() === 'INFO') ? ("#2577B5") :
+                                ( (""+name).toUpperCase() === 'WARN') ? ("#FF8916") :
+                                ( (""+name).toUpperCase() === 'FATAL') ? ("#830A0A") :
+                                ( (""+name).toUpperCase() === 'DEBUG') ? ("#65E8FF") :
+                                ( (""+name).toUpperCase() === 'TRACE') ? ("#888888") : "")
+            			});
+            			
+            		}
+            		data.push(d);
+            	});
+            	nv.addGraph(function() {
+            		  var chart = nv.models.discreteBarChart()
+            		    .x(function(d) { return d.label })
+            		    .y(function(d) { return d.value })
+            		    .staggerLabels(true)
+            		    .width(700)
+            		    .showValues(false)
+            		    chart.tooltip.enabled();
+            		  chart.yAxis
+				      .tickFormat(d3.format('d'));
+            		  
+            		  chart.margin({
+                          right: 100,
+                          left: 120,
+                      });
+            		  d3.select(that.$("[data-id='serviceGraph'] svg")[0])
+            		    .datum(data)
+            		    .transition().duration(500)
+            		    .call(chart)
+            		    ;
+            		  d3.selectAll
+            		  return chart;
+            	});
+            },
             renderLogLevelTable : function(){
             	var that = this;
             	this.ui.logLevelTable.empty();
@@ -439,7 +498,6 @@ define(['backbone',
     			$el.siblings().removeClass("active");
     			$el.toggleClass("active");
         		if(serviceSelected.length){
-        			console.log(this.servicesData.service);
 //        			var serviceObj = this.servicesData.service[serviceSelected.data("name")];
 //        			if(serviceObj){
         				var found = getDependentServices(serviceSelected.data("name"),service);

http://git-wip-us.apache.org/repos/asf/ambari/blob/888faf26/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/styles/style.css
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/styles/style.css b/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/styles/style.css
index 7361df7..de5e45a 100644
--- a/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/styles/style.css
+++ b/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/styles/style.css
@@ -185,6 +185,12 @@ p.log-line:before {
 .btn-search {
 	padding: 2px 6px 3px;
 	line-height: 1.42857143;
+  margin:0 0;
+}
+
+.btn-searchCompare {
+  padding: 2px 6px 3px;
+  line-height: 1.42857143;
   margin:3px 0;
 }
 
@@ -1346,6 +1352,10 @@ img.quickLinkNav{
   right: -1px;
   top: -2px;
 }
+.hostNodes{
+  height: 450px;
+  overflow: auto;
+}
 .hostNodes li{
   cursor: pointer;
 }
@@ -1981,37 +1991,99 @@ input:-webkit-autofill:active{
 }
 
 
-/*
-.table-fixed thead {
-  width: 97%;
+
+.logFeederTable{
+  border-collapse: separate; border-spacing: 0;
+  position: fixed;
+}
+
+.logFeederTable{
+  width: 906px;
+  display : block;
 }
-.table-fixed tbody {
-  height: 230px;
+
+.logFeederTable tbody {
+  height: 365px;
   overflow-y: auto;
-  width: 100%;
+  width: 906px;
+  display : block;
 }
-.table-fixed thead > tr> th {
-  display: table-cell;
-  border-bottom:1px solid #CCC;
+
+.logFeederTable th {
+  width: 90px;
+  border-left:1px solid #CCC;
+  border-right:1px solid #CCC;
+  border-top:1px solid #CCC !important;
+  border-bottom:1px solid #CCC !important;
+  background-color: #FFF;
 }
-.table-fixed thead, .table-fixed tbody {
-  display: block;
+.logFeederTable th:first-of-type {
+  width: 312px;
+  border-right:1px solid #CCC;
+  border-top:1px solid #CCC !important;
+  border-bottom:1px solid #CCC !important;
 }
-.table-fixed thead > tr> th{
-  width:13%;
+.logFeederTable th:nth-child(2) {
+  width : 190px;
+  border-top:1px solid #CCC !important;
+  border-bottom:1px solid #CCC !important; 
 }
-.table-fixed thead > tr> th:first-of-type{
-  width:28%;
+.datepickerFilter {
+  width:100%;
 }
-.table-fixed thead > tr> th:last-of-type{
-  border-right-width:0;
-}*/
-.logFeederTabel th {
-	width : 12%;
+.logFeederTable td {
+  width :90px;
+  padding:0 10px;
 }
-.logFeederTabel th:first-of-type {
-	width : 28%;
+.logFeederTable td:first-of-type {
+  width: 269px;
+  padding:0 10px;
 }
-.datepickerFilter {
-	width:100%;
+.logFeederTable td:nth-child(2) {
+   width: 178px;
+   padding: 0 10px;
 }
+.logFeederTable tr.componentRow td{
+  border-top: solid 1px #CCC!important;
+}
+.logFeederTable tr.overrideRow td{
+  border-bottom: solid 1px #CCC!important; 
+}
+.logFeederTable tr.borderShow td{
+  border-bottom: solid 1px #CCC!important; 
+}
+
+.logFeederTable tr.componentRow td:first-child {border-left: solid 1px #CCC; }
+.logFeederTable tr.componentRow td:last-child { border-right: solid 1px #CCC;}
+
+
+.logFeederTable tr.overrideRow td:first-child { border-left: solid 1px #CCC;  }
+.logFeederTable tr.overrideRow td:last-child { border-right: solid 1px #CCC; }
+
+.logFeederTable tr.bgHighlight{
+  background-color: rgba(255, 238, 0, 0.19) !important;
+}
+
+.overrideSpacer{
+  height:13px !important;
+}
+.hostDown{
+  color: #333;
+  margin-right:5px;
+}
+input.filterInput{
+  height: 20px;
+}
+.logFeederTable a{
+  border-bottom:1px dotted;
+}
+.logFeederTable a:hover{
+  text-decoration: none;
+}
+.VS-search .search_input{
+  width: 2px !important;
+}
+.VS-search .search_input input{
+  margin-top: 0 !important;
+}
+

http://git-wip-us.apache.org/repos/asf/ambari/blob/888faf26/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/styles/style_v2.css
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/styles/style_v2.css b/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/styles/style_v2.css
index 832c80a..a4264a1 100644
--- a/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/styles/style_v2.css
+++ b/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/styles/style_v2.css
@@ -1313,7 +1313,7 @@ ul.DTTT_dropdown.dropdown-menu > li:hover > a {
   min-height: 26px;
   display: block;
   height: 26px;
-  padding: 0 0 0 8px;
+  padding: 0 0 0 4px;
   overflow: hidden;
   position: relative;
   border: 1px solid #aaa;

http://git-wip-us.apache.org/repos/asf/ambari/blob/888faf26/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/templates/common/Header_tmpl.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/templates/common/Header_tmpl.html b/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/templates/common/Header_tmpl.html
index c77f92f..0bc60c3 100644
--- a/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/templates/common/Header_tmpl.html
+++ b/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/templates/common/Header_tmpl.html
@@ -24,7 +24,12 @@
                         <img src="images/timezone.png" style=" height: 27px;  margin-top: 9px;">
                     </a>
                 </li>
-                <li class="dropdown" data-id="exclusionList" title="Global Exclusion">
+               <!--  <li class="dropdown" data-id="exclusionList" title="Global Exclusion">
+                    <a href="#" class="account excludeStatus" data-toggle="modal">
+                        <i class="fa fa-filter  pull-right"></i>
+                    </a>
+                </li> -->
+                 <li class="dropdown" data-id="createFilters" title="Global Exclusion">
                     <a href="#" class="account excludeStatus" data-toggle="modal">
                         <i class="fa fa-filter  pull-right"></i>
                     </a>
@@ -70,10 +75,10 @@
                                 <i class="fa fa-rocket"></i>
                                 <span>Take A Tour</span>
                             </a>
-                            <a class="hidden" href="javascript:void(0)" data-id="createFilters" title="Custom Filters">
+                           <!--  <a class="" href="javascript:void(0)" data-id="createFilters" title="Custom Filters">
                                 <i class="fa fa-filter"></i>
-                                <span>Create Filter</span>
-                            </a>
+                                <span>Logfeeder Filter</span>
+                            </a> -->
                             <a href="logout.html">
                                 <i class="fa fa-power-off"></i>
                                 <span>LogOut</span>

http://git-wip-us.apache.org/repos/asf/ambari/blob/888faf26/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/templates/dashboard/MainLayoutView_tmpl.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/templates/dashboard/MainLayoutView_tmpl.html b/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/templates/dashboard/MainLayoutView_tmpl.html
index cd0dda2..c79ed1d 100644
--- a/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/templates/dashboard/MainLayoutView_tmpl.html
+++ b/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/templates/dashboard/MainLayoutView_tmpl.html
@@ -224,8 +224,8 @@
                 <span>Add Component</span>
             </div>
             <div class="col-md-3">
-                <button class="btn btn-info btn-search" data-id="CompareButton">Compare</button>
-                <button class="btn bg-success btn-search" data-id="CompareClearAll" style="margin-bottom: 0px;">clear all</button>
+                <button class="btn btn-info btn-searchCompare" data-id="CompareButton">Compare</button>
+                <button class="btn bg-success btn-searchCompare" data-id="CompareClearAll" style="margin-bottom: 0px;">clear all</button>
             </div>
         </div>
     </div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/888faf26/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/templates/filter/CreateLogfeederFilter_tmpl.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/templates/filter/CreateLogfeederFilter_tmpl.html b/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/templates/filter/CreateLogfeederFilter_tmpl.html
index 5139e57..fe2a5c1 100644
--- a/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/templates/filter/CreateLogfeederFilter_tmpl.html
+++ b/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/templates/filter/CreateLogfeederFilter_tmpl.html
@@ -23,17 +23,18 @@
                         </div> -->
                         <div class="row row-margin-bottom row-topMargin">
                             <div class="col-md-12">
-                                <table class="table table-bordered table-hover table-condensed text-center logFeederTabel">
+                                <table class="table table-condensed text-center logFeederTable">
                                        <thead>
-                                       <tr>
+                                        <tr>
                                            <th>Components</th>
-                                           <th class="FATAL">FATAL</th>
-                                           <th class="ERROR">ERROR</th>
-                                           <th class="WARN">WARN</th>
-                                           <th class="INFO">INFO</th>
-                                           <th class="DEBUG">DEBUG</th>
-                                           <th class="TRACE">TRACE</th>
-										</tr>
+                                           <th>Override</th>
+                                           <th class="FATAL text-center"><span class="pull-left"><input type="checkbox" data-value="FATAL"></span><span>FATAL</span></th>
+                                           <th class="ERROR  text-center"><span class="pull-left"><input type="checkbox" data-value="ERROR"></span><span>ERROR</span></th>
+                                           <th class="WARN  text-center"><span class="pull-left"><input type="checkbox" data-value="WARN"></span><span>WARN</span></th>
+                                           <th class="INFO  text-center"><span class="pull-left"><input type="checkbox" data-value="INFO"></span><span>INFO</span></th>
+                                           <th class="DEBUG  text-center"><span class="pull-left"><input type="checkbox" data-value="DEBUG"></span><span>DEBUG</span></th>
+                                           <th class="TRACE  text-center"><span class="pull-left"><input type="checkbox" data-value="TRACE"></span><span>TRACE</span></th>
+                                        </tr>
                                        </thead>
                                        <tbody id="filterContent"></tbody>
                                 </table>

http://git-wip-us.apache.org/repos/asf/ambari/blob/888faf26/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/templates/tabs/LogFileView_tmpl.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/templates/tabs/LogFileView_tmpl.html b/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/templates/tabs/LogFileView_tmpl.html
index 4869cd1..f86190c 100644
--- a/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/templates/tabs/LogFileView_tmpl.html
+++ b/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/templates/tabs/LogFileView_tmpl.html
@@ -154,13 +154,15 @@
 			</div>
 		</div>
 	</div>
-	<div class="btn-group contextMenu" style="display:none;position:absolute;z-index:9999;">
+	<div class="btn-group contextMenu dropup" style="display:none;position:absolute;z-index:9999;">
 	    <button type="button" class="btn btn-info btn-circle btn-app-sm btn-context dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
 	        <i class="fa fa-info"></i>
 	    </button>
 	    <ul class="dropdown-menu">
 	        <li><a data-id="I" href="javascript:void(0);">Include</a></li>
 	        <li><a data-id="E" href="javascript:void(0);">Exclude</a></li>
+	        <li><a data-id="IA" href="javascript:void(0);">*Include*</a></li>
+	        <li><a data-id="EA" href="javascript:void(0);">*Exclude*</a></li>
 	        <li role="separator" class="divider"></li>
 	        <li><a data-id="F" href="javascript:void(0);">Find</a></li>
 	    </ul>

http://git-wip-us.apache.org/repos/asf/ambari/blob/888faf26/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/templates/troubleshoot/TroubleShootLayoutView_tmpl.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/templates/troubleshoot/TroubleShootLayoutView_tmpl.html b/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/templates/troubleshoot/TroubleShootLayoutView_tmpl.html
index a1b4e40..3faaaa6 100644
--- a/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/templates/troubleshoot/TroubleShootLayoutView_tmpl.html
+++ b/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/templates/troubleshoot/TroubleShootLayoutView_tmpl.html
@@ -76,7 +76,8 @@
 						</div>
 						<div class="box-content">
 							<div class="col-md-8" style="height: 250px;"
-								data-id="serviceGraph"></div>
+								data-id="serviceGraph"><svg></svg></div>
+
 							<div class="col-md-3" style="margin-top:1%">
 								<table class="table table-bordered table-hover custTable"
 									data-id="logLevelTable">

http://git-wip-us.apache.org/repos/asf/ambari/blob/888faf26/ambari-logsearch/pom.xml
----------------------------------------------------------------------
diff --git a/ambari-logsearch/pom.xml b/ambari-logsearch/pom.xml
index 475de9f..9fa7c96 100644
--- a/ambari-logsearch/pom.xml
+++ b/ambari-logsearch/pom.xml
@@ -154,6 +154,7 @@
           <excludes>
             <exclude>README.md</exclude>
             <exclude>**/*.json</exclude>
+            <exclude>**/*.log</exclude>
           </excludes>
         </configuration>
         <executions>