@parca/profile 0.16.115 → 0.16.117

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.
@@ -1,15 +1,4 @@
1
- var __assign = (this && this.__assign) || function () {
2
- __assign = Object.assign || function(t) {
3
- for (var s, i = 1, n = arguments.length; i < n; i++) {
4
- s = arguments[i];
5
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
- t[p] = s[p];
7
- }
8
- return t;
9
- };
10
- return __assign.apply(this, arguments);
11
- };
12
- import { jsxs as _jsxs, jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
13
2
  // Copyright 2022 The Parca Authors
14
3
  // Licensed under the Apache License, Version 2.0 (the "License");
15
4
  // you may not use this file except in compliance with the License.
@@ -46,135 +35,45 @@ export function ParseLabels(labels) {
46
35
  return { name: parts[0], value: parts[1] };
47
36
  });
48
37
  }
49
- export function ProfileSelectionFromParams(expression, from, to, merge, labels, profileName, time, filterQuery) {
50
- if (merge !== undefined &&
51
- merge === 'true' &&
52
- from !== undefined &&
38
+ export function ProfileSelectionFromParams(expression, from, to, mergeFrom, mergeTo, labels, filterQuery) {
39
+ if (from !== undefined &&
53
40
  to !== undefined &&
41
+ mergeFrom !== undefined &&
42
+ mergeTo !== undefined &&
54
43
  expression !== undefined) {
55
- return new MergedProfileSelection(parseInt(from), parseInt(to), expression, filterQuery);
56
- }
57
- if (labels !== undefined && time !== undefined && profileName !== undefined) {
58
- return new SingleProfileSelection(profileName, ParseLabels(labels), parseInt(time), filterQuery);
44
+ return new MergedProfileSelection(parseInt(mergeFrom), parseInt(mergeTo), ParseLabels(labels !== null && labels !== void 0 ? labels : ['']), expression, filterQuery);
59
45
  }
60
46
  return null;
61
47
  }
62
- var SingleProfileSelection = /** @class */ (function () {
63
- function SingleProfileSelection(profileName, labels, time, filterQuery) {
64
- this.profileName = profileName;
65
- this.labels = labels;
66
- this.time = time;
67
- this.filterQuery = filterQuery;
68
- }
69
- SingleProfileSelection.prototype.ProfileName = function () {
70
- return this.profileName;
71
- };
72
- SingleProfileSelection.prototype.HistoryParams = function () {
73
- return {
74
- profile_name: this.profileName,
75
- labels: this.labels.map(function (label) { return "".concat(label.name, "=").concat(encodeURIComponent(label.value)); }),
76
- time: this.time,
77
- };
78
- };
79
- SingleProfileSelection.prototype.Type = function () {
80
- return 'single';
81
- };
82
- SingleProfileSelection.prototype.ProfileSource = function () {
83
- return new SingleProfileSource(this.profileName, this.labels, this.time, this.filterQuery);
84
- };
85
- return SingleProfileSelection;
86
- }());
87
- export { SingleProfileSelection };
88
48
  var MergedProfileSelection = /** @class */ (function () {
89
- function MergedProfileSelection(from, to, query, filterQuery) {
90
- this.from = from;
91
- this.to = to;
49
+ function MergedProfileSelection(mergeFrom, mergeTo, labels, query, filterQuery) {
50
+ this.mergeFrom = mergeFrom;
51
+ this.mergeTo = mergeTo;
92
52
  this.query = query;
93
53
  this.filterQuery = filterQuery;
54
+ this.labels = labels;
94
55
  }
95
56
  MergedProfileSelection.prototype.ProfileName = function () {
96
57
  return Query.parse(this.query).profileName();
97
58
  };
98
59
  MergedProfileSelection.prototype.HistoryParams = function () {
99
60
  return {
100
- mode: 'merge',
101
- from: this.from.toString(),
102
- to: this.to.toString(),
61
+ merge_from: this.mergeFrom.toString(),
62
+ merge_to: this.mergeTo.toString(),
103
63
  query: this.query,
64
+ profile_name: this.ProfileName(),
65
+ labels: this.labels.map(function (label) { return "".concat(label.name, "=").concat(encodeURIComponent(label.value)); }),
104
66
  };
105
67
  };
106
68
  MergedProfileSelection.prototype.Type = function () {
107
69
  return 'merge';
108
70
  };
109
71
  MergedProfileSelection.prototype.ProfileSource = function () {
110
- return new MergedProfileSource(this.from, this.to, this.query, this.filterQuery);
72
+ return new MergedProfileSource(this.mergeFrom, this.mergeTo, this.labels, this.query, this.filterQuery);
111
73
  };
112
74
  return MergedProfileSelection;
113
75
  }());
114
76
  export { MergedProfileSelection };
115
- var SingleProfileSource = /** @class */ (function () {
116
- function SingleProfileSource(profileName, labels, time, filterQuery) {
117
- this.profName = profileName;
118
- this.labels = labels;
119
- this.time = time;
120
- this.filterQuery = filterQuery;
121
- }
122
- SingleProfileSource.prototype.query = function () {
123
- var seriesQuery = this.profName +
124
- this.labels.reduce(function (agg, label) {
125
- return agg + "".concat(label.name, "=\"").concat(label.value, "\",");
126
- }, '{');
127
- return seriesQuery + '}';
128
- };
129
- SingleProfileSource.prototype.DiffSelection = function () {
130
- return {
131
- options: {
132
- oneofKind: 'single',
133
- single: {
134
- time: Timestamp.fromDate(new Date(this.time)),
135
- query: this.query(),
136
- },
137
- },
138
- mode: ProfileDiffSelection_Mode.SINGLE_UNSPECIFIED,
139
- };
140
- };
141
- SingleProfileSource.prototype.QueryRequest = function () {
142
- return {
143
- options: {
144
- oneofKind: 'single',
145
- single: {
146
- time: Timestamp.fromDate(new Date(this.time)),
147
- query: this.query(),
148
- },
149
- },
150
- reportType: QueryRequest_ReportType.FLAMEGRAPH_UNSPECIFIED,
151
- mode: QueryRequest_Mode.SINGLE_UNSPECIFIED,
152
- filterQuery: this.filterQuery,
153
- };
154
- };
155
- SingleProfileSource.prototype.ProfileType = function () {
156
- return ProfileType.fromString(this.profName);
157
- };
158
- SingleProfileSource.prototype.profileName = function () {
159
- return this.profName;
160
- };
161
- SingleProfileSource.prototype.Describe = function () {
162
- var profileName = this.profileName();
163
- return (_jsxs(_Fragment, { children: [_jsxs("p", { children: [profileName !== '' ? _jsxs("a", { children: [profileName, " profile of "] }) : '', ' ', this.labels
164
- .filter(function (label) { return label.name !== '__name__'; })
165
- .map(function (label) { return (_jsx("button", __assign({ type: "button", className: "inline-block rounded-lg text-gray-700 bg-gray-200 dark:bg-gray-700 dark:text-gray-400 px-2 py-1 text-xs font-bold mr-3" }, { children: "".concat(label.name, "=\"").concat(label.value, "\"") }), label.name)); })] }), _jsx("p", { children: formatDate(this.time, timeFormat) })] }));
166
- };
167
- SingleProfileSource.prototype.stringLabels = function () {
168
- return this.labels
169
- .filter(function (label) { return label.name !== '__name__'; })
170
- .map(function (label) { return "".concat(label.name, "=").concat(label.value); });
171
- };
172
- SingleProfileSource.prototype.toString = function () {
173
- return "single profile of type ".concat(this.profileName(), " with labels ").concat(this.stringLabels().join(', '), " collected at ").concat(formatDate(this.time, timeFormat));
174
- };
175
- return SingleProfileSource;
176
- }());
177
- export { SingleProfileSource };
178
77
  var ProfileDiffSource = /** @class */ (function () {
179
78
  function ProfileDiffSource(a, b, filterQuery) {
180
79
  this.a = a;
@@ -211,9 +110,10 @@ var ProfileDiffSource = /** @class */ (function () {
211
110
  }());
212
111
  export { ProfileDiffSource };
213
112
  var MergedProfileSource = /** @class */ (function () {
214
- function MergedProfileSource(from, to, query, filterQuery) {
215
- this.from = from;
216
- this.to = to;
113
+ function MergedProfileSource(mergeFrom, mergeTo, labels, query, filterQuery) {
114
+ this.mergeFrom = mergeFrom;
115
+ this.mergeTo = mergeTo;
116
+ this.labels = labels;
217
117
  this.query = query;
218
118
  this.filterQuery = filterQuery;
219
119
  }
@@ -222,8 +122,8 @@ var MergedProfileSource = /** @class */ (function () {
222
122
  options: {
223
123
  oneofKind: 'merge',
224
124
  merge: {
225
- start: Timestamp.fromDate(new Date(this.from)),
226
- end: Timestamp.fromDate(new Date(this.to)),
125
+ start: Timestamp.fromDate(new Date(this.mergeFrom)),
126
+ end: Timestamp.fromDate(new Date(this.mergeTo)),
227
127
  query: this.query,
228
128
  },
229
129
  },
@@ -235,8 +135,8 @@ var MergedProfileSource = /** @class */ (function () {
235
135
  options: {
236
136
  oneofKind: 'merge',
237
137
  merge: {
238
- start: Timestamp.fromDate(new Date(this.from)),
239
- end: Timestamp.fromDate(new Date(this.to)),
138
+ start: Timestamp.fromDate(new Date(this.mergeFrom)),
139
+ end: Timestamp.fromDate(new Date(this.mergeTo)),
240
140
  query: this.query,
241
141
  },
242
142
  },
@@ -249,10 +149,15 @@ var MergedProfileSource = /** @class */ (function () {
249
149
  return ProfileType.fromString(Query.parse(this.query).profileName());
250
150
  };
251
151
  MergedProfileSource.prototype.Describe = function () {
252
- return (_jsxs("a", { children: ["Merge of \"", this.query, "\" from ", formatDate(this.from, timeFormat), " to", ' ', formatDate(this.to, timeFormat)] }));
152
+ return (_jsxs("a", { children: ["Merge of \"", this.query, "\" from ", formatDate(this.mergeFrom, timeFormat), " to", ' ', formatDate(this.mergeTo, timeFormat)] }));
153
+ };
154
+ MergedProfileSource.prototype.stringLabels = function () {
155
+ return this.labels
156
+ .filter(function (label) { return label.name !== '__name__'; })
157
+ .map(function (label) { return "".concat(label.name, "=").concat(label.value); });
253
158
  };
254
159
  MergedProfileSource.prototype.toString = function () {
255
- return "merged profiles of query \"".concat(this.query, "\" from ").concat(formatDate(this.from, timeFormat), " to ").concat(formatDate(this.to, timeFormat));
160
+ return "merged profiles of query \"".concat(this.query, "\" from ").concat(formatDate(this.mergeFrom, timeFormat), " to ").concat(formatDate(this.mergeTo, timeFormat));
256
161
  };
257
162
  return MergedProfileSource;
258
163
  }());
package/dist/styles.css CHANGED
@@ -1 +1 @@
1
- /*! tailwindcss v3.2.4 | MIT License | https://tailwindcss.com*/*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:""}html{-webkit-text-size-adjust:100%;font-feature-settings:normal;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{color:inherit;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#9ca3af;opacity:1}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]{display:none}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.visible{visibility:visible}.invisible{visibility:hidden}.absolute{position:absolute}.relative{position:relative}.left-\[25px\]{left:25px}.left-0{left:0}.top-\[-46px\]{top:-46px}.right-0{right:0}.top-\[-45px\]{top:-45px}.top-\[-48px\]{top:-48px}.top-\[-69px\]{top:-69px}.top-\[-54px\]{top:-54px}.top-\[-70px\]{top:-70px}.z-50{z-index:50}.z-10{z-index:10}.m-auto{margin:auto}.m-0{margin:0}.m-2{margin:.5rem}.my-2{margin-bottom:.5rem;margin-top:.5rem}.my-20{margin-bottom:5rem;margin-top:5rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.my-6{margin-bottom:1.5rem;margin-top:1.5rem}.mr-3{margin-right:.75rem}.ml-2{margin-left:.5rem}.mr-6{margin-right:1.5rem}.mt-2{margin-top:.5rem}.mt-1{margin-top:.25rem}.ml-auto{margin-left:auto}.mb-2{margin-bottom:.5rem}.mr-1{margin-right:.25rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-8{margin-top:2rem}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.table{display:table}.grid{display:grid}.h-36{height:9rem}.h-1{height:.25rem}.h-\[80vh\]{height:80vh}.h-4{height:1rem}.max-h-\[400px\]{max-height:400px}.w-auto{width:auto}.w-1\/5{width:20%}.w-4\/5{width:80%}.w-full{width:100%}.w-40{width:10rem}.w-2\/5{width:40%}.w-1\/2{width:50%}.w-8{width:2rem}.w-1\/4{width:25%}.w-3\/4{width:75%}.w-4{width:1rem}.w-16{width:4rem}.w-fit{width:-moz-fit-content;width:fit-content}.w-\[420px\]{width:420px}.min-w-\[300px\]{min-width:300px}.max-w-md{max-width:28rem}.flex-1{flex:1 1 0%}.flex-grow{flex-grow:1}.table-auto{table-layout:auto}.table-fixed{table-layout:fixed}.translate-y-1{--tw-translate-y:0.25rem}.translate-y-0,.translate-y-1{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-0{--tw-translate-y:0px}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-pointer{cursor:pointer}.cursor-default{cursor:default}.cursor-not-allowed{cursor:not-allowed}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-2{gap:.5rem}.gap-1{gap:.25rem}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.5rem*var(--tw-space-x-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(1rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(1rem*var(--tw-space-x-reverse))}.space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.25rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.25rem*var(--tw-space-x-reverse))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-scroll{overflow:scroll}.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.break-all{word-break:break-all}.rounded-lg{border-radius:.5rem}.rounded{border-radius:.25rem}.rounded-md{border-radius:.375rem}.rounded-none{border-radius:0}.rounded-l{border-bottom-left-radius:.25rem;border-top-left-radius:.25rem}.rounded-r{border-bottom-right-radius:.25rem;border-top-right-radius:.25rem}.border{border-width:1px}.border-r-0{border-right-width:0}.border-l-0{border-left-width:0}.border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity))}.border-red-400{--tw-border-opacity:1;border-color:rgb(248 113 113/var(--tw-border-opacity))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}.bg-indigo-600{--tw-bg-opacity:1;background-color:rgb(79 70 229/var(--tw-bg-opacity))}.bg-red-100{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity))}.bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity))}.bg-inherit{background-color:inherit}.fill-transparent{fill:transparent}.fill-current{fill:currentColor}.p-3{padding:.75rem}.p-10{padding:2.5rem}.p-4{padding:1rem}.p-1{padding:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.px-4{padding-left:1rem;padding-right:1rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.py-20{padding-bottom:5rem;padding-top:5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-1{padding-left:.25rem;padding-right:.25rem}.pl-3{padding-left:.75rem}.pr-9{padding-right:2.25rem}.pt-2{padding-top:.5rem}.pb-4{padding-bottom:1rem}.pr-2{padding-right:.5rem}.pl-2{padding-left:.5rem}.pb-2{padding-bottom:.5rem}.text-left{text-align:left}.text-center{text-align:center}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-xs{font-size:.75rem;line-height:1rem}.text-base{font-size:1rem;line-height:1.5rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.font-bold{font-weight:700}.font-semibold{font-weight:600}.text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity))}.text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity))}.\!text-indigo-600{--tw-text-opacity:1!important;color:rgb(79 70 229/var(--tw-text-opacity))!important}.opacity-90{opacity:.9}.opacity-100{opacity:1}.opacity-0{opacity:0}.opacity-50{opacity:.5}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-black{--tw-ring-opacity:1;--tw-ring-color:rgb(0 0 0/var(--tw-ring-opacity))}.ring-opacity-5{--tw-ring-opacity:0.05}.blur{--tw-blur:blur(8px)}.blur,.invert{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.invert{--tw-invert:invert(100%)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-100{transition-duration:.1s}.duration-200{transition-duration:.2s}.duration-150{transition-duration:.15s}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-indigo-800:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(55 48 163/var(--tw-ring-opacity))}[class~=theme-dark] .dark\:border-gray-500{--tw-border-opacity:1;border-color:rgb(107 114 128/var(--tw-border-opacity))}[class~=theme-dark] .dark\:bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}[class~=theme-dark] .dark\:bg-gray-900{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity))}[class~=theme-dark] .dark\:bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity))}[class~=theme-dark] .dark\:text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}[class~=theme-dark] .dark\:text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity))}[class~=theme-dark] .dark\:text-gray-50{--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}[class~=theme-dark] .dark\:\!text-indigo-400{--tw-text-opacity:1!important;color:rgb(129 140 248/var(--tw-text-opacity))!important}@media (min-width:640px){.sm\:inline{display:inline}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}}
1
+ /*! tailwindcss v3.2.4 | MIT License | https://tailwindcss.com*/*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:""}html{-webkit-text-size-adjust:100%;font-feature-settings:normal;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{color:inherit;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#9ca3af;opacity:1}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]{display:none}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.visible{visibility:visible}.invisible{visibility:hidden}.absolute{position:absolute}.relative{position:relative}.left-\[25px\]{left:25px}.left-0{left:0}.top-\[-46px\]{top:-46px}.right-0{right:0}.top-\[-45px\]{top:-45px}.top-\[-48px\]{top:-48px}.top-\[-69px\]{top:-69px}.top-\[-54px\]{top:-54px}.top-\[-70px\]{top:-70px}.z-50{z-index:50}.z-10{z-index:10}.m-auto{margin:auto}.m-0{margin:0}.m-2{margin:.5rem}.my-2{margin-bottom:.5rem;margin-top:.5rem}.my-20{margin-bottom:5rem;margin-top:5rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.my-6{margin-bottom:1.5rem;margin-top:1.5rem}.ml-2{margin-left:.5rem}.mr-6{margin-right:1.5rem}.mt-2{margin-top:.5rem}.mt-1{margin-top:.25rem}.ml-auto{margin-left:auto}.mb-2{margin-bottom:.5rem}.mr-3{margin-right:.75rem}.mr-1{margin-right:.25rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-8{margin-top:2rem}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.table{display:table}.grid{display:grid}.h-36{height:9rem}.h-1{height:.25rem}.h-\[80vh\]{height:80vh}.h-4{height:1rem}.max-h-\[400px\]{max-height:400px}.w-auto{width:auto}.w-1\/5{width:20%}.w-4\/5{width:80%}.w-full{width:100%}.w-40{width:10rem}.w-2\/5{width:40%}.w-1\/2{width:50%}.w-8{width:2rem}.w-1\/4{width:25%}.w-3\/4{width:75%}.w-4{width:1rem}.w-16{width:4rem}.w-fit{width:-moz-fit-content;width:fit-content}.w-\[420px\]{width:420px}.min-w-\[300px\]{min-width:300px}.max-w-md{max-width:28rem}.flex-1{flex:1 1 0%}.flex-grow{flex-grow:1}.table-auto{table-layout:auto}.table-fixed{table-layout:fixed}.translate-y-1{--tw-translate-y:0.25rem}.translate-y-0,.translate-y-1{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-0{--tw-translate-y:0px}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-pointer{cursor:pointer}.cursor-default{cursor:default}.cursor-not-allowed{cursor:not-allowed}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-2{gap:.5rem}.gap-1{gap:.25rem}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.5rem*var(--tw-space-x-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(1rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(1rem*var(--tw-space-x-reverse))}.space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.25rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.25rem*var(--tw-space-x-reverse))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-scroll{overflow:scroll}.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-none{border-radius:0}.rounded-l{border-bottom-left-radius:.25rem;border-top-left-radius:.25rem}.rounded-r{border-bottom-right-radius:.25rem;border-top-right-radius:.25rem}.border{border-width:1px}.border-r-0{border-right-width:0}.border-l-0{border-left-width:0}.border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity))}.border-red-400{--tw-border-opacity:1;border-color:rgb(248 113 113/var(--tw-border-opacity))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}.bg-indigo-600{--tw-bg-opacity:1;background-color:rgb(79 70 229/var(--tw-bg-opacity))}.bg-red-100{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity))}.bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity))}.bg-inherit{background-color:inherit}.fill-transparent{fill:transparent}.fill-current{fill:currentColor}.p-3{padding:.75rem}.p-10{padding:2.5rem}.p-4{padding:1rem}.p-1{padding:.25rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-4{padding-left:1rem;padding-right:1rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.py-20{padding-bottom:5rem;padding-top:5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.px-1{padding-left:.25rem;padding-right:.25rem}.pl-3{padding-left:.75rem}.pr-9{padding-right:2.25rem}.pt-2{padding-top:.5rem}.pb-4{padding-bottom:1rem}.pr-2{padding-right:.5rem}.pl-2{padding-left:.5rem}.pb-2{padding-bottom:.5rem}.text-left{text-align:left}.text-center{text-align:center}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-xs{font-size:.75rem;line-height:1rem}.text-base{font-size:1rem;line-height:1.5rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.font-semibold{font-weight:600}.font-bold{font-weight:700}.text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity))}.text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity))}.\!text-indigo-600{--tw-text-opacity:1!important;color:rgb(79 70 229/var(--tw-text-opacity))!important}.opacity-90{opacity:.9}.opacity-100{opacity:1}.opacity-0{opacity:0}.opacity-50{opacity:.5}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-black{--tw-ring-opacity:1;--tw-ring-color:rgb(0 0 0/var(--tw-ring-opacity))}.ring-opacity-5{--tw-ring-opacity:0.05}.blur{--tw-blur:blur(8px)}.blur,.invert{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.invert{--tw-invert:invert(100%)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-100{transition-duration:.1s}.duration-200{transition-duration:.2s}.duration-150{transition-duration:.15s}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-indigo-800:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(55 48 163/var(--tw-ring-opacity))}[class~=theme-dark] .dark\:border-gray-500{--tw-border-opacity:1;border-color:rgb(107 114 128/var(--tw-border-opacity))}[class~=theme-dark] .dark\:bg-gray-900{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity))}[class~=theme-dark] .dark\:bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}[class~=theme-dark] .dark\:bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity))}[class~=theme-dark] .dark\:text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity))}[class~=theme-dark] .dark\:text-gray-50{--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}[class~=theme-dark] .dark\:text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}[class~=theme-dark] .dark\:\!text-indigo-400{--tw-text-opacity:1!important;color:rgb(129 140 248/var(--tw-text-opacity))!important}@media (min-width:640px){.sm\:inline{display:inline}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}}
package/package.json CHANGED
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "@parca/profile",
3
- "version": "0.16.115",
3
+ "version": "0.16.117",
4
4
  "description": "Profile viewing libraries",
5
5
  "dependencies": {
6
- "@parca/client": "^0.16.62",
7
- "@parca/components": "^0.16.96",
6
+ "@parca/client": "^0.16.63",
7
+ "@parca/components": "^0.16.98",
8
8
  "@parca/dynamicsize": "^0.16.52",
9
- "@parca/functions": "^0.16.60",
9
+ "@parca/functions": "^0.16.61",
10
10
  "@parca/parser": "^0.16.53",
11
- "@parca/store": "^0.16.56",
11
+ "@parca/store": "^0.16.57",
12
12
  "@types/react-beautiful-dnd": "^13.1.3",
13
13
  "d3": "7.8.2",
14
14
  "d3-scale": "^4.0.2",
@@ -45,5 +45,5 @@
45
45
  "access": "public",
46
46
  "registry": "https://registry.npmjs.org/"
47
47
  },
48
- "gitHead": "2685ef240a6d970d3db3ab3e626d25e5068db415"
48
+ "gitHead": "15e08a534843878a50763af207e27dde6c19e656"
49
49
  }
@@ -18,20 +18,20 @@ import throttle from 'lodash.throttle';
18
18
 
19
19
  import {DateTimeRange, useKeyDown} from '@parca/components';
20
20
  import {useContainerDimensions} from '@parca/dynamicsize';
21
- import {formatForTimespan} from '@parca/functions/time';
21
+ import {formatForTimespan} from '@parca/functions';
22
22
  import {MetricsSeries as MetricsSeriesPb, MetricsSample, Label} from '@parca/client';
23
23
  import {valueFormatter, formatDate, sanitizeHighlightedValues} from '@parca/functions';
24
24
 
25
25
  import MetricsSeries from '../MetricsSeries';
26
26
  import MetricsCircle from '../MetricsCircle';
27
27
  import MetricsTooltip from './MetricsTooltip';
28
- import {SingleProfileSelection} from '..';
28
+ import {MergedProfileSelection} from '..';
29
29
 
30
30
  interface Props {
31
31
  data: MetricsSeriesPb[];
32
32
  from: number;
33
33
  to: number;
34
- profile: SingleProfileSelection | null;
34
+ profile: MergedProfileSelection | null;
35
35
  onSampleClick: (timestamp: number, value: number, labels: Label[]) => void;
36
36
  onLabelClick: (labelName: string, labelValue: string) => void;
37
37
  setTimeRange: (range: DateTimeRange) => void;
@@ -113,7 +113,8 @@ export const RawMetricsGraph = ({
113
113
  const metricPointRef = useRef(null);
114
114
  const {isShiftDown} = useKeyDown();
115
115
 
116
- const time: number = parseFloat(profile?.HistoryParams().time);
116
+ // the time of the selected point is the start of the merge window
117
+ const time: number = parseFloat(profile?.HistoryParams().merge_from);
117
118
 
118
119
  if (width === undefined || width == null) {
119
120
  width = 0;
@@ -326,7 +327,6 @@ export const RawMetricsGraph = ({
326
327
  };
327
328
 
328
329
  const selected = findSelectedProfile();
329
-
330
330
  return (
331
331
  <>
332
332
  {highlighted != null && hovering && !dragging && pos[0] !== 0 && pos[1] !== 0 && (
@@ -11,6 +11,7 @@
11
11
  // See the License for the specific language governing permissions and
12
12
  // limitations under the License.
13
13
 
14
+ import {useEffect, useState} from 'react';
14
15
  import {QuerySelection, useProfileTypes} from '../ProfileSelector';
15
16
  import {ProfileSelection, ProfileSelectionFromParams, SuffixParams} from '..';
16
17
  import ProfileExplorerSingle from './ProfileExplorerSingle';
@@ -71,32 +72,101 @@ const ProfileExplorerApp = ({
71
72
  queryParams,
72
73
  navigateTo,
73
74
  }: ProfileExplorerProps): JSX.Element => {
74
- const {loading: profileTypesLoading, data: profileTypesData} = useProfileTypes(queryClient);
75
+ const {
76
+ loading: profileTypesLoading,
77
+ data: profileTypesData,
78
+ error: profileTypesError,
79
+ } = useProfileTypes(queryClient);
75
80
 
76
- const {loader, noDataPrompt} = useParcaContext();
81
+ const {loader, noDataPrompt, onError} = useParcaContext();
82
+
83
+ useEffect(() => {
84
+ if (profileTypesError !== undefined && profileTypesError !== null) {
85
+ onError?.(profileTypesError, 'ProfileExplorer');
86
+ }
87
+ }, [profileTypesError, onError]);
77
88
 
78
89
  /* eslint-disable @typescript-eslint/naming-convention */
79
90
  let {
80
91
  from_a,
81
92
  to_a,
82
- merge_a,
83
93
  profile_name_a,
84
94
  labels_a,
85
- time_a,
95
+ merge_from_a,
96
+ merge_to_a,
86
97
  time_selection_a,
87
98
  compare_a,
88
99
  from_b,
89
100
  to_b,
90
- merge_b,
91
101
  profile_name_b,
92
102
  labels_b,
93
- time_b,
103
+ merge_from_b,
104
+ merge_to_b,
94
105
  time_selection_b,
95
106
  compare_b,
96
107
  filter_by_function,
97
108
  dashboard_items,
98
109
  } = queryParams;
110
+
99
111
  /* eslint-enable @typescript-eslint/naming-convention */
112
+ const [profileA, setProfileA] = useState<ProfileSelection | null>(null);
113
+ const [profileB, setProfileB] = useState<ProfileSelection | null>(null);
114
+
115
+ useEffect(() => {
116
+ const mergeFrom = merge_from_a ?? undefined;
117
+ const mergeTo = merge_to_a ?? undefined;
118
+ const labels = (labels_a as string[]) ?? [''];
119
+ const profileA = ProfileSelectionFromParams(
120
+ expression_a,
121
+ from_a as string,
122
+ to_a as string,
123
+ mergeFrom as string,
124
+ mergeTo as string,
125
+ labels,
126
+ filter_by_function as string
127
+ );
128
+
129
+ setProfileA(profileA);
130
+ // eslint-disable-next-line react-hooks/exhaustive-deps
131
+ }, [merge_from_a, merge_to_a]);
132
+
133
+ useEffect(() => {
134
+ const mergeFrom = merge_from_b ?? undefined;
135
+ const mergeTo = merge_to_b ?? undefined;
136
+ const labels = (labels_b as string[]) ?? [''];
137
+ const profileB = ProfileSelectionFromParams(
138
+ expression_b,
139
+ from_b as string,
140
+ to_b as string,
141
+ mergeFrom as string,
142
+ mergeTo as string,
143
+ labels,
144
+ filter_by_function as string
145
+ );
146
+
147
+ setProfileB(profileB);
148
+ // eslint-disable-next-line react-hooks/exhaustive-deps
149
+ }, [merge_from_b, merge_to_b]);
150
+
151
+ if (profileTypesLoading) {
152
+ return <>{loader}</>;
153
+ }
154
+
155
+ if (profileTypesData?.types.length === 0) {
156
+ return <>{noDataPrompt}</>;
157
+ }
158
+
159
+ if (profileTypesError !== undefined && profileTypesError !== null) {
160
+ return (
161
+ <div
162
+ className="bg-red-100 border border-red-400 text-red-700 px-4 py-3 rounded relative"
163
+ role="alert"
164
+ >
165
+ <strong className="font-bold">Error! </strong>
166
+ <span className="block sm:inline">{profileTypesError.message}</span>
167
+ </div>
168
+ );
169
+ }
100
170
 
101
171
  const sanitizedRange = sanitizeDateRange(time_selection_a, from_a, to_a);
102
172
  time_selection_a = sanitizedRange.time_selection_a;
@@ -130,37 +200,21 @@ const ProfileExplorerApp = ({
130
200
  return selectProfile(p, '_b');
131
201
  };
132
202
 
133
- if (profileTypesLoading) {
134
- return <>{loader}</>;
135
- }
136
-
137
- if (profileTypesData?.types.length === 0) {
138
- return <>{noDataPrompt}</>;
139
- }
203
+ const queryA = {
204
+ expression: expression_a,
205
+ from: parseInt(from_a as string),
206
+ to: parseInt(to_a as string),
207
+ timeSelection: time_selection_a as string,
208
+ profile_name: profile_name_a as string,
209
+ };
140
210
 
141
211
  // Show the SingleProfileExplorer when not comparing
142
212
  if (compare_a !== 'true' && compare_b !== 'true') {
143
- const query = {
144
- expression: expression_a,
145
- from: parseInt(from_a as string),
146
- to: parseInt(to_a as string),
147
- merge: (merge_a as string) === 'true',
148
- profile_name: profile_name_a as string,
149
- timeSelection: time_selection_a as string,
150
- };
151
-
152
- const profile = ProfileSelectionFromParams(
153
- expression_a,
154
- from_a as string,
155
- to_a as string,
156
- merge_a as string,
157
- labels_a as string[],
158
- profile_name_a as string,
159
- time_a as string,
160
- filter_by_function
161
- );
162
-
163
213
  const selectQuery = (q: QuerySelection): void => {
214
+ const mergeParams =
215
+ q.mergeFrom !== undefined && q.mergeTo !== undefined
216
+ ? {merge_from_a: q.mergeFrom, merge_to_a: q.mergeTo}
217
+ : {};
164
218
  return navigateTo(
165
219
  '/',
166
220
  // Filtering the _a suffix causes us to reset potential profile
@@ -171,9 +225,9 @@ const ProfileExplorerApp = ({
171
225
  expression_a: encodeURIComponent(q.expression),
172
226
  from_a: q.from.toString(),
173
227
  to_a: q.to.toString(),
174
- merge_a: q.merge,
175
228
  time_selection_a: q.timeSelection,
176
229
  dashboard_items: dashboard_items ?? DEFAULT_DASHBOARD_ITEMS,
230
+ ...mergeParams,
177
231
  },
178
232
  }
179
233
  );
@@ -191,25 +245,23 @@ const ProfileExplorerApp = ({
191
245
  const compareProfile = (): void => {
192
246
  let compareQuery = {
193
247
  compare_a: 'true',
194
- expression_a: encodeURIComponent(query.expression),
195
- from_a: query.from.toString(),
196
- to_a: query.to.toString(),
197
- merge_a: query.merge,
198
- time_selection_a: query.timeSelection,
199
- profile_name_a: query.profile_name,
248
+ expression_a: encodeURIComponent(queryA.expression),
249
+ from_a: queryA.from.toString(),
250
+ to_a: queryA.to.toString(),
251
+ time_selection_a: queryA.timeSelection,
252
+ profile_name_a: queryA.profile_name,
200
253
 
201
254
  compare_b: 'true',
202
- expression_b: encodeURIComponent(query.expression),
203
- from_b: query.from.toString(),
204
- to_b: query.to.toString(),
205
- merge_b: query.merge,
206
- time_selection_b: query.timeSelection,
207
- profile_name_b: query.profile_name,
255
+ expression_b: encodeURIComponent(queryA.expression),
256
+ from_b: queryA.from.toString(),
257
+ to_b: queryA.to.toString(),
258
+ time_selection_b: queryA.timeSelection,
259
+ profile_name_b: queryA.profile_name,
208
260
  };
209
261
 
210
- if (profile != null) {
262
+ if (profileA != null) {
211
263
  compareQuery = {
212
- ...SuffixParams(profile.HistoryParams(), '_a'),
264
+ ...SuffixParams(profileA.HistoryParams(), '_a'),
213
265
  ...compareQuery,
214
266
  };
215
267
  }
@@ -224,8 +276,8 @@ const ProfileExplorerApp = ({
224
276
  return (
225
277
  <ProfileExplorerSingle
226
278
  queryClient={queryClient}
227
- query={query}
228
- profile={profile}
279
+ query={queryA}
280
+ profile={profileA}
229
281
  selectQuery={selectQuery}
230
282
  selectProfile={selectProfile}
231
283
  compareProfile={compareProfile}
@@ -234,43 +286,19 @@ const ProfileExplorerApp = ({
234
286
  );
235
287
  }
236
288
 
237
- const queryA = {
238
- expression: expression_a,
239
- from: parseInt(from_a as string),
240
- to: parseInt(to_a as string),
241
- merge: (merge_a as string) === 'true',
242
- timeSelection: time_selection_a as string,
243
- profile_name: profile_name_a as string,
244
- };
245
289
  const queryB = {
246
290
  expression: expression_b,
247
291
  from: parseInt(from_b as string),
248
292
  to: parseInt(to_b as string),
249
- merge: (merge_b as string) === 'true',
250
293
  timeSelection: time_selection_b as string,
251
294
  profile_name: profile_name_b as string,
252
295
  };
253
296
 
254
- const profileA = ProfileSelectionFromParams(
255
- expression_a,
256
- from_a as string,
257
- to_a as string,
258
- merge_a as string,
259
- labels_a as string[],
260
- profile_name_a as string,
261
- time_a as string
262
- );
263
- const profileB = ProfileSelectionFromParams(
264
- expression_b,
265
- from_b as string,
266
- to_b as string,
267
- merge_b as string,
268
- labels_b as string[],
269
- profile_name_b as string,
270
- time_b as string
271
- );
272
-
273
297
  const selectQueryA = (q: QuerySelection): void => {
298
+ const mergeParams =
299
+ q.mergeFrom !== undefined && q.mergeTo !== undefined
300
+ ? {merge_from_a: q.mergeFrom, merge_to_a: q.mergeTo}
301
+ : {};
274
302
  return navigateTo(
275
303
  '/',
276
304
  // Filtering the _a suffix causes us to reset potential profile
@@ -283,16 +311,20 @@ const ProfileExplorerApp = ({
283
311
  expression_b: encodeURIComponent(expression_b),
284
312
  from_a: q.from.toString(),
285
313
  to_a: q.to.toString(),
286
- merge_a: q.merge,
287
314
  time_selection_a: q.timeSelection,
288
315
  filter_by_function: filter_by_function ?? '',
289
316
  dashboard_items: dashboard_items ?? DEFAULT_DASHBOARD_ITEMS,
317
+ ...mergeParams,
290
318
  },
291
319
  }
292
320
  );
293
321
  };
294
322
 
295
323
  const selectQueryB = (q: QuerySelection): void => {
324
+ const mergeParams =
325
+ q.mergeFrom !== undefined && q.mergeTo !== undefined
326
+ ? {merge_from_b: q.mergeFrom, merge_to_b: q.mergeTo}
327
+ : {};
296
328
  return navigateTo(
297
329
  '/',
298
330
  // Filtering the _b suffix causes us to reset potential profile
@@ -305,10 +337,10 @@ const ProfileExplorerApp = ({
305
337
  expression_a: encodeURIComponent(expression_a),
306
338
  from_b: q.from.toString(),
307
339
  to_b: q.to.toString(),
308
- merge_b: q.merge,
309
340
  time_selection_b: q.timeSelection,
310
341
  filter_by_function: filter_by_function ?? '',
311
342
  dashboard_items: dashboard_items ?? DEFAULT_DASHBOARD_ITEMS,
343
+ ...mergeParams,
312
344
  },
313
345
  }
314
346
  );