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 +4 -4
- data/CHANGELOG.md +4 -0
- data/assets/javascript/client-app.js +10 -10
- data/assets/stylesheets/client-app.css +1 -1
- data/client-app/app/components/patterns-list.js +17 -7
- data/client-app/app/models/pattern-item.js +5 -0
- data/client-app/app/routes/settings.js +16 -3
- data/client-app/app/styles/app.css +15 -1
- data/client-app/app/templates/components/patterns-list.hbs +11 -2
- data/client-app/app/templates/settings.hbs +3 -3
- data/client-app/tests/integration/components/patterns-list-test.js +14 -2
- data/lib/logster/base_store.rb +27 -2
- data/lib/logster/middleware/viewer.rb +32 -3
- data/lib/logster/redis_store.rb +17 -0
- data/lib/logster/suppression_pattern.rb +1 -0
- data/lib/logster/version.rb +1 -1
- data/test/logster/middleware/test_viewer.rb +37 -4
- data/test/logster/test_redis_store.rb +24 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 68799d063f1eb9cc2cedbb1c88ff2d8b83fcf27959f602778cb9b4387cfb5a76
|
4
|
+
data.tar.gz: 3e6b055f68c84af171b9442eb44bb785156c743a4c2050d8fc276c31b194236b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 13e14d3745cae3716d7f8133e1617935d73568e78c7cd76f92fd472c737ffc9f66c5a394f91e1f63374b41eb9412227b6c1eefc7068c71682d5e2c7694695cd9
|
7
|
+
data.tar.gz: ed736a79f07daa41263b166893a756f429991e79bc4fc5e6dc8c58ffd5c23be2fe2f83c73b88c1deb68a1e4255ab377da070402b6be5a60034753798cf5d8163
|
data/CHANGELOG.md
CHANGED
@@ -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")
|
26
|
-
return[].concat(a(
|
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
|
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
|
30
|
-
e.
|
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
|
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+
|
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 .
|
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")
|
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
|
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
|
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
|
-
|
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
|
12
|
-
|
13
|
-
|
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 .
|
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
|
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
|
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
|
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=
|
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=
|
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
|
-
|
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/");
|
data/lib/logster/base_store.rb
CHANGED
@@ -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?
|
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?
|
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
|
-
|
113
|
-
|
114
|
-
|
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
|
data/lib/logster/redis_store.rb
CHANGED
@@ -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)
|
data/lib/logster/version.rb
CHANGED
@@ -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
|
-
|
75
|
-
|
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["
|
87
|
-
|
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.
|
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-
|
11
|
+
date: 2019-03-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|