logster 2.1.0 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +19 -19
  3. data/.rubocop.yml +1 -1
  4. data/.travis.yml +16 -16
  5. data/CHANGELOG.md +169 -166
  6. data/Gemfile +4 -4
  7. data/Guardfile +8 -8
  8. data/LICENSE.txt +22 -22
  9. data/README.md +99 -99
  10. data/Rakefile +21 -21
  11. data/assets/fonts/FontAwesome.otf +0 -0
  12. data/assets/fonts/fontawesome-webfont.eot +0 -0
  13. data/assets/fonts/fontawesome-webfont.svg +639 -639
  14. data/assets/fonts/fontawesome-webfont.ttf +0 -0
  15. data/assets/fonts/fontawesome-webfont.woff +0 -0
  16. data/assets/fonts/fontawesome-webfont.woff2 +0 -0
  17. data/assets/images/Icon-144_rounded.png +0 -0
  18. data/assets/images/Icon-144_square.png +0 -0
  19. data/assets/images/icon_144x144.png +0 -0
  20. data/assets/images/icon_64x64.png +0 -0
  21. data/assets/javascript/client-app.js +100 -100
  22. data/assets/stylesheets/client-app.css +0 -0
  23. data/build_client_app.sh +0 -0
  24. data/client-app/.editorconfig +20 -20
  25. data/client-app/.ember-cli +9 -9
  26. data/client-app/.eslintignore +19 -19
  27. data/client-app/.eslintrc.js +46 -46
  28. data/client-app/.gitignore +23 -23
  29. data/client-app/.travis.yml +27 -27
  30. data/client-app/.watchmanconfig +3 -3
  31. data/client-app/README.md +57 -57
  32. data/client-app/app/app.js +14 -14
  33. data/client-app/app/components/actions-menu.js +37 -37
  34. data/client-app/app/components/env-tab.js +44 -44
  35. data/client-app/app/components/message-info.js +65 -65
  36. data/client-app/app/components/message-row.js +45 -45
  37. data/client-app/app/components/panel-resizer.js +74 -74
  38. data/client-app/app/components/tab-contents.js +27 -27
  39. data/client-app/app/components/tab-link.js +5 -5
  40. data/client-app/app/components/tabbed-section.js +32 -32
  41. data/client-app/app/components/time-formatter.js +25 -25
  42. data/client-app/app/components/update-time.js +21 -21
  43. data/client-app/app/controllers/index.js +105 -105
  44. data/client-app/app/controllers/show.js +13 -13
  45. data/client-app/app/index.html +29 -29
  46. data/client-app/app/initializers/app-init.js +72 -72
  47. data/client-app/app/lib/preload.js +14 -14
  48. data/client-app/app/lib/utilities.js +140 -140
  49. data/client-app/app/models/message-collection.js +178 -178
  50. data/client-app/app/models/message.js +100 -100
  51. data/client-app/app/resolver.js +3 -3
  52. data/client-app/app/router.js +14 -14
  53. data/client-app/app/routes/index.js +57 -57
  54. data/client-app/app/routes/show.js +14 -14
  55. data/client-app/app/styles/app.css +521 -521
  56. data/client-app/app/templates/application.hbs +2 -2
  57. data/client-app/app/templates/components/actions-menu.hbs +12 -12
  58. data/client-app/app/templates/components/env-tab.hbs +10 -10
  59. data/client-app/app/templates/components/message-info.hbs +41 -41
  60. data/client-app/app/templates/components/message-row.hbs +15 -15
  61. data/client-app/app/templates/components/panel-resizer.hbs +3 -3
  62. data/client-app/app/templates/components/tabbed-section.hbs +10 -10
  63. data/client-app/app/templates/components/time-formatter.hbs +1 -1
  64. data/client-app/app/templates/index.hbs +58 -58
  65. data/client-app/app/templates/show.hbs +7 -7
  66. data/client-app/config/environment.js +51 -51
  67. data/client-app/config/optional-features.json +3 -3
  68. data/client-app/config/targets.js +18 -18
  69. data/client-app/ember-cli-build.js +29 -29
  70. data/client-app/package-lock.json +11365 -11365
  71. data/client-app/package.json +56 -56
  72. data/client-app/testem.js +25 -25
  73. data/client-app/tests/index.html +34 -34
  74. data/client-app/tests/integration/components/actions-menu-test.js +26 -26
  75. data/client-app/tests/integration/components/env-tab-test.js +73 -73
  76. data/client-app/tests/integration/components/message-info-test.js +26 -26
  77. data/client-app/tests/integration/components/message-row-test.js +26 -26
  78. data/client-app/tests/integration/components/panel-resizer-test.js +26 -26
  79. data/client-app/tests/integration/components/tab-contents-test.js +26 -26
  80. data/client-app/tests/integration/components/tab-link-test.js +26 -26
  81. data/client-app/tests/integration/components/tabbed-section-test.js +26 -26
  82. data/client-app/tests/integration/components/time-formatter-test.js +26 -26
  83. data/client-app/tests/integration/components/update-time-test.js +26 -26
  84. data/client-app/tests/test-helper.js +8 -8
  85. data/client-app/tests/unit/controllers/index-test.js +12 -12
  86. data/client-app/tests/unit/controllers/show-test.js +12 -12
  87. data/client-app/tests/unit/initializers/app-init-test.js +31 -31
  88. data/client-app/tests/unit/routes/index-test.js +11 -11
  89. data/client-app/tests/unit/routes/show-test.js +11 -11
  90. data/lib/examples/sidekiq_logster_reporter.rb +21 -21
  91. data/lib/logster.rb +54 -54
  92. data/lib/logster/base_store.rb +141 -141
  93. data/lib/logster/configuration.rb +25 -25
  94. data/lib/logster/defer_logger.rb +14 -14
  95. data/lib/logster/ignore_pattern.rb +65 -65
  96. data/lib/logster/logger.rb +113 -113
  97. data/lib/logster/message.rb +212 -212
  98. data/lib/logster/middleware/debug_exceptions.rb +26 -26
  99. data/lib/logster/middleware/reporter.rb +55 -55
  100. data/lib/logster/middleware/viewer.rb +221 -221
  101. data/lib/logster/rails/railtie.rb +63 -63
  102. data/lib/logster/redis_store.rb +566 -566
  103. data/lib/logster/scheduler.rb +54 -40
  104. data/lib/logster/version.rb +3 -3
  105. data/lib/logster/web.rb +14 -14
  106. data/logster.gemspec +35 -35
  107. data/test/examples/test_sidekiq_reporter_example.rb +46 -46
  108. data/test/fake_data/Gemfile +4 -4
  109. data/test/fake_data/generate.rb +10 -10
  110. data/test/logster/middleware/test_reporter.rb +19 -19
  111. data/test/logster/middleware/test_viewer.rb +96 -96
  112. data/test/logster/test_base_store.rb +147 -147
  113. data/test/logster/test_defer_logger.rb +34 -34
  114. data/test/logster/test_ignore_pattern.rb +41 -41
  115. data/test/logster/test_logger.rb +86 -86
  116. data/test/logster/test_message.rb +119 -119
  117. data/test/logster/test_redis_rate_limiter.rb +230 -230
  118. data/test/logster/test_redis_store.rb +720 -720
  119. data/test/test_helper.rb +38 -38
  120. data/vendor/assets/javascripts/logster.js.erb +39 -39
  121. metadata +2 -2
@@ -1,45 +1,45 @@
1
- import Component from "@ember/component";
2
-
3
- let CHECKED_BOTTOM;
4
- let STICK_TO_BOTTOM;
5
-
6
- export default Component.extend({
7
- tagName: "div",
8
-
9
- classNameBindings: [
10
- "model.rowClass",
11
- ":message-row",
12
- "model.selected:selected"
13
- ],
14
-
15
- click() {
16
- this.selectedMessage(this.get("model"));
17
- },
18
-
19
- willInsertElement() {
20
- if (CHECKED_BOTTOM) {
21
- return;
22
- }
23
-
24
- const $topPanel = Em.$("#top-panel");
25
-
26
- const scrollTop = $topPanel.scrollTop();
27
- const height = $topPanel.height();
28
- const scrollHeight = $topPanel[0].scrollHeight;
29
-
30
- STICK_TO_BOTTOM = scrollHeight - 20 < height + scrollTop;
31
- CHECKED_BOTTOM = true;
32
- },
33
-
34
- didInsertElement() {
35
- const $topPanel = Em.$("#top-panel");
36
- Em.run.next(() => {
37
- CHECKED_BOTTOM = false;
38
-
39
- if (STICK_TO_BOTTOM) {
40
- STICK_TO_BOTTOM = false;
41
- $topPanel.scrollTop($topPanel[0].scrollHeight - $topPanel.height());
42
- }
43
- });
44
- }
45
- });
1
+ import Component from "@ember/component";
2
+
3
+ let CHECKED_BOTTOM;
4
+ let STICK_TO_BOTTOM;
5
+
6
+ export default Component.extend({
7
+ tagName: "div",
8
+
9
+ classNameBindings: [
10
+ "model.rowClass",
11
+ ":message-row",
12
+ "model.selected:selected"
13
+ ],
14
+
15
+ click() {
16
+ this.selectedMessage(this.get("model"));
17
+ },
18
+
19
+ willInsertElement() {
20
+ if (CHECKED_BOTTOM) {
21
+ return;
22
+ }
23
+
24
+ const $topPanel = Em.$("#top-panel");
25
+
26
+ const scrollTop = $topPanel.scrollTop();
27
+ const height = $topPanel.height();
28
+ const scrollHeight = $topPanel[0].scrollHeight;
29
+
30
+ STICK_TO_BOTTOM = scrollHeight - 20 < height + scrollTop;
31
+ CHECKED_BOTTOM = true;
32
+ },
33
+
34
+ didInsertElement() {
35
+ const $topPanel = Em.$("#top-panel");
36
+ Em.run.next(() => {
37
+ CHECKED_BOTTOM = false;
38
+
39
+ if (STICK_TO_BOTTOM) {
40
+ STICK_TO_BOTTOM = false;
41
+ $topPanel.scrollTop($topPanel[0].scrollHeight - $topPanel.height());
42
+ }
43
+ });
44
+ }
45
+ });
@@ -1,74 +1,74 @@
1
- import Component from "@ember/component";
2
- const MOVE_EVENTS = ["touchmove", "mousemove"];
3
- const UP_EVENTS = ["touchend", "mouseup"];
4
- const DOWN_EVENTS = ["touchstart", "mousedown"];
5
-
6
- export default Component.extend({
7
- classNames: ["divider"],
8
-
9
- divideView(fromTop, win) {
10
- const $win = win || Em.$(window);
11
- const height = $win.height();
12
- const fromBottom = $win.height() - fromTop;
13
-
14
- if (fromTop < 100 || fromTop + 170 > height) {
15
- return;
16
- }
17
-
18
- this.divider.css("bottom", fromBottom - 5);
19
- this.events.trigger("panelResized", fromBottom);
20
- },
21
-
22
- didInsertElement() {
23
- // inspired by http://plugins.jquery.com/misc/textarea.js
24
- this.divider = Em.$(".divider");
25
-
26
- const $win = Em.$(window);
27
- let resizing = false;
28
-
29
- const performDrag = e => {
30
- if (resizing) {
31
- this.divideView(
32
- e.clientY || (e.touches && e.touches[0] && e.touches[0].clientY),
33
- $win
34
- );
35
- }
36
- };
37
-
38
- const endDrag = () => {
39
- Em.$("#overlay").remove();
40
- resizing = false;
41
-
42
- if (localStorage) {
43
- localStorage.logster_divider_bottom = parseInt(
44
- this.divider.css("bottom"),
45
- 10
46
- );
47
- }
48
-
49
- const $document = Em.$(document);
50
- MOVE_EVENTS.forEach(e => $document.unbind(e, performDrag));
51
- UP_EVENTS.forEach(e => $document.unbind(e, endDrag));
52
- };
53
-
54
- this.divider.on(DOWN_EVENTS.join(" "), e => {
55
- e.preventDefault(); // for disabling pull-down-to-refresh on mobile
56
- Em.$("<div id='overlay'></div>").appendTo(Em.$("body"));
57
- resizing = true;
58
- Em.$(document)
59
- .on(MOVE_EVENTS.join(" "), _.throttle(performDrag, 25))
60
- .on(UP_EVENTS.join(" "), endDrag);
61
- });
62
-
63
- Em.run.next(() => {
64
- const amount =
65
- (localStorage && localStorage.logster_divider_bottom) || 300;
66
- const fromTop = $win.height() - parseInt(amount, 10);
67
- this.divideView(fromTop, $win);
68
- });
69
- },
70
-
71
- willDestroyElement() {
72
- Em.$(".divider").off(DOWN_EVENTS.join(" "));
73
- }
74
- });
1
+ import Component from "@ember/component";
2
+ const MOVE_EVENTS = ["touchmove", "mousemove"];
3
+ const UP_EVENTS = ["touchend", "mouseup"];
4
+ const DOWN_EVENTS = ["touchstart", "mousedown"];
5
+
6
+ export default Component.extend({
7
+ classNames: ["divider"],
8
+
9
+ divideView(fromTop, win) {
10
+ const $win = win || Em.$(window);
11
+ const height = $win.height();
12
+ const fromBottom = $win.height() - fromTop;
13
+
14
+ if (fromTop < 100 || fromTop + 170 > height) {
15
+ return;
16
+ }
17
+
18
+ this.divider.css("bottom", fromBottom - 5);
19
+ this.events.trigger("panelResized", fromBottom);
20
+ },
21
+
22
+ didInsertElement() {
23
+ // inspired by http://plugins.jquery.com/misc/textarea.js
24
+ this.divider = Em.$(".divider");
25
+
26
+ const $win = Em.$(window);
27
+ let resizing = false;
28
+
29
+ const performDrag = e => {
30
+ if (resizing) {
31
+ this.divideView(
32
+ e.clientY || (e.touches && e.touches[0] && e.touches[0].clientY),
33
+ $win
34
+ );
35
+ }
36
+ };
37
+
38
+ const endDrag = () => {
39
+ Em.$("#overlay").remove();
40
+ resizing = false;
41
+
42
+ if (localStorage) {
43
+ localStorage.logster_divider_bottom = parseInt(
44
+ this.divider.css("bottom"),
45
+ 10
46
+ );
47
+ }
48
+
49
+ const $document = Em.$(document);
50
+ MOVE_EVENTS.forEach(e => $document.unbind(e, performDrag));
51
+ UP_EVENTS.forEach(e => $document.unbind(e, endDrag));
52
+ };
53
+
54
+ this.divider.on(DOWN_EVENTS.join(" "), e => {
55
+ e.preventDefault(); // for disabling pull-down-to-refresh on mobile
56
+ Em.$("<div id='overlay'></div>").appendTo(Em.$("body"));
57
+ resizing = true;
58
+ Em.$(document)
59
+ .on(MOVE_EVENTS.join(" "), _.throttle(performDrag, 25))
60
+ .on(UP_EVENTS.join(" "), endDrag);
61
+ });
62
+
63
+ Em.run.next(() => {
64
+ const amount =
65
+ (localStorage && localStorage.logster_divider_bottom) || 300;
66
+ const fromTop = $win.height() - parseInt(amount, 10);
67
+ this.divideView(fromTop, $win);
68
+ });
69
+ },
70
+
71
+ willDestroyElement() {
72
+ Em.$(".divider").off(DOWN_EVENTS.join(" "));
73
+ }
74
+ });
@@ -1,27 +1,27 @@
1
- import Component from "@ember/component";
2
-
3
- export default Component.extend({
4
- classNameBindings: ["active", ":content"],
5
- isLink: false,
6
-
7
- invokeParent(name) {
8
- let current = this.get("parentView");
9
- while (current && !current[name]) {
10
- current = current.get("parentView");
11
- }
12
- if (current) {
13
- current[name](this);
14
- }
15
- },
16
-
17
- didInsertElement() {
18
- this.invokeParent("addTab");
19
- if (this.get("defaultTab")) {
20
- this.invokeParent("selectTab");
21
- }
22
- },
23
-
24
- willDestroyElement() {
25
- this.invokeParent("removeTab");
26
- }
27
- });
1
+ import Component from "@ember/component";
2
+
3
+ export default Component.extend({
4
+ classNameBindings: ["active", ":content"],
5
+ isLink: false,
6
+
7
+ invokeParent(name) {
8
+ let current = this.get("parentView");
9
+ while (current && !current[name]) {
10
+ current = current.get("parentView");
11
+ }
12
+ if (current) {
13
+ current[name](this);
14
+ }
15
+ },
16
+
17
+ didInsertElement() {
18
+ this.invokeParent("addTab");
19
+ if (this.get("defaultTab")) {
20
+ this.invokeParent("selectTab");
21
+ }
22
+ },
23
+
24
+ willDestroyElement() {
25
+ this.invokeParent("removeTab");
26
+ }
27
+ });
@@ -1,5 +1,5 @@
1
- import Component from "@ember/component";
2
-
3
- export default Component.extend({
4
- isLink: true
5
- });
1
+ import Component from "@ember/component";
2
+
3
+ export default Component.extend({
4
+ isLink: true
5
+ });
@@ -1,32 +1,32 @@
1
- import Component from "@ember/component";
2
-
3
- export default Component.extend({
4
- tabs: Em.A(),
5
- selectTab(view) {
6
- if (view.get("isLink")) {
7
- this.triggerAction(view.get("action"));
8
- return;
9
- }
10
-
11
- const selected = this.get("selected");
12
- if (selected) {
13
- selected.set("active", false);
14
- }
15
- this.set("selected", view);
16
- view.set("active", true);
17
- },
18
-
19
- addTab(tab) {
20
- this.get("tabs").addObject(tab);
21
- if (!this.get("selected") && !tab.get("isLink")) {
22
- this.selectTab(tab);
23
- }
24
- },
25
-
26
- removeTab(tab) {
27
- if (this.get("selected") === tab) {
28
- this.set("selected", null);
29
- }
30
- this.get("tabs").removeObject(tab);
31
- }
32
- });
1
+ import Component from "@ember/component";
2
+
3
+ export default Component.extend({
4
+ tabs: Em.A(),
5
+ selectTab(view) {
6
+ if (view.get("isLink")) {
7
+ this.triggerAction(view.get("action"));
8
+ return;
9
+ }
10
+
11
+ const selected = this.get("selected");
12
+ if (selected) {
13
+ selected.set("active", false);
14
+ }
15
+ this.set("selected", view);
16
+ view.set("active", true);
17
+ },
18
+
19
+ addTab(tab) {
20
+ this.get("tabs").addObject(tab);
21
+ if (!this.get("selected") && !tab.get("isLink")) {
22
+ this.selectTab(tab);
23
+ }
24
+ },
25
+
26
+ removeTab(tab) {
27
+ if (this.get("selected") === tab) {
28
+ this.set("selected", null);
29
+ }
30
+ this.get("tabs").removeObject(tab);
31
+ }
32
+ });
@@ -1,25 +1,25 @@
1
- import Component from "@ember/component";
2
- import { formatTime } from "client-app/lib/utilities";
3
- import { computed } from "@ember/object";
4
-
5
- export default Component.extend({
6
- tagName: "span",
7
- classNames: "auto-update-time",
8
- attributeBindings: ["dataTimestamp:data-timestamp", "title"],
9
-
10
- title: computed(function() {
11
- return this.get("moment").format();
12
- }),
13
-
14
- dataTimestamp: computed(function() {
15
- return this.get("timestamp");
16
- }),
17
-
18
- moment: computed(function() {
19
- return moment(this.get("timestamp"));
20
- }),
21
-
22
- time: computed("timestamp", function() {
23
- return formatTime(this.get("timestamp"));
24
- })
25
- });
1
+ import Component from "@ember/component";
2
+ import { formatTime } from "client-app/lib/utilities";
3
+ import { computed } from "@ember/object";
4
+
5
+ export default Component.extend({
6
+ tagName: "span",
7
+ classNames: "auto-update-time",
8
+ attributeBindings: ["dataTimestamp:data-timestamp", "title"],
9
+
10
+ title: computed(function() {
11
+ return this.get("moment").format();
12
+ }),
13
+
14
+ dataTimestamp: computed(function() {
15
+ return this.get("timestamp");
16
+ }),
17
+
18
+ moment: computed(function() {
19
+ return moment(this.get("timestamp"));
20
+ }),
21
+
22
+ time: computed("timestamp", function() {
23
+ return formatTime(this.get("timestamp"));
24
+ })
25
+ });
@@ -1,21 +1,21 @@
1
- import Component from "@ember/component";
2
- import { formatTime } from "client-app/lib/utilities";
3
-
4
- export default Component.extend({
5
- didInsertElement() {
6
- const updateTimes = () => {
7
- Em.$(".auto-update-time").each(function() {
8
- const timestamp = parseInt(this.getAttribute("data-timestamp"), 10);
9
- const elem = this;
10
- const text = formatTime(timestamp);
11
-
12
- if (text !== elem.innerText) {
13
- elem.innerText = text;
14
- }
15
- });
16
- Em.run.later(updateTimes, 60000);
17
- };
18
-
19
- Em.run.later(updateTimes, 60000);
20
- }
21
- });
1
+ import Component from "@ember/component";
2
+ import { formatTime } from "client-app/lib/utilities";
3
+
4
+ export default Component.extend({
5
+ didInsertElement() {
6
+ const updateTimes = () => {
7
+ Em.$(".auto-update-time").each(function() {
8
+ const timestamp = parseInt(this.getAttribute("data-timestamp"), 10);
9
+ const elem = this;
10
+ const text = formatTime(timestamp);
11
+
12
+ if (text !== elem.innerText) {
13
+ elem.innerText = text;
14
+ }
15
+ });
16
+ Em.run.later(updateTimes, 60000);
17
+ };
18
+
19
+ Em.run.later(updateTimes, 60000);
20
+ }
21
+ });