diff --git a/db/store.go b/db/store.go index fd4ca82..0935705 100644 --- a/db/store.go +++ b/db/store.go @@ -57,7 +57,7 @@ func (s *Store) UpsertIATA(ctx context.Context, iata string) error { } // UpsertPacket inserts or bumps the packets row. Returns (isNew, error). -func (s *Store) UpsertPacket(ctx context.Context, p ingest.UpsertPacketParams) (bool, error) { +func (s *Store) UpsertPacket(ctx context.Context, p ingest.UpsertPacketParams) (bool, int64, error) { var regionCode, subRegionCode *int32 hasTransportCodes := len(p.TransportCodes) == 4 if hasTransportCodes { @@ -81,9 +81,9 @@ func (s *Store) UpsertPacket(ctx context.Context, p ingest.UpsertPacketParams) ( } row, err := s.q.UpsertPacket(ctx, params) if err != nil { - return false, err + return false, 0, err } - return row.Inserted, nil + return row.Inserted, int64(*row.ObservationCount), nil } // InsertObservation inserts a packet_observations row. diff --git a/internal/ingest/ingest.go b/internal/ingest/ingest.go index a9aca80..eaeee63 100644 --- a/internal/ingest/ingest.go +++ b/internal/ingest/ingest.go @@ -69,8 +69,8 @@ type DB interface { // UpsertIATA auto-creates an iata_codes row if it doesn't exist yet. UpsertIATA(ctx context.Context, iata string) error - // UpsertPacket inserts or bumps the packets row. Returns (isNew, error). - UpsertPacket(ctx context.Context, p UpsertPacketParams) (bool, error) + // UpsertPacket inserts or bumps the packets row. Returns (isNew, observationCount, error). + UpsertPacket(ctx context.Context, p UpsertPacketParams) (bool, int64, error) // InsertObservation inserts a packet_observations row. // Returns (inserted, error); inserted=false means ON CONFLICT DO NOTHING fired. @@ -237,6 +237,7 @@ type packetObservationEvent struct { PayloadTypeName string `json:"payloadTypeName"` RouteType uint8 `json:"routeType"` IsFirstObservation bool `json:"isFirstObservation"` + ObservationCount int64 `json:"observationCount"` } `json:"packet"` Observation struct { ObserverID string `json:"observerId"` @@ -456,7 +457,7 @@ func (w *Worker) handlePacket(ctx context.Context, iata, pubkeyHex string, raw [ OriginPubkey: originPubkey, ChannelHash: channelHash, } - isNew, err := w.db.UpsertPacket(ctx, pParams) + isNew, observationCount, err := w.db.UpsertPacket(ctx, pParams) if err != nil { log.Printf("ingest[%s]: db: upsert packet failed from %s/%s: %v", w.cfg.BrokerName, iata, pubkeyHex, err) return @@ -512,6 +513,7 @@ func (w *Worker) handlePacket(ctx context.Context, iata, pubkeyHex string, raw [ evt.Packet.PayloadTypeName = packet.PayloadTypeString() evt.Packet.RouteType = packet.RouteType() evt.Packet.IsFirstObservation = isNew + evt.Packet.ObservationCount = observationCount evt.Observation.ObserverID = id.String() evt.Observation.ObserverName = observerName evt.Observation.IATA = iata