logster 2.5.0 → 2.5.1

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: 320e0b49302b25ebcaa67631295be41ddc7f0a14aa0dc7436ef1eefa5b662c77
4
- data.tar.gz: 85c9ab97bebdbf09bbff49c4a93d8824ffe20968c1f3a4efe975f12072fdeb54
3
+ metadata.gz: 0fe7e01b692cb4454d249da6f9c9c1c03d5c765056e6ae6ee1a5571ddb38691c
4
+ data.tar.gz: 13ac426322e9993fb067144cf6a95fa3950602cd0d8e41c3521d8115751207e6
5
5
  SHA512:
6
- metadata.gz: 0e99100761c77ee1191498ef11d2b8903b6ed23de85ba39bcd690e237ccb7b1e7e6c9fa5b27050bfe4870cb5caf0549c27cdc9903c2addb4afc75516384f46d2
7
- data.tar.gz: 6b29eab99fc93e87a8a577fdb6eccff52308dcdf571a407ac42a6c458ae3b1175b48dbf94f7c48a93de8d614c584bfb1c5c3442675a7a66724aa3e913c404d8b
6
+ metadata.gz: c695dfd4d37c625fa8a51026f26cc5d1120aa370eba416828cac9bca3ea03e9412fbb8475af4b30684383ec7713f251a096e88ed9dbdfb830e80863dbef692cf
7
+ data.tar.gz: 3aa441c84018af760b9b2a7ca607a123cd27fd636cc6e29b4e8855518437f5c46417cc9513a51cd3d97dd213cfaf2c9ccbd7613931b5b80a03a60c3389b1e238
@@ -1,5 +1,13 @@
1
1
  # CHANGELOG
2
2
 
3
+ - 2019-12-13: 2.5.1
4
+
5
+ - DEV: Bump puma from 4.2.1 to 4.3.1 in /website (#100)
6
+ - FIX: Don't include messages that were removed from groups due to max size limit
7
+ - FIX: loadingEnv is an attribute of model
8
+ - FIX: Prevent crashing when reporting a non-string message to Logster
9
+ - UX: Group count attribute should be a long-running number of errors, not just the number of errors the group currently contains
10
+
3
11
  - 2019-12-12: 2.5.0
4
12
 
5
13
  - DEV: Update to latest version of gems
@@ -57,7 +57,7 @@ this.model.selectRow(e,t)},tabChangedAction:function(e){this.model.tabChanged(e)
57
57
  confirm("Clear the logs?\n\nCancel = No, OK = Clear")&&(0,t.ajax)("/clear",{type:"POST"}).then(function(){e.model.reload()})},removeMessage:function(e){var t=this.model.currentRow.group?this.model.currentRow:null,n=this.model.rows,a=t?n.indexOf(t):n.indexOf(e)
58
58
  e.destroy(),e.set("selected",!1),this.model.set("total",this.model.total-1)
59
59
  var s=!1,i=0
60
- t?(i=t.messages.indexOf(e),t.messages.removeObject(e),i=Math.min(i,t.messages.length-1),t.decrementProperty("count"),0===t.messages.length&&(n.removeObject(t),s=!0)):(n.removeObject(e),s=!0),s?a>0?this.model.selectRow(n[a-1]):this.model.total>0?this.model.selectRow(n[0]):this.model.reload():t&&this.model.selectRow(n[a],{messageIndex:i})},solveMessage:function(e){this.model.solve(e)},groupedMessageChangedAction:function(e){this.model.groupedMessageChanged(e)},envChangedAction:function(e){this.model.envChanged(e)},updateFilter:function(e){var t=this
60
+ t?(i=t.messages.indexOf(e),t.messages.removeObject(e),i=Math.min(i,t.messages.length-1),0===t.messages.length&&(n.removeObject(t),s=!0)):(n.removeObject(e),s=!0),s?a>0?this.model.selectRow(n[a-1]):this.model.total>0?this.model.selectRow(n[0]):this.model.reload():t&&this.model.selectRow(n[a],{messageIndex:i})},solveMessage:function(e){this.model.solve(e)},groupedMessageChangedAction:function(e){this.model.groupedMessageChanged(e)},envChangedAction:function(e){this.model.envChanged(e)},updateFilter:function(e){var t=this
61
61
  this.toggleProperty(e)
62
62
  var n=[];["Debug","Info","Warn","Err","Fatal"].forEach(function(e,a){t.get("show".concat(e))&&n.push(a)}),n.push(5),this.model.set("filter",n),this.model.reload().then(function(){return t.model.updateSelectedRow()})},updateSearch:function(e){e&&1===e.length||Ember.run.debounce(this,this.doSearch,e,250)}},doSearch:function(e){var t=this
63
63
  this.model.set("search",e),this.model.reload().then(function(){return t.model.updateSelectedRow()})}})
@@ -207,10 +207,10 @@ var t=Ember.HTMLBars.template({id:"zCP0V00P",block:'{"symbols":["tab","&default"
207
207
  e.default=t}),define("client-app/templates/components/time-formatter",["exports"],function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
208
208
  var t=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"}})
209
209
  e.default=t}),define("client-app/templates/index",["exports"],function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
210
- var t=Ember.HTMLBars.template({id:"ORfs9ULA",block:'{"symbols":["row"],"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"],[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," "],[3,"action",[[22,0,[]],"showMoreBefore"]],[10],[0,"\\n"]],"parameters":[]},null],[4,"each",[[23,["model","rows"]]],null,{"statements":[[0," "],[1,[27,"message-row",null,[["model","selectRow"],[[22,1,[]],[27,"action",[[22,0,[]],"selectRowAction",[22,1,[]]],null]]]],false],[0,"\\n"]],"parameters":[1]},null],[0," "],[10],[0,"\\n"],[10],[0,"\\n"],[7,"div"],[11,"id","bottom-panel"],[12,"class",[28,[[27,"if",[[23,["model","currentRow","group"]],"group-view"],null]]]],[9],[0,"\\n"],[4,"if",[[23,["model","currentRow","group"]]],null,{"statements":[[0," "],[1,[27,"page-nav",null,[["list","position","extraClasses","navigate"],[[23,["model","currentRow","messages"]],[23,["model","currentGroupedMessagesPosition"]],"group-nav",[27,"action",[[22,0,[]],"groupedMessageChangedAction"],null]]]],false],[0,"\\n"]],"parameters":[]},null],[0," "],[1,[27,"message-info",null,[["currentMessage","loadingEnv","removeMessage","solveMessage","onTabChange","envChangedAction","currentEnvPosition","actionsInMenu"],[[23,["model","currentMessage"]],[23,["loadingEnv"]],[27,"action",[[22,0,[]],"removeMessage"],null],[27,"action",[[22,0,[]],"solveMessage"],null],[27,"action",[[22,0,[]],"tabChangedAction"],null],[27,"action",[[22,0,[]],"envChangedAction"],null],[23,["model","currentEnvPosition"]],[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 "],[7,"input"],[12,"checked",[21,"showDebug"]],[12,"onchange",[27,"action",[[22,0,[]],[27,"action",[[22,0,[]],"updateFilter","showDebug"],null]],null]],[11,"type","checkbox"],[9],[10],[0,"\\n "],[7,"span"],[9],[0,"Debug"],[10],[0,"\\n "],[10],[0,"\\n "],[7,"label"],[11,"class","info"],[9],[0,"\\n "],[7,"input"],[12,"checked",[21,"showInfo"]],[12,"onchange",[27,"action",[[22,0,[]],[27,"action",[[22,0,[]],"updateFilter","showInfo"],null]],null]],[11,"type","checkbox"],[9],[10],[0,"\\n "],[7,"span"],[9],[0,"Info"],[10],[0,"\\n "],[10],[0,"\\n "],[7,"label"],[11,"class","warn"],[9],[0,"\\n "],[7,"input"],[12,"checked",[21,"showWarn"]],[12,"onchange",[27,"action",[[22,0,[]],[27,"action",[[22,0,[]],"updateFilter","showWarn"],null]],null]],[11,"type","checkbox"],[9],[10],[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 "],[7,"input"],[12,"checked",[21,"showErr"]],[12,"onchange",[27,"action",[[22,0,[]],[27,"action",[[22,0,[]],"updateFilter","showErr"],null]],null]],[11,"type","checkbox"],[9],[10],[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 "],[7,"input"],[12,"checked",[21,"showFatal"]],[12,"onchange",[27,"action",[[22,0,[]],[27,"action",[[22,0,[]],"updateFilter","showFatal"],null]],null]],[11,"type","checkbox"],[9],[10],[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 "],[7,"input"],[11,"class","search"],[11,"placeholder","Search"],[12,"onkeyup",[27,"action",[[22,0,[]],"updateSearch"],[["value"],["target.value"]]]],[11,"type","text"],[9],[10],[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"],[9],[7,"i"],[11,"class","fa fa-trash-o"],[9],[10],[7,"span"],[9],[0,"Clear logs"],[10],[3,"action",[[22,0,[]],"clear"]],[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"}})
210
+ var t=Ember.HTMLBars.template({id:"ZfZsvZU6",block:'{"symbols":["row"],"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"],[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," "],[3,"action",[[22,0,[]],"showMoreBefore"]],[10],[0,"\\n"]],"parameters":[]},null],[4,"each",[[23,["model","rows"]]],null,{"statements":[[0," "],[1,[27,"message-row",null,[["model","selectRow"],[[22,1,[]],[27,"action",[[22,0,[]],"selectRowAction",[22,1,[]]],null]]]],false],[0,"\\n"]],"parameters":[1]},null],[0," "],[10],[0,"\\n"],[10],[0,"\\n"],[7,"div"],[11,"id","bottom-panel"],[12,"class",[28,[[27,"if",[[23,["model","currentRow","group"]],"group-view"],null]]]],[9],[0,"\\n"],[4,"if",[[23,["model","currentRow","group"]]],null,{"statements":[[0," "],[1,[27,"page-nav",null,[["list","position","extraClasses","navigate"],[[23,["model","currentRow","messages"]],[23,["model","currentGroupedMessagesPosition"]],"group-nav",[27,"action",[[22,0,[]],"groupedMessageChangedAction"],null]]]],false],[0,"\\n"]],"parameters":[]},null],[0," "],[1,[27,"message-info",null,[["currentMessage","loadingEnv","removeMessage","solveMessage","onTabChange","envChangedAction","currentEnvPosition","actionsInMenu"],[[23,["model","currentMessage"]],[23,["model","loadingEnv"]],[27,"action",[[22,0,[]],"removeMessage"],null],[27,"action",[[22,0,[]],"solveMessage"],null],[27,"action",[[22,0,[]],"tabChangedAction"],null],[27,"action",[[22,0,[]],"envChangedAction"],null],[23,["model","currentEnvPosition"]],[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 "],[7,"input"],[12,"checked",[21,"showDebug"]],[12,"onchange",[27,"action",[[22,0,[]],[27,"action",[[22,0,[]],"updateFilter","showDebug"],null]],null]],[11,"type","checkbox"],[9],[10],[0,"\\n "],[7,"span"],[9],[0,"Debug"],[10],[0,"\\n "],[10],[0,"\\n "],[7,"label"],[11,"class","info"],[9],[0,"\\n "],[7,"input"],[12,"checked",[21,"showInfo"]],[12,"onchange",[27,"action",[[22,0,[]],[27,"action",[[22,0,[]],"updateFilter","showInfo"],null]],null]],[11,"type","checkbox"],[9],[10],[0,"\\n "],[7,"span"],[9],[0,"Info"],[10],[0,"\\n "],[10],[0,"\\n "],[7,"label"],[11,"class","warn"],[9],[0,"\\n "],[7,"input"],[12,"checked",[21,"showWarn"]],[12,"onchange",[27,"action",[[22,0,[]],[27,"action",[[22,0,[]],"updateFilter","showWarn"],null]],null]],[11,"type","checkbox"],[9],[10],[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 "],[7,"input"],[12,"checked",[21,"showErr"]],[12,"onchange",[27,"action",[[22,0,[]],[27,"action",[[22,0,[]],"updateFilter","showErr"],null]],null]],[11,"type","checkbox"],[9],[10],[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 "],[7,"input"],[12,"checked",[21,"showFatal"]],[12,"onchange",[27,"action",[[22,0,[]],[27,"action",[[22,0,[]],"updateFilter","showFatal"],null]],null]],[11,"type","checkbox"],[9],[10],[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 "],[7,"input"],[11,"class","search"],[11,"placeholder","Search"],[12,"onkeyup",[27,"action",[[22,0,[]],"updateSearch"],[["value"],["target.value"]]]],[11,"type","text"],[9],[10],[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"],[9],[7,"i"],[11,"class","fa fa-trash-o"],[9],[10],[7,"span"],[9],[0,"Clear logs"],[10],[3,"action",[[22,0,[]],"clear"]],[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"}})
211
211
  e.default=t}),define("client-app/templates/settings",["exports"],function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
212
212
  var t=Ember.HTMLBars.template({id:"VCEsnuWV",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. Checking Apply retroactively will remove all existing messages that match the patterns."],[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","applyRetroactivelyCheckbox","mutable"],[[23,["customSuppression"]],"suppression",true,true]]],false],[0,"\\n "],[10],[0,"\\n "],[7,"div"],[11,"class","settings-section grouping-patterns"],[9],[0,"\\n "],[7,"h2"],[11,"class","section-title"],[9],[0,"Grouping Patterns"],[10],[0,"\\n "],[7,"div"],[9],[0,"Add a Regular Expression pattern to group all new and existing messages into a single row when viewing the logs."],[10],[0,"\\n\\n "],[1,[27,"patterns-list",null,[["patterns","key","mutable"],[[23,["grouping"]],"grouping",true]]],false],[0,"\\n "],[10],[0,"\\n"],[10],[0,"\\n"]],"hasEval":false}',meta:{moduleName:"client-app/templates/settings.hbs"}})
213
213
  e.default=t}),define("client-app/templates/show",["exports"],function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
214
214
  var t=Ember.HTMLBars.template({id:"Z9BtSx7U",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","envChangedAction","currentEnvPosition","actionsInMenu"],[[23,["model"]],"true",[27,"action",[[22,0,[]],"envChanged"],null],[23,["envPosition"]],false]]],false],[0,"\\n"],[10],[0,"\\n"]],"hasEval":false}',meta:{moduleName:"client-app/templates/show.hbs"}})
215
215
  e.default=t}),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(decodeURIComponent(t))}
216
- 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+24d6cc97"})
216
+ 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+43e54768"})
@@ -70,7 +70,6 @@ export default Controller.extend({
70
70
  messageIndex = group.messages.indexOf(msg);
71
71
  group.messages.removeObject(msg);
72
72
  messageIndex = Math.min(messageIndex, group.messages.length - 1);
73
- group.decrementProperty("count");
74
73
  if (group.messages.length === 0) {
75
74
  rows.removeObject(group);
76
75
  removedRow = true;
@@ -24,7 +24,7 @@
24
24
  {{/if}}
25
25
  {{message-info
26
26
  currentMessage=model.currentMessage
27
- loadingEnv=loadingEnv
27
+ loadingEnv=model.loadingEnv
28
28
  removeMessage=(action "removeMessage")
29
29
  solveMessage=(action "solveMessage")
30
30
  onTabChange=(action "tabChangedAction")
@@ -5,12 +5,13 @@ module Logster
5
5
  MAX_SIZE = 100
6
6
 
7
7
  attr_reader :key, :messages_keys, :timestamp, :messages
8
- attr_accessor :changed
8
+ attr_accessor :changed, :pattern, :count
9
9
 
10
- def initialize(key, messages_keys = [], timestamp: 0)
10
+ def initialize(key, messages_keys = [], timestamp: 0, count: 0)
11
11
  @key = key
12
12
  @messages_keys = messages_keys || []
13
13
  @timestamp = timestamp
14
+ @count = count
14
15
  @changed = true
15
16
  end
16
17
 
@@ -19,7 +20,8 @@ module Logster
19
20
  group = new(
20
21
  hash["key"],
21
22
  hash["messages_keys"],
22
- timestamp: hash["timestamp"] || 0
23
+ timestamp: hash["timestamp"] || 0,
24
+ count: hash["count"] || 0
23
25
  )
24
26
  group.changed = false
25
27
  group
@@ -33,14 +35,15 @@ module Logster
33
35
  {
34
36
  key: @key,
35
37
  messages_keys: @messages_keys,
36
- timestamp: @timestamp
38
+ timestamp: @timestamp,
39
+ count: @count
37
40
  }
38
41
  end
39
42
 
40
43
  def to_h_web
41
44
  {
42
45
  regex: @key,
43
- count: self.count,
46
+ count: @count,
44
47
  timestamp: @timestamp,
45
48
  messages: @messages,
46
49
  severity: -1,
@@ -55,6 +58,7 @@ module Logster
55
58
  def add_message(message)
56
59
  if !@messages_keys.include?(message.key)
57
60
  @messages_keys.unshift(message.key)
61
+ @count += 1
58
62
  @changed = true
59
63
  end
60
64
  if @timestamp < message.timestamp
@@ -101,10 +105,6 @@ module Logster
101
105
  @changed
102
106
  end
103
107
 
104
- def count
105
- @messages_keys.size
106
- end
107
-
108
108
  private
109
109
 
110
110
  def max_size
@@ -16,6 +16,7 @@ module Logster
16
16
  m.message =~ self.pattern && existing_groups.none? { |g| g.messages_keys.include?(m.key) }
17
17
  end
18
18
  group.messages = messages
19
+ group.count = messages.size
19
20
  @store.save_pattern_group(group) if group.changed?
20
21
  @store.clear_patterns_cache(CACHE_KEY)
21
22
  end
@@ -254,6 +254,7 @@ module Logster
254
254
 
255
255
  def truncate_message(msg)
256
256
  return msg unless msg
257
+ msg = msg.inspect unless String === msg
257
258
  msg.size <= MAX_MESSAGE_LENGTH ? msg : msg[0...MAX_MESSAGE_LENGTH] + "..."
258
259
  end
259
260
 
@@ -134,11 +134,12 @@ module Logster
134
134
 
135
135
  row = filter_search(row, search)
136
136
  if row
137
+ matches_pattern = pattern_groups.any? { |g| row.message =~ g.pattern }
137
138
  group = pattern_groups.find { |g| g.messages_keys.include?(row.key) }
138
139
  if group && !known_groups.include?(group.key)
139
140
  known_groups << group.key
140
141
  temp << serialize_group(group, row.key)
141
- elsif !group
142
+ elsif !matches_pattern
142
143
  temp << row
143
144
  end
144
145
  end
@@ -350,6 +351,7 @@ module Logster
350
351
  jsons.map! do |json|
351
352
  if json && json.size > 0
352
353
  group = Logster::Group.from_json(json)
354
+ group.pattern = patterns[mapped.index(group.key)]
353
355
  if load_messages
354
356
  group.messages = bulk_get(group.messages_keys, with_env: false)
355
357
  end
@@ -361,7 +363,7 @@ module Logster
361
363
  end
362
364
 
363
365
  def save_pattern_group(group)
364
- if group.count == 0
366
+ if group.messages_keys.size == 0
365
367
  @redis.hdel(pattern_groups_key, group.key)
366
368
  else
367
369
  @redis.hset(pattern_groups_key, group.key, group.to_json)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Logster
4
- VERSION = "2.5.0"
4
+ VERSION = "2.5.1"
5
5
  end
@@ -14,7 +14,8 @@ class TestGroup < MiniTest::Test
14
14
  json = JSON.generate(
15
15
  key: '/somekey/',
16
16
  messages_keys: [111, 222, 333].map(&:to_s),
17
- timestamp: time
17
+ timestamp: time,
18
+ count: 3
18
19
  )
19
20
  group = Logster::Group.from_json(json)
20
21
  refute group.changed?
@@ -49,6 +50,7 @@ class TestGroup < MiniTest::Test
49
50
  ]
50
51
  messages << messages[0]
51
52
  group.messages = messages
53
+ group.count = 4
52
54
  assert_equal 4, group.count
53
55
  assert_equal 74, group.timestamp
54
56
  expected = messages.uniq(&:key).sort_by(&:timestamp).map(&:key).reverse
@@ -67,13 +69,15 @@ class TestGroup < MiniTest::Test
67
69
  get_message(390)
68
70
  ]
69
71
  messages.each { |m| group.add_message(m) }
70
- assert_equal 5, group.count
72
+ # the count attr keeps track of the number of messages
73
+ # that has ever been added to the group.
74
+ # It should never decrease
75
+ assert_equal 6, group.count
71
76
  assert_equal 390, group.timestamp
72
77
  refute_includes group.messages_keys, messages.find { |m| m.timestamp == 10 }.key
73
78
 
74
79
  group = get_group
75
80
  group.messages = messages
76
- assert_equal 5, group.count
77
81
  assert_equal 390, group.timestamp
78
82
  refute_includes group.messages.map(&:timestamp), 5
79
83
  ensure
@@ -938,7 +938,8 @@ class TestRedisStore < Minitest::Test
938
938
  end
939
939
  groups = @store.find_pattern_groups
940
940
  assert_equal 1, groups.size
941
- assert_equal 4, groups[0].count
941
+ assert_equal 4, groups[0].messages_keys.size
942
+ assert_equal 5, groups[0].count
942
943
  assert_equal keys[1..-1].reverse, groups[0].messages_keys
943
944
  ensure
944
945
  @store.max_backlog = prev_max_backlog
@@ -965,12 +966,35 @@ class TestRedisStore < Minitest::Test
965
966
  def test_adding_grouping_pattern_doesnt_add_a_message_to_more_than_one_group
966
967
  Logster.config.enable_custom_patterns_via_ui = true
967
968
  @store.report(Logger::WARN, '', 'trim this plz')
969
+ @store.report(Logger::WARN, '', 'trim this plz 2')
968
970
  Logster::GroupingPattern.new(/trim/, store: @store).save
969
971
  Logster::GroupingPattern.new(/this/, store: @store).save
970
972
  groups = @store.find_pattern_groups
971
973
  assert_equal 1, groups.size
974
+ assert_equal 2, groups[0].count
975
+ ensure
976
+ Logster.config.enable_custom_patterns_via_ui = false
977
+ end
978
+
979
+ def test_latest_doesnt_include_rows_that_are_removed_from_grouping_patterns_due_to_max_size
980
+ Logster.config.enable_custom_patterns_via_ui = true
981
+ Logster::Group.instance_variable_set(:@max_size, 5)
982
+ msg1 = @store.report(Logger::WARN, '', 'first message')
983
+ msg2 = @store.report(Logger::WARN, '', 'second message')
984
+ Logster::GroupingPattern.new(/noisy/, store: @store).save
985
+
986
+ grouped = []
987
+ 7.times do |n|
988
+ grouped << @store.report(Logger::WARN, '', "noisy message #{n}", timestamp: n).key
989
+ end
990
+ msg3 = @store.report(Logger::WARN, '', 'third message')
991
+ results = @store.latest
992
+
993
+ assert_equal [msg1.key, msg2.key, '/noisy/', msg3.key], results.map(&:key)
994
+ assert_equal grouped.reverse.first(5), results[2].messages.map(&:key)
972
995
  ensure
973
996
  Logster.config.enable_custom_patterns_via_ui = false
997
+ Logster::Group.remove_instance_variable(:@max_size)
974
998
  end
975
999
 
976
1000
  private
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.5.0
4
+ version: 2.5.1
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-12-12 00:00:00.000000000 Z
11
+ date: 2019-12-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler