UNPKG

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
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