@@ -2,8 +2,8 @@ package interceptor
22
33import (
44 "context"
5- "fmt"
65 "strings"
6+ "time"
77
88 "go.temporal.io/server/common/api"
99 "go.temporal.io/server/common/log"
@@ -47,17 +47,19 @@ func (i *TranslationInterceptor) Intercept(
4747
4848 for _ , tr := range i .translators {
4949 if tr .MatchMethod (info .FullMethod ) {
50+ start := time .Now ()
5051 changed , trErr := tr .TranslateRequest (req )
51- logTranslateResult (tr , i .logger , changed , trErr , methodName + "Request" , req )
52+ logTranslateResult (tr , i .logger , changed , trErr , methodName + "Request" , req , time . Since ( start ) )
5253 }
5354 }
5455
5556 resp , err := handler (ctx , req )
5657
5758 for _ , tr := range i .translators {
5859 if tr .MatchMethod (info .FullMethod ) {
60+ start := time .Now ()
5961 changed , trErr := tr .TranslateResponse (resp )
60- logTranslateResult (tr , i .logger , changed , trErr , methodName + "Response" , resp )
62+ logTranslateResult (tr , i .logger , changed , trErr , methodName + "Response" , resp , time . Since ( start ) )
6163 }
6264 }
6365
@@ -84,16 +86,18 @@ type streamTranslator struct {
8486
8587func (w * streamTranslator ) RecvMsg (m any ) error {
8688 for _ , tr := range w .translators {
89+ start := time .Now ()
8790 changed , trErr := tr .TranslateRequest (m )
88- logTranslateResult (tr , w .logger , changed , trErr , "RecvMsg" , m )
91+ logTranslateResult (tr , w .logger , changed , trErr , "RecvMsg" , m , time . Since ( start ) )
8992 }
9093 return w .ServerStream .RecvMsg (m )
9194}
9295
9396func (w * streamTranslator ) SendMsg (m any ) error {
9497 for _ , tr := range w .translators {
98+ start := time .Now ()
9599 changed , trErr := tr .TranslateResponse (m )
96- logTranslateResult (tr , w .logger , changed , trErr , "SendMsg" , m )
100+ logTranslateResult (tr , w .logger , changed , trErr , "SendMsg" , m , time . Since ( start ) )
97101 }
98102 return w .ServerStream .SendMsg (m )
99103}
@@ -110,14 +114,17 @@ func newStreamTranslator(
110114 }
111115}
112116
113- func logTranslateResult (tr Translator , logger log.Logger , changed bool , err error , methodName string , obj any ) {
117+ func logTranslateResult (tr Translator , logger log.Logger , changed bool , err error , methodName string , obj any , duration time.Duration ) {
118+ msgType := metrics .SanitizedTypeName (obj )
119+ metrics .TranslationLatency .WithLabelValues (tr .Kind (), msgType ).Observe (duration .Seconds ())
120+
114121 methodTag := tag .NewStringTag ("method" , methodName )
115122 if err != nil {
116- logger .Error ("translation error" , methodTag , tag .Error (err ), tag .NewStringTag ("type" , fmt . Sprintf ( "%T" , obj ) ))
117- metrics .TranslationErrors .WithLabelValues (tr .Kind (), methodName ).Inc ()
123+ logger .Error ("translation error" , methodTag , tag .Error (err ), tag .NewStringTag ("type" , msgType ))
124+ metrics .TranslationErrors .WithLabelValues (tr .Kind (), msgType ).Inc ()
118125 } else if changed {
119126 logger .Debug ("translation applied" , methodTag , tag .NewAnyTag ("obj" , obj ))
120- metrics .TranslationCount .WithLabelValues (tr .Kind (), methodName ).Inc ()
127+ metrics .TranslationCount .WithLabelValues (tr .Kind (), msgType ).Inc ()
121128 } else {
122129 logger .Debug ("translation not applied" , methodTag , tag .NewAnyTag ("obj" , obj ))
123130 }
0 commit comments