-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: better error handling on worker error #133
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Gefällt mir 👍
Dass das Rescoring eines Attempts, der Aufgrund eines Fehlers auf $needsgrading
steht, nicht funktioniert, liegt an mir: #134
Ich frage mich gerade noch, ob wir beim Start eines Attempts wirklich den Fehler schlucken sollten. Ich tendiere zu nein, weil ich mir kein Szenario vorstellen kann, in dem man den Attempt dann verwenden kann. Es gibt ja dann keine Inputs, die wir für zukünftiges Regrading abspeichern müssen.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ich finde das request_failed
event sollte aufgeteilt werden in einzelne events für die konkreten Situationen, in denen es auftreten kann. Sprich:
starting_attempt_failed
viewing_attempt_failed
grading_response_failed
Das event viewing_attempt_failed
sollte zum Beispiel $this->data['crud'] = 'r'
haben und das event grading_response_failed
sollte $this->data['edulevel'] = self::LEVEL_TEACHING
haben. $this->other['message']
kann dann wegfallen.
In der description der jeweiligen events sollte noch die ID des Quizzes, des Versuches und der Frage sowie die userid erwähnt werden.
Zum Beispiel:
The user with id '???' encountered an error in the question with id '???' when starting a new attempt with id '???' in the quiz with id '???':
Error while fetching from server. Error number: 7
Da die Fehler nur bei den API-Aufrufen abgefangen werden, müssen wir auch an anderen Code-Stellen aufpassen, dass Exceptions nicht den ganzen Test kaputt machen. Aufgefallen ist mir hier in der
Das ist ein guter Punkt. |
Ich denke, es ist auch noch sinnvoll, |
823c51f
to
b0762d1
Compare
// Trigger error event. | ||
$params = [ | ||
'context' => $PAGE->context, | ||
// TODO: It would be nice to set a 'relateduserid'. | ||
'other' => [ | ||
'questionid' => $this->id, | ||
'errormessage' => $t->getMessage(), | ||
], | ||
]; | ||
$event = \qtype_questionpy\event\grading_response_failed::create($params); | ||
$event->trigger(); | ||
debugging($event->get_description()); | ||
|
||
// As the server was not able to score the response, we mark this question with manual scoring. | ||
return [0, question_state::$needsgrading]; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
An die User-ID könntest du mit $this->get_behaviour()->get_pending_step()->get_user_id()
kommen, wobei ich nicht weiß, ob das vielleicht ein bisschen unsauber ist.
In reality, this is probably impossible, but we'll still handle it to be safe.
b0f4456
to
72e2c55
Compare
Falls es ein Worker-Error beim Starten, Anzeigen oder Bewerten einer Frage Auftritt, wird das nutzerfreundlicher angezeigt:
Und auch geloggt:
Sollten eine Frage (teilweise) beantwortet worden sein, werden beim Auftreten eines Fehlers alle Antworten gespeichert.
Falls ein Worker-Fehler beim Bewerten enstanden ist, wird die lehrende Person darauf aufmerksam gemacht, indem in der Scoring-Übersicht "Needs manual scoring" steht.