Archived
1
0

by_json: gen_orgas.sh refactorisation

This commit is contained in:
Olivier DOSSMANN 2020-02-07 14:27:29 +01:00
parent 7bf5972250
commit 5cb48604c3
6 changed files with 136 additions and 112 deletions

View File

@ -12,6 +12,14 @@ tmpl_gizmo="templates/gizmo.tmpl" # A colored polygon. Represents an entity.
tmpl_link="templates/link.tmpl" # A link between two entities. tmpl_link="templates/link.tmpl" # A link between two entities.
tmpl_label="templates/label_default.tmpl" # Default label for entities. tmpl_label="templates/label_default.tmpl" # Default label for entities.
# pastel colors (Cf. https://www.color-hex.com/color-palette/5361)
COLOR1="#ffb3ba"
COLOR2="#ffdfba"
COLOR3="#ffffba"
COLOR4="#baffc9"
COLOR5="#bae1ff"
COMP_COLOR4="#ffd8ba"
# Graph info # Graph info
rankdir="RL" rankdir="RL"
title="" title=""

View File

@ -1,10 +1,10 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# #
# Generate a dot file to create graph of RERO-ils data (orga, lib and users) # Generate a dot file to create graph of RERO-ils data
# #
# Usage: # Usage:
# bash gen.sh output.dot # bash gen_orgas.sh output.dot
# where `output.dot` is the output file that permit to generate a graph. # where `output.dot` is the output file that permit to generate a graph.
# To generate the graph: # To generate the graph:
# dot -Tsvg output.dot -o organisations.svg # dot -Tsvg output.dot -o organisations.svg
@ -12,18 +12,6 @@
# CONFIG # CONFIG
RERO_DIR="${HOME}/projets/rero/rero-ils" RERO_DIR="${HOME}/projets/rero/rero-ils"
# pastel colors (Cf. https://www.color-hex.com/color-palette/5361)
COLOR1="#ffb3ba"
COLOR2="#ffdfba"
COLOR3="#ffffba"
COLOR4="#baffc9"
COLOR5="#bae1ff"
COMP_COLOR4="#ffd8ba"
# colors you choose for different objects
ORGA_COLOR="${COLOR1}" # organisations
LIB_COLOR="${COLOR2}" # libraries
PT_COLOR="${COLOR3}" # patron_types
USER_COLOR="${COLOR5}" # users/patrons
# Load commons variables, functions and statements # Load commons variables, functions and statements
source commons.sh source commons.sh
@ -33,110 +21,16 @@ title="Link between organisations, libraries and users."
save "templates/header.tmpl" save "templates/header.tmpl"
# ORGANISATIONS # ORGANISATIONS
shape="box" source process_orgas.sh
color="${ORGA_COLOR}"
while read -r orga
do
# take important info
pid=$(echo $orga|jq -r .pid)
code=$(echo $orga|jq -r .code)
name=$(echo $orga|jq -r .name)
# write result in output
identifier="Orga${pid}"
label="$(render ${tmpl_label})"
save "${tmpl_gizmo}"
done <<< $(parse_json "organisations")
# LIBRARIES # LIBRARIES
shape="house" source process_lib.sh
color="${LIB_COLOR}"
while read -r lib
do
pid=$(echo $lib|jq -r .pid)
name=$(echo $lib|jq -r .name)
code=$(echo $lib|jq -r .code)
orga=$(echo $lib|jq -r .organisation)
orga_pid=$(echo $orga|rev|cut -d "/" -f 1|rev)
# write result in output
identifier="Lib${pid}"
label="$(render ${tmpl_label})"
save "${tmpl_gizmo}"
relation="Orga${orga_pid}"
save "${tmpl_link}"
done <<< $(parse_json "libraries")
# PATRON_TYPES # PATRON_TYPES
shape="polygon" source process_pt.sh
color="${PT_COLOR}"
additionals="sides=7"
while read pt
do
pid=$(echo $pt|jq -r .pid)
name=$(echo $pt|jq -r .name)
orga=$(echo $pt|jq -r .organisation)
# write result in output
identifier="Type${pid}"
label="$(render templates/label_patron_types.tmpl)"
save "${tmpl_gizmo}"
# Make a link with organisation if present
if [[ -n "${orga}" ]]; then
orga_pid=$(echo $orga|rev|cut -d "/" -f 1|rev)
relation="Orga${orga_pid}"
save "${tmpl_link}"
fi
done <<< $(parse_json "patron_types")
# USERS # USERS
shape="ellipse" source process_users.sh
additionals=''
color="${USER_COLOR}"
while read user
do
email=$(echo $user|jq -r .email)
first_name=$(echo $user|jq -r .first_name)
last_name=$(echo $user|jq -r .last_name)
barcode=$(echo $user|jq -r .barcode)
roles=$(echo $user|jq -r .roles[])
library=$(echo $user|jq -r .library)
library_pid=$(echo $library|rev|cut -d "/" -f 1|rev)
pt=$(echo $user|jq -r .pt)
# Prepare additional info
if [[ "${roles}" != "null" ]]; then
displayed_roles="roles: "
for role in ${roles}; do
displayed_roles="${displayed_roles}<font color='red' >${role}</font>, "
done
fi
# Don't display barcode if no one
info=""
if [[ "${barcode}" != "null" ]]; then
info="${info}<br/>${barcode}"
fi
# Same for roles
if [[ -n "${displayed_roles}" ]]; then
info="${info}<br/>${displayed_roles}"
fi
# write result in output
identifier="User_${email}"
label="$(render templates/label_users.tmpl)"
save "${tmpl_gizmo}"
# Display a link if library_pid is not null
if [[ "${library_pid}" != "null" ]]; then
relation="Lib${library_pid}"
save "${tmpl_link}"
fi
# Display a link if patron_type is not null
if [[ "$pt" != "null" ]]; then
pt_id=$(echo $pt|rev| cut -d "/" -f 1|rev)
relation="Type${pt_id}"
save "${tmpl_link}"
fi
done <<< $(parse_json "users")
# Graph footer # Graph footer
save "templates/footer.tmpl" save "templates/footer.tmpl"

22
by_json/process_lib.sh Normal file
View File

@ -0,0 +1,22 @@
# DEPENDS ON: Organisations (process_orgas.sh)
# Colors
LIB_COLOR="${COLOR2}" # libraries
# Main configuration
shape="house"
color="${LIB_COLOR}"
while read -r lib
do
pid=$(echo $lib|jq -r .pid)
name=$(echo $lib|jq -r .name)
code=$(echo $lib|jq -r .code)
orga=$(echo $lib|jq -r .organisation)
orga_pid=$(echo $orga|rev|cut -d "/" -f 1|rev)
# write result in output
identifier="Lib${pid}"
label="$(render ${tmpl_label})"
save "${tmpl_gizmo}"
relation="Orga${orga_pid}"
save "${tmpl_link}"
done <<< $(parse_json "libraries")

19
by_json/process_orgas.sh Normal file
View File

@ -0,0 +1,19 @@
# DEPENDS ON: None
# Colors
ORGA_COLOR="${COLOR1}" # organisations
# Main configuration
shape="box"
color="${ORGA_COLOR}"
while read -r orga
do
# take important info
pid=$(echo $orga|jq -r .pid)
code=$(echo $orga|jq -r .code)
name=$(echo $orga|jq -r .name)
# write result in output
identifier="Orga${pid}"
label="$(render ${tmpl_label})"
save "${tmpl_gizmo}"
done <<< $(parse_json "organisations")

26
by_json/process_pt.sh Normal file
View File

@ -0,0 +1,26 @@
# DEPENDS ON: Organisations (process_orgas.sh)
# Colors
PT_COLOR="${COLOR3}" # patron_types
# Main configuration
shape="polygon"
color="${PT_COLOR}"
additionals="sides=7"
while read pt
do
pid=$(echo $pt|jq -r .pid)
name=$(echo $pt|jq -r .name)
orga=$(echo $pt|jq -r .organisation)
# write result in output
identifier="Type${pid}"
label="$(render templates/label_patron_types.tmpl)"
save "${tmpl_gizmo}"
# Make a link with organisation if present
if [[ -n "${orga}" ]]; then
orga_pid=$(echo $orga|rev|cut -d "/" -f 1|rev)
relation="Orga${orga_pid}"
save "${tmpl_link}"
fi
done <<< $(parse_json "patron_types")

55
by_json/process_users.sh Normal file
View File

@ -0,0 +1,55 @@
# DEPENDS ON: Patron types (process_pt.sh), Library (process_lib.sh)
# Colors
USER_COLOR="${COLOR5}" # users/patrons
# Main configuration
shape="ellipse"
additionals=''
color="${USER_COLOR}"
while read user
do
email=$(echo $user|jq -r .email)
first_name=$(echo $user|jq -r .first_name)
last_name=$(echo $user|jq -r .last_name)
barcode=$(echo $user|jq -r .barcode)
roles=$(echo $user|jq -r .roles[])
library=$(echo $user|jq -r .library)
library_pid=$(echo $library|rev|cut -d "/" -f 1|rev)
pt=$(echo $user|jq -r .pt)
# Prepare additional info
if [[ "${roles}" != "null" ]]; then
displayed_roles="roles: "
for role in ${roles}; do
displayed_roles="${displayed_roles}<font color='red' >${role}</font>, "
done
fi
# Don't display barcode if no one
info=""
if [[ "${barcode}" != "null" ]]; then
info="${info}<br/>${barcode}"
fi
# Same for roles
if [[ -n "${displayed_roles}" ]]; then
info="${info}<br/>${displayed_roles}"
fi
# write result in output
identifier="User_${email}"
label="$(render templates/label_users.tmpl)"
save "${tmpl_gizmo}"
# Display a link if library_pid is not null
if [[ "${library_pid}" != "null" ]]; then
relation="Lib${library_pid}"
save "${tmpl_link}"
fi
# Display a link if patron_type is not null
if [[ "$pt" != "null" ]]; then
pt_id=$(echo $pt|rev| cut -d "/" -f 1|rev)
relation="Type${pt_id}"
save "${tmpl_link}"
fi
done <<< $(parse_json "users")