@inso_web/els-mcp
Version:
MCP-сервер поверх INSO Error Logs Service. Read-only tools (search, analytics, fingerprinting, correlations) для подключения Claude Desktop/Code и ChatGPT к логам ошибок. Streamable HTTP transport + stdio для npx-запуска.
47 lines • 2.33 kB
TypeScript
/**
* Usage tracker.
*
* Пишет напрямую в Postgres `mcp_billing.usage_daily` (UPSERT per app+date+tool).
* Со временем будет заменён на Redis INCR + hourly flush — интерфейс останется
* тем же, так что вызывающий код не нужно будет править.
*
* Поведение:
* - Silent fail при ошибке БД (как и audit) — usage tracking не блокирует tool-call.
* - Fire-and-forget: caller вызывает через `void trackUsage(...)`.
* - AI-tools (см. `isAiTool` из `./limits.ts`) дополнительно учитываются в
* отдельной AI-квоте через `aiTodayUsage` + `checkAiQuota`.
*/
import type { Logger } from 'pino';
import { type McpPrismaClient } from '../audit/prisma.js';
import { type QuotaDecision, type Tier } from './limits.js';
export interface TrackUsageParams {
appId: string;
tool: string;
bytesOut: number;
/** Можно явно передать дату (для тестов). По умолчанию today UTC. */
date?: Date;
}
export interface UsageTrackerOptions {
databaseUrl?: string;
log?: Logger;
prismaOverride?: McpPrismaClient | null;
}
export interface UsageTracker {
trackUsage(params: TrackUsageParams): Promise<void>;
/**
* Возвращает текущее число использований за сегодня UTC (sum по всем tools).
* Используется как source для `checkQuota`.
*/
todayUsage(appId: string, now?: Date): Promise<number>;
checkQuota(appId: string, tier: Tier, now?: Date): Promise<QuotaDecision>;
/**
* Возвращает текущее число AI-tool вызовов за сегодня UTC (sum по
* tools, отвечающим `isAiTool`).
*/
aiTodayUsage(appId: string, now?: Date): Promise<number>;
checkAiQuota(appId: string, tier: Tier, now?: Date): Promise<QuotaDecision>;
}
export declare function createUsageTracker(opts?: UsageTrackerOptions): UsageTracker;
export declare function getUsageTracker(opts?: UsageTrackerOptions): UsageTracker;
export declare function setUsageTrackerForTests(t: UsageTracker | null): void;
//# sourceMappingURL=tracker.d.ts.map