public static void TrainingBehaviorInitialized(TrainingBehaviorInitializedEvent rawTbiEvent) { #if UNITY_EDITOR && MLA_UNITY_ANALYTICS_MODULE && ENABLE_CLOUD_SERVICES_ANALYTICS if (!IsAnalyticsEnabled()) { return; } if (!EnableAnalytics()) { return; } var tbiEvent = SanitizeTrainingBehaviorInitializedEvent(rawTbiEvent); var behaviorName = tbiEvent.BehaviorName; var added = s_SentTrainingBehaviorInitialized.Add(behaviorName); if (!added) { // We previously added this model. Exit so we don't resend. return; } tbiEvent.TrainingSessionGuid = s_TrainingSessionGuid.ToString(); // Note - to debug, use JsonUtility.ToJson on the event. // Debug.Log( // $"Would send event {k_TrainingBehaviorInitializedEventName} with body {JsonUtility.ToJson(tbiEvent, true)}" // ); if (AnalyticsUtils.s_SendEditorAnalytics) { EditorAnalytics.SendEventWithLimit(k_TrainingBehaviorInitializedEventName, tbiEvent); } #endif }
public static void TrainingBehaviorInitialized(TrainingBehaviorInitializedEvent tbiEvent) { if (!IsAnalyticsEnabled()) { return; } if (!EnableAnalytics()) { return; } var behaviorName = tbiEvent.BehaviorName; var added = s_SentTrainingBehaviorInitialized.Add(behaviorName); if (!added) { // We previously added this model. Exit so we don't resend. return; } // Hash the behavior name so that there's no concern about PII or "secret" data being leaked. tbiEvent.TrainingSessionGuid = s_TrainingSessionGuid.ToString(); tbiEvent.BehaviorName = AnalyticsUtils.Hash(tbiEvent.BehaviorName); // Note - to debug, use JsonUtility.ToJson on the event. // Debug.Log( // $"Would send event {k_TrainingBehaviorInitializedEventName} with body {JsonUtility.ToJson(tbiEvent, true)}" // ); #if UNITY_EDITOR && MLA_UNITY_ANALYTICS_MODULE_ENABLED if (AnalyticsUtils.s_SendEditorAnalytics) { EditorAnalytics.SendEventWithLimit(k_TrainingBehaviorInitializedEventName, tbiEvent); } #else return; #endif }
internal static TrainingBehaviorInitializedEvent SanitizeTrainingBehaviorInitializedEvent(TrainingBehaviorInitializedEvent tbiEvent) { // Hash the behavior name if the message version is from an older version of ml-agents that doesn't do trainer-side hashing. // We'll also, for extra safety, verify that the BehaviorName is the size of the expected SHA256 hash. // Context: The config field was added at the same time as trainer side hashing, so messages including it should already be hashed. if (tbiEvent.Config.Length == 0 || tbiEvent.BehaviorName.Length != 64) { tbiEvent.BehaviorName = AnalyticsUtils.Hash(k_VendorKey, tbiEvent.BehaviorName); } return(tbiEvent); }