@sentry/node
Version:
Sentry Node SDK using OpenTelemetry for performance instrumentation
87 lines (85 loc) • 2.58 kB
JavaScript
const SINGLE_ARG_COMMANDS = ["get", "set", "setex"];
const GET_COMMANDS = ["get", "mget"];
const SET_COMMANDS = ["set", "setex"];
function isInCommands(redisCommands, command) {
return redisCommands.includes(command.toLowerCase());
}
function getCacheOperation(command) {
if (isInCommands(GET_COMMANDS, command)) {
return "cache.get";
} else if (isInCommands(SET_COMMANDS, command)) {
return "cache.put";
} else {
return void 0;
}
}
function keyHasPrefix(key, prefixes) {
return prefixes.some((prefix) => key.startsWith(prefix));
}
function getCacheKeySafely(redisCommand, cmdArgs) {
try {
if (cmdArgs.length === 0) {
return void 0;
}
const processArg = (arg) => {
if (typeof arg === "string" || typeof arg === "number" || Buffer.isBuffer(arg)) {
return [arg.toString()];
} else if (Array.isArray(arg)) {
return flatten(arg.map((arg2) => processArg(arg2)));
} else {
return ["<unknown>"];
}
};
const firstArg = cmdArgs[0];
if (isInCommands(SINGLE_ARG_COMMANDS, redisCommand) && firstArg != null) {
return processArg(firstArg);
}
return flatten(cmdArgs.map((arg) => processArg(arg)));
} catch {
return void 0;
}
}
function shouldConsiderForCache(redisCommand, keys, prefixes) {
if (!getCacheOperation(redisCommand)) {
return false;
}
for (const key of keys) {
if (keyHasPrefix(key, prefixes)) {
return true;
}
}
return false;
}
function calculateCacheItemSize(response) {
const getSize = (value) => {
try {
if (Buffer.isBuffer(value)) return value.byteLength;
else if (typeof value === "string") return value.length;
else if (typeof value === "number") return value.toString().length;
else if (value === null || value === void 0) return 0;
return JSON.stringify(value).length;
} catch {
return void 0;
}
};
return Array.isArray(response) ? response.reduce((acc, curr) => {
const size = getSize(curr);
return typeof size === "number" ? acc !== void 0 ? acc + size : size : acc;
}, 0) : getSize(response);
}
function flatten(input) {
const result = [];
const flattenHelper = (input2) => {
input2.forEach((el) => {
if (Array.isArray(el)) {
flattenHelper(el);
} else {
result.push(el);
}
});
};
flattenHelper(input);
return result;
}
export { GET_COMMANDS, SET_COMMANDS, calculateCacheItemSize, getCacheKeySafely, getCacheOperation, isInCommands, shouldConsiderForCache };
//# sourceMappingURL=redisCache.js.map