mirror of
https://github.com/outline/outline.git
synced 2026-06-13 03:14:59 +03:00
0c0facc2a1
* Avoid empty webhook processor work via cached subscription lookup
WebhookProcessor ran for every event but most teams have no matching
webhook subscription, costing an empty processor job and a database query
per event.
Cache a team's enabled subscriptions ({ id, events }) in Redis, invalidated
by model lifecycle hooks, and add an optional BaseProcessor.shouldQueue hook
consulted by the global event queue so the webhook processor only enqueues a
job when a matching subscription exists.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* feedback
---------
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
73 lines
2.0 KiB
TypeScript
73 lines
2.0 KiB
TypeScript
/**
|
|
* Helper class for Redis cache key generation.
|
|
*/
|
|
export class RedisPrefixHelper {
|
|
/**
|
|
* Gets key against which unfurl response for the given url is stored.
|
|
*
|
|
* @param teamId The team ID to generate a key for.
|
|
* @param url The url to generate a key for.
|
|
*/
|
|
public static getUnfurlKey(teamId: string, url = "") {
|
|
return `unfurl:${teamId}:${url}`;
|
|
}
|
|
|
|
/**
|
|
* Gets key for caching collection documents structure.
|
|
*
|
|
* @param collectionId The collection ID to generate a key for.
|
|
* @returns the cache key string.
|
|
*/
|
|
public static getCollectionDocumentsKey(collectionId: string) {
|
|
return `cd:${collectionId}`;
|
|
}
|
|
|
|
/**
|
|
* Gets key for caching embed check results. This is a global cache key
|
|
* (not team-specific) since embed headers are the same for all users.
|
|
*
|
|
* @param url The URL to generate a cache key for.
|
|
* @returns the cache key string.
|
|
*/
|
|
public static getEmbedCheckKey(url: string) {
|
|
return `embed:${url}`;
|
|
}
|
|
|
|
/**
|
|
* Gets key for caching a user's accessible collection IDs.
|
|
*
|
|
* @param userId The user ID to generate a key for.
|
|
* @returns the cache key string.
|
|
*/
|
|
public static getUserCollectionIdsKey(userId: string) {
|
|
return `uc:${userId}`;
|
|
}
|
|
|
|
/**
|
|
* Gets key for caching a team's enabled webhook subscriptions.
|
|
*
|
|
* @param teamId The team ID to generate a key for.
|
|
* @returns the cache key string.
|
|
*/
|
|
public static getWebhookSubscriptionsKey(teamId: string) {
|
|
return `whs:${teamId}`;
|
|
}
|
|
|
|
/**
|
|
* Gets key for caching the count of a relationship managed by the
|
|
* `CounterCache` decorator.
|
|
*
|
|
* @param modelName The owning model name (e.g. "Group").
|
|
* @param relationName The relationship reference name (e.g. "members").
|
|
* @param id The owning record id.
|
|
* @returns the cache key string.
|
|
*/
|
|
public static getCounterCacheKey(
|
|
modelName: string,
|
|
relationName: string,
|
|
id: string
|
|
) {
|
|
return `count:${modelName}:${relationName}:${id}`;
|
|
}
|
|
}
|