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.

  • No labels