Skip to content

Commit cf65191

Browse files
authored
Performance improvements (#113)
* Update line protocol creation * Update Copy * Reuse Array
1 parent 29e1860 commit cf65191

14 files changed

Lines changed: 29 additions & 43 deletions

src/meter/age_gauge.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,10 @@ export class AgeGauge extends Meter {
1616
}
1717

1818
now(): Promise<void> {
19-
const line = `${this._meter_type_symbol}:${this._id.spectatord_id}:0`
20-
return this._writer.write(line);
19+
return this._writer.write(this._line_prefix + "0");
2120
}
2221

2322
set(seconds: number): Promise<void> {
24-
const line = `${this._meter_type_symbol}:${this._id.spectatord_id}:${seconds}`
25-
return this._writer.write(line);
23+
return this._writer.write(this._line_prefix + seconds);
2624
}
2725
}

src/meter/counter.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,7 @@ export class Counter extends Meter {
1818

1919
increment(amount: number = 1): Promise<void> {
2020
if (amount > 0) {
21-
const line = `${this._meter_type_symbol}:${this._id.spectatord_id}:${amount}`
22-
return this._writer.write(line);
21+
return this._writer.write(this._line_prefix + amount);
2322
}
2423
return Promise.resolve();
2524
}

src/meter/dist_summary.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,7 @@ export class DistributionSummary extends Meter {
1616

1717
record(amount: number): Promise<void> {
1818
if (amount >= 0) {
19-
const line = `${this._meter_type_symbol}:${this._id.spectatord_id}:${amount}`
20-
return this._writer.write(line);
19+
return this._writer.write(this._line_prefix + amount);
2120
}
2221
return Promise.resolve();
2322
}

src/meter/gauge.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,7 @@ export class Gauge extends Meter {
2121
}
2222

2323
set(value: number): Promise<void> {
24-
const line = `${this._meter_type_symbol}:${this._id.spectatord_id}:${value}`
25-
return this._writer.write(line);
24+
return this._writer.write(this._line_prefix + value);
2625
}
2726

2827
update(value: number): Promise<void> {

src/meter/id.ts

Lines changed: 10 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -78,22 +78,13 @@ export class Id {
7878

7979
let result: string = this.replace_invalid_chars(name);
8080

81-
const sorted_tags: {[k: string]: string} = Object.fromEntries(Object.entries(tags).sort(
82-
(a: [string, string], b: [string, string]): number => {
83-
const kSort: number = a[0].localeCompare(b[0]);
84-
if (kSort != 0) {
85-
return kSort;
86-
} else {
87-
return a[1].localeCompare(b[1]);
88-
}
89-
}
90-
));
91-
92-
Object.entries(sorted_tags).forEach(([k, v]: [string, string]): void => {
93-
k = this.replace_invalid_chars(k);
94-
v = this.replace_invalid_chars(v);
95-
result += `,${k}=${v}`;
96-
});
81+
const sorted_entries = Object.entries(tags).sort(
82+
(a, b) => a[0].localeCompare(b[0]) || a[1].localeCompare(b[1])
83+
);
84+
85+
for (const [k, v] of sorted_entries) {
86+
result += `,${this.replace_invalid_chars(k)}=${this.replace_invalid_chars(v)}`;
87+
}
9788

9889
return result;
9990
}
@@ -103,20 +94,19 @@ export class Id {
10394
}
10495

10596
tags(): Tags {
106-
return structuredClone(this._tags);
97+
return {...this._tags};
10798
}
10899

109100
with_tag(k: string, v: string): Id {
110-
const new_tags: Tags = structuredClone(this._tags);
111-
new_tags[k] = v;
101+
const new_tags: Tags = {...this._tags, [k]: v};
112102
return new Id(this._name, new_tags);
113103
}
114104

115105
with_tags(tags: Tags): Id {
116106
if (Object.keys(tags).length == 0) {
117107
return this;
118108
}
119-
const new_tags = {...structuredClone(this._tags), ...tags};
109+
const new_tags = {...this._tags, ...tags};
120110
return new Id(this._name, new_tags);
121111
}
122112

src/meter/max_gauge.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,7 @@ export class MaxGauge extends Meter {
1313
}
1414

1515
set(value: number): Promise<void> {
16-
const line = `${this._meter_type_symbol}:${this._id.spectatord_id}:${value}`
17-
return this._writer.write(line);
16+
return this._writer.write(this._line_prefix + value);
1817
}
1918

2019
update(value: number): Promise<void> {

src/meter/meter.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,13 @@ import {WriterUnion} from "../writer/new_writer.js";
44
export abstract class Meter {
55
protected _id: Id;
66
protected _meter_type_symbol: string;
7+
protected _line_prefix: string;
78
protected readonly _writer: WriterUnion;
89

910
protected constructor(id: Id, writer: WriterUnion, meter_type_symbol: string) {
1011
this._id = id;
1112
this._meter_type_symbol = meter_type_symbol;
13+
this._line_prefix = `${meter_type_symbol}:${id.spectatord_id}:`;
1214
this._writer = writer;
1315
}
1416

src/meter/monotonic_counter.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ export class MonotonicCounter extends Meter {
1313
}
1414

1515
set(amount: number): Promise<void> {
16-
const line = `${this._meter_type_symbol}:${this._id.spectatord_id}:${amount}`
17-
return this._writer.write(line);
16+
return this._writer.write(this._line_prefix + amount);
1817
}
1918
}

src/meter/monotonic_counter_uint.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ export class MonotonicCounterUint extends Meter {
1717
}
1818

1919
set(amount: bigint): Promise<void> {
20-
const line = `${this._meter_type_symbol}:${this._id.spectatord_id}:${BigInt.asUintN(64, amount)}`
21-
return this._writer.write(line);
20+
return this._writer.write(this._line_prefix + BigInt.asUintN(64, amount));
2221
}
2322
}

src/meter/percentile_dist_summary.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,7 @@ export class PercentileDistributionSummary extends Meter {
2121

2222
record(amount: number): Promise<void> {
2323
if (amount >= 0) {
24-
const line = `${this._meter_type_symbol}:${this._id.spectatord_id}:${amount}`
25-
return this._writer.write(line);
24+
return this._writer.write(this._line_prefix + amount);
2625
}
2726
return Promise.resolve();
2827
}

0 commit comments

Comments
 (0)