InsertDiscreteUsageEvent implements agplusage.Inserter.
(ctx context.Context, tx database.Store, event usagetypes.DiscreteEvent)
| 44 | |
| 45 | // InsertDiscreteUsageEvent implements agplusage.Inserter. |
| 46 | func (i *dbInserter) InsertDiscreteUsageEvent(ctx context.Context, tx database.Store, event usagetypes.DiscreteEvent) error { |
| 47 | if !event.EventType().IsDiscrete() { |
| 48 | return xerrors.Errorf("event type %q is not a discrete event", event.EventType()) |
| 49 | } |
| 50 | if err := event.Valid(); err != nil { |
| 51 | return xerrors.Errorf("invalid %q event: %w", event.EventType(), err) |
| 52 | } |
| 53 | |
| 54 | jsonData, err := json.Marshal(event.Fields()) |
| 55 | if err != nil { |
| 56 | return xerrors.Errorf("marshal event as JSON: %w", err) |
| 57 | } |
| 58 | |
| 59 | // Duplicate events are ignored by the query, so we don't need to check the |
| 60 | // error. |
| 61 | return tx.InsertUsageEvent(ctx, database.InsertUsageEventParams{ |
| 62 | // Always generate a new UUID for discrete events. |
| 63 | ID: uuid.New().String(), |
| 64 | EventType: string(event.EventType()), |
| 65 | EventData: jsonData, |
| 66 | CreatedAt: dbtime.Time(i.clock.Now()), |
| 67 | }) |
| 68 | } |
| 69 | |
| 70 | // InsertHeartbeatUsageEvent implements agplusage.Inserter. |
| 71 | func (i *dbInserter) InsertHeartbeatUsageEvent(ctx context.Context, tx database.Store, id string, event usagetypes.HeartbeatEvent) error { |
nothing calls this directly
no test coverage detected