@noego/telemetry 0.0.1 → 0.0.3
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/dist/cli/telemetry_bin.cjs +57 -57
- package/dist/cli/telemetry_bin.cjs.map +1 -1
- package/dist/cli/telemetry_bin.js +57 -57
- package/dist/cli/telemetry_bin.js.map +1 -1
- package/dist/cli/telemetry_cli.cjs +57 -57
- package/dist/cli/telemetry_cli.cjs.map +1 -1
- package/dist/cli/telemetry_cli.d.cts +3 -3
- package/dist/cli/telemetry_cli.d.ts +3 -3
- package/dist/cli/telemetry_cli.js +57 -57
- package/dist/cli/telemetry_cli.js.map +1 -1
- package/dist/core/index.d.cts +5 -5
- package/dist/core/index.d.ts +5 -5
- package/dist/index.d.cts +6 -6
- package/dist/index.d.ts +6 -6
- package/dist/{maintenance_coordinator.types-B-bZUNvw.d.cts → maintenance_coordinator.types-C4ULi4A4.d.cts} +2 -2
- package/dist/{maintenance_coordinator.types-CBA5y74b.d.ts → maintenance_coordinator.types-ikUrRXmO.d.ts} +2 -2
- package/dist/{metric_definition_contract-l4i4SaAp.d.ts → metric_definition_contract-BYtnODhu.d.ts} +1 -1
- package/dist/{metric_definition_contract-BR6a_GzF.d.cts → metric_definition_contract-DfhhmTZ1.d.cts} +1 -1
- package/dist/node/index.cjs +57 -57
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.d.cts +5 -5
- package/dist/node/index.d.ts +5 -5
- package/dist/node/index.js +57 -57
- package/dist/node/index.js.map +1 -1
- package/dist/{query.types-DySoqYop.d.ts → query.types-DU5v7vM0.d.ts} +7 -0
- package/dist/{query.types-Bntwh6KF.d.cts → query.types-DuYWbFFe.d.cts} +7 -0
- package/dist/sqlite/index.cjs +34 -57
- package/dist/sqlite/index.cjs.map +1 -1
- package/dist/sqlite/index.d.cts +3 -3
- package/dist/sqlite/index.d.ts +3 -3
- package/dist/sqlite/index.js +34 -57
- package/dist/sqlite/index.js.map +1 -1
- package/dist/{storage.types-DjuUMinz.d.cts → storage.types-Bji_pWqr.d.cts} +1 -1
- package/dist/{storage.types-BTCGVxOM.d.ts → storage.types-k7oElEB3.d.ts} +1 -1
- package/dist/{telemetry_configuration_parser-C7Et_gwG.d.ts → telemetry_configuration_parser-BZ8Nvnle.d.ts} +3 -2
- package/dist/{telemetry_configuration_parser-R-niZQRZ.d.cts → telemetry_configuration_parser-CgSN7R6A.d.cts} +3 -2
- package/dist/testing/index.d.cts +2 -2
- package/dist/testing/index.d.ts +2 -2
- package/migrations/1785073006031_raw_events_level_index.down.sql +1 -0
- package/migrations/1785073006031_raw_events_level_index.up.sql +5 -0
- package/native/noego_telemetry_native.node +0 -0
- package/package.json +1 -1
|
@@ -75,6 +75,13 @@ type SqliteRetentionConfiguration = Readonly<{
|
|
|
75
75
|
rawMs: number;
|
|
76
76
|
lateArrivalMs: number;
|
|
77
77
|
samplesMs: number;
|
|
78
|
+
/**
|
|
79
|
+
* Per-level raw-event retention, keyed by lowercased level string.
|
|
80
|
+
* A level present here expires at its own window; any level absent here
|
|
81
|
+
* (including an empty or NULL level) falls back to `rawMs`. There is no
|
|
82
|
+
* "retain forever" branch — every raw row has exactly one time bound.
|
|
83
|
+
*/
|
|
84
|
+
levelMs?: Readonly<Record<string, number>>;
|
|
78
85
|
rollups: readonly Readonly<{
|
|
79
86
|
resolutionMs: number;
|
|
80
87
|
retainMs: number;
|
|
@@ -75,6 +75,13 @@ type SqliteRetentionConfiguration = Readonly<{
|
|
|
75
75
|
rawMs: number;
|
|
76
76
|
lateArrivalMs: number;
|
|
77
77
|
samplesMs: number;
|
|
78
|
+
/**
|
|
79
|
+
* Per-level raw-event retention, keyed by lowercased level string.
|
|
80
|
+
* A level present here expires at its own window; any level absent here
|
|
81
|
+
* (including an empty or NULL level) falls back to `rawMs`. There is no
|
|
82
|
+
* "retain forever" branch — every raw row has exactly one time bound.
|
|
83
|
+
*/
|
|
84
|
+
levelMs?: Readonly<Record<string, number>>;
|
|
78
85
|
rollups: readonly Readonly<{
|
|
79
86
|
resolutionMs: number;
|
|
80
87
|
retainMs: number;
|
package/dist/sqlite/index.cjs
CHANGED
|
@@ -1831,73 +1831,49 @@ var TelemetryRepository = class {
|
|
|
1831
1831
|
lastSequence: sample.sequence
|
|
1832
1832
|
};
|
|
1833
1833
|
}
|
|
1834
|
+
/**
|
|
1835
|
+
* Raw retention is purely time-based, matching the native collector: every
|
|
1836
|
+
* expired row goes in one set-based statement per level band. No page size,
|
|
1837
|
+
* no row cap, and no rollup-completion gate — metric samples are extracted at
|
|
1838
|
+
* ingest and retained on their own clock, so dropping a raw row costs no
|
|
1839
|
+
* metric fidelity, and no row can outlive its window waiting on a rollup.
|
|
1840
|
+
*/
|
|
1834
1841
|
createRawEventRetentionStep(nowMs) {
|
|
1835
|
-
const cutoffMs = nowMs - this.options.retention.rawMs;
|
|
1836
1842
|
const table = this.options.tableMap.quoted("rawEvents");
|
|
1837
|
-
const
|
|
1838
|
-
|
|
1839
|
-
|
|
1840
|
-
|
|
1841
|
-
|
|
1842
|
-
WHERE target_id = ? AND occurred_at_ms < ?
|
|
1843
|
-
ORDER BY occurred_at_ms ASC, producer_id ASC, sequence ASC
|
|
1844
|
-
LIMIT ${RETENTION_PAGE_SIZE}`
|
|
1845
|
-
);
|
|
1846
|
-
const readNextPage = this.options.connection.prepare(
|
|
1847
|
-
`SELECT producer_id, sequence, event_id, occurred_at_ms, monotonic_ns,
|
|
1848
|
-
source, process_kind, level, label, conversation_id,
|
|
1849
|
-
conversation_id_kind, correlation_id, metadata_json, schema_version
|
|
1850
|
-
FROM ${table}
|
|
1851
|
-
WHERE target_id = ? AND occurred_at_ms < ?
|
|
1852
|
-
AND (occurred_at_ms, producer_id, sequence) > (?, ?, ?)
|
|
1853
|
-
ORDER BY occurred_at_ms ASC, producer_id ASC, sequence ASC
|
|
1854
|
-
LIMIT ${RETENTION_PAGE_SIZE}`
|
|
1843
|
+
const levelMs = this.options.retention.levelMs ?? {};
|
|
1844
|
+
const levels = Object.keys(levelMs);
|
|
1845
|
+
const removeByLevel = this.options.connection.prepare(
|
|
1846
|
+
`DELETE FROM ${table}
|
|
1847
|
+
WHERE target_id = ? AND lower(coalesce(level, '')) = ? AND occurred_at_ms < ?`
|
|
1855
1848
|
);
|
|
1856
|
-
const
|
|
1857
|
-
|
|
1849
|
+
const fallbackPlaceholders = levels.map(() => "?").join(", ");
|
|
1850
|
+
const removeFallback = this.options.connection.prepare(
|
|
1851
|
+
`DELETE FROM ${table}
|
|
1852
|
+
WHERE target_id = ? AND occurred_at_ms < ?` + (levels.length === 0 ? "" : ` AND lower(coalesce(level, '')) NOT IN (${fallbackPlaceholders})`)
|
|
1858
1853
|
);
|
|
1859
|
-
let
|
|
1854
|
+
let done = false;
|
|
1860
1855
|
return () => {
|
|
1861
|
-
|
|
1862
|
-
this.options.targetId,
|
|
1863
|
-
cutoffMs,
|
|
1864
|
-
cursor.occurredAtMs,
|
|
1865
|
-
cursor.producerId,
|
|
1866
|
-
cursor.sequence
|
|
1867
|
-
);
|
|
1868
|
-
if (rows.length === 0) {
|
|
1856
|
+
if (done) {
|
|
1869
1857
|
return { deleted: 0, done: true };
|
|
1870
1858
|
}
|
|
1871
|
-
|
|
1872
|
-
const parsed = this.rowParser.parseRawEnvelope(row);
|
|
1873
|
-
if (!parsed.ok) {
|
|
1874
|
-
throw new Error(parsed.error);
|
|
1875
|
-
}
|
|
1876
|
-
return parsed.value;
|
|
1877
|
-
});
|
|
1878
|
-
const eligible = scanned.filter((envelope) => this.rawEventHasRequiredRollups(envelope));
|
|
1859
|
+
done = true;
|
|
1879
1860
|
const transaction = this.options.connection.transaction(() => {
|
|
1880
|
-
let
|
|
1881
|
-
for (const
|
|
1882
|
-
|
|
1883
|
-
|
|
1884
|
-
|
|
1885
|
-
|
|
1886
|
-
).changes;
|
|
1861
|
+
let deleted = 0;
|
|
1862
|
+
for (const level of levels) {
|
|
1863
|
+
const retainMs = levelMs[level];
|
|
1864
|
+
if (retainMs === void 0) {
|
|
1865
|
+
continue;
|
|
1866
|
+
}
|
|
1867
|
+
deleted += removeByLevel.run(this.options.targetId, level, nowMs - retainMs).changes;
|
|
1887
1868
|
}
|
|
1888
|
-
|
|
1869
|
+
deleted += removeFallback.run(
|
|
1870
|
+
this.options.targetId,
|
|
1871
|
+
nowMs - this.options.retention.rawMs,
|
|
1872
|
+
...levels
|
|
1873
|
+
).changes;
|
|
1874
|
+
return deleted;
|
|
1889
1875
|
});
|
|
1890
|
-
|
|
1891
|
-
const last = scanned[scanned.length - 1];
|
|
1892
|
-
if (last === void 0 || rows.length < RETENTION_PAGE_SIZE) {
|
|
1893
|
-
return { deleted, done: true };
|
|
1894
|
-
}
|
|
1895
|
-
cursor = {
|
|
1896
|
-
occurredAtMs: last.occurredAtMs,
|
|
1897
|
-
producerId: last.producerId,
|
|
1898
|
-
sequence: last.sequence
|
|
1899
|
-
};
|
|
1900
|
-
return { deleted, done: false };
|
|
1876
|
+
return { deleted: transaction(), done: true };
|
|
1901
1877
|
};
|
|
1902
1878
|
}
|
|
1903
1879
|
rawEventHasRequiredRollups(envelope) {
|
|
@@ -2638,6 +2614,7 @@ var TelemetryTableMap = class _TelemetryTableMap {
|
|
|
2638
2614
|
rawEventsOccurredIndex: this.indexName(mapping.rawEvents, "occurred"),
|
|
2639
2615
|
rawEventsConversationIndex: this.indexName(mapping.rawEvents, "conversation"),
|
|
2640
2616
|
rawEventsLabelIndex: this.indexName(mapping.rawEvents, "label"),
|
|
2617
|
+
rawEventsLevelIndex: this.indexName(mapping.rawEvents, "level"),
|
|
2641
2618
|
metricSamplesTimeIndex: this.indexName(mapping.metricSamples, "time"),
|
|
2642
2619
|
metricSamplesEventIndex: this.indexName(mapping.metricSamples, "event"),
|
|
2643
2620
|
metricRollupsTimeIndex: this.indexName(mapping.metricRollups, "time")
|