logster 1.3.0 → 1.3.1

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