...
Skrypt monitorujący wykorzystywany przez schematy monitorowania, to skrypt powłoki który wypisuje na standardowe wyjście dane, przesyłane następnie za pośrednictwem mechanizmów QCG, do serwisu QCG-Monitoring. W serwisie tym, dane ze skryptu są transformowane oraz prezentowane użytkownikowi zgodnie ze schematem monitorowania. Dane przesyłane pomiędzy skryptem monitorującym a serwisem QCG-Monitoring, są zakodowane w formacie JSON.
Schemat danych JSON przesyłanych ze skryptu monitorującego zależy od schematu monitorowania. W poniższym punkcie przedstawimy schemat dla najczęscięj przez użytkownika wykorzystywanego schematu generic.
Code Block | ||
---|---|---|
| ||
{ "$schema": "http://json-schema.org/draft-03/schema", "description": "Schema for generic schema of QCG-Monitoring", "type": "object", "id": "http://jsonschema.net", "properties":{ "job": { "type":"object", "properties":{ "cores/node": { "type":"string" }, "cores": { "type":"string" }, "cpu time": { "type":"string" }, "grant": { "type":"string" }, "jobid": { "type":"string" }, "master node": { "type":"string" }, "memory": { "type":"string" }, "node cores": { "type":"string" }, "node properties": { "type":"string" }, "nodes": { "type":"string" }, "queue": { "type":"string" }, "started": { "type":"string" }, "walltime": { "type":"string" } } }, "options": { "type":"object", "properties":{ "overwrite": { "type": { "enum": [ "true", "false" ] } }, "showTimestamp": { "type": { "enum": [ "true", "false" ] } } } }, "text": { "type":"array", "items": { "type":"string" } } } } |
Sekcja job jest wypełniana przez funkcję pomocniczą udostępnianą przez system QCG. Zawiera ona parametry środowiska wykonania pobierane z systemu kolejkowego.
Sekcja options może zawierać następujące właściwości:
Sekcja text zawiera tablicę ciągów znaków które mają być prezentowane w usłudze QCG-Monitoring.
Note |
---|
Jeden element sekcji text musi być pojedyńczą linią. W przypadku gdy z zadania chcemy przesłać wiele linii, dla każdej z nich musi zostać utworzony element w tablicy text. |
Poniżej prezentujemy przykładowy skrypt monitorujący dla schematu generic.
Code Block | ||||
---|---|---|---|---|
| ||||
#!/bin/bash
function parse_text {
echo "$*" | awk 'BEGIN { ORS=""; first=1 } { if (! first) { print ",\n" } print "\42"$0"\42"; first=0 }'
}
echo '{'
echo '"options": { "overwrite" : "false" }'
. ${QCG_APP_ROOT_DIR}/core/appmon/utils/monitor-common.sh
job_status > /dev/null 2>&1
if [ -n "$QCG_MONITOR_SECTION_JOB" ]; then
echo ",\"job\": { $QCG_MONITOR_SECTION_JOB } "
fi
outfile=${QCG_OUTERR_FILE:-_stdouterr}
if [ -f "$outfile" ]; then
out=$(grep " at " "$outfile" | tail -n 4)
echo ', "text": [ '
parse_text "$out"
echo ']'
fi
echo '}' |
Najważniejsze fragmenty powyższego skryptu: