diff --git a/server/kolide/hosts.go b/server/kolide/hosts.go index 7f697594f7..eda3755c24 100644 --- a/server/kolide/hosts.go +++ b/server/kolide/hosts.go @@ -41,10 +41,10 @@ type HostStore interface { } type HostService interface { - ListHosts(ctx context.Context, opt ListOptions) ([]*Host, error) - GetHost(ctx context.Context, id uint) (*Host, error) - GetHostSummary(ctx context.Context) (*HostSummary, error) - DeleteHost(ctx context.Context, id uint) error + ListHosts(ctx context.Context, opt ListOptions) (hosts []*Host, err error) + GetHost(ctx context.Context, id uint) (host *Host, err error) + GetHostSummary(ctx context.Context) (summary *HostSummary, err error) + DeleteHost(ctx context.Context, id uint) (err error) } type Host struct { diff --git a/server/kolide/labels.go b/server/kolide/labels.go index 9ec6c95b1d..75d26a70c4 100644 --- a/server/kolide/labels.go +++ b/server/kolide/labels.go @@ -36,10 +36,10 @@ type LabelStore interface { } type LabelService interface { - ListLabels(ctx context.Context, opt ListOptions) ([]*Label, error) - GetLabel(ctx context.Context, id uint) (*Label, error) - NewLabel(ctx context.Context, p LabelPayload) (*Label, error) - DeleteLabel(ctx context.Context, id uint) error + ListLabels(ctx context.Context, opt ListOptions) (labels []*Label, err error) + GetLabel(ctx context.Context, id uint) (label *Label, err error) + NewLabel(ctx context.Context, p LabelPayload) (label *Label, err error) + DeleteLabel(ctx context.Context, id uint) (err error) } type LabelPayload struct { diff --git a/server/kolide/osquery.go b/server/kolide/osquery.go index 83dd784e5c..e89380b112 100644 --- a/server/kolide/osquery.go +++ b/server/kolide/osquery.go @@ -5,13 +5,13 @@ import ( ) type OsqueryService interface { - EnrollAgent(ctx context.Context, enrollSecret, hostIdentifier string) (string, error) - AuthenticateHost(ctx context.Context, nodeKey string) (*Host, error) - GetClientConfig(ctx context.Context) (*OsqueryConfig, error) - GetDistributedQueries(ctx context.Context) (map[string]string, error) - SubmitDistributedQueryResults(ctx context.Context, results OsqueryDistributedQueryResults) error - SubmitStatusLogs(ctx context.Context, logs []OsqueryStatusLog) error - SubmitResultLogs(ctx context.Context, logs []OsqueryResultLog) error + EnrollAgent(ctx context.Context, enrollSecret, hostIdentifier string) (nodeKey string, err error) + AuthenticateHost(ctx context.Context, nodeKey string) (host *Host, err error) + GetClientConfig(ctx context.Context) (config *OsqueryConfig, err error) + GetDistributedQueries(ctx context.Context) (queries map[string]string, err error) + SubmitDistributedQueryResults(ctx context.Context, results OsqueryDistributedQueryResults) (err error) + SubmitStatusLogs(ctx context.Context, logs []OsqueryStatusLog) (err error) + SubmitResultLogs(ctx context.Context, logs []OsqueryResultLog) (err error) } type OsqueryDistributedQueryResults map[string][]map[string]string diff --git a/server/kolide/packs.go b/server/kolide/packs.go index 68cc0df433..d419f479b8 100644 --- a/server/kolide/packs.go +++ b/server/kolide/packs.go @@ -25,22 +25,22 @@ type PackStore interface { type PackService interface { // Pack methods - ListPacks(ctx context.Context, opt ListOptions) ([]*Pack, error) - GetPack(ctx context.Context, id uint) (*Pack, error) - NewPack(ctx context.Context, p PackPayload) (*Pack, error) - ModifyPack(ctx context.Context, id uint, p PackPayload) (*Pack, error) - DeletePack(ctx context.Context, id uint) error + ListPacks(ctx context.Context, opt ListOptions) (packs []*Pack, err error) + GetPack(ctx context.Context, id uint) (pack *Pack, err error) + NewPack(ctx context.Context, p PackPayload) (pack *Pack, err error) + ModifyPack(ctx context.Context, id uint, p PackPayload) (pack *Pack, err error) + DeletePack(ctx context.Context, id uint) (err error) // Modifying the labels for packs - AddLabelToPack(ctx context.Context, lid, pid uint) error - RemoveLabelFromPack(ctx context.Context, lid, pid uint) error - ListLabelsForPack(ctx context.Context, pid uint) ([]*Label, error) + AddLabelToPack(ctx context.Context, lid, pid uint) (err error) + RemoveLabelFromPack(ctx context.Context, lid, pid uint) (err error) + ListLabelsForPack(ctx context.Context, pid uint) (labels []*Label, err error) // Modifying the hosts for packs - AddHostToPack(ctx context.Context, hid, pid uint) error - RemoveHostFromPack(ctx context.Context, hid, pid uint) error - ListPacksForHost(ctx context.Context, hid uint) ([]*Pack, error) - ListHostsInPack(ctx context.Context, pid uint, opt ListOptions) ([]*Host, error) + AddHostToPack(ctx context.Context, hid, pid uint) (err error) + RemoveHostFromPack(ctx context.Context, hid, pid uint) (err error) + ListPacksForHost(ctx context.Context, hid uint) (packs []*Pack, err error) + ListHostsInPack(ctx context.Context, pid uint, opt ListOptions) (hosts []*Host, err error) } type Pack struct { diff --git a/server/kolide/scheduled_queries.go b/server/kolide/scheduled_queries.go index 42452fc345..d13d59752b 100644 --- a/server/kolide/scheduled_queries.go +++ b/server/kolide/scheduled_queries.go @@ -13,11 +13,11 @@ type ScheduledQueryStore interface { } type ScheduledQueryService interface { - GetScheduledQuery(ctx context.Context, id uint) (*ScheduledQuery, error) - GetScheduledQueriesInPack(ctx context.Context, id uint, opts ListOptions) ([]*ScheduledQuery, error) - ScheduleQuery(ctx context.Context, sq *ScheduledQuery) (*ScheduledQuery, error) - DeleteScheduledQuery(ctx context.Context, id uint) error - ModifyScheduledQuery(ctx context.Context, sq *ScheduledQuery) (*ScheduledQuery, error) + GetScheduledQuery(ctx context.Context, id uint) (query *ScheduledQuery, err error) + GetScheduledQueriesInPack(ctx context.Context, id uint, opts ListOptions) (queries []*ScheduledQuery, err error) + ScheduleQuery(ctx context.Context, sq *ScheduledQuery) (query *ScheduledQuery, err error) + DeleteScheduledQuery(ctx context.Context, id uint) (err error) + ModifyScheduledQuery(ctx context.Context, sq *ScheduledQuery) (query *ScheduledQuery, err error) } type ScheduledQuery struct { diff --git a/server/service/logging_appconfig.go b/server/service/logging_appconfig.go new file mode 100644 index 0000000000..9d8bf5d34c --- /dev/null +++ b/server/service/logging_appconfig.go @@ -0,0 +1,62 @@ +package service + +import ( + "time" + + "github.com/kolide/kolide-ose/server/kolide" + "golang.org/x/net/context" +) + +func (mw loggingMiddleware) NewAppConfig(ctx context.Context, p kolide.AppConfigPayload) (*kolide.AppConfig, error) { + var ( + info *kolide.AppConfig + err error + ) + + defer func(begin time.Time) { + _ = mw.logger.Log( + "method", "NewAppConfig", + "err", err, + "took", time.Since(begin), + ) + }(time.Now()) + + info, err = mw.Service.NewAppConfig(ctx, p) + return info, err +} + +func (mw loggingMiddleware) AppConfig(ctx context.Context) (*kolide.AppConfig, error) { + var ( + info *kolide.AppConfig + err error + ) + + defer func(begin time.Time) { + _ = mw.logger.Log( + "method", "AppConfig", + "err", err, + "took", time.Since(begin), + ) + }(time.Now()) + + info, err = mw.Service.AppConfig(ctx) + return info, err +} + +func (mw loggingMiddleware) ModifyAppConfig(ctx context.Context, p kolide.AppConfigPayload) (*kolide.AppConfig, error) { + var ( + info *kolide.AppConfig + err error + ) + + defer func(begin time.Time) { + _ = mw.logger.Log( + "method", "ModifyAppConfig", + "err", err, + "took", time.Since(begin), + ) + }(time.Now()) + + info, err = mw.Service.ModifyAppConfig(ctx, p) + return info, err +} diff --git a/server/service/logging_hosts.go b/server/service/logging_hosts.go new file mode 100644 index 0000000000..657d0d1c73 --- /dev/null +++ b/server/service/logging_hosts.go @@ -0,0 +1,79 @@ +package service + +import ( + "time" + + "github.com/kolide/kolide-ose/server/kolide" + "golang.org/x/net/context" +) + +func (mw loggingMiddleware) ListHosts(ctx context.Context, opt kolide.ListOptions) ([]*kolide.Host, error) { + var ( + hosts []*kolide.Host + err error + ) + + defer func(begin time.Time) { + _ = mw.logger.Log( + "method", "ListHosts", + "err", err, + "took", time.Since(begin), + ) + }(time.Now()) + + hosts, err = mw.Service.ListHosts(ctx, opt) + return hosts, err +} + +func (mw loggingMiddleware) GetHost(ctx context.Context, id uint) (*kolide.Host, error) { + var ( + host *kolide.Host + err error + ) + + defer func(begin time.Time) { + _ = mw.logger.Log( + "method", "GetHost", + "err", err, + "took", time.Since(begin), + ) + }(time.Now()) + + host, err = mw.Service.GetHost(ctx, id) + return host, err +} + +func (mw loggingMiddleware) GetHostSummary(ctx context.Context) (*kolide.HostSummary, error) { + var ( + summary *kolide.HostSummary + err error + ) + + defer func(begin time.Time) { + _ = mw.logger.Log( + "method", "GetHostSummary", + "err", err, + "took", time.Since(begin), + ) + }(time.Now()) + + summary, err = mw.Service.GetHostSummary(ctx) + return summary, err +} + +func (mw loggingMiddleware) DeleteHost(ctx context.Context, id uint) error { + var ( + err error + ) + + defer func(begin time.Time) { + _ = mw.logger.Log( + "method", "DeleteHost", + "err", err, + "took", time.Since(begin), + ) + }(time.Now()) + + err = mw.Service.DeleteHost(ctx, id) + return err +} diff --git a/server/service/logging_labels.go b/server/service/logging_labels.go new file mode 100644 index 0000000000..ed8d4241e0 --- /dev/null +++ b/server/service/logging_labels.go @@ -0,0 +1,79 @@ +package service + +import ( + "time" + + "github.com/kolide/kolide-ose/server/kolide" + "golang.org/x/net/context" +) + +func (mw loggingMiddleware) ListLabels(ctx context.Context, opt kolide.ListOptions) ([]*kolide.Label, error) { + var ( + labels []*kolide.Label + err error + ) + + defer func(begin time.Time) { + _ = mw.logger.Log( + "method", "ListLabels", + "err", err, + "took", time.Since(begin), + ) + }(time.Now()) + + labels, err = mw.Service.ListLabels(ctx, opt) + return labels, err +} + +func (mw loggingMiddleware) GetLabel(ctx context.Context, id uint) (*kolide.Label, error) { + var ( + label *kolide.Label + err error + ) + + defer func(begin time.Time) { + _ = mw.logger.Log( + "method", "GetLabel", + "err", err, + "took", time.Since(begin), + ) + }(time.Now()) + + label, err = mw.Service.GetLabel(ctx, id) + return label, err +} + +func (mw loggingMiddleware) NewLabel(ctx context.Context, p kolide.LabelPayload) (*kolide.Label, error) { + var ( + label *kolide.Label + err error + ) + + defer func(begin time.Time) { + _ = mw.logger.Log( + "method", "NewLabel", + "err", err, + "took", time.Since(begin), + ) + }(time.Now()) + + label, err = mw.Service.NewLabel(ctx, p) + return label, err +} + +func (mw loggingMiddleware) DeleteLabel(ctx context.Context, id uint) error { + var ( + err error + ) + + defer func(begin time.Time) { + _ = mw.logger.Log( + "method", "DeleteLabel", + "err", err, + "took", time.Since(begin), + ) + }(time.Now()) + + err = mw.Service.DeleteLabel(ctx, id) + return err +} diff --git a/server/service/logging_osquery.go b/server/service/logging_osquery.go new file mode 100644 index 0000000000..67d069cdca --- /dev/null +++ b/server/service/logging_osquery.go @@ -0,0 +1,131 @@ +package service + +import ( + "time" + + "github.com/kolide/kolide-ose/server/kolide" + "golang.org/x/net/context" +) + +func (mw loggingMiddleware) EnrollAgent(ctx context.Context, enrollSecret string, hostIdentifier string) (string, error) { + var ( + nodeKey string + err error + ) + + defer func(begin time.Time) { + _ = mw.logger.Log( + "method", "EnrollAgent", + "err", err, + "took", time.Since(begin), + ) + }(time.Now()) + + nodeKey, err = mw.Service.EnrollAgent(ctx, enrollSecret, hostIdentifier) + return nodeKey, err +} + +func (mw loggingMiddleware) AuthenticateHost(ctx context.Context, nodeKey string) (*kolide.Host, error) { + var ( + host *kolide.Host + err error + ) + + defer func(begin time.Time) { + _ = mw.logger.Log( + "method", "AuthenticateHost", + "err", err, + "took", time.Since(begin), + ) + }(time.Now()) + + host, err = mw.Service.AuthenticateHost(ctx, nodeKey) + return host, err +} + +func (mw loggingMiddleware) GetClientConfig(ctx context.Context) (*kolide.OsqueryConfig, error) { + var ( + config *kolide.OsqueryConfig + err error + ) + + defer func(begin time.Time) { + _ = mw.logger.Log( + "method", "GetClientConfig", + "err", err, + "took", time.Since(begin), + ) + }(time.Now()) + + config, err = mw.Service.GetClientConfig(ctx) + return config, err +} + +func (mw loggingMiddleware) GetDistributedQueries(ctx context.Context) (map[string]string, error) { + var ( + queries map[string]string + err error + ) + + defer func(begin time.Time) { + _ = mw.logger.Log( + "method", "GetDistributedQueries", + "err", err, + "took", time.Since(begin), + ) + }(time.Now()) + + queries, err = mw.Service.GetDistributedQueries(ctx) + return queries, err +} + +func (mw loggingMiddleware) SubmitDistributedQueryResults(ctx context.Context, results kolide.OsqueryDistributedQueryResults) error { + var ( + err error + ) + + defer func(begin time.Time) { + _ = mw.logger.Log( + "method", "SubmitDistributedQueryResults", + "err", err, + "took", time.Since(begin), + ) + }(time.Now()) + + err = mw.Service.SubmitDistributedQueryResults(ctx, results) + return err +} + +func (mw loggingMiddleware) SubmitStatusLogs(ctx context.Context, logs []kolide.OsqueryStatusLog) error { + var ( + err error + ) + + defer func(begin time.Time) { + _ = mw.logger.Log( + "method", "SubmitStatusLogs", + "err", err, + "took", time.Since(begin), + ) + }(time.Now()) + + err = mw.Service.SubmitStatusLogs(ctx, logs) + return err +} + +func (mw loggingMiddleware) SubmitResultLogs(ctx context.Context, logs []kolide.OsqueryResultLog) error { + var ( + err error + ) + + defer func(begin time.Time) { + _ = mw.logger.Log( + "method", "SubmitResultLogs", + "err", err, + "took", time.Since(begin), + ) + }(time.Now()) + + err = mw.Service.SubmitResultLogs(ctx, logs) + return err +} diff --git a/server/service/logging_packs.go b/server/service/logging_packs.go new file mode 100644 index 0000000000..2181b937b1 --- /dev/null +++ b/server/service/logging_packs.go @@ -0,0 +1,219 @@ +package service + +import ( + "time" + + "github.com/kolide/kolide-ose/server/kolide" + "golang.org/x/net/context" +) + +func (mw loggingMiddleware) ListPacks(ctx context.Context, opt kolide.ListOptions) ([]*kolide.Pack, error) { + var ( + packs []*kolide.Pack + err error + ) + + defer func(begin time.Time) { + _ = mw.logger.Log( + "method", "ListPacks", + "err", err, + "took", time.Since(begin), + ) + }(time.Now()) + + packs, err = mw.Service.ListPacks(ctx, opt) + return packs, err +} + +func (mw loggingMiddleware) GetPack(ctx context.Context, id uint) (*kolide.Pack, error) { + var ( + pack *kolide.Pack + err error + ) + + defer func(begin time.Time) { + _ = mw.logger.Log( + "method", "GetPack", + "err", err, + "took", time.Since(begin), + ) + }(time.Now()) + + pack, err = mw.Service.GetPack(ctx, id) + return pack, err +} + +func (mw loggingMiddleware) NewPack(ctx context.Context, p kolide.PackPayload) (*kolide.Pack, error) { + var ( + pack *kolide.Pack + err error + ) + + defer func(begin time.Time) { + _ = mw.logger.Log( + "method", "NewPack", + "err", err, + "took", time.Since(begin), + ) + }(time.Now()) + + pack, err = mw.Service.NewPack(ctx, p) + return pack, err +} + +func (mw loggingMiddleware) ModifyPack(ctx context.Context, id uint, p kolide.PackPayload) (*kolide.Pack, error) { + var ( + pack *kolide.Pack + err error + ) + + defer func(begin time.Time) { + _ = mw.logger.Log( + "method", "ModifyPack", + "err", err, + "took", time.Since(begin), + ) + }(time.Now()) + + pack, err = mw.Service.ModifyPack(ctx, id, p) + return pack, err +} + +func (mw loggingMiddleware) DeletePack(ctx context.Context, id uint) error { + var ( + err error + ) + + defer func(begin time.Time) { + _ = mw.logger.Log( + "method", "DeletePack", + "err", err, + "took", time.Since(begin), + ) + }(time.Now()) + + err = mw.Service.DeletePack(ctx, id) + return err +} + +func (mw loggingMiddleware) AddLabelToPack(ctx context.Context, lid uint, pid uint) error { + var ( + err error + ) + + defer func(begin time.Time) { + _ = mw.logger.Log( + "method", "AddLabelToPack", + "err", err, + "took", time.Since(begin), + ) + }(time.Now()) + + err = mw.Service.AddLabelToPack(ctx, lid, pid) + return err +} + +func (mw loggingMiddleware) RemoveLabelFromPack(ctx context.Context, lid uint, pid uint) error { + var ( + err error + ) + + defer func(begin time.Time) { + _ = mw.logger.Log( + "method", "RemoveLabelFromPack", + "err", err, + "took", time.Since(begin), + ) + }(time.Now()) + + err = mw.Service.RemoveLabelFromPack(ctx, lid, pid) + return err +} + +func (mw loggingMiddleware) ListLabelsForPack(ctx context.Context, pid uint) ([]*kolide.Label, error) { + var ( + labels []*kolide.Label + err error + ) + + defer func(begin time.Time) { + _ = mw.logger.Log( + "method", "ListLabelsForPack", + "err", err, + "took", time.Since(begin), + ) + }(time.Now()) + + labels, err = mw.Service.ListLabelsForPack(ctx, pid) + return labels, err +} + +func (mw loggingMiddleware) AddHostToPack(ctx context.Context, hid uint, pid uint) error { + var ( + err error + ) + + defer func(begin time.Time) { + _ = mw.logger.Log( + "method", "AddHostToPack", + "err", err, + "took", time.Since(begin), + ) + }(time.Now()) + + err = mw.Service.AddHostToPack(ctx, hid, pid) + return err +} + +func (mw loggingMiddleware) RemoveHostFromPack(ctx context.Context, hid uint, pid uint) error { + var ( + err error + ) + + defer func(begin time.Time) { + _ = mw.logger.Log( + "method", "RemoveHostFromPack", + "err", err, + "took", time.Since(begin), + ) + }(time.Now()) + + err = mw.Service.RemoveHostFromPack(ctx, hid, pid) + return err +} + +func (mw loggingMiddleware) ListPacksForHost(ctx context.Context, hid uint) ([]*kolide.Pack, error) { + var ( + packs []*kolide.Pack + err error + ) + + defer func(begin time.Time) { + _ = mw.logger.Log( + "method", "ListPacksForHost", + "err", err, + "took", time.Since(begin), + ) + }(time.Now()) + + packs, err = mw.Service.ListPacksForHost(ctx, hid) + return packs, err +} + +func (mw loggingMiddleware) ListHostsInPack(ctx context.Context, pid uint, opt kolide.ListOptions) ([]*kolide.Host, error) { + var ( + hosts []*kolide.Host + err error + ) + + defer func(begin time.Time) { + _ = mw.logger.Log( + "method", "ListHostsInPack", + "err", err, + "took", time.Since(begin), + ) + }(time.Now()) + + hosts, err = mw.Service.ListHostsInPack(ctx, pid, opt) + return hosts, err +} diff --git a/server/service/logging_scheduled_queries.go b/server/service/logging_scheduled_queries.go new file mode 100644 index 0000000000..ee76cbdc6d --- /dev/null +++ b/server/service/logging_scheduled_queries.go @@ -0,0 +1,97 @@ +package service + +import ( + "time" + + "github.com/kolide/kolide-ose/server/kolide" + "golang.org/x/net/context" +) + +func (mw loggingMiddleware) GetScheduledQuery(ctx context.Context, id uint) (*kolide.ScheduledQuery, error) { + var ( + query *kolide.ScheduledQuery + err error + ) + + defer func(begin time.Time) { + _ = mw.logger.Log( + "method", "GetScheduledQuery", + "err", err, + "took", time.Since(begin), + ) + }(time.Now()) + + query, err = mw.Service.GetScheduledQuery(ctx, id) + return query, err +} + +func (mw loggingMiddleware) GetScheduledQueriesInPack(ctx context.Context, id uint, opts kolide.ListOptions) ([]*kolide.ScheduledQuery, error) { + var ( + queries []*kolide.ScheduledQuery + err error + ) + + defer func(begin time.Time) { + _ = mw.logger.Log( + "method", "GetScheduledQueriesInPack", + "err", err, + "took", time.Since(begin), + ) + }(time.Now()) + + queries, err = mw.Service.GetScheduledQueriesInPack(ctx, id, opts) + return queries, err +} + +func (mw loggingMiddleware) ScheduleQuery(ctx context.Context, sq *kolide.ScheduledQuery) (*kolide.ScheduledQuery, error) { + var ( + query *kolide.ScheduledQuery + err error + ) + + defer func(begin time.Time) { + _ = mw.logger.Log( + "method", "ScheduleQuery", + "err", err, + "took", time.Since(begin), + ) + }(time.Now()) + + query, err = mw.Service.ScheduleQuery(ctx, sq) + return query, err +} + +func (mw loggingMiddleware) DeleteScheduledQuery(ctx context.Context, id uint) error { + var ( + err error + ) + + defer func(begin time.Time) { + _ = mw.logger.Log( + "method", "DeleteScheduledQuery", + "err", err, + "took", time.Since(begin), + ) + }(time.Now()) + + err = mw.Service.DeleteScheduledQuery(ctx, id) + return err +} + +func (mw loggingMiddleware) ModifyScheduledQuery(ctx context.Context, sq *kolide.ScheduledQuery) (*kolide.ScheduledQuery, error) { + var ( + query *kolide.ScheduledQuery + err error + ) + + defer func(begin time.Time) { + _ = mw.logger.Log( + "method", "ModifyScheduledQuery", + "err", err, + "took", time.Since(begin), + ) + }(time.Now()) + + query, err = mw.Service.ModifyScheduledQuery(ctx, sq) + return query, err +} diff --git a/server/service/logging_users.go b/server/service/logging_users.go index d9b5ed1163..743c5fa943 100644 --- a/server/service/logging_users.go +++ b/server/service/logging_users.go @@ -8,6 +8,87 @@ import ( "golang.org/x/net/context" ) +func (mw loggingMiddleware) NewAdminCreatedUser(ctx context.Context, p kolide.UserPayload) (*kolide.User, error) { + var ( + user *kolide.User + err error + username = "none" + loggedInUser = "unauthenticated" + ) + + vc, ok := viewer.FromContext(ctx) + if ok { + loggedInUser = vc.Username() + } + + defer func(begin time.Time) { + _ = mw.logger.Log( + "method", "NewAdminCreatedUser", + "user", username, + "created_by", loggedInUser, + "err", err, + "took", time.Since(begin), + ) + }(time.Now()) + + user, err = mw.Service.NewAdminCreatedUser(ctx, p) + if user != nil { + username = user.Username + } + return user, err +} + +func (mw loggingMiddleware) ListUsers(ctx context.Context, opt kolide.ListOptions) ([]*kolide.User, error) { + var ( + users []*kolide.User + err error + username = "none" + ) + + vc, ok := viewer.FromContext(ctx) + if ok { + username = vc.Username() + } + + defer func(begin time.Time) { + _ = mw.logger.Log( + "method", "ListUsers", + "user", username, + "err", err, + "took", time.Since(begin), + ) + }(time.Now()) + + users, err = mw.Service.ListUsers(ctx, opt) + return users, err +} + +func (mw loggingMiddleware) RequirePasswordReset(ctx context.Context, uid uint, require bool) (*kolide.User, error) { + var ( + user *kolide.User + err error + username = "none" + ) + + vc, ok := viewer.FromContext(ctx) + if ok { + username = vc.Username() + } + + defer func(begin time.Time) { + _ = mw.logger.Log( + "method", "RequirePasswordReset", + "user", username, + "err", err, + "took", time.Since(begin), + ) + }(time.Now()) + + user, err = mw.Service.RequirePasswordReset(ctx, uid, require) + return user, err + +} + func (mw loggingMiddleware) NewUser(ctx context.Context, p kolide.UserPayload) (*kolide.User, error) { var ( user *kolide.User