1717package io .grpc .internal ;
1818
1919import static com .google .common .truth .Truth .assertThat ;
20+ import static com .google .common .truth .Truth .assertWithMessage ;
2021import static java .util .concurrent .TimeUnit .MILLISECONDS ;
2122import static org .junit .Assert .assertEquals ;
2223import static org .junit .Assert .assertFalse ;
4041import static org .mockito .Mockito .verifyZeroInteractions ;
4142import static org .mockito .Mockito .when ;
4243
44+ import com .google .common .collect .ImmutableList ;
4345import io .grpc .Attributes ;
4446import io .grpc .CallOptions ;
4547import io .grpc .Channel ;
6163import io .grpc .internal .testing .StatsTestUtils .FakeTagger ;
6264import io .grpc .internal .testing .StatsTestUtils .MockableSpan ;
6365import io .grpc .testing .GrpcServerRule ;
66+ import io .opencensus .common .Function ;
67+ import io .opencensus .common .Functions ;
6468import io .opencensus .contrib .grpc .metrics .RpcMeasureConstants ;
69+ import io .opencensus .contrib .grpc .metrics .RpcViewConstants ;
70+ import io .opencensus .impl .stats .StatsComponentImpl ;
71+ import io .opencensus .stats .AggregationData ;
72+ import io .opencensus .stats .AggregationData .CountData ;
73+ import io .opencensus .stats .AggregationData .LastValueDataDouble ;
74+ import io .opencensus .stats .AggregationData .LastValueDataLong ;
75+ import io .opencensus .stats .AggregationData .SumDataDouble ;
6576import io .opencensus .stats .Measure ;
77+ import io .opencensus .stats .StatsComponent ;
78+ import io .opencensus .stats .View ;
6679import io .opencensus .tags .TagContext ;
6780import io .opencensus .tags .TagValue ;
6881import io .opencensus .trace .BlankSpan ;
@@ -288,8 +301,8 @@ public <ReqT, RespT> ClientCall<ReqT, RespT> interceptCall(
288301
289302 StatsTestUtils .MetricsRecord record = statsRecorder .pollRecord ();
290303 assertNotNull (record );
291- TagValue methodTagOld = record .tags .get (DeprecatedCensusConstants . RPC_METHOD );
292- assertEquals (method .getFullMethodName (), methodTagOld .asString ());
304+ TagValue methodTag = record .tags .get (RpcMeasureConstants . GRPC_CLIENT_METHOD );
305+ assertEquals (method .getFullMethodName (), methodTag .asString ());
293306 if (nonDefaultContext ) {
294307 TagValue extraTag = record .tags .get (StatsTestUtils .EXTRA_TAG );
295308 assertEquals ("extra value" , extraTag .asString ());
@@ -322,10 +335,10 @@ public <ReqT, RespT> ClientCall<ReqT, RespT> interceptCall(
322335 // The intercepting listener calls callEnded() on ClientCallTracer, which records to Census.
323336 record = statsRecorder .pollRecord ();
324337 assertNotNull (record );
325- methodTagOld = record .tags .get (DeprecatedCensusConstants . RPC_METHOD );
326- assertEquals (method .getFullMethodName (), methodTagOld .asString ());
327- TagValue statusTagOld = record .tags .get (DeprecatedCensusConstants . RPC_STATUS );
328- assertEquals (Status .Code .PERMISSION_DENIED .toString (), statusTagOld .asString ());
338+ methodTag = record .tags .get (RpcMeasureConstants . GRPC_CLIENT_METHOD );
339+ assertEquals (method .getFullMethodName (), methodTag .asString ());
340+ TagValue statusTag = record .tags .get (RpcMeasureConstants . GRPC_CLIENT_STATUS );
341+ assertEquals (Status .Code .PERMISSION_DENIED .toString (), statusTag .asString ());
329342 if (nonDefaultContext ) {
330343 TagValue extraTag = record .tags .get (StatsTestUtils .EXTRA_TAG );
331344 assertEquals ("extra value" , extraTag .asString ());
@@ -384,8 +397,8 @@ private void subtestClientBasicStatsDefaultContext(
384397 assertNotNull (record );
385398 assertNoServerContent (record );
386399 assertEquals (1 , record .tags .size ());
387- TagValue methodTagOld = record .tags .get (DeprecatedCensusConstants . RPC_METHOD );
388- assertEquals (method .getFullMethodName (), methodTagOld .asString ());
400+ TagValue methodTag = record .tags .get (RpcMeasureConstants . GRPC_CLIENT_METHOD );
401+ assertEquals (method .getFullMethodName (), methodTag .asString ());
389402 assertEquals (
390403 1 , record .getMetricAsLongOrFail (DeprecatedCensusConstants .RPC_CLIENT_STARTED_COUNT ));
391404 } else {
@@ -446,10 +459,10 @@ private void subtestClientBasicStatsDefaultContext(
446459 StatsTestUtils .MetricsRecord record = statsRecorder .pollRecord ();
447460 assertNotNull (record );
448461 assertNoServerContent (record );
449- TagValue methodTagOld = record .tags .get (DeprecatedCensusConstants . RPC_METHOD );
450- assertEquals (method .getFullMethodName (), methodTagOld .asString ());
451- TagValue statusTagOld = record .tags .get (DeprecatedCensusConstants . RPC_STATUS );
452- assertEquals (Status .Code .OK .toString (), statusTagOld .asString ());
462+ TagValue methodTag = record .tags .get (RpcMeasureConstants . GRPC_CLIENT_METHOD );
463+ assertEquals (method .getFullMethodName (), methodTag .asString ());
464+ TagValue statusTag = record .tags .get (RpcMeasureConstants . GRPC_CLIENT_STATUS );
465+ assertEquals (Status .Code .OK .toString (), statusTag .asString ());
453466 assertEquals (
454467 1 , record .getMetricAsLongOrFail (DeprecatedCensusConstants .RPC_CLIENT_FINISHED_COUNT ));
455468 assertNull (record .getMetric (DeprecatedCensusConstants .RPC_CLIENT_ERROR_COUNT ));
@@ -488,11 +501,16 @@ private void assertRealTimeMetric(
488501 assertNotNull (record );
489502 if (clientSide ) {
490503 assertNoServerContent (record );
504+
505+ TagValue methodTag = record .tags .get (RpcMeasureConstants .GRPC_CLIENT_METHOD );
506+ assertEquals (method .getFullMethodName (), methodTag .asString ());
491507 } else {
492508 assertNoClientContent (record );
509+
510+ TagValue methodTag = record .tags .get (RpcMeasureConstants .GRPC_SERVER_METHOD );
511+ assertEquals (method .getFullMethodName (), methodTag .asString ());
493512 }
494- TagValue methodTagOld = record .tags .get (DeprecatedCensusConstants .RPC_METHOD );
495- assertEquals (method .getFullMethodName (), methodTagOld .asString ());
513+
496514 assertEquals (expectedValue , record .getMetricAsLongOrFail (measure ));
497515 }
498516
@@ -564,8 +582,8 @@ public void clientStreamNeverCreatedStillRecordStats() {
564582 assertNotNull (record );
565583 assertNoServerContent (record );
566584 assertEquals (1 , record .tags .size ());
567- TagValue methodTagOld = record .tags .get (DeprecatedCensusConstants . RPC_METHOD );
568- assertEquals (method .getFullMethodName (), methodTagOld .asString ());
585+ TagValue methodTag = record .tags .get (RpcMeasureConstants . GRPC_CLIENT_METHOD );
586+ assertEquals (method .getFullMethodName (), methodTag .asString ());
569587 assertEquals (
570588 1 ,
571589 record .getMetricAsLongOrFail (DeprecatedCensusConstants .RPC_CLIENT_STARTED_COUNT ));
@@ -574,10 +592,10 @@ public void clientStreamNeverCreatedStillRecordStats() {
574592 record = statsRecorder .pollRecord ();
575593 assertNotNull (record );
576594 assertNoServerContent (record );
577- methodTagOld = record .tags .get (DeprecatedCensusConstants . RPC_METHOD );
578- assertEquals (method .getFullMethodName (), methodTagOld .asString ());
579- TagValue statusTagOld = record .tags .get (DeprecatedCensusConstants . RPC_STATUS );
580- assertEquals (Status .Code .DEADLINE_EXCEEDED .toString (), statusTagOld .asString ());
595+ methodTag = record .tags .get (RpcMeasureConstants . GRPC_CLIENT_METHOD );
596+ assertEquals (method .getFullMethodName (), methodTag .asString ());
597+ TagValue statusTag = record .tags .get (RpcMeasureConstants . GRPC_CLIENT_STATUS );
598+ assertEquals (Status .Code .DEADLINE_EXCEEDED .toString (), statusTag .asString ());
581599 assertEquals (
582600 1 ,
583601 record .getMetricAsLongOrFail (DeprecatedCensusConstants .RPC_CLIENT_FINISHED_COUNT ));
@@ -668,8 +686,8 @@ private void subtestStatsHeadersPropagateTags(boolean propagate, boolean recordS
668686 assertNotNull (clientRecord );
669687 assertNoServerContent (clientRecord );
670688 assertEquals (2 , clientRecord .tags .size ());
671- TagValue clientMethodTagOld = clientRecord .tags .get (DeprecatedCensusConstants . RPC_METHOD );
672- assertEquals (method .getFullMethodName (), clientMethodTagOld .asString ());
689+ TagValue clientMethodTag = clientRecord .tags .get (RpcMeasureConstants . GRPC_CLIENT_METHOD );
690+ assertEquals (method .getFullMethodName (), clientMethodTag .asString ());
673691 TagValue clientPropagatedTag = clientRecord .tags .get (StatsTestUtils .EXTRA_TAG );
674692 assertEquals ("extra-tag-value-897" , clientPropagatedTag .asString ());
675693 }
@@ -690,7 +708,7 @@ private void subtestStatsHeadersPropagateTags(boolean propagate, boolean recordS
690708 assertEquals (
691709 tagger .toBuilder (clientCtx )
692710 .putLocal (
693- DeprecatedCensusConstants . RPC_METHOD ,
711+ RpcMeasureConstants . GRPC_SERVER_METHOD ,
694712 TagValue .create (method .getFullMethodName ()))
695713 .build (),
696714 io .opencensus .tags .unsafe .ContextUtils .getValue (serverContext ));
@@ -704,19 +722,19 @@ private void subtestStatsHeadersPropagateTags(boolean propagate, boolean recordS
704722 assertNotNull (serverRecord );
705723 assertNoClientContent (serverRecord );
706724 assertEquals (2 , serverRecord .tags .size ());
707- TagValue serverMethodTagOld = serverRecord .tags .get (DeprecatedCensusConstants . RPC_METHOD );
708- assertEquals (method .getFullMethodName (), serverMethodTagOld .asString ());
725+ TagValue serverMethodTag = serverRecord .tags .get (RpcMeasureConstants . GRPC_SERVER_METHOD );
726+ assertEquals (method .getFullMethodName (), serverMethodTag .asString ());
709727 TagValue serverPropagatedTag = serverRecord .tags .get (StatsTestUtils .EXTRA_TAG );
710728 assertEquals ("extra-tag-value-897" , serverPropagatedTag .asString ());
711729
712730 // Server completion record
713731 serverRecord = statsRecorder .pollRecord ();
714732 assertNotNull (serverRecord );
715733 assertNoClientContent (serverRecord );
716- serverMethodTagOld = serverRecord .tags .get (DeprecatedCensusConstants . RPC_METHOD );
717- assertEquals (method .getFullMethodName (), serverMethodTagOld .asString ());
718- TagValue serverStatusTagOld = serverRecord .tags .get (DeprecatedCensusConstants . RPC_STATUS );
719- assertEquals (Status .Code .OK .toString (), serverStatusTagOld .asString ());
734+ serverMethodTag = serverRecord .tags .get (RpcMeasureConstants . GRPC_SERVER_METHOD );
735+ assertEquals (method .getFullMethodName (), serverMethodTag .asString ());
736+ TagValue serverStatusTag = serverRecord .tags .get (RpcMeasureConstants . GRPC_SERVER_STATUS );
737+ assertEquals (Status .Code .OK .toString (), serverStatusTag .asString ());
720738 assertNull (serverRecord .getMetric (DeprecatedCensusConstants .RPC_SERVER_ERROR_COUNT ));
721739 serverPropagatedTag = serverRecord .tags .get (StatsTestUtils .EXTRA_TAG );
722740 assertEquals ("extra-tag-value-897" , serverPropagatedTag .asString ());
@@ -731,10 +749,10 @@ private void subtestStatsHeadersPropagateTags(boolean propagate, boolean recordS
731749 StatsTestUtils .MetricsRecord clientRecord = statsRecorder .pollRecord ();
732750 assertNotNull (clientRecord );
733751 assertNoServerContent (clientRecord );
734- TagValue clientMethodTagOld = clientRecord .tags .get (DeprecatedCensusConstants . RPC_METHOD );
735- assertEquals (method .getFullMethodName (), clientMethodTagOld .asString ());
736- TagValue clientStatusTagOld = clientRecord .tags .get (DeprecatedCensusConstants . RPC_STATUS );
737- assertEquals (Status .Code .OK .toString (), clientStatusTagOld .asString ());
752+ TagValue clientMethodTag = clientRecord .tags .get (RpcMeasureConstants . GRPC_CLIENT_METHOD );
753+ assertEquals (method .getFullMethodName (), clientMethodTag .asString ());
754+ TagValue clientStatusTag = clientRecord .tags .get (RpcMeasureConstants . GRPC_CLIENT_STATUS );
755+ assertEquals (Status .Code .OK .toString (), clientStatusTag .asString ());
738756 assertNull (clientRecord .getMetric (DeprecatedCensusConstants .RPC_CLIENT_ERROR_COUNT ));
739757 TagValue clientPropagatedTag = clientRecord .tags .get (StatsTestUtils .EXTRA_TAG );
740758 assertEquals ("extra-tag-value-897" , clientPropagatedTag .asString ());
@@ -911,8 +929,8 @@ private void subtestServerBasicStatsNoHeaders(
911929 assertNotNull (record );
912930 assertNoClientContent (record );
913931 assertEquals (1 , record .tags .size ());
914- TagValue methodTagOld = record .tags .get (DeprecatedCensusConstants . RPC_METHOD );
915- assertEquals (method .getFullMethodName (), methodTagOld .asString ());
932+ TagValue methodTag = record .tags .get (RpcMeasureConstants . GRPC_SERVER_METHOD );
933+ assertEquals (method .getFullMethodName (), methodTag .asString ());
916934 assertEquals (
917935 1 ,
918936 record .getMetricAsLongOrFail (DeprecatedCensusConstants .RPC_SERVER_STARTED_COUNT ));
@@ -926,7 +944,7 @@ private void subtestServerBasicStatsNoHeaders(
926944 tagger
927945 .emptyBuilder ()
928946 .putLocal (
929- DeprecatedCensusConstants . RPC_METHOD ,
947+ RpcMeasureConstants . GRPC_SERVER_METHOD ,
930948 TagValue .create (method .getFullMethodName ()))
931949 .build (),
932950 statsCtx );
@@ -980,10 +998,10 @@ private void subtestServerBasicStatsNoHeaders(
980998 StatsTestUtils .MetricsRecord record = statsRecorder .pollRecord ();
981999 assertNotNull (record );
9821000 assertNoClientContent (record );
983- TagValue methodTagOld = record .tags .get (DeprecatedCensusConstants . RPC_METHOD );
984- assertEquals (method .getFullMethodName (), methodTagOld .asString ());
985- TagValue statusTagOld = record .tags .get (DeprecatedCensusConstants . RPC_STATUS );
986- assertEquals (Status .Code .CANCELLED .toString (), statusTagOld .asString ());
1001+ TagValue methodTag = record .tags .get (RpcMeasureConstants . GRPC_SERVER_METHOD );
1002+ assertEquals (method .getFullMethodName (), methodTag .asString ());
1003+ TagValue statusTag = record .tags .get (RpcMeasureConstants . GRPC_SERVER_STATUS );
1004+ assertEquals (Status .Code .CANCELLED .toString (), statusTag .asString ());
9871005 assertEquals (
9881006 1 , record .getMetricAsLongOrFail (DeprecatedCensusConstants .RPC_SERVER_FINISHED_COUNT ));
9891007 assertEquals (
@@ -1148,4 +1166,92 @@ private static void assertNoClientContent(StatsTestUtils.MetricsRecord record) {
11481166 assertNull (record .getMetric (DeprecatedCensusConstants .RPC_CLIENT_UNCOMPRESSED_REQUEST_BYTES ));
11491167 assertNull (record .getMetric (DeprecatedCensusConstants .RPC_CLIENT_UNCOMPRESSED_RESPONSE_BYTES ));
11501168 }
1169+
1170+ @ Deprecated
1171+ @ Test
1172+ public void newTagsPopulateOldViews () throws InterruptedException {
1173+ StatsComponent localStats = new StatsComponentImpl ();
1174+
1175+ // Test views that contain both of the remap tags: method & status.
1176+ localStats .getViewManager ().registerView (RpcViewConstants .RPC_CLIENT_ERROR_COUNT_VIEW );
1177+ localStats .getViewManager ().registerView (RpcViewConstants .GRPC_CLIENT_COMPLETED_RPC_VIEW );
1178+
1179+ CensusStatsModule localCensusStats = new CensusStatsModule (
1180+ tagger , tagCtxSerializer , localStats .getStatsRecorder (), fakeClock .getStopwatchSupplier (),
1181+ false , false , true , false /* real-time */ );
1182+
1183+ CensusStatsModule .ClientCallTracer callTracer =
1184+ localCensusStats .newClientCallTracer (
1185+ tagger .empty (), method .getFullMethodName ());
1186+
1187+ callTracer .newClientStreamTracer (STREAM_INFO , new Metadata ());
1188+ fakeClock .forwardTime (30 , MILLISECONDS );
1189+ callTracer .callEnded (Status .PERMISSION_DENIED .withDescription ("No you don't" ));
1190+
1191+ // Give OpenCensus a chance to update the views asynchronously.
1192+ Thread .sleep (100 );
1193+
1194+ assertWithMessage ("Legacy error count view had unexpected count" )
1195+ .that (
1196+ getAggregationValueAsLong (
1197+ localStats ,
1198+ RpcViewConstants .RPC_CLIENT_ERROR_COUNT_VIEW ,
1199+ ImmutableList .of (
1200+ TagValue .create ("PERMISSION_DENIED" ),
1201+ TagValue .create (method .getFullMethodName ()))))
1202+ .isEqualTo (1 );
1203+
1204+ assertWithMessage ("New error count view had unexpected count" )
1205+ .that (
1206+ getAggregationValueAsLong (
1207+ localStats ,
1208+ RpcViewConstants .GRPC_CLIENT_COMPLETED_RPC_VIEW ,
1209+ ImmutableList .of (
1210+ TagValue .create (method .getFullMethodName ()),
1211+ TagValue .create ("PERMISSION_DENIED" ))))
1212+ .isEqualTo (1 );
1213+ }
1214+
1215+ @ Deprecated
1216+ private long getAggregationValueAsLong (StatsComponent localStats , View view ,
1217+ List <TagValue > dimension ) {
1218+ AggregationData aggregationData = localStats .getViewManager ()
1219+ .getView (view .getName ())
1220+ .getAggregationMap ()
1221+ .get (dimension );
1222+
1223+ return aggregationData .match (
1224+ new Function <SumDataDouble , Long >() {
1225+ @ Override
1226+ public Long apply (SumDataDouble arg ) {
1227+ return (long ) arg .getSum ();
1228+ }
1229+ },
1230+ Functions .<Long >throwAssertionError (),
1231+ new Function <CountData , Long >() {
1232+ @ Override
1233+ public Long apply (CountData arg ) {
1234+ return arg .getCount ();
1235+ }
1236+ },
1237+ Functions .<Long >throwAssertionError (),
1238+ new Function <LastValueDataDouble , Long >() {
1239+ @ Override
1240+ public Long apply (LastValueDataDouble arg ) {
1241+ return (long ) arg .getLastValue ();
1242+ }
1243+ },
1244+ new Function <LastValueDataLong , Long >() {
1245+ @ Override
1246+ public Long apply (LastValueDataLong arg ) {
1247+ return arg .getLastValue ();
1248+ }
1249+ },
1250+ new Function <AggregationData , Long >() {
1251+ @ Override
1252+ public Long apply (AggregationData arg ) {
1253+ return ((io .opencensus .stats .AggregationData .MeanData ) arg ).getCount ();
1254+ }
1255+ });
1256+ }
11511257}
0 commit comments