< Summary

Class:BIWAnalytics
Assembly:BIWAnalytics
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/BuilderInWorld/Scripts/Analytics/BIWAnalytics.cs
Covered lines:43
Uncovered lines:111
Coverable lines:154
Total lines:308
Line coverage:27.9% (43 of 154)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
PlayerOpenPanel(...)0%110100%
PlayerClosesPanel(...)0%110100%
PlayerJumpOrEdit(...)0%2100%
PlayerUnpublishScene(...)0%110100%
CreatedNewProject(...)0%2100%
ProjectDeleted(...)0%2100%
ProjectDuplicated(...)0%2100%
StartEditorFlow(...)0%110100%
EnterEditor(...)0%110100%
ExitEditor(...)0%110100%
StartScenePublish(...)0%2100%
EndScenePublish(...)0%2100%
SceneLimitsExceeded(...)0%2100%
NewObjectPlaced(...)0%2100%
NewObjectPlacedChunk(...)0%30500%
QuickAccessAssigned(...)0%2100%
FavoriteAdded(...)0%110100%
CatalogItemSearched(...)0%2100%
ConvertSceneMetricsModelToDictionary(...)0%2100%
GetLimitsPassedArray(...)0%56700%
AddSceneInfo(...)0%2100%
SendEditorEvent(...)0%110100%
SendEvent(...)0%110100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/BuilderInWorld/Scripts/Analytics/BIWAnalytics.cs

#LineLine coverage
 1using System;
 2using System.Collections;
 3using System.Collections.Generic;
 4using DCL;
 5using Newtonsoft.Json;
 6using UnityEngine;
 7
 8/// <summary>
 9/// This class include all the analytics that we are tracking for builder-in-world, if you want to add a new one
 10/// Please do it inside this class and call the SendEditorEvent method to include all the default info
 11/// </summary>
 12public static class BIWAnalytics
 13{
 14    #region BuilderPanel
 15
 16    public static void PlayerOpenPanel(int landsOwned, int landsOperator)
 17    {
 418        Dictionary<string, string> events = new Dictionary<string, string>();
 419        events.Add("Lands Owned", landsOwned.ToString());
 420        events.Add("Lands Operator", landsOperator.ToString());
 421        SendEvent("player_open_panel", events);
 422    }
 23
 24    public static void PlayerClosesPanel(int landsOwned, int landsOperator)
 25    {
 126        Dictionary<string, string> events = new Dictionary<string, string>();
 127        events.Add("Lands Owned", landsOwned.ToString());
 128        events.Add("Lands Operator", landsOperator.ToString());
 129        SendEvent("player_closes_panel", events);
 130    }
 31
 32    /// <summary>
 33    /// When the user interact with the panel to go to a land or a scene
 34    /// </summary>
 35    /// <param name="source">From where it is comming: scenes, lands, projects</param>
 36    /// <param name="mode">The button he has been pressed: Editor, Jump in</param>
 37    /// <param name="coords">Coords of the land where the scene is deployed or land coords</param>
 38    /// <param name="ownership">It is owner or operator</param>
 39    public static void PlayerJumpOrEdit(string source, string mode, Vector2 coords, string ownership)
 40    {
 041        Dictionary<string, string> events = new Dictionary<string, string>();
 042        events.Add("source", source);
 043        events.Add("mode", mode);
 044        events.Add("coords", coords.ToString());
 045        events.Add("ownership", ownership);
 046        SendEvent("player_jump_or_edit", events);
 047    }
 48
 49    /// <summary>
 50    /// When the user unpublished a scene
 51    /// </summary>
 52    /// <param name="type">What type of scene is unpublished: Builder, Builder-in-world, SDK</param>
 53    /// <param name="coords">Coords of the land where the scene is deployed </param>
 54    public static void PlayerUnpublishScene(string type, Vector2Int coords)
 55    {
 256        Dictionary<string, string> events = new Dictionary<string, string>();
 257        events.Add("type", type);
 258        events.Add("coords", coords.ToString());
 259        SendEvent("player_unpublish_scene", events);
 260    }
 61
 62    /// <summary>
 63    /// When the user has created a new project
 64    /// </summary>
 65    /// <param name="name"></param>
 66    /// <param name="description"></param>
 67    /// <param name="size"></param>
 68    public static void CreatedNewProject(string name, string description, Vector2Int size)
 69    {
 070        Dictionary<string, string> events = new Dictionary<string, string>();
 071        events.Add("name", name);
 072        events.Add("description", description);
 073        events.Add("size", size.ToString());
 074        SendEvent("created_new_project", events);
 075    }
 76
 77    /// <summary>
 78    /// When a project is deleted
 79    /// </summary>
 80    /// <param name="id"></param>
 81    /// <param name="size"></param>
 82    public static void ProjectDeleted(string id, Vector2Int size)
 83    {
 084        Dictionary<string, string> events = new Dictionary<string, string>();
 085        events.Add("id", id);
 086        events.Add("size", size.ToString());
 087        SendEvent("deleted_project", events);
 088    }
 89
 90    /// <summary>
 91    /// When a project has been duplicated
 92    /// </summary>
 93    /// <param name="id"></param>
 94    /// <param name="size"></param>
 95    public static void ProjectDuplicated(string id, Vector2Int size)
 96    {
 097        Dictionary<string, string> events = new Dictionary<string, string>();
 098        events.Add("id", id);
 099        events.Add("size", size.ToString());
 0100        SendEvent("duplicate_project", events);
 0101    }
 102
 103    #endregion
 104
 105    #region BuilderEditor
 106
 107    /// <summary>
 108    /// Everytime we start the flow of the editor
 109    /// </summary>
 110    /// <param name="source">It comes from the shortcut or from BuilderPanel</param>
 111    public static void StartEditorFlow(string source)
 112    {
 1113        Dictionary<string, string> events = new Dictionary<string, string>();
 1114        events.Add("source", source);
 1115        SendEditorEvent("start_editor_flow", events);
 1116    }
 117
 118    public static void EnterEditor(float loadingTime)
 119    {
 1120        Dictionary<string, string> events = new Dictionary<string, string>();
 1121        events.Add("loading_time", loadingTime.ToString());
 1122        SendEditorEvent("enter_editor", events);
 1123    }
 124
 125    public static void ExitEditor(float timeInvestedInTheEditor)
 126    {
 1127        Dictionary<string, string> events = new Dictionary<string, string>();
 1128        events.Add("time_in_the_editor", timeInvestedInTheEditor.ToString());
 1129        SendEditorEvent("exit_editor", events);
 1130    }
 131
 132    public static void StartScenePublish(SceneMetricsModel sceneLimits)
 133    {
 0134        Dictionary<string, string> events = new Dictionary<string, string>();
 0135        events.Add("scene_limits", JsonConvert.SerializeObject(ConvertSceneMetricsModelToDictionary(sceneLimits)));
 0136        SendEditorEvent("start_publish_of_the_scene", events);
 0137    }
 138
 139    public static void EndScenePublish(SceneMetricsModel sceneLimits, string successOrError, float publicationTime)
 140    {
 0141        Dictionary<string, string> events = new Dictionary<string, string>();
 0142        events.Add("success", successOrError);
 0143        events.Add("publication_time", publicationTime.ToString());
 0144        events.Add("scene_limits", JsonConvert.SerializeObject(ConvertSceneMetricsModelToDictionary(sceneLimits)));
 0145        SendEditorEvent("end_scene_publish", events);
 0146    }
 147
 148    public static void SceneLimitsExceeded(SceneMetricsModel sceneUsage, SceneMetricsModel sceneLimits)
 149    {
 0150        Dictionary<string, string> events = new Dictionary<string, string>();
 0151        events.Add("limits_passed", GetLimitsPassedArray(sceneUsage, sceneLimits));
 0152        events.Add("scene_limits", JsonConvert.SerializeObject(ConvertSceneMetricsModelToDictionary(sceneLimits)));
 0153        events.Add("current_usage", JsonConvert.SerializeObject(ConvertSceneMetricsModelToDictionary(sceneUsage)));
 0154        SendEditorEvent("scene_limits_exceeded", events);
 0155    }
 156
 157    /// <summary>
 158    /// When a new item is placed from the catalog
 159    /// </summary>
 160    /// <param name="catalogItem">The item that has been added</param>
 161    /// <param name="source">It has been added from Categories, Asset pack, Favorites or Quick Access</param>
 162    public static void NewObjectPlaced(CatalogItem catalogItem, string source)
 163    {
 0164        Dictionary<string, string> events = new Dictionary<string, string>();
 0165        events.Add("name", catalogItem.name);
 0166        events.Add("assetPack", catalogItem.assetPackName);
 0167        events.Add("category", catalogItem.category);
 0168        events.Add("category_name", catalogItem.categoryName);
 0169        events.Add("source", source);
 0170        events.Add("type", catalogItem.itemType.ToString());
 0171        SendEditorEvent("new_object_placed", events);
 0172    }
 173
 174    /// <summary>
 175    /// This will send all the items placed in a period of time in a single message
 176    /// </summary>
 177    /// <param name="catalogItem">The item that has been added</param>
 178    /// <param name="source">It has been added from Categories, Asset pack, Favorites or Quick Access</param>
 179    public static void NewObjectPlacedChunk(List<KeyValuePair<CatalogItem, string>> itemsToSendAnalytics)
 180    {
 0181        Dictionary<string, string> events = new Dictionary<string, string>();
 0182        List<string> items = new List<string>();
 0183        foreach (var catalogItem in itemsToSendAnalytics)
 184        {
 0185            if (events.ContainsKey(catalogItem.Key.name))
 186                continue;
 187
 0188            Dictionary<string, string> item = new Dictionary<string, string>();
 0189            int amountOfItems = 0;
 0190            foreach (var itemsToCompare in itemsToSendAnalytics)
 191            {
 0192                if (catalogItem.Key == itemsToCompare.Key)
 0193                    amountOfItems++;
 194            }
 195
 0196            item.Add("name", catalogItem.Key.name);
 0197            item.Add("amount", amountOfItems.ToString());
 0198            item.Add("assetPack", catalogItem.Key.assetPackName);
 0199            item.Add("category", catalogItem.Key.category);
 0200            item.Add("category_name", catalogItem.Key.categoryName);
 0201            item.Add("source", catalogItem.Value);
 0202            item.Add("type", catalogItem.Key.ToString());
 203
 0204            items.Add( JsonConvert.SerializeObject(item));
 205        }
 206
 0207        events.Add("items", JsonConvert.SerializeObject(items));
 0208        SendEditorEvent("new_object_placed", events);
 0209    }
 210
 211    public static void QuickAccessAssigned(CatalogItem catalogItem, string source)
 212    {
 0213        Dictionary<string, string> events = new Dictionary<string, string>();
 0214        events.Add("name", catalogItem.name);
 0215        events.Add("assetPack", catalogItem.assetPackName);
 0216        events.Add("category", catalogItem.category);
 0217        events.Add("category Name", catalogItem.categoryName);
 0218        events.Add("source", source);
 0219        events.Add("type", catalogItem.itemType.ToString());
 0220        SendEditorEvent("quick_access_assigned", events);
 0221    }
 222
 223    public static void FavoriteAdded(CatalogItem catalogItem)
 224    {
 1225        Dictionary<string, string> events = new Dictionary<string, string>();
 1226        events.Add("name", catalogItem.name);
 1227        events.Add("assetPack", catalogItem.assetPackName);
 1228        events.Add("category", catalogItem.category);
 1229        events.Add("category Name", catalogItem.categoryName);
 1230        events.Add("type", catalogItem.itemType.ToString());
 1231        SendEditorEvent("favorite_added", events);
 1232    }
 233
 234    public static void CatalogItemSearched(string searchQuery, int resultAmount)
 235    {
 0236        Dictionary<string, string> events = new Dictionary<string, string>();
 0237        events.Add("search_query", searchQuery);
 0238        events.Add("result_amount", resultAmount.ToString());
 0239        SendEditorEvent("catalog_item_searched", events);
 0240    }
 241
 242    private static Dictionary<string, string> ConvertSceneMetricsModelToDictionary(SceneMetricsModel sceneLimits)
 243    {
 0244        Dictionary<string, string> sceneLimitsDictionary = new Dictionary<string, string>();
 0245        sceneLimitsDictionary.Add("meshes", sceneLimits.meshes.ToString());
 0246        sceneLimitsDictionary.Add("bodies", sceneLimits.bodies.ToString());
 0247        sceneLimitsDictionary.Add("materials", sceneLimits.materials.ToString());
 0248        sceneLimitsDictionary.Add("textures", sceneLimits.textures.ToString());
 0249        sceneLimitsDictionary.Add("triangles", sceneLimits.triangles.ToString());
 0250        sceneLimitsDictionary.Add("entities", sceneLimits.entities.ToString());
 0251        sceneLimitsDictionary.Add("scene_height", sceneLimits.sceneHeight.ToString());
 252
 0253        return sceneLimitsDictionary;
 254    }
 255
 256    public static string GetLimitsPassedArray(SceneMetricsModel sceneUsage, SceneMetricsModel sceneLimits)
 257    {
 0258        string limitsPassed = "[";
 259
 0260        if (sceneUsage.bodies >= sceneLimits.bodies)
 0261            limitsPassed += "bodies,";
 0262        if (sceneUsage.entities >= sceneLimits.entities)
 0263            limitsPassed += "entities,";
 0264        if (sceneUsage.textures >= sceneLimits.textures)
 0265            limitsPassed += "textures,";
 0266        if (sceneUsage.triangles >= sceneLimits.triangles)
 0267            limitsPassed += "triangles,";
 0268        if (sceneUsage.materials >= sceneLimits.materials)
 0269            limitsPassed += "materials,";
 0270        if (sceneUsage.meshes >= sceneLimits.meshes)
 0271            limitsPassed += "meshes,";
 272
 0273        limitsPassed = limitsPassed.Substring(0, limitsPassed.Length - 1);
 0274        limitsPassed += "]";
 0275        return limitsPassed;
 276    }
 277
 278    #endregion
 279
 280    #region CommonInfo
 281
 282    private static Vector2Int coords;
 283    private static string ownership;
 284    private static Vector2Int size;
 285
 286    public static void AddSceneInfo(Vector2Int sceneCoords,  string sceneOwnership, Vector2Int sceneSize)
 287    {
 0288        coords = sceneCoords;
 0289        ownership = sceneOwnership;
 0290        size = sceneSize;
 0291    }
 292
 293    #endregion
 294
 295    private static void SendEditorEvent(string eventName, Dictionary<string, string> events)
 296    {
 4297        events.Add("ownership", ownership);
 4298        events.Add("coords", coords.ToString());
 4299        events.Add("scene_size", size.ToString());
 4300        SendEvent(eventName, events);
 4301    }
 302
 303    private static void SendEvent(string eventName, Dictionary<string, string> events)
 304    {
 11305        IAnalytics analytics = DCL.Environment.i.platform.serviceProviders.analytics;
 11306        analytics.SendAnalytic(eventName, events);
 11307    }
 308}