2014-11-28 15:16:49 -06:00
|
|
|
package bus
|
|
|
|
|
|
|
|
import (
|
2016-10-03 02:38:03 -05:00
|
|
|
"context"
|
2018-04-27 06:41:58 -05:00
|
|
|
"errors"
|
2020-11-17 04:27:45 -06:00
|
|
|
"fmt"
|
2014-11-28 15:16:49 -06:00
|
|
|
"reflect"
|
2020-11-27 07:58:45 -06:00
|
|
|
|
|
|
|
"github.com/opentracing/opentracing-go"
|
2014-11-28 15:16:49 -06:00
|
|
|
)
|
|
|
|
|
2019-06-04 15:00:05 -05:00
|
|
|
// HandlerFunc defines a handler function interface.
|
2014-12-16 09:45:07 -06:00
|
|
|
type HandlerFunc interface{}
|
2019-06-04 15:00:05 -05:00
|
|
|
|
|
|
|
// Msg defines a message interface.
|
2014-12-16 09:45:07 -06:00
|
|
|
type Msg interface{}
|
2014-11-28 15:16:49 -06:00
|
|
|
|
2019-06-04 15:00:05 -05:00
|
|
|
// ErrHandlerNotFound defines an error if a handler is not found
|
2018-04-27 06:41:58 -05:00
|
|
|
var ErrHandlerNotFound = errors.New("handler not found")
|
|
|
|
|
2019-06-04 15:00:05 -05:00
|
|
|
// TransactionManager defines a transaction interface
|
2018-06-07 14:54:36 -05:00
|
|
|
type TransactionManager interface {
|
|
|
|
InTransaction(ctx context.Context, fn func(ctx context.Context) error) error
|
2018-06-05 14:13:53 -05:00
|
|
|
}
|
|
|
|
|
2019-06-04 15:00:05 -05:00
|
|
|
// Bus type defines the bus interface structure
|
2014-12-01 10:56:03 -06:00
|
|
|
type Bus interface {
|
2014-12-16 09:45:07 -06:00
|
|
|
Dispatch(msg Msg) error
|
2016-10-03 02:38:03 -05:00
|
|
|
DispatchCtx(ctx context.Context, msg Msg) error
|
2015-01-09 09:36:23 -06:00
|
|
|
Publish(msg Msg) error
|
2015-02-04 08:37:26 -06:00
|
|
|
|
2018-06-05 14:13:53 -05:00
|
|
|
// InTransaction starts a transaction and store it in the context.
|
|
|
|
// The caller can then pass a function with multiple DispatchCtx calls that
|
|
|
|
// all will be executed in the same transaction. InTransaction will rollback if the
|
2018-06-07 11:02:28 -05:00
|
|
|
// callback returns an error.
|
2018-06-05 14:13:53 -05:00
|
|
|
InTransaction(ctx context.Context, fn func(ctx context.Context) error) error
|
|
|
|
|
2014-12-16 09:45:07 -06:00
|
|
|
AddHandler(handler HandlerFunc)
|
2018-06-07 15:03:27 -05:00
|
|
|
AddHandlerCtx(handler HandlerFunc)
|
2015-01-09 09:36:23 -06:00
|
|
|
AddEventListener(handler HandlerFunc)
|
2018-06-05 14:13:53 -05:00
|
|
|
|
|
|
|
// SetTransactionManager allows the user to replace the internal
|
2020-06-01 10:11:25 -05:00
|
|
|
// noop TransactionManager that is responsible for managing
|
2018-06-05 14:13:53 -05:00
|
|
|
// transactions in `InTransaction`
|
2018-06-07 14:54:36 -05:00
|
|
|
SetTransactionManager(tm TransactionManager)
|
2018-06-05 14:13:53 -05:00
|
|
|
}
|
|
|
|
|
2019-06-04 15:00:05 -05:00
|
|
|
// InTransaction defines an in transaction function
|
2018-06-05 14:13:53 -05:00
|
|
|
func (b *InProcBus) InTransaction(ctx context.Context, fn func(ctx context.Context) error) error {
|
2018-06-07 14:54:36 -05:00
|
|
|
return b.txMng.InTransaction(ctx, fn)
|
2014-12-01 10:56:03 -06:00
|
|
|
}
|
|
|
|
|
2019-06-04 15:00:05 -05:00
|
|
|
// InProcBus defines the bus structure
|
2014-12-01 10:56:03 -06:00
|
|
|
type InProcBus struct {
|
2019-11-13 06:02:44 -06:00
|
|
|
handlers map[string]HandlerFunc
|
|
|
|
handlersWithCtx map[string]HandlerFunc
|
|
|
|
listeners map[string][]HandlerFunc
|
|
|
|
txMng TransactionManager
|
2014-12-01 10:56:03 -06:00
|
|
|
}
|
2014-11-28 15:16:49 -06:00
|
|
|
|
2014-12-16 05:04:08 -06:00
|
|
|
// temp stuff, not sure how to handle bus instance, and init yet
|
|
|
|
var globalBus = New()
|
|
|
|
|
2019-06-04 15:00:05 -05:00
|
|
|
// New initialize the bus
|
2014-12-01 10:56:03 -06:00
|
|
|
func New() Bus {
|
|
|
|
bus := &InProcBus{}
|
2014-12-16 09:45:07 -06:00
|
|
|
bus.handlers = make(map[string]HandlerFunc)
|
2018-06-08 03:51:27 -05:00
|
|
|
bus.handlersWithCtx = make(map[string]HandlerFunc)
|
2015-01-09 09:36:23 -06:00
|
|
|
bus.listeners = make(map[string][]HandlerFunc)
|
2018-06-07 14:54:36 -05:00
|
|
|
bus.txMng = &noopTransactionManager{}
|
2018-06-05 14:13:53 -05:00
|
|
|
|
2014-12-01 10:56:03 -06:00
|
|
|
return bus
|
2014-11-28 15:16:49 -06:00
|
|
|
}
|
|
|
|
|
2018-04-27 06:41:58 -05:00
|
|
|
// Want to get rid of global bus
|
|
|
|
func GetBus() Bus {
|
|
|
|
return globalBus
|
|
|
|
}
|
|
|
|
|
2019-06-04 15:00:05 -05:00
|
|
|
// SetTransactionManager function assign a transaction manager to the bus.
|
2018-06-07 14:54:36 -05:00
|
|
|
func (b *InProcBus) SetTransactionManager(tm TransactionManager) {
|
|
|
|
b.txMng = tm
|
2018-06-05 14:13:53 -05:00
|
|
|
}
|
|
|
|
|
2019-06-04 15:00:05 -05:00
|
|
|
// DispatchCtx function dispatch a message to the bus context.
|
2016-10-03 02:38:03 -05:00
|
|
|
func (b *InProcBus) DispatchCtx(ctx context.Context, msg Msg) error {
|
|
|
|
var msgName = reflect.TypeOf(msg).Elem().Name()
|
|
|
|
|
2020-11-27 07:58:45 -06:00
|
|
|
span, ctx := opentracing.StartSpanFromContext(ctx, "bus - "+msgName)
|
|
|
|
defer span.Finish()
|
|
|
|
|
|
|
|
span.SetTag("msg", msgName)
|
|
|
|
|
2018-06-08 03:51:27 -05:00
|
|
|
var handler = b.handlersWithCtx[msgName]
|
2016-10-03 02:38:03 -05:00
|
|
|
if handler == nil {
|
2018-04-27 06:41:58 -05:00
|
|
|
return ErrHandlerNotFound
|
2016-10-03 02:38:03 -05:00
|
|
|
}
|
|
|
|
|
2018-06-08 03:51:27 -05:00
|
|
|
var params = []reflect.Value{}
|
2018-06-10 16:17:18 -05:00
|
|
|
params = append(params, reflect.ValueOf(ctx))
|
2018-06-08 03:51:27 -05:00
|
|
|
params = append(params, reflect.ValueOf(msg))
|
2016-10-03 02:38:03 -05:00
|
|
|
|
|
|
|
ret := reflect.ValueOf(handler).Call(params)
|
|
|
|
err := ret[0].Interface()
|
|
|
|
if err == nil {
|
|
|
|
return nil
|
|
|
|
}
|
Outdent code after if block that ends with return (golint)
This commit fixes the following golint warnings:
pkg/bus/bus.go:64:9: if block ends with a return statement, so drop this else and outdent its block
pkg/bus/bus.go:84:9: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:137:10: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:177:9: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:183:10: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:199:9: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:208:9: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary)
pkg/components/dynmap/dynmap.go:236:9: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:242:10: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:257:9: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:263:10: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:278:9: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:284:10: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:299:9: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:331:9: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:350:9: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:356:10: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:366:12: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:390:9: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:396:10: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:405:12: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:427:9: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:433:10: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:442:12: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:459:9: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:465:10: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:474:12: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:491:9: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:497:10: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:506:12: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:523:9: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:529:10: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:538:12: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:555:9: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:561:10: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:570:12: if block ends with a return statement, so drop this else and outdent its block
pkg/login/ldap.go:55:11: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary)
pkg/login/ldap_test.go:372:10: if block ends with a return statement, so drop this else and outdent its block
pkg/middleware/middleware_test.go:213:12: if block ends with a return statement, so drop this else and outdent its block
pkg/plugins/dashboard_importer.go:153:11: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary)
pkg/plugins/dashboards_updater.go:39:9: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary)
pkg/plugins/dashboards_updater.go:121:10: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary)
pkg/plugins/plugins.go:210:9: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary)
pkg/plugins/plugins.go:235:9: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary)
pkg/services/alerting/eval_context.go:111:9: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary)
pkg/services/alerting/notifier.go:92:9: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary)
pkg/services/alerting/notifier.go:98:9: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary)
pkg/services/alerting/notifier.go:122:10: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary)
pkg/services/alerting/rule.go:108:10: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary)
pkg/services/alerting/rule.go:118:10: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary)
pkg/services/alerting/rule.go:121:11: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary)
pkg/services/alerting/notifiers/telegram.go:94:10: if block ends with a return statement, so drop this else and outdent its block
pkg/services/sqlstore/annotation.go:34:11: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary)
pkg/services/sqlstore/annotation.go:99:11: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary)
pkg/services/sqlstore/dashboard_test.go:107:13: if block ends with a return statement, so drop this else and outdent its block
pkg/services/sqlstore/plugin_setting.go:78:10: if block ends with a return statement, so drop this else and outdent its block
pkg/services/sqlstore/preferences.go:91:10: if block ends with a return statement, so drop this else and outdent its block
pkg/services/sqlstore/user.go:50:10: if block ends with a return statement, so drop this else and outdent its block
pkg/services/sqlstore/migrator/migrator.go:106:11: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary)
pkg/services/sqlstore/migrator/postgres_dialect.go:48:10: if block ends with a return statement, so drop this else and outdent its block
pkg/tsdb/time_range.go:59:9: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary)
pkg/tsdb/time_range.go:67:9: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary)
pkg/tsdb/cloudwatch/metric_find_query.go:225:9: if block ends with a return statement, so drop this else and outdent its block
pkg/util/filepath.go:68:11: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary)
2018-04-27 15:42:49 -05:00
|
|
|
return err.(error)
|
2016-10-03 02:38:03 -05:00
|
|
|
}
|
|
|
|
|
2019-06-04 15:00:05 -05:00
|
|
|
// Dispatch function dispatch a message to the bus.
|
2014-12-16 09:45:07 -06:00
|
|
|
func (b *InProcBus) Dispatch(msg Msg) error {
|
|
|
|
var msgName = reflect.TypeOf(msg).Elem().Name()
|
2014-11-28 15:16:49 -06:00
|
|
|
|
2018-06-13 02:18:53 -05:00
|
|
|
withCtx := true
|
2020-12-14 08:51:59 -06:00
|
|
|
handler := b.handlersWithCtx[msgName]
|
2018-06-13 02:18:53 -05:00
|
|
|
if handler == nil {
|
|
|
|
withCtx = false
|
|
|
|
handler = b.handlers[msgName]
|
2020-12-14 08:51:59 -06:00
|
|
|
if handler == nil {
|
|
|
|
return ErrHandlerNotFound
|
|
|
|
}
|
2014-11-28 15:16:49 -06:00
|
|
|
}
|
2014-12-16 09:45:07 -06:00
|
|
|
|
2018-06-13 02:18:53 -05:00
|
|
|
var params = []reflect.Value{}
|
|
|
|
if withCtx {
|
|
|
|
params = append(params, reflect.ValueOf(context.Background()))
|
|
|
|
}
|
|
|
|
params = append(params, reflect.ValueOf(msg))
|
2014-11-28 15:16:49 -06:00
|
|
|
|
|
|
|
ret := reflect.ValueOf(handler).Call(params)
|
|
|
|
err := ret[0].Interface()
|
|
|
|
if err == nil {
|
|
|
|
return nil
|
|
|
|
}
|
Outdent code after if block that ends with return (golint)
This commit fixes the following golint warnings:
pkg/bus/bus.go:64:9: if block ends with a return statement, so drop this else and outdent its block
pkg/bus/bus.go:84:9: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:137:10: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:177:9: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:183:10: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:199:9: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:208:9: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary)
pkg/components/dynmap/dynmap.go:236:9: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:242:10: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:257:9: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:263:10: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:278:9: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:284:10: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:299:9: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:331:9: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:350:9: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:356:10: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:366:12: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:390:9: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:396:10: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:405:12: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:427:9: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:433:10: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:442:12: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:459:9: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:465:10: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:474:12: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:491:9: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:497:10: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:506:12: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:523:9: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:529:10: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:538:12: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:555:9: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:561:10: if block ends with a return statement, so drop this else and outdent its block
pkg/components/dynmap/dynmap.go:570:12: if block ends with a return statement, so drop this else and outdent its block
pkg/login/ldap.go:55:11: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary)
pkg/login/ldap_test.go:372:10: if block ends with a return statement, so drop this else and outdent its block
pkg/middleware/middleware_test.go:213:12: if block ends with a return statement, so drop this else and outdent its block
pkg/plugins/dashboard_importer.go:153:11: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary)
pkg/plugins/dashboards_updater.go:39:9: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary)
pkg/plugins/dashboards_updater.go:121:10: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary)
pkg/plugins/plugins.go:210:9: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary)
pkg/plugins/plugins.go:235:9: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary)
pkg/services/alerting/eval_context.go:111:9: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary)
pkg/services/alerting/notifier.go:92:9: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary)
pkg/services/alerting/notifier.go:98:9: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary)
pkg/services/alerting/notifier.go:122:10: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary)
pkg/services/alerting/rule.go:108:10: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary)
pkg/services/alerting/rule.go:118:10: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary)
pkg/services/alerting/rule.go:121:11: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary)
pkg/services/alerting/notifiers/telegram.go:94:10: if block ends with a return statement, so drop this else and outdent its block
pkg/services/sqlstore/annotation.go:34:11: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary)
pkg/services/sqlstore/annotation.go:99:11: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary)
pkg/services/sqlstore/dashboard_test.go:107:13: if block ends with a return statement, so drop this else and outdent its block
pkg/services/sqlstore/plugin_setting.go:78:10: if block ends with a return statement, so drop this else and outdent its block
pkg/services/sqlstore/preferences.go:91:10: if block ends with a return statement, so drop this else and outdent its block
pkg/services/sqlstore/user.go:50:10: if block ends with a return statement, so drop this else and outdent its block
pkg/services/sqlstore/migrator/migrator.go:106:11: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary)
pkg/services/sqlstore/migrator/postgres_dialect.go:48:10: if block ends with a return statement, so drop this else and outdent its block
pkg/tsdb/time_range.go:59:9: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary)
pkg/tsdb/time_range.go:67:9: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary)
pkg/tsdb/cloudwatch/metric_find_query.go:225:9: if block ends with a return statement, so drop this else and outdent its block
pkg/util/filepath.go:68:11: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary)
2018-04-27 15:42:49 -05:00
|
|
|
return err.(error)
|
2014-11-28 15:16:49 -06:00
|
|
|
}
|
|
|
|
|
2019-06-04 15:00:05 -05:00
|
|
|
// Publish function publish a message to the bus listener.
|
2015-01-09 09:36:23 -06:00
|
|
|
func (b *InProcBus) Publish(msg Msg) error {
|
|
|
|
var msgName = reflect.TypeOf(msg).Elem().Name()
|
|
|
|
var listeners = b.listeners[msgName]
|
|
|
|
|
|
|
|
var params = make([]reflect.Value, 1)
|
|
|
|
params[0] = reflect.ValueOf(msg)
|
|
|
|
|
2015-02-03 09:57:42 -06:00
|
|
|
for _, listenerHandler := range listeners {
|
2015-01-09 09:36:23 -06:00
|
|
|
ret := reflect.ValueOf(listenerHandler).Call(params)
|
2020-11-17 04:27:45 -06:00
|
|
|
e := ret[0].Interface()
|
|
|
|
if e != nil {
|
|
|
|
err, ok := e.(error)
|
|
|
|
if ok {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
return fmt.Errorf("expected listener to return an error, got '%T'", e)
|
2015-01-09 09:36:23 -06:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
2014-12-16 09:45:07 -06:00
|
|
|
func (b *InProcBus) AddHandler(handler HandlerFunc) {
|
2014-11-28 15:16:49 -06:00
|
|
|
handlerType := reflect.TypeOf(handler)
|
|
|
|
queryTypeName := handlerType.In(0).Elem().Name()
|
2014-12-16 09:45:07 -06:00
|
|
|
b.handlers[queryTypeName] = handler
|
2014-11-28 15:16:49 -06:00
|
|
|
}
|
2014-12-16 05:04:08 -06:00
|
|
|
|
2018-06-07 15:03:27 -05:00
|
|
|
func (b *InProcBus) AddHandlerCtx(handler HandlerFunc) {
|
2016-10-03 02:38:03 -05:00
|
|
|
handlerType := reflect.TypeOf(handler)
|
|
|
|
queryTypeName := handlerType.In(1).Elem().Name()
|
2018-06-08 03:51:27 -05:00
|
|
|
b.handlersWithCtx[queryTypeName] = handler
|
2016-10-03 02:38:03 -05:00
|
|
|
}
|
|
|
|
|
2021-06-24 10:01:29 -05:00
|
|
|
// GetHandlerCtx returns the handler function for the given struct name.
|
|
|
|
func (b *InProcBus) GetHandlerCtx(name string) HandlerFunc {
|
|
|
|
return b.handlersWithCtx[name]
|
|
|
|
}
|
|
|
|
|
2015-01-09 09:36:23 -06:00
|
|
|
func (b *InProcBus) AddEventListener(handler HandlerFunc) {
|
|
|
|
handlerType := reflect.TypeOf(handler)
|
|
|
|
eventName := handlerType.In(0).Elem().Name()
|
2015-02-03 09:57:42 -06:00
|
|
|
_, exists := b.listeners[eventName]
|
2015-01-09 09:36:23 -06:00
|
|
|
if !exists {
|
2015-02-03 09:57:42 -06:00
|
|
|
b.listeners[eventName] = make([]HandlerFunc, 0)
|
2015-01-09 09:36:23 -06:00
|
|
|
}
|
2015-02-03 09:57:42 -06:00
|
|
|
b.listeners[eventName] = append(b.listeners[eventName], handler)
|
2015-01-09 09:36:23 -06:00
|
|
|
}
|
|
|
|
|
2020-06-17 11:43:16 -05:00
|
|
|
// AddHandler attaches a handler function to the global bus.
|
|
|
|
// Package level function.
|
2014-12-16 09:45:07 -06:00
|
|
|
func AddHandler(implName string, handler HandlerFunc) {
|
|
|
|
globalBus.AddHandler(handler)
|
2014-12-16 05:04:08 -06:00
|
|
|
}
|
|
|
|
|
2020-06-17 11:43:16 -05:00
|
|
|
// AddHandlerCtx attaches a handler function to the global bus context.
|
|
|
|
// Package level function.
|
2018-06-07 15:03:27 -05:00
|
|
|
func AddHandlerCtx(implName string, handler HandlerFunc) {
|
|
|
|
globalBus.AddHandlerCtx(handler)
|
2016-10-03 02:38:03 -05:00
|
|
|
}
|
|
|
|
|
2020-06-17 11:43:16 -05:00
|
|
|
// AddEventListener attaches a handler function to the event listener.
|
|
|
|
// Package level function.
|
2015-01-09 09:36:23 -06:00
|
|
|
func AddEventListener(handler HandlerFunc) {
|
|
|
|
globalBus.AddEventListener(handler)
|
|
|
|
}
|
|
|
|
|
2014-12-16 09:45:07 -06:00
|
|
|
func Dispatch(msg Msg) error {
|
|
|
|
return globalBus.Dispatch(msg)
|
2014-12-16 05:04:08 -06:00
|
|
|
}
|
2015-02-03 09:57:42 -06:00
|
|
|
|
2016-10-03 02:38:03 -05:00
|
|
|
func DispatchCtx(ctx context.Context, msg Msg) error {
|
|
|
|
return globalBus.DispatchCtx(ctx, msg)
|
|
|
|
}
|
|
|
|
|
2015-02-03 09:57:42 -06:00
|
|
|
func Publish(msg Msg) error {
|
|
|
|
return globalBus.Publish(msg)
|
2015-02-04 08:37:26 -06:00
|
|
|
}
|
2015-05-02 02:24:56 -05:00
|
|
|
|
2021-06-24 10:01:29 -05:00
|
|
|
func GetHandlerCtx(name string) HandlerFunc {
|
|
|
|
return globalBus.(*InProcBus).GetHandlerCtx(name)
|
|
|
|
}
|
|
|
|
|
2015-05-02 02:24:56 -05:00
|
|
|
func ClearBusHandlers() {
|
|
|
|
globalBus = New()
|
|
|
|
}
|
2018-06-05 14:13:53 -05:00
|
|
|
|
2018-06-07 11:02:28 -05:00
|
|
|
type noopTransactionManager struct{}
|
2018-06-05 14:13:53 -05:00
|
|
|
|
2018-06-07 14:54:36 -05:00
|
|
|
func (*noopTransactionManager) InTransaction(ctx context.Context, fn func(ctx context.Context) error) error {
|
2018-06-14 02:59:52 -05:00
|
|
|
return fn(ctx)
|
2018-06-07 11:02:28 -05:00
|
|
|
}
|