@@ -39,6 +39,8 @@ import (
3939	abci "github.com/cometbft/cometbft/abci/types" 
4040	"github.com/grpc-ecosystem/grpc-gateway/runtime" 
4141	"github.com/spf13/cobra" 
42+ 	"go.opentelemetry.io/otel" 
43+ 	"go.opentelemetry.io/otel/trace" 
4244
4345	"cosmossdk.io/core/appmodule" 
4446	"cosmossdk.io/core/genesis" 
@@ -52,6 +54,10 @@ import (
5254	sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" 
5355)
5456
57+ var  (
58+ 	tracer  =  otel .Tracer ("cosmos-sdk/types/module" )
59+ )
60+ 
5561// AppModuleBasic is the standard form for basic non-dependent elements of an application module. 
5662type  AppModuleBasic  interface  {
5763	HasName 
@@ -752,8 +758,14 @@ func (m Manager) RunMigrations(ctx context.Context, cfg Configurator, fromVM Ver
752758// It takes the current context as a parameter and returns a boolean value 
753759// indicating whether the migration was successfully executed or not. 
754760func  (m  * Manager ) PreBlock (ctx  sdk.Context ) (* sdk.ResponsePreBlock , error ) {
761+ 	var  span  trace.Span 
762+ 	ctx , span  =  ctx .StartSpan (tracer , "Manager.PreBlock" )
763+ 	defer  span .End ()
764+ 
755765	paramsChanged  :=  false 
756766	for  _ , moduleName  :=  range  m .OrderPreBlockers  {
767+ 		var  modSpan  trace.Span 
768+ 		ctx , modSpan  =  ctx .StartSpan (tracer , fmt .Sprintf ("PreBlock.%s" , moduleName ))
757769		if  module , ok  :=  m .Modules [moduleName ].(appmodule.HasPreBlocker ); ok  {
758770			rsp , err  :=  module .PreBlock (ctx )
759771			if  err  !=  nil  {
@@ -763,6 +775,7 @@ func (m *Manager) PreBlock(ctx sdk.Context) (*sdk.ResponsePreBlock, error) {
763775				paramsChanged  =  true 
764776			}
765777		}
778+ 		modSpan .End ()
766779	}
767780	return  & sdk.ResponsePreBlock {
768781		ConsensusParamsChanged : paramsChanged ,
@@ -773,13 +786,20 @@ func (m *Manager) PreBlock(ctx sdk.Context) (*sdk.ResponsePreBlock, error) {
773786// child context with an event manager to aggregate events emitted from all 
774787// modules. 
775788func  (m  * Manager ) BeginBlock (ctx  sdk.Context ) (sdk.BeginBlock , error ) {
789+ 	var  span  trace.Span 
790+ 	ctx , span  =  ctx .StartSpan (tracer , "Manager.BeginBlock" )
791+ 	defer  span .End ()
792+ 
776793	ctx  =  ctx .WithEventManager (sdk .NewEventManager ())
777794	for  _ , moduleName  :=  range  m .OrderBeginBlockers  {
795+ 		var  modSpan  trace.Span 
796+ 		ctx , modSpan  =  ctx .StartSpan (tracer , fmt .Sprintf ("BeginBlock.%s" , moduleName ))
778797		if  module , ok  :=  m .Modules [moduleName ].(appmodule.HasBeginBlocker ); ok  {
779798			if  err  :=  module .BeginBlock (ctx ); err  !=  nil  {
780799				return  sdk.BeginBlock {}, err 
781800			}
782801		}
802+ 		modSpan .End ()
783803	}
784804
785805	return  sdk.BeginBlock {
@@ -791,10 +811,16 @@ func (m *Manager) BeginBlock(ctx sdk.Context) (sdk.BeginBlock, error) {
791811// child context with an event manager to aggregate events emitted from all 
792812// modules. 
793813func  (m  * Manager ) EndBlock (ctx  sdk.Context ) (sdk.EndBlock , error ) {
814+ 	var  span  trace.Span 
815+ 	ctx , span  =  ctx .StartSpan (tracer , "Manager.EndBlock" )
816+ 	defer  span .End ()
817+ 
794818	ctx  =  ctx .WithEventManager (sdk .NewEventManager ())
795819	validatorUpdates  :=  []abci.ValidatorUpdate {}
796820
797821	for  _ , moduleName  :=  range  m .OrderEndBlockers  {
822+ 		var  modSpan  trace.Span 
823+ 		ctx , modSpan  =  ctx .StartSpan (tracer , fmt .Sprintf ("EndBlock.%s" , moduleName ))
798824		if  module , ok  :=  m .Modules [moduleName ].(appmodule.HasEndBlocker ); ok  {
799825			err  :=  module .EndBlock (ctx )
800826			if  err  !=  nil  {
@@ -819,6 +845,7 @@ func (m *Manager) EndBlock(ctx sdk.Context) (sdk.EndBlock, error) {
819845		} else  {
820846			continue 
821847		}
848+ 		modSpan .End ()
822849	}
823850
824851	return  sdk.EndBlock {
0 commit comments