Skip to content
Snippets Groups Projects

relayServer

Nodejs-basierter http-Server für Messaufgaben

Dies ist eine Neuimplementierung von "nodejsServers". Im Gegensatz zur alten Version soll hier in größerem Maße auf Modularität Wert gelegt werden.

Relay-Server

Durch Zusenden von JSON-Daten per http-POST (Port 55555) kann dieser Server veranlasst werden, bestimmte Aktionen auszuführen und deren Ergebnis an die aufrufende Applikation zurückzusenden.

Vorbereitung zur Installation

Die make-Aufrufe make bzw. make install erzeugen ein rpm-Paket mit allen Dateien, die notwendig sind, damit der Relay-Server als Dämon unter openSUSE (>12.2) laufen kann. Vorher muss einmalig npm install aufgerufen werden, damit die nötigen nodejs-Bibliotheken installiert werden. make install kopiert das fertige rpm-Paket in eine Dateistruktur, die geeignet ist, an unser openSUSE-rpm-Repositorium geschickt zu werden. Alternativ kann das rpm-Paket auch von Hand installiert werden.

Nach erfolgter Installation

Um den Relay-Server als Linux-Dämon zu betreiben, sind folgende Schritte auszuführen (systemd-basiertes Betriebssystem):

systemctl enable relayServer.service
systemctl start relayServer.service

und ggf.

systemctl status -l relayServer.service

Einem neuen Rechner sollte das vaclab-Repositorium bekannt gemacht werden, damit das Paket »relayServer« einfach installiert werden kann (einschließlich zukünftiger updates):

zypper ar http://a73434.berlin.ptb.de:5984/sys/repos/openSUSE_13.1/vaclab.repo
zypper ref vaclab ; zypper in relayServer

Beispiele zur Kommunikation mit dem Relay-Server (Port 55555)

echo '{"Action":"/bin/echo","Value":"FRIDOLIN"}' | \
  curl -T - -X PUT http://localhost:55555

echo '{"Action":"/usr/bin/which","Value":"pdftex"}' | \
  curl -T - -X PUT http://`hostname --fqdn`:55555

echo '{"Action":"_version"}' | curl -T - -X PUT http://localhost:55555

echo '{"Action":"_exit"}' | curl -T - -X PUT http://localhost:55555

echo '{"Action":"RANDOM"}' | \
  curl -T - -X PUT http://i75434.berlin.ptb.de:55555

echo '{"Action":"TIME","Repeat":3,"Wait":2000}' | \
  curl -T - -X PUT http://localhost:55555

echo '{"Action":"VXI11","Host":"e75465","Device":"gpib0,2","Value":"T\n",
  "readTimeout":0}' | curl -T - -X PUT http://localhost:55555

echo '{"Action":"/usr/bin/Rscript", "Value":["foo","bar"],"Body":"print(17+4)"}' | \
  curl -T - -X PUT http://localhost:55555

echo '{"Action":"TCP","Repeat":3,"Wait":2000,"Host":"e75493","Port":"23",
  "Value":"exit\r"}' | curl -T - -X PUT http://localhost:55555

echo '{"Action":"UDP","Host":"172.30.56.30","Port":"2362","Value":"*IDN?"}' | \
  curl -T - -X PUT http://localhost:55555

echo '{"Action":"HTTP","Url":"http://a73434.berlin.ptb.de"}' | \
  curl -T - -X PUT http://localhost:55555

echo '{"Action":"EMAIL", "Host": "smtp-hub", "Subject": "Grüße von NodeJS",
  "From": "Homunculus <homunculus@ptb.de>","To": "Thomas.Bock@ptb.de",
  "Body": "Hallo, wie geht es Dir?\nHeute scheint die Sonne."}' | \
   curl -T - -X PUT http://localhost:55555

echo '{"Action":"LaTeX","Source":"\\documentclass{article}\\begin{document}
  Hello world!!!\\end{document}","OutputType":"stream"}' | \
    curl -T - -X PUT http://localhost:55556 > zz.pdf

echo '{"Action":"_version","PostProcessing":"Result=\"Hugo\""}' | \
  curl -T - -X PUT http://localhost:55555

Test

Nach einem Auffrischen der vxi11-Bibliothek:

npm update vxi11

können die unter ./test befindlichen unit-Tests werden im »relayServer«-Stammverzeichnis mittels:

npm test

gestartet werden. Für die erstellung eines coverage-Report unter ./coverage/lcov-report/index.html gibt es bash npm run coverage.

Folgene Einzeltests stehen zur Verfügung:

  • nur VXI11 Funktionalität: bash npm run test-vxi11
  • nur TCP Funktionalität: bash npm run test-tcp
  • nur UDP Funktionalität: bash npm run test-udp
  • nur postprocessing-Zusatzfunktionen: bash npm run test-relay-add
  • nur Rscript Funktionalität: bash npm run test-rscript

Zum Testen eines bereits laufenden relayServers sind folgende scripte vorbereitet:

  • bash npm run test-ce3-inst
  • bash npm run test-rolf-inst
  • bash npm run test-thomas-inst