logster 2.1.0 → 2.1.1

Sign up to get free protection for your applications and to get access to all the features.
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
+ });