X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/7cb536fa58d8cc837b4cb59680c7355a1687648b..5ffb79040668114c58bf35c3e18a8302b8d94445:/services/ws/event.go diff --git a/services/ws/event.go b/services/ws/event.go index 1634a7a18a..09c9d0f0a4 100644 --- a/services/ws/event.go +++ b/services/ws/event.go @@ -7,6 +7,7 @@ import ( "time" "git.curoverse.com/arvados.git/sdk/go/arvados" + "github.com/ghodss/yaml" ) type eventSink interface { @@ -15,40 +16,48 @@ type eventSink interface { } type eventSource interface { - NewSink(chan *event) eventSink + NewSink() eventSink } type event struct { - LogUUID string + LogID uint64 Received time.Time Serial uint64 + db *sql.DB logRow *arvados.Log - err error - mtx sync.Mutex + err error + mtx sync.Mutex } // Detail returns the database row corresponding to the event. It can // be called safely from multiple goroutines. Only one attempt will be // made. If the database row cannot be retrieved, Detail returns nil. -func (e *event) Detail(db *sql.DB) *arvados.Log { +func (e *event) Detail() *arvados.Log { e.mtx.Lock() defer e.mtx.Unlock() if e.logRow != nil || e.err != nil { return e.logRow } var logRow arvados.Log - var oldAttrs, newAttrs []byte - e.err = db.QueryRow(`SELECT uuid, object_uuid, object_owner_uuid, event_type, created_at, old_attributes, new_attributes FROM logs WHERE uuid = ?`, e.LogUUID).Scan( + var propYAML []byte + e.err = e.db.QueryRow(`SELECT id, uuid, object_uuid, COALESCE(object_owner_uuid,''), COALESCE(event_type,''), created_at, properties FROM logs WHERE id = $1`, e.LogID).Scan( + &logRow.ID, &logRow.UUID, &logRow.ObjectUUID, &logRow.ObjectOwnerUUID, &logRow.EventType, &logRow.CreatedAt, - &oldAttrs, - &newAttrs) + &propYAML) if e.err != nil { - log.Printf("retrieving log row %s: %s", e.LogUUID, e.err) + log.Printf("retrieving log row %d: %s", e.LogID, e.err) + return nil } + e.err = yaml.Unmarshal(propYAML, &logRow.Properties) + if e.err != nil { + log.Printf("decoding yaml for log row %d: %s", e.LogID, e.err) + return nil + } + e.logRow = &logRow return e.logRow }