Skip to content

Commit 23c2847

Browse files
committed
feat: add logging
Signed-off-by: Umberto Sgueglia <usgueglia@contractor.linuxfoundation.org>
1 parent 347d0bb commit 23c2847

1 file changed

Lines changed: 39 additions & 10 deletions

File tree

services/apps/script_executor_worker/src/bin/recalculate-enrichment-affiliations.ts

Lines changed: 39 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,9 @@ const log = getServiceChildLogger('recalculate-enrichment-affiliations')
5151

5252
interface MemberWithOrgs {
5353
memberId: string
54-
organizationIds: string[]
54+
activeOrgIds: string[]
55+
deletedOrgCount: number
56+
activeOrgCount: number
5557
}
5658

5759
interface ScriptOptions {
@@ -109,11 +111,16 @@ async function fetchPage(
109111

110112
// Selects only members that have at least one work experience created by enrichment
111113
// (source IN enrichment-progai, enrichment-clearbit, enrichment-crustdata).
112-
// organizationIds contains only the enrichment-sourced org IDs for that member —
114+
// activeOrgIds contains only the active enrichment-sourced org IDs for that member —
113115
// used by the memberUpdate workflow to determine which orgs to sync to OpenSearch.
116+
// deletedOrgCount and activeOrgCount are used for impact logging only.
114117
const rows = await qx.select(
115118
`
116-
SELECT "memberId", array_agg(DISTINCT "organizationId") AS "organizationIds"
119+
SELECT
120+
"memberId",
121+
array_agg(DISTINCT "organizationId") FILTER (WHERE "deletedAt" IS NULL) AS "activeOrgIds",
122+
COUNT(*) FILTER (WHERE "deletedAt" IS NOT NULL) AS "deletedOrgCount",
123+
COUNT(*) FILTER (WHERE "deletedAt" IS NULL) AS "activeOrgCount"
117124
FROM "memberOrganizations"
118125
WHERE source = ANY($(sources))
119126
${cursorClause}
@@ -124,7 +131,12 @@ async function fetchPage(
124131
{ sources: ENRICHMENT_SOURCES, afterMemberId, pageSize },
125132
)
126133

127-
return rows as MemberWithOrgs[]
134+
return rows.map((r: Record<string, unknown>) => ({
135+
memberId: r.memberId,
136+
activeOrgIds: (r.activeOrgIds as string[] | null) ?? [],
137+
deletedOrgCount: Number(r.deletedOrgCount),
138+
activeOrgCount: Number(r.activeOrgCount),
139+
})) as MemberWithOrgs[]
128140
}
129141

130142
async function runWithConcurrency<T>(
@@ -181,6 +193,9 @@ async function main() {
181193
let totalSucceeded = 0
182194
let totalFailed = 0
183195
let totalProcessed = 0
196+
let totalActiveOrgs = 0
197+
let totalDeletedOrgs = 0
198+
let totalMembersWithDeletedOrgs = 0
184199

185200
let hasMore = true
186201
while (hasMore) {
@@ -203,7 +218,15 @@ async function main() {
203218
}
204219

205220
const lastMemberId = membersPage[membersPage.length - 1].memberId
206-
log.info(`Page ${pageNum}: ${membersPage.length} members | cursor: ${lastMemberId}`)
221+
const pageActiveOrgs = membersPage.reduce((sum, m) => sum + m.activeOrgCount, 0)
222+
const pageDeletedOrgs = membersPage.reduce((sum, m) => sum + m.deletedOrgCount, 0)
223+
const membersWithDeletedOrgs = membersPage.filter((m) => m.deletedOrgCount > 0).length
224+
totalActiveOrgs += pageActiveOrgs
225+
totalDeletedOrgs += pageDeletedOrgs
226+
totalMembersWithDeletedOrgs += membersWithDeletedOrgs
227+
log.info(
228+
`Page ${pageNum}: ${membersPage.length} members | active orgs: ${pageActiveOrgs} | deleted orgs: ${pageDeletedOrgs} (${membersWithDeletedOrgs} members affected) | cursor: ${lastMemberId}`,
229+
)
207230

208231
if (opts.dryRun) {
209232
log.info(`[DRY RUN] Would trigger ${membersPage.length} workflows`)
@@ -212,7 +235,11 @@ async function main() {
212235
const { succeeded, failed } = await runWithConcurrency(
213236
membersPage,
214237
opts.concurrency,
215-
async ({ memberId, organizationIds }) => {
238+
async ({ memberId, activeOrgIds, deletedOrgCount }) => {
239+
log.debug(
240+
{ memberId, activeOrgs: activeOrgIds.length, deletedOrgs: deletedOrgCount },
241+
'Triggering memberUpdate workflow',
242+
)
216243
await temporal.workflow.start('memberUpdate', {
217244
taskQueue: 'profiles',
218245
workflowId: `member-update/${DEFAULT_TENANT_ID}/${memberId}`,
@@ -222,7 +249,7 @@ async function main() {
222249
args: [
223250
{
224251
member: { id: memberId },
225-
memberOrganizationIds: organizationIds,
252+
memberOrganizationIds: activeOrgIds,
226253
syncToOpensearch: true,
227254
},
228255
],
@@ -253,10 +280,12 @@ async function main() {
253280
log.info('='.repeat(80))
254281
log.info('Summary')
255282
log.info('='.repeat(80))
256-
log.info(`Pages processed: ${pageNum}`)
283+
log.info(`Pages processed: ${pageNum}`)
284+
log.info(`Members with active orgs: ${totalProcessed} (active enrichment orgs: ${totalActiveOrgs})`)
285+
log.info(`Members with deleted orgs: ${totalMembersWithDeletedOrgs} (deleted enrichment orgs: ${totalDeletedOrgs})`)
257286
if (!opts.dryRun) {
258-
log.info(`Total succeeded: ${totalSucceeded}`)
259-
log.info(`Total failed: ${totalFailed}`)
287+
log.info(`Workflows succeeded: ${totalSucceeded}`)
288+
log.info(`Workflows failed: ${totalFailed}`)
260289
}
261290

262291
process.exit(totalFailed > 0 ? 1 : 0)

0 commit comments

Comments
 (0)