private static bool validateResponse(InaraResponse inaraResponse, ref List <InaraAPIEvent> indexedEvents) { if (inaraResponse.eventStatus == 200) { // 200 - Ok return(true); } else { Dictionary <string, object> data = new Dictionary <string, object>() { { "InaraAPIEvent", indexedEvents.Find(e => e.eventCustomID == inaraResponse.eventCustomID) }, { "InaraResponse", inaraResponse } }; if (inaraResponse.eventStatus == 400) { // 400 - Error (you probably did something wrong, there are properties missing, etc. The event was skipped or whole batch cancelled on failed authorization.) Logging.Error("Inara responded with: " + inaraResponse.eventStatusText, JsonConvert.SerializeObject(data)); } else { // 202 - Warning (everything is OK, but there may be multiple results for the input properties, etc.) // 204 - 'Soft' error (everything was formally OK, but there are no results for the properties set, etc.) // Inara may also return null as it undergoes a nightly manintenance cycle where the servers go offline temporarily. Logging.Warn("Inara responded with: " + (inaraResponse.eventStatusText ?? "(No response)"), JsonConvert.SerializeObject(data)); } return(false); } }
private bool validateResponse(InaraResponse inaraResponse, List <InaraAPIEvent> indexedEvents, bool header = false) { // 200 - Ok if (inaraResponse.eventStatus == 200) { return(true); } // Anything else - something is wrong. Dictionary <string, object> data = new Dictionary <string, object>() { { "InaraAPIEvent", indexedEvents.Find(e => e.eventCustomID == inaraResponse.eventCustomID) }, { "InaraResponse", inaraResponse }, { "Stacktrace", new StackTrace() } }; try { // 202 - Warning (everything is OK, but there may be multiple results for the input properties, etc.) // 204 - 'Soft' error (everything was formally OK, but there are no results for the properties set, etc.) if (inaraResponse.eventStatus == 202 || inaraResponse.eventStatus == 204) { Logging.Warn("Inara responded with: " + (inaraResponse.eventStatusText ?? "(No response)"), JsonConvert.SerializeObject(data)); } // Other errors else if (!string.IsNullOrEmpty(inaraResponse.eventStatusText)) { if (header) { Logging.Warn("Inara responded with: " + (inaraResponse.eventStatusText ?? "(No response)"), JsonConvert.SerializeObject(data)); if (inaraResponse.eventStatusText.Contains("Invalid API key")) { ReEnqueueAPIEvents(indexedEvents); // The Inara API key has been rejected. We'll note and remember that. InaraConfiguration inaraConfiguration = InaraConfiguration.FromFile(); inaraConfiguration.isAPIkeyValid = false; inaraConfiguration.ToFile(); // Send internal events to the Inara Responder and the UI to handle the invalid API key appropriately invalidAPIkey?.Invoke(inaraConfiguration, new EventArgs()); } else if (inaraResponse.eventStatusText.Contains("access to API was temporarily revoked")) { // Note: This can be thrown by over-use of the readonly API key. ReEnqueueAPIEvents(indexedEvents); tooManyRequests = true; } } else { // There may be an issue with a specific API event. // We'll add that API event to a list and omit sending that event again in this instance. Logging.Error("Inara responded with: " + inaraResponse.eventStatusText, data); invalidAPIEvents.Add(indexedEvents.Find(e => e.eventCustomID == inaraResponse.eventCustomID).eventName); } } else { // Inara responded, but no status text description was given. Logging.Error("Inara responded with: ", data); } return(false); } catch (Exception e) { data.Add("Exception", e); Logging.Error("Failed to handle Inara server response", data); return(false); } }