Spaces:
Running
Running
File size: 2,163 Bytes
ceb3821 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | import { existsSync } from 'fs';
import { promises as fs } from 'fs';
import path from 'path';
// 用量缓存文件路径
const USAGE_CACHE_FILE = path.join(process.cwd(), 'configs', 'usage-cache.json');
/**
* 读取用量缓存文件
* @returns {Promise<Object|null>} 缓存的用量数据,如果不存在或读取失败则返回 null
*/
export async function readUsageCache() {
try {
if (existsSync(USAGE_CACHE_FILE)) {
const content = await fs.readFile(USAGE_CACHE_FILE, 'utf8');
return JSON.parse(content);
}
return null;
} catch (error) {
console.warn('[Usage Cache] Failed to read usage cache:', error.message);
return null;
}
}
/**
* 写入用量缓存文件
* @param {Object} usageData - 用量数据
*/
export async function writeUsageCache(usageData) {
try {
await fs.writeFile(USAGE_CACHE_FILE, JSON.stringify(usageData, null, 2), 'utf8');
console.log('[Usage Cache] Usage data cached to', USAGE_CACHE_FILE);
} catch (error) {
console.error('[Usage Cache] Failed to write usage cache:', error.message);
}
}
/**
* 读取特定提供商类型的用量缓存
* @param {string} providerType - 提供商类型
* @returns {Promise<Object|null>} 缓存的用量数据
*/
export async function readProviderUsageCache(providerType) {
const cache = await readUsageCache();
if (cache && cache.providers && cache.providers[providerType]) {
return {
...cache.providers[providerType],
cachedAt: cache.timestamp,
fromCache: true
};
}
return null;
}
/**
* 更新特定提供商类型的用量缓存
* @param {string} providerType - 提供商类型
* @param {Object} usageData - 用量数据
*/
export async function updateProviderUsageCache(providerType, usageData) {
let cache = await readUsageCache();
if (!cache) {
cache = {
timestamp: new Date().toISOString(),
providers: {}
};
}
cache.providers[providerType] = usageData;
cache.timestamp = new Date().toISOString();
await writeUsageCache(cache);
} |