Skip to content

Commit f09901f

Browse files
author
Uros Marolt
authored
Missing indexes, script improvements, fixes (#1500)
1 parent aa5cb7e commit f09901f

File tree

8 files changed

+121
-43
lines changed

8 files changed

+121
-43
lines changed

backend/src/bin/jobs/memberScoreCoordinator.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { PythonWorkerMessageType } from '../../serverless/types/workerTypes'
55

66
const job: CrowdJob = {
77
name: 'Member Score Coordinator',
8-
cronTime: cronGenerator.every(20).minutes(),
8+
cronTime: cronGenerator.every(90).minutes(),
99
onTrigger: async () => {
1010
await sendPythonWorkerMessage('global', {
1111
type: PythonWorkerMessageType.MEMBERS_SCORE,

backend/src/bin/nodejs-worker.ts

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Logger, getChildLogger, getServiceLogger } from '@crowd/logging'
1+
import { Logger, getChildLogger, getServiceLogger, logExecutionTimeV2 } from '@crowd/logging'
22
import { DeleteMessageRequest, Message, ReceiveMessageRequest } from 'aws-sdk/clients/sqs'
33
import moment from 'moment'
44
import { timeout } from '@crowd/common'
@@ -119,7 +119,19 @@ async function handleMessages() {
119119
})
120120

121121
try {
122-
messageLogger.debug('Received a new queue message!')
122+
if (
123+
msg.type === NodeWorkerMessageType.DB_OPERATIONS &&
124+
(msg as any).operation === 'update_members'
125+
) {
126+
messageLogger.warn('Skipping update_members message! TEMPORARY MEASURE!')
127+
await removeFromQueue(message.ReceiptHandle)
128+
return
129+
}
130+
131+
messageLogger.info(
132+
{ messageType: msg.type, messagePayload: JSON.stringify(msg) },
133+
'Received a new queue message!',
134+
)
123135

124136
let processFunction: (msg: NodeWorkerMessageBase, logger?: Logger) => Promise<void>
125137
let keep = false
@@ -152,7 +164,13 @@ async function handleMessages() {
152164
await removeFromQueue(message.ReceiptHandle)
153165
messagesInProgress.set(message.MessageId, msg)
154166
try {
155-
await processFunction(msg, messageLogger)
167+
await logExecutionTimeV2(
168+
async () => {
169+
await processFunction(msg, messageLogger)
170+
},
171+
messageLogger,
172+
'queueMessageProcessingTime',
173+
)
156174
} catch (err) {
157175
messageLogger.error(err, 'Error while processing queue message!')
158176
} finally {
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
drop index if exists "ix_segmentActivityChannels_segmentId_platform";
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
create index if not exists "ix_segmentActivityChannels_segmentId_platform" on "segmentActivityChannels" ("segmentId", platform);

services/apps/data_sink_worker/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@
1717
"script:restart-failed-results": "SERVICE=script TS_NODE_TRANSPILE_ONLY=true node -r tsconfig-paths/register -r ts-node/register src/bin/restart-failed-results.ts",
1818
"script:restart-all-failed-results": "SERVICE=script TS_NODE_TRANSPILE_ONLY=true node -r tsconfig-paths/register -r ts-node/register src/bin/restart-all-failed-results.ts",
1919
"script:restart-x-failed-results": "SERVICE=script TS_NODE_TRANSPILE_ONLY=true node -r tsconfig-paths/register -r ts-node/register src/bin/restart-x-failed-results.ts",
20-
"script:restart-result": "SERVICE=script TS_NODE_TRANSPILE_ONLY=true node -r tsconfig-paths/register -r ts-node/register src/bin/restart-result.ts"
20+
"script:restart-result": "SERVICE=script TS_NODE_TRANSPILE_ONLY=true node -r tsconfig-paths/register -r ts-node/register src/bin/restart-result.ts",
21+
"script:process-results": "SERVICE=script TS_NODE_TRANSPILE_ONLY=true node -r tsconfig-paths/register -r ts-node/register src/bin/process-results.ts"
2122
},
2223
"dependencies": {
2324
"@crowd/common": "file:../../libs/common",
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import { DB_CONFIG, REDIS_CONFIG, SQS_CONFIG } from '@/conf'
2+
import DataSinkRepository from '@/repo/dataSink.repo'
3+
import DataSinkService from '@/service/dataSink.service'
4+
import { DbStore, getDbConnection } from '@crowd/database'
5+
import { getServiceLogger } from '@crowd/logging'
6+
import { getRedisClient } from '@crowd/redis'
7+
import { NodejsWorkerEmitter, SearchSyncWorkerEmitter, getSqsClient } from '@crowd/sqs'
8+
9+
const log = getServiceLogger()
10+
11+
const processArguments = process.argv.slice(2)
12+
13+
if (processArguments.length !== 1) {
14+
log.error('Expected 1 argument: resultIds')
15+
process.exit(1)
16+
}
17+
18+
const resultIds = processArguments[0].split(',')
19+
20+
setImmediate(async () => {
21+
const sqsClient = getSqsClient(SQS_CONFIG())
22+
const redisClient = await getRedisClient(REDIS_CONFIG())
23+
24+
const nodejsWorkerEmitter = new NodejsWorkerEmitter(sqsClient, log)
25+
const searchSyncWorkerEmitter = new SearchSyncWorkerEmitter(sqsClient, log)
26+
27+
const dbConnection = await getDbConnection(DB_CONFIG())
28+
const store = new DbStore(log, dbConnection)
29+
30+
const service = new DataSinkService(
31+
store,
32+
nodejsWorkerEmitter,
33+
searchSyncWorkerEmitter,
34+
redisClient,
35+
log,
36+
)
37+
38+
const repo = new DataSinkRepository(store, log)
39+
for (const resultId of resultIds) {
40+
const result = await repo.getResultInfo(resultId)
41+
if (!result) {
42+
log.error(`Result ${resultId} not found!`)
43+
continue
44+
} else {
45+
await repo.resetResults([resultId])
46+
47+
await service.processResult(resultId)
48+
}
49+
}
50+
51+
process.exit(0)
52+
})

services/apps/integration_run_worker/src/bin/onboard-integration.ts

Lines changed: 35 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ const log = getServiceLogger()
99

1010
const processArguments = process.argv.slice(2)
1111

12-
const integrationId = processArguments[0]
12+
const parameter = processArguments[0]
1313

1414
setImmediate(async () => {
1515
const sqsClient = getSqsClient(SQS_CONFIG())
@@ -21,35 +21,40 @@ setImmediate(async () => {
2121

2222
const repo = new IntegrationRunRepository(store, log)
2323

24-
const integration = await repo.getIntegrationData(integrationId)
25-
26-
if (integration) {
27-
if (integration.state == IntegrationState.IN_PROGRESS) {
28-
log.warn(`Integration already running!`)
29-
process.exit(1)
30-
}
31-
32-
if (integration.state == IntegrationState.INACTIVE) {
33-
log.warn(`Integration is not active!`)
34-
process.exit(1)
24+
const integrationIds = parameter.split(',')
25+
26+
for (const integrationId of integrationIds) {
27+
const integration = await repo.getIntegrationData(integrationId)
28+
29+
if (integration) {
30+
if (integration.state == IntegrationState.IN_PROGRESS) {
31+
log.warn(`Integration already running!`)
32+
continue
33+
}
34+
35+
if (integration.state == IntegrationState.INACTIVE) {
36+
log.warn(`Integration is not active!`)
37+
continue
38+
}
39+
40+
if (integration.state == IntegrationState.WAITING_APPROVAL) {
41+
log.warn(`Integration is waiting for approval!`)
42+
continue
43+
}
44+
45+
log.info(`Triggering integration run for ${integrationId}!`)
46+
47+
await emitter.triggerIntegrationRun(
48+
integration.tenantId,
49+
integration.type,
50+
integration.id,
51+
true,
52+
)
53+
} else {
54+
log.error({ integrationId }, 'Integration not found!')
55+
continue
3556
}
36-
37-
if (integration.state == IntegrationState.WAITING_APPROVAL) {
38-
log.warn(`Integration is waiting for approval!`)
39-
process.exit(1)
40-
}
41-
42-
log.info(`Triggering integration run for ${integrationId}!`)
43-
44-
await emitter.triggerIntegrationRun(
45-
integration.tenantId,
46-
integration.type,
47-
integration.id,
48-
true,
49-
)
50-
process.exit(0)
51-
} else {
52-
log.error({ integrationId }, 'Integration not found!')
53-
process.exit(1)
5457
}
58+
59+
process.exit(0)
5560
})

services/apps/search_sync_worker/src/service/organization.sync.service.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -88,10 +88,10 @@ export class OrganizationSyncService extends LoggerBase {
8888
},
8989
}
9090

91-
const sort = [{ date_joinedAt: 'asc' }]
92-
const include = ['date_joinedAt', 'uuid_organizationId']
91+
const sort = [{ date_createdAt: 'asc' }]
92+
const include = ['date_createdAt', 'uuid_organizationId']
9393
const pageSize = 500
94-
let lastJoinedAt: string
94+
let lastCreatedAt: string
9595

9696
let results = (await this.openSearchService.search(
9797
OpenSearchIndex.ORGANIZATIONS,
@@ -101,7 +101,7 @@ export class OrganizationSyncService extends LoggerBase {
101101
sort,
102102
undefined,
103103
include,
104-
)) as ISearchHit<{ date_joinedAt: string; uuid_organizationId: string }>[]
104+
)) as ISearchHit<{ date_createdAt: string; uuid_organizationId: string }>[]
105105

106106
let processed = 0
107107

@@ -126,17 +126,17 @@ export class OrganizationSyncService extends LoggerBase {
126126
processed += results.length
127127
this.log.warn({ tenantId }, `Processed ${processed} organizations while cleaning up tenant!`)
128128

129-
// use last joinedAt to get the next page
130-
lastJoinedAt = results[results.length - 1]._source.date_joinedAt
129+
// use last createdAt to get the next page
130+
lastCreatedAt = results[results.length - 1]._source.date_createdAt
131131
results = (await this.openSearchService.search(
132132
OpenSearchIndex.ORGANIZATIONS,
133133
query,
134134
undefined,
135135
pageSize,
136136
sort,
137-
lastJoinedAt,
137+
lastCreatedAt,
138138
include,
139-
)) as ISearchHit<{ date_joinedAt: string; uuid_organizationId: string }>[]
139+
)) as ISearchHit<{ date_createdAt: string; uuid_organizationId: string }>[]
140140
}
141141

142142
this.log.warn(

0 commit comments

Comments
 (0)