import { redisClient } from "../db/redis.js"; import { promisify } from "node:util"; import redisLock from "redis-lock"; /** * Retry delay (ms) for lock acquisition */ const retryDelay = 100; const lock: (key: string, timeout?: number) => Promise<() => void> = redisClient ? promisify(redisLock(redisClient, retryDelay)) : async () => () => {}; /** * Get AP Object lock * @param uri AP object ID * @param timeout Lock timeout (ms), The timeout releases previous lock. * @returns Unlock function */ export function getApLock(uri: string, timeout = 30 * 1000) { return lock(`ap-object:${uri}`, timeout); } export function getFetchInstanceMetadataLock( host: string, timeout = 30 * 1000, ) { return lock(`instance:${host}`, timeout); } export function getChartInsertLock(lockKey: string, timeout = 30 * 1000) { return lock(`chart-insert:${lockKey}`, timeout); }