Exemplo n.º 1
0
        public async Task <ICollection <ApiEvent> > ApiCall(params ApiEvent[] events)
        {
            if (events.Length == 0)
            {
                return(new ApiEvent[0]);
            }

            var inputData = new ApiInputOutput()
            {
                Header = new Header(commanderName, apiKey),
                Events = events
            };
            var inputJson  = inputData.ToJson();
            var outputJson = await client.PostAsync(inputJson);

            var outputData = JsonConvert.DeserializeObject <ApiInputOutput>(outputJson);

            var exceptions = new List <Exception>();

            // Verify output
            if (outputData.Events != null)
            {
                for (int i = 0; i < events.Length; i++)
                {
                    var outputEvent = outputData.Events[i];
                    var statusCode  = outputEvent.EventStatus;
                    var statusText  = outputEvent.EventStatusText;

                    if (statusCode != 200)
                    {
                        if (ignoredErrors.Contains(statusText))
                        {
                            continue;
                        }

                        exceptions.Add(new ApplicationException(statusText ?? "Unknown Error"));

                        var log = statusCode < 300 ? Log.Warn() : Log.Error();
                        log.Message(statusText)
                        .Property("input", inputData.Events[i].ToString())
                        .Property("output", outputEvent.ToString())
                        .Property("status", statusCode)
                        .Write();
                    }
                }
            }

            if (outputData.Header.EventStatus != 200)
            {
                throw new AggregateException($"Error from API: {outputData.Header.EventStatusText}", exceptions.ToArray());
            }

            Log.Info()
            .Message("Uploaded events", events.Length)
            .Property("eventsCount", events.Length)
            .Write();

            return(outputData.Events);
        }
Exemplo n.º 2
0
        public async Task <ICollection <ApiEvent> > ApiCall(params ApiEvent[] events)
        {
            if (events.Length == 0)
            {
                return(new ApiEvent[0]);
            }

            var inputData = new ApiInputOutput()
            {
                Header = new Header(commanderName, apiKey),
                Events = events
            };
            var inputJson  = inputData.ToJson();
            var outputJson = await client.PostAsync(inputJson);

            var outputData = JsonConvert.DeserializeObject <ApiInputOutput>(outputJson);

            var exceptions = new List <Exception>();

            // Verify output
            if (outputData.Events != null)
            {
                for (int i = 0; i < events.Length; i++)
                {
                    if (outputData.Events[i].EventStatus != 200)
                    {
                        var statusText = outputData.Events[i].EventStatusText;
                        if (statusText.StartsWith("Some errors in the loadout appeared"))
                        {
                            continue; // Skip the errors related to data missing on Inara side
                        }
                        if (statusText == "There is a newer inventory state recorded already.")
                        {
                            continue; // Not really an error
                        }
                        var ex = new ApplicationException(statusText ?? "Unknown Error");
                        ex.Data.Add("input", inputData.Events[i].ToString());
                        ex.Data.Add("output", outputData.Events[i].ToString());
                        exceptions.Add(ex);
                        logger.Error(ex, "Error returned from Inara API");
                    }
                }
            }

            if (outputData.Header.EventStatus != 200)
            {
                throw new AggregateException($"Error from API: {outputData.Header.EventStatusText}", exceptions.ToArray());
            }
            logger.Info("Uploaded {0} INARA events", events.Length);
            return(outputData.Events);
        }