Skip to main content

Anzahl der Fehler eines Generierungstasks auslesen

Comments

1 comment

  • Zendesk API User
    Author: mbergmann - 1/27/2017 23:28

    Hallo Martin,

    das ist tatsächlich nicht ganz so einfach - ich musste ein wenig basteln ;-)

    Den ScheduleContext hast Du ja schon im Auftragsscript - einfach als Variable "context". Allerdings gibt z.B. context.getErrorCount() nur die Anzahl der Fehler des jeweils laufenden Tasks im Auftrag aus - also genau die des Script-Tasks selbst. Das ist in Deinem Fall nicht wirklich hilfreich ;-)

    Um an das TaskResult zu kommen, muss man ein wenig suchen - hier hilft es, in der API beim TaskResult über "Use" zu gehen und sich damit dann immer weiter hochzuhangeln.

    Letztlich kommt dabei heraus, dass man ein ScheduleEntryControl braucht...

    Versuch es mal mit dem Code unten. Zum schnellen Testen als Script irgendwo hinter einen Generierungstask hängen - wenn es klappt, sollte das natürlich in ein Executable eines Moduls verpackt werden.

    Der Code sucht den letzten aktiven Generierungstask vor seinem eigenen Script-Task (d.h. da dürften auch noch andere Sachen dazwischen sein) und liest dessen Ergebnisse aus.

    Wenn Du vor hast es für ein Monitoring zu nutzen, macht es ggf. Sinn, nicht beim ersten "rückwärts" gefundenen Generierungs-Task aufzuhören, sondern einfach alle abzugrasen - dann könntest Du auch einfach vorwärts iterieren.

    // find the schedule entry control for THIS running entry

    // only works if this schedule entry is NOT allowed to run with multiple instances in parallel,

    // which should be the case for generation schedules

    ScheduleEntryControl thisScheduleEntryControl = null;

    List<ScheduleEntryControl> scheduleEntryControls = context.getTask().getScheduleEntry().getRunningEntries();

    for (ScheduleEntryControl scheduleEntryControl : scheduleEntryControls) {

        if (scheduleEntryControl.isRunning()) {

            thisScheduleEntryControl = scheduleEntryControl;

            break;

        }

    }

    // search for the task index of the last ACTIVE generation before this script task

    //

    // if you are sure the generation task is directly before the script task,

    // you can also directly use

    // taskIndex = context.getTaskIndex() -1;

    for (int taskIndex = context.getTaskIndex() - 1; taskIndex >= 0; taskIndex--) {

        ScheduleTask scheduleTask = context.getTasks().get(taskIndex);

        if ((scheduleTask instanceof GenerateTask) && scheduleTask.isActive()) {

            // found last generation task BEFORE this script

            ScheduleEntryState state = thisScheduleEntryControl.getState();

            List<TaskResult> taskResults = state.getTaskResults();

            TaskResult result = taskResults.get(taskIndex);

            // Do something with these values, in this case just log...

            String message = String.format("State of generation task %s: %s. It had %d warnings and %d errors.",

                    // task name

                    scheduleTask.getName(),

                    // One of: NOT_STARTED, RUNNING, ABORTED, ERROR, SUCCESS, FINISHED_WITH_ERRORS

                    // where NOT_STARTED or RUNNING should not be possible in this case

                    result.getState().name(),

                    //warnings

                    result.getWarningCount(),

                    //errors

                    result.getErrorCount()

            );

            context.logInfo(message);

            //stop after first found here

            break;

        }

    }

    Viele Grüße

    Michael

    0

Please sign in to leave a comment.