// InsertEventRecord inserts a single event into the event log as part of the // provided transaction. func (ev EventLogger) InsertEventRecord( txn *client.Txn, eventType EventLogType, targetID, reportingID int32, info interface{}, ) error { // Record event record insertion in local log output. txn.AddCommitTrigger(func() { log.Infof(txn.Context, "Event: %q, target: %d, info: %+v", eventType, targetID, info) }) const insertEventTableStmt = ` INSERT INTO system.eventlog ( timestamp, eventType, targetID, reportingID, info ) VALUES( $1, $2, $3, $4, $5 ) ` args := []interface{}{ ev.selectEventTimestamp(txn.Proto.Timestamp), eventType, targetID, reportingID, nil, // info } if info != nil { infoBytes, err := json.Marshal(info) if err != nil { return err } args[4] = string(infoBytes) } rows, err := ev.ExecuteStatementInTransaction("log-event", txn, insertEventTableStmt, args...) if err != nil { return err } if rows != 1 { return errors.Errorf("%d rows affected by log insertion; expected exactly one row affected.", rows) } return nil }