void SaveUsage(UsageStore store) { dirCreate(System.IO.Path.GetDirectoryName(storePath)); var json = SimpleJson.SerializeObject(store); writeAllText(storePath, json, Encoding.UTF8); }
public void LoadingWorks() { InitializeEnvironment(TestBasePath, false, false); var userId = Guid.NewGuid().ToString(); var appVersion = ApplicationInfo.Version; var unityVersion = "2017.3f1"; var instanceId = Guid.NewGuid().ToString(); var usageStore = new UsageStore(); usageStore.Model.Guid = userId; var storePath = Environment.UserCachePath.Combine(Constants.UsageFile); var usageLoader = new UsageLoader(storePath); var settings = Substitute.For <ISettings>(); settings.Exists(Arg.Is <string>(Constants.GuidKey)).Returns(true); settings.Get(Arg.Is <string>(Constants.GuidKey)).Returns(userId); var usageTracker = new UsageTrackerSync(settings, usageLoader, unityVersion, instanceId); usageTracker.IncrementNumberOfStartups(); usageTracker.IncrementNumberOfStartups(); Assert.IsTrue(storePath.FileExists()); var json = storePath.ReadAllText(Encoding.UTF8); var savedStore = json.FromJson <UsageStore>(lowerCase: true); Assert.AreEqual(2, savedStore.GetCurrentMeasures(appVersion, unityVersion, instanceId).NumberOfStartups); }
async Task <UsageStore> LoadUsage() { await Initialize(); var json = fileExists(storePath) ? readAllText(storePath, Encoding.UTF8) : null; UsageStore result = null; try { result = json != null? SimpleJson.DeserializeObject <UsageStore>(json) : new UsageStore { Model = new UsageModel() }; } catch { result = new UsageStore { Model = new UsageModel() }; } result.Model.Lang = CultureInfo.InstalledUICulture.IetfLanguageTag; result.Model.AppVersion = AssemblyVersionInformation.Version; result.Model.VSVersion = vsservices.VSVersion; return(result); }
public void IncrementMetricsWorks(string measureName) { var userId = Guid.NewGuid().ToString(); var appVersion = ApplicationInfo.Version; var unityVersion = "2017.3f1"; var instanceId = Guid.NewGuid().ToString(); var usageLoader = Substitute.For <IUsageLoader>(); var usageStore = new UsageStore(); var settings = Substitute.For <ISettings>(); settings.Exists(Arg.Is <string>(Constants.GuidKey)).Returns(true); settings.Get(Arg.Is <string>(Constants.GuidKey)).Returns(userId); usageStore.Model.Guid = userId; usageLoader.Load(Arg.Is <string>(userId)).Returns(usageStore); var usageTracker = new UsageTrackerSync(settings, usageLoader, unityVersion, instanceId); var currentUsage = usageStore.GetCurrentMeasures(appVersion, unityVersion, instanceId); var prop = currentUsage.GetType().GetProperty(measureName); Assert.AreEqual(0, prop.GetValue(currentUsage, null)); var meth = usageTracker.GetType().GetMethod("Increment" + measureName); meth.Invoke(usageTracker, null); currentUsage = usageStore.GetCurrentMeasures(appVersion, unityVersion, instanceId); Assert.AreEqual(1, prop.GetValue(currentUsage, null)); }
/// <summary> /// You must pass the smallest timeframe the software will watch for. /// Eg.: If set to TEN_MINUTES, then one mouse movement or keypress in that timeframe /// will be considered an active time. /// DataPrecision is not implemented fully, only High precision works /// </summary> /// <param name="appName">If saving is enabled the resulting file will have this as prefix</param> /// <param name="resolution">The smallest timeframe the software will watch for</param> /// <param name="SavePreference">Dictates how usage data will be saved/stored</param> /// <param name="dataPrecision">Sets how fine grained the data will be</param> public Watcher(string appName, Resolution chosenResolution, SavePreference preference, DataPrecision dataPrecision) { ISaveService saveService = new SaveService(appName, preference, dataPrecision); IUsageKeeper keeper = CreateKeeper(ref saveService, dataPrecision, chosenResolution); IStorage store = new UsageStore(keeper); wService = new WatcherService(ref store, ref saveService); }
public void SubmissionWorks() { InitializeEnvironment(TestBasePath, false, false); InitializePlatform(TestBasePath, false, "SubmissionWorks"); var userId = Guid.NewGuid().ToString(); var appVersion = ApplicationInfo.Version; var unityVersion = "2017.3f1"; var instanceId = Guid.NewGuid().ToString(); var usageStore = new UsageStore(); usageStore.Model.Guid = userId; var storePath = Environment.UserCachePath.Combine(Constants.UsageFile); var usageLoader = new UsageLoader(storePath); var settings = Substitute.For <ISettings>(); settings.Exists(Arg.Is <string>(Constants.GuidKey)).Returns(true); settings.Get(Arg.Is <string>(Constants.GuidKey)).Returns(userId); var usageTracker = new UsageTrackerSync(settings, usageLoader, unityVersion, instanceId); usageTracker.IncrementNumberOfStartups(); usageTracker.IncrementNumberOfStartups(); var json = storePath.ReadAllText(Encoding.UTF8); var savedStore = json.FromJson <UsageStore>(lowerCase: true); var current = savedStore.Model.GetCurrentUsage(appVersion, unityVersion, instanceId); var yesterday = DateTimeOffset.UtcNow.AddDays(-1); current.Dimensions.Date = yesterday; savedStore.LastSubmissionDate = yesterday; storePath.WriteAllText(savedStore.ToJson(lowerCase: true)); settings.Get(Arg.Is <string>(Constants.MetricsKey), Arg.Any <bool>()).Returns(true); var metricsService = new MetricsService(ProcessManager, TaskManager, Platform.Keychain, Environment); usageTracker.MetricsService = metricsService; var method = usageTracker.GetType().GetMethod("SendUsage", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); method.Invoke(usageTracker, null); json = storePath.ReadAllText(Encoding.UTF8); savedStore = json.FromJson <UsageStore>(lowerCase: true); }
void SaveUsage(UsageStore store) { dirCreate(System.IO.Path.GetDirectoryName(storePath)); var json = SimpleJson.SerializeObject(store); writeAllText(storePath, json, Encoding.UTF8); }
async Task<UsageStore> LoadUsage() { await Initialize(); var json = fileExists(storePath) ? readAllText(storePath, Encoding.UTF8) : null; UsageStore result = null; try { result = json != null ? SimpleJson.DeserializeObject<UsageStore>(json) : new UsageStore { Model = new UsageModel() }; } catch { result = new UsageStore { Model = new UsageModel() }; } result.Model.Lang = CultureInfo.InstalledUICulture.IetfLanguageTag; result.Model.AppVersion = AssemblyVersionInformation.Version; result.Model.VSVersion = vsservices.VSVersion; return result; }