diff --git a/proto/sharing_enums.proto b/proto/sharing_enums.proto index 41a0543a..feda5593 100644 --- a/proto/sharing_enums.proto +++ b/proto/sharing_enums.proto @@ -32,7 +32,7 @@ option objc_class_prefix = "GNSHP"; // in NearbyClearcutLogger (for android, or clearcut_event_logger as the // equivalence for Windows) for all events (may exclude settings), and // session_id for a pair of events (start and end of a session). -// Next id: 69 +// Next id: 70 enum EventType { UNKNOWN_EVENT_TYPE = 0; @@ -300,6 +300,9 @@ enum EventType { // High quality event setup HIGH_QUALITY_MEDIUM_SETUP = 68; + // RPC call status + RPC_CALL_STATUS = 69; + // LINT.ThenChange(//depot/google3/location/nearby/proto/nearby_event_codes.proto:SharingEventCode) } @@ -310,6 +313,7 @@ enum EventCategory { SENDING_EVENT = 1; RECEIVING_EVENT = 2; SETTINGS_EVENT = 3; + RPC_EVENT = 4; } // Status of nearby sharing. diff --git a/sharing/analytics/BUILD b/sharing/analytics/BUILD index 5ba7db00..467999a1 100644 --- a/sharing/analytics/BUILD +++ b/sharing/analytics/BUILD @@ -34,6 +34,8 @@ cc_library( "//sharing/proto:enums_cc_proto", "//sharing/proto/analytics:sharing_log_cc_proto", "@com_google_absl//absl/random", + "@com_google_absl//absl/strings:string_view", + "@com_google_absl//absl/time", "@com_google_protobuf//:protobuf", "@com_google_protobuf//:protobuf_lite", ], @@ -55,8 +57,8 @@ cc_test( "//sharing/proto/analytics:sharing_log_cc_proto", "@com_github_protobuf_matchers//protobuf-matchers", "@com_google_absl//absl/strings", + "@com_google_absl//absl/time", "@com_google_googletest//:gtest_main", "@com_google_protobuf//:protobuf", - "@com_google_protobuf//:protobuf_lite", ], ) diff --git a/sharing/analytics/analytics_recorder.cc b/sharing/analytics/analytics_recorder.cc index 1a3fcf53..c689354a 100644 --- a/sharing/analytics/analytics_recorder.cc +++ b/sharing/analytics/analytics_recorder.cc @@ -21,6 +21,8 @@ #include "google/protobuf/duration.pb.h" #include "absl/random/random.h" +#include "absl/strings/string_view.h" +#include "absl/time/time.h" #include "proto/sharing_enums.pb.h" #include "sharing/analytics/analytics_device_settings.h" #include "sharing/analytics/analytics_information.h" @@ -826,6 +828,22 @@ void AnalyticsRecorder::NewVerifyAPKStatus( LogEvent(*sharing_log); } +void AnalyticsRecorder::NewRpcCallStatus( + absl::string_view rpc_name, + SharingLog::RpcCallStatus::RpcDirection direction, + int error_code, absl::Duration latency) { + std::unique_ptr sharing_log = + CreateSharingLog(EventCategory::RPC_EVENT, EventType::RPC_CALL_STATUS); + + auto* rpc_call_status = sharing_log->mutable_rpc_call_status(); + rpc_call_status->set_rpc_name(std::string(rpc_name)); + rpc_call_status->set_direction(direction); + rpc_call_status->set_error_code(error_code); + rpc_call_status->set_latency_millis(absl::ToInt64Milliseconds(latency)); + + LogEvent(*sharing_log); +} + // Start private methods. std::unique_ptr AnalyticsRecorder::CreateSharingLog( diff --git a/sharing/analytics/analytics_recorder.h b/sharing/analytics/analytics_recorder.h index 5515d74b..fd9d8947 100644 --- a/sharing/analytics/analytics_recorder.h +++ b/sharing/analytics/analytics_recorder.h @@ -20,6 +20,8 @@ #include #include +#include "absl/strings/string_view.h" +#include "absl/time/time.h" #include "internal/analytics/event_logger.h" #include "proto/sharing_enums.pb.h" #include "sharing/analytics/analytics_device_settings.h" @@ -194,6 +196,12 @@ class AnalyticsRecorder { location::nearby::proto::sharing::VerifyAPKStatus status, location::nearby::proto::sharing::ApkSource source); + void NewRpcCallStatus( + absl::string_view rpc_name, + nearby::sharing::analytics::proto::SharingLog::RpcCallStatus::RpcDirection + direction, + int error_code, absl::Duration latency); + // Generates a random number for session ID or flow ID. int64_t GenerateNextId(); diff --git a/sharing/analytics/analytics_recorder_test.cc b/sharing/analytics/analytics_recorder_test.cc index 6f03818a..91b30505 100644 --- a/sharing/analytics/analytics_recorder_test.cc +++ b/sharing/analytics/analytics_recorder_test.cc @@ -24,6 +24,7 @@ #include "protobuf-matchers/protocol-buffer-matchers.h" #include "gtest/gtest.h" #include "absl/strings/string_view.h" +#include "absl/time/time.h" #include "internal/analytics/mock_event_logger.h" #include "proto/sharing_enums.pb.h" #include "sharing/analytics/analytics_device_settings.h" @@ -887,6 +888,23 @@ TEST_F(AnalyticsRecorderTest, NewVerifyAPKStatus) { ::location::nearby::proto::sharing::ApkSource::APK_FROM_SD_CARD); } +TEST_F(AnalyticsRecorderTest, NewRpcCallStatus) { + EXPECT_CALL(event_logger(), Log(An())) + .WillOnce([](const SharingLog& log) { + EXPECT_EQ(log.event_type(), EventType::RPC_CALL_STATUS); + EXPECT_EQ(log.event_category(), EventCategory::RPC_EVENT); + EXPECT_EQ(log.rpc_call_status().rpc_name(), "service.rpc_name"); + EXPECT_EQ(log.rpc_call_status().direction(), + SharingLog::RpcCallStatus::OUTGOING); + EXPECT_EQ(log.rpc_call_status().error_code(), 123); + EXPECT_EQ(log.rpc_call_status().latency_millis(), 456); + }); + + analytics_recoder().NewRpcCallStatus( + "service.rpc_name", SharingLog::RpcCallStatus::OUTGOING, 123, + absl::Milliseconds(456)); +} + TEST_F(AnalyticsRecorderTest, GenerateID) { int64_t id = analytics_recoder().GenerateNextId(); EXPECT_GT(id, 0); diff --git a/sharing/proto/analytics/nearby_sharing_log.proto b/sharing/proto/analytics/nearby_sharing_log.proto index 7620c941..f9762959 100644 --- a/sharing/proto/analytics/nearby_sharing_log.proto +++ b/sharing/proto/analytics/nearby_sharing_log.proto @@ -31,7 +31,7 @@ option objc_class_prefix = "GNCP"; // Top-level log proto for all NearbySharing logging. // Each log contains a key (event_type), value (a verb-noun event) pair. -// Next Tag: 78 +// Next Tag: 79 // LINT.IfChange message SharingLog { /* collection_basis = { @@ -212,6 +212,8 @@ message SharingLog { optional HighQualityMediumSetup high_quality_medium_setup = 77; + optional RpcCallStatus rpc_call_status = 78; + // Used only for Nearby Share Windows app now. message AppInfo { // e.g. "1.0.408" @@ -904,5 +906,21 @@ message SharingLog { optional int64 duration_millis = 3; optional bool is_timeout = 4; } + + message RpcCallStatus { + enum RpcDirection { + UNKNOWN_RPC_DIRECTION = 0; + INCOMING = 1; + OUTGOING = 2; + } + + optional RpcDirection direction = 1; + // Name of RPC in . format. + optional string rpc_name = 2; + // Canonical error code of RPC. + optional int32 error_code = 3; + // Latency of RPC call in milliseconds. + optional int64 latency_millis = 4; + } } // LINT.ThenChange(//depot/google3/logs/proto/location/nearby/nearby_client_log.proto)