Event log and history
Every operation changing the content is logged in an event log.
events and migrations
Events in event log are NOT transformed when you execute a migration.
Querying the event log
Anyone with history permission can query the event log. You can do it by sending GraphQL events
query to /system/<project>
endpoint.
Example: listing events
query {
events {
id
# ...
}
}
Event log: fields
There are 3 GraphQL types of events: UpdateEvent
, CreateEvent
and DeleteEvent
with following fields available
fields availability
Fields oldValues
, diffValues
and newValues
are available only for some event types. See notes in table below.
Field | GraphQL Type | Description |
---|---|---|
id | String! | Unique identifier of the event |
type | EventType! | One of UPDATE , DELETE and CREATE |
createdAt | DateTime! | When the event was created |
appliedAt | DateTime! | When the event was applied (transaction was committed) |
identityId | String! | Identity ID of the user who performed the operation |
identityDescription | String! | Description of the user who performed the operation |
tableName | String! | Name of the table affected by the event |
primaryKey | [String!]! | Primary key of the row affected by the event (for entities it contains a single element with it's id, for ManyHasMany junction tables it contains IDs of both entities) |
oldValues | Json! | Old value of the row affected by the event (available only on UpdateEvent and DeleteEvent ) |
diffValues | Json! | Diff between old and new values of the row affected by the event (available only on UpdateEvent ) |
newValues | Json! | New value of the row affected by the event (available only on CreateEvent ) |
Event log: filtering, sorting and pagination
Using args
(of type EventArgs
) argument you can filter, sort and paginate the event log.
Here is structure of EventArgs
type:
input EventsArgs {
stage: String
filter: EventsFilter
order: EventsOrder
offset: Int
limit: Int
}
enum EventType {
UPDATE
DELETE
CREATE
}
enum EventsOrder {
CREATED_AT_ASC
CREATED_AT_DESC
APPLIED_AT_ASC
APPLIED_AT_DESC
}
input EventsFilter {
types: [EventType!]
rows: [EventFilterRow!]
tables: [String!]
transactions: [String!]
identities: [String!]
createdAt: EventsFilterDate
appliedAt: EventsFilterDate
}
input EventsFilterDate {
from: DateTime
to: DateTime
}
input EventFilterRow {
tableName: String!
primaryKey: [String!]!
}
Example: getting last 100 events creating an article
query {
events(args: {
filter: {
types: [CREATE],
tables: ["article"],
},
limit: 100,
order: APPLIED_AT_DESC,
}) {
id
identityId
appliedAt
... on CreateEvent {
newValues
}
}
}