avicenna/service/data-hub/workflows/synapse/bak.syn-extraction.yml

169 lines
5.4 KiB
YAML

id: syn-extraction
namespace: dev
description: Run Avicenna extraction with synapse
labels:
env: dev
project: avicenna
# triggers:
# - id: schedule
# type: io.kestra.plugin.core.trigger.Schedule
# cron: "*/5 * * * *"
tasks:
- id: synapseConfig
type: io.kestra.plugin.core.storage.Write
content: |
pipelines:
- name: "patient"
source:
type: "rest_api"
config:
base_url: "https://avicenna.dispolive.de"
path: "/data/patientenStammdaten"
method: POST
records_path: "data"
auth:
strategy: "dispolive"
dispolive:
username: Marcel
password: arndt1.!
rate_limit:
requests_per_second: 5
burst: 1
destination:
type: "csv"
config:
path: "./patient.csv"
transform:
- strategy: keep_fields
config:
fields:
- "_id"
- "name"
- "surname"
- "street"
- "zip"
- "city"
- "birthday"
- "kkId"
- "krankenkasse"
- strategy: rename_fields
config:
mapping:
_id: id
- strategy: add_fields
config:
fields: |
{
"jobId": "{{ execution.id }}"
}
- name: "attendanceRegistration"
sync:
strategy: "time_range_iteration"
time_range_iteration:
start_date: "2025-02-01"
end_date: "2025-02-28"
date_format: "2006-01-02"
interval: 1d
source:
type: "rest_api"
config:
base_url: "https://app.planning.nu"
{% raw %}path: "/avicennaambulance/api2/attendance-registration/{{.SliceStart}}"{% endraw %}
records_path: "attendanceRegistration"
auth:
strategy: "header"
header:
header: "authorization"
token: "Token ${SYN_DYFLEXIS_V2_TOKEN}"
rate_limit:
requests_per_second: 5
burst: 1
destination:
type: "csv"
config:
path: "./_output/02-2025-attendance-registrations.csv"
- id: run
type: io.kestra.plugin.docker.Run
containerImage: thedevilisdero/synapse:latest
pullPolicy: ALWAYS
inputFiles:
synapse.yaml: "{{ outputs.synapseConfig.uri }}"
commands:
- --config
- synapse.yaml
- run
- patient
outputFiles:
- patient.csv
- id: log
type: io.kestra.plugin.core.log.Log
message: "{{ read(outputs.run.outputFiles['patient.csv']) }}"
- id: deleteSource
type: io.kestra.plugin.jdbc.postgresql.Query
url: jdbc:postgresql://avicenna_db:5432/avicenna
username: johndoe
password: randompassword
sql: DELETE FROM "PatientSource";
- id: copyin
type: io.kestra.plugin.jdbc.postgresql.CopyIn
url: jdbc:postgresql://avicenna_db:5432/avicenna
username: johndoe
password: randompassword
format: CSV
from: "{{ outputs.run.outputFiles['patient.csv'] }}"
table: "\"PatientSource\""
header: true
columns:
- birthday
- city
- id
- "\"jobId\""
- "\"kkId\""
- krankenkasse
- name
- street
- surname
- zip
# - id: loadStatic
# type: io.kestra.plugin.core.flow.EachSequential
# value: '{{ outputs.getPartitions.vars.partitions }}'
# - id: getPartitions
# type: io.kestra.plugin.scripts.python.Script
# taskRunner:
# type: io.kestra.plugin.scripts.runner.docker.Docker
# containerImage: ghcr.io/kestra-io/pydata:latest
# beforeCommands:
# - pip install -U arrow
# script: |
# from kestra import Kestra
# import arrow
# partitions = []
# now = arrow.utcnow() #.shift(months=-1)
# partitions.append("from={}&to={}".format(now.span('month')[0].format('YYYY-MM-DD'), now.shift(days=14).format('YYYY-MM-DD')))
# lastMonth = now.shift(months=-1)
# partitions.append("from={}&to={}".format(lastMonth.span('month')[0].format('YYYY-MM-DD'), lastMonth.span('month')[-1].format('YYYY-MM-DD')))
# monthBeforeLast = lastMonth.shift(months=-1)
# partitions.append("from={}&to={}".format(monthBeforeLast.span('month')[0].format('YYYY-MM-DD'), monthBeforeLast.span('month')[-1].format('YYYY-MM-DD')))
# monthBeforeLast = monthBeforeLast.shift(months=-1)
# partitions.append("from={}&to={}".format(monthBeforeLast.span('month')[0].format('YYYY-MM-DD'), monthBeforeLast.span('month')[-1].format('YYYY-MM-DD')))
# Kestra.outputs({'partitions': partitions})
# - id: loadThreeMonths
# type: io.kestra.plugin.core.flow.EachSequential
# value: '{{ outputs.getPartitions.vars.partitions }}'
# tasks:
# - id: loadTours
# type: "io.kestra.plugin.docker.Run"
# containerImage: thedevilisdero/synapse:latest
# - id: "request"
# type: "io.kestra.plugin.core.http.Request"
# uri: "http://avicenna_data:3000/etl?{{ taskrun.value }}"
# headers:
# user-agent: "kestra-io"
# options:
# readTimeout: "PT180S"
# method: "GET"