Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions schema.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ it to show, per assignment, what has already happened (setaccess, protect,
archive, delete; later generate).
"""
type ActivityEntry {
"The course this entry is about (its name)."
course: String!
"The assignment this entry is about (its name within the course)."
assignment: String!
"The operation that ran (setaccess, protect, archive, delete, …)."
Expand All @@ -26,6 +28,8 @@ extend type Query {
assignmentActivity(course: String!, name: String!): [ActivityEntry!]!
"The activity log across a whole course of the caller's, newest first (the GUI groups it by assignment for a per-assignment status)."
courseActivity(course: String!): [ActivityEntry!]!
"The caller's complete activity log across ALL their courses, newest first — the audit-log dump (uncapped, for the activity page and its JSON download)."
activityLog: [ActivityEntry!]!
}

# ----- assignments.graphqls -----
Expand Down
10 changes: 10 additions & 0 deletions src/lib/Nav.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,16 @@
>
Jobs
</a>
<a
href="/activity"
class="btn btn-ghost btn-sm rounded-full font-medium {page.url.pathname.startsWith(
'/activity'
)
? 'bg-primary/10 text-primary'
: 'text-base-content/70'}"
>
Aktivität
</a>
<a
href="/token"
class="btn btn-ghost btn-sm rounded-full font-medium {page.url.pathname.startsWith('/token')
Expand Down
12 changes: 12 additions & 0 deletions src/lib/gql/gql.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ type Documents = {
"\n\tsubscription CourseRepoOverviewProgress($course: String!) {\n\t\tcourseRepoOverviewProgress(course: $course) {\n\t\t\ttotal\n\t\t\tdone\n\t\t\terror\n\t\t\tassignment {\n\t\t\t\tname\n\t\t\t\tper\n\t\t\t\ttargets\n\t\t\t\texisting\n\t\t\t\tnote\n\t\t\t\trepos {\n\t\t\t\t\tfor\n\t\t\t\t\turl\n\t\t\t\t\texists\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n": typeof types.CourseRepoOverviewProgressDocument,
"\n\t\t\t\tquery Me {\n\t\t\t\t\tme {\n\t\t\t\t\t\temail\n\t\t\t\t\t\tname\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t": typeof types.MeDocument,
"\n\t\t\t\tquery ServerInfo {\n\t\t\t\t\tserverInfo {\n\t\t\t\t\t\tversion\n\t\t\t\t\t\tcommit\n\t\t\t\t\t\tdate\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t": typeof types.ServerInfoDocument,
"\n\t\t\t\tquery ActivityLog {\n\t\t\t\t\tactivityLog {\n\t\t\t\t\t\tcourse\n\t\t\t\t\t\tassignment\n\t\t\t\t\t\top\n\t\t\t\t\t\tstatus\n\t\t\t\t\t\tdetail\n\t\t\t\t\t\tat\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t": typeof types.ActivityLogDocument,
"\n\t\t\tmutation CopyAssignment($course: String!, $from: String!, $newName: String!) {\n\t\t\t\tcopyAssignment(course: $course, from: $from, newName: $newName) {\n\t\t\t\t\tname\n\t\t\t\t}\n\t\t\t}\n\t\t": typeof types.CopyAssignmentDocument,
"\n\t\t\tmutation DeleteAssignment($course: String!, $name: String!) {\n\t\t\t\tdeleteAssignment(course: $course, name: $name)\n\t\t\t}\n\t\t": typeof types.DeleteAssignmentDocument,
"\n\t\t\tmutation ImportAssignmentYAML($course: String!, $yaml: String!) {\n\t\t\t\timportAssignmentYAML(course: $course, yaml: $yaml) {\n\t\t\t\t\tname\n\t\t\t\t}\n\t\t\t}\n\t\t": typeof types.ImportAssignmentYamlDocument,
Expand All @@ -46,6 +47,7 @@ type Documents = {
"\n\t\t\t\tquery AssignmentEditor($course: String!, $name: String!) {\n\t\t\t\t\tcourse(name: $course) {\n\t\t\t\t\t\tassignmentNames\n\t\t\t\t\t}\n\t\t\t\t\tassignmentSchema {\n\t\t\t\t\t\tkey\n\t\t\t\t\t\tlabel\n\t\t\t\t\t\tdescription\n\t\t\t\t\t\tgroup\n\t\t\t\t\t\tkind\n\t\t\t\t\t\trequired\n\t\t\t\t\t\tdeprecated\n\t\t\t\t\t\texample\n\t\t\t\t\t\toptions {\n\t\t\t\t\t\t\tvalue\n\t\t\t\t\t\t\tlabel\n\t\t\t\t\t\t\tdescription\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbranchRuleSchema {\n\t\t\t\t\t\tkey\n\t\t\t\t\t\tlabel\n\t\t\t\t\t\tdescription\n\t\t\t\t\t\tkind\n\t\t\t\t\t\trequired\n\t\t\t\t\t\texample\n\t\t\t\t\t}\n\t\t\t\t\tapprovalSettingsSchema {\n\t\t\t\t\t\tkey\n\t\t\t\t\t\tlabel\n\t\t\t\t\t\tdescription\n\t\t\t\t\t\tkind\n\t\t\t\t\t\trequired\n\t\t\t\t\t\texample\n\t\t\t\t\t\toptions {\n\t\t\t\t\t\t\tvalue\n\t\t\t\t\t\t\tlabel\n\t\t\t\t\t\t\tdescription\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tapprovalRuleSchema {\n\t\t\t\t\t\tkey\n\t\t\t\t\t\tlabel\n\t\t\t\t\t\tdescription\n\t\t\t\t\t\tkind\n\t\t\t\t\t\trequired\n\t\t\t\t\t\texample\n\t\t\t\t\t}\n\t\t\t\t\tassignment(course: $course, name: $name) {\n\t\t\t\t\t\tcourse\n\t\t\t\t\t\tname\n\t\t\t\t\t\textends\n\t\t\t\t\t\textendsOptions\n\t\t\t\t\t\tabstract\n\t\t\t\t\t\town {\n\t\t\t\t\t\t\tkey\n\t\t\t\t\t\t\tvalue\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresolved\n\t\t\t\t\t\tresolveError\n\t\t\t\t\t}\n\t\t\t\t\tassignmentUrls(course: $course, name: $name) {\n\t\t\t\t\t\tper\n\t\t\t\t\t\tgroupUrl\n\t\t\t\t\t\trepos {\n\t\t\t\t\t\t\tfor\n\t\t\t\t\t\t\turl\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tassignmentActivity(course: $course, name: $name) {\n\t\t\t\t\t\top\n\t\t\t\t\t\tstatus\n\t\t\t\t\t\tdetail\n\t\t\t\t\t\tat\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t": typeof types.AssignmentEditorDocument,
"\n\t\t\t\tquery OpsTargets($course: String!, $name: String!) {\n\t\t\t\t\tassignmentUrls(course: $course, name: $name) {\n\t\t\t\t\t\tper\n\t\t\t\t\t\trepos {\n\t\t\t\t\t\t\tfor\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t": typeof types.OpsTargetsDocument,
"\n\t\t\t\tquery CourseStudents($course: String!) {\n\t\t\t\t\tcourseStudents(course: $course) {\n\t\t\t\t\t\temail\n\t\t\t\t\t\tfound\n\t\t\t\t\t\tfirstName\n\t\t\t\t\t\tlastName\n\t\t\t\t\t\tgender\n\t\t\t\t\t\tgroup\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t": typeof types.CourseStudentsDocument,
"\n\t\t\t\tquery ActivityLogDump {\n\t\t\t\t\tactivityLog {\n\t\t\t\t\t\tcourse\n\t\t\t\t\t\tassignment\n\t\t\t\t\t\top\n\t\t\t\t\t\tstatus\n\t\t\t\t\t\tdetail\n\t\t\t\t\t\tat\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t": typeof types.ActivityLogDumpDocument,
"\n\t\t\t\tquery CourseYAML($name: String!) {\n\t\t\t\t\tcourseYAML(name: $name)\n\t\t\t\t}\n\t\t\t": typeof types.CourseYamlDocument,
"\n\t\t\t\tquery ScheduledJobs {\n\t\t\t\t\tscheduledJobs {\n\t\t\t\t\t\tid\n\t\t\t\t\t\top\n\t\t\t\t\t\tcourse\n\t\t\t\t\t\tassignment\n\t\t\t\t\t\trunAt\n\t\t\t\t\t\tgraceMinutes\n\t\t\t\t\t\tstatus\n\t\t\t\t\t\tcreatedAt\n\t\t\t\t\t\tstartedAt\n\t\t\t\t\t\tfinishedAt\n\t\t\t\t\t\terr\n\t\t\t\t\t\tparams {\n\t\t\t\t\t\t\tkey\n\t\t\t\t\t\t\tvalue\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t": typeof types.ScheduledJobsDocument,
"\n\t\t\t\tquery GitlabToken {\n\t\t\t\t\tgitlabToken {\n\t\t\t\t\t\tset\n\t\t\t\t\t\tupdatedAt\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t": typeof types.GitlabTokenDocument,
Expand All @@ -58,6 +60,7 @@ const documents: Documents = {
"\n\tsubscription CourseRepoOverviewProgress($course: String!) {\n\t\tcourseRepoOverviewProgress(course: $course) {\n\t\t\ttotal\n\t\t\tdone\n\t\t\terror\n\t\t\tassignment {\n\t\t\t\tname\n\t\t\t\tper\n\t\t\t\ttargets\n\t\t\t\texisting\n\t\t\t\tnote\n\t\t\t\trepos {\n\t\t\t\t\tfor\n\t\t\t\t\turl\n\t\t\t\t\texists\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n": types.CourseRepoOverviewProgressDocument,
"\n\t\t\t\tquery Me {\n\t\t\t\t\tme {\n\t\t\t\t\t\temail\n\t\t\t\t\t\tname\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t": types.MeDocument,
"\n\t\t\t\tquery ServerInfo {\n\t\t\t\t\tserverInfo {\n\t\t\t\t\t\tversion\n\t\t\t\t\t\tcommit\n\t\t\t\t\t\tdate\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t": types.ServerInfoDocument,
"\n\t\t\t\tquery ActivityLog {\n\t\t\t\t\tactivityLog {\n\t\t\t\t\t\tcourse\n\t\t\t\t\t\tassignment\n\t\t\t\t\t\top\n\t\t\t\t\t\tstatus\n\t\t\t\t\t\tdetail\n\t\t\t\t\t\tat\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t": types.ActivityLogDocument,
"\n\t\t\tmutation CopyAssignment($course: String!, $from: String!, $newName: String!) {\n\t\t\t\tcopyAssignment(course: $course, from: $from, newName: $newName) {\n\t\t\t\t\tname\n\t\t\t\t}\n\t\t\t}\n\t\t": types.CopyAssignmentDocument,
"\n\t\t\tmutation DeleteAssignment($course: String!, $name: String!) {\n\t\t\t\tdeleteAssignment(course: $course, name: $name)\n\t\t\t}\n\t\t": types.DeleteAssignmentDocument,
"\n\t\t\tmutation ImportAssignmentYAML($course: String!, $yaml: String!) {\n\t\t\t\timportAssignmentYAML(course: $course, yaml: $yaml) {\n\t\t\t\t\tname\n\t\t\t\t}\n\t\t\t}\n\t\t": types.ImportAssignmentYamlDocument,
Expand All @@ -83,6 +86,7 @@ const documents: Documents = {
"\n\t\t\t\tquery AssignmentEditor($course: String!, $name: String!) {\n\t\t\t\t\tcourse(name: $course) {\n\t\t\t\t\t\tassignmentNames\n\t\t\t\t\t}\n\t\t\t\t\tassignmentSchema {\n\t\t\t\t\t\tkey\n\t\t\t\t\t\tlabel\n\t\t\t\t\t\tdescription\n\t\t\t\t\t\tgroup\n\t\t\t\t\t\tkind\n\t\t\t\t\t\trequired\n\t\t\t\t\t\tdeprecated\n\t\t\t\t\t\texample\n\t\t\t\t\t\toptions {\n\t\t\t\t\t\t\tvalue\n\t\t\t\t\t\t\tlabel\n\t\t\t\t\t\t\tdescription\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbranchRuleSchema {\n\t\t\t\t\t\tkey\n\t\t\t\t\t\tlabel\n\t\t\t\t\t\tdescription\n\t\t\t\t\t\tkind\n\t\t\t\t\t\trequired\n\t\t\t\t\t\texample\n\t\t\t\t\t}\n\t\t\t\t\tapprovalSettingsSchema {\n\t\t\t\t\t\tkey\n\t\t\t\t\t\tlabel\n\t\t\t\t\t\tdescription\n\t\t\t\t\t\tkind\n\t\t\t\t\t\trequired\n\t\t\t\t\t\texample\n\t\t\t\t\t\toptions {\n\t\t\t\t\t\t\tvalue\n\t\t\t\t\t\t\tlabel\n\t\t\t\t\t\t\tdescription\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tapprovalRuleSchema {\n\t\t\t\t\t\tkey\n\t\t\t\t\t\tlabel\n\t\t\t\t\t\tdescription\n\t\t\t\t\t\tkind\n\t\t\t\t\t\trequired\n\t\t\t\t\t\texample\n\t\t\t\t\t}\n\t\t\t\t\tassignment(course: $course, name: $name) {\n\t\t\t\t\t\tcourse\n\t\t\t\t\t\tname\n\t\t\t\t\t\textends\n\t\t\t\t\t\textendsOptions\n\t\t\t\t\t\tabstract\n\t\t\t\t\t\town {\n\t\t\t\t\t\t\tkey\n\t\t\t\t\t\t\tvalue\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresolved\n\t\t\t\t\t\tresolveError\n\t\t\t\t\t}\n\t\t\t\t\tassignmentUrls(course: $course, name: $name) {\n\t\t\t\t\t\tper\n\t\t\t\t\t\tgroupUrl\n\t\t\t\t\t\trepos {\n\t\t\t\t\t\t\tfor\n\t\t\t\t\t\t\turl\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tassignmentActivity(course: $course, name: $name) {\n\t\t\t\t\t\top\n\t\t\t\t\t\tstatus\n\t\t\t\t\t\tdetail\n\t\t\t\t\t\tat\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t": types.AssignmentEditorDocument,
"\n\t\t\t\tquery OpsTargets($course: String!, $name: String!) {\n\t\t\t\t\tassignmentUrls(course: $course, name: $name) {\n\t\t\t\t\t\tper\n\t\t\t\t\t\trepos {\n\t\t\t\t\t\t\tfor\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t": types.OpsTargetsDocument,
"\n\t\t\t\tquery CourseStudents($course: String!) {\n\t\t\t\t\tcourseStudents(course: $course) {\n\t\t\t\t\t\temail\n\t\t\t\t\t\tfound\n\t\t\t\t\t\tfirstName\n\t\t\t\t\t\tlastName\n\t\t\t\t\t\tgender\n\t\t\t\t\t\tgroup\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t": types.CourseStudentsDocument,
"\n\t\t\t\tquery ActivityLogDump {\n\t\t\t\t\tactivityLog {\n\t\t\t\t\t\tcourse\n\t\t\t\t\t\tassignment\n\t\t\t\t\t\top\n\t\t\t\t\t\tstatus\n\t\t\t\t\t\tdetail\n\t\t\t\t\t\tat\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t": types.ActivityLogDumpDocument,
"\n\t\t\t\tquery CourseYAML($name: String!) {\n\t\t\t\t\tcourseYAML(name: $name)\n\t\t\t\t}\n\t\t\t": types.CourseYamlDocument,
"\n\t\t\t\tquery ScheduledJobs {\n\t\t\t\t\tscheduledJobs {\n\t\t\t\t\t\tid\n\t\t\t\t\t\top\n\t\t\t\t\t\tcourse\n\t\t\t\t\t\tassignment\n\t\t\t\t\t\trunAt\n\t\t\t\t\t\tgraceMinutes\n\t\t\t\t\t\tstatus\n\t\t\t\t\t\tcreatedAt\n\t\t\t\t\t\tstartedAt\n\t\t\t\t\t\tfinishedAt\n\t\t\t\t\t\terr\n\t\t\t\t\t\tparams {\n\t\t\t\t\t\t\tkey\n\t\t\t\t\t\t\tvalue\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t": types.ScheduledJobsDocument,
"\n\t\t\t\tquery GitlabToken {\n\t\t\t\t\tgitlabToken {\n\t\t\t\t\t\tset\n\t\t\t\t\t\tupdatedAt\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t": types.GitlabTokenDocument,
Expand Down Expand Up @@ -130,6 +134,10 @@ export function graphql(source: "\n\t\t\t\tquery Me {\n\t\t\t\t\tme {\n\t\t\t\t\
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/
export function graphql(source: "\n\t\t\t\tquery ServerInfo {\n\t\t\t\t\tserverInfo {\n\t\t\t\t\t\tversion\n\t\t\t\t\t\tcommit\n\t\t\t\t\t\tdate\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t"): (typeof documents)["\n\t\t\t\tquery ServerInfo {\n\t\t\t\t\tserverInfo {\n\t\t\t\t\t\tversion\n\t\t\t\t\t\tcommit\n\t\t\t\t\t\tdate\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t"];
/**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/
export function graphql(source: "\n\t\t\t\tquery ActivityLog {\n\t\t\t\t\tactivityLog {\n\t\t\t\t\t\tcourse\n\t\t\t\t\t\tassignment\n\t\t\t\t\t\top\n\t\t\t\t\t\tstatus\n\t\t\t\t\t\tdetail\n\t\t\t\t\t\tat\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t"): (typeof documents)["\n\t\t\t\tquery ActivityLog {\n\t\t\t\t\tactivityLog {\n\t\t\t\t\t\tcourse\n\t\t\t\t\t\tassignment\n\t\t\t\t\t\top\n\t\t\t\t\t\tstatus\n\t\t\t\t\t\tdetail\n\t\t\t\t\t\tat\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t"];
/**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/
Expand Down Expand Up @@ -230,6 +238,10 @@ export function graphql(source: "\n\t\t\t\tquery OpsTargets($course: String!, $n
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/
export function graphql(source: "\n\t\t\t\tquery CourseStudents($course: String!) {\n\t\t\t\t\tcourseStudents(course: $course) {\n\t\t\t\t\t\temail\n\t\t\t\t\t\tfound\n\t\t\t\t\t\tfirstName\n\t\t\t\t\t\tlastName\n\t\t\t\t\t\tgender\n\t\t\t\t\t\tgroup\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t"): (typeof documents)["\n\t\t\t\tquery CourseStudents($course: String!) {\n\t\t\t\t\tcourseStudents(course: $course) {\n\t\t\t\t\t\temail\n\t\t\t\t\t\tfound\n\t\t\t\t\t\tfirstName\n\t\t\t\t\t\tlastName\n\t\t\t\t\t\tgender\n\t\t\t\t\t\tgroup\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t"];
/**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/
export function graphql(source: "\n\t\t\t\tquery ActivityLogDump {\n\t\t\t\t\tactivityLog {\n\t\t\t\t\t\tcourse\n\t\t\t\t\t\tassignment\n\t\t\t\t\t\top\n\t\t\t\t\t\tstatus\n\t\t\t\t\t\tdetail\n\t\t\t\t\t\tat\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t"): (typeof documents)["\n\t\t\t\tquery ActivityLogDump {\n\t\t\t\t\tactivityLog {\n\t\t\t\t\t\tcourse\n\t\t\t\t\t\tassignment\n\t\t\t\t\t\top\n\t\t\t\t\t\tstatus\n\t\t\t\t\t\tdetail\n\t\t\t\t\t\tat\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t"];
/**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/
Expand Down
Loading