2017-09-23 01:03:27 +02:00
|
|
|
package api
|
|
|
|
|
|
|
|
import (
|
|
|
|
"time"
|
|
|
|
|
|
|
|
"github.com/go-kit/kit/log"
|
|
|
|
"github.com/mainflux/mainflux/manager"
|
|
|
|
)
|
|
|
|
|
2018-03-11 18:06:01 +01:00
|
|
|
var _ manager.Service = (*loggingMiddleware)(nil)
|
2017-09-23 01:03:27 +02:00
|
|
|
|
2018-03-11 18:06:01 +01:00
|
|
|
type loggingMiddleware struct {
|
2017-09-23 01:03:27 +02:00
|
|
|
logger log.Logger
|
2018-03-11 18:06:01 +01:00
|
|
|
svc manager.Service
|
2017-09-23 01:03:27 +02:00
|
|
|
}
|
|
|
|
|
2018-03-11 18:06:01 +01:00
|
|
|
// LoggingMiddleware adds logging facilities to the core service.
|
|
|
|
func LoggingMiddleware(svc manager.Service, logger log.Logger) manager.Service {
|
|
|
|
return &loggingMiddleware{logger, svc}
|
2017-09-23 01:03:27 +02:00
|
|
|
}
|
|
|
|
|
2018-03-11 18:06:01 +01:00
|
|
|
func (lm *loggingMiddleware) Register(user manager.User) (err error) {
|
2017-09-23 01:03:27 +02:00
|
|
|
defer func(begin time.Time) {
|
2018-03-11 18:06:01 +01:00
|
|
|
lm.logger.Log(
|
2017-09-23 01:03:27 +02:00
|
|
|
"method", "register",
|
|
|
|
"email", user.Email,
|
|
|
|
"error", err,
|
|
|
|
"took", time.Since(begin),
|
|
|
|
)
|
|
|
|
}(time.Now())
|
|
|
|
|
2018-03-11 18:06:01 +01:00
|
|
|
return lm.svc.Register(user)
|
2017-09-23 01:03:27 +02:00
|
|
|
}
|
|
|
|
|
2018-03-11 18:06:01 +01:00
|
|
|
func (lm *loggingMiddleware) Login(user manager.User) (token string, err error) {
|
2017-09-23 01:03:27 +02:00
|
|
|
defer func(begin time.Time) {
|
2018-03-11 18:06:01 +01:00
|
|
|
lm.logger.Log(
|
2017-09-23 01:03:27 +02:00
|
|
|
"method", "login",
|
|
|
|
"email", user.Email,
|
|
|
|
"error", err,
|
|
|
|
"took", time.Since(begin),
|
|
|
|
)
|
|
|
|
}(time.Now())
|
|
|
|
|
2018-03-11 18:06:01 +01:00
|
|
|
return lm.svc.Login(user)
|
2017-09-23 01:03:27 +02:00
|
|
|
}
|
|
|
|
|
2018-03-11 18:06:01 +01:00
|
|
|
func (lm *loggingMiddleware) AddClient(key string, client manager.Client) (id string, err error) {
|
2017-09-23 01:03:27 +02:00
|
|
|
defer func(begin time.Time) {
|
2018-03-11 18:06:01 +01:00
|
|
|
lm.logger.Log(
|
2017-09-23 01:03:27 +02:00
|
|
|
"method", "add_client",
|
|
|
|
"key", key,
|
|
|
|
"id", id,
|
|
|
|
"error", err,
|
|
|
|
"took", time.Since(begin),
|
|
|
|
)
|
|
|
|
}(time.Now())
|
|
|
|
|
2018-03-11 18:06:01 +01:00
|
|
|
return lm.svc.AddClient(key, client)
|
2017-09-23 01:03:27 +02:00
|
|
|
}
|
|
|
|
|
2018-03-11 18:06:01 +01:00
|
|
|
func (lm *loggingMiddleware) UpdateClient(key string, client manager.Client) (err error) {
|
2017-09-23 01:03:27 +02:00
|
|
|
defer func(begin time.Time) {
|
2018-03-11 18:06:01 +01:00
|
|
|
lm.logger.Log(
|
2017-09-23 01:03:27 +02:00
|
|
|
"method", "update_client",
|
|
|
|
"key", key,
|
|
|
|
"id", client.ID,
|
|
|
|
"error", err,
|
|
|
|
"took", time.Since(begin),
|
|
|
|
)
|
|
|
|
}(time.Now())
|
|
|
|
|
2018-03-11 18:06:01 +01:00
|
|
|
return lm.svc.UpdateClient(key, client)
|
2017-09-23 01:03:27 +02:00
|
|
|
}
|
|
|
|
|
2018-03-11 18:06:01 +01:00
|
|
|
func (lm *loggingMiddleware) ViewClient(key string, id string) (client manager.Client, err error) {
|
2017-09-23 01:03:27 +02:00
|
|
|
defer func(begin time.Time) {
|
2018-03-11 18:06:01 +01:00
|
|
|
lm.logger.Log(
|
2017-09-23 01:03:27 +02:00
|
|
|
"method", "view_client",
|
|
|
|
"key", key,
|
|
|
|
"id", id,
|
|
|
|
"error", err,
|
|
|
|
"took", time.Since(begin),
|
|
|
|
)
|
|
|
|
}(time.Now())
|
|
|
|
|
2018-03-11 18:06:01 +01:00
|
|
|
return lm.svc.ViewClient(key, id)
|
2017-09-23 01:03:27 +02:00
|
|
|
}
|
|
|
|
|
2018-03-11 18:06:01 +01:00
|
|
|
func (lm *loggingMiddleware) ListClients(key string) (clients []manager.Client, err error) {
|
2017-09-23 01:03:27 +02:00
|
|
|
defer func(begin time.Time) {
|
2018-03-11 18:06:01 +01:00
|
|
|
lm.logger.Log(
|
2017-09-23 01:03:27 +02:00
|
|
|
"method", "list_clients",
|
|
|
|
"key", key,
|
|
|
|
"error", err,
|
|
|
|
"took", time.Since(begin),
|
|
|
|
)
|
|
|
|
}(time.Now())
|
|
|
|
|
2018-03-11 18:06:01 +01:00
|
|
|
return lm.svc.ListClients(key)
|
2017-09-23 01:03:27 +02:00
|
|
|
}
|
|
|
|
|
2018-03-11 18:06:01 +01:00
|
|
|
func (lm *loggingMiddleware) RemoveClient(key string, id string) (err error) {
|
2017-09-23 01:03:27 +02:00
|
|
|
defer func(begin time.Time) {
|
2018-03-11 18:06:01 +01:00
|
|
|
lm.logger.Log(
|
2017-09-23 01:03:27 +02:00
|
|
|
"method", "remove_client",
|
|
|
|
"key", key,
|
|
|
|
"id", id,
|
|
|
|
"error", err,
|
|
|
|
"took", time.Since(begin),
|
|
|
|
)
|
|
|
|
}(time.Now())
|
|
|
|
|
2018-03-11 18:06:01 +01:00
|
|
|
return lm.svc.RemoveClient(key, id)
|
2017-09-23 01:03:27 +02:00
|
|
|
}
|
|
|
|
|
2018-03-11 18:06:01 +01:00
|
|
|
func (lm *loggingMiddleware) CreateChannel(key string, channel manager.Channel) (id string, err error) {
|
2017-09-23 01:03:27 +02:00
|
|
|
defer func(begin time.Time) {
|
2018-03-11 18:06:01 +01:00
|
|
|
lm.logger.Log(
|
2017-09-23 01:03:27 +02:00
|
|
|
"method", "create_channel",
|
|
|
|
"key", key,
|
|
|
|
"id", id,
|
|
|
|
"error", err,
|
|
|
|
"took", time.Since(begin),
|
|
|
|
)
|
|
|
|
}(time.Now())
|
|
|
|
|
2018-03-11 18:06:01 +01:00
|
|
|
return lm.svc.CreateChannel(key, channel)
|
2017-09-23 01:03:27 +02:00
|
|
|
}
|
|
|
|
|
2018-03-11 18:06:01 +01:00
|
|
|
func (lm *loggingMiddleware) UpdateChannel(key string, channel manager.Channel) (err error) {
|
2017-09-23 01:03:27 +02:00
|
|
|
defer func(begin time.Time) {
|
2018-03-11 18:06:01 +01:00
|
|
|
lm.logger.Log(
|
2017-09-23 01:03:27 +02:00
|
|
|
"method", "update_channel",
|
|
|
|
"key", key,
|
|
|
|
"id", channel.ID,
|
|
|
|
"error", err,
|
|
|
|
"took", time.Since(begin),
|
|
|
|
)
|
|
|
|
}(time.Now())
|
|
|
|
|
2018-03-11 18:06:01 +01:00
|
|
|
return lm.svc.UpdateChannel(key, channel)
|
2017-09-23 01:03:27 +02:00
|
|
|
}
|
|
|
|
|
2018-03-11 18:06:01 +01:00
|
|
|
func (lm *loggingMiddleware) ViewChannel(key string, id string) (channel manager.Channel, err error) {
|
2017-09-23 01:03:27 +02:00
|
|
|
defer func(begin time.Time) {
|
2018-03-11 18:06:01 +01:00
|
|
|
lm.logger.Log(
|
2017-09-23 01:03:27 +02:00
|
|
|
"method", "view_channel",
|
|
|
|
"key", key,
|
|
|
|
"id", id,
|
|
|
|
"error", err,
|
|
|
|
"took", time.Since(begin),
|
|
|
|
)
|
|
|
|
}(time.Now())
|
|
|
|
|
2018-03-11 18:06:01 +01:00
|
|
|
return lm.svc.ViewChannel(key, id)
|
2017-09-23 01:03:27 +02:00
|
|
|
}
|
|
|
|
|
2018-03-11 18:06:01 +01:00
|
|
|
func (lm *loggingMiddleware) ListChannels(key string) (channels []manager.Channel, err error) {
|
2017-09-23 01:03:27 +02:00
|
|
|
defer func(begin time.Time) {
|
2018-03-11 18:06:01 +01:00
|
|
|
lm.logger.Log(
|
2017-09-23 01:03:27 +02:00
|
|
|
"method", "list_channels",
|
|
|
|
"key", key,
|
|
|
|
"error", err,
|
|
|
|
"took", time.Since(begin),
|
|
|
|
)
|
|
|
|
}(time.Now())
|
|
|
|
|
2018-03-11 18:06:01 +01:00
|
|
|
return lm.svc.ListChannels(key)
|
2017-09-23 01:03:27 +02:00
|
|
|
}
|
|
|
|
|
2018-03-11 18:06:01 +01:00
|
|
|
func (lm *loggingMiddleware) RemoveChannel(key string, id string) (err error) {
|
2017-09-23 01:03:27 +02:00
|
|
|
defer func(begin time.Time) {
|
2018-03-11 18:06:01 +01:00
|
|
|
lm.logger.Log(
|
2017-09-23 01:03:27 +02:00
|
|
|
"method", "remove_channel",
|
|
|
|
"key", key,
|
|
|
|
"id", id,
|
|
|
|
"error", err,
|
|
|
|
"took", time.Since(begin),
|
|
|
|
)
|
|
|
|
}(time.Now())
|
|
|
|
|
2018-03-11 18:06:01 +01:00
|
|
|
return lm.svc.RemoveChannel(key, id)
|
2017-09-23 01:03:27 +02:00
|
|
|
}
|
|
|
|
|
2018-03-11 18:06:01 +01:00
|
|
|
func (lm *loggingMiddleware) Connect(key, chanId, clientId string) (err error) {
|
2017-12-29 10:47:43 +01:00
|
|
|
defer func(begin time.Time) {
|
2018-03-11 18:06:01 +01:00
|
|
|
lm.logger.Log(
|
|
|
|
"method", "connect",
|
|
|
|
"key", key,
|
|
|
|
"channel", chanId,
|
|
|
|
"client", clientId,
|
|
|
|
"error", err,
|
|
|
|
"took", time.Since(begin),
|
|
|
|
)
|
|
|
|
}(time.Now())
|
|
|
|
|
|
|
|
return lm.svc.Connect(key, chanId, clientId)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (lm *loggingMiddleware) Disconnect(key, chanId, clientId string) (err error) {
|
|
|
|
defer func(begin time.Time) {
|
|
|
|
lm.logger.Log(
|
|
|
|
"method", "disconnect",
|
|
|
|
"key", key,
|
|
|
|
"channel", chanId,
|
|
|
|
"client", clientId,
|
|
|
|
"error", err,
|
|
|
|
"took", time.Since(begin),
|
|
|
|
)
|
|
|
|
}(time.Now())
|
|
|
|
|
|
|
|
return lm.svc.Disconnect(key, chanId, clientId)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (lm *loggingMiddleware) Identity(key string) (id string, err error) {
|
|
|
|
defer func(begin time.Time) {
|
|
|
|
lm.logger.Log(
|
2017-12-29 10:47:43 +01:00
|
|
|
"method", "identity",
|
|
|
|
"id", id,
|
|
|
|
"error", err,
|
|
|
|
"took", time.Since(begin),
|
|
|
|
)
|
|
|
|
}(time.Now())
|
|
|
|
|
2018-03-11 18:06:01 +01:00
|
|
|
return lm.svc.Identity(key)
|
2017-12-29 10:47:43 +01:00
|
|
|
}
|
|
|
|
|
2018-03-11 18:06:01 +01:00
|
|
|
func (lm *loggingMiddleware) CanAccess(key string, id string) (pub string, err error) {
|
2017-09-23 01:03:27 +02:00
|
|
|
defer func(begin time.Time) {
|
2018-03-11 18:06:01 +01:00
|
|
|
lm.logger.Log(
|
2017-09-23 01:03:27 +02:00
|
|
|
"method", "can_access",
|
|
|
|
"key", key,
|
|
|
|
"id", id,
|
2017-12-29 10:52:13 +01:00
|
|
|
"publisher", pub,
|
|
|
|
"error", err,
|
2017-09-23 01:03:27 +02:00
|
|
|
"took", time.Since(begin),
|
|
|
|
)
|
|
|
|
}(time.Now())
|
|
|
|
|
2018-03-11 18:06:01 +01:00
|
|
|
return lm.svc.CanAccess(key, id)
|
2017-09-23 01:03:27 +02:00
|
|
|
}
|