Example #1
0
        public async Task ParseEventsAsync(string input, int expectedEvents, string[] expectedMessage, string expectedType)
        {
            var events = await _parser.ParseEventsAsync(input, 2, "exceptionless/2.0.0.0");

            Assert.Equal(expectedEvents, events.Count);
            for (int index = 0; index < events.Count; index++)
            {
                var ev = events[index];
                Assert.Equal(expectedMessage[index], ev.Message);
                Assert.Equal(expectedType, ev.Type);
                Assert.NotEqual(DateTimeOffset.MinValue, ev.Date);
            }
        }
        public async Task ParseErrorsAsync(string errorFilePath)
        {
            string json = File.ReadAllText(errorFilePath);
            var    ctx  = new EventUpgraderContext(json);

            await _upgrader.UpgradeAsync(ctx);

            ApprovalsUtility.VerifyFile(Path.ChangeExtension(errorFilePath, ".expected.json"), ctx.Documents.First.ToString());

            var events = await _parser.ParseEventsAsync(ctx.Documents.ToString(), 2, "exceptionless/2.0.0.0");

            Assert.Equal(1, events.Count);
        }
Example #3
0
        private async Task <List <PersistentEvent> > ParseEventPostAsync(EventPostInfo ep, DateTime createdUtc, byte[] uncompressedData, string queueEntryId, bool isInternalProject)
        {
            _logger.Debug().Message("Parsing EventPost: {0}", queueEntryId).Property("Id", queueEntryId).Tag("parsing").Project(ep.ProjectId).WriteIf(!isInternalProject);
            List <PersistentEvent> events = null;

            try {
                var encoding = Encoding.UTF8;
                if (!String.IsNullOrEmpty(ep.CharSet))
                {
                    encoding = Encoding.GetEncoding(ep.CharSet);
                }

                await _metricsClient.TimeAsync(async() => {
                    string input = encoding.GetString(uncompressedData);
                    events       = await _eventParserPluginManager.ParseEventsAsync(input, ep.ApiVersion, ep.UserAgent).AnyContext() ?? new List <PersistentEvent>(0);
                    foreach (var ev in events)
                    {
                        ev.CreatedUtc = createdUtc;

                        // set the project id on all events
                        ev.ProjectId = ep.ProjectId;

                        // set the reference id to the event id if one was defined.
                        if (!String.IsNullOrEmpty(ev.Id) && String.IsNullOrEmpty(ev.ReferenceId))
                        {
                            ev.ReferenceId = ev.Id;
                        }

                        // the event id, stack id and organization id should never be set for posted events
                        ev.Id = ev.StackId = ev.OrganizationId = null;
                    }
                }, MetricNames.PostsParsingTime).AnyContext();

                await _metricsClient.CounterAsync(MetricNames.PostsParsed).AnyContext();

                await _metricsClient.GaugeAsync(MetricNames.PostsEventCount, events.Count).AnyContext();
            } catch (Exception ex) {
                await _metricsClient.CounterAsync(MetricNames.PostsParseErrors).AnyContext();

                _logger.Error().Exception(ex).Message("An error occurred while processing the EventPost '{0}': {1}", queueEntryId, ex.Message).WriteIf(!isInternalProject);
            }

            _logger.Debug().Message("Parsed {0} events from EventPost: {1}", events?.Count ?? 0, queueEntryId).Property("Id", queueEntryId).Tag("parsing").Project(ep.ProjectId).WriteIf(!isInternalProject);
            return(events);
        }