Skip to content

Commit 420512a

Browse files
chore(NA): replaces native-hdr-histogram with hdr-histogram-js (#216715)
`native-hdr-histogram` is a native module and its prebuilds are failing the bootstrap on macos machines during bootstrap since early today. Its usage its contained in a single dev package and therefore this PR attempts to port into `hdr-histogram-js`. --------- Co-authored-by: kibanamachine <[email protected]>
1 parent 7e5f0e2 commit 420512a

File tree

5 files changed

+54
-21
lines changed

5 files changed

+54
-21
lines changed

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1796,6 +1796,7 @@
17961796
"gulp-postcss": "^9.0.1",
17971797
"gulp-terser": "^2.1.0",
17981798
"has-ansi": "^3.0.0",
1799+
"hdr-histogram-js": "^3.0.0",
17991800
"html-loader": "^5.1.0",
18001801
"http-proxy": "^1.18.1",
18011802
"http2-proxy": "^5.0.53",
@@ -1834,7 +1835,6 @@
18341835
"ms-chromium-edge-driver": "^0.5.1",
18351836
"msw": "~2.7.3",
18361837
"mutation-observer": "^1.0.3",
1837-
"native-hdr-histogram": "^1.0.0",
18381838
"nock": "12.0.3",
18391839
"node-libs-browser": "^2.2.1",
18401840
"nyc": "^17.1.0",

renovate.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -3717,9 +3717,9 @@
37173717
"enabled": true
37183718
},
37193719
{
3720-
"groupName": "native-hdr-histogram",
3720+
"groupName": "hdr-histogram-js",
37213721
"matchDepNames": [
3722-
"native-hdr-histogram"
3722+
"hdr-histogram-js"
37233723
],
37243724
"reviewers": [
37253725
"team:obs-ux-infra_services-team"

src/platform/packages/shared/kbn-apm-synthtrace/src/lib/utils/create_lossless_histogram.ts

+35-8
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@
88
*/
99

1010
import { sortBy } from 'lodash';
11-
// @ts-expect-error
12-
import Histogram from 'native-hdr-histogram';
11+
import Histogram from 'hdr-histogram-js';
1312

1413
const ONE_HOUR_IN_MICRO_SECONDS = 1000 * 1000 * 60 * 60;
1514

@@ -41,19 +40,46 @@ class LosslessHistogram {
4140
return this.backingHistogram;
4241
}
4342

44-
const histogram = new Histogram(this.min, this.max);
43+
const histogram = Histogram.build({
44+
lowestDiscernibleValue: this.min,
45+
highestTrackableValue: this.max,
46+
useWebAssembly: false,
47+
});
4548

4649
this.backingHistogram = histogram;
4750

4851
if (this.trackedValues.size > 0) {
4952
this.trackedValues.forEach((count, value) => {
50-
histogram.record(value, count);
53+
histogram.recordValueWithCount(value, count);
5154
});
5255
}
5356

5457
return histogram;
5558
}
5659

60+
private linearCounts(valueUnitsPerBucket: number) {
61+
if (!this.backingHistogram) {
62+
return [];
63+
}
64+
65+
const result = [];
66+
let value = valueUnitsPerBucket;
67+
68+
while (value <= this.backingHistogram.maxValue) {
69+
let count = 0;
70+
71+
// Sum counts within this bucket range
72+
for (let i = value - valueUnitsPerBucket + 1; i <= value; i++) {
73+
count += this.backingHistogram.getCountAtValue(i);
74+
}
75+
76+
result.push({ count, value });
77+
value += valueUnitsPerBucket;
78+
}
79+
80+
return result;
81+
}
82+
5783
record(value: number) {
5884
const countForValue = this.trackedValues.get(value);
5985
if (
@@ -69,11 +95,12 @@ class LosslessHistogram {
6995

7096
serialize(): SerializedHistogram {
7197
if (this.backingHistogram) {
72-
const minRecordedValue = this.backingHistogram.min();
73-
const maxRecordedValue = this.backingHistogram.max();
98+
const minRecordedValue = this.backingHistogram.minNonZeroValue;
99+
const maxRecordedValue = this.backingHistogram.maxValue;
74100

75-
const distribution: Array<{ value: number; count: number }> =
76-
this.backingHistogram.linearcounts(Math.max(1, (maxRecordedValue - minRecordedValue) / 50));
101+
const distribution: Array<{ value: number; count: number }> = this.linearCounts(
102+
Math.max(1, (maxRecordedValue - minRecordedValue) / 50)
103+
);
77104

78105
const values: number[] = [];
79106
const counts: number[] = [];

src/platform/packages/shared/kbn-test/jest-preset.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ module.exports = {
111111
transformIgnorePatterns: [
112112
// ignore all node_modules except monaco-editor, monaco-yaml which requires babel transforms to handle dynamic import()
113113
// since ESM modules are not natively supported in Jest yet (https://github.com/facebook/jest/issues/4842)
114-
'[/\\\\]node_modules(?![\\/\\\\](byte-size|monaco-editor|monaco-yaml|monaco-languageserver-types|monaco-marker-data-provider|monaco-worker-manager|vscode-languageserver-types|d3-interpolate|d3-color|langchain|langsmith|@cfworker|gpt-tokenizer|flat|@langchain|eventsource-parser|fast-check|@fast-check/jest))[/\\\\].+\\.js$',
114+
'[/\\\\]node_modules(?![\\/\\\\](byte-size|monaco-editor|monaco-yaml|monaco-languageserver-types|monaco-marker-data-provider|monaco-worker-manager|vscode-languageserver-types|d3-interpolate|d3-color|langchain|langsmith|@cfworker|gpt-tokenizer|flat|@langchain|eventsource-parser|fast-check|@fast-check/jest|@assemblyscript))[/\\\\].+\\.js$',
115115
'packages/kbn-pm/dist/index.js',
116116
'[/\\\\]node_modules(?![\\/\\\\](langchain|langsmith|@langchain))/dist/[/\\\\].+\\.js$',
117117
'[/\\\\]node_modules(?![\\/\\\\](langchain|langsmith|@langchain))/dist/util/[/\\\\].+\\.js$',

yarn.lock

+15-9
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,11 @@
144144
resolved "https://registry.yarnpkg.com/@assemblyscript/loader/-/loader-0.10.1.tgz#70e45678f06c72fa2e350e8553ec4a4d72b92e06"
145145
integrity sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==
146146

147+
"@assemblyscript/loader@^0.19.21":
148+
version "0.19.23"
149+
resolved "https://registry.yarnpkg.com/@assemblyscript/loader/-/loader-0.19.23.tgz#7fccae28d0a2692869f1d1219d36093bc24d5e72"
150+
integrity sha512-ulkCYfFbYj01ie1MDOyxv2F6SpRN1TOj7fQxbP07D6HmeR+gr2JLSmINKjga2emB+b1L2KGrFKBTc+e00p54nw==
151+
147152
"@aws-crypto/[email protected]":
148153
version "5.2.0"
149154
resolved "https://registry.yarnpkg.com/@aws-crypto/crc32/-/crc32-5.2.0.tgz#cfcc22570949c98c6689cfcbd2d693d36cdae2e1"
@@ -19802,6 +19807,15 @@ hdr-histogram-js@^2.0.1:
1980219807
base64-js "^1.2.0"
1980319808
pako "^1.0.3"
1980419809

19810+
hdr-histogram-js@^3.0.0:
19811+
version "3.0.0"
19812+
resolved "https://registry.yarnpkg.com/hdr-histogram-js/-/hdr-histogram-js-3.0.0.tgz#8e2d9a68e3313147804c47d85a9c22a93f85e24b"
19813+
integrity sha512-/EpvQI2/Z98mNFYEnlqJ8Ogful8OpArLG/6Tf2bPnkutBVLIeMVNHjk1ZDfshF2BUweipzbk+dB1hgSB7SIakw==
19814+
dependencies:
19815+
"@assemblyscript/loader" "^0.19.21"
19816+
base64-js "^1.2.0"
19817+
pako "^1.0.3"
19818+
1980519819
hdr-histogram-percentiles-obj@^3.0.0:
1980619820
version "3.0.0"
1980719821
resolved "https://registry.yarnpkg.com/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz#9409f4de0c2dda78e61de2d9d78b1e9f3cba283c"
@@ -23907,14 +23921,6 @@ napi-build-utils@^1.0.1:
2390723921
resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806"
2390823922
integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==
2390923923

23910-
native-hdr-histogram@^1.0.0:
23911-
version "1.0.0"
23912-
resolved "https://registry.yarnpkg.com/native-hdr-histogram/-/native-hdr-histogram-1.0.0.tgz#4b740ea0f919f926b8ee0edaa4c03a3de1cbdff7"
23913-
integrity sha512-m6rSY8FCsJpM6wQ68lcKymXEPWkVPsClzNcxHE5nAQsDK5gLycWQ1eHhBW2M9Hu1yBSuJTcqH1J09Sr44447qQ==
23914-
dependencies:
23915-
node-addon-api "^3.0.0"
23916-
node-gyp-build "^4.2.3"
23917-
2391823924
natural-compare-lite@^1.4.0:
2391923925
version "1.4.0"
2392023926
resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4"
@@ -24087,7 +24093,7 @@ [email protected]:
2408724093
dependencies:
2408824094
detect-libc "^2.0.1"
2408924095

24090-
node-gyp-build@^4.2.2, node-gyp-build@^4.2.3, node-gyp-build@^4.3.0:
24096+
node-gyp-build@^4.2.2, node-gyp-build@^4.3.0:
2409124097
version "4.5.0"
2409224098
resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.5.0.tgz#7a64eefa0b21112f89f58379da128ac177f20e40"
2409324099
integrity sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==

0 commit comments

Comments
 (0)