@@ -131,6 +131,8 @@ func (s *EtcdServer) Range(ctx context.Context, r *pb.RangeRequest) (*pb.RangeRe
131131 )
132132 }
133133 trace .LogIfLong (traceThreshold )
134+ success := err == nil
135+ requestDurationSec .WithLabelValues ("Range" , strconv .FormatBool (success )).Observe (time .Since (start ).Seconds ())
134136 }(time .Now ())
135137
136138 if ! r .Serializable {
@@ -218,6 +220,8 @@ func (s *EtcdServer) Txn(ctx context.Context, r *pb.TxnRequest) (*pb.TxnResponse
218220 defer func (start time.Time ) {
219221 txn .WarnOfExpensiveReadOnlyTxnRequest (s .Logger (), s .Cfg .WarningApplyDuration , start , r , resp , err )
220222 trace .LogIfLong (traceThreshold )
223+ success := err == nil
224+ requestDurationSec .WithLabelValues ("ReadonlyTxn" , strconv .FormatBool (success )).Observe (time .Since (start ).Seconds ())
221225 }(time .Now ())
222226
223227 get := func () {
@@ -837,7 +841,18 @@ func (s *EtcdServer) processInternalRaftRequestOnce(ctx context.Context, r pb.In
837841 }
838842 }
839843
840- data , err := r .Marshal ()
844+ var (
845+ data []byte
846+ err error
847+ start = time .Now ()
848+ reqType = getRequestType (& r )
849+ )
850+ defer func () {
851+ success := err == nil
852+ requestDurationSec .WithLabelValues (reqType , strconv .FormatBool (success )).Observe (time .Since (start ).Seconds ())
853+ }()
854+
855+ data , err = r .Marshal ()
841856 if err != nil {
842857 return nil , err
843858 }
@@ -855,7 +870,6 @@ func (s *EtcdServer) processInternalRaftRequestOnce(ctx context.Context, r pb.In
855870 cctx , cancel := context .WithTimeout (ctx , s .Cfg .ReqTimeout ())
856871 defer cancel ()
857872
858- start := time .Now ()
859873 span := trace .SpanFromContext (ctx )
860874 span .AddEvent ("Send raft proposal" )
861875 err = s .r .Propose (cctx , data )
@@ -880,6 +894,73 @@ func (s *EtcdServer) processInternalRaftRequestOnce(ctx context.Context, r pb.In
880894 }
881895}
882896
897+ func getRequestType (r * pb.InternalRaftRequest ) string {
898+ switch {
899+ case r .Range != nil :
900+ return "Range"
901+ case r .Put != nil :
902+ return "Put"
903+ case r .DeleteRange != nil :
904+ return "DeleteRange"
905+ case r .Txn != nil :
906+ return "Txn"
907+ case r .Compaction != nil :
908+ return "Compaction"
909+ case r .LeaseGrant != nil :
910+ return "LeaseGrant"
911+ case r .LeaseRevoke != nil :
912+ return "LeaseRevoke"
913+ case r .LeaseCheckpoint != nil :
914+ return "LeaseCheckpoint"
915+ case r .Alarm != nil :
916+ return "Alarm"
917+ case r .Authenticate != nil :
918+ return "Authenticate"
919+ case r .AuthEnable != nil :
920+ return "AuthEnable"
921+ case r .AuthDisable != nil :
922+ return "AuthDisable"
923+ case r .AuthStatus != nil :
924+ return "AuthStatus"
925+ case r .AuthUserAdd != nil :
926+ return "AuthUserAdd"
927+ case r .AuthUserDelete != nil :
928+ return "AuthUserDelete"
929+ case r .AuthUserChangePassword != nil :
930+ return "AuthUserChangePassword"
931+ case r .AuthUserGrantRole != nil :
932+ return "AuthUserGrantRole"
933+ case r .AuthUserGet != nil :
934+ return "AuthUserGet"
935+ case r .AuthUserRevokeRole != nil :
936+ return "AuthUserRevokeRole"
937+ case r .AuthRoleAdd != nil :
938+ return "AuthRoleAdd"
939+ case r .AuthRoleGrantPermission != nil :
940+ return "AuthRoleGrantPermission"
941+ case r .AuthRoleGet != nil :
942+ return "AuthRoleGet"
943+ case r .AuthRoleRevokePermission != nil :
944+ return "AuthRoleRevokePermission"
945+ case r .AuthRoleDelete != nil :
946+ return "AuthRoleDelete"
947+ case r .AuthUserList != nil :
948+ return "AuthUserList"
949+ case r .AuthRoleList != nil :
950+ return "AuthRoleList"
951+ case r .ClusterVersionSet != nil :
952+ return "ClusterVersionSet"
953+ case r .ClusterMemberAttrSet != nil :
954+ return "ClusterMemberAttrSet"
955+ case r .DowngradeInfoSet != nil :
956+ return "DowngradeInfoSet"
957+ case r .DowngradeVersionTest != nil :
958+ return "DowngradeVersionTest"
959+ default :
960+ return "Unknown"
961+ }
962+ }
963+
883964// Watchable returns a watchable interface attached to the etcdserver.
884965func (s * EtcdServer ) Watchable () mvcc.WatchableKV { return s .KV () }
885966
0 commit comments