Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

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
titleSchema JSON dla schematu monitorowania generic
 {
  "$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:

  • overwrite - jeśli wartość ustawiona jest na true, linie tekstu z tej wiadomości nadpiszą wszystkie dotychczas przesłane z zadania, wartość false (domyślnie) spowoduje, iż nowy komunikat zostanie dopisany do listy starszych,
  • showTimestamp - jeśli wartość ustawiona jest na true, linie tekstu z każdej wiadomości zostaną opatrzone etykietą w której będzie czas otrzymania tych wiadomości (domyślnie false).

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
languagebash
linenumberstrue
#!/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:

  • w linii 3 definiujemy funkcję która parametry wejściowe zakoduje jako tablicę typu string w formacie JSON,
  • w liniach 10-11 włączamy definicję funkcji pomocniczej job_status służącej do pobrania informacji nt środowiska uruchomieniowego z systemu kolejkowego; funkcja ta zapisuje w zmiennej QCG_MONITOR_SECTION_JOB wynik swojego działania,
  • w linii 16, na podstawie ustawień środowiska QCG, wybierana jest nazwa pliku zawierającego standardowe wyjście oraz standardowe wyjście błędów z uruchomionej aplikacji,
  • w linii 18 wyszukujemy w pliku wyjściowym interesującego nas wzorca,
  • w linii 20 używamy wcześniej zdefiniowanej funkcji parse_text do zakodowania znalezionych linii zawierających wzorzec zgodnie z formatem JSON.