signalk-parquet
Version:
Vessel data Parquet file archive with automated value and geospatial triggers. History API compliant with cloud backups and queries.
66 lines • 3.34 kB
TypeScript
import { Router, Request, Response } from 'express';
import { DataResult, PathSpec } from './HistoryAPI-types';
import { ZonedDateTime } from '@js-joda/core';
import { Context } from '@signalk/server-api';
import { ParamsDictionary } from 'express-serve-static-core';
import { ParsedQs } from 'qs';
import { SQLiteBufferInterface } from './types';
import { AggregationTier } from './utils/hive-path-builder';
import { AutoDiscoveryService } from './services/auto-discovery';
import { SpatialFilter } from './utils/spatial-queries';
import { PathRetentionRule } from './utils/retention-rules';
export declare function registerHistoryApiRoute(router: Pick<Router, 'get'>, selfId: string, dataDir: string, debug: (k: string) => void, app: any, sqliteBuffer?: SQLiteBufferInterface, autoDiscoveryService?: AutoDiscoveryService, s3Config?: S3QueryConfig, pathRetentionOverrides?: PathRetentionRule[]): void;
type QuerySource = 'local' | 's3' | 'hybrid' | 'auto';
export interface S3QueryConfig {
enabled: boolean;
bucket: string;
keyPrefix: string;
region: string;
}
export declare class HistoryAPI {
private selfId;
private dataDir;
private sqliteBuffer?;
private hivePathBuilder;
private autoDiscoveryService?;
private s3Config?;
private retentionRules;
constructor(selfId: string, dataDir: string, sqliteBuffer?: SQLiteBufferInterface, autoDiscoveryService?: AutoDiscoveryService, s3Config?: S3QueryConfig, pathRetentionOverrides?: PathRetentionRule[]);
/**
* Set S3 configuration for federated queries
*/
setS3Config(config: S3QueryConfig | undefined): void;
/**
* Set the auto-discovery service
*/
setAutoDiscoveryService(service: AutoDiscoveryService | undefined): void;
/**
* Set the SQLite buffer for federated queries
*/
setSqliteBuffer(buffer: SQLiteBufferInterface | undefined): void;
/**
* Auto-select the optimal tier based on requested resolution
* Returns undefined to use raw/flat data, or a tier name for aggregated data
*
* Logic:
* - resolution >= 1 hour (3600000ms) → use 1h tier
* - resolution >= 1 minute (60000ms) → use 60s tier
* - resolution >= 5 seconds (5000ms) → use 5s tier
* - resolution < 5 seconds → use raw data (no tier)
*
* Falls back through tiers if preferred tier doesn't exist
*/
private selectOptimalTier;
/**
* Get timestamps where vessel position was within the spatial filter
* Used to correlate non-position paths with spatial filtering
*/
private getSpatialTimestamps;
getValues(context: Context, from: ZonedDateTime, to: ZonedDateTime, spatialFilter: SpatialFilter | null, app: any, debug: (k: string) => void, req: Request<ParamsDictionary, any, any, ParsedQs, Record<string, any>>, res: Response<any, Record<string, any>>): Promise<void>;
getNumericValues(context: Context, from: ZonedDateTime, to: ZonedDateTime, timeResolutionMillis: number, pathSpecs: PathSpec[], debug: (k: string) => void, tier?: AggregationTier, spatialFilter?: SpatialFilter | null, querySource?: QuerySource, positionPath?: string, app?: any): Promise<DataResult>;
private mergePathData;
private addMovingAverages;
private buildValuesWithMovingAverages;
}
export {};
//# sourceMappingURL=HistoryAPI.d.ts.map