@parca/profile 0.16.114 → 0.16.116

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.114",
3
+ "version": "0.16.116",
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.97",
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",
@@ -19,7 +19,7 @@
19
19
  "react-copy-to-clipboard": "^5.1.0",
20
20
  "react-cytoscapejs": "1.2.1",
21
21
  "react-flame-graph": "^1.4.0",
22
- "react-konva": "18.2.3",
22
+ "react-konva": "18.2.4",
23
23
  "react-query": "^3.39.2",
24
24
  "react-textarea-autosize": "^8.4.0"
25
25
  },
@@ -45,5 +45,5 @@
45
45
  "access": "public",
46
46
  "registry": "https://registry.npmjs.org/"
47
47
  },
48
- "gitHead": "ce1281fb585f2abb148f2b31f9da76a3426ee8c4"
48
+ "gitHead": "e9b6f88b6388b9b9889de093cd83939c79af8e6e"
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';
@@ -74,33 +75,98 @@ const ProfileExplorerApp = ({
74
75
  const {
75
76
  loading: profileTypesLoading,
76
77
  data: profileTypesData,
77
- error,
78
+ error: profileTypesError,
78
79
  } = useProfileTypes(queryClient);
79
80
 
80
- 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]);
81
88
 
82
89
  /* eslint-disable @typescript-eslint/naming-convention */
83
90
  let {
84
91
  from_a,
85
92
  to_a,
86
- merge_a,
87
93
  profile_name_a,
88
94
  labels_a,
89
- time_a,
95
+ merge_from_a,
96
+ merge_to_a,
90
97
  time_selection_a,
91
98
  compare_a,
92
99
  from_b,
93
100
  to_b,
94
- merge_b,
95
101
  profile_name_b,
96
102
  labels_b,
97
- time_b,
103
+ merge_from_b,
104
+ merge_to_b,
98
105
  time_selection_b,
99
106
  compare_b,
100
107
  filter_by_function,
101
108
  dashboard_items,
102
109
  } = queryParams;
110
+
103
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
+ }
104
170
 
105
171
  const sanitizedRange = sanitizeDateRange(time_selection_a, from_a, to_a);
106
172
  time_selection_a = sanitizedRange.time_selection_a;
@@ -134,37 +200,21 @@ const ProfileExplorerApp = ({
134
200
  return selectProfile(p, '_b');
135
201
  };
136
202
 
137
- if (profileTypesLoading) {
138
- return <>{loader}</>;
139
- }
140
-
141
- if (profileTypesData?.types.length === 0) {
142
- return <>{noDataPrompt}</>;
143
- }
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
+ };
144
210
 
145
211
  // Show the SingleProfileExplorer when not comparing
146
212
  if (compare_a !== 'true' && compare_b !== 'true') {
147
- const query = {
148
- expression: expression_a,
149
- from: parseInt(from_a as string),
150
- to: parseInt(to_a as string),
151
- merge: (merge_a as string) === 'true',
152
- profile_name: profile_name_a as string,
153
- timeSelection: time_selection_a as string,
154
- };
155
-
156
- const profile = ProfileSelectionFromParams(
157
- expression_a,
158
- from_a as string,
159
- to_a as string,
160
- merge_a as string,
161
- labels_a as string[],
162
- profile_name_a as string,
163
- time_a as string,
164
- filter_by_function
165
- );
166
-
167
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
+ : {};
168
218
  return navigateTo(
169
219
  '/',
170
220
  // Filtering the _a suffix causes us to reset potential profile
@@ -175,9 +225,9 @@ const ProfileExplorerApp = ({
175
225
  expression_a: encodeURIComponent(q.expression),
176
226
  from_a: q.from.toString(),
177
227
  to_a: q.to.toString(),
178
- merge_a: q.merge,
179
228
  time_selection_a: q.timeSelection,
180
229
  dashboard_items: dashboard_items ?? DEFAULT_DASHBOARD_ITEMS,
230
+ ...mergeParams,
181
231
  },
182
232
  }
183
233
  );
@@ -195,25 +245,23 @@ const ProfileExplorerApp = ({
195
245
  const compareProfile = (): void => {
196
246
  let compareQuery = {
197
247
  compare_a: 'true',
198
- expression_a: encodeURIComponent(query.expression),
199
- from_a: query.from.toString(),
200
- to_a: query.to.toString(),
201
- merge_a: query.merge,
202
- time_selection_a: query.timeSelection,
203
- 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,
204
253
 
205
254
  compare_b: 'true',
206
- expression_b: encodeURIComponent(query.expression),
207
- from_b: query.from.toString(),
208
- to_b: query.to.toString(),
209
- merge_b: query.merge,
210
- time_selection_b: query.timeSelection,
211
- 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,
212
260
  };
213
261
 
214
- if (profile != null) {
262
+ if (profileA != null) {
215
263
  compareQuery = {
216
- ...SuffixParams(profile.HistoryParams(), '_a'),
264
+ ...SuffixParams(profileA.HistoryParams(), '_a'),
217
265
  ...compareQuery,
218
266
  };
219
267
  }
@@ -228,8 +276,8 @@ const ProfileExplorerApp = ({
228
276
  return (
229
277
  <ProfileExplorerSingle
230
278
  queryClient={queryClient}
231
- query={query}
232
- profile={profile}
279
+ query={queryA}
280
+ profile={profileA}
233
281
  selectQuery={selectQuery}
234
282
  selectProfile={selectProfile}
235
283
  compareProfile={compareProfile}
@@ -238,43 +286,19 @@ const ProfileExplorerApp = ({
238
286
  );
239
287
  }
240
288
 
241
- const queryA = {
242
- expression: expression_a,
243
- from: parseInt(from_a as string),
244
- to: parseInt(to_a as string),
245
- merge: (merge_a as string) === 'true',
246
- timeSelection: time_selection_a as string,
247
- profile_name: profile_name_a as string,
248
- };
249
289
  const queryB = {
250
290
  expression: expression_b,
251
291
  from: parseInt(from_b as string),
252
292
  to: parseInt(to_b as string),
253
- merge: (merge_b as string) === 'true',
254
293
  timeSelection: time_selection_b as string,
255
294
  profile_name: profile_name_b as string,
256
295
  };
257
296
 
258
- const profileA = ProfileSelectionFromParams(
259
- expression_a,
260
- from_a as string,
261
- to_a as string,
262
- merge_a as string,
263
- labels_a as string[],
264
- profile_name_a as string,
265
- time_a as string
266
- );
267
- const profileB = ProfileSelectionFromParams(
268
- expression_b,
269
- from_b as string,
270
- to_b as string,
271
- merge_b as string,
272
- labels_b as string[],
273
- profile_name_b as string,
274
- time_b as string
275
- );
276
-
277
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
+ : {};
278
302
  return navigateTo(
279
303
  '/',
280
304
  // Filtering the _a suffix causes us to reset potential profile
@@ -287,16 +311,20 @@ const ProfileExplorerApp = ({
287
311
  expression_b: encodeURIComponent(expression_b),
288
312
  from_a: q.from.toString(),
289
313
  to_a: q.to.toString(),
290
- merge_a: q.merge,
291
314
  time_selection_a: q.timeSelection,
292
315
  filter_by_function: filter_by_function ?? '',
293
316
  dashboard_items: dashboard_items ?? DEFAULT_DASHBOARD_ITEMS,
317
+ ...mergeParams,
294
318
  },
295
319
  }
296
320
  );
297
321
  };
298
322
 
299
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
+ : {};
300
328
  return navigateTo(
301
329
  '/',
302
330
  // Filtering the _b suffix causes us to reset potential profile
@@ -309,10 +337,10 @@ const ProfileExplorerApp = ({
309
337
  expression_a: encodeURIComponent(expression_a),
310
338
  from_b: q.from.toString(),
311
339
  to_b: q.to.toString(),
312
- merge_b: q.merge,
313
340
  time_selection_b: q.timeSelection,
314
341
  filter_by_function: filter_by_function ?? '',
315
342
  dashboard_items: dashboard_items ?? DEFAULT_DASHBOARD_ITEMS,
343
+ ...mergeParams,
316
344
  },
317
345
  }
318
346
  );