PDM Poller

2025-10-24 | ๐Ÿ“‘ 0 words | โฑ 0 mins | ๐Ÿงพ History | โœ Tom D'Roza | ๐Ÿ”‘ Ross Buggins

๐Ÿšง This page has less that 200 words. So it looks like this page is still under construction.

Known Issues / Todo

  • โ›… This page is draft and is subject to rapid change, and may not be fully accurate or complete

Events Consumed

Events Produced

Diagrams

c4code-pdm-poller

PDM Poller
C4:
Link to this diagram directly: /nhs-notify-digital-letters/diagrams/c4code-pdm-poller.html

Questions

  1. What poll interval and duration is needed for the PDM Poller?

Decisions

  1. Use of an SQS Delay Queue to manage polling intervals
  2. PDMResourceUnavailable event to contain retry count
  3. PollPDM lambda to determine when max retries exceeded and emit a PDMResourceRetriesExceeded event
architecture-beta
    service pdmResourceSubmitted(aws:res-amazon-eventbridge-event)[PDMResourceSubmitted Event]
    service pdmResourceAvailable(aws:res-amazon-eventbridge-event)[PDMResourceUnavailable Event]
    service pdmResourceUnavailable2(aws:res-amazon-eventbridge-event)[PDMResourceAvailable Event]
    service pdmRetriesExceeded(aws:res-amazon-eventbridge-event)[PDMResourceRetriesExceeded Event]
    service pdmResourceUnavailable(aws:res-amazon-eventbridge-event)[PDMResourceUnavailable Event]
    group checkPdm(cloud)[PDMPoller]
    service pollPdmQueue(logos:aws-sqs)[PollPDM SQS Delay Queue] in checkPdm
    service pollPdmLambda(logos:aws-lambda)[PollPDM] in checkPdm
    service pdm(server)[PDM]
    junction j1
    junction j2
    junction j3

    pdmResourceSubmitted:B -- T:j3
    pdmResourceUnavailable:T -- B:j3
    j3:R --> L:pollPdmQueue
    pollPdmQueue:R --> L:pollPdmLambda
    pollPdmLambda:R <--> L:pdm
    pollPdmLambda:B -- T:j1
    j1:R --> L:pdmResourceUnavailable2
    j1:B -- T:j2
    j2:R --> L:pdmResourceAvailable
    j2:B --> L:pdmRetriesExceeded

sequence-pdm-poller

C4:
Link to this diagram directly: /nhs-notify-digital-letters/diagrams/sequence-pdm-poll.html

sequenceDiagram
  participant eventBus as EventBridge
  participant pdmPollerQueue as Queue<br/>PDMPollerQueue
  participant pdmPoller as Lambda<br/>PDMPoller
  participant pdm as PDM

  eventBus -) pdmPollerQueue: PDMResourceSubmitted Event(pdmID)<br/>PDMResourceUnavailable Event(pdmID)
  activate pdmPollerQueue
  pdmPollerQueue ->> pdmPoller:
  deactivate pdmPollerQueue
  activate pdmPoller
  loop Until resource contains payload
    pdmPoller ->> pdm: GetSpecificResource(pdmID)
    activate pdm
    pdm -->> pdmPoller: DocumentReference
    pdm ->> eventBus: PDMResourceUnavailable(pdmID) [if no payload]
    deactivate pdm
  end
  alt Resource contains payload
  pdmPoller -) eventBus: PDMResourceAvailable(pdmID)
  else after retries exceeded
  pdmPoller -) eventBus: PDMResourceRetriesExceeded(pdmID)
  deactivate pdmPoller
  end