rails_mini_profiler 0.4.0 → 0.7.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 (101) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +48 -34
  3. data/app/adapters/rails_mini_profiler/database_adapter.rb +16 -0
  4. data/app/controllers/rails_mini_profiler/application_controller.rb +9 -15
  5. data/app/controllers/rails_mini_profiler/profiled_requests_controller.rb +44 -14
  6. data/app/helpers/rails_mini_profiler/application_helper.rb +1 -1
  7. data/app/helpers/rails_mini_profiler/profiled_requests_helper.rb +10 -0
  8. data/app/javascript/images/check.svg +3 -0
  9. data/app/javascript/images/chevron.svg +3 -0
  10. data/app/javascript/images/copy.svg +6 -0
  11. data/app/javascript/images/filter.svg +1 -0
  12. data/app/javascript/images/logo_variant.svg +2 -2
  13. data/app/javascript/images/search.svg +4 -5
  14. data/app/javascript/js/checklist_controller.js +48 -0
  15. data/app/javascript/js/clipboard_controller.js +53 -0
  16. data/app/javascript/js/enable_controller.js +23 -0
  17. data/app/javascript/js/filter_controller.js +48 -0
  18. data/app/javascript/js/search_controller.js +18 -0
  19. data/app/javascript/js/select_controller.js +52 -0
  20. data/app/javascript/packs/rails-mini-profiler.js +69 -53
  21. data/app/javascript/stylesheets/components/buttons.scss +59 -0
  22. data/app/javascript/stylesheets/components/dropdown.scss +103 -0
  23. data/app/javascript/stylesheets/components/input.scss +10 -0
  24. data/app/javascript/stylesheets/{navbar.scss → components/navbar.scss} +7 -13
  25. data/app/javascript/stylesheets/components/page_header.scss +7 -0
  26. data/app/javascript/stylesheets/components/pagination.scss +14 -13
  27. data/app/javascript/stylesheets/components/placeholder.scss +36 -0
  28. data/app/javascript/stylesheets/components/profiled_request_table.scss +55 -0
  29. data/app/javascript/stylesheets/components/trace.scss +93 -0
  30. data/app/javascript/stylesheets/flamegraph.scss +3 -2
  31. data/app/javascript/stylesheets/flashes.scss +3 -5
  32. data/app/javascript/stylesheets/profiled_requests.scss +12 -161
  33. data/app/javascript/stylesheets/rails-mini-profiler.scss +81 -66
  34. data/app/javascript/stylesheets/traces.scss +52 -56
  35. data/app/models/rails_mini_profiler/profiled_request.rb +1 -1
  36. data/app/models/rails_mini_profiler/trace.rb +0 -15
  37. data/app/presenters/rails_mini_profiler/controller_trace_presenter.rb +10 -2
  38. data/app/presenters/rails_mini_profiler/instantiation_trace_presenter.rb +15 -3
  39. data/app/presenters/rails_mini_profiler/profiled_request_presenter.rb +10 -17
  40. data/app/presenters/rails_mini_profiler/render_partial_trace_presenter.rb +6 -2
  41. data/app/presenters/rails_mini_profiler/render_template_trace_presenter.rb +6 -2
  42. data/app/presenters/rails_mini_profiler/sequel_trace_presenter.rb +16 -4
  43. data/app/presenters/rails_mini_profiler/trace_presenter.rb +10 -8
  44. data/app/search/rails_mini_profiler/base_search.rb +67 -0
  45. data/app/search/rails_mini_profiler/profiled_request_search.rb +33 -0
  46. data/app/search/rails_mini_profiler/trace_search.rb +27 -0
  47. data/app/views/rails_mini_profiler/badge.html.erb +2 -2
  48. data/app/views/rails_mini_profiler/profiled_requests/index.html.erb +8 -58
  49. data/app/views/rails_mini_profiler/profiled_requests/shared/header/_header.erb +19 -0
  50. data/app/views/rails_mini_profiler/profiled_requests/shared/table/_placeholder.erb +12 -0
  51. data/app/views/rails_mini_profiler/profiled_requests/shared/table/_table.erb +14 -0
  52. data/app/views/rails_mini_profiler/profiled_requests/shared/table/_table_head.erb +125 -0
  53. data/app/views/rails_mini_profiler/profiled_requests/shared/table/_table_row.erb +21 -0
  54. data/app/views/rails_mini_profiler/profiled_requests/{shared → show}/_trace.html.erb +24 -7
  55. data/app/views/rails_mini_profiler/profiled_requests/show/_trace_list.erb +12 -0
  56. data/app/views/rails_mini_profiler/profiled_requests/show/_trace_list_header.erb +87 -0
  57. data/app/views/rails_mini_profiler/profiled_requests/show/_trace_list_placeholder.erb +12 -0
  58. data/app/views/rails_mini_profiler/profiled_requests/show.html.erb +5 -18
  59. data/app/views/rails_mini_profiler/shared/_head.erb +1 -1
  60. data/lib/generators/rails_mini_profiler/templates/rails_mini_profiler.rb.erb +2 -0
  61. data/lib/rails_mini_profiler/badge.rb +21 -12
  62. data/lib/rails_mini_profiler/configuration/user_interface.rb +31 -1
  63. data/lib/rails_mini_profiler/configuration.rb +7 -0
  64. data/lib/rails_mini_profiler/engine.rb +12 -8
  65. data/lib/rails_mini_profiler/flamegraph_guard.rb +10 -6
  66. data/lib/rails_mini_profiler/guard.rb +19 -1
  67. data/lib/rails_mini_profiler/middleware.rb +12 -10
  68. data/lib/rails_mini_profiler/request_context.rb +22 -18
  69. data/lib/rails_mini_profiler/request_wrapper.rb +12 -55
  70. data/lib/rails_mini_profiler/response_wrapper.rb +21 -17
  71. data/lib/rails_mini_profiler/tracers/controller_tracer.rb +29 -0
  72. data/lib/rails_mini_profiler/tracers/instantiation_tracer.rb +17 -0
  73. data/lib/rails_mini_profiler/tracers/null_trace.rb +7 -0
  74. data/lib/rails_mini_profiler/tracers/registry.rb +76 -0
  75. data/lib/rails_mini_profiler/tracers/rmp_tracer.rb +17 -0
  76. data/lib/rails_mini_profiler/tracers/sequel_tracer.rb +51 -0
  77. data/lib/rails_mini_profiler/tracers/sequel_tracker.rb +40 -0
  78. data/lib/rails_mini_profiler/tracers/subscriptions.rb +28 -0
  79. data/lib/rails_mini_profiler/{models → tracers}/trace.rb +11 -3
  80. data/lib/rails_mini_profiler/tracers/trace_factory.rb +27 -0
  81. data/lib/rails_mini_profiler/tracers/tracer.rb +45 -0
  82. data/lib/rails_mini_profiler/tracers/view_tracer.rb +29 -0
  83. data/lib/rails_mini_profiler/tracers.rb +12 -83
  84. data/lib/rails_mini_profiler/user.rb +1 -1
  85. data/lib/rails_mini_profiler/version.rb +1 -1
  86. data/lib/rails_mini_profiler.rb +4 -8
  87. data/vendor/assets/images/check.svg +3 -0
  88. data/vendor/assets/images/chevron.svg +3 -0
  89. data/vendor/assets/images/copy.svg +6 -0
  90. data/vendor/assets/images/filter.svg +1 -0
  91. data/vendor/assets/images/logo_variant.svg +2 -2
  92. data/vendor/assets/images/search.svg +4 -5
  93. data/vendor/assets/javascripts/rails-mini-profiler.css +1 -1
  94. data/vendor/assets/javascripts/rails-mini-profiler.js +1 -1
  95. metadata +58 -13
  96. data/app/models/rails_mini_profiler/controller_trace.rb +0 -37
  97. data/app/models/rails_mini_profiler/instantiation_trace.rb +0 -37
  98. data/app/models/rails_mini_profiler/render_partial_trace.rb +0 -37
  99. data/app/models/rails_mini_profiler/render_template_trace.rb +0 -37
  100. data/app/models/rails_mini_profiler/rmp_trace.rb +0 -35
  101. data/app/models/rails_mini_profiler/sequel_trace.rb +0 -37
@@ -0,0 +1,52 @@
1
+ import { Controller } from "@hotwired/stimulus";
2
+
3
+ export default class extends Controller {
4
+ static targets = ["all", "selectable"];
5
+
6
+ selectAll(event) {
7
+ const checked = event.target.checked;
8
+ this.allTarget.indeterminate = false;
9
+ this._setAllCheckboxes(checked);
10
+ this._dispatch("change", { count: this.selectedCount });
11
+ }
12
+
13
+ onSelected() {
14
+ this.allTarget.indeterminate = !!this._indeterminate;
15
+ this._dispatch("change", { count: this.selectedCount });
16
+ }
17
+
18
+ get selectedCount() {
19
+ return this.selected.length;
20
+ }
21
+
22
+ get selected() {
23
+ return this.selectables.filter((c) => c.checked);
24
+ }
25
+
26
+ get selectables() {
27
+ return new Array(...this.selectableTargets);
28
+ }
29
+
30
+ _setAllCheckboxes(checked) {
31
+ this.selectables.forEach((el) => {
32
+ const checkbox = el;
33
+
34
+ if (!checkbox.disabled) {
35
+ checkbox.checked = checked;
36
+ }
37
+ });
38
+ }
39
+
40
+ get _indeterminate() {
41
+ return (
42
+ this.selected.length !== this.selectableTargets.length &&
43
+ this.selected.length > 0
44
+ );
45
+ }
46
+
47
+ _dispatch(name, detail) {
48
+ window.dispatchEvent(
49
+ new CustomEvent(`rmp:select:${name}`, { bubbles: true, detail })
50
+ );
51
+ }
52
+ }
@@ -1,80 +1,96 @@
1
- import '../stylesheets/rails-mini-profiler.scss'
1
+ import "../stylesheets/rails-mini-profiler.scss";
2
2
 
3
- import tippy from 'tippy.js'
4
- import 'tippy.js/dist/tippy.css'
3
+ import tippy from "tippy.js";
4
+ import "tippy.js/dist/tippy.css";
5
5
 
6
- function setupRequestSearch() {
7
- const profiledRequestNameSearch = document.getElementById('profiled-request-search')
8
- if (profiledRequestNameSearch) {
9
- profiledRequestNameSearch.addEventListener('keyup', function (event) {
10
- if (event.key === 'Enter') {
11
- event.preventDefault()
12
- document.getElementById('profiled-request-search-form').submit()
13
- }
14
- })
15
- }
16
- }
6
+ import { Application } from "@hotwired/stimulus";
7
+ import { Dropdown } from "tailwindcss-stimulus-components";
8
+ import Checklist from "../js/checklist_controller";
9
+ import Selectable from "../js/select_controller";
10
+ import Filter from "../js/filter_controller";
11
+ import Search from "../js/search_controller";
12
+ import Enable from "../js/enable_controller";
13
+ import Clipboard from "../js/clipboard_controller";
14
+
15
+ const application = Application.start();
16
+
17
+ application.register("dropdown", Dropdown);
18
+ application.register("checklist", Checklist);
19
+ application.register("selectable", Selectable);
20
+ application.register("filters", Filter);
21
+ application.register("search", Search);
22
+ application.register("enable", Enable);
23
+ application.register("clipboard", Clipboard);
17
24
 
18
25
  function setupTraceSearch() {
19
- const traceNameSearch = document.getElementById('trace-search')
26
+ const traceNameSearch = document.getElementById("trace-search");
20
27
  if (traceNameSearch) {
21
- traceNameSearch.addEventListener('keyup', function (event) {
22
- if (event.key === 'Enter') {
23
- event.preventDefault()
24
- document.getElementById('trace-form').submit()
28
+ traceNameSearch.addEventListener("keyup", function (event) {
29
+ if (event.key === "Enter") {
30
+ event.preventDefault();
31
+ document.getElementById("trace-form").submit();
25
32
  }
26
- })
33
+ });
27
34
  }
28
35
  }
29
36
 
30
37
  function setupRequestTable() {
31
- const profiledRequestTable = document.getElementById('profiled-requests-table');
38
+ const profiledRequestTable = document.getElementById(
39
+ "profiled-requests-table"
40
+ );
32
41
  if (profiledRequestTable) {
33
- const rows = profiledRequestTable.getElementsByTagName('tr')
34
- for (let i = 0; i < rows.length; i++) {
35
- const currentRow = profiledRequestTable.rows[i]
36
- const link = currentRow.dataset.link
42
+ const rows = profiledRequestTable.rows;
43
+ for (let i = 1; i < rows.length; i++) {
44
+ const currentRow = profiledRequestTable.rows[i];
45
+ const link = currentRow.dataset.link;
37
46
  const createClickHandler = function () {
38
47
  return function () {
39
- window.location.href = link
40
- }
48
+ window.location.href = link;
49
+ };
50
+ };
51
+ if (link) {
52
+ currentRow.onclick = createClickHandler(currentRow);
41
53
  }
42
- currentRow.onclick = createClickHandler(currentRow)
43
54
  }
44
55
  }
45
56
  }
46
57
 
47
- function setupTraceBars () {
48
- const traceBars = document.querySelectorAll('.trace-bar')
58
+ function setupTraceBars() {
59
+ const traceBars = document.querySelectorAll(".trace-bar");
49
60
  traceBars.forEach((bar) => {
50
- const popover = bar.children[0]
61
+ const popover = bar.children[0];
51
62
  tippy(bar, {
52
- trigger: 'click',
63
+ trigger: "click",
53
64
  content: popover,
54
- theme: 'rmp',
55
- maxWidth: '700px',
56
- placement: 'bottom',
65
+ theme: "rmp",
66
+ maxWidth: "700px",
67
+ placement: "bottom",
57
68
  interactive: true,
58
- onShow (instance) {
59
- instance.popper.querySelector('.popover-close').addEventListener('click', () => {
60
- instance.hide()
61
- })
69
+ onShow(instance) {
70
+ instance.popper
71
+ .querySelector(".popover-close")
72
+ .addEventListener("click", () => {
73
+ instance.hide();
74
+ });
62
75
  },
63
- onHide (instance) {
64
- instance.popper.querySelector('.popover-close').removeEventListener('click', () => {
65
- instance.hide()
66
- })
76
+ onHide(instance) {
77
+ instance.popper
78
+ .querySelector(".popover-close")
79
+ .removeEventListener("click", () => {
80
+ instance.hide();
81
+ });
67
82
  },
68
- })
69
- })
83
+ });
84
+ });
70
85
  }
71
86
 
72
-
73
87
  // Trace Bar Popovers
74
- document.addEventListener('DOMContentLoaded', () => {
75
- setupRequestTable();
76
- setupRequestSearch();
77
- setupTraceBars();
78
- setupTraceSearch();
79
- }, false)
80
-
88
+ document.addEventListener(
89
+ "DOMContentLoaded",
90
+ () => {
91
+ setupRequestTable();
92
+ setupTraceBars();
93
+ setupTraceSearch();
94
+ },
95
+ false
96
+ );
@@ -0,0 +1,59 @@
1
+ button,
2
+ .button {
3
+ display: inline-block;
4
+ padding: 0.5em 0.5em;
5
+ border: none;
6
+ border-radius: 5px;
7
+ cursor: pointer;
8
+ font-size: 1rem;
9
+ text-align: center;
10
+ text-decoration: none;
11
+
12
+ &:disabled {
13
+ background: var(--grey-200);
14
+ cursor: not-allowed;
15
+ }
16
+ }
17
+
18
+ .btn-red {
19
+ background: var(--red-500);
20
+ color: white;
21
+ font-weight: 600;
22
+ outline: none;
23
+
24
+ &:hover {
25
+ background: var(--red-600);
26
+ }
27
+ }
28
+
29
+ .btn-grey {
30
+ background: var(--grey-200);
31
+
32
+ &:hover {
33
+ background: var(--grey-100);
34
+ }
35
+ }
36
+
37
+ .btn-white {
38
+ border: 1px solid var(--grey-200);
39
+ background: white;
40
+
41
+ &:hover {
42
+ background: var(--grey-100);
43
+ }
44
+ }
45
+
46
+ button:hover {
47
+ box-shadow: 0 0.25rem 0.25rem 0 var(--grey-50);
48
+ }
49
+
50
+ button.none {
51
+ padding: 0;
52
+ border: none;
53
+ background: none;
54
+ outline: none;
55
+
56
+ &:hover {
57
+ box-shadow: none;
58
+ }
59
+ }
@@ -0,0 +1,103 @@
1
+ .dropdown-body {
2
+ padding: 0.33rem 0.5rem;
3
+ }
4
+
5
+ .dropdown-search-field {
6
+ padding: 0.5rem 0.5rem;
7
+ border: 1px solid var(--grey-400);
8
+ border-radius: 5px;
9
+ color: var(--grey-700);
10
+ }
11
+
12
+ .dropdown-toggle {
13
+ display: flex;
14
+ align-items: center;
15
+ color: inherit;
16
+
17
+ &:hover {
18
+ color: var(--grey-900);
19
+ }
20
+ }
21
+
22
+ .dropdown-container {
23
+ position: absolute;
24
+ z-index: 1;
25
+ display: flex;
26
+ overflow: hidden;
27
+ min-width: 240px;
28
+ box-sizing: border-box;
29
+ flex-direction: column;
30
+ border: 1px solid var(--grey-200);
31
+ margin-top: 0.3em;
32
+ background: white;
33
+ border-radius: 5px;
34
+ box-shadow: 0 8px 30px rgba(0, 0, 0, 0.12);
35
+ color: var(--grey-400);
36
+ cursor: default;
37
+ }
38
+
39
+ .dropdown-search {
40
+ display: flex;
41
+ flex-direction: column;
42
+ }
43
+
44
+ .dropdown-search button {
45
+ display: flex;
46
+ flex-direction: column;
47
+ }
48
+
49
+ .dropdown-entry {
50
+ display: flex;
51
+ padding: 0.33rem 1rem;
52
+ text-decoration: none;
53
+
54
+ &:hover {
55
+ background: var(--grey-100);
56
+ color: var(--grey-900);
57
+ }
58
+ }
59
+
60
+ .dropdown-entry input {
61
+ margin-right: 0.5em;
62
+ }
63
+
64
+ .dropdown-header {
65
+ display: flex;
66
+ align-items: center;
67
+ justify-content: space-between;
68
+ padding: 0.5rem 1rem;
69
+ border-bottom: 1px solid var(--grey-200);
70
+ background: var(--grey-100);
71
+ font-size: 0.833rem;
72
+ text-align: left;
73
+ }
74
+
75
+ .dropdown-header button {
76
+ padding: 0;
77
+ border: none;
78
+ background: none;
79
+ color: var(--grey-500);
80
+ font-size: 0.833rem;
81
+ outline: none;
82
+ text-decoration: underline;
83
+
84
+ &:hover {
85
+ box-shadow: none;
86
+ color: var(--grey-900);
87
+ }
88
+ }
89
+
90
+ .dropdown-footer {
91
+ width: 100%;
92
+ padding: 0.5rem;
93
+ border: none;
94
+ background: var(--red-500);
95
+ border-radius: 0;
96
+ color: white;
97
+ font-weight: 600;
98
+ outline: none;
99
+
100
+ &:hover {
101
+ background: var(--red-600);
102
+ }
103
+ }
@@ -0,0 +1,10 @@
1
+ input[type=submit] {
2
+ display: inline-block;
3
+ padding: 0.5em 0.5em;
4
+ border: none;
5
+ border-radius: 5px;
6
+ cursor: pointer;
7
+ font-size: 1rem;
8
+ text-align: center;
9
+ text-decoration: none;
10
+ }
@@ -1,13 +1,10 @@
1
1
  .header {
2
- margin: 0;
3
- padding: 1.5rem 0;
4
-
5
2
  display: flex;
6
3
  justify-content: center;
7
-
8
- box-shadow: 0 0 20px 0 rgba(0, 0, 0, .2);
9
-
4
+ padding: 1.5rem 0;
5
+ margin: 0;
10
6
  background: var(--primary);
7
+ box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.2);
11
8
  }
12
9
 
13
10
  .header a {
@@ -16,16 +13,14 @@
16
13
  }
17
14
 
18
15
  .nav {
19
- width: var(--main-width);
20
-
21
16
  display: flex;
17
+ width: var(--main-width);
22
18
  justify-content: space-between;
23
19
  }
24
20
 
25
21
  .home {
26
22
  display: flex;
27
23
  align-items: center;
28
-
29
24
  text-decoration: none;
30
25
  }
31
26
 
@@ -40,11 +35,10 @@
40
35
  }
41
36
 
42
37
  .header-links {
43
- margin: 0;
44
- padding: 0;
45
- list-style: none;
46
38
  display: flex;
47
39
  align-items: center;
48
-
40
+ padding: 0;
41
+ margin: 0;
49
42
  font-weight: 700;
43
+ list-style: none;
50
44
  }
@@ -0,0 +1,7 @@
1
+ .page-header {
2
+ padding: 2.5rem 0 2.5rem;
3
+ }
4
+
5
+ .page-header h1 {
6
+ font-size: 28px;
7
+ }
@@ -9,18 +9,12 @@
9
9
  .pagy-nav > .page.active,
10
10
  .pagy-nav > .page > a {
11
11
  padding: 0.5rem 1rem;
12
-
13
- color: var(--grey-900);
14
-
15
- background: white;
16
12
  border: 1px solid var(--border-color);
17
13
  border-right: none;
18
- text-decoration: none;
14
+ background: white;
15
+ color: var(--grey-900);
19
16
  cursor: pointer;
20
-
21
- &:hover {
22
- background: var(--grey-100);
23
- }
17
+ text-decoration: none;
24
18
  }
25
19
 
26
20
  .pagy-nav > .page.prev a,
@@ -30,15 +24,15 @@
30
24
 
31
25
  .pagy-nav > .page.next a,
32
26
  .pagy-nav > .page.next.disabled {
33
- border-radius: 0 5px 5px 0;
34
27
  border-right: 1px solid var(--border-color);
28
+ border-radius: 0 5px 5px 0;
35
29
  }
36
30
 
37
31
  .pagy-nav > .page.active {
38
- cursor: default;
39
- background: var(--red-500);
40
32
  border-color: var(--red-500);
33
+ background: var(--red-500);
41
34
  color: white;
35
+ cursor: default;
42
36
 
43
37
  &:hover {
44
38
  background: var(--red-500);
@@ -46,9 +40,16 @@
46
40
  }
47
41
 
48
42
  .pagy-nav > .page.disabled {
49
- cursor: default;
50
43
  color: var(--grey-500);
44
+ cursor: default;
45
+
51
46
  &:hover {
52
47
  background: white;
53
48
  }
54
49
  }
50
+
51
+ .pagy-nav > .page.disabled:hover,
52
+ .pagy-nav > .page.active:hover,
53
+ .pagy-nav > .page > a:hover {
54
+ background: var(--grey-100);
55
+ }
@@ -0,0 +1,36 @@
1
+ .placeholder {
2
+ display: flex;
3
+ width: 100%;
4
+ flex-direction: column;
5
+ align-items: center;
6
+ justify-content: center;
7
+ padding-bottom: 2rem;
8
+ }
9
+
10
+ .placeholder-image {
11
+ width: 30%;
12
+ height: 30%;
13
+ -webkit-filter: grayscale(1) brightness(2.5);
14
+ }
15
+
16
+ .placeholder-text {
17
+ padding: 1rem 0;
18
+ color: var(--grey-400);
19
+ text-align: center;
20
+ }
21
+
22
+ .placeholder-text h2 {
23
+ padding-bottom: 1rem;
24
+ }
25
+
26
+ .placeholder-link {
27
+ color: var(--grey-400);
28
+
29
+ &:visited {
30
+ color: var(--grey-400);
31
+ }
32
+
33
+ &:hover {
34
+ color: var(--grey-900);
35
+ }
36
+ }
@@ -0,0 +1,55 @@
1
+ .table {
2
+ width: 100%;
3
+ border: hidden 1px var(--border-color);
4
+
5
+ /* Hack to get table row borders, see https://stackoverflow.com/a/2586780/2553104 */
6
+ border-collapse: collapse;
7
+ border-radius: 5px;
8
+ box-shadow: 0 0 0 1px var(--border-color);
9
+ table-layout: fixed;
10
+ }
11
+
12
+ .table th,
13
+ .table td {
14
+ padding: 0.5rem 1rem;
15
+ }
16
+
17
+ .table thead tr {
18
+ color: var(--grey-500);
19
+ }
20
+
21
+ .table tr:nth-child(even) {
22
+ background: var(--grey-50);
23
+ }
24
+
25
+ .table thead th {
26
+ font-weight: 400;
27
+ }
28
+
29
+ .table-filter-icon {
30
+ width: 14px;
31
+ margin-left: 0.5rem;
32
+ }
33
+
34
+ .table tbody tr:not(.no-row) {
35
+ border: solid 1px var(--border-color);
36
+ color: var(--grey-700);
37
+ cursor: pointer;
38
+ }
39
+
40
+ .table tbody tr:not(.no-row):hover {
41
+ background: var(--grey-100);
42
+ }
43
+
44
+ .request-checkbox {
45
+ z-index: 1;
46
+ width: 1rem;
47
+ height: 1rem;
48
+ }
49
+
50
+ .request-path {
51
+ overflow: hidden;
52
+ max-width: 280px;
53
+ text-overflow: ellipsis;
54
+ white-space: nowrap;
55
+ }
@@ -0,0 +1,93 @@
1
+ .trace {
2
+ display: flex;
3
+ align-items: center;
4
+ justify-content: flex-start;
5
+ padding: 0.25em 0;
6
+ list-style: none;
7
+ }
8
+
9
+ .trace:nth-child(odd) {
10
+ background: var(--grey-100);
11
+ }
12
+
13
+ .trace .trace-bar {
14
+ position: relative;
15
+ height: 16px;
16
+ padding: 0;
17
+ margin: 0;
18
+ background: linear-gradient(to top right, var(--grey-500), var(--grey-400));
19
+ cursor: pointer;
20
+ }
21
+
22
+ .instantiation-trace .trace-bar {
23
+ background: linear-gradient(to top right, var(--green-400), var(--green-300));
24
+ }
25
+
26
+ .sequel-trace .trace-bar {
27
+ background: linear-gradient(to top right, var(--green-500), var(--green-400));
28
+ }
29
+
30
+ .controller-trace .trace-bar {
31
+ background: linear-gradient(to top right, var(--yellow-500), var(--yellow-400));
32
+ }
33
+
34
+ .render-template-trace .trace-bar,
35
+ .render-partial-trace .trace-bar {
36
+ background: linear-gradient(to top right, var(--blue-500), var(--blue-400));
37
+ }
38
+
39
+ .trace-name {
40
+ overflow: hidden;
41
+ box-sizing: border-box;
42
+ padding: 0 0.5em;
43
+ margin: 0;
44
+ color: var(--grey-400);
45
+ font-size: 14px;
46
+ text-align: right;
47
+ text-overflow: ellipsis;
48
+ }
49
+
50
+ .trace-payload {
51
+ margin: 0;
52
+ }
53
+
54
+ .sequel-trace-query {
55
+ overflow: auto;
56
+ max-height: 100px;
57
+ padding: 1em 1em;
58
+ background: var(--grey-100);
59
+ white-space: pre-wrap;
60
+ }
61
+
62
+ .sequel-trace-binds {
63
+ overflow: auto;
64
+ max-height: 100px;
65
+ padding: 0.5em 1em;
66
+ margin: 0 0 1em 0;
67
+ background: var(--grey-50);
68
+ font-size: 12px;
69
+ white-space: pre-wrap;
70
+ }
71
+
72
+ .backtrace {
73
+ display: flex;
74
+ flex-direction: row;
75
+ align-items: center;
76
+ justify-content: space-between;
77
+ padding: 0.5em;
78
+ background: var(--grey-100);
79
+ }
80
+
81
+ .backtrace button {
82
+ overflow: auto;
83
+ height: 20px;
84
+ padding: 0;
85
+ margin: 0;
86
+ background: none;
87
+ color: var(--grey-500);
88
+ }
89
+
90
+ .backtrace button svg {
91
+ width: 20px;
92
+ height: 20px;
93
+ }
@@ -1,9 +1,10 @@
1
1
  #wrapper {
2
- height: 100vh;
3
2
  width: 100%;
3
+ height: 100vh;
4
4
  }
5
5
 
6
6
  #speedscope-iframe {
7
7
  width: 100%;
8
8
  height: 100%;
9
- border: none; }
9
+ border: none;
10
+ }