geo bufer
This commit is contained in:
1 parent
705ecf41c2
commit
5a74411ea2
3 files changed
+44
-15
No files matched your search
@@ -1,5 +1,6 @@
|
||||
import type { Check } from "@/types/index.js";
|
||||
import type { GeoCheck } from "@/types/index.js";
|
||||
import type Logger from "@/utils/logger.js";
|
||||
|
||||
const SERVICE_NAME = "BufferService";
|
||||
|
||||
@@ -9,12 +10,13 @@ export interface IBufferService {
|
||||
removeCheckFromBuffer(check: Check): boolean;
|
||||
scheduleNextFlush(): void;
|
||||
flushBuffer(): Promise<void>;
|
||||
flushGeoBuffer(): Promise<void>;
|
||||
}
|
||||
|
||||
class BufferService implements IBufferService {
|
||||
static SERVICE_NAME = SERVICE_NAME;
|
||||
private BUFFER_TIMEOUT: number;
|
||||
private logger: any;
|
||||
private logger: Logger;
|
||||
private SERVICE_NAME: string;
|
||||
private buffer: any[];
|
||||
private geoBuffer: any[];
|
||||
@@ -28,7 +30,7 @@ class BufferService implements IBufferService {
|
||||
geoChecksService,
|
||||
settingsService,
|
||||
}: {
|
||||
logger: any;
|
||||
logger: Logger;
|
||||
checkService: any;
|
||||
geoChecksService?: any;
|
||||
settingsService: any;
|
||||
@@ -123,6 +125,7 @@ class BufferService implements IBufferService {
|
||||
this.bufferTimer = setTimeout(async () => {
|
||||
try {
|
||||
await this.flushBuffer();
|
||||
await this.flushGeoBuffer();
|
||||
} catch (error: any) {
|
||||
this.logger.error({
|
||||
message: `Error in flush cycle: ${error.message}`,
|
||||
@@ -139,23 +142,47 @@ class BufferService implements IBufferService {
|
||||
async flushBuffer() {
|
||||
try {
|
||||
if (this.buffer.length > 0) {
|
||||
this.logger.debug({
|
||||
message: `Flushing ${this.buffer.length} checks to database`,
|
||||
service: this.SERVICE_NAME,
|
||||
method: "flushBuffer",
|
||||
});
|
||||
await this.checksService.createChecks(this.buffer);
|
||||
}
|
||||
|
||||
if (this.geoBuffer.length > 0 && this.geoChecksService) {
|
||||
await this.geoChecksService.createGeoChecks(this.geoBuffer);
|
||||
this.buffer = [];
|
||||
}
|
||||
} catch (error: any) {
|
||||
this.logger.error({
|
||||
message: error.message,
|
||||
message: `Error flushing checks buffer: ${error.message}`,
|
||||
service: this.SERVICE_NAME,
|
||||
method: "flushBuffer",
|
||||
stack: error.stack,
|
||||
});
|
||||
// Clear buffer even on error to prevent infinite retry loops
|
||||
this.buffer = [];
|
||||
}
|
||||
}
|
||||
|
||||
this.buffer = [];
|
||||
this.geoBuffer = [];
|
||||
async flushGeoBuffer() {
|
||||
try {
|
||||
if (this.geoBuffer.length > 0) {
|
||||
this.logger.debug({
|
||||
message: `Flushing ${this.geoBuffer.length} geo checks to database`,
|
||||
service: this.SERVICE_NAME,
|
||||
method: "flushGeoBuffer",
|
||||
});
|
||||
await this.geoChecksService.createGeoChecks(this.geoBuffer);
|
||||
this.geoBuffer = [];
|
||||
}
|
||||
} catch (error: any) {
|
||||
this.logger.error({
|
||||
message: `Error flushing geo checks buffer: ${error.message}`,
|
||||
service: this.SERVICE_NAME,
|
||||
method: "flushGeoBuffer",
|
||||
stack: error.stack,
|
||||
});
|
||||
// Clear buffer even on error to prevent infinite retry loops
|
||||
this.geoBuffer = [];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user