Example #1
0
        /// <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);
        }
Example #2
0
        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;
        }
Example #3
0
        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()}");
            }
        }
Example #4
0
 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()}");
         }
     }
 }
Example #5
0
 public void Dispose()
 {
     Uninitialize();
     s_instance = null;
 }