Add central log for auditing

Issue #2 new
Gregoire Detrez created an issue

Add a central log updated when high level actions happen. For instance

  • user join group
  • user leave group
  • submit
  • accept/reject
  • ...

Comments (6)

  1. Gregoire Detrez reporter

    I'll try to implement this but I'd like to get some feedback on how to do it.

    Model

    I see a log entry as having 3 parts:

    • The user who performs the action (an optional user id)
    • The action performed (a mandatory string)
    • Parameters for the action (a dictionary with submission id, group number, etc)

    Actions

    Here are the actions that should be logged:

    • upload, remove file
    • submit, withdraw
    • join, leave group
    • assign, accept, reject submission

    Examples

    student@chalmers.se upload {lab:2, file:foo.hs}
    s@c.s submit {submission: 42}
    s@c.s withdraw {submission: 42}
    grader@c.s accept {submission:42}
    g@c.s reject {submission:42}
    g@c.s assign {submission:42, grader:teacher@c.s}
    

    Storage

    Where to record event. I see three possibilities:

    • a file
    • the course sqlite database
    • a central database (e.g. elasticsearch)

    The first one is the simplest so my plan is to do only the first one for now (i.e. save into a file) but using a publish/subscribe architecture to make it easy to add other backends in the future. (With the event system in pyramid)

    Using the database would make it easier to create a web interface to browse the audit log, with basic filtering (e.g. show only one kind of events, or event for a particular user, etc.)

    The last one require more work to set-up and configure the central log but then we could do cool stuff like a real-time dashboard of what's happening across all fire instances 😎.

    Any comments?

  2. Log in to comment