@benchkit/format 0.1.0
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.
- package/README.md +521 -0
- package/dist/build-otlp-result.d.ts +43 -0
- package/dist/build-otlp-result.d.ts.map +1 -0
- package/dist/build-otlp-result.js +102 -0
- package/dist/build-otlp-result.js.map +1 -0
- package/dist/build-otlp-result.test.d.ts +2 -0
- package/dist/build-otlp-result.test.d.ts.map +1 -0
- package/dist/build-otlp-result.test.js +148 -0
- package/dist/build-otlp-result.test.js.map +1 -0
- package/dist/compare.d.ts +20 -0
- package/dist/compare.d.ts.map +1 -0
- package/dist/compare.js +92 -0
- package/dist/compare.js.map +1 -0
- package/dist/compare.test.d.ts +2 -0
- package/dist/compare.test.d.ts.map +1 -0
- package/dist/compare.test.js +233 -0
- package/dist/compare.test.js.map +1 -0
- package/dist/format-comparison-markdown.d.ts +3 -0
- package/dist/format-comparison-markdown.d.ts.map +1 -0
- package/dist/format-comparison-markdown.js +142 -0
- package/dist/format-comparison-markdown.js.map +1 -0
- package/dist/format-comparison-markdown.test.d.ts +2 -0
- package/dist/format-comparison-markdown.test.d.ts.map +1 -0
- package/dist/format-comparison-markdown.test.js +173 -0
- package/dist/format-comparison-markdown.test.js.map +1 -0
- package/dist/index.d.ts +38 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +100 -0
- package/dist/index.js.map +1 -0
- package/dist/infer-direction.d.ts +10 -0
- package/dist/infer-direction.d.ts.map +1 -0
- package/dist/infer-direction.js +23 -0
- package/dist/infer-direction.js.map +1 -0
- package/dist/infer-direction.test.d.ts +2 -0
- package/dist/infer-direction.test.d.ts.map +1 -0
- package/dist/infer-direction.test.js +28 -0
- package/dist/infer-direction.test.js.map +1 -0
- package/dist/metrics-batch.d.ts +55 -0
- package/dist/metrics-batch.d.ts.map +1 -0
- package/dist/metrics-batch.js +296 -0
- package/dist/metrics-batch.js.map +1 -0
- package/dist/metrics-batch.test.d.ts +2 -0
- package/dist/metrics-batch.test.d.ts.map +1 -0
- package/dist/metrics-batch.test.js +306 -0
- package/dist/metrics-batch.test.js.map +1 -0
- package/dist/native-builder.d.ts.map +1 -0
- package/dist/native-builder.js.map +1 -0
- package/dist/native-builder.test.d.ts.map +1 -0
- package/dist/native-builder.test.js.map +1 -0
- package/dist/otlp-conventions.d.ts +80 -0
- package/dist/otlp-conventions.d.ts.map +1 -0
- package/dist/otlp-conventions.js +114 -0
- package/dist/otlp-conventions.js.map +1 -0
- package/dist/otlp-conventions.test.d.ts +2 -0
- package/dist/otlp-conventions.test.d.ts.map +1 -0
- package/dist/otlp-conventions.test.js +65 -0
- package/dist/otlp-conventions.test.js.map +1 -0
- package/dist/otlp-projections.d.ts.map +1 -0
- package/dist/otlp-projections.js.map +1 -0
- package/dist/otlp-projections.test.d.ts.map +1 -0
- package/dist/otlp-projections.test.js.map +1 -0
- package/dist/otlp-validation.d.ts +40 -0
- package/dist/otlp-validation.d.ts.map +1 -0
- package/dist/otlp-validation.js +110 -0
- package/dist/otlp-validation.js.map +1 -0
- package/dist/otlp-validation.test.d.ts +2 -0
- package/dist/otlp-validation.test.d.ts.map +1 -0
- package/dist/otlp-validation.test.js +160 -0
- package/dist/otlp-validation.test.js.map +1 -0
- package/dist/parse-benchmark-action.d.ts +11 -0
- package/dist/parse-benchmark-action.d.ts.map +1 -0
- package/dist/parse-benchmark-action.js +54 -0
- package/dist/parse-benchmark-action.js.map +1 -0
- package/dist/parse-benchmark-action.test.d.ts +2 -0
- package/dist/parse-benchmark-action.test.d.ts.map +1 -0
- package/dist/parse-benchmark-action.test.js +66 -0
- package/dist/parse-benchmark-action.test.js.map +1 -0
- package/dist/parse-go.d.ts +12 -0
- package/dist/parse-go.d.ts.map +1 -0
- package/dist/parse-go.js +63 -0
- package/dist/parse-go.js.map +1 -0
- package/dist/parse-go.test.d.ts +2 -0
- package/dist/parse-go.test.d.ts.map +1 -0
- package/dist/parse-go.test.js +110 -0
- package/dist/parse-go.test.js.map +1 -0
- package/dist/parse-hyperfine.d.ts +3 -0
- package/dist/parse-hyperfine.d.ts.map +1 -0
- package/dist/parse-hyperfine.js +59 -0
- package/dist/parse-hyperfine.js.map +1 -0
- package/dist/parse-hyperfine.test.d.ts +2 -0
- package/dist/parse-hyperfine.test.d.ts.map +1 -0
- package/dist/parse-hyperfine.test.js +64 -0
- package/dist/parse-hyperfine.test.js.map +1 -0
- package/dist/parse-otlp.d.ts +45 -0
- package/dist/parse-otlp.d.ts.map +1 -0
- package/dist/parse-otlp.js +92 -0
- package/dist/parse-otlp.js.map +1 -0
- package/dist/parse-otlp.test.d.ts +2 -0
- package/dist/parse-otlp.test.d.ts.map +1 -0
- package/dist/parse-otlp.test.js +133 -0
- package/dist/parse-otlp.test.js.map +1 -0
- package/dist/parse-pytest-benchmark.d.ts +3 -0
- package/dist/parse-pytest-benchmark.d.ts.map +1 -0
- package/dist/parse-pytest-benchmark.js +72 -0
- package/dist/parse-pytest-benchmark.js.map +1 -0
- package/dist/parse-pytest-benchmark.test.d.ts +2 -0
- package/dist/parse-pytest-benchmark.test.d.ts.map +1 -0
- package/dist/parse-pytest-benchmark.test.js +85 -0
- package/dist/parse-pytest-benchmark.test.js.map +1 -0
- package/dist/parse-rust.d.ts +9 -0
- package/dist/parse-rust.d.ts.map +1 -0
- package/dist/parse-rust.js +50 -0
- package/dist/parse-rust.js.map +1 -0
- package/dist/parse-rust.test.d.ts +2 -0
- package/dist/parse-rust.test.d.ts.map +1 -0
- package/dist/parse-rust.test.js +62 -0
- package/dist/parse-rust.test.js.map +1 -0
- package/dist/parse.d.ts +7 -0
- package/dist/parse.d.ts.map +1 -0
- package/dist/parse.js +87 -0
- package/dist/parse.js.map +1 -0
- package/dist/parse.test.d.ts +2 -0
- package/dist/parse.test.d.ts.map +1 -0
- package/dist/parse.test.js +171 -0
- package/dist/parse.test.js.map +1 -0
- package/dist/parser-utils.d.ts +17 -0
- package/dist/parser-utils.d.ts.map +1 -0
- package/dist/parser-utils.js +29 -0
- package/dist/parser-utils.js.map +1 -0
- package/dist/parser-utils.test.d.ts +2 -0
- package/dist/parser-utils.test.d.ts.map +1 -0
- package/dist/parser-utils.test.js +27 -0
- package/dist/parser-utils.test.js.map +1 -0
- package/dist/retry.d.ts +6 -0
- package/dist/retry.d.ts.map +1 -0
- package/dist/retry.js +18 -0
- package/dist/retry.js.map +1 -0
- package/dist/retry.test.d.ts +2 -0
- package/dist/retry.test.d.ts.map +1 -0
- package/dist/retry.test.js +29 -0
- package/dist/retry.test.js.map +1 -0
- package/dist/test-otlp-helpers.d.ts.map +1 -0
- package/dist/test-otlp-helpers.js.map +1 -0
- package/dist/types.d.ts +58 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/package.json +22 -0
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.formatComparisonMarkdown = formatComparisonMarkdown;
|
|
4
|
+
const DEFAULT_OPTIONS = {
|
|
5
|
+
currentLabel: "Current",
|
|
6
|
+
baselineLabel: "Baseline",
|
|
7
|
+
maxRegressions: 10,
|
|
8
|
+
includeDetails: true,
|
|
9
|
+
footerHref: "https://github.com/strawgate/benchkit",
|
|
10
|
+
};
|
|
11
|
+
function isMonitorEntry(entry) {
|
|
12
|
+
return entry.benchmark.startsWith("_monitor/");
|
|
13
|
+
}
|
|
14
|
+
function sortAlphabetically(entries) {
|
|
15
|
+
return [...entries].sort((a, b) => {
|
|
16
|
+
if (a.benchmark !== b.benchmark)
|
|
17
|
+
return a.benchmark.localeCompare(b.benchmark);
|
|
18
|
+
return a.metric.localeCompare(b.metric);
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
function formatNumber(value) {
|
|
22
|
+
if (Math.abs(value) >= 1000 || Number.isInteger(value)) {
|
|
23
|
+
return value.toLocaleString("en-US", { maximumFractionDigits: 0 });
|
|
24
|
+
}
|
|
25
|
+
return value.toLocaleString("en-US", { maximumFractionDigits: 2 });
|
|
26
|
+
}
|
|
27
|
+
function formatValue(value, unit) {
|
|
28
|
+
return unit ? `${formatNumber(value)} ${unit}` : formatNumber(value);
|
|
29
|
+
}
|
|
30
|
+
function formatPercent(value) {
|
|
31
|
+
return `${value > 0 ? "+" : ""}${value.toFixed(2)}%`;
|
|
32
|
+
}
|
|
33
|
+
function directionArrow(entry) {
|
|
34
|
+
if (entry.status === "stable")
|
|
35
|
+
return "→";
|
|
36
|
+
if (entry.direction === "smaller_is_better") {
|
|
37
|
+
return entry.status === "regressed" ? "↑" : "↓";
|
|
38
|
+
}
|
|
39
|
+
return entry.status === "regressed" ? "↓" : "↑";
|
|
40
|
+
}
|
|
41
|
+
function statusLabel(entry) {
|
|
42
|
+
return `${entry.status} ${directionArrow(entry)}`;
|
|
43
|
+
}
|
|
44
|
+
function formatCurrentRef(ref) {
|
|
45
|
+
const prMatch = /^refs\/pull\/(\d+)\/merge$/.exec(ref);
|
|
46
|
+
if (prMatch) {
|
|
47
|
+
return `PR #${prMatch[1]}`;
|
|
48
|
+
}
|
|
49
|
+
return ref;
|
|
50
|
+
}
|
|
51
|
+
function formatHeader(options) {
|
|
52
|
+
const lines = [];
|
|
53
|
+
lines.push(`## ${options.title ?? "Benchmark Comparison"}`);
|
|
54
|
+
if (options.currentCommit || options.currentRef) {
|
|
55
|
+
const parts = [
|
|
56
|
+
options.currentCommit ? `commit \`${options.currentCommit.slice(0, 8)}\`` : "",
|
|
57
|
+
options.currentRef ? `ref \`${formatCurrentRef(options.currentRef)}\`` : "",
|
|
58
|
+
].filter(Boolean);
|
|
59
|
+
lines.push(`Comparing results for ${parts.join(" on ")}.`);
|
|
60
|
+
}
|
|
61
|
+
return lines;
|
|
62
|
+
}
|
|
63
|
+
function formatTable(entries, options) {
|
|
64
|
+
const lines = [
|
|
65
|
+
`| Benchmark | Metric | ${options.baselineLabel} | ${options.currentLabel} | Δ% | Status |`,
|
|
66
|
+
"| --- | --- | --- | --- | --- | --- |",
|
|
67
|
+
];
|
|
68
|
+
for (const entry of sortAlphabetically(entries)) {
|
|
69
|
+
lines.push(`| \`${entry.benchmark}\` | \`${entry.metric}\` | ${formatValue(entry.baseline, entry.unit)} | ${formatValue(entry.current, entry.unit)} | ${formatPercent(entry.percentChange)} | ${statusLabel(entry)} |`);
|
|
70
|
+
}
|
|
71
|
+
return lines;
|
|
72
|
+
}
|
|
73
|
+
function groupByMetric(entries) {
|
|
74
|
+
const grouped = new Map();
|
|
75
|
+
for (const entry of entries) {
|
|
76
|
+
const key = entry.metric;
|
|
77
|
+
const existing = grouped.get(key);
|
|
78
|
+
if (existing)
|
|
79
|
+
existing.push(entry);
|
|
80
|
+
else
|
|
81
|
+
grouped.set(key, [entry]);
|
|
82
|
+
}
|
|
83
|
+
return new Map([...grouped.entries()].sort((a, b) => a[0].localeCompare(b[0])));
|
|
84
|
+
}
|
|
85
|
+
function formatComparisonMarkdown(result, options = {}) {
|
|
86
|
+
const resolved = { ...DEFAULT_OPTIONS, ...options };
|
|
87
|
+
const lines = [];
|
|
88
|
+
lines.push(...formatHeader(options));
|
|
89
|
+
lines.push("");
|
|
90
|
+
if (result.entries.length === 0) {
|
|
91
|
+
lines.push("No comparable baseline data found.");
|
|
92
|
+
lines.push("");
|
|
93
|
+
lines.push(`Generated by [benchkit](${resolved.footerHref}).`);
|
|
94
|
+
return lines.join("\n");
|
|
95
|
+
}
|
|
96
|
+
const benchmarkEntries = result.entries.filter((entry) => !isMonitorEntry(entry));
|
|
97
|
+
const monitorEntries = result.entries.filter((entry) => isMonitorEntry(entry));
|
|
98
|
+
const regressions = sortAlphabetically(result.entries.filter((entry) => entry.status === "regressed"));
|
|
99
|
+
if (regressions.length > 0) {
|
|
100
|
+
lines.push("### Regressions");
|
|
101
|
+
lines.push("");
|
|
102
|
+
lines.push(...formatTable(regressions.slice(0, resolved.maxRegressions), resolved));
|
|
103
|
+
if (regressions.length > resolved.maxRegressions) {
|
|
104
|
+
lines.push("");
|
|
105
|
+
lines.push(`Showing ${resolved.maxRegressions} of ${regressions.length} regressions.`);
|
|
106
|
+
}
|
|
107
|
+
lines.push("");
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
lines.push("No regressions detected.");
|
|
111
|
+
lines.push("");
|
|
112
|
+
}
|
|
113
|
+
if (benchmarkEntries.length > 0) {
|
|
114
|
+
lines.push("### Benchmark Metrics");
|
|
115
|
+
lines.push("");
|
|
116
|
+
lines.push(...formatTable(benchmarkEntries, resolved));
|
|
117
|
+
lines.push("");
|
|
118
|
+
}
|
|
119
|
+
if (monitorEntries.length > 0) {
|
|
120
|
+
lines.push("### Monitor Metrics");
|
|
121
|
+
lines.push("");
|
|
122
|
+
lines.push(...formatTable(monitorEntries, resolved));
|
|
123
|
+
lines.push("");
|
|
124
|
+
}
|
|
125
|
+
if (resolved.includeDetails) {
|
|
126
|
+
const grouped = groupByMetric(result.entries);
|
|
127
|
+
lines.push("<details>");
|
|
128
|
+
lines.push("<summary>Per-metric detail</summary>");
|
|
129
|
+
lines.push("");
|
|
130
|
+
for (const [metric, entries] of grouped.entries()) {
|
|
131
|
+
lines.push(`#### \`${metric}\``);
|
|
132
|
+
lines.push("");
|
|
133
|
+
lines.push(...formatTable(entries, resolved));
|
|
134
|
+
lines.push("");
|
|
135
|
+
}
|
|
136
|
+
lines.push("</details>");
|
|
137
|
+
lines.push("");
|
|
138
|
+
}
|
|
139
|
+
lines.push(`Generated by [benchkit](${resolved.footerHref}).`);
|
|
140
|
+
return lines.join("\n");
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=format-comparison-markdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format-comparison-markdown.js","sourceRoot":"","sources":["../src/format-comparison-markdown.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format-comparison-markdown.test.d.ts","sourceRoot":"","sources":["../src/format-comparison-markdown.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const node_test_1 = require("node:test");
|
|
7
|
+
const strict_1 = __importDefault(require("node:assert/strict"));
|
|
8
|
+
const format_comparison_markdown_js_1 = require("./format-comparison-markdown.js");
|
|
9
|
+
function makeResult(entries) {
|
|
10
|
+
return {
|
|
11
|
+
entries,
|
|
12
|
+
hasRegression: entries.some((entry) => entry.status === "regressed"),
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
(0, node_test_1.describe)("formatComparisonMarkdown", () => {
|
|
16
|
+
(0, node_test_1.it)("formats a mixed benchmark and monitor comparison", () => {
|
|
17
|
+
const result = makeResult([
|
|
18
|
+
{
|
|
19
|
+
benchmark: "full-agent-dissect",
|
|
20
|
+
metric: "events_per_sec",
|
|
21
|
+
unit: "events/sec",
|
|
22
|
+
direction: "bigger_is_better",
|
|
23
|
+
baseline: 13240.5,
|
|
24
|
+
current: 12500.25,
|
|
25
|
+
percentChange: -5.59,
|
|
26
|
+
status: "regressed",
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
benchmark: "full-agent-dissect",
|
|
30
|
+
metric: "service_rss_mb",
|
|
31
|
+
unit: "MB",
|
|
32
|
+
direction: "smaller_is_better",
|
|
33
|
+
baseline: 543.1,
|
|
34
|
+
current: 520.2,
|
|
35
|
+
percentChange: -4.22,
|
|
36
|
+
status: "improved",
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
benchmark: "_monitor/system",
|
|
40
|
+
metric: "cpu_user_pct",
|
|
41
|
+
unit: "%",
|
|
42
|
+
direction: "smaller_is_better",
|
|
43
|
+
baseline: 67.4,
|
|
44
|
+
current: 71.2,
|
|
45
|
+
percentChange: 5.64,
|
|
46
|
+
status: "regressed",
|
|
47
|
+
},
|
|
48
|
+
]);
|
|
49
|
+
const markdown = (0, format_comparison_markdown_js_1.formatComparisonMarkdown)(result, {
|
|
50
|
+
title: "PR benchmark comparison",
|
|
51
|
+
currentCommit: "abcdef1234567890",
|
|
52
|
+
currentRef: "refs/pull/42/merge",
|
|
53
|
+
currentLabel: "PR",
|
|
54
|
+
baselineLabel: "main",
|
|
55
|
+
});
|
|
56
|
+
strict_1.default.equal(markdown, `## PR benchmark comparison
|
|
57
|
+
Comparing results for commit \`abcdef12\` on ref \`PR #42\`.
|
|
58
|
+
|
|
59
|
+
### Regressions
|
|
60
|
+
|
|
61
|
+
| Benchmark | Metric | main | PR | Δ% | Status |
|
|
62
|
+
| --- | --- | --- | --- | --- | --- |
|
|
63
|
+
| \`_monitor/system\` | \`cpu_user_pct\` | 67.4 % | 71.2 % | +5.64% | regressed ↑ |
|
|
64
|
+
| \`full-agent-dissect\` | \`events_per_sec\` | 13,241 events/sec | 12,500 events/sec | -5.59% | regressed ↓ |
|
|
65
|
+
|
|
66
|
+
### Benchmark Metrics
|
|
67
|
+
|
|
68
|
+
| Benchmark | Metric | main | PR | Δ% | Status |
|
|
69
|
+
| --- | --- | --- | --- | --- | --- |
|
|
70
|
+
| \`full-agent-dissect\` | \`events_per_sec\` | 13,241 events/sec | 12,500 events/sec | -5.59% | regressed ↓ |
|
|
71
|
+
| \`full-agent-dissect\` | \`service_rss_mb\` | 543.1 MB | 520.2 MB | -4.22% | improved ↓ |
|
|
72
|
+
|
|
73
|
+
### Monitor Metrics
|
|
74
|
+
|
|
75
|
+
| Benchmark | Metric | main | PR | Δ% | Status |
|
|
76
|
+
| --- | --- | --- | --- | --- | --- |
|
|
77
|
+
| \`_monitor/system\` | \`cpu_user_pct\` | 67.4 % | 71.2 % | +5.64% | regressed ↑ |
|
|
78
|
+
|
|
79
|
+
<details>
|
|
80
|
+
<summary>Per-metric detail</summary>
|
|
81
|
+
|
|
82
|
+
#### \`cpu_user_pct\`
|
|
83
|
+
|
|
84
|
+
| Benchmark | Metric | main | PR | Δ% | Status |
|
|
85
|
+
| --- | --- | --- | --- | --- | --- |
|
|
86
|
+
| \`_monitor/system\` | \`cpu_user_pct\` | 67.4 % | 71.2 % | +5.64% | regressed ↑ |
|
|
87
|
+
|
|
88
|
+
#### \`events_per_sec\`
|
|
89
|
+
|
|
90
|
+
| Benchmark | Metric | main | PR | Δ% | Status |
|
|
91
|
+
| --- | --- | --- | --- | --- | --- |
|
|
92
|
+
| \`full-agent-dissect\` | \`events_per_sec\` | 13,241 events/sec | 12,500 events/sec | -5.59% | regressed ↓ |
|
|
93
|
+
|
|
94
|
+
#### \`service_rss_mb\`
|
|
95
|
+
|
|
96
|
+
| Benchmark | Metric | main | PR | Δ% | Status |
|
|
97
|
+
| --- | --- | --- | --- | --- | --- |
|
|
98
|
+
| \`full-agent-dissect\` | \`service_rss_mb\` | 543.1 MB | 520.2 MB | -4.22% | improved ↓ |
|
|
99
|
+
|
|
100
|
+
</details>
|
|
101
|
+
|
|
102
|
+
Generated by [benchkit](https://github.com/strawgate/benchkit).`);
|
|
103
|
+
});
|
|
104
|
+
(0, node_test_1.it)("keeps non-PR refs unchanged in the header", () => {
|
|
105
|
+
const markdown = (0, format_comparison_markdown_js_1.formatComparisonMarkdown)(makeResult([]), {
|
|
106
|
+
title: "Comparison summary",
|
|
107
|
+
currentRef: "refs/heads/main",
|
|
108
|
+
});
|
|
109
|
+
strict_1.default.match(markdown, /ref `refs\/heads\/main`/);
|
|
110
|
+
});
|
|
111
|
+
(0, node_test_1.it)("keeps refs/pull/N/head unchanged in the header", () => {
|
|
112
|
+
const markdown = (0, format_comparison_markdown_js_1.formatComparisonMarkdown)(makeResult([]), {
|
|
113
|
+
title: "Comparison summary",
|
|
114
|
+
currentRef: "refs/pull/42/head",
|
|
115
|
+
});
|
|
116
|
+
strict_1.default.match(markdown, /ref `refs\/pull\/42\/head`/);
|
|
117
|
+
});
|
|
118
|
+
(0, node_test_1.it)("reports no regressions cleanly", () => {
|
|
119
|
+
const result = makeResult([
|
|
120
|
+
{
|
|
121
|
+
benchmark: "passthrough",
|
|
122
|
+
metric: "events_per_sec",
|
|
123
|
+
unit: "events/sec",
|
|
124
|
+
direction: "bigger_is_better",
|
|
125
|
+
baseline: 1000,
|
|
126
|
+
current: 1100,
|
|
127
|
+
percentChange: 10,
|
|
128
|
+
status: "improved",
|
|
129
|
+
},
|
|
130
|
+
]);
|
|
131
|
+
const markdown = (0, format_comparison_markdown_js_1.formatComparisonMarkdown)(result, { includeDetails: false });
|
|
132
|
+
strict_1.default.match(markdown, /No regressions detected\./);
|
|
133
|
+
strict_1.default.match(markdown, /### Benchmark Metrics/);
|
|
134
|
+
strict_1.default.doesNotMatch(markdown, /Per-metric detail/);
|
|
135
|
+
});
|
|
136
|
+
(0, node_test_1.it)("handles empty comparisons as no baseline data", () => {
|
|
137
|
+
const markdown = (0, format_comparison_markdown_js_1.formatComparisonMarkdown)(makeResult([]), {
|
|
138
|
+
title: "Comparison summary",
|
|
139
|
+
});
|
|
140
|
+
strict_1.default.equal(markdown, `## Comparison summary
|
|
141
|
+
|
|
142
|
+
No comparable baseline data found.
|
|
143
|
+
|
|
144
|
+
Generated by [benchkit](https://github.com/strawgate/benchkit).`);
|
|
145
|
+
});
|
|
146
|
+
(0, node_test_1.it)("limits the regression summary when maxRegressions is set", () => {
|
|
147
|
+
const result = makeResult([
|
|
148
|
+
{
|
|
149
|
+
benchmark: "bench-a",
|
|
150
|
+
metric: "ns_per_op",
|
|
151
|
+
unit: "ns/op",
|
|
152
|
+
direction: "smaller_is_better",
|
|
153
|
+
baseline: 100,
|
|
154
|
+
current: 120,
|
|
155
|
+
percentChange: 20,
|
|
156
|
+
status: "regressed",
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
benchmark: "bench-b",
|
|
160
|
+
metric: "ns_per_op",
|
|
161
|
+
unit: "ns/op",
|
|
162
|
+
direction: "smaller_is_better",
|
|
163
|
+
baseline: 100,
|
|
164
|
+
current: 125,
|
|
165
|
+
percentChange: 25,
|
|
166
|
+
status: "regressed",
|
|
167
|
+
},
|
|
168
|
+
]);
|
|
169
|
+
const markdown = (0, format_comparison_markdown_js_1.formatComparisonMarkdown)(result, { maxRegressions: 1 });
|
|
170
|
+
strict_1.default.match(markdown, /Showing 1 of 2 regressions\./);
|
|
171
|
+
});
|
|
172
|
+
});
|
|
173
|
+
//# sourceMappingURL=format-comparison-markdown.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format-comparison-markdown.test.js","sourceRoot":"","sources":["../src/format-comparison-markdown.test.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export type { MetricDirection, BenchkitRunKind, OtlpAggregationTemporality, OtlpAttribute, OtlpAnyValue, OtlpGaugeDataPoint, OtlpHistogramDataPoint, OtlpGaugeMetric, OtlpSumMetric, OtlpHistogramMetric, OtlpMetric, OtlpScopeMetrics, OtlpResource, OtlpResourceMetrics, OtlpMetricsDocument, Sample, MonitorContext, SeriesFile, SeriesEntry, DataPoint, IndexFile, RunEntry, ComparisonResult, ComparisonEntry, ComparisonStatus, FormatComparisonMarkdownOptions, ThresholdConfig, RefIndexEntry, PrIndexEntry, RunSnapshotMetric, RunDetailMetricSnapshot, RunDetailView, MetricSummaryEntry, } from "./types.js";
|
|
2
|
+
/** Parse benchmark output in any supported format (auto-detect, go, native, benchmark-action). */
|
|
3
|
+
export { parseBenchmarks } from "./parse.js";
|
|
4
|
+
export type { Format } from "./parse.js";
|
|
5
|
+
/** Infer the `direction` ("smaller_is_better" / "bigger_is_better") from a metric unit string. */
|
|
6
|
+
export { inferDirection } from "./infer-direction.js";
|
|
7
|
+
/** Convert a benchmark unit string to a normalized metric name (e.g. "ns/op" -> "ns_per_op"). */
|
|
8
|
+
export { unitToMetricName } from "./parser-utils.js";
|
|
9
|
+
/** Parse Go testing/benchmark output text. */
|
|
10
|
+
export { parseGoBench } from "./parse-go.js";
|
|
11
|
+
/** Parse Rust cargo bench (libtest) output text. */
|
|
12
|
+
export { parseRustBench } from "./parse-rust.js";
|
|
13
|
+
/** Parse benchmark-action/github-action-benchmark JSON format. */
|
|
14
|
+
export { parseBenchmarkAction } from "./parse-benchmark-action.js";
|
|
15
|
+
/** Parse Hyperfine JSON format. */
|
|
16
|
+
export { parseHyperfine } from "./parse-hyperfine.js";
|
|
17
|
+
/** Parse pytest-benchmark JSON format. */
|
|
18
|
+
export { parsePytestBenchmark } from "./parse-pytest-benchmark.js";
|
|
19
|
+
/** Parse OTLP metrics JSON. */
|
|
20
|
+
export { parseOtlp, otlpAttributesToRecord, getOtlpMetricKind, getOtlpTemporality, } from "./parse-otlp.js";
|
|
21
|
+
/** OTLP semantic convention constants — attribute names, valid values, reserved keys. */
|
|
22
|
+
export { ATTR_RUN_ID, ATTR_KIND, ATTR_SOURCE_FORMAT, ATTR_REF, ATTR_COMMIT, ATTR_WORKFLOW, ATTR_JOB, ATTR_RUN_ATTEMPT, ATTR_RUNNER, ATTR_SERVICE_NAME, ATTR_SERVICE_VERSION, ATTR_SCENARIO, ATTR_SERIES, ATTR_METRIC_DIRECTION, ATTR_METRIC_ROLE, ATTR_IMPL, ATTR_DATASET, ATTR_TRANSPORT, ATTR_BATCH_SIZE, ATTR_PROCESS, ATTR_PIPELINE, ATTR_VARIANT, REQUIRED_RESOURCE_ATTRIBUTES, RESERVED_DATAPOINT_ATTRIBUTES, VALID_RUN_KINDS, VALID_DIRECTIONS, VALID_METRIC_ROLES, VALID_SOURCE_FORMATS, MONITOR_METRIC_PREFIX, DEFAULT_DATA_BRANCH, } from "./otlp-conventions.js";
|
|
23
|
+
export type { RunKind, Direction, MetricRole, SourceFormat } from "./otlp-conventions.js";
|
|
24
|
+
/** Runtime validators for the benchkit OTLP semantic contract. */
|
|
25
|
+
export { validateRequiredResourceAttributes, validateRequiredDatapointAttributes, validateRunKind, validateDirection, validateMetricRole, validateSourceFormat, isValidRunKind, isValidDirection, isValidMetricRole, isValidSourceFormat, isMonitorMetric, } from "./otlp-validation.js";
|
|
26
|
+
/** Compare a current benchmark run against baseline runs to detect regressions. */
|
|
27
|
+
export { compareRuns } from "./compare.js";
|
|
28
|
+
/** Format a ComparisonResult as markdown for job summaries and PR comments. */
|
|
29
|
+
export { formatComparisonMarkdown } from "./format-comparison-markdown.js";
|
|
30
|
+
/** Retry helpers for push operations. */
|
|
31
|
+
export { computeRetryDelayMs, sleep, DEFAULT_PUSH_RETRY_COUNT, RETRY_DELAY_MIN_MS, RETRY_DELAY_MAX_MS } from "./retry.js";
|
|
32
|
+
/** Build an OtlpMetricsDocument from a simple benchmark input shape. */
|
|
33
|
+
export { buildOtlpResult } from "./build-otlp-result.js";
|
|
34
|
+
export type { OtlpResultMetric, OtlpResultBenchmark, OtlpResultContext, BuildOtlpResultOptions } from "./build-otlp-result.js";
|
|
35
|
+
/** Ergonomic batch wrapper over OtlpMetricsDocument. */
|
|
36
|
+
export { MetricsBatch, seriesKey } from "./metrics-batch.js";
|
|
37
|
+
export type { MetricPoint, ResourceContext } from "./metrics-batch.js";
|
|
38
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isValidDirection = exports.isValidRunKind = exports.validateSourceFormat = exports.validateMetricRole = exports.validateDirection = exports.validateRunKind = exports.validateRequiredDatapointAttributes = exports.validateRequiredResourceAttributes = exports.DEFAULT_DATA_BRANCH = exports.MONITOR_METRIC_PREFIX = exports.VALID_SOURCE_FORMATS = exports.VALID_METRIC_ROLES = exports.VALID_DIRECTIONS = exports.VALID_RUN_KINDS = exports.RESERVED_DATAPOINT_ATTRIBUTES = exports.REQUIRED_RESOURCE_ATTRIBUTES = exports.ATTR_VARIANT = exports.ATTR_PIPELINE = exports.ATTR_PROCESS = exports.ATTR_BATCH_SIZE = exports.ATTR_TRANSPORT = exports.ATTR_DATASET = exports.ATTR_IMPL = exports.ATTR_METRIC_ROLE = exports.ATTR_METRIC_DIRECTION = exports.ATTR_SERIES = exports.ATTR_SCENARIO = exports.ATTR_SERVICE_VERSION = exports.ATTR_SERVICE_NAME = exports.ATTR_RUNNER = exports.ATTR_RUN_ATTEMPT = exports.ATTR_JOB = exports.ATTR_WORKFLOW = exports.ATTR_COMMIT = exports.ATTR_REF = exports.ATTR_SOURCE_FORMAT = exports.ATTR_KIND = exports.ATTR_RUN_ID = exports.getOtlpTemporality = exports.getOtlpMetricKind = exports.otlpAttributesToRecord = exports.parseOtlp = exports.parsePytestBenchmark = exports.parseHyperfine = exports.parseBenchmarkAction = exports.parseRustBench = exports.parseGoBench = exports.unitToMetricName = exports.inferDirection = exports.parseBenchmarks = void 0;
|
|
4
|
+
exports.seriesKey = exports.MetricsBatch = exports.buildOtlpResult = exports.RETRY_DELAY_MAX_MS = exports.RETRY_DELAY_MIN_MS = exports.DEFAULT_PUSH_RETRY_COUNT = exports.sleep = exports.computeRetryDelayMs = exports.formatComparisonMarkdown = exports.compareRuns = exports.isMonitorMetric = exports.isValidSourceFormat = exports.isValidMetricRole = void 0;
|
|
5
|
+
/** Parse benchmark output in any supported format (auto-detect, go, native, benchmark-action). */
|
|
6
|
+
var parse_js_1 = require("./parse.js");
|
|
7
|
+
Object.defineProperty(exports, "parseBenchmarks", { enumerable: true, get: function () { return parse_js_1.parseBenchmarks; } });
|
|
8
|
+
/** Infer the `direction` ("smaller_is_better" / "bigger_is_better") from a metric unit string. */
|
|
9
|
+
var infer_direction_js_1 = require("./infer-direction.js");
|
|
10
|
+
Object.defineProperty(exports, "inferDirection", { enumerable: true, get: function () { return infer_direction_js_1.inferDirection; } });
|
|
11
|
+
/** Convert a benchmark unit string to a normalized metric name (e.g. "ns/op" -> "ns_per_op"). */
|
|
12
|
+
var parser_utils_js_1 = require("./parser-utils.js");
|
|
13
|
+
Object.defineProperty(exports, "unitToMetricName", { enumerable: true, get: function () { return parser_utils_js_1.unitToMetricName; } });
|
|
14
|
+
/** Parse Go testing/benchmark output text. */
|
|
15
|
+
var parse_go_js_1 = require("./parse-go.js");
|
|
16
|
+
Object.defineProperty(exports, "parseGoBench", { enumerable: true, get: function () { return parse_go_js_1.parseGoBench; } });
|
|
17
|
+
/** Parse Rust cargo bench (libtest) output text. */
|
|
18
|
+
var parse_rust_js_1 = require("./parse-rust.js");
|
|
19
|
+
Object.defineProperty(exports, "parseRustBench", { enumerable: true, get: function () { return parse_rust_js_1.parseRustBench; } });
|
|
20
|
+
/** Parse benchmark-action/github-action-benchmark JSON format. */
|
|
21
|
+
var parse_benchmark_action_js_1 = require("./parse-benchmark-action.js");
|
|
22
|
+
Object.defineProperty(exports, "parseBenchmarkAction", { enumerable: true, get: function () { return parse_benchmark_action_js_1.parseBenchmarkAction; } });
|
|
23
|
+
/** Parse Hyperfine JSON format. */
|
|
24
|
+
var parse_hyperfine_js_1 = require("./parse-hyperfine.js");
|
|
25
|
+
Object.defineProperty(exports, "parseHyperfine", { enumerable: true, get: function () { return parse_hyperfine_js_1.parseHyperfine; } });
|
|
26
|
+
/** Parse pytest-benchmark JSON format. */
|
|
27
|
+
var parse_pytest_benchmark_js_1 = require("./parse-pytest-benchmark.js");
|
|
28
|
+
Object.defineProperty(exports, "parsePytestBenchmark", { enumerable: true, get: function () { return parse_pytest_benchmark_js_1.parsePytestBenchmark; } });
|
|
29
|
+
/** Parse OTLP metrics JSON. */
|
|
30
|
+
var parse_otlp_js_1 = require("./parse-otlp.js");
|
|
31
|
+
Object.defineProperty(exports, "parseOtlp", { enumerable: true, get: function () { return parse_otlp_js_1.parseOtlp; } });
|
|
32
|
+
Object.defineProperty(exports, "otlpAttributesToRecord", { enumerable: true, get: function () { return parse_otlp_js_1.otlpAttributesToRecord; } });
|
|
33
|
+
Object.defineProperty(exports, "getOtlpMetricKind", { enumerable: true, get: function () { return parse_otlp_js_1.getOtlpMetricKind; } });
|
|
34
|
+
Object.defineProperty(exports, "getOtlpTemporality", { enumerable: true, get: function () { return parse_otlp_js_1.getOtlpTemporality; } });
|
|
35
|
+
/** OTLP semantic convention constants — attribute names, valid values, reserved keys. */
|
|
36
|
+
var otlp_conventions_js_1 = require("./otlp-conventions.js");
|
|
37
|
+
Object.defineProperty(exports, "ATTR_RUN_ID", { enumerable: true, get: function () { return otlp_conventions_js_1.ATTR_RUN_ID; } });
|
|
38
|
+
Object.defineProperty(exports, "ATTR_KIND", { enumerable: true, get: function () { return otlp_conventions_js_1.ATTR_KIND; } });
|
|
39
|
+
Object.defineProperty(exports, "ATTR_SOURCE_FORMAT", { enumerable: true, get: function () { return otlp_conventions_js_1.ATTR_SOURCE_FORMAT; } });
|
|
40
|
+
Object.defineProperty(exports, "ATTR_REF", { enumerable: true, get: function () { return otlp_conventions_js_1.ATTR_REF; } });
|
|
41
|
+
Object.defineProperty(exports, "ATTR_COMMIT", { enumerable: true, get: function () { return otlp_conventions_js_1.ATTR_COMMIT; } });
|
|
42
|
+
Object.defineProperty(exports, "ATTR_WORKFLOW", { enumerable: true, get: function () { return otlp_conventions_js_1.ATTR_WORKFLOW; } });
|
|
43
|
+
Object.defineProperty(exports, "ATTR_JOB", { enumerable: true, get: function () { return otlp_conventions_js_1.ATTR_JOB; } });
|
|
44
|
+
Object.defineProperty(exports, "ATTR_RUN_ATTEMPT", { enumerable: true, get: function () { return otlp_conventions_js_1.ATTR_RUN_ATTEMPT; } });
|
|
45
|
+
Object.defineProperty(exports, "ATTR_RUNNER", { enumerable: true, get: function () { return otlp_conventions_js_1.ATTR_RUNNER; } });
|
|
46
|
+
Object.defineProperty(exports, "ATTR_SERVICE_NAME", { enumerable: true, get: function () { return otlp_conventions_js_1.ATTR_SERVICE_NAME; } });
|
|
47
|
+
Object.defineProperty(exports, "ATTR_SERVICE_VERSION", { enumerable: true, get: function () { return otlp_conventions_js_1.ATTR_SERVICE_VERSION; } });
|
|
48
|
+
Object.defineProperty(exports, "ATTR_SCENARIO", { enumerable: true, get: function () { return otlp_conventions_js_1.ATTR_SCENARIO; } });
|
|
49
|
+
Object.defineProperty(exports, "ATTR_SERIES", { enumerable: true, get: function () { return otlp_conventions_js_1.ATTR_SERIES; } });
|
|
50
|
+
Object.defineProperty(exports, "ATTR_METRIC_DIRECTION", { enumerable: true, get: function () { return otlp_conventions_js_1.ATTR_METRIC_DIRECTION; } });
|
|
51
|
+
Object.defineProperty(exports, "ATTR_METRIC_ROLE", { enumerable: true, get: function () { return otlp_conventions_js_1.ATTR_METRIC_ROLE; } });
|
|
52
|
+
Object.defineProperty(exports, "ATTR_IMPL", { enumerable: true, get: function () { return otlp_conventions_js_1.ATTR_IMPL; } });
|
|
53
|
+
Object.defineProperty(exports, "ATTR_DATASET", { enumerable: true, get: function () { return otlp_conventions_js_1.ATTR_DATASET; } });
|
|
54
|
+
Object.defineProperty(exports, "ATTR_TRANSPORT", { enumerable: true, get: function () { return otlp_conventions_js_1.ATTR_TRANSPORT; } });
|
|
55
|
+
Object.defineProperty(exports, "ATTR_BATCH_SIZE", { enumerable: true, get: function () { return otlp_conventions_js_1.ATTR_BATCH_SIZE; } });
|
|
56
|
+
Object.defineProperty(exports, "ATTR_PROCESS", { enumerable: true, get: function () { return otlp_conventions_js_1.ATTR_PROCESS; } });
|
|
57
|
+
Object.defineProperty(exports, "ATTR_PIPELINE", { enumerable: true, get: function () { return otlp_conventions_js_1.ATTR_PIPELINE; } });
|
|
58
|
+
Object.defineProperty(exports, "ATTR_VARIANT", { enumerable: true, get: function () { return otlp_conventions_js_1.ATTR_VARIANT; } });
|
|
59
|
+
Object.defineProperty(exports, "REQUIRED_RESOURCE_ATTRIBUTES", { enumerable: true, get: function () { return otlp_conventions_js_1.REQUIRED_RESOURCE_ATTRIBUTES; } });
|
|
60
|
+
Object.defineProperty(exports, "RESERVED_DATAPOINT_ATTRIBUTES", { enumerable: true, get: function () { return otlp_conventions_js_1.RESERVED_DATAPOINT_ATTRIBUTES; } });
|
|
61
|
+
Object.defineProperty(exports, "VALID_RUN_KINDS", { enumerable: true, get: function () { return otlp_conventions_js_1.VALID_RUN_KINDS; } });
|
|
62
|
+
Object.defineProperty(exports, "VALID_DIRECTIONS", { enumerable: true, get: function () { return otlp_conventions_js_1.VALID_DIRECTIONS; } });
|
|
63
|
+
Object.defineProperty(exports, "VALID_METRIC_ROLES", { enumerable: true, get: function () { return otlp_conventions_js_1.VALID_METRIC_ROLES; } });
|
|
64
|
+
Object.defineProperty(exports, "VALID_SOURCE_FORMATS", { enumerable: true, get: function () { return otlp_conventions_js_1.VALID_SOURCE_FORMATS; } });
|
|
65
|
+
Object.defineProperty(exports, "MONITOR_METRIC_PREFIX", { enumerable: true, get: function () { return otlp_conventions_js_1.MONITOR_METRIC_PREFIX; } });
|
|
66
|
+
Object.defineProperty(exports, "DEFAULT_DATA_BRANCH", { enumerable: true, get: function () { return otlp_conventions_js_1.DEFAULT_DATA_BRANCH; } });
|
|
67
|
+
/** Runtime validators for the benchkit OTLP semantic contract. */
|
|
68
|
+
var otlp_validation_js_1 = require("./otlp-validation.js");
|
|
69
|
+
Object.defineProperty(exports, "validateRequiredResourceAttributes", { enumerable: true, get: function () { return otlp_validation_js_1.validateRequiredResourceAttributes; } });
|
|
70
|
+
Object.defineProperty(exports, "validateRequiredDatapointAttributes", { enumerable: true, get: function () { return otlp_validation_js_1.validateRequiredDatapointAttributes; } });
|
|
71
|
+
Object.defineProperty(exports, "validateRunKind", { enumerable: true, get: function () { return otlp_validation_js_1.validateRunKind; } });
|
|
72
|
+
Object.defineProperty(exports, "validateDirection", { enumerable: true, get: function () { return otlp_validation_js_1.validateDirection; } });
|
|
73
|
+
Object.defineProperty(exports, "validateMetricRole", { enumerable: true, get: function () { return otlp_validation_js_1.validateMetricRole; } });
|
|
74
|
+
Object.defineProperty(exports, "validateSourceFormat", { enumerable: true, get: function () { return otlp_validation_js_1.validateSourceFormat; } });
|
|
75
|
+
Object.defineProperty(exports, "isValidRunKind", { enumerable: true, get: function () { return otlp_validation_js_1.isValidRunKind; } });
|
|
76
|
+
Object.defineProperty(exports, "isValidDirection", { enumerable: true, get: function () { return otlp_validation_js_1.isValidDirection; } });
|
|
77
|
+
Object.defineProperty(exports, "isValidMetricRole", { enumerable: true, get: function () { return otlp_validation_js_1.isValidMetricRole; } });
|
|
78
|
+
Object.defineProperty(exports, "isValidSourceFormat", { enumerable: true, get: function () { return otlp_validation_js_1.isValidSourceFormat; } });
|
|
79
|
+
Object.defineProperty(exports, "isMonitorMetric", { enumerable: true, get: function () { return otlp_validation_js_1.isMonitorMetric; } });
|
|
80
|
+
/** Compare a current benchmark run against baseline runs to detect regressions. */
|
|
81
|
+
var compare_js_1 = require("./compare.js");
|
|
82
|
+
Object.defineProperty(exports, "compareRuns", { enumerable: true, get: function () { return compare_js_1.compareRuns; } });
|
|
83
|
+
/** Format a ComparisonResult as markdown for job summaries and PR comments. */
|
|
84
|
+
var format_comparison_markdown_js_1 = require("./format-comparison-markdown.js");
|
|
85
|
+
Object.defineProperty(exports, "formatComparisonMarkdown", { enumerable: true, get: function () { return format_comparison_markdown_js_1.formatComparisonMarkdown; } });
|
|
86
|
+
/** Retry helpers for push operations. */
|
|
87
|
+
var retry_js_1 = require("./retry.js");
|
|
88
|
+
Object.defineProperty(exports, "computeRetryDelayMs", { enumerable: true, get: function () { return retry_js_1.computeRetryDelayMs; } });
|
|
89
|
+
Object.defineProperty(exports, "sleep", { enumerable: true, get: function () { return retry_js_1.sleep; } });
|
|
90
|
+
Object.defineProperty(exports, "DEFAULT_PUSH_RETRY_COUNT", { enumerable: true, get: function () { return retry_js_1.DEFAULT_PUSH_RETRY_COUNT; } });
|
|
91
|
+
Object.defineProperty(exports, "RETRY_DELAY_MIN_MS", { enumerable: true, get: function () { return retry_js_1.RETRY_DELAY_MIN_MS; } });
|
|
92
|
+
Object.defineProperty(exports, "RETRY_DELAY_MAX_MS", { enumerable: true, get: function () { return retry_js_1.RETRY_DELAY_MAX_MS; } });
|
|
93
|
+
/** Build an OtlpMetricsDocument from a simple benchmark input shape. */
|
|
94
|
+
var build_otlp_result_js_1 = require("./build-otlp-result.js");
|
|
95
|
+
Object.defineProperty(exports, "buildOtlpResult", { enumerable: true, get: function () { return build_otlp_result_js_1.buildOtlpResult; } });
|
|
96
|
+
/** Ergonomic batch wrapper over OtlpMetricsDocument. */
|
|
97
|
+
var metrics_batch_js_1 = require("./metrics-batch.js");
|
|
98
|
+
Object.defineProperty(exports, "MetricsBatch", { enumerable: true, get: function () { return metrics_batch_js_1.MetricsBatch; } });
|
|
99
|
+
Object.defineProperty(exports, "seriesKey", { enumerable: true, get: function () { return metrics_batch_js_1.seriesKey; } });
|
|
100
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;AAoCA,kGAAkG;AAClG,uCAA6C;AAApC,2GAAA,eAAe,OAAA;AAExB,kGAAkG;AAClG,2DAAsD;AAA7C,oHAAA,cAAc,OAAA;AACvB,iGAAiG;AACjG,qDAAqD;AAA5C,mHAAA,gBAAgB,OAAA;AACzB,8CAA8C;AAC9C,6CAA6C;AAApC,2GAAA,YAAY,OAAA;AACrB,oDAAoD;AACpD,iDAAiD;AAAxC,+GAAA,cAAc,OAAA;AACvB,kEAAkE;AAClE,yEAAmE;AAA1D,iIAAA,oBAAoB,OAAA;AAC7B,mCAAmC;AACnC,2DAAsD;AAA7C,oHAAA,cAAc,OAAA;AACvB,0CAA0C;AAC1C,yEAAmE;AAA1D,iIAAA,oBAAoB,OAAA;AAC7B,+BAA+B;AAC/B,iDAKyB;AAJvB,0GAAA,SAAS,OAAA;AACT,uHAAA,sBAAsB,OAAA;AACtB,kHAAA,iBAAiB,OAAA;AACjB,mHAAA,kBAAkB,OAAA;AAEpB,yFAAyF;AACzF,6DA+B+B;AA9B7B,kHAAA,WAAW,OAAA;AACX,gHAAA,SAAS,OAAA;AACT,yHAAA,kBAAkB,OAAA;AAClB,+GAAA,QAAQ,OAAA;AACR,kHAAA,WAAW,OAAA;AACX,oHAAA,aAAa,OAAA;AACb,+GAAA,QAAQ,OAAA;AACR,uHAAA,gBAAgB,OAAA;AAChB,kHAAA,WAAW,OAAA;AACX,wHAAA,iBAAiB,OAAA;AACjB,2HAAA,oBAAoB,OAAA;AACpB,oHAAA,aAAa,OAAA;AACb,kHAAA,WAAW,OAAA;AACX,4HAAA,qBAAqB,OAAA;AACrB,uHAAA,gBAAgB,OAAA;AAChB,gHAAA,SAAS,OAAA;AACT,mHAAA,YAAY,OAAA;AACZ,qHAAA,cAAc,OAAA;AACd,sHAAA,eAAe,OAAA;AACf,mHAAA,YAAY,OAAA;AACZ,oHAAA,aAAa,OAAA;AACb,mHAAA,YAAY,OAAA;AACZ,mIAAA,4BAA4B,OAAA;AAC5B,oIAAA,6BAA6B,OAAA;AAC7B,sHAAA,eAAe,OAAA;AACf,uHAAA,gBAAgB,OAAA;AAChB,yHAAA,kBAAkB,OAAA;AAClB,2HAAA,oBAAoB,OAAA;AACpB,4HAAA,qBAAqB,OAAA;AACrB,0HAAA,mBAAmB,OAAA;AAGrB,kEAAkE;AAClE,2DAY8B;AAX5B,wIAAA,kCAAkC,OAAA;AAClC,yIAAA,mCAAmC,OAAA;AACnC,qHAAA,eAAe,OAAA;AACf,uHAAA,iBAAiB,OAAA;AACjB,wHAAA,kBAAkB,OAAA;AAClB,0HAAA,oBAAoB,OAAA;AACpB,oHAAA,cAAc,OAAA;AACd,sHAAA,gBAAgB,OAAA;AAChB,uHAAA,iBAAiB,OAAA;AACjB,yHAAA,mBAAmB,OAAA;AACnB,qHAAA,eAAe,OAAA;AAEjB,mFAAmF;AACnF,2CAA2C;AAAlC,yGAAA,WAAW,OAAA;AACpB,+EAA+E;AAC/E,iFAA2E;AAAlE,yIAAA,wBAAwB,OAAA;AACjC,yCAAyC;AACzC,uCAA0H;AAAjH,+GAAA,mBAAmB,OAAA;AAAE,iGAAA,KAAK,OAAA;AAAE,oHAAA,wBAAwB,OAAA;AAAE,8GAAA,kBAAkB,OAAA;AAAE,8GAAA,kBAAkB,OAAA;AACrG,wEAAwE;AACxE,+DAAyD;AAAhD,uHAAA,eAAe,OAAA;AAExB,wDAAwD;AACxD,uDAA6D;AAApD,gHAAA,YAAY,OAAA;AAAE,6GAAA,SAAS,OAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Direction } from "./otlp-conventions.js";
|
|
2
|
+
/**
|
|
3
|
+
* Infer whether a unit is "bigger_is_better" or "smaller_is_better".
|
|
4
|
+
*
|
|
5
|
+
* Common patterns:
|
|
6
|
+
* - ops/s, MB/s, throughput, events → bigger is better
|
|
7
|
+
* - ns/op, B/op, allocs/op, ms, bytes → smaller is better (default)
|
|
8
|
+
*/
|
|
9
|
+
export declare function inferDirection(unit: string): NonNullable<Direction>;
|
|
10
|
+
//# sourceMappingURL=infer-direction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"infer-direction.d.ts","sourceRoot":"","sources":["../src/infer-direction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEvD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC,SAAS,CAAC,CAenE"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.inferDirection = inferDirection;
|
|
4
|
+
/**
|
|
5
|
+
* Infer whether a unit is "bigger_is_better" or "smaller_is_better".
|
|
6
|
+
*
|
|
7
|
+
* Common patterns:
|
|
8
|
+
* - ops/s, MB/s, throughput, events → bigger is better
|
|
9
|
+
* - ns/op, B/op, allocs/op, ms, bytes → smaller is better (default)
|
|
10
|
+
*/
|
|
11
|
+
function inferDirection(unit) {
|
|
12
|
+
const lower = unit.toLowerCase();
|
|
13
|
+
if (lower.includes("ops/s") ||
|
|
14
|
+
lower.includes("op/s") ||
|
|
15
|
+
lower.includes("/sec") ||
|
|
16
|
+
lower.includes("mb/s") ||
|
|
17
|
+
lower.includes("throughput") ||
|
|
18
|
+
lower.includes("events")) {
|
|
19
|
+
return "bigger_is_better";
|
|
20
|
+
}
|
|
21
|
+
return "smaller_is_better";
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=infer-direction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"infer-direction.js","sourceRoot":"","sources":["../src/infer-direction.ts"],"names":[],"mappings":";;AASA,wCAeC;AAtBD;;;;;;GAMG;AACH,SAAgB,cAAc,CAAC,IAAY;IACzC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAEjC,IACE,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;QACvB,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;QACtB,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;QACtB,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;QACtB,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC5B,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EACxB,CAAC;QACD,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAED,OAAO,mBAAmB,CAAC;AAC7B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"infer-direction.test.d.ts","sourceRoot":"","sources":["../src/infer-direction.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const node_test_1 = require("node:test");
|
|
7
|
+
const strict_1 = __importDefault(require("node:assert/strict"));
|
|
8
|
+
const infer_direction_js_1 = require("./infer-direction.js");
|
|
9
|
+
(0, node_test_1.describe)("inferDirection", () => {
|
|
10
|
+
(0, node_test_1.it)("returns bigger_is_better for throughput units", () => {
|
|
11
|
+
for (const unit of ["ops/s", "op/s", "req/sec", "MB/s", "throughput", "events"]) {
|
|
12
|
+
strict_1.default.equal((0, infer_direction_js_1.inferDirection)(unit), "bigger_is_better", `expected bigger_is_better for "${unit}"`);
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
(0, node_test_1.it)("returns smaller_is_better for latency and allocation units", () => {
|
|
16
|
+
for (const unit of ["ns/op", "ms/op", "us/op", "s/op", "B/op", "allocs/op", "bytes", "ms"]) {
|
|
17
|
+
strict_1.default.equal((0, infer_direction_js_1.inferDirection)(unit), "smaller_is_better", `expected smaller_is_better for "${unit}"`);
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
(0, node_test_1.it)("defaults to smaller_is_better for unknown units", () => {
|
|
21
|
+
strict_1.default.equal((0, infer_direction_js_1.inferDirection)("widgets"), "smaller_is_better");
|
|
22
|
+
});
|
|
23
|
+
(0, node_test_1.it)("is case-insensitive", () => {
|
|
24
|
+
strict_1.default.equal((0, infer_direction_js_1.inferDirection)("OPS/S"), "bigger_is_better");
|
|
25
|
+
strict_1.default.equal((0, infer_direction_js_1.inferDirection)("Mb/S"), "bigger_is_better");
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
//# sourceMappingURL=infer-direction.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"infer-direction.test.js","sourceRoot":"","sources":["../src/infer-direction.test.ts"],"names":[],"mappings":";;;;;AAAA,yCAAyC;AACzC,gEAAwC;AACxC,6DAAsD;AAEtD,IAAA,oBAAQ,EAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,IAAA,cAAE,EAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,CAAC,EAAE,CAAC;YAChF,gBAAM,CAAC,KAAK,CAAC,IAAA,mCAAc,EAAC,IAAI,CAAC,EAAE,kBAAkB,EAAE,kCAAkC,IAAI,GAAG,CAAC,CAAC;QACpG,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAA,cAAE,EAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC;YAC3F,gBAAM,CAAC,KAAK,CAAC,IAAA,mCAAc,EAAC,IAAI,CAAC,EAAE,mBAAmB,EAAE,mCAAmC,IAAI,GAAG,CAAC,CAAC;QACtG,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAA,cAAE,EAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,gBAAM,CAAC,KAAK,CAAC,IAAA,mCAAc,EAAC,SAAS,CAAC,EAAE,mBAAmB,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,IAAA,cAAE,EAAC,qBAAqB,EAAE,GAAG,EAAE;QAC7B,gBAAM,CAAC,KAAK,CAAC,IAAA,mCAAc,EAAC,OAAO,CAAC,EAAE,kBAAkB,CAAC,CAAC;QAC1D,gBAAM,CAAC,KAAK,CAAC,IAAA,mCAAc,EAAC,MAAM,CAAC,EAAE,kBAAkB,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|