-
Notifications
You must be signed in to change notification settings - Fork 738
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
34 changed files
with
1,297 additions
and
97 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
1 change: 1 addition & 0 deletions
1
backend/src/database/migrations/U1704923216__dashboardCacheLastRefreshedAt.sql
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
alter table "segments" drop column "dashboardCacheLastRefreshedAt"; |
2 changes: 2 additions & 0 deletions
2
backend/src/database/migrations/V1704923216__dashboardCacheLastRefreshedAt.sql
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
alter table "segments" | ||
add column "dashboardCacheLastRefreshedAt" timestamp with time zone null; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
version: '3.1' | ||
|
||
x-env-args: &env-args | ||
DOCKER_BUILDKIT: 1 | ||
NODE_ENV: docker | ||
SERVICE: cache-worker | ||
CROWD_TEMPORAL_TASKQUEUE: cache | ||
SHELL: /bin/sh | ||
|
||
services: | ||
cache-worker: | ||
build: | ||
context: ../../ | ||
dockerfile: ./scripts/services/docker/Dockerfile.cache_worker | ||
command: 'pnpm run start' | ||
working_dir: /usr/crowd/app/services/apps/cache_worker | ||
env_file: | ||
- ../../backend/.env.dist.local | ||
- ../../backend/.env.dist.composed | ||
- ../../backend/.env.override.local | ||
- ../../backend/.env.override.composed | ||
environment: | ||
<<: *env-args | ||
restart: always | ||
networks: | ||
- crowd-bridge | ||
|
||
cache-worker-dev: | ||
build: | ||
context: ../../ | ||
dockerfile: ./scripts/services/docker/Dockerfile.cache_worker | ||
command: 'pnpm run dev' | ||
working_dir: /usr/crowd/app/services/apps/cache_worker | ||
# user: '${USER_ID}:${GROUP_ID}' | ||
env_file: | ||
- ../../backend/.env.dist.local | ||
- ../../backend/.env.dist.composed | ||
- ../../backend/.env.override.local | ||
- ../../backend/.env.override.composed | ||
environment: | ||
<<: *env-args | ||
hostname: cache-worker | ||
networks: | ||
- crowd-bridge | ||
volumes: | ||
- ../../services/libs/alerting/src:/usr/crowd/app/services/libs/alerting/src | ||
- ../../services/libs/common/src:/usr/crowd/app/services/libs/common/src | ||
- ../../services/libs/common_services/src:/usr/crowd/app/services/libs/common_services/src | ||
- ../../services/libs/conversations/src:/usr/crowd/app/services/libs/conversations/src | ||
- ../../services/libs/database/src:/usr/crowd/app/services/libs/database/src | ||
- ../../services/libs/integrations/src:/usr/crowd/app/services/libs/integrations/src | ||
- ../../services/libs/ioc/src:/usr/crowd/app/services/libs/ioc/src | ||
- ../../services/libs/logging/src:/usr/crowd/app/services/libs/logging/src | ||
- ../../services/libs/opensearch/src:/usr/crowd/app/services/libs/opensearch/src | ||
- ../../services/libs/redis/src:/usr/crowd/app/services/libs/redis/src | ||
- ../../services/libs/sentiment/src:/usr/crowd/app/services/libs/sentiment/src | ||
- ../../services/libs/sqs/src:/usr/crowd/app/services/libs/sqs/src | ||
- ../../services/libs/types/src:/usr/crowd/app/services/libs/types/src | ||
- ../../services/apps/cache_worker/src:/usr/crowd/app/services/apps/cache_worker/src | ||
|
||
networks: | ||
crowd-bridge: | ||
external: true |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
FROM node:16-alpine as builder | ||
|
||
WORKDIR /usr/crowd/app | ||
RUN corepack enable && apk add --update --no-cache python3 build-base && ln -sf python3 /usr/bin/python && python3 -m ensurepip && pip3 install --no-cache --upgrade pip setuptools | ||
|
||
COPY ./pnpm-workspace.yaml ./pnpm-lock.yaml ./ | ||
COPY ./services ./services | ||
RUN pnpm i --frozen-lockfile | ||
|
||
FROM node:16-bookworm-slim as runner | ||
|
||
WORKDIR /usr/crowd/app | ||
RUN corepack enable && apt update && apt install -y ca-certificates --no-install-recommends && rm -rf /var/lib/apt/lists/* | ||
|
||
COPY --from=builder /usr/crowd/app/node_modules ./node_modules | ||
COPY --from=builder /usr/crowd/app/services/libs ./services/libs | ||
COPY --from=builder /usr/crowd/app/services/archetypes/ ./services/archetypes | ||
COPY --from=builder /usr/crowd/app/services/apps/cache_worker/ ./services/apps/cache_worker |
22 changes: 22 additions & 0 deletions
22
scripts/services/docker/Dockerfile.cache_worker.dockerignore
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
**/.git | ||
**/node_modules | ||
**/venv* | ||
**/.webpack | ||
**/.serverless | ||
**/.cubestore | ||
**/.env | ||
**/.env.* | ||
**/.idea | ||
**/.vscode | ||
**/dist | ||
backend/server-config/ | ||
backend/util/ | ||
backend/src/serverless/microservices/python | ||
.vscode/ | ||
.github/ | ||
frontend/ | ||
scripts/ | ||
.flake8 | ||
*.md | ||
Makefile | ||
backend/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
import { | ||
getAllTenants, | ||
getAllSegments, | ||
getProjectLeafSegments, | ||
getProjectGroupLeafSegments, | ||
} from './activities/getTenantSegmentInfo' | ||
|
||
import { | ||
getDashboardCacheLastRefreshedAt, | ||
getDefaultSegment, | ||
getNewMembers, | ||
getActiveMembers, | ||
getNewOrganizations, | ||
getActiveOrganizations, | ||
getActivities, | ||
saveToCache, | ||
getActivePlatforms, | ||
findNewActivityPlatforms, | ||
updateMemberMergeSuggestionsLastGeneratedAt, | ||
} from './activities/dashboard-cache/refreshDashboardCache' | ||
|
||
export { | ||
getAllTenants, | ||
getAllSegments, | ||
getProjectLeafSegments, | ||
getProjectGroupLeafSegments, | ||
getDashboardCacheLastRefreshedAt, | ||
getDefaultSegment, | ||
getNewMembers, | ||
getActiveMembers, | ||
getNewOrganizations, | ||
getActiveOrganizations, | ||
getActivities, | ||
saveToCache, | ||
getActivePlatforms, | ||
findNewActivityPlatforms, | ||
updateMemberMergeSuggestionsLastGeneratedAt, | ||
} |
171 changes: 171 additions & 0 deletions
171
services/apps/cache_worker/src/activities/dashboard-cache/refreshDashboardCache.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,171 @@ | ||
import { svc } from '../../main' | ||
import { ICubeQueryParams, IDashboardData, ISegment } from 'types' | ||
import SegmentRepository from 'repo/segment.repo' | ||
import { CubeJsRepository, CubeJsService } from '@crowd/cubejs' | ||
import { RedisCache } from '@crowd/redis' | ||
import { DashboardTimeframe } from 'enums' | ||
import moment from 'moment' | ||
import IntegrationRepository from 'repo/integration.repo' | ||
import ActivityRepository from 'repo/activity.repo' | ||
|
||
export async function getDashboardCacheLastRefreshedAt(segmentId: string): Promise<string> { | ||
const segmentRepo = new SegmentRepository(svc.postgres.writer.connection(), svc.log) | ||
return segmentRepo.getDashboardCacheLastRefreshedAt(segmentId) | ||
} | ||
|
||
export async function getDefaultSegment(tenantId: string): Promise<ISegment> { | ||
const segmentRepo = new SegmentRepository(svc.postgres.writer.connection(), svc.log) | ||
return segmentRepo.getDefaultSegment(tenantId) | ||
} | ||
|
||
export async function getActivePlatforms(leafSegmentIds: string[]): Promise<string[]> { | ||
const integrationRepo = new IntegrationRepository(svc.postgres.writer.connection(), svc.log) | ||
return integrationRepo.findActivePlatforms(leafSegmentIds) | ||
} | ||
|
||
export async function findNewActivityPlatforms( | ||
dashboardLastRefreshedAt: string, | ||
leafSegmentIds: string[], | ||
): Promise<string[]> { | ||
const activityRepo = new ActivityRepository(svc.postgres.writer.connection(), svc.log) | ||
return activityRepo.findNewActivityPlatforms(dashboardLastRefreshedAt, leafSegmentIds) | ||
} | ||
|
||
export async function updateMemberMergeSuggestionsLastGeneratedAt( | ||
segmentId: string, | ||
): Promise<void> { | ||
const segmentRepo = new SegmentRepository(svc.postgres.writer.connection(), svc.log) | ||
await segmentRepo.updateDashboardCacheLastRefreshedAt(segmentId) | ||
} | ||
|
||
export async function getNewMembers<T>(params: ICubeQueryParams) { | ||
const cjs = new CubeJsService() | ||
await cjs.init(params.tenantId, params.segmentIds) | ||
|
||
let result: T | ||
try { | ||
result = await CubeJsRepository.getNewMembers( | ||
cjs, | ||
moment(params.startDate), | ||
moment(params.endDate), | ||
params.granularity, | ||
{ | ||
platform: params.platform, | ||
}, | ||
params.rawResult, | ||
) | ||
} catch (err) { | ||
throw new Error(err) | ||
} | ||
|
||
return result | ||
} | ||
|
||
export async function getActiveMembers<T>(params: ICubeQueryParams) { | ||
const cjs = new CubeJsService() | ||
await cjs.init(params.tenantId, params.segmentIds) | ||
|
||
let result: T | ||
try { | ||
result = await CubeJsRepository.getActiveMembers( | ||
cjs, | ||
moment(params.startDate), | ||
moment(params.endDate), | ||
params.granularity, | ||
{ | ||
platform: params.platform, | ||
}, | ||
params.rawResult, | ||
) | ||
} catch (err) { | ||
throw new Error(err) | ||
} | ||
|
||
return result | ||
} | ||
|
||
export async function getNewOrganizations<T>(params: ICubeQueryParams) { | ||
const cjs = new CubeJsService() | ||
await cjs.init(params.tenantId, params.segmentIds) | ||
|
||
let result: T | ||
try { | ||
result = await CubeJsRepository.getNewOrganizations( | ||
cjs, | ||
moment(params.startDate), | ||
moment(params.endDate), | ||
params.granularity, | ||
{ | ||
platform: params.platform, | ||
}, | ||
params.rawResult, | ||
) | ||
} catch (err) { | ||
throw new Error(err) | ||
} | ||
|
||
return result | ||
} | ||
|
||
export async function getActiveOrganizations<T>(params: ICubeQueryParams) { | ||
const cjs = new CubeJsService() | ||
await cjs.init(params.tenantId, params.segmentIds) | ||
|
||
let result: T | ||
try { | ||
result = await CubeJsRepository.getActiveOrganizations( | ||
cjs, | ||
moment(params.startDate), | ||
moment(params.endDate), | ||
params.granularity, | ||
{ | ||
platform: params.platform, | ||
}, | ||
params.rawResult, | ||
) | ||
} catch (err) { | ||
throw new Error(err) | ||
} | ||
|
||
return result | ||
} | ||
|
||
export async function getActivities<T>(params: ICubeQueryParams) { | ||
const cjs = new CubeJsService() | ||
await cjs.init(params.tenantId, params.segmentIds) | ||
|
||
let result: T | ||
try { | ||
result = await CubeJsRepository.getNewActivities( | ||
cjs, | ||
moment(params.startDate), | ||
moment(params.endDate), | ||
params.granularity, | ||
params.dimensions, | ||
{ | ||
platform: params.platform, | ||
}, | ||
params.order, | ||
params.rawResult, | ||
) | ||
} catch (err) { | ||
throw new Error(err) | ||
} | ||
|
||
return result | ||
} | ||
|
||
export async function saveToCache( | ||
tenantId: string, | ||
segmentId: string, | ||
timeframe: DashboardTimeframe, | ||
cacheData: IDashboardData, | ||
platform?: string, | ||
): Promise<void> { | ||
const redisCache = new RedisCache(`dashboard-cache`, svc.redis, svc.log) | ||
let key = `${tenantId}:${segmentId}:${timeframe}` | ||
if (platform) { | ||
key += `:${platform}` | ||
} | ||
await redisCache.set(key, JSON.stringify(cacheData)) | ||
} |
Oops, something went wrong.