/// <summary>
        /// Creates an instance of <see cref="ErrorReportingExceptionFilter"/> using credentials as
        /// defined by <see cref="GoogleCredential.GetApplicationDefaultAsync"/>.
        /// <para>
        /// Can be used when running on Google App Engine or Google Compute Engine.
        /// The Google Cloud Platform project to report errors to will detected from the
        /// current platform.
        /// </para>
        /// </summary>
        /// <param name="serviceName">An identifier of the service, such as the name of the executable or job.
        ///     Cannot be null.</param>
        /// <param name="version">Represents the source code version that the developer provided.
        ///     Cannot be null.</param>
        /// <param name="options">Optional, error reporting options.</param>
        public static ErrorReportingExceptionFilter Create(
            string serviceName, string version, ErrorReportingOptions options = null)
        {
            var contextLogger = ErrorReportingContextExceptionLogger.Create(null, serviceName, version, options);

            return(new ErrorReportingExceptionFilter(contextLogger));
        }
Example #2
0
 /// <summary>
 /// Shared code for creating error reporting services.
 /// </summary>
 /// <param name="services">The service collection. Cannot be null.</param>
 /// <param name="projectId">The Google Cloud Platform project ID. If null the project Id will be auto detected.</param>
 /// <param name="serviceName">An identifier of the service, such as the name of the executable or job.
 ///     Cannot be null.</param>
 /// <param name="version">Represents the source code version that the developer provided.
 ///     Cannot be null.</param>
 /// <param name="options">Optional, error reporting options.</param>
 private static void AddGoogleExceptionLoggingBase(
     this IServiceCollection services, string projectId, string serviceName, string version,
     ErrorReportingOptions options = null)
 {
     services.AddSingleton <IHttpContextAccessor, HttpContextAccessor>();
     services.AddSingleton(ErrorReportingContextExceptionLogger.Create(projectId, serviceName, version, options));
     services.AddSingleton(CreateExceptionLogger);
 }
        /// <summary>
        /// Creates an instance of <see cref="ErrorReportingExceptionFilter"/> using credentials as
        /// defined by <see cref="GoogleCredential.GetApplicationDefaultAsync"/>.
        /// </summary>
        /// <param name="projectId">The Google Cloud Platform project ID. Cannot be null.</param>
        /// <param name="serviceName">An identifier of the service, such as the name of the executable or job.
        ///     Cannot be null.</param>
        /// <param name="version">Represents the source code version that the developer provided.
        ///     Cannot be null.</param>
        /// <param name="options">Optional, error reporting options.</param>
        public static ErrorReportingExceptionFilter Create(string projectId, string serviceName, string version,
                                                           ErrorReportingOptions options = null)
        {
            GaxPreconditions.CheckNotNullOrEmpty(projectId, nameof(projectId));
            var contextLogger = ErrorReportingContextExceptionLogger.Create(projectId, serviceName, version, options);

            return(new ErrorReportingExceptionFilter(contextLogger));
        }
        public async Task LogAsync()
        {
            var options = ErrorReportingOptions.Create(
                EventTarget.ForLogging("pid", loggingClient: new ThrowingLoggingClient()));
            var consumer = new FakeConsumer();

            IContextExceptionLogger logger = new ErrorReportingContextExceptionLogger(
                consumer, _service, _version, options, null);
            await logger.LogAsync(CreateException(), new FakeContextWrapper());

            ValidateSingleEntry(consumer, _method, _uri, _userAgent, options);
        }
Example #5
0
        public async Task LogAsync()
        {
            var eventTarget = EventTarget.ForProject("pid");
            var options     = ErrorReportingOptions.CreateInstance();
            var consumer    = new FakeConsumer();

            IContextExceptionLogger logger = new ErrorReportingContextExceptionLogger(
                consumer, eventTarget, _serviceContext, options, null);
            await logger.LogAsync(CreateException(), new FakeContextWrapper());

            ValidateSingleEntry(consumer, _method, _uri, _userAgent, options, eventTarget);
        }
        public void Log_Simple()
        {
            var options = ErrorReportingOptions.Create(
                EventTarget.ForLogging("pid", loggingClient: new ThrowingLoggingClient()));
            var consumer = new FakeConsumer();

            IContextExceptionLogger logger = new ErrorReportingContextExceptionLogger(
                consumer, _service, _version, options, null);

            logger.Log(CreateException(), new EmptyContextWrapper());

            ValidateSingleEntry(consumer, "", "", "", options);
        }
Example #7
0
        public void Log_Compat()
        {
            var eventTarget = EventTarget.ForLogging("pid", loggingClient: new ThrowingLoggingClient());
            var options     = ErrorReportingOptions.Create(eventTarget);
            var consumer    = new FakeConsumer();

            IContextExceptionLogger logger = new ErrorReportingContextExceptionLogger(
                consumer, eventTarget, _serviceContext, options, null);

            logger.Log(CreateException(), new FakeContextWrapper());

            ValidateSingleEntry(consumer, _method, _uri, _userAgent, options, eventTarget);
        }
Example #8
0
        public void Log_Simple()
        {
            var eventTarget = EventTarget.ForProject("pid");
            var options     = ErrorReportingOptions.CreateInstance();
            var consumer    = new FakeConsumer();

            IContextExceptionLogger logger = new ErrorReportingContextExceptionLogger(
                consumer, eventTarget, _serviceContext, options, null);

            logger.Log(CreateException(), new EmptyContextWrapper());

            ValidateSingleEntry(consumer, "", "", "", options, eventTarget);
        }
Example #9
0
        public void Log_Simple()
        {
            var mockConsumer = new Mock <IConsumer <ReportedErrorEvent> >();

            mockConsumer.Setup(c => c.Receive(IsContext("", "", "", 0)));

            IContextExceptionLogger logger =
                new ErrorReportingContextExceptionLogger(mockConsumer.Object, _service, _version);

            logger.Log(CreateException(), new EmptyContextWrapper());

            mockConsumer.VerifyAll();
        }
Example #10
0
        public void Log()
        {
            var mockConsumer = new Mock <IConsumer <ReportedErrorEvent> >();

            mockConsumer.Setup(c => c.Receive(IsContext(_method, _uri, _userAgent, _statusCode)));

            IContextExceptionLogger logger =
                new ErrorReportingContextExceptionLogger(mockConsumer.Object, _service, _version);

            logger.Log(CreateException(), new FakeContextWrapper());

            mockConsumer.VerifyAll();
        }
Example #11
0
        public void Log_Simple()
        {
            var options = ErrorReportingOptions.Create(
                EventTarget.ForLogging("pid", loggingClient: new Mock <LoggingServiceV2Client>().Object));
            var mockConsumer = new Mock <IConsumer <LogEntry> >();

            mockConsumer.Setup(c => c.Receive(IsContext("", "", "", options)));

            IContextExceptionLogger logger = new ErrorReportingContextExceptionLogger(
                mockConsumer.Object, _service, _version, options);

            logger.Log(CreateException(), new EmptyContextWrapper());

            mockConsumer.VerifyAll();
        }
Example #12
0
        public async Task LogAsync()
        {
            var mockConsumer = new Mock <IConsumer <ReportedErrorEvent> >();

            mockConsumer.Setup(c => c.ReceiveAsync(
                                   IsContext(_method, _uri, _userAgent, _statusCode), It.IsAny <CancellationToken>()))
            .Returns(Task.FromResult(true));

            IContextExceptionLogger logger =
                new ErrorReportingContextExceptionLogger(mockConsumer.Object, _service, _version);

            await logger.LogAsync(CreateException(), new FakeContextWrapper());

            mockConsumer.VerifyAll();
        }
        /// <summary>
        /// Adds services for middleware that will report all uncaught exceptions to the
        /// Stackdriver Error Reporting API.
        /// <para>
        /// Can be used when running on Google App Engine or Google Compute Engine.
        /// The Google Cloud Platform project to report errors to will detected from the
        /// current platform.
        /// </para>
        /// </summary>
        /// <param name="services">The service collection. Cannot be null.</param>
        /// <param name="setupAction">Action to set up options. Cannot be null.</param>
        public static void AddGoogleExceptionLogging(
            this IServiceCollection services, Action <ErrorReportingServiceOptions> setupAction)
        {
            GaxPreconditions.CheckNotNull(services, nameof(services));
            GaxPreconditions.CheckNotNull(setupAction, nameof(setupAction));

            var serviceOptions = new ErrorReportingServiceOptions();

            setupAction(serviceOptions);
            var serviceName = GaxPreconditions.CheckNotNull(serviceOptions.ServiceName, nameof(serviceOptions.ServiceName));
            var version     = GaxPreconditions.CheckNotNull(serviceOptions.Version, nameof(serviceOptions.Version));

            services.AddSingleton <IHttpContextAccessor, HttpContextAccessor>();
            services.AddSingleton(ErrorReportingContextExceptionLogger.Create(
                                      serviceOptions.ProjectId, serviceName, version, serviceOptions.Options));
            services.AddSingleton(CreateExceptionLogger);
        }
Example #14
0
        public async Task LogAsync()
        {
            var options = ErrorReportingOptions.Create(
                EventTarget.ForLogging("pid", loggingClient: new Mock <LoggingServiceV2Client>().Object));
            var mockConsumer = new Mock <IConsumer <LogEntry> >();

            mockConsumer.Setup(c => c.ReceiveAsync(
                                   IsContext(_method, _uri, _userAgent, options), It.IsAny <CancellationToken>()))
            .Returns(Task.FromResult(true));

            IContextExceptionLogger logger = new ErrorReportingContextExceptionLogger(
                mockConsumer.Object, _service, _version, options);

            await logger.LogAsync(CreateException(), new FakeContextWrapper());

            mockConsumer.VerifyAll();
        }