Improve performances (#14869)
## Improvements - Add logs to all gql operations and rest calls to help debug CPU issues on the backend. These are temporary and should be removed - Remove nested relations from workflowVersions load (used to add manual triggers in the side bar). On some workspaces this call result in a response of 4MB which is heavy on CPU - Investigated Redis Usage ==> made a few improvements, we are should still migrate to the new cache service once available - investigated db calls in messaging / calendar fetch list + workflow enqueue run cron jobs. Everything seems to be properly batched
This commit is contained in:
@@ -1,85 +0,0 @@
|
||||
import { type Logger } from '@nestjs/common';
|
||||
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
|
||||
import {
|
||||
TwentyORMException,
|
||||
type TwentyORMExceptionCode,
|
||||
} from 'src/engine/twenty-orm/exceptions/twenty-orm.exception';
|
||||
|
||||
type CacheResult<T, U> = {
|
||||
version: T;
|
||||
data: U;
|
||||
};
|
||||
|
||||
const getFromCacheWithRecompute = async <T, U>({
|
||||
workspaceId,
|
||||
getCacheData,
|
||||
getCacheVersion,
|
||||
recomputeCache,
|
||||
cachedEntityName,
|
||||
exceptionCode,
|
||||
logger,
|
||||
}: {
|
||||
workspaceId: string;
|
||||
getCacheData: (workspaceId: string) => Promise<U | undefined>;
|
||||
getCacheVersion?: (workspaceId: string) => Promise<T | undefined>;
|
||||
recomputeCache: (params: { workspaceId: string }) => Promise<void>;
|
||||
cachedEntityName: string;
|
||||
exceptionCode: TwentyORMExceptionCode;
|
||||
logger: Logger;
|
||||
}): Promise<CacheResult<T, U>> => {
|
||||
let cachedVersion: T | undefined;
|
||||
let cachedData: U | undefined;
|
||||
|
||||
const expectCacheVersion = isDefined(getCacheVersion);
|
||||
|
||||
if (expectCacheVersion) {
|
||||
cachedVersion = await getCacheVersion(workspaceId);
|
||||
}
|
||||
|
||||
cachedData = await getCacheData(workspaceId);
|
||||
|
||||
if (
|
||||
!isDefined(cachedData) ||
|
||||
(expectCacheVersion && !isDefined(cachedVersion))
|
||||
) {
|
||||
logger.warn(
|
||||
`Triggering cache recompute for ${cachedEntityName} (workspace ${workspaceId})`,
|
||||
{
|
||||
cachedVersion,
|
||||
cachedData,
|
||||
},
|
||||
);
|
||||
await recomputeCache({ workspaceId });
|
||||
|
||||
cachedData = await getCacheData(workspaceId);
|
||||
if (expectCacheVersion) {
|
||||
cachedVersion = await getCacheVersion(workspaceId);
|
||||
}
|
||||
|
||||
if (
|
||||
!isDefined(cachedData) ||
|
||||
(expectCacheVersion && !isDefined(cachedVersion))
|
||||
) {
|
||||
logger.warn(
|
||||
`Data still missing after recompute for ${cachedEntityName} (workspace ${workspaceId})`,
|
||||
{
|
||||
cachedVersion,
|
||||
cachedData,
|
||||
},
|
||||
);
|
||||
throw new TwentyORMException(
|
||||
`${cachedEntityName} not found after recompute for workspace ${workspaceId} (missingData: ${!isDefined(cachedData)}, missingVersion: ${expectCacheVersion && !isDefined(cachedVersion)})`,
|
||||
exceptionCode,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
version: cachedVersion as T,
|
||||
data: cachedData,
|
||||
};
|
||||
};
|
||||
|
||||
export { CacheResult, getFromCacheWithRecompute };
|
||||
Reference in New Issue
Block a user