1. Bereitstellungskonzept
Objekt-Exportdatei generieren und per Web Server bereit stellen
Grundlage für die Etikettierung bildet der Objekt-Export aus der Teedy-Instanz. Der Export erfolgt durch Erzeugung einer CSV-Datei:
- die CSV-Datei wird alle 10 Minuten automatisch vom Server generiert
- die CSV-Datei wird über eine public URL vom Web Server bereitgestellt. Der Zugang ist mit Passwort und Nutzername gesichert
- Der Client kann die CSV-Datei mit bekannten Credentials und dem cURL Tool herunterladen
Der Aufbau
- Document ID
- Objekt Id
- Titel
- Nutzungsberechtigung
- Werkstattbereich
Export-Script / Web Server Konfiguration
htpasswd -c /etc/nginx/.htpassword USER
mkdir -p /var/www/vhosts/things.fablabchemnitz.de/flc/
vim /etc/nginx/sites-enabled/things.fablabchemnitz.de
location /flc/ {
root /var/www/vhosts/things.fablabchemnitz.de;
autoindex on;
autoindex_format json;
auth_basic "Administrator Login";
auth_basic_user_file /etc/nginx/.htpassword;
}
service nginx restart
vim /opt/teedy-inventorylist.sh
#!/bin/bash
DB_USER="user"
DB_NAME="db"
#OUT=$(
psql -t -U$DB_USER $DB_NAME --no-align $'-F,' --command="
/*Warnung. Diese SQL-Abfrage muss mit der Tag-Struktur synchron gehalten werden, da Änderungen nicht automatisch erkannt werden*/
SELECT DISTINCT
CONCAT(
'\"',D.doc_id_c,'\",',
'\"',REPLACE(D.doc_title_c,'\"','\"\"'),'\",',
'\"',dme_value_c,'\",',
'\"',NB."Nutzungsberechtigung",'\",'
'\"',WB."Werkstattbereich",'\"'
)
FROM t_document AS D
JOIN t_document_tag ON D.doc_id_c = t_document_tag.dot_iddocument_c
JOIN t_tag ON t_tag.tag_id_c = t_document_tag.dot_idtag_c
FULL JOIN t_document_metadata AS M ON M.dme_iddocument_c = D.doc_id_c
FULL JOIN t_metadata AS N ON M.dme_idmetadata_c = N.met_id_c
FULL JOIN (
SELECT
t_document.doc_id_c,
t_tag.tag_name_c as "Nutzungsberechtigung"
FROM t_document
JOIN t_document_tag ON t_document.doc_id_c = t_document_tag.dot_iddocument_c
JOIN t_tag ON t_tag.tag_id_c = t_document_tag.dot_idtag_c
WHERE
t_tag.tag_name_c IN (
WITH RECURSIVE RES AS (SELECT
t_tag.tag_id_c,
t_tag.tag_idparent_c,
t_tag.tag_name_c
FROM t_tag WHERE tag_name_c = 'Nutzungsberechtigung'
UNION SELECT
e.tag_id_c,
e.tag_idparent_c,
e.tag_name_c
FROM t_tag AS e INNER JOIN RES s ON s.tag_id_c = e.tag_idparent_c
) SELECT tag_name_c FROM RES
) AND
--t_tag.tag_name_c in ('1/Allgemeine_Arbeitsschutzeinweisung', '2/Kurzeinweisung', '3/Maschinenführerschein') AND
t_document_tag.dot_deletedate_d IS NULL
) AS NB on NB.doc_id_c = D.doc_id_c
FULL JOIN (
SELECT
t_document.doc_id_c,
t_tag.tag_name_c as "Werkstattbereich"
FROM t_document
JOIN t_document_tag ON t_document.doc_id_c = t_document_tag.dot_iddocument_c
JOIN t_tag ON t_tag.tag_id_c = t_document_tag.dot_idtag_c
WHERE
t_tag.tag_name_c IN (
WITH RECURSIVE RES AS (SELECT
t_tag.tag_id_c,
t_tag.tag_idparent_c,
t_tag.tag_name_c
FROM t_tag WHERE tag_name_c = 'Werkstattbereich'
UNION SELECT
e.tag_id_c,
e.tag_idparent_c,
e.tag_name_c
FROM t_tag AS e INNER JOIN RES s ON s.tag_id_c = e.tag_idparent_c
) SELECT tag_name_c FROM RES
) AND
t_document_tag.dot_deletedate_d IS NULL
) AS WB on WB.doc_id_c = D.doc_id_c
WHERE
D.doc_deletedate_d IS NULL AND
N.met_deletedate_d IS NULL AND
(N.met_name_c = 'id' OR N.met_name_c IS NULL)
;
" > /var/www/vhosts/things.fablabchemnitz.de/flc/inventory.csv
vim /etc/cron.d/teedy-inventorylist
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
*/10 * * * * root /opt/teedy-inventorylist.sh > /dev/null
#
Abruf der CSV-Datei
curl --user "USER:PASSWORD" https://things.fablabchemnitz.de/flc/inventory.csv
Output-Beispiel
"00ae8d4e-8a05-4cba-b5e4-fb928168289d","Handlabelgerät P-Touch 1010 von Brother","61","","Büro"
Keine Kommentare