| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 | using Newtonsoft.Json;using System;using System.Net.Http;using System.Net.Http.Headers;using System.Text;using System.Threading.Tasks;namespace Optimizer{    internal static class TelemetryHelper    {        const string GEO_LOOKUP_URL = "http://ip-api.com/json/";        static TelemetryData telemetryEntry = new TelemetryData();        internal static HttpClient TelemetryClient;        internal const string TELEMETRY_API_URL = "https://optimizer-telemetry-handler.azurewebsites.net/telemetry.php";        internal const string TELEMETRY_KEY = @"{OPTIMIZER-0EFC7B8A-D1FC-467F-B4B1-0117C643FE19-TELEMETRY}";        internal static async void EnableTelemetryService()        {            TelemetryClient = new HttpClient();            TelemetryClient.BaseAddress = new Uri(TELEMETRY_API_URL);            TelemetryClient.DefaultRequestHeaders.Add("Optimizertelemetrykey", TELEMETRY_KEY);            TelemetryClient.DefaultRequestHeaders              .Accept              .Add(new MediaTypeWithQualityHeaderValue("application/json"));            await CacheTelemetryData();        }        internal static async Task<string> GetSessionCountry()        {            try            {                string result = await TelemetryClient.GetStringAsync(GEO_LOOKUP_URL);                GeoLookupResult x = JsonConvert.DeserializeObject<GeoLookupResult>(result);                if (x.status == "success")                {                    return x.country;                }                else                {                    return "Unknown";                }            }            catch            {                return "Unknown";            }        }        internal static async Task CacheTelemetryData()        {            telemetryEntry.Country = await GetSessionCountry();            telemetryEntry.WindowsVersion = Utilities.GetWindowsDetails();            telemetryEntry.DotNetVersion = Utilities.GetNETFramework();            telemetryEntry.OptimizerVersion = Program.GetCurrentVersionTostring();            telemetryEntry.UnsafeMode = Program.UNSAFE_MODE.ToString();            telemetryEntry.ExperimentalBuild = Program.EXPERIMENTAL_BUILD.ToString();            telemetryEntry.TelemetryID = Options.CurrentOptions.TelemetryClientID;        }        internal static void GenerateTelemetryData(string functionName, string errorMessage, string errorStackTrace)        {            telemetryEntry.Timestamp = string.Format("{0:yyyy-MM-ddTHH:mm:ss.FFFZ}", DateTime.UtcNow);            telemetryEntry.LanguageCode = Enum.GetName(typeof(LanguageCode), Options.CurrentOptions.LanguageCode);            telemetryEntry.SavedOptions = JsonConvert.SerializeObject(Options.CurrentOptions, Formatting.Indented);            telemetryEntry.FunctionName = functionName;            telemetryEntry.ErrorMessage = errorMessage;            telemetryEntry.StackTrace = errorStackTrace;            SendTelemetryData(telemetryEntry);        }        internal static void SendTelemetryData(TelemetryData entry)        {            try            {                StringContent bodyContent = new StringContent(JsonConvert.SerializeObject(telemetryEntry, Formatting.Indented), Encoding.UTF8, "application/json");                TelemetryClient.PostAsync(TelemetryClient.BaseAddress, bodyContent);            }            catch { }        }    }}
 |