mirror of
https://github.com/mainflux/mainflux.git
synced 2025-05-02 22:17:10 +08:00

* Reliably Publish Event Messages to Redis Signed-off-by: rodneyosodo <blackd0t@protonmail.com> * Make Redis Producer Safe For Concurrent Use Signed-off-by: rodneyosodo <blackd0t@protonmail.com> * Combine Redis Publishing Signed-off-by: rodneyosodo <blackd0t@protonmail.com> * Add defer statement Signed-off-by: rodneyosodo <blackd0t@protonmail.com> * Use Channel Instead of Array Signed-off-by: rodneyosodo <blackd0t@protonmail.com> * Adding `occurred_at` Signed-off-by: rodneyosodo <blackd0t@protonmail.com> * Fix Check `occurred_at` Signed-off-by: rodneyosodo <blackd0t@protonmail.com> * Remove Unused Const Signed-off-by: rodneyosodo <blackd0t@protonmail.com> * Check For Non NIL Error on Publishing Signed-off-by: rodneyosodo <blackd0t@protonmail.com> * Add More Tests Signed-off-by: rodneyosodo <blackd0t@protonmail.com> * Hanndle When Channel Is Full Signed-off-by: rodneyosodo <blackd0t@protonmail.com> * Fix Issue After Rebase Signed-off-by: rodneyosodo <blackd0t@protonmail.com> * Fix Tests Signed-off-by: rodneyosodo <blackd0t@protonmail.com> --------- Signed-off-by: rodneyosodo <blackd0t@protonmail.com>
65 lines
1.4 KiB
Go
65 lines
1.4 KiB
Go
// Copyright (c) Mainflux
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package redis
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/go-redis/redis/v8"
|
|
mfredis "github.com/mainflux/mainflux/internal/clients/redis"
|
|
)
|
|
|
|
const (
|
|
streamID = "mainflux.mqtt"
|
|
streamLen = 1000
|
|
)
|
|
|
|
type EventStore interface {
|
|
Connect(ctx context.Context, clientID string) error
|
|
Disconnect(ctx context.Context, clientID string) error
|
|
}
|
|
|
|
// EventStore is a struct used to store event streams in Redis.
|
|
type eventStore struct {
|
|
mfredis.Publisher
|
|
client *redis.Client
|
|
instance string
|
|
}
|
|
|
|
// NewEventStore returns wrapper around mProxy service that sends
|
|
// events to event store.
|
|
func NewEventStore(ctx context.Context, client *redis.Client, instance string) EventStore {
|
|
es := &eventStore{
|
|
client: client,
|
|
instance: instance,
|
|
Publisher: mfredis.NewEventStore(client, streamID, streamLen),
|
|
}
|
|
|
|
go es.StartPublishingRoutine(ctx)
|
|
|
|
return es
|
|
}
|
|
|
|
// Connect issues event on MQTT CONNECT.
|
|
func (es *eventStore) Connect(ctx context.Context, clientID string) error {
|
|
ev := mqttEvent{
|
|
clientID: clientID,
|
|
eventType: "connect",
|
|
instance: es.instance,
|
|
}
|
|
|
|
return es.Publish(ctx, ev)
|
|
}
|
|
|
|
// Disconnect issues event on MQTT CONNECT.
|
|
func (es *eventStore) Disconnect(ctx context.Context, clientID string) error {
|
|
ev := mqttEvent{
|
|
clientID: clientID,
|
|
eventType: "disconnect",
|
|
instance: es.instance,
|
|
}
|
|
|
|
return es.Publish(ctx, ev)
|
|
}
|