Skip to content

Commit

Permalink
refactor: error handling and logging (#95)
Browse files Browse the repository at this point in the history
* refactor: error handling and logging

* feat: fetch catalyst entity by pointer instead of by id

* fix: tests
  • Loading branch information
aleortega authored Oct 1, 2024
1 parent 136a12b commit 30a0d43
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 16 deletions.
24 changes: 14 additions & 10 deletions processor/src/adapters/event-parser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,12 +42,16 @@ export async function createEventParser({
}
}

async function parseCatalystEvent(event: any): Promise<CatalystDeploymentEvent> {
async function parseCatalystEvent(event: any): Promise<CatalystDeploymentEvent | undefined> {
const contentUrl = event.contentServerUrls ? event.contentServerUrls[0] : loadBalancer

const fetchedEntity: Entity = await badgeContext.getEntityById(event.entity.entityId, {
contentServerUrl: contentUrl
})
const fetchedEntity: Entity | undefined = (
await badgeContext.getEntitiesByPointers(event.entity.pointers, { contentServerUrl: contentUrl })
).at(0)

if (!fetchedEntity) {
return undefined
}

return {
type: Events.Type.CATALYST_DEPLOYMENT,
Expand Down Expand Up @@ -77,8 +81,7 @@ export async function createEventParser({
async function parse(event: any): Promise<Event | undefined> {
try {
if (event.entity && Object.values(Events.SubType.CatalystDeployment).includes(event.entity.entityType)) {
const parsedCatalystEvent = await parseCatalystEvent(event)
return parsedCatalystEvent
return await parseCatalystEvent(event)
}

const parsedEvent = parseEvent(event)
Expand All @@ -89,13 +92,14 @@ export async function createEventParser({

return parsedEvent
} catch (error: any) {
const message = error?.message || 'No details'
logger.debug('Error while parsing event', {
error: error.message,
cause: error.cause,
stack: error.stack,
error: message,
cause: JSON.stringify(error.cause),
stack: JSON.stringify(error.stack),
event: JSON.stringify(event)
})
throw new ParsingEventError(`Error while parsing event: ${error?.message}`, { cause: error })
throw new ParsingEventError(`Error while parsing event: ${message}`, { cause: error })
}
}

Expand Down
2 changes: 1 addition & 1 deletion processor/src/logic/message-consumer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ export function createMessagesConsumerComponent({
parsedMessage = await eventParser.parse(message)

if (!parsedMessage) {
logger.warn('Message is not a valid event', { message })
logger.warn('Message is not a valid event or could not be parsed', { message })
await removeMessageFromQueue(ReceiptHandle!, 'unknown')
continue
}
Expand Down
10 changes: 5 additions & 5 deletions processor/test/unit/adapters/event-parser.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -75,15 +75,15 @@ describe('Event Parser', () => {
const { config, logs, badgeContext } = await getMockedComponents()
const parser = await createEventParser({ config, logs, badgeContext })
const event = {
entity: { entityId: 'some-id', entityType: Events.SubType.CatalystDeployment.PROFILE }
entity: { entityId: 'some-id', pointers: ['0xTest'], entityType: Events.SubType.CatalystDeployment.PROFILE }
}

badgeContext.getEntityById = jest.fn().mockResolvedValue(mockEntity)
badgeContext.getEntitiesByPointers = jest.fn().mockResolvedValue([mockEntity])

const result = await parser.parse(event)
const loadBalancerUrl = await config.requireString('CATALYST_CONTENT_URL_LOADBALANCER')

expect(badgeContext.getEntityById).toHaveBeenCalledWith(event.entity.entityId, {
expect(badgeContext.getEntitiesByPointers).toHaveBeenCalledWith(event.entity.pointers, {
contentServerUrl: loadBalancerUrl
})

Expand All @@ -106,7 +106,7 @@ describe('Event Parser', () => {
contentServerUrls: ['http://some-url']
}

badgeContext.getEntityById = jest.fn().mockResolvedValue(mockEntity)
badgeContext.getEntitiesByPointers = jest.fn().mockResolvedValue([mockEntity])

const result = await parser.parse(event)

Expand All @@ -127,7 +127,7 @@ describe('Event Parser', () => {
contentServerUrls: ['http://some-url']
}

badgeContext.getEntityById = jest.fn().mockRejectedValue(new Error('Error fetching entity from content server'))
badgeContext.getEntitiesByPointers = jest.fn().mockRejectedValue(new Error('Error fetching entity from content server'))
const parser = await createEventParser({ config, logs, badgeContext })


Expand Down

0 comments on commit 30a0d43

Please sign in to comment.