/// <summary> /// Initialize AmplitudeSharp /// Takes an API key for the project and, optionally, /// a stream where offline/past events are stored /// </summary> /// <param name="apiKey">api key for the project to stream data to</param> /// <param name="persistenceStream">optinal, stream with saved event data <seealso cref="Uninitialize(Stream)"/></param> /// <param name="logger">Action delegate for logging purposes, if none is specified <see cref="System.Diagnostics.Debug.WriteLine(object)"/> is used</param> /// <returns></returns> public static AmplitudeService Initialize(string apiKey, Action <LogLevel, string> logger = null, Stream persistenceStream = null) { if (apiKey == "<YOUR_API_KEY>") { throw new ArgumentOutOfRangeException(nameof(apiKey), "Please specify Amplitude API key"); } AmplitudeService instance = new AmplitudeService(apiKey); instance.NewSession(); if (Interlocked.CompareExchange(ref s_instance, instance, null) == null) { if (logger == null) { logger = (level, message) => { System.Diagnostics.Debug.WriteLine($"Analytics: [{level}] {message}"); }; } s_logger = logger; instance.StartSendThread(); if (persistenceStream != null) { instance.LoadPastEvents(persistenceStream); } } return(Instance); }
internal DeviceHelper() { try { // TODO(revive): Revive this once .NET Core 3.0 is released // var mc = new ManagementClass("Win32_ComputerSystem"); // foreach (ManagementObject mo in mc.GetInstances()) // { // Manufacturer = mo["Manufacturer"].ToString(); // Model = mo["Model"].ToString(); // break; // } } catch (Exception ex) { AmplitudeService.s_logger(LogLevel.Warning, $"Failed to get device make/model: {ex.ToString()}"); } try { // TODO(revive): Revive this once .NET Core 3.0 is released // var mc = new ManagementClass("Win32_OperatingSystem"); // foreach (ManagementObject mo in mc.GetInstances()) // { // OSVersion = mo["Version"].ToString(); // break; // } } catch (Exception ex) { OSVersion = Environment.OSVersion.Version.ToString(); AmplitudeService.s_logger(LogLevel.Warning, $"Failed to get OS Version from WMI, using Environment which may not be accurate: {ex.ToString()}"); } string majorMinor = new Version(OSVersion).ToString(2); OSName = WindowsVersions.TryGet(majorMinor, "Windows"); try { var memStatus = new NativeMethods.MEMORYSTATUSEX(); if (NativeMethods.GlobalMemoryStatusEx(memStatus)) { // Round to nearest 0.5GB RamMbs = (ulong)Math.Round((memStatus.ullTotalPhys >> 20) / 512.0) * 512; } } catch (Exception ex) { AmplitudeService.s_logger(LogLevel.Warning, $"Failed to get device RAM size: {ex}"); } Is64BitDevice = Environment.Is64BitOperatingSystem; }
private void LoadPastEvents(Stream persistenceStore) { try { using (var reader = new StreamReader(persistenceStore)) { string persistedData = reader.ReadLine(); var data = JsonConvert.DeserializeObject <List <IAmplitudeEvent> >(persistedData, new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.Objects }); eventQueue.InsertRange(0, data); eventsReady.Release(); } } catch (Exception e) { AmplitudeService.s_logger(LogLevel.Error, $"Failed to load persisted events: {e.ToString()}"); } }
private void SaveEvents(Stream persistenceStore) { if (persistenceStore != null) { try { string persistedData = JsonConvert.SerializeObject(eventQueue, new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.Objects }); using (var writer = new StreamWriter(persistenceStore)) { writer.Write(persistedData); } } catch (Exception e) { AmplitudeService.s_logger(LogLevel.Error, $"Failed to persist events: {e.ToString()}"); } } }
public void Dispose() { Uninitialize(); s_instance = null; }