logster 2.2.0 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 898c489f2c456f2c301686c92fbb0d84f490c92e52bb14e4f0fa7696c68a71e2
4
- data.tar.gz: 2ce45b725d50d43bb79f7eec5d0e9216631b617a8841c9adbc878f84267eedcd
3
+ metadata.gz: 68799d063f1eb9cc2cedbb1c88ff2d8b83fcf27959f602778cb9b4387cfb5a76
4
+ data.tar.gz: 3e6b055f68c84af171b9442eb44bb785156c743a4c2050d8fc276c31b194236b
5
5
  SHA512:
6
- metadata.gz: 8e2f1ea6e080db96266106173ec1020fa525190ec22fa9717a7be97a7500dfed4f8b4fc289358e949b2a0df7a7444ad3b99add718f22c79f605915752d1c3c9f
7
- data.tar.gz: 482810869a48d60c51878fd6dd2bc9ccdcfb83900bb0a58618bb2bf4ee7e1c3cebb3acb59a62297f96ced1c95b6f9d2cb99331b1efd7deccccfc6465149c1426
6
+ metadata.gz: 13e14d3745cae3716d7f8133e1617935d73568e78c7cd76f92fd472c737ffc9f66c5a394f91e1f63374b41eb9412227b6c1eefc7068c71682d5e2c7694695cd9
7
+ data.tar.gz: ed736a79f07daa41263b166893a756f429991e79bc4fc5e6dc8c58ffd5c23be2fe2f83c73b88c1deb68a1e4255ab377da070402b6be5a60034753798cf5d8163
@@ -1,5 +1,9 @@
1
1
  # CHANGELOG
2
2
 
3
+ - 2019-03-26: 2.3.0
4
+
5
+ - FEATURE: track count of suppressed logs for each pattern
6
+
3
7
  - 2019-03-19: 2.2.0
4
8
 
5
9
  - FEATURE: custom suppression patterns via UI
@@ -22,12 +22,12 @@ var s=Em.$(document)
22
22
  t.forEach(function(e){return s.unbind(e,r)}),n.forEach(function(e){return s.unbind(e,a)})}
23
23
  this.divider.on(a.join(" "),function(e){e.preventDefault(),Em.$("<div id='overlay'></div>").appendTo(Em.$("body")),i=!0,Em.$(document).on(t.join(" "),_.throttle(r,25)).on(n.join(" "),o)}),Em.run.next(function(){var t=localStorage&&localStorage.logster_divider_bottom||300,n=s.height()-parseInt(t,10)
24
24
  e.divideView(n,s)})},willDestroyElement:function(){Em.$(".divider").off(a.join(" "))}})}),define("client-app/components/patterns-list",["exports","client-app/models/pattern-item","client-app/lib/utilities"],function(e,t,n){function a(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t]
25
- return n}return Array.from(e)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=Ember.Component.extend({immutable:Ember.computed.not("mutable"),init:function(){this._super.apply(this,arguments),this.get("patterns.length")<1&&this.get("mutable")&&this.send("create")},allPatterns:Ember.computed("patterns.[]","newPatterns.[]",function(){var e=this.get("patterns").map(function(e){return t.default.create({value:e})}),n=this.get("newPatterns")||[]
26
- return[].concat(a(n.reverse()),a(e.reverse()))}),makeAPICall:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.method
25
+ return n}return Array.from(e)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=Ember.Component.extend({immutable:Ember.computed.not("mutable"),init:function(){this._super.apply(this,arguments),this.get("patterns.length")<1&&this.get("mutable")&&this.send("create")},allPatterns:Ember.computed("patterns.[]","newPatterns.[]",function(){var e=this.get("patterns"),t=this.get("newPatterns")||[]
26
+ return[].concat(a(t.reverse()),a(e.reverse()))}),makeAPICall:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.method
27
27
  return delete e.method,(0,n.ajax)("/patterns/"+this.get("key")+".json",{method:t,data:e})},alwaysBlock:function(e){e.set("saving",!1)},catchBlock:function(e,t){t.responseText?e.set("error",t.responseText):e.set("error","Unkown error occured. Please see dev console.")},requestInit:function(e){e.setProperties({saving:!0,error:null})},actions:{create:function(){this.get("newPatterns")||this.set("newPatterns",[]),this.get("newPatterns").pushObject(t.default.create({isNew:!0}))},trash:function(e){var t=this
28
- e.get("isNew")?(this.get("newPatterns").removeObject(e),e.destroy()):(this.requestInit(e),this.makeAPICall({method:"DELETE",pattern:e.get("value")}).then(function(){t.get("patterns").removeObject(e.get("value")),e.destroy()}).catch(function(n){return t.catchBlock(e,n)}).always(function(){return t.alwaysBlock(e)}))},save:function(e){var t=this
29
- this.requestInit(e);(e.get("isNew")?this.makeAPICall({method:"POST",pattern:e.get("valueBuffer")}).then(function(n){e.updateValue(n.pattern),e.set("isNew",!1),t.get("patterns").pushObject(e.get("value")),t.get("newPatterns").removeObject(e)}):this.makeAPICall({method:"PUT",pattern:e.get("value"),new_pattern:e.get("valueBuffer")}).then(function(n){var a=t.get("patterns").indexOf(e.get("value"))
30
- e.updateValue(n.pattern),t.get("patterns")[a]=e.get("value")})).catch(function(n){t.catchBlock(e,n)}).always(function(){return t.alwaysBlock(e)})}}})}),define("client-app/components/tab-contents",["exports"],function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=Ember.Component.extend({classNameBindings:["active",":content","name"],isLink:!1,invokeParent:function(e){for(var t=this.get("parentView");t&&!t[e];)t=t.get("parentView")
28
+ e.get("isNew")?(this.get("newPatterns").removeObject(e),e.destroy()):(this.requestInit(e),this.makeAPICall({method:"DELETE",pattern:e.get("value")}).then(function(){t.get("patterns").removeObject(e),e.destroy()}).catch(function(n){return t.catchBlock(e,n)}).always(function(){return t.alwaysBlock(e)}))},save:function(e){var t=this
29
+ this.requestInit(e);(e.get("isNew")?this.makeAPICall({method:"POST",pattern:e.get("valueBuffer")}).then(function(n){e.updateValue(n.pattern),e.set("isNew",!1),t.get("patterns").pushObject(e),t.get("newPatterns").removeObject(e)}):this.makeAPICall({method:"PUT",pattern:e.get("value"),new_pattern:e.get("valueBuffer")}).then(function(t){e.updateValue(t.pattern),e.set("count",0)})).catch(function(n){t.catchBlock(e,n)}).always(function(){return t.alwaysBlock(e)})},resetCount:function(e){var t=this
30
+ e.set("saving",!0),(0,n.ajax)("/reset-count.json",{method:"PUT",data:{pattern:e.get("value"),hard:!!e.get("hard")}}).then(function(){e.set("count",0)}).catch(function(n){return t.catchBlock(e,n)}).always(function(){return t.alwaysBlock(e)})}}})}),define("client-app/components/tab-contents",["exports"],function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=Ember.Component.extend({classNameBindings:["active",":content","name"],isLink:!1,invokeParent:function(e){for(var t=this.get("parentView");t&&!t[e];)t=t.get("parentView")
31
31
  t&&t[e](this)},didInsertElement:function(){this.invokeParent("addTab"),this.get("defaultTab")&&this.invokeParent("selectTab")},willDestroyElement:function(){this.invokeParent("removeTab")}})}),define("client-app/components/tabbed-section",["exports"],function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=Ember.Component.extend({tabs:Em.A(),selectTab:function(e){if(e.get("isLink"))this.triggerAction(e.get("action"))
32
32
  else{var t=this.get("selected")
33
33
  t&&t.set("active",!1),this.set("selected",e),e.set("active",!0)}},addTab:function(e){this.get("tabs").addObject(e),this.get("selected")||e.get("isLink")||this.selectTab(e)},removeTab:function(e){this.get("selected")===e&&this.set("selected",null),this.get("tabs").removeObject(e)}})}),define("client-app/components/time-formatter",["exports","client-app/lib/utilities"],function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=Ember.Component.extend({tagName:"span",classNames:"auto-update-time",attributeBindings:["dataTimestamp:data-timestamp","title"],title:Ember.computed(function(){return this.get("moment").format()}),dataTimestamp:Ember.computed(function(){return this.get("timestamp")}),moment:Ember.computed(function(){return moment(this.get("timestamp"))}),time:Ember.computed("timestamp",function(){return(0,t.formatTime)(this.get("timestamp"))})})}),define("client-app/components/update-time",["exports","client-app/lib/utilities"],function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=Ember.Component.extend({didInsertElement:function(){Em.run.later(function e(){Em.$(".auto-update-time").each(function(){var e=parseInt(this.getAttribute("data-timestamp"),10),n=(0,t.formatTime)(e)
@@ -102,14 +102,14 @@ case 3:return"error"
102
102
  case 4:return"fatal"}}),glyph:Ember.computed("severity",function(){switch(this.get("severity")){case 0:case 1:return""
103
103
  case 2:return"<i class='fa fa-exclamation-circle warning'></i>"
104
104
  case 3:return"<i class='fa fa-times-circle error'></i>"
105
- case 4:return"<i class='fa fa-times-circle fatal'></i>"}})})}),define("client-app/models/pattern-item",["exports"],function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=Ember.Object.extend({isNew:!1,value:"",valueBuffer:"",error:null,saving:!1,init:function(){this._super.apply(this,arguments),this.set("valueBuffer",this.get("value"))},updateValue:function(e){this.setProperties({value:e,valueBuffer:e})},hasBuffer:Ember.computed("value","valueBuffer",function(){return this.get("value")!==this.get("valueBuffer")})})}),define("client-app/resolver",["exports","ember-resolver"],function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=t.default})
105
+ case 4:return"<i class='fa fa-times-circle fatal'></i>"}})})}),define("client-app/models/pattern-item",["exports"],function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=Ember.Object.extend({isNew:!1,value:"",valueBuffer:"",error:null,saving:!1,count:0,init:function(){this._super.apply(this,arguments),this.set("valueBuffer",this.get("value"))},updateValue:function(e){this.setProperties({value:e,valueBuffer:e})},hasBuffer:Ember.computed("value","valueBuffer",function(){return this.get("value")!==this.get("valueBuffer")}),zeroCount:Ember.computed("count",function(){return this.get("count")<=0})})}),define("client-app/resolver",["exports","ember-resolver"],function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=t.default})
106
106
  define("client-app/router",["exports","client-app/config/environment"],function(e,t){Object.defineProperty(e,"__esModule",{value:!0})
107
107
  var n=Ember.Router.extend({location:t.default.locationType,rootURL:t.default.rootURL})
108
108
  n.map(function(){this.route("index",{path:"/"}),this.route("show",{path:"/show/:id"}),this.route("settings")}),e.default=n}),define("client-app/routes/index",["exports","client-app/models/message-collection","client-app/lib/utilities"],function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=Ember.Route.extend({model:function(){return t.default.create()},setupController:function(e,t){this._super(e,t),t.setProperties(e.getProperties("filter","search")),t.reload(),e.set("initialized",!0)
109
109
  var a=0,s=1
110
110
  this.refreshInterval=setInterval(function(){a+=1
111
111
  var e=(0,n.isHidden)(),i=!e
112
- e&&a%s==0&&(i=!0,s<20&&s++),i&&(t.loadMore(),e||(s=1))},3e3),this.events.on("panelResized",function(t){e.resizePanels(t)})},deactivate:function(){clearInterval(this.refreshInterval)}})}),define("client-app/routes/settings",["exports","client-app/lib/utilities"],function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=Ember.Route.extend({model:function(){return(0,t.ajax)("/settings.json")},setupController:function(e,t){this._super.apply(this,arguments)
113
- var n=t.coded_patterns&&t.coded_patterns.length>0
114
- e.set("showCodedPatterns",n)}})}),define("client-app/routes/show",["exports","client-app/models/message","client-app/lib/utilities"],function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=Ember.Route.extend({model:function(e){return(0,n.preloadOrAjax)("/show/"+e.id+".json")},setupController:function(e,n){this._super.apply(this,arguments),e.set("model",t.default.create(n))}})}),define("client-app/services/ajax",["exports","ember-ajax/services/ajax"],function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})}),define("client-app/templates/application",["exports"],function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=Ember.HTMLBars.template({id:"yOsrYpw5",block:'{"symbols":[],"statements":[[1,[21,"update-time"],false],[0,"\\n"],[1,[21,"outlet"],false],[0,"\\n"]],"hasEval":false}',meta:{moduleName:"client-app/templates/application.hbs"}})}),define("client-app/templates/components/actions-menu",["exports"],function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=Ember.HTMLBars.template({id:"ebB3+Z4x",block:'{"symbols":["&default"],"statements":[[4,"if",[[23,["actionsInMenu"]]],null,{"statements":[[4,"if",[[23,["showMenu"]]],null,{"statements":[[0," "],[7,"div"],[11,"class","actions-menu"],[9],[0,"\\n "],[14,1],[0,"\\n "],[10],[0,"\\n"]],"parameters":[]},null],[0," "],[7,"button"],[11,"class","expand btn no-text"],[3,"action",[[22,0,[]],"expandMenu"]],[9],[7,"i"],[11,"class","fa fa-ellipsis-h"],[9],[10],[10],[0,"\\n "],[7,"button"],[11,"class","share btn"],[3,"action",[[22,0,[]],"share"]],[9],[7,"i"],[11,"class","fa fa-share"],[9],[10],[7,"span"],[9],[0,"Share"],[10],[10],[0,"\\n"]],"parameters":[]},{"statements":[[0," "],[14,1],[0,"\\n "],[7,"button"],[11,"class","share btn"],[3,"action",[[22,0,[]],"share"]],[9],[7,"i"],[11,"class","fa fa-share"],[9],[10],[7,"span"],[9],[0,"Share"],[10],[10],[0,"\\n"]],"parameters":[]}]],"hasEval":false}',meta:{moduleName:"client-app/templates/components/actions-menu.hbs"}})}),define("client-app/templates/components/env-tab",["exports"],function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=Ember.HTMLBars.template({id:"5078JpTW",block:'{"symbols":[],"statements":[[4,"if",[[23,["isEnvArray"]]],null,{"statements":[[0," "],[7,"div"],[11,"class","nav-controls"],[9],[0,"\\n "],[7,"button"],[12,"disabled",[21,"disableBackButtons"]],[11,"class","btn nav-btn no-text"],[3,"action",[[22,0,[]],"bigJump","back"]],[9],[7,"i"],[11,"class","fa fa-fast-backward"],[9],[10],[10],[0,"\\n "],[7,"button"],[12,"disabled",[21,"disableBackButtons"]],[11,"class","btn nav-btn no-text"],[3,"action",[[22,0,[]],"takeStep","back"]],[9],[7,"i"],[11,"class","fa fa-backward"],[9],[10],[10],[0,"\\n "],[7,"span"],[11,"class","env-number"],[9],[1,[21,"current"],false],[0,"/"],[1,[23,["message","env","length"]],false],[10],[0,"\\n "],[7,"button"],[12,"disabled",[21,"disableForwardButtons"]],[11,"class","btn nav-btn no-text"],[3,"action",[[22,0,[]],"takeStep","front"]],[9],[7,"i"],[11,"class","fa fa-forward"],[9],[10],[10],[0,"\\n "],[7,"button"],[12,"disabled",[21,"disableForwardButtons"]],[11,"class","btn nav-btn no-text"],[3,"action",[[22,0,[]],"bigJump","front"]],[9],[7,"i"],[11,"class","fa fa-fast-forward"],[9],[10],[10],[0,"\\n "],[10],[0,"\\n"]],"parameters":[]},null],[1,[21,"html"],true],[0,"\\n"]],"hasEval":false}',meta:{moduleName:"client-app/templates/components/env-tab.hbs"}})}),define("client-app/templates/components/message-info",["exports"],function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=Ember.HTMLBars.template({id:"SK12lkYh",block:'{"symbols":["btn"],"statements":[[7,"div"],[11,"class","message-info"],[9],[0,"\\n"],[4,"tabbed-section",null,null,{"statements":[[4,"tab-contents",null,[["name","hint","currentMessage"],["info","show info",[23,["currentMessage"]]]],{"statements":[[4,"if",[[23,["showTitle"]]],null,{"statements":[[0," "],[7,"h3"],[9],[0,"Message\\n"],[4,"if",[[23,["currentMessage","showCount"]]],null,{"statements":[[0," ("],[1,[23,["currentMessage","count"]],false],[0," copies reported)\\n"]],"parameters":[]},null],[0," "],[10],[0,"\\n"]],"parameters":[]},null],[0," "],[7,"pre"],[9],[1,[23,["currentMessage","message"]],false],[10],[0,""]],"parameters":[]},null],[4,"tab-contents",null,[["name","defaultTab","hint","currentMessage"],["backtrace","true","show backtrace",[23,["currentMessage"]]]],{"statements":[[4,"if",[[23,["showTitle"]]],null,{"statements":[[0," "],[7,"h3"],[9],[0,"Backtrace"],[10],[0,"\\n"]],"parameters":[]},null],[0," "],[7,"pre"],[9],[1,[23,["currentMessage","backtrace"]],false],[10],[0,""]],"parameters":[]},null],[4,"if",[[23,["currentMessage","env"]]],null,{"statements":[[4,"tab-contents",null,[["className","name","hint","currentMessage"],["env","env","show environment",[23,["currentMessage"]]]],{"statements":[[4,"if",[[23,["showTitle"]]],null,{"statements":[[0," "],[7,"h3"],[9],[0,"Env"],[10],[0,"\\n"]],"parameters":[]},null],[0," "],[1,[27,"env-tab",null,[["message"],[[23,["currentMessage"]]]]],false],[0,"\\n"]],"parameters":[]},null]],"parameters":[]},null]],"parameters":[]},null],[0,"\\n"],[4,"if",[[23,["currentMessage"]]],null,{"statements":[[0," "],[7,"div"],[11,"class","message-actions"],[9],[0,"\\n"],[4,"actions-menu",null,[["actionsInMenu","share"],[[23,["actionsInMenu"]],[27,"action",[[22,0,[]],"share"],null]]],{"statements":[[4,"each",[[23,["buttons"]]],null,{"statements":[[0," "],[7,"button"],[12,"class",[28,[[22,1,["klass"]]," btn ",[27,"if",[[22,1,["danger"]],"danger",""],null]]]],[3,"action",[[22,0,[]],[22,1,["action"]]]],[9],[0,"\\n "],[7,"i"],[12,"class",[28,["fa fa-",[22,1,["icon"]]]]],[9],[10],[0,"\\n "],[7,"span"],[9],[1,[22,1,["label"]],false],[10],[0,"\\n "],[10],[0,"\\n"]],"parameters":[1]},null]],"parameters":[]},null],[0," "],[10],[0,"\\n"]],"parameters":[]},null],[10],[0,"\\n"]],"hasEval":false}',meta:{moduleName:"client-app/templates/components/message-info.hbs"}})}),define("client-app/templates/components/message-row",["exports"],function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=Ember.HTMLBars.template({id:"pF0hQ9a+",block:'{"symbols":[],"statements":[[7,"div"],[11,"class","count"],[9],[0,"\\n"],[4,"if",[[23,["model","showCount"]]],null,{"statements":[[0," "],[1,[23,["model","count"]],false],[0,"\\n"]],"parameters":[]},null],[10],[0,"\\n"],[7,"div"],[11,"class","severity"],[9],[1,[23,["model","glyph"]],true],[10],[0,"\\n"],[7,"div"],[11,"class","message-body"],[9],[0,"\\n "],[1,[23,["model","displayMessage"]],false],[0,"\\n"],[10],[0,"\\n"],[7,"div"],[11,"class","protected"],[9],[0,"\\n"],[4,"if",[[23,["model","protected"]]],null,{"statements":[[0," "],[7,"i"],[11,"title","message is protected, clearing will not remove it"],[11,"class","fa fa-lock"],[9],[10],[0,"\\n"]],"parameters":[]},null],[10],[0,"\\n"],[7,"div"],[11,"class","time"],[9],[1,[27,"time-formatter",null,[["timestamp"],[[23,["model","timestamp"]]]]],false],[10],[0,"\\n"]],"hasEval":false}',meta:{moduleName:"client-app/templates/components/message-row.hbs"}})}),define("client-app/templates/components/panel-resizer",["exports"],function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=Ember.HTMLBars.template({id:"FLUzT7ST",block:'{"symbols":[],"statements":[[7,"div"],[11,"class","line-1"],[9],[10],[0,"\\n"],[7,"div"],[11,"class","line-2"],[9],[10],[0,"\\n"],[7,"div"],[11,"class","line-3"],[9],[10],[0,"\\n"]],"hasEval":false}',meta:{moduleName:"client-app/templates/components/panel-resizer.hbs"}})}),define("client-app/templates/components/patterns-list",["exports"],function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=Ember.HTMLBars.template({id:"5na0eBOC",block:'{"symbols":["pattern"],"statements":[[4,"if",[[23,["mutable"]]],null,{"statements":[[0," "],[7,"button"],[11,"class","btn new-pattern"],[3,"action",[[22,0,[]],"create"]],[9],[7,"i"],[11,"class","fa fa-plus"],[9],[10],[0," New"],[10],[0,"\\n"]],"parameters":[]},null],[4,"each",[[23,["allPatterns"]]],null,{"statements":[[0," "],[7,"div"],[11,"class","pattern-wrapper"],[9],[0,"\\n "],[1,[27,"input",null,[["type","class","placeholder","value","disabled"],["textfield","pattern-input","Enter regular expression…",[22,1,["valueBuffer"]],[27,"or",[[23,["immutable"]],[22,1,["saving"]]],null]]]],false],[0,"\\n"],[4,"if",[[23,["mutable"]]],null,{"statements":[[4,"if",[[22,1,["hasBuffer"]]],null,{"statements":[[0," "],[7,"button"],[12,"disabled",[22,1,["saving"]]],[11,"class","btn ok no-text save"],[3,"action",[[22,0,[]],"save",[22,1,[]]]],[9],[7,"i"],[11,"class","fa fa-check"],[9],[10],[10],[0,"\\n"]],"parameters":[]},null],[0," "],[7,"button"],[12,"disabled",[22,1,["saving"]]],[11,"class","btn no-text trash"],[3,"action",[[22,0,[]],"trash",[22,1,[]]]],[9],[7,"i"],[11,"class","fa fa-trash"],[9],[10],[10],[0,"\\n"]],"parameters":[]},null],[0," "],[10],[4,"if",[[22,1,["error"]]],null,{"statements":[[7,"pre"],[11,"class","api-error"],[9],[1,[22,1,["error"]],false],[10]],"parameters":[]},null]],"parameters":[1]},null]],"hasEval":false}',meta:{moduleName:"client-app/templates/components/patterns-list.hbs"}})}),define("client-app/templates/components/tabbed-section",["exports"],function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=Ember.HTMLBars.template({id:"nreTgL17",block:'{"symbols":["tab","&default"],"statements":[[14,2],[0,"\\n"],[7,"ul"],[11,"class","tabs"],[9],[0,"\\n"],[4,"each",[[23,["tabs"]]],null,{"statements":[[0," "],[7,"li"],[9],[0,"\\n "],[7,"a"],[12,"title",[28,[[27,"unbound",[[22,1,["hint"]]],null]]]],[11,"href","#"],[12,"class",[28,[[27,"if",[[22,1,["active"]],"active"],null]]]],[3,"action",[[22,0,[]],[23,["selectTab"]],[22,1,[]]]],[9],[0,"\\n "],[1,[27,"unbound",[[22,1,["name"]]],null],false],[0,"\\n "],[10],[0,"\\n "],[10],[0,"\\n"]],"parameters":[1]},null],[10],[0,"\\n"]],"hasEval":false}',meta:{moduleName:"client-app/templates/components/tabbed-section.hbs"}})}),define("client-app/templates/components/time-formatter",["exports"],function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=Ember.HTMLBars.template({id:"sp53cTcH",block:'{"symbols":[],"statements":[[1,[21,"time"],false],[0,"\\n"]],"hasEval":false}',meta:{moduleName:"client-app/templates/components/time-formatter.hbs"}})}),define("client-app/templates/index",["exports"],function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=Ember.HTMLBars.template({id:"kvEL01NO",block:'{"symbols":["message"],"statements":[[7,"div"],[11,"id","top-panel"],[9],[0,"\\n "],[7,"div"],[11,"id","log-table"],[9],[0,"\\n"],[4,"if",[[23,["model","moreBefore"]]],null,{"statements":[[0," "],[7,"div"],[11,"class","show-more"],[3,"action",[[22,0,[]],"showMoreBefore"]],[9],[0,"\\n"],[4,"if",[[23,["model","hideCountInLoadMore"]]],null,{"statements":[[0," Load more\\n"]],"parameters":[]},{"statements":[[0," Select to see "],[1,[23,["model","totalBefore"]],false],[0," more\\n"]],"parameters":[]}],[0," "],[10],[0,"\\n"]],"parameters":[]},null],[4,"each",[[23,["model","messages"]]],null,{"statements":[[0," "],[1,[27,"message-row",null,[["model","selectedMessage"],[[22,1,[]],[27,"action",[[22,0,[]],"selectMessage"],null]]]],false],[0,"\\n"]],"parameters":[1]},null],[0," "],[10],[0,"\\n"],[10],[0,"\\n"],[7,"div"],[11,"id","bottom-panel"],[9],[0,"\\n "],[1,[27,"message-info",null,[["currentMessage","removeMessage","solveMessage","actionsInMenu"],[[23,["currentMessage"]],[27,"action",[[22,0,[]],"removeMessage"],null],[27,"action",[[22,0,[]],"solveMessage"],null],[23,["actionsInMenu"]]]]],false],[0,"\\n\\n "],[7,"div"],[11,"class","action-panel"],[9],[0,"\\n "],[7,"div"],[11,"class","severity-filters"],[9],[0,"\\n "],[7,"div"],[11,"class","more-wrapping"],[9],[0,"\\n "],[7,"label"],[11,"class","debug"],[9],[0,"\\n "],[1,[27,"input",null,[["type","checked"],["checkbox",[23,["showDebug"]]]]],false],[0,"\\n "],[7,"span"],[9],[0,"Debug"],[10],[0,"\\n "],[10],[0,"\\n "],[7,"label"],[11,"class","info"],[9],[0,"\\n "],[1,[27,"input",null,[["type","checked"],["checkbox",[23,["showInfo"]]]]],false],[0,"\\n "],[7,"span"],[9],[0,"Info"],[10],[0,"\\n "],[10],[0,"\\n "],[7,"label"],[11,"class","warn"],[9],[0,"\\n "],[1,[27,"input",null,[["type","checked"],["checkbox",[23,["showWarn"]]]]],false],[0,"\\n "],[7,"i"],[11,"class","fa fa-exclamation-circle warning"],[9],[10],[0,"\\n "],[7,"span"],[9],[0,"Warning"],[10],[0,"\\n "],[10],[0,"\\n "],[7,"label"],[11,"class","error"],[9],[0,"\\n "],[1,[27,"input",null,[["type","checked"],["checkbox",[23,["showErr"]]]]],false],[0,"\\n "],[7,"i"],[11,"class","fa fa-times-circle error"],[9],[10],[0,"\\n "],[7,"span"],[9],[0,"Error"],[10],[0,"\\n "],[10],[0,"\\n "],[7,"label"],[11,"class","fatal"],[9],[0,"\\n "],[1,[27,"input",null,[["type","checked"],["checkbox",[23,["showFatal"]]]]],false],[0,"\\n "],[7,"i"],[11,"class","fa fa-times-circle fatal"],[9],[10],[0,"\\n "],[7,"span"],[9],[0,"Fatal"],[10],[0,"\\n "],[10],[0,"\\n "],[10],[0,"\\n "],[10],[0,"\\n "],[7,"div"],[11,"class","search-clear-all"],[9],[0,"\\n "],[1,[27,"input",null,[["type","class","placeholder","value"],["textfield","search","Search",[23,["search"]]]]],false],[0,"\\n "],[7,"div"],[11,"class","footer-btns"],[9],[0,"\\n"],[4,"if",[[23,["showSettings"]]],null,{"statements":[[4,"link-to",["settings"],[["class"],["settings btn no-text"]],{"statements":[[0," "],[7,"i"],[11,"class","fa fa-cog"],[9],[10],[0,"\\n"]],"parameters":[]},null]],"parameters":[]},null],[0," "],[7,"button"],[11,"class","clear btn danger"],[3,"action",[[22,0,[]],"clear"]],[9],[7,"i"],[11,"class","fa fa-trash-o"],[9],[10],[7,"span"],[9],[0,"Clear logs"],[10],[10],[0,"\\n "],[10],[0,"\\n "],[10],[0,"\\n "],[10],[0,"\\n"],[10],[0,"\\n"],[1,[21,"panel-resizer"],false],[0,"\\n"]],"hasEval":false}',meta:{moduleName:"client-app/templates/index.hbs"}})}),define("client-app/templates/settings",["exports"],function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=Ember.HTMLBars.template({id:"ARVjebWt",block:'{"symbols":[],"statements":[[7,"div"],[11,"class","settings-page"],[9],[0,"\\n "],[4,"link-to",["index"],null,{"statements":[[0,"Home"]],"parameters":[]},null],[0,"\\n "],[7,"div"],[11,"class","settings-header"],[9],[0,"\\n "],[7,"h1"],[11,"class","header-title"],[9],[0,"Settings"],[10],[0,"\\n "],[7,"img"],[11,"class","header-logo"],[12,"src",[27,"logster-url",["images/icon_144x144.png"],null]],[9],[10],[0,"\\n "],[10],[0,"\\n\\n "],[7,"div"],[11,"class","settings-section suppression-patterns"],[9],[0,"\\n "],[7,"h2"],[11,"class","section-title"],[9],[0,"Suppression Patterns"],[10],[0,"\\n "],[7,"div"],[9],[0,"New messages that match these Regular Expression patterns will be suppressed."],[10],[0,"\\n\\n"],[4,"if",[[23,["showCodedPatterns"]]],null,{"statements":[[0," "],[7,"h3"],[11,"class","subsection-title"],[9],[0,"Hard-coded patterns:"],[10],[0,"\\n "],[7,"div"],[11,"class","tip"],[9],[0,"These patterns can\'t be removed via the UI because they are commited to the source code of your app."],[10],[0,"\\n "],[1,[27,"patterns-list",null,[["patterns","mutable"],[[23,["model","coded_patterns"]],false]]],false],[0,"\\n"]],"parameters":[]},null],[0,"\\n "],[7,"h3"],[11,"class","subsection-title"],[9],[0,"Custom patterns:"],[10],[0,"\\n "],[1,[27,"patterns-list",null,[["patterns","key","mutable"],[[23,["model","custom_patterns"]],"suppression",true]]],false],[0,"\\n "],[10],[0,"\\n"],[10],[0,"\\n"]],"hasEval":false}',meta:{moduleName:"client-app/templates/settings.hbs"}})}),define("client-app/templates/show",["exports"],function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=Ember.HTMLBars.template({id:"V916vpg9",block:'{"symbols":[],"statements":[[4,"link-to",["index"],null,{"statements":[[0,"Recent"]],"parameters":[]},null],[0,"\\n"],[7,"div"],[11,"id","bottom-panel"],[11,"class","full"],[9],[0,"\\n "],[1,[27,"message-info",null,[["currentMessage","showTitle","actionsInMenu"],[[23,["model"]],"true",false]]],false],[0,"\\n"],[10],[0,"\\n"]],"hasEval":false}',meta:{moduleName:"client-app/templates/show.hbs"}})}),define("client-app/config/environment",[],function(){try{var e="client-app/config/environment",t=document.querySelector('meta[name="'+e+'"]').getAttribute("content"),n={default:JSON.parse(unescape(t))}
115
- return Object.defineProperty(n,"__esModule",{value:!0}),n}catch(a){throw new Error('Could not read config from meta tag with name "'+e+'".')}}),runningTests||require("client-app/app").default.create({name:"client-app",version:"0.0.0+f505f3d6"})
112
+ e&&a%s==0&&(i=!0,s<20&&s++),i&&(t.loadMore(),e||(s=1))},3e3),this.events.on("panelResized",function(t){e.resizePanels(t)})},deactivate:function(){clearInterval(this.refreshInterval)}})}),define("client-app/routes/settings",["exports","client-app/lib/utilities","client-app/models/pattern-item"],function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=Ember.Route.extend({model:function(){return(0,t.ajax)("/settings.json")},setupController:function(e,t){this._super.apply(this,arguments)
113
+ var a=t.suppression,s=a.filter(function(e){return e.hard}).map(function(e){return n.default.create(e)}),i=a.reject(function(e){return e.hard}).map(function(e){return n.default.create(e)}),r=s.length>0
114
+ e.setProperties({showCodedSuppression:r,codedSuppression:s,customSuppression:i})}})}),define("client-app/routes/show",["exports","client-app/models/message","client-app/lib/utilities"],function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=Ember.Route.extend({model:function(e){return(0,n.preloadOrAjax)("/show/"+e.id+".json")},setupController:function(e,n){this._super.apply(this,arguments),e.set("model",t.default.create(n))}})}),define("client-app/services/ajax",["exports","ember-ajax/services/ajax"],function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})}),define("client-app/templates/application",["exports"],function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=Ember.HTMLBars.template({id:"yOsrYpw5",block:'{"symbols":[],"statements":[[1,[21,"update-time"],false],[0,"\\n"],[1,[21,"outlet"],false],[0,"\\n"]],"hasEval":false}',meta:{moduleName:"client-app/templates/application.hbs"}})}),define("client-app/templates/components/actions-menu",["exports"],function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=Ember.HTMLBars.template({id:"ebB3+Z4x",block:'{"symbols":["&default"],"statements":[[4,"if",[[23,["actionsInMenu"]]],null,{"statements":[[4,"if",[[23,["showMenu"]]],null,{"statements":[[0," "],[7,"div"],[11,"class","actions-menu"],[9],[0,"\\n "],[14,1],[0,"\\n "],[10],[0,"\\n"]],"parameters":[]},null],[0," "],[7,"button"],[11,"class","expand btn no-text"],[3,"action",[[22,0,[]],"expandMenu"]],[9],[7,"i"],[11,"class","fa fa-ellipsis-h"],[9],[10],[10],[0,"\\n "],[7,"button"],[11,"class","share btn"],[3,"action",[[22,0,[]],"share"]],[9],[7,"i"],[11,"class","fa fa-share"],[9],[10],[7,"span"],[9],[0,"Share"],[10],[10],[0,"\\n"]],"parameters":[]},{"statements":[[0," "],[14,1],[0,"\\n "],[7,"button"],[11,"class","share btn"],[3,"action",[[22,0,[]],"share"]],[9],[7,"i"],[11,"class","fa fa-share"],[9],[10],[7,"span"],[9],[0,"Share"],[10],[10],[0,"\\n"]],"parameters":[]}]],"hasEval":false}',meta:{moduleName:"client-app/templates/components/actions-menu.hbs"}})}),define("client-app/templates/components/env-tab",["exports"],function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=Ember.HTMLBars.template({id:"5078JpTW",block:'{"symbols":[],"statements":[[4,"if",[[23,["isEnvArray"]]],null,{"statements":[[0," "],[7,"div"],[11,"class","nav-controls"],[9],[0,"\\n "],[7,"button"],[12,"disabled",[21,"disableBackButtons"]],[11,"class","btn nav-btn no-text"],[3,"action",[[22,0,[]],"bigJump","back"]],[9],[7,"i"],[11,"class","fa fa-fast-backward"],[9],[10],[10],[0,"\\n "],[7,"button"],[12,"disabled",[21,"disableBackButtons"]],[11,"class","btn nav-btn no-text"],[3,"action",[[22,0,[]],"takeStep","back"]],[9],[7,"i"],[11,"class","fa fa-backward"],[9],[10],[10],[0,"\\n "],[7,"span"],[11,"class","env-number"],[9],[1,[21,"current"],false],[0,"/"],[1,[23,["message","env","length"]],false],[10],[0,"\\n "],[7,"button"],[12,"disabled",[21,"disableForwardButtons"]],[11,"class","btn nav-btn no-text"],[3,"action",[[22,0,[]],"takeStep","front"]],[9],[7,"i"],[11,"class","fa fa-forward"],[9],[10],[10],[0,"\\n "],[7,"button"],[12,"disabled",[21,"disableForwardButtons"]],[11,"class","btn nav-btn no-text"],[3,"action",[[22,0,[]],"bigJump","front"]],[9],[7,"i"],[11,"class","fa fa-fast-forward"],[9],[10],[10],[0,"\\n "],[10],[0,"\\n"]],"parameters":[]},null],[1,[21,"html"],true],[0,"\\n"]],"hasEval":false}',meta:{moduleName:"client-app/templates/components/env-tab.hbs"}})}),define("client-app/templates/components/message-info",["exports"],function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=Ember.HTMLBars.template({id:"SK12lkYh",block:'{"symbols":["btn"],"statements":[[7,"div"],[11,"class","message-info"],[9],[0,"\\n"],[4,"tabbed-section",null,null,{"statements":[[4,"tab-contents",null,[["name","hint","currentMessage"],["info","show info",[23,["currentMessage"]]]],{"statements":[[4,"if",[[23,["showTitle"]]],null,{"statements":[[0," "],[7,"h3"],[9],[0,"Message\\n"],[4,"if",[[23,["currentMessage","showCount"]]],null,{"statements":[[0," ("],[1,[23,["currentMessage","count"]],false],[0," copies reported)\\n"]],"parameters":[]},null],[0," "],[10],[0,"\\n"]],"parameters":[]},null],[0," "],[7,"pre"],[9],[1,[23,["currentMessage","message"]],false],[10],[0,""]],"parameters":[]},null],[4,"tab-contents",null,[["name","defaultTab","hint","currentMessage"],["backtrace","true","show backtrace",[23,["currentMessage"]]]],{"statements":[[4,"if",[[23,["showTitle"]]],null,{"statements":[[0," "],[7,"h3"],[9],[0,"Backtrace"],[10],[0,"\\n"]],"parameters":[]},null],[0," "],[7,"pre"],[9],[1,[23,["currentMessage","backtrace"]],false],[10],[0,""]],"parameters":[]},null],[4,"if",[[23,["currentMessage","env"]]],null,{"statements":[[4,"tab-contents",null,[["className","name","hint","currentMessage"],["env","env","show environment",[23,["currentMessage"]]]],{"statements":[[4,"if",[[23,["showTitle"]]],null,{"statements":[[0," "],[7,"h3"],[9],[0,"Env"],[10],[0,"\\n"]],"parameters":[]},null],[0," "],[1,[27,"env-tab",null,[["message"],[[23,["currentMessage"]]]]],false],[0,"\\n"]],"parameters":[]},null]],"parameters":[]},null]],"parameters":[]},null],[0,"\\n"],[4,"if",[[23,["currentMessage"]]],null,{"statements":[[0," "],[7,"div"],[11,"class","message-actions"],[9],[0,"\\n"],[4,"actions-menu",null,[["actionsInMenu","share"],[[23,["actionsInMenu"]],[27,"action",[[22,0,[]],"share"],null]]],{"statements":[[4,"each",[[23,["buttons"]]],null,{"statements":[[0," "],[7,"button"],[12,"class",[28,[[22,1,["klass"]]," btn ",[27,"if",[[22,1,["danger"]],"danger",""],null]]]],[3,"action",[[22,0,[]],[22,1,["action"]]]],[9],[0,"\\n "],[7,"i"],[12,"class",[28,["fa fa-",[22,1,["icon"]]]]],[9],[10],[0,"\\n "],[7,"span"],[9],[1,[22,1,["label"]],false],[10],[0,"\\n "],[10],[0,"\\n"]],"parameters":[1]},null]],"parameters":[]},null],[0," "],[10],[0,"\\n"]],"parameters":[]},null],[10],[0,"\\n"]],"hasEval":false}',meta:{moduleName:"client-app/templates/components/message-info.hbs"}})}),define("client-app/templates/components/message-row",["exports"],function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=Ember.HTMLBars.template({id:"pF0hQ9a+",block:'{"symbols":[],"statements":[[7,"div"],[11,"class","count"],[9],[0,"\\n"],[4,"if",[[23,["model","showCount"]]],null,{"statements":[[0," "],[1,[23,["model","count"]],false],[0,"\\n"]],"parameters":[]},null],[10],[0,"\\n"],[7,"div"],[11,"class","severity"],[9],[1,[23,["model","glyph"]],true],[10],[0,"\\n"],[7,"div"],[11,"class","message-body"],[9],[0,"\\n "],[1,[23,["model","displayMessage"]],false],[0,"\\n"],[10],[0,"\\n"],[7,"div"],[11,"class","protected"],[9],[0,"\\n"],[4,"if",[[23,["model","protected"]]],null,{"statements":[[0," "],[7,"i"],[11,"title","message is protected, clearing will not remove it"],[11,"class","fa fa-lock"],[9],[10],[0,"\\n"]],"parameters":[]},null],[10],[0,"\\n"],[7,"div"],[11,"class","time"],[9],[1,[27,"time-formatter",null,[["timestamp"],[[23,["model","timestamp"]]]]],false],[10],[0,"\\n"]],"hasEval":false}',meta:{moduleName:"client-app/templates/components/message-row.hbs"}})}),define("client-app/templates/components/panel-resizer",["exports"],function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=Ember.HTMLBars.template({id:"FLUzT7ST",block:'{"symbols":[],"statements":[[7,"div"],[11,"class","line-1"],[9],[10],[0,"\\n"],[7,"div"],[11,"class","line-2"],[9],[10],[0,"\\n"],[7,"div"],[11,"class","line-3"],[9],[10],[0,"\\n"]],"hasEval":false}',meta:{moduleName:"client-app/templates/components/panel-resizer.hbs"}})}),define("client-app/templates/components/patterns-list",["exports"],function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=Ember.HTMLBars.template({id:"Q0F+8jT0",block:'{"symbols":["pattern"],"statements":[[4,"if",[[23,["mutable"]]],null,{"statements":[[0," "],[7,"button"],[11,"class","btn new-pattern"],[3,"action",[[22,0,[]],"create"]],[9],[7,"i"],[11,"class","fa fa-plus"],[9],[10],[0," New"],[10],[0,"\\n"]],"parameters":[]},null],[4,"each",[[23,["allPatterns"]]],null,{"statements":[[0," "],[7,"div"],[11,"class","pattern-wrapper"],[9],[0,"\\n "],[1,[27,"input",null,[["type","class","placeholder","value","disabled"],["textfield","pattern-input","Enter regular expression…",[22,1,["valueBuffer"]],[27,"or",[[23,["immutable"]],[22,1,["saving"]]],null]]]],false],[0,"\\n"],[4,"if",[[23,["mutable"]]],null,{"statements":[[4,"if",[[22,1,["hasBuffer"]]],null,{"statements":[[0," "],[7,"button"],[12,"disabled",[22,1,["saving"]]],[11,"class","btn ok no-text save shrink"],[3,"action",[[22,0,[]],"save",[22,1,[]]]],[9],[0,"\\n "],[7,"i"],[11,"class","fa fa-check"],[9],[10],[0,"\\n "],[10],[0,"\\n"]],"parameters":[]},null],[0," "],[7,"button"],[12,"disabled",[22,1,["saving"]]],[11,"class","btn no-text trash shrink"],[3,"action",[[22,0,[]],"trash",[22,1,[]]]],[9],[0,"\\n "],[7,"i"],[11,"class","fa fa-trash"],[9],[10],[0,"\\n "],[10],[0,"\\n"]],"parameters":[]},null],[0,"\\n "],[7,"input"],[11,"disabled","true"],[11,"title","Number of logs that have been suppressed by this pattern"],[11,"class","count shrink"],[12,"value",[22,1,["count"]]],[9],[10],[0,"\\n "],[7,"button"],[11,"class","btn no-text reset shrink"],[11,"title","Reset count of suppressed logs"],[12,"disabled",[22,1,["zeroCount"]]],[3,"action",[[22,0,[]],"resetCount",[22,1,[]]]],[9],[0,"\\n "],[7,"i"],[11,"class","fa fa-rotate-right"],[9],[10],[0,"\\n "],[10],[0,"\\n "],[10],[4,"if",[[22,1,["error"]]],null,{"statements":[[7,"pre"],[11,"class","api-error"],[9],[1,[22,1,["error"]],false],[10]],"parameters":[]},null]],"parameters":[1]},null]],"hasEval":false}',meta:{moduleName:"client-app/templates/components/patterns-list.hbs"}})}),define("client-app/templates/components/tabbed-section",["exports"],function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=Ember.HTMLBars.template({id:"nreTgL17",block:'{"symbols":["tab","&default"],"statements":[[14,2],[0,"\\n"],[7,"ul"],[11,"class","tabs"],[9],[0,"\\n"],[4,"each",[[23,["tabs"]]],null,{"statements":[[0," "],[7,"li"],[9],[0,"\\n "],[7,"a"],[12,"title",[28,[[27,"unbound",[[22,1,["hint"]]],null]]]],[11,"href","#"],[12,"class",[28,[[27,"if",[[22,1,["active"]],"active"],null]]]],[3,"action",[[22,0,[]],[23,["selectTab"]],[22,1,[]]]],[9],[0,"\\n "],[1,[27,"unbound",[[22,1,["name"]]],null],false],[0,"\\n "],[10],[0,"\\n "],[10],[0,"\\n"]],"parameters":[1]},null],[10],[0,"\\n"]],"hasEval":false}',meta:{moduleName:"client-app/templates/components/tabbed-section.hbs"}})}),define("client-app/templates/components/time-formatter",["exports"],function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=Ember.HTMLBars.template({id:"sp53cTcH",block:'{"symbols":[],"statements":[[1,[21,"time"],false],[0,"\\n"]],"hasEval":false}',meta:{moduleName:"client-app/templates/components/time-formatter.hbs"}})}),define("client-app/templates/index",["exports"],function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=Ember.HTMLBars.template({id:"kvEL01NO",block:'{"symbols":["message"],"statements":[[7,"div"],[11,"id","top-panel"],[9],[0,"\\n "],[7,"div"],[11,"id","log-table"],[9],[0,"\\n"],[4,"if",[[23,["model","moreBefore"]]],null,{"statements":[[0," "],[7,"div"],[11,"class","show-more"],[3,"action",[[22,0,[]],"showMoreBefore"]],[9],[0,"\\n"],[4,"if",[[23,["model","hideCountInLoadMore"]]],null,{"statements":[[0," Load more\\n"]],"parameters":[]},{"statements":[[0," Select to see "],[1,[23,["model","totalBefore"]],false],[0," more\\n"]],"parameters":[]}],[0," "],[10],[0,"\\n"]],"parameters":[]},null],[4,"each",[[23,["model","messages"]]],null,{"statements":[[0," "],[1,[27,"message-row",null,[["model","selectedMessage"],[[22,1,[]],[27,"action",[[22,0,[]],"selectMessage"],null]]]],false],[0,"\\n"]],"parameters":[1]},null],[0," "],[10],[0,"\\n"],[10],[0,"\\n"],[7,"div"],[11,"id","bottom-panel"],[9],[0,"\\n "],[1,[27,"message-info",null,[["currentMessage","removeMessage","solveMessage","actionsInMenu"],[[23,["currentMessage"]],[27,"action",[[22,0,[]],"removeMessage"],null],[27,"action",[[22,0,[]],"solveMessage"],null],[23,["actionsInMenu"]]]]],false],[0,"\\n\\n "],[7,"div"],[11,"class","action-panel"],[9],[0,"\\n "],[7,"div"],[11,"class","severity-filters"],[9],[0,"\\n "],[7,"div"],[11,"class","more-wrapping"],[9],[0,"\\n "],[7,"label"],[11,"class","debug"],[9],[0,"\\n "],[1,[27,"input",null,[["type","checked"],["checkbox",[23,["showDebug"]]]]],false],[0,"\\n "],[7,"span"],[9],[0,"Debug"],[10],[0,"\\n "],[10],[0,"\\n "],[7,"label"],[11,"class","info"],[9],[0,"\\n "],[1,[27,"input",null,[["type","checked"],["checkbox",[23,["showInfo"]]]]],false],[0,"\\n "],[7,"span"],[9],[0,"Info"],[10],[0,"\\n "],[10],[0,"\\n "],[7,"label"],[11,"class","warn"],[9],[0,"\\n "],[1,[27,"input",null,[["type","checked"],["checkbox",[23,["showWarn"]]]]],false],[0,"\\n "],[7,"i"],[11,"class","fa fa-exclamation-circle warning"],[9],[10],[0,"\\n "],[7,"span"],[9],[0,"Warning"],[10],[0,"\\n "],[10],[0,"\\n "],[7,"label"],[11,"class","error"],[9],[0,"\\n "],[1,[27,"input",null,[["type","checked"],["checkbox",[23,["showErr"]]]]],false],[0,"\\n "],[7,"i"],[11,"class","fa fa-times-circle error"],[9],[10],[0,"\\n "],[7,"span"],[9],[0,"Error"],[10],[0,"\\n "],[10],[0,"\\n "],[7,"label"],[11,"class","fatal"],[9],[0,"\\n "],[1,[27,"input",null,[["type","checked"],["checkbox",[23,["showFatal"]]]]],false],[0,"\\n "],[7,"i"],[11,"class","fa fa-times-circle fatal"],[9],[10],[0,"\\n "],[7,"span"],[9],[0,"Fatal"],[10],[0,"\\n "],[10],[0,"\\n "],[10],[0,"\\n "],[10],[0,"\\n "],[7,"div"],[11,"class","search-clear-all"],[9],[0,"\\n "],[1,[27,"input",null,[["type","class","placeholder","value"],["textfield","search","Search",[23,["search"]]]]],false],[0,"\\n "],[7,"div"],[11,"class","footer-btns"],[9],[0,"\\n"],[4,"if",[[23,["showSettings"]]],null,{"statements":[[4,"link-to",["settings"],[["class"],["settings btn no-text"]],{"statements":[[0," "],[7,"i"],[11,"class","fa fa-cog"],[9],[10],[0,"\\n"]],"parameters":[]},null]],"parameters":[]},null],[0," "],[7,"button"],[11,"class","clear btn danger"],[3,"action",[[22,0,[]],"clear"]],[9],[7,"i"],[11,"class","fa fa-trash-o"],[9],[10],[7,"span"],[9],[0,"Clear logs"],[10],[10],[0,"\\n "],[10],[0,"\\n "],[10],[0,"\\n "],[10],[0,"\\n"],[10],[0,"\\n"],[1,[21,"panel-resizer"],false],[0,"\\n"]],"hasEval":false}',meta:{moduleName:"client-app/templates/index.hbs"}})}),define("client-app/templates/settings",["exports"],function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=Ember.HTMLBars.template({id:"K64jJk76",block:'{"symbols":[],"statements":[[7,"div"],[11,"class","settings-page"],[9],[0,"\\n "],[4,"link-to",["index"],null,{"statements":[[0,"Home"]],"parameters":[]},null],[0,"\\n "],[7,"div"],[11,"class","settings-header"],[9],[0,"\\n "],[7,"h1"],[11,"class","header-title"],[9],[0,"Settings"],[10],[0,"\\n "],[7,"img"],[11,"class","header-logo"],[12,"src",[27,"logster-url",["images/icon_144x144.png"],null]],[9],[10],[0,"\\n "],[10],[0,"\\n\\n "],[7,"div"],[11,"class","settings-section suppression-patterns"],[9],[0,"\\n "],[7,"h2"],[11,"class","section-title"],[9],[0,"Suppression Patterns"],[10],[0,"\\n "],[7,"div"],[9],[0,"New messages that match these Regular Expression patterns will be suppressed."],[10],[0,"\\n\\n"],[4,"if",[[23,["showCodedSuppression"]]],null,{"statements":[[0," "],[7,"h3"],[11,"class","subsection-title"],[9],[0,"Hard-coded patterns:"],[10],[0,"\\n "],[7,"div"],[11,"class","tip"],[9],[0,"These patterns can\'t be removed via the UI because they are commited to the source code of your app."],[10],[0,"\\n "],[1,[27,"patterns-list",null,[["patterns","mutable"],[[23,["codedSuppression"]],false]]],false],[0,"\\n"]],"parameters":[]},null],[0,"\\n "],[7,"h3"],[11,"class","subsection-title"],[9],[0,"Custom patterns:"],[10],[0,"\\n "],[1,[27,"patterns-list",null,[["patterns","key","mutable"],[[23,["customSuppression"]],"suppression",true]]],false],[0,"\\n "],[10],[0,"\\n"],[10],[0,"\\n"]],"hasEval":false}',meta:{moduleName:"client-app/templates/settings.hbs"}})}),define("client-app/templates/show",["exports"],function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=Ember.HTMLBars.template({id:"V916vpg9",block:'{"symbols":[],"statements":[[4,"link-to",["index"],null,{"statements":[[0,"Recent"]],"parameters":[]},null],[0,"\\n"],[7,"div"],[11,"id","bottom-panel"],[11,"class","full"],[9],[0,"\\n "],[1,[27,"message-info",null,[["currentMessage","showTitle","actionsInMenu"],[[23,["model"]],"true",false]]],false],[0,"\\n"],[10],[0,"\\n"]],"hasEval":false}',meta:{moduleName:"client-app/templates/show.hbs"}})}),define("client-app/config/environment",[],function(){try{var e="client-app/config/environment",t=document.querySelector('meta[name="'+e+'"]').getAttribute("content"),n={default:JSON.parse(unescape(t))}
115
+ return Object.defineProperty(n,"__esModule",{value:!0}),n}catch(a){throw new Error('Could not read config from meta tag with name "'+e+'".')}}),runningTests||require("client-app/app").default.create({name:"client-app",version:"0.0.0+e86a8e78"})
@@ -1 +1 @@
1
- .divider,.message-info{border-bottom:1px solid #ddd}body{font-family:Arial,"Liberation Sans","DejaVu Sans",sans-serif;font-size:12px}body.mobile,body.mobile .message{font-size:14px}pre{font-family:"Roboto Mono",Consolas,Monaco,Ubuntu Mono,monospace}table.env-table tbody tr td{border-top:none;line-height:18px;height:18px;vertical-align:top}table.env-table,table.env-table table{border-spacing:0;border-collapse:collapse}table.env-table td{padding-right:5px}tbody tr{width:98%}.message-row{font-family:Roboto;display:flex}.pattern-wrapper .pattern-input,.settings-section .api-error{font-family:Consolas,"Roboto Mono",Monaco,Ubuntu Mono,monospace}.message-row .protected,.message-row .severity{text-align:center;width:25px;flex-grow:0;flex-shrink:0;font-size:12px}.message-row div{border-top:.5px #e9e9e9 solid;padding-top:1px;padding-bottom:1px;line-height:25px}.message-row .count{width:30px;flex-grow:0;flex-shrink:0;padding-right:4px;box-sizing:border-box;font-size:11px;font-weight:700;text-align:right}.message-row .message-body{flex-grow:1;flex-shrink:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-size:13px}.message-row .time{flex-grow:0;flex-shrink:0;color:#999;vertical-align:top;font-size:12px;padding-right:8px}.action-panel .search,.action-panel i.fa,.btn .fa,.btn span,.pattern-wrapper .btn,.search-clear-all .clear,input,label span{vertical-align:middle}.message-row:hover{background-color:#f8f8f8;cursor:pointer}.message-row.selected{background-color:#dfdfdf}i.fatal{color:#e00}i.error{color:#900}i.warning{color:#feb800}.debug{color:#777}.btn,.tabs a{text-decoration:none;color:#333}.action-panel .search{border:1px solid #ddd;padding:3px;box-sizing:border-box}#log-table .show-more{text-align:center;height:30px;line-height:30px;text-decoration:none;background-color:#ddd;cursor:pointer;margin-top:8px}#overlay,.divider{cursor:row-resize}#bottom-panel{position:fixed;bottom:0;left:0;right:0;height:300px;background-color:#f1f1f1;padding:0 8px 8px;z-index:2}#bottom-panel.full{position:static;background-color:inherit;height:90%}#bottom-panel.full>div{padding-bottom:40px}#bottom-panel.full .tabs{display:none}#bottom-panel.full .message-info{position:static}#bottom-panel.full .message-info .content{display:block;position:static}#bottom-panel.full button.delete,.hidden{display:none}#bottom-panel.full .save,#bottom-panel.full .share{bottom:10px}#bottom-panel.full .message-actions button{margin-top:8px}#bottom-panel.full .message-actions{position:fixed;height:40px;width:100%;left:0;bottom:0;background-color:#eee;border-top:1px solid #dfdfdf;padding-left:10px}.divider,.tabs{border-top:1px solid #ddd}.message-actions{position:absolute;bottom:5px;right:0;margin-right:10px}.message-actions button{margin-left:5px}.divider{position:fixed;bottom:310px;left:0;right:0;height:15px;background-color:#fafafa}.divider div{margin:auto;width:24px;height:1px;background-color:#ccc;position:relative}.divider .line-1{top:5px}.divider .line-2{top:6px}.divider .line-3{top:7px}#top-panel{position:fixed;top:0;left:0;right:0;bottom:320px;overflow:auto}.action-panel,.message-info{position:absolute;left:0;right:0}.message-info{top:0}.action-panel{bottom:0;font-weight:700}.action-panel input{margin:0}.severity-filters label{margin-right:18px}.search-clear-all .clear{float:right}#log-table{margin:auto;width:99%}.message-info .env-table,.message-info pre{position:relative;margin:5px 10px 10px}#overlay{position:fixed;z-index:99999;top:0;bottom:0;left:0;right:0;opacity:0}.message-info .content,.tabs{position:absolute;left:0;right:0}.message-info .content{top:0;bottom:35px;overflow:auto;display:none}.message-info .content.active{display:block}.tabs{bottom:13px;list-style-type:none;margin:0 0 5px;padding:0 0 0 10px}.tabs a,.tabs li{position:relative}.tabs li{float:left;padding-right:5px;margin:0}.tabs a{top:6px;border:1px solid #ddd;border-top:none;border-bottom-left-radius:5px;border-bottom-right-radius:5px;padding:6px;background-color:#e1e1e1}.tabs a.active{border-top:1px solid #f1f1f1;background-color:#f1f1f1}.btn{display:inline-block;margin:0;padding:5px 12px;font-size:1em;line-height:0;text-align:center;cursor:pointer;transition:all .25s;background-color:#ddd;border:none;font-weight:400}.btn:hover{color:#000;background-color:#ccc}.btn .fa{margin-right:7px}.btn:active{text-shadow:none}.btn.danger:hover{background-color:#c63c1b;color:#eee}.btn.ok{background-color:#3781dc;color:#fff}.btn.ok:hover{background-color:#286dc2;color:#fff}.search-clear-all .clear,.search-clear-all .search{height:100%}.search-clear-all .clear,.search-clear-all .search,.severity-filters label{align-self:center}.search-clear-all .footer-btns .settings{margin:0 7px}.search-clear-all{display:flex;justify-content:space-between}.search-clear-all .search{min-width:0;flex-shrink:2}.footer-btns{flex-grow:0;flex-shrink:0}@media (min-width:770px){.search-clear-all,.severity-filters{height:100%}.more-wrapping,.severity-filters{display:flex}.severity-filters{float:left}.action-panel{padding:10px;box-sizing:border-box;height:42px}.message-info{bottom:42px}}@media (max-width:770px){.severity-filters{padding:10px}.search-clear-all{padding:0 10px 10px}.action-panel{height:69px}.message-info{bottom:69px}}@media (max-width:430px){.severity-filters{overflow-x:scroll;overflow-y:hidden;white-space:nowrap}.more-wrapping:after,.more-wrapping:before{content:"";position:absolute;height:18px}.more-wrapping:before{width:15px;margin-left:-10px;background:linear-gradient(to right,#f1f1f1 0,rgba(241,241,241,.001) 100%)}.more-wrapping:after{right:0;width:23px;background:linear-gradient(to left,#f1f1f1 0,rgba(241,241,241,.001) 100%)}}.btn.no-text .fa{margin:0}.btn[disabled]{opacity:.5}.actions-menu{position:absolute;background:#fafafa;display:inline-flex;flex-direction:column;bottom:27px;right:45px;width:115px;padding:5px 5px 0;box-shadow:0 4px 14px rgba(0,0,0,.15);z-index:3}.actions-menu button{margin:0 0 5px;height:27px}.nav-controls{padding:10px}#bottom-panel:not(.full) .nav-controls{position:sticky;position:-webkit-sticky;position:-moz-sticky;position:-ms-sticky;position:-o-sticky;top:0;background:#f1f1f1;z-index:1;border-bottom:1px solid #ddd}.env-number{margin:0 7px}.expand-list{text-decoration:underline;color:#00f;cursor:pointer}.settings-page{max-width:1110px;margin-right:auto;margin-left:auto;font-size:15px;padding:0 10px}.settings-header{display:flex;align-items:center;margin-bottom:5px}.settings-header .header-title{flex-grow:1}.settings-header .header-logo{width:50px;height:50px}.settings-section{border-top:1px solid #ddd;padding-top:15px}.settings-section .section-title{margin-top:0}.settings-section .subsection-title{margin-bottom:10px}.settings-section .tip{font-style:italic;font-size:13px;color:grey}.settings-section .pattern-wrapper{margin-top:10px;font-size:16px;display:flex;height:33px}.settings-section .api-error{margin-top:5px;color:red}.pattern-wrapper .pattern-input{width:600px;font-size:inherit;padding:5px 0;height:100%;box-sizing:border-box;vertical-align:middle;flex-grow:1;flex-shrink:1}.btn.new-pattern{height:100%;line-height:18px}.pattern-wrapper .btn{height:100%;box-sizing:border-box;flex-grow:0;flex-shrink:0;margin-left:10px}
1
+ .divider,.message-info{border-bottom:1px solid #ddd}body{font-family:Arial,"Liberation Sans","DejaVu Sans",sans-serif;font-size:12px}body.mobile,body.mobile .message{font-size:14px}pre{font-family:"Roboto Mono",Consolas,Monaco,Ubuntu Mono,monospace}table.env-table tbody tr td{border-top:none;line-height:18px;height:18px;vertical-align:top}table.env-table,table.env-table table{border-spacing:0;border-collapse:collapse}table.env-table td{padding-right:5px}tbody tr{width:98%}.message-row{font-family:Roboto;display:flex}.pattern-wrapper .pattern-input,.settings-section .api-error{font-family:Consolas,"Roboto Mono",Monaco,Ubuntu Mono,monospace}.message-row .protected,.message-row .severity{text-align:center;width:25px;flex-grow:0;flex-shrink:0;font-size:12px}.message-row div{border-top:.5px #e9e9e9 solid;padding-top:1px;padding-bottom:1px;line-height:25px}.message-row .count{width:30px;flex-grow:0;flex-shrink:0;padding-right:4px;box-sizing:border-box;font-size:11px;font-weight:700;text-align:right}.message-row .message-body{flex-grow:1;flex-shrink:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-size:13px}.message-row .time{flex-grow:0;flex-shrink:0;color:#999;vertical-align:top;font-size:12px;padding-right:8px}.action-panel .search,.action-panel i.fa,.btn .fa,.btn span,.pattern-wrapper .shrink,.search-clear-all .clear,input,label span{vertical-align:middle}.message-row:hover{background-color:#f8f8f8;cursor:pointer}.message-row.selected{background-color:#dfdfdf}i.fatal{color:#e00}i.error{color:#900}i.warning{color:#feb800}.debug{color:#777}.btn,.tabs a{text-decoration:none;color:#333}.action-panel .search{border:1px solid #ddd;padding:3px;box-sizing:border-box}#log-table .show-more{text-align:center;height:30px;line-height:30px;text-decoration:none;background-color:#ddd;cursor:pointer;margin-top:8px}#overlay,.divider{cursor:row-resize}#bottom-panel{position:fixed;bottom:0;left:0;right:0;height:300px;background-color:#f1f1f1;padding:0 8px 8px;z-index:2}#bottom-panel.full{position:static;background-color:inherit;height:90%}#bottom-panel.full>div{padding-bottom:40px}#bottom-panel.full .tabs{display:none}#bottom-panel.full .message-info{position:static}#bottom-panel.full .message-info .content{display:block;position:static}#bottom-panel.full button.delete,.hidden{display:none}#bottom-panel.full .save,#bottom-panel.full .share{bottom:10px}#bottom-panel.full .message-actions button{margin-top:8px}#bottom-panel.full .message-actions{position:fixed;height:40px;width:100%;left:0;bottom:0;background-color:#eee;border-top:1px solid #dfdfdf;padding-left:10px}.divider,.tabs{border-top:1px solid #ddd}.message-actions{position:absolute;bottom:5px;right:0;margin-right:10px}.message-actions button{margin-left:5px}.divider{position:fixed;bottom:310px;left:0;right:0;height:15px;background-color:#fafafa}.divider div{margin:auto;width:24px;height:1px;background-color:#ccc;position:relative}.divider .line-1{top:5px}.divider .line-2{top:6px}.divider .line-3{top:7px}#top-panel{position:fixed;top:0;left:0;right:0;bottom:320px;overflow:auto}.action-panel,.message-info{position:absolute;left:0;right:0}.message-info{top:0}.action-panel{bottom:0;font-weight:700}.action-panel input{margin:0}.severity-filters label{margin-right:18px}.search-clear-all .clear{float:right}#log-table{margin:auto;width:99%}.message-info .env-table,.message-info pre{position:relative;margin:5px 10px 10px}#overlay{position:fixed;z-index:99999;top:0;bottom:0;left:0;right:0;opacity:0}.message-info .content,.tabs{position:absolute;left:0;right:0}.message-info .content{top:0;bottom:35px;overflow:auto;display:none}.message-info .content.active{display:block}.tabs{bottom:13px;list-style-type:none;margin:0 0 5px;padding:0 0 0 10px}.tabs a,.tabs li{position:relative}.tabs li{float:left;padding-right:5px;margin:0}.tabs a{top:6px;border:1px solid #ddd;border-top:none;border-bottom-left-radius:5px;border-bottom-right-radius:5px;padding:6px;background-color:#e1e1e1}.tabs a.active{border-top:1px solid #f1f1f1;background-color:#f1f1f1}.btn{display:inline-block;margin:0;padding:5px 12px;font-size:1em;line-height:0;text-align:center;cursor:pointer;transition:all .25s;background-color:#ddd;border:none;font-weight:400}.btn:hover{color:#000;background-color:#ccc}.btn .fa{margin-right:7px}.btn:active{text-shadow:none}.btn.danger:hover{background-color:#c63c1b;color:#eee}.btn.ok{background-color:#3781dc;color:#fff}.btn.ok:hover{background-color:#286dc2;color:#fff}.search-clear-all .clear,.search-clear-all .search{height:100%}.search-clear-all .clear,.search-clear-all .search,.severity-filters label{align-self:center}.search-clear-all .footer-btns .settings{margin:0 7px}.search-clear-all{display:flex;justify-content:space-between}.search-clear-all .search{min-width:0;flex-shrink:2}.footer-btns{flex-grow:0;flex-shrink:0}@media (min-width:770px){.search-clear-all,.severity-filters{height:100%}.more-wrapping,.severity-filters{display:flex}.severity-filters{float:left}.action-panel{padding:10px;box-sizing:border-box;height:42px}.message-info{bottom:42px}}@media (max-width:770px){.severity-filters{padding:10px}.search-clear-all{padding:0 10px 10px}.action-panel{height:69px}.message-info{bottom:69px}}@media (max-width:430px){.severity-filters{overflow-x:scroll;overflow-y:hidden;white-space:nowrap}.more-wrapping:after,.more-wrapping:before{content:"";position:absolute;height:18px}.more-wrapping:before{width:15px;margin-left:-10px;background:linear-gradient(to right,#f1f1f1 0,rgba(241,241,241,.001) 100%)}.more-wrapping:after{right:0;width:23px;background:linear-gradient(to left,#f1f1f1 0,rgba(241,241,241,.001) 100%)}}.btn.no-text .fa{margin:0}.btn[disabled]{opacity:.5}.actions-menu{position:absolute;background:#fafafa;display:inline-flex;flex-direction:column;bottom:27px;right:45px;width:115px;padding:5px 5px 0;box-shadow:0 4px 14px rgba(0,0,0,.15);z-index:3}.actions-menu button{margin:0 0 5px;height:27px}.nav-controls{padding:10px}#bottom-panel:not(.full) .nav-controls{position:sticky;position:-webkit-sticky;position:-moz-sticky;position:-ms-sticky;position:-o-sticky;top:0;background:#f1f1f1;z-index:1;border-bottom:1px solid #ddd}.env-number{margin:0 7px}.expand-list{text-decoration:underline;color:#00f;cursor:pointer}.settings-page{max-width:1110px;margin-right:auto;margin-left:auto;font-size:15px;padding:0 10px 70px}.settings-header{display:flex;align-items:center;margin-bottom:5px}.settings-header .header-title{flex-grow:1}.settings-header .header-logo{width:50px;height:50px}.settings-section{border-top:1px solid #ddd;padding-top:15px}.settings-section .section-title{margin-top:0}.settings-section .subsection-title{margin-bottom:10px}.settings-section .tip{font-style:italic;font-size:13px;color:grey}.settings-section .pattern-wrapper{margin-top:10px;font-size:16px;display:flex;height:33px}.settings-section .api-error{margin-top:5px;color:red}.pattern-wrapper .pattern-input{width:600px;font-size:inherit;padding:5px 0;height:100%;box-sizing:border-box;vertical-align:middle;flex-grow:1;flex-shrink:1}.btn.new-pattern{height:100%;line-height:18px}.pattern-wrapper .shrink{height:100%;width:40px;text-align:center;box-sizing:border-box;flex-grow:0;flex-shrink:0;margin-left:10px}.fa{opacity:.7}.pattern-wrapper .shrink.reset{background:unset;width:unset;padding:0;margin-left:8px}
@@ -15,9 +15,7 @@ export default Component.extend({
15
15
  },
16
16
 
17
17
  allPatterns: computed("patterns.[]", "newPatterns.[]", function() {
18
- const patterns = this.get("patterns").map(pattern =>
19
- Pattern.create({ value: pattern })
20
- );
18
+ const patterns = this.get("patterns");
21
19
  const newPatterns = this.get("newPatterns") || [];
22
20
  return [...newPatterns.reverse(), ...patterns.reverse()];
23
21
  }),
@@ -67,7 +65,7 @@ export default Component.extend({
67
65
  pattern: pattern.get("value")
68
66
  })
69
67
  .then(() => {
70
- this.get("patterns").removeObject(pattern.get("value"));
68
+ this.get("patterns").removeObject(pattern);
71
69
  pattern.destroy();
72
70
  })
73
71
  .catch(response => this.catchBlock(pattern, response))
@@ -85,7 +83,7 @@ export default Component.extend({
85
83
  }).then(response => {
86
84
  pattern.updateValue(response.pattern);
87
85
  pattern.set("isNew", false);
88
- this.get("patterns").pushObject(pattern.get("value"));
86
+ this.get("patterns").pushObject(pattern);
89
87
  this.get("newPatterns").removeObject(pattern);
90
88
  });
91
89
  } else {
@@ -94,9 +92,8 @@ export default Component.extend({
94
92
  pattern: pattern.get("value"),
95
93
  new_pattern: pattern.get("valueBuffer")
96
94
  }).then(response => {
97
- const index = this.get("patterns").indexOf(pattern.get("value"));
98
95
  pattern.updateValue(response.pattern);
99
- this.get("patterns")[index] = pattern.get("value");
96
+ pattern.set("count", 0);
100
97
  });
101
98
  }
102
99
  promise
@@ -104,6 +101,19 @@ export default Component.extend({
104
101
  this.catchBlock(pattern, response);
105
102
  })
106
103
  .always(() => this.alwaysBlock(pattern));
104
+ },
105
+
106
+ resetCount(pattern) {
107
+ pattern.set("saving", true);
108
+ ajax("/reset-count.json", {
109
+ method: "PUT",
110
+ data: { pattern: pattern.get("value"), hard: !!pattern.get("hard") }
111
+ })
112
+ .then(() => {
113
+ pattern.set("count", 0);
114
+ })
115
+ .catch(response => this.catchBlock(pattern, response))
116
+ .always(() => this.alwaysBlock(pattern));
107
117
  }
108
118
  }
109
119
  });
@@ -6,6 +6,7 @@ export default EmberObject.extend({
6
6
  valueBuffer: "",
7
7
  error: null,
8
8
  saving: false,
9
+ count: 0,
9
10
 
10
11
  init() {
11
12
  this._super(...arguments);
@@ -21,5 +22,9 @@ export default EmberObject.extend({
21
22
 
22
23
  hasBuffer: computed("value", "valueBuffer", function() {
23
24
  return this.get("value") !== this.get("valueBuffer");
25
+ }),
26
+
27
+ zeroCount: computed("count", function() {
28
+ return this.get("count") <= 0;
24
29
  })
25
30
  });
@@ -1,5 +1,6 @@
1
1
  import Route from "@ember/routing/route";
2
2
  import { ajax } from "client-app/lib/utilities";
3
+ import Pattern from "client-app/models/pattern-item";
3
4
 
4
5
  export default Route.extend({
5
6
  model() {
@@ -8,8 +9,20 @@ export default Route.extend({
8
9
 
9
10
  setupController(controller, model) {
10
11
  this._super(...arguments);
11
- const showCodedPatterns =
12
- model.coded_patterns && model.coded_patterns.length > 0;
13
- controller.set("showCodedPatterns", showCodedPatterns);
12
+ const suppression = model.suppression;
13
+ const codedSuppression = suppression
14
+ .filter(p => p.hard)
15
+ .map(hash => Pattern.create(hash));
16
+
17
+ const customSuppression = suppression
18
+ .reject(p => p.hard)
19
+ .map(hash => Pattern.create(hash));
20
+
21
+ const showCodedSuppression = codedSuppression.length > 0;
22
+ controller.setProperties({
23
+ showCodedSuppression,
24
+ codedSuppression,
25
+ customSuppression
26
+ });
14
27
  }
15
28
  });
@@ -557,6 +557,7 @@ label span {
557
557
  margin-left: auto;
558
558
  font-size: 15px;
559
559
  padding: 0 10px;
560
+ padding-bottom: 70px;
560
561
  }
561
562
 
562
563
  .settings-header {
@@ -623,11 +624,24 @@ label span {
623
624
  line-height: 18px;
624
625
  }
625
626
 
626
- .pattern-wrapper .btn {
627
+ .pattern-wrapper .shrink {
627
628
  height: 100%;
629
+ width: 40px;
630
+ text-align: center;
628
631
  box-sizing: border-box;
629
632
  vertical-align: middle;
630
633
  flex-grow: 0;
631
634
  flex-shrink: 0;
632
635
  margin-left: 10px;
633
636
  }
637
+
638
+ .fa {
639
+ opacity: 0.7;
640
+ }
641
+
642
+ .pattern-wrapper .shrink.reset {
643
+ background: unset;
644
+ width: unset;
645
+ padding: 0;
646
+ margin-left: 8px;
647
+ }
@@ -12,10 +12,19 @@
12
12
  }}
13
13
  {{#if mutable}}
14
14
  {{#if pattern.hasBuffer}}
15
- <button {{action "save" pattern}} disabled={{pattern.saving}} class="btn ok no-text save"><i class="fa fa-check"></i></button>
15
+ <button {{action "save" pattern}} disabled={{pattern.saving}} class="btn ok no-text save shrink">
16
+ <i class="fa fa-check"></i>
17
+ </button>
16
18
  {{/if}}
17
- <button {{action "trash" pattern}} disabled={{pattern.saving}} class="btn no-text trash"><i class="fa fa-trash"></i></button>
19
+ <button {{action "trash" pattern}} disabled={{pattern.saving}} class="btn no-text trash shrink">
20
+ <i class="fa fa-trash"></i>
21
+ </button>
18
22
  {{/if}}
23
+
24
+ <input disabled=true title="Number of logs that have been suppressed by this pattern" class="count shrink" value={{pattern.count}}>
25
+ <button {{action "resetCount" pattern}} class="btn no-text reset shrink" title="Reset count of suppressed logs" disabled={{pattern.zeroCount}}>
26
+ <i class="fa fa-rotate-right"></i>
27
+ </button>
19
28
  </div>
20
29
  {{~#if pattern.error~}}
21
30
  <pre class="api-error">
@@ -9,17 +9,17 @@
9
9
  <h2 class="section-title">Suppression Patterns</h2>
10
10
  <div>New messages that match these Regular Expression patterns will be suppressed.</div>
11
11
 
12
- {{#if showCodedPatterns}}
12
+ {{#if showCodedSuppression}}
13
13
  <h3 class="subsection-title">Hard-coded patterns:</h3>
14
14
  <div class="tip">These patterns can't be removed via the UI because they are commited to the source code of your app.</div>
15
15
  {{patterns-list
16
- patterns=model.coded_patterns
16
+ patterns=codedSuppression
17
17
  mutable=false}}
18
18
  {{/if}}
19
19
 
20
20
  <h3 class="subsection-title">Custom patterns:</h3>
21
21
  {{patterns-list
22
- patterns=model.custom_patterns
22
+ patterns=customSuppression
23
23
  key="suppression"
24
24
  mutable=true}}
25
25
  </div>
@@ -2,6 +2,7 @@ import { module, test } from "qunit";
2
2
  import { setupRenderingTest } from "ember-qunit";
3
3
  import hbs from "htmlbars-inline-precompile";
4
4
  import { fillIn, render, findAll } from "@ember/test-helpers";
5
+ import Pattern from "client-app/models/pattern-item";
5
6
 
6
7
  module("Integration | Component | patterns-list", function(hooks) {
7
8
  setupRenderingTest(hooks);
@@ -19,15 +20,26 @@ module("Integration | Component | patterns-list", function(hooks) {
19
20
  .dom(".btn.new-pattern")
20
21
  .exists("It shows a create button when mutable");
21
22
 
22
- this.set("patterns", ["/somepattern/", "/anotherpattern/"]);
23
+ const pattern1 = Pattern.create({ value: "/somepattern/" });
24
+ const pattern2 = Pattern.create({ value: "/anotherpattern/" });
25
+ this.set("patterns", [pattern1, pattern2]);
23
26
  assert.equal(
24
27
  findAll(".pattern-input").length,
25
- 3,
28
+ 3, // yes 3 because there is always an empty pattern input
26
29
  "It correctly displays patterns"
27
30
  );
28
31
  assert
29
32
  .dom(".btn.save")
30
33
  .doesNotExist("No save buttons are shown when there is 0 buffer");
34
+ const counters = findAll("input.count");
35
+ assert.equal(counters.length, 3, "counters shown for all patterns");
36
+ assert.ok(counters.every(c => c.disabled), "counters are disabled");
37
+
38
+ pattern1.set("count", 6);
39
+ this.set("patterns", [pattern1, pattern2]);
40
+ const counterPresent = !!findAll("input.count").find(c => c.value === "6");
41
+ assert.ok(counterPresent, "counter shows correct value");
42
+ assert.dom(".btn.reset").exists("Reset button is shown");
31
43
 
32
44
  let inputs = findAll(".pattern-input");
33
45
  await fillIn(inputs[0], "/newpattern/");
@@ -101,6 +101,20 @@ module Logster
101
101
  not_implemented
102
102
  end
103
103
 
104
+ # increments the number of messages that have been suppressed by a pattern
105
+ def increment_ignore_count(pattern)
106
+ end
107
+
108
+ # removes number of suppressed messages by a pattern
109
+ def remove_ignore_count(pattern)
110
+ end
111
+
112
+ # returns a hash that maps patterns to the number of messages they
113
+ # have suppressed
114
+ def get_all_ignore_count
115
+ {}
116
+ end
117
+
104
118
  def report(severity, progname, msg, opts = {})
105
119
  return if (!msg || (String === msg && msg.empty?)) && skip_empty
106
120
  return if level && severity < level
@@ -125,13 +139,24 @@ module Logster
125
139
  message.backtrace = caller.join("\n")
126
140
  end
127
141
 
128
- return if ignore && ignore.any? { |pattern| message =~ pattern }
142
+ return if ignore && ignore.any? do |pattern|
143
+ if message =~ pattern
144
+ val = Regexp === pattern ? pattern.inspect : pattern.to_s
145
+ increment_ignore_count(val)
146
+ true
147
+ end
148
+ end
129
149
 
130
150
  if Logster.config.enable_custom_patterns_via_ui || allow_custom_patterns
131
151
  custom_ignore = @patterns_cache.fetch do
132
152
  Logster::SuppressionPattern.find_all(store: self)
133
153
  end
134
- return if custom_ignore.any? { |pattern| message =~ pattern }
154
+ return if custom_ignore.any? do |pattern|
155
+ if message =~ pattern
156
+ increment_ignore_count(pattern.inspect)
157
+ true
158
+ end
159
+ end
135
160
  end
136
161
 
137
162
  similar = nil
@@ -109,9 +109,20 @@ module Logster
109
109
  elsif resource =~ /\/settings(\.json)?$/
110
110
  json = $1 == ".json"
111
111
  if json
112
- coded_patterns = Logster.store.ignore&.map(&:inspect) || []
113
- custom_patterns = Logster::SuppressionPattern.find_all(raw: true)
114
- [200, { "Content-Type" => "application/json; charset=utf-8" }, [JSON.generate(coded_patterns: coded_patterns, custom_patterns: custom_patterns)]]
112
+ ignore_count = Logster.store.get_all_ignore_count
113
+ suppression = []
114
+
115
+ Logster.store.ignore&.each do |pattern|
116
+ string_pattern = Regexp === pattern ? pattern.inspect : pattern.to_s
117
+ count = ignore_count[string_pattern] || 0
118
+ suppression << { value: string_pattern, count: count, hard: true }
119
+ end
120
+
121
+ Logster::SuppressionPattern.find_all(raw: true).each do |pattern|
122
+ count = ignore_count[pattern] || 0
123
+ suppression << { value: pattern, count: count }
124
+ end
125
+ [200, { "Content-Type" => "application/json; charset=utf-8" }, [JSON.generate(suppression: suppression)]]
115
126
  else
116
127
  [200, { "Content-Type" => "text/html; charset=utf-8" }, [body(preload_json)]]
117
128
  end
@@ -125,6 +136,24 @@ module Logster
125
136
  return method_not_allowed if req.request_method == "GET"
126
137
 
127
138
  update_patterns(set_name, req)
139
+ elsif resource == "/reset-count.json"
140
+ req = Rack::Request.new(env)
141
+ return method_not_allowed("PUT is needed for this endpoint") if req.request_method != "PUT"
142
+ pattern = nil
143
+ if [true, "true"].include?(req.params["hard"])
144
+ pattern = Logster.store.ignore.find do |patt|
145
+ str = Regexp === patt ? patt.inspect : patt.to_s
146
+ str == req.params["pattern"]
147
+ end
148
+ else
149
+ pattern = Logster::SuppressionPattern.find_all(raw: true).find do |patt|
150
+ patt == req.params["pattern"]
151
+ end
152
+ end
153
+ return not_found("Pattern not found") unless pattern
154
+ pattern = Regexp === pattern ? pattern.inspect : pattern.to_s
155
+ Logster.store.remove_ignore_count(pattern)
156
+ [200, {}, ["OK"]]
128
157
  elsif resource == "/"
129
158
  [200, { "Content-Type" => "text/html; charset=utf-8" }, [body(preload_json)]]
130
159
  else
@@ -272,6 +272,7 @@ module Logster
272
272
  @redis.del(env_key)
273
273
  @redis.del(grouping_key)
274
274
  @redis.del(solved_key)
275
+ @redis.del(ignored_logs_count_key)
275
276
  Logster::PATTERNS.each do |klass|
276
277
  @redis.del(klass.set_name)
277
278
  end
@@ -360,6 +361,18 @@ module Logster
360
361
  @redis.smembers(set_name)
361
362
  end
362
363
 
364
+ def increment_ignore_count(pattern)
365
+ @redis.hincrby(ignored_logs_count_key, pattern, 1)
366
+ end
367
+
368
+ def remove_ignore_count(pattern)
369
+ @redis.hdel(ignored_logs_count_key, pattern)
370
+ end
371
+
372
+ def get_all_ignore_count
373
+ @redis.hgetall(ignored_logs_count_key)
374
+ end
375
+
363
376
  protected
364
377
 
365
378
  def clear_solved(count = nil)
@@ -566,6 +579,10 @@ module Logster
566
579
  @grouping_key ||= "__LOGSTER__GMAP"
567
580
  end
568
581
 
582
+ def ignored_logs_count_key
583
+ @ignored_logs_count_key ||= "__LOGSTER__IGNORED_LOGS_COUNT_KEY__MAP"
584
+ end
585
+
569
586
  private
570
587
 
571
588
  def register_rate_limit(severities, limit, duration, callback)
@@ -11,6 +11,7 @@ module Logster
11
11
 
12
12
  def destroy(clear_cache: true) # arg used in tests
13
13
  super()
14
+ @store.remove_ignore_count(self.to_s)
14
15
  @store.clear_suppression_patterns_cache if clear_cache
15
16
  end
16
17
  end
@@ -1,3 +1,3 @@
1
1
  module Logster
2
- VERSION = "2.2.0"
2
+ VERSION = "2.3.0"
3
3
  end
@@ -67,12 +67,15 @@ class TestViewer < Minitest::Test
67
67
  record = Logster::SuppressionPattern.new("custompattern")
68
68
  record.save
69
69
 
70
+ Logster.store.report(Logger::INFO, "test", "somepattern")
70
71
  response = request.get("/logsie/settings.json")
71
72
  assert_equal(200, response.status)
72
73
  assert_includes(response.content_type, "application/json")
74
+
73
75
  json = JSON.parse(response.body)
74
- custom_patterns = json["custom_patterns"]
75
- coded_patterns = json["coded_patterns"]
76
+ suppression = json["suppression"]
77
+ custom_patterns = suppression.reject { |p| p["hard"] }.map { |p| p["value"] }
78
+ coded_patterns = suppression.select { |p| p["hard"] }.map { |p| p["value"] }
76
79
  assert_includes(custom_patterns, "/custompattern/")
77
80
  assert_includes(coded_patterns, "/somepattern/")
78
81
  assert_includes(coded_patterns, "/anotherpattern/")
@@ -83,8 +86,9 @@ class TestViewer < Minitest::Test
83
86
  response = request.get("/logsie/settings.json")
84
87
  assert_equal(200, response.status)
85
88
  json = JSON.parse(response.body)
86
- assert_equal([], json["custom_patterns"])
87
- assert_equal([], json["coded_patterns"])
89
+ assert_equal([], json["suppression"])
90
+ ensure
91
+ Logster.store.ignore = nil
88
92
  end
89
93
 
90
94
  def test_settings_page_responds_with_html
@@ -231,6 +235,35 @@ class TestViewer < Minitest::Test
231
235
  assert_equal(/testpattern/, records.first)
232
236
  end
233
237
 
238
+ def test_reset_ignore_count_works
239
+ Logster.store.ignore = [/whatever store/]
240
+ Logster.store.allow_custom_patterns = true
241
+ Logster::SuppressionPattern.new(/custom pattern/).save
242
+
243
+ Logster.store.report(Logger::INFO, "test", "something whatever store")
244
+ Logster.store.report(Logger::INFO, "test", "this is for custom pattern")
245
+
246
+ response = request.get("/logsie/settings.json")
247
+ assert_equal(200, response.status)
248
+ json = JSON.parse(response.body)
249
+ suppression = json["suppression"]
250
+ assert_equal("1", suppression.find { |p| p["value"] == "/whatever store/" }["count"])
251
+ assert_equal("1", suppression.find { |p| p["value"] == "/custom pattern/" }["count"])
252
+
253
+ response = request.put("/logsie/reset-count.json",
254
+ params: { pattern: "/whatever store/", hard: true }
255
+ )
256
+ assert_equal(200, response.status)
257
+
258
+ response = request.put("/logsie/reset-count.json",
259
+ params: { pattern: "/custom pattern/", hard: false }
260
+ )
261
+ assert_equal(200, response.status)
262
+
263
+ hash = Logster.store.get_all_ignore_count
264
+ assert_equal({}, hash)
265
+ end
266
+
234
267
  def test_linking_to_a_valid_js_files
235
268
  %w(
236
269
  /logsie/javascript/client-app.js
@@ -580,6 +580,30 @@ class TestRedisStore < Minitest::Test
580
580
  assert_equal("testtesttesttest", latest.first.message)
581
581
  end
582
582
 
583
+ def test_suppressed_logs_are_counted
584
+ @store.ignore = [/store ignore/, Logster::IgnorePattern.new(/ignore pattern/), "an ignore string"]
585
+ @store.allow_custom_patterns = true
586
+ Logster::SuppressionPattern.new(/sup pattern/, store: @store).save
587
+
588
+ 2.times do
589
+ @store.report(Logger::INFO, "test", "this is store ignore")
590
+ @store.report(Logger::INFO, "test", "this is ignore pattern")
591
+ @store.report(Logger::INFO, "test", "this is sup pattern")
592
+ @store.report(Logger::INFO, "test", "this is an ignore string")
593
+ end
594
+
595
+ ignore_pattern = Logster::IgnorePattern.new(/ignore pattern/)
596
+ hash = @store.get_all_ignore_count
597
+ assert_equal("2", hash[ignore_pattern.to_s])
598
+ assert_equal("2", hash[/sup pattern/.inspect])
599
+ assert_equal("2", hash[/store ignore/.inspect])
600
+ assert_equal("2", hash["an ignore string"])
601
+
602
+ @store.remove_ignore_count(ignore_pattern.to_s)
603
+ hash = @store.get_all_ignore_count
604
+ assert_nil(hash[ignore_pattern.to_s])
605
+ end
606
+
583
607
  def test_rate_limits
584
608
  %w{minute hour}.each do |duration|
585
609
  begin
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logster
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.0
4
+ version: 2.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - UI for viewing logs in Rack
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-03-19 00:00:00.000000000 Z
11
+ date: 2019-03-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler