logster 1.3.0 → 1.3.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 (112) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +18 -18
  3. data/.travis.yml +15 -15
  4. data/CHANGELOG.md +137 -130
  5. data/Gemfile +4 -4
  6. data/Guardfile +8 -8
  7. data/LICENSE.txt +22 -22
  8. data/README.md +99 -99
  9. data/Rakefile +24 -24
  10. data/assets/fonts/FontAwesome.otf +0 -0
  11. data/assets/fonts/fontawesome-webfont.eot +0 -0
  12. data/assets/fonts/fontawesome-webfont.svg +639 -639
  13. data/assets/fonts/fontawesome-webfont.ttf +0 -0
  14. data/assets/fonts/fontawesome-webfont.woff +0 -0
  15. data/assets/fonts/fontawesome-webfont.woff2 +0 -0
  16. data/assets/images/Icon-144_rounded.png +0 -0
  17. data/assets/images/Icon-144_square.png +0 -0
  18. data/assets/images/icon_144x144.png +0 -0
  19. data/assets/images/icon_64x64.png +0 -0
  20. data/assets/javascript/client-app.js +81 -81
  21. data/assets/javascript/vendor.js +5302 -5302
  22. data/assets/stylesheets/client-app.css +0 -0
  23. data/assets/stylesheets/vendor.css +3 -3
  24. data/build_client_app.sh +12 -12
  25. data/client-app/.editorconfig +20 -20
  26. data/client-app/.ember-cli +9 -9
  27. data/client-app/.eslintignore +19 -19
  28. data/client-app/.eslintrc.js +46 -46
  29. data/client-app/.gitignore +23 -23
  30. data/client-app/.travis.yml +27 -27
  31. data/client-app/.watchmanconfig +3 -3
  32. data/client-app/README.md +57 -57
  33. data/client-app/app/app.js +14 -14
  34. data/client-app/app/components/message-info.js +18 -18
  35. data/client-app/app/components/message-row.js +45 -45
  36. data/client-app/app/components/panel-resizer.js +75 -75
  37. data/client-app/app/components/tab-contents.js +27 -27
  38. data/client-app/app/components/tab-link.js +5 -5
  39. data/client-app/app/components/tabbed-section.js +32 -32
  40. data/client-app/app/components/time-formatter.js +25 -25
  41. data/client-app/app/components/update-time.js +21 -21
  42. data/client-app/app/controllers/index.js +83 -83
  43. data/client-app/app/controllers/show.js +13 -13
  44. data/client-app/app/index.html +29 -29
  45. data/client-app/app/initializers/app-init.js +55 -55
  46. data/client-app/app/lib/preload.js +14 -14
  47. data/client-app/app/lib/utilities.js +140 -140
  48. data/client-app/app/models/message-collection.js +158 -158
  49. data/client-app/app/models/message.js +99 -99
  50. data/client-app/app/resolver.js +3 -3
  51. data/client-app/app/router.js +14 -14
  52. data/client-app/app/routes/index.js +53 -53
  53. data/client-app/app/routes/show.js +14 -14
  54. data/client-app/app/styles/app.css +387 -387
  55. data/client-app/app/templates/application.hbs +2 -2
  56. data/client-app/app/templates/components/message-info.hbs +44 -44
  57. data/client-app/app/templates/components/message-row.hbs +17 -17
  58. data/client-app/app/templates/components/tabbed-section.hbs +10 -10
  59. data/client-app/app/templates/components/time-formatter.hbs +1 -1
  60. data/client-app/app/templates/index.hbs +57 -57
  61. data/client-app/app/templates/show.hbs +4 -4
  62. data/client-app/config/environment.js +51 -51
  63. data/client-app/config/optional-features.json +3 -3
  64. data/client-app/config/targets.js +18 -18
  65. data/client-app/ember-cli-build.js +29 -29
  66. data/client-app/package-lock.json +11365 -11365
  67. data/client-app/package.json +56 -56
  68. data/client-app/testem.js +25 -25
  69. data/client-app/tests/index.html +34 -34
  70. data/client-app/tests/integration/components/message-info-test.js +26 -26
  71. data/client-app/tests/integration/components/message-row-test.js +26 -26
  72. data/client-app/tests/integration/components/panel-resizer-test.js +26 -26
  73. data/client-app/tests/integration/components/tab-contents-test.js +26 -26
  74. data/client-app/tests/integration/components/tab-link-test.js +26 -26
  75. data/client-app/tests/integration/components/tabbed-section-test.js +26 -26
  76. data/client-app/tests/integration/components/time-formatter-test.js +26 -26
  77. data/client-app/tests/integration/components/update-time-test.js +26 -26
  78. data/client-app/tests/test-helper.js +8 -8
  79. data/client-app/tests/unit/controllers/index-test.js +12 -12
  80. data/client-app/tests/unit/controllers/show-test.js +12 -12
  81. data/client-app/tests/unit/initializers/app-init-test.js +31 -31
  82. data/client-app/tests/unit/routes/index-test.js +11 -11
  83. data/client-app/tests/unit/routes/show-test.js +11 -11
  84. data/lib/examples/sidekiq_logster_reporter.rb +21 -21
  85. data/lib/logster.rb +54 -54
  86. data/lib/logster/base_store.rb +130 -130
  87. data/lib/logster/configuration.rb +25 -25
  88. data/lib/logster/ignore_pattern.rb +65 -65
  89. data/lib/logster/logger.rb +108 -102
  90. data/lib/logster/message.rb +227 -227
  91. data/lib/logster/middleware/debug_exceptions.rb +26 -26
  92. data/lib/logster/middleware/reporter.rb +56 -56
  93. data/lib/logster/middleware/viewer.rb +220 -220
  94. data/lib/logster/rails/railtie.rb +58 -58
  95. data/lib/logster/redis_store.rb +481 -481
  96. data/lib/logster/version.rb +3 -3
  97. data/lib/logster/web.rb +14 -14
  98. data/logster.gemspec +34 -34
  99. data/test/examples/test_sidekiq_reporter_example.rb +46 -46
  100. data/test/fake_data/Gemfile +4 -4
  101. data/test/fake_data/generate.rb +10 -10
  102. data/test/logster/middleware/test_reporter.rb +21 -21
  103. data/test/logster/middleware/test_viewer.rb +96 -96
  104. data/test/logster/test_base_store.rb +147 -147
  105. data/test/logster/test_ignore_pattern.rb +41 -41
  106. data/test/logster/test_logger.rb +80 -74
  107. data/test/logster/test_message.rb +34 -34
  108. data/test/logster/test_redis_rate_limiter.rb +230 -230
  109. data/test/logster/test_redis_store.rb +427 -427
  110. data/test/test_helper.rb +38 -38
  111. data/vendor/assets/javascripts/logster.js.erb +39 -39
  112. metadata +3 -3
@@ -1,14 +1,14 @@
1
- import Application from '@ember/application';
2
- import Resolver from './resolver';
3
- import loadInitializers from 'ember-load-initializers';
4
- import config from './config/environment';
5
-
6
- const App = Application.extend({
7
- modulePrefix: config.modulePrefix,
8
- podModulePrefix: config.podModulePrefix,
9
- Resolver
10
- });
11
-
12
- loadInitializers(App, config.modulePrefix);
13
-
14
- export default App;
1
+ import Application from '@ember/application';
2
+ import Resolver from './resolver';
3
+ import loadInitializers from 'ember-load-initializers';
4
+ import config from './config/environment';
5
+
6
+ const App = Application.extend({
7
+ modulePrefix: config.modulePrefix,
8
+ podModulePrefix: config.podModulePrefix,
9
+ Resolver
10
+ });
11
+
12
+ loadInitializers(App, config.modulePrefix);
13
+
14
+ export default App;
@@ -1,18 +1,18 @@
1
- import Component from "@ember/component";
2
-
3
- export default Component.extend({
4
- actions: {
5
- protect() {
6
- this.get("currentMessage").protect();
7
- },
8
- unprotect() {
9
- this.get("currentMessage").unprotect();
10
- },
11
- remove() {
12
- this.removeMessage(this.get("currentMessage"));
13
- },
14
- solve() {
15
- this.solveMessage(this.get("currentMessage"));
16
- }
17
- }
18
- });
1
+ import Component from "@ember/component";
2
+
3
+ export default Component.extend({
4
+ actions: {
5
+ protect() {
6
+ this.get("currentMessage").protect();
7
+ },
8
+ unprotect() {
9
+ this.get("currentMessage").unprotect();
10
+ },
11
+ remove() {
12
+ this.removeMessage(this.get("currentMessage"));
13
+ },
14
+ solve() {
15
+ this.solveMessage(this.get("currentMessage"));
16
+ }
17
+ }
18
+ });
@@ -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: "tr",
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: function() {
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: "tr",
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: function() {
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,75 +1,75 @@
1
- import Component from "@ember/component";
2
-
3
- export default Component.extend({
4
- classNames: ["divider"],
5
-
6
- divideView(fromTop, win) {
7
- const $win = win || Em.$(window);
8
- const height = $win.height();
9
- const fromBottom = $win.height() - fromTop;
10
-
11
- if (fromTop < 100 || fromTop + 100 > height) {
12
- return;
13
- }
14
-
15
- this.topPanel.css("bottom", fromBottom + 5);
16
- this.bottomPanel.css("height", fromBottom - 15);
17
- this.divider.css("bottom", fromBottom - 5);
18
- },
19
-
20
- didInsertElement() {
21
- // inspired by http://plugins.jquery.com/misc/textarea.js
22
- this.topPanel = Em.$("#top-panel");
23
- this.divider = Em.$(".divider");
24
- this.bottomPanel = Em.$("#bottom-panel");
25
-
26
- const $win = Em.$(window);
27
- let resizing = false;
28
-
29
- const performDrag = e => {
30
- if (resizing) {
31
- this.divideView(e.clientY, $win);
32
- }
33
- };
34
-
35
- const endDrag = () => {
36
- Em.$("#overlay").remove();
37
- resizing = false;
38
-
39
- if (localStorage) {
40
- localStorage.logster_divider_bottom = parseInt(
41
- this.divider.css("bottom"),
42
- 10
43
- );
44
- }
45
-
46
- Em.$(document)
47
- .unbind("mousemove", performDrag)
48
- .unbind("mouseup", endDrag);
49
- };
50
-
51
- this.divider
52
- .on("mousedown", () => {
53
- Em.$("<div id='overlay'></div>").appendTo(Em.$("body"));
54
- resizing = true;
55
- Em.$(document)
56
- .mousemove(_.throttle(performDrag, 25))
57
- .mouseup(endDrag);
58
- })
59
- .append(
60
- "<div class='line-1'></div><div class='line-2'></div><div class='line-3'></div>"
61
- );
62
-
63
- Em.run.next(() => {
64
- if (localStorage && localStorage.logster_divider_bottom) {
65
- const fromTop =
66
- $win.height() - parseInt(localStorage.logster_divider_bottom, 10);
67
- this.divideView(fromTop, $win);
68
- }
69
- });
70
- },
71
-
72
- willDestroyElement() {
73
- Em.$(".divider").off("mousedown");
74
- }
75
- });
1
+ import Component from "@ember/component";
2
+
3
+ export default Component.extend({
4
+ classNames: ["divider"],
5
+
6
+ divideView(fromTop, win) {
7
+ const $win = win || Em.$(window);
8
+ const height = $win.height();
9
+ const fromBottom = $win.height() - fromTop;
10
+
11
+ if (fromTop < 100 || fromTop + 100 > height) {
12
+ return;
13
+ }
14
+
15
+ this.topPanel.css("bottom", fromBottom + 5);
16
+ this.bottomPanel.css("height", fromBottom - 15);
17
+ this.divider.css("bottom", fromBottom - 5);
18
+ },
19
+
20
+ didInsertElement() {
21
+ // inspired by http://plugins.jquery.com/misc/textarea.js
22
+ this.topPanel = Em.$("#top-panel");
23
+ this.divider = Em.$(".divider");
24
+ this.bottomPanel = Em.$("#bottom-panel");
25
+
26
+ const $win = Em.$(window);
27
+ let resizing = false;
28
+
29
+ const performDrag = e => {
30
+ if (resizing) {
31
+ this.divideView(e.clientY, $win);
32
+ }
33
+ };
34
+
35
+ const endDrag = () => {
36
+ Em.$("#overlay").remove();
37
+ resizing = false;
38
+
39
+ if (localStorage) {
40
+ localStorage.logster_divider_bottom = parseInt(
41
+ this.divider.css("bottom"),
42
+ 10
43
+ );
44
+ }
45
+
46
+ Em.$(document)
47
+ .unbind("mousemove", performDrag)
48
+ .unbind("mouseup", endDrag);
49
+ };
50
+
51
+ this.divider
52
+ .on("mousedown", () => {
53
+ Em.$("<div id='overlay'></div>").appendTo(Em.$("body"));
54
+ resizing = true;
55
+ Em.$(document)
56
+ .mousemove(_.throttle(performDrag, 25))
57
+ .mouseup(endDrag);
58
+ })
59
+ .append(
60
+ "<div class='line-1'></div><div class='line-2'></div><div class='line-3'></div>"
61
+ );
62
+
63
+ Em.run.next(() => {
64
+ if (localStorage && localStorage.logster_divider_bottom) {
65
+ const fromTop =
66
+ $win.height() - parseInt(localStorage.logster_divider_bottom, 10);
67
+ this.divideView(fromTop, $win);
68
+ }
69
+ });
70
+ },
71
+
72
+ willDestroyElement() {
73
+ Em.$(".divider").off("mousedown");
74
+ }
75
+ });
@@ -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
+ });