public bool PostMessage(JObject msg) { try { BaseUtils.ResponseData resp = RequestPost(msg.ToString(), ""); if (resp.StatusCode == System.Net.HttpStatusCode.OK) { return(true); } else { return(false); } } catch (System.Net.WebException ex) { System.Net.HttpWebResponse response = ex.Response as System.Net.HttpWebResponse; string responsetext = null; using (var responsestream = response.GetResponseStream()) { using (var reader = new System.IO.StreamReader(responsestream)) { responsetext = reader.ReadToEnd(); } } System.Diagnostics.Trace.WriteLine($"EDDN message post failed - status: {response?.StatusCode.ToString() ?? ex.Status.ToString()}\nResponse: {responsetext}\nEDDN Message: {msg.ToString()}"); return(false); } }
public bool PostMessage(JObject msg, ref bool recordSet) { try { BaseUtils.ResponseData resp = RequestPost(msg.ToString(), ""); JObject result = JObject.Parse(resp.Body); JObject res = (JObject)result["response"]; if ((bool)res["is_valid"]) { JObject conf = (JObject)res["confirmation_message"]; recordSet = (bool)conf["unique_record_holder"]; return(true); } else { System.Diagnostics.Trace.WriteLine($"EGO message post failed - status: {res["validation_messages"].ToNullSafeString()}\nEGO Message: {msg.ToString().Replace(ego_apikey, "**********").Replace(auth_code, "*********")}"); return(false); } } catch (System.Net.WebException ex) { System.Net.HttpWebResponse response = ex.Response as System.Net.HttpWebResponse; System.Diagnostics.Trace.WriteLine($"EGO message post failed - status: {response?.StatusCode.ToString() ?? ex.Status.ToString()}\nEGO Message: {msg.ToString().Replace(ego_apikey, "**********").Replace(auth_code, "*********")}"); return(false); } }
public bool PostMessage(JObject msg) { if (igau_address.IsEmpty()) { return(false); } try { BaseUtils.ResponseData resp = RequestPost(msg.ToString(), ""); var result = JToken.Parse(resp.Body); if (result.Value <string>() == "SUCCESS") { return(true); } else { var res = result["response"]; var errmsg = res?.Value <string>("errorMessage"); Trace.WriteLine($"IGAU message post failed: {errmsg}"); return(false); } } catch (System.Net.WebException ex) { System.Net.HttpWebResponse response = ex.Response as System.Net.HttpWebResponse; System.Diagnostics.Trace.WriteLine($"IGAU message post failed - status: {response?.StatusCode.ToString() ?? ex.Status.ToString()}\nIGAU Message: {msg.ToString()}"); return(false); } }
public bool PostMessage(JObject msg) { try { BaseUtils.ResponseData resp = RequestPost(msg.ToString(), ""); if (resp.StatusCode == System.Net.HttpStatusCode.OK) { return(true); } else { return(false); } } catch (System.Net.WebException ex) { System.Net.HttpWebResponse response = ex.Response as System.Net.HttpWebResponse; System.Diagnostics.Trace.WriteLine($"EDDN message post failed - status: {response?.StatusCode.ToString() ?? ex.Status.ToString()}\nEDDN Message: {msg.ToString()}"); return(false); } }
private void FetcherThreadProc() { Trace.WriteLine($"EDSM Thread logs start"); DateTime lastCommentFetch = DateTime.MinValue; int waittime = 1000; // initial waittime, will be reestimated later DateTime curtime = DateTime.UtcNow; KeyName(out string latestdatekeyname, out string oldestdatekeyname); while (!ExitRequested.WaitOne(waittime)) { if (ExitRequested.WaitOne(0)) { return; } EDSMClass edsm = new EDSMClass(Commander); // logic checked 21/12/2018 RJP if (edsm.ValidCredentials && Commander.SyncFromEdsm) { if (DateTime.UtcNow > lastCommentFetch.AddHours(1)) { edsm.GetComments(l => Trace.WriteLine(l)); lastCommentFetch = DateTime.UtcNow; } DateTime latestentry = EliteDangerousCore.DB.UserDatabase.Instance.GetSettingDate(latestdatekeyname, GammaStart); // lastest entry DateTime oldestentry = EliteDangerousCore.DB.UserDatabase.Instance.GetSettingDate(oldestdatekeyname, DateTime.UtcNow); // oldest entry DateTime logstarttime = DateTime.MinValue; // return what we got.. DateTime logendtime = DateTime.MinValue; List <JournalFSDJump> edsmlogs = null; BaseUtils.ResponseData response = default(BaseUtils.ResponseData); int res = -1; if (DateTime.UtcNow.Subtract(latestentry).TotalMinutes >= EDSMMaxLogAgeMinutes) // is latest entry old? { DateTime askfor = DateTime.UtcNow; System.Diagnostics.Debug.WriteLine("Fetch latest since Curtime > lastestentry + gap " + askfor.ToStringZulu()); res = edsm.GetLogs(null, askfor, out edsmlogs, out logstarttime, out logendtime, out response); //res = 100; logstarttime = askfor.AddDays(-7); logendtime = askfor; // debug it } else if (oldestentry > GammaStart) // if oldest entry younger than gamma? { System.Diagnostics.Debug.WriteLine("Go back in time to gamma "); res = edsm.GetLogs(null, oldestentry, out edsmlogs, out logstarttime, out logendtime, out response); //res = 100; logstarttime = oldestentry.AddDays(-7); logendtime = oldestentry; // debug it } if (res == 100) // hunky dory - note if Anthor faults, we just retry again and again { System.Diagnostics.Debug.WriteLine("Data stored from " + oldestentry.ToStringZulu() + " -> " + latestentry.ToStringZulu()); System.Diagnostics.Debug.WriteLine("Process logs from " + logstarttime.ToStringZulu() + " => " + logendtime.ToStringZulu()); if (edsmlogs != null && edsmlogs.Count > 0) // if anything to process.. { Process(edsmlogs, logstarttime, logendtime); } if (logendtime > latestentry) { EliteDangerousCore.DB.UserDatabase.Instance.PutSettingDate(latestdatekeyname, logendtime); } if (logstarttime < oldestentry) { EliteDangerousCore.DB.UserDatabase.Instance.PutSettingDate(oldestdatekeyname, logstarttime); } } else if (res != -1) { System.Diagnostics.Debug.WriteLine("EDSM Log request rejected with " + res); } if (response.Headers != null && response.Headers["X-Rate-Limit-Limit"] != null && response.Headers["X-Rate-Limit-Remaining"] != null && response.Headers["X-Rate-Limit-Reset"] != null && Int32.TryParse(response.Headers["X-Rate-Limit-Limit"], out int ratelimitlimit) && Int32.TryParse(response.Headers["X-Rate-Limit-Remaining"], out int ratelimitremain) && Int32.TryParse(response.Headers["X-Rate-Limit-Reset"], out int ratelimitreset)) { if (ratelimitremain < ratelimitlimit * 2 / 4) // lets keep at least X remaining for other purposes later.. { waittime = 1000 * ratelimitreset / (ratelimitlimit - ratelimitremain); // slow down to its pace now.. example 878/(360-272) = 10 seconds per quota } else { waittime = 1000; // 1 second so we don't thrash } System.Diagnostics.Debug.WriteLine("EDSM Log Delay Parameters {0} {1} {2} => {3}ms", ratelimitlimit, ratelimitremain, ratelimitreset, waittime); } } } }
// Protected against bad JSON Visual Inspection Nov 2020 - using Int() public int GetLogs(DateTime?starttimeutc, DateTime?endtimeutc, out List <JournalFSDJump> log, out DateTime logstarttime, out DateTime logendtime, out BaseUtils.ResponseData response) { log = new List <JournalFSDJump>(); logstarttime = DateTime.MaxValue; logendtime = DateTime.MinValue; response = new BaseUtils.ResponseData { Error = true, StatusCode = HttpStatusCode.Unauthorized }; if (!ValidCredentials) { return(0); } string query = "get-logs?showId=1&apiKey=" + apiKey + "&commanderName=" + HttpUtility.UrlEncode(commanderName); if (starttimeutc != null) { query += "&startDateTime=" + HttpUtility.UrlEncode(starttimeutc.Value.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture)); } if (endtimeutc != null) { query += "&endDateTime=" + HttpUtility.UrlEncode(endtimeutc.Value.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture)); } response = RequestGet("api-logs-v1/" + query, handleException: true); if (response.Error) { if ((int)response.StatusCode == 429) { return(429); } else { return(0); } } var json = response.Body; if (json == null) { return(0); } try { JObject msg = JObject.ParseThrowCommaEOL(json); int msgnr = msg["msgnum"].Int(0); JArray logs = (JArray)msg["logs"]; if (logs != null) { string startdatestr = msg["startDateTime"].Str(); string enddatestr = msg["endDateTime"].Str(); if (startdatestr == null || !DateTime.TryParseExact(startdatestr, "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal, out logstarttime)) { logstarttime = DateTime.MaxValue; } if (enddatestr == null || !DateTime.TryParseExact(enddatestr, "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal, out logendtime)) { logendtime = DateTime.MinValue; } var tofetch = SystemsDatabase.Instance.ExecuteWithDatabase(db => { var xtofetch = new List <Tuple <JObject, ISystem> >(); foreach (JObject jo in logs) { string name = jo["system"].Str(); string ts = jo["date"].Str(); long id = jo["systemId"].Long(); DateTime etutc = DateTime.ParseExact(ts, "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal | DateTimeStyles.AssumeUniversal); // UTC time ISystem sc = DB.SystemCache.FindSystem(new SystemClass(name, id), db); // find in our DB only. xtofetch.Add(new Tuple <JObject, ISystem>(jo, sc)); } return(xtofetch); }); var xlog = new List <JournalFSDJump>(); foreach (var js in tofetch) { var jo = js.Item1; var sc = js.Item2; string name = jo["system"].Str(); string ts = jo["date"].Str(); long id = jo["systemId"].Long(); bool firstdiscover = jo["firstDiscover"].Bool(); DateTime etutc = DateTime.ParseExact(ts, "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal | DateTimeStyles.AssumeUniversal); // UTC time if (sc == null) { if (DateTime.UtcNow.Subtract(etutc).TotalHours < 6) // Avoid running into the rate limit { sc = GetSystem(name)?.FirstOrDefault(s => s.EDSMID == id); } if (sc == null) { sc = new SystemClass(name, id); // make an EDSM system } } JournalFSDJump fsd = new JournalFSDJump(etutc, sc, EDCommander.Current.MapColour, firstdiscover, true); xlog.Add(fsd); } log = xlog; } return(msgnr); } catch (Exception e) { System.Diagnostics.Debug.WriteLine("Failed due to " + e.ToString()); return(499); // BAD JSON } }
// Protected against bad JSON public int GetLogs(DateTime?starttimeutc, DateTime?endtimeutc, out List <JournalFSDJump> log, out DateTime logstarttime, out DateTime logendtime, out BaseUtils.ResponseData response) { log = new List <JournalFSDJump>(); logstarttime = DateTime.MaxValue; logendtime = DateTime.MinValue; response = new BaseUtils.ResponseData { Error = true, StatusCode = HttpStatusCode.Unauthorized }; if (!ValidCredentials) { return(0); } string query = "get-logs?showId=1&apiKey=" + apiKey + "&commanderName=" + HttpUtility.UrlEncode(commanderName); if (starttimeutc != null) { query += "&startDateTime=" + HttpUtility.UrlEncode(starttimeutc.Value.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture)); } if (endtimeutc != null) { query += "&endDateTime=" + HttpUtility.UrlEncode(endtimeutc.Value.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture)); } response = RequestGet("api-logs-v1/" + query, handleException: true); if (response.Error) { if ((int)response.StatusCode == 429) { return(429); } else { return(0); } } var json = response.Body; if (json == null) { return(0); } try { JObject msg = JObject.Parse(json); int msgnr = msg["msgnum"].Int(0); JArray logs = (JArray)msg["logs"]; if (logs != null) { string startdatestr = msg["startDateTime"].Value <string>(); string enddatestr = msg["endDateTime"].Value <string>(); if (startdatestr == null || !DateTime.TryParseExact(startdatestr, "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal, out logstarttime)) { logstarttime = DateTime.MaxValue; } if (enddatestr == null || !DateTime.TryParseExact(enddatestr, "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal, out logendtime)) { logendtime = DateTime.MinValue; } using (SQLiteConnectionSystem cn = new SQLiteConnectionSystem()) { foreach (JObject jo in logs) { string name = jo["system"].Value <string>(); string ts = jo["date"].Value <string>(); long id = jo["systemId"].Value <long>(); bool firstdiscover = jo["firstDiscover"].Value <bool>(); DateTime etutc = DateTime.ParseExact(ts, "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal | DateTimeStyles.AssumeUniversal); // UTC time ISystem sc = SystemClassDB.GetSystem(id, cn, SystemClassDB.SystemIDType.EdsmId, name: name); if (sc == null) { if (DateTime.UtcNow.Subtract(etutc).TotalHours < 6) // Avoid running into the rate limit { sc = GetSystemsByName(name)?.FirstOrDefault(s => s.EDSMID == id); } if (sc == null) { sc = new SystemClass(name) { EDSMID = id }; } } JournalFSDJump fsd = new JournalFSDJump(etutc, sc, EliteConfigInstance.InstanceConfig.DefaultMapColour, firstdiscover, true); log.Add(fsd); } } } return(msgnr); } catch (Exception e) { System.Diagnostics.Debug.WriteLine("Failed due to " + e.ToString()); return(499); // BAD JSON } }