Op het NMDC staat op de bhldmpod01.knmi.nl machine een aantal scripts in /root/bin/.
Het script create_workflow_mappings.sh (zie onderstaand) is geschreven door Evert de Vos (Snow) en wordt gebruikt om op een eenvoudige manier workflow mappings te importeren in de centrale database. Het script leest een *.csv workflow-mappingsfile in welke wordt aangeleverd door Deltares bij elke release. Dit *.csv bestand wordt in SVN beheerd.
create_workflow_mappings.sh
#!/bin/bash scriptdir=$(dirname "$0") csv_file="$1" usage () { echo "Usage: $0 <workflow_mapping.csv>" >&2 exit 1 } [ $# -eq 1 ] || usage "$scriptdir"/create_workflow_sql.py nlkd00 < "$csv_file" | ssh root@bhldmpdb101 psql # "$scriptdir"/create_workflow_sql.py nlkd01 < "$csv_file" | ssh root@bhldmpdb201 psql |
---|
Het script maakt gebruik van een ander script: create_workflow_sql.py. Dit script zet de informatie in de *.csv file om in sql code en voert die sql code vervolgens uit op de database.
create_workflow_sql.py
#!/usr/bin/python import sys import csv
_WF_INSERT="INSERT INTO %s.workflowtargetfsss VALUES ('%s','%s');" _WF_DELETE="DELETE FROM %s.workflowtargetfsss WHERE workflowid='%s';"
if len(sys.argv)<=1: print("Usage: %s [database] < workflows.csv" % sys.argv[0]) sys.exit(1) else: database=sys.argv[1]
mappings=csv.DictReader(sys.stdin) for line in mappings: workflowId=line['WorkflowId'] fssIds=line['FSS'] fssIds=fssIds.replace('mc*-','').replace(' ','').split(',') print(_WF_DELETE % (database,workflowId)) for fss in fssIds: print(_WF_INSERT % (database,workflowId,fss)) |
---|
Gebruik van het script: /root/bin/create_workflow_mappings.sh <mappingsfile.csv>
WAARSCHUWING: Indien de *.csv niet in het verwachte formaat wordt aangeleverd kan het python script niet-voorspelbare sql-code genereren met alle gevolgen van dien. Let hier dus op bij het genereren van het *.csv bestand.