mirror of
https://github.com/mainflux/mainflux.git
synced 2025-04-28 13:48:49 +08:00

* MF-1197 - add mqtt tests Signed-off-by: zzokki81 <zoran.rebic@outlook.com> * MF-1197 - add test cases Signed-off-by: zzokki81 <zoran.rebic@outlook.com> * MF-1197 - refactor tests Signed-off-by: zzokki81 <zoran.rebic@outlook.com> * MF-1197 - Fix test names.Add const Signed-off-by: zzokki81 <zoran.rebic@outlook.com> * MF-1197 - Add mocks. Add publish test Signed-off-by: zzokki81 <zoran.rebic@outlook.com> * MF-1197 - Add buffer to logger Signed-off-by: zzokki81 <zoran.rebic@outlook.com> * MF-1197 - Add redis mock.Change logger error Signed-off-by: zzokki81 <zoran.rebic@outlook.com> * MF-1197 - Add new test cases Signed-off-by: zzokki81 <zoran.rebic@outlook.com> * MF-1197 - Fix session fields Signed-off-by: zzokki81 <zoran.rebic@outlook.com> * MF-1197 - Fix bad logs. Fix tests Signed-off-by: zzokki81 <zoran.rebic@outlook.com> * MF-1197 - Add new test case.Fix names. Signed-off-by: zzokki81 <zoran.rebic@outlook.com> * MF-1197 - Fix test name Signed-off-by: zzokki81 <zoran.rebic@outlook.com> * MF-1197 - Refactoring tests Signed-off-by: zzokki81 <zoran.rebic@outlook.com> * MF-1197 - Wrap errors Signed-off-by: zzokki81 <zoran.rebic@outlook.com> * MF-1197 - Wrap errors. Fix logs level Signed-off-by: zzokki81 <zoran.rebic@outlook.com> * MF-1197 - Wrap errors. Signed-off-by: zzokki81 <zoran.rebic@outlook.com> * MF-1197 - Fix var names Signed-off-by: zzokki81 <zoran.rebic@outlook.com> * MF-888 - Add clientID err check.Refactor tests Signed-off-by: zzokki81 <zoran.rebic@outlook.com> * MF-1197 - Fix info and err names Signed-off-by: zzokki81 <zoran.rebic@outlook.com> * MF-1197 - Remove redundant log and channel parts check Signed-off-by: zzokki81 <zoran.rebic@outlook.com> * MF-1197 - Revert channel parts check Signed-off-by: zzokki81 <zoran.rebic@outlook.com> * MF-1197 - Add authorize test case Signed-off-by: zzokki81 <zoran.rebic@outlook.com> * MF-1197 - Remove unused var Signed-off-by: zzokki81 <zoran.rebic@outlook.com> * MF-1197 - Change var name Signed-off-by: zzokki81 <zoran.rebic@outlook.com> * MF-1197 -Add missing test case.Change var name Signed-off-by: zzokki81 <zoran.rebic@outlook.com> * MF-1197 -Add err case. Signed-off-by: zzokki81 <zoran.rebic@outlook.com> * MF-1197 -Change var name Signed-off-by: zzokki81 <zoran.rebic@outlook.com> * MF-1197 - Use logMsg for all logs Signed-off-by: zzokki81 <zoran.rebic@outlook.com> * MF-1197 - Use logs instead of errors Signed-off-by: zzokki81 <zoran.rebic@outlook.com> * MF-1197 - Use redis mock Signed-off-by: zzokki81 <zoran.rebic@outlook.com> * MF-1197 - Return interface in constructor Signed-off-by: zzokki81 <zoran.rebic@outlook.com> * MF-1197 - Add missing test cases. Create consts Signed-off-by: zzokki81 <zoran.rebic@outlook.com> * MF-1197 - Add global vars Signed-off-by: zzokki81 <zoran.rebic@outlook.com> * MF-1197 - Refactor code Signed-off-by: zzokki81 <zoran.rebic@outlook.com> * MF-1197 - Remove unused var Signed-off-by: zzokki81 <zoran.rebic@outlook.com> * MF-1197 - Remove unnecessary var Signed-off-by: zzokki81 <zoran.rebic@outlook.com> * MF-1197 - Use created session client Signed-off-by: zzokki81 <zoran.rebic@outlook.com> * MF-1197 - Refactor vars Signed-off-by: zzokki81 <zoran.rebic@outlook.com> * MF-1197 - Separate constant Signed-off-by: zzokki81 <zoran.rebic@outlook.com> Signed-off-by: zzokki81 <zoran.rebic@outlook.com>
71 lines
1.4 KiB
Go
71 lines
1.4 KiB
Go
// Copyright (c) Mainflux
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package redis
|
|
|
|
import (
|
|
"context"
|
|
"strconv"
|
|
"time"
|
|
|
|
"github.com/go-redis/redis/v8"
|
|
)
|
|
|
|
const (
|
|
streamID = "mainflux.mqtt"
|
|
streamLen = 1000
|
|
)
|
|
|
|
type EventStore interface {
|
|
Connect(clientID string) error
|
|
Disconnect(clientID string) error
|
|
}
|
|
|
|
// EventStore is a struct used to store event streams in Redis
|
|
type eventStore struct {
|
|
client *redis.Client
|
|
instance string
|
|
}
|
|
|
|
// NewEventStore returns wrapper around mProxy service that sends
|
|
// events to event store.
|
|
func NewEventStore(client *redis.Client, instance string) EventStore {
|
|
return eventStore{
|
|
client: client,
|
|
instance: instance,
|
|
}
|
|
}
|
|
|
|
func (es eventStore) storeEvent(clientID, eventType string) error {
|
|
timestamp := strconv.FormatInt(time.Now().Unix(), 10)
|
|
|
|
event := mqttEvent{
|
|
clientID: clientID,
|
|
timestamp: timestamp,
|
|
eventType: eventType,
|
|
instance: es.instance,
|
|
}
|
|
|
|
record := &redis.XAddArgs{
|
|
Stream: streamID,
|
|
MaxLenApprox: streamLen,
|
|
Values: event.Encode(),
|
|
}
|
|
|
|
if err := es.client.XAdd(context.Background(), record).Err(); err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// Connect issues event on MQTT CONNECT
|
|
func (es eventStore) Connect(clientID string) error {
|
|
return es.storeEvent(clientID, "connect")
|
|
}
|
|
|
|
// Disconnect issues event on MQTT CONNECT
|
|
func (es eventStore) Disconnect(clientID string) error {
|
|
return es.storeEvent(clientID, "disconnect")
|
|
}
|