Exemple #1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="RollbarLogger" /> class.
        /// </summary>
        /// <param name="rollbarConfig">The rollbar configuration.</param>
        internal RollbarLogger(IRollbarLoggerConfig?rollbarConfig)
        {
            Assumption.AssertTrue(RollbarInfrastructure.Instance.IsInitialized, nameof(RollbarInfrastructure.Instance.IsInitialized));

            if (RollbarTelemetryCollector.Instance != null &&
                !RollbarTelemetryCollector.Instance.IsAutocollecting
                )
            {
                RollbarTelemetryCollector.Instance.StartAutocollection();
            }

            if (rollbarConfig != null)
            {
                ValidateConfiguration(rollbarConfig);
                this._config = new RollbarLoggerConfig(this).Reconfigure(rollbarConfig);
            }
            else
            {
                this._config = new RollbarLoggerConfig(this);
            }

            // let's init proper Rollbar client:
            var rollbarClient = new RollbarClient(this);

            // let's init the corresponding queue and register it:
            this._payloadQueue = new PayloadQueue(this, rollbarClient);
            RollbarQueueController.Instance?.Register(this._payloadQueue);
        }
Exemple #2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="PayloadQueue"/> class.
        /// </summary>
        /// <param name="logger">The logger.</param>
        /// <param name="client">The client.</param>
        public PayloadQueue(RollbarLogger logger, RollbarClient client)
        {
            Assumption.AssertNotNull(logger, nameof(logger));
            Assumption.AssertNotNull(client, nameof(client));
            Assumption.AssertTrue(object.ReferenceEquals(logger.Config, client.Config), nameof(client.Config));

            this._syncLock   = new object();
            this._queue      = new Queue <PayloadBundle>();
            this._logger     = logger;
            this._client     = client;
            this._isReleased = false;
        }
Exemple #3
0
        /// <summary>
        /// Updates the client.
        /// </summary>
        /// <param name="client">The client.</param>
        public void UpdateClient(RollbarClient client)
        {
            if (this._client == client)
            {
                return;
            }

            lock (this._syncLock)
            {
                this._client = client;
            }
        }
Exemple #4
0
        /// <summary>
        /// Tries the posting.
        /// </summary>
        /// <param name="payloadRecord">The payload record.</param>
        /// <returns>RollbarResponse.</returns>
        private RollbarResponse?TryPosting(IPayloadRecord payloadRecord)
        {
            if (payloadRecord.ConfigJson == null)
            {
                return(null);
            }
            IRollbarLoggerConfig?config = JsonConvert.DeserializeObject <RollbarLoggerConfig>(payloadRecord.ConfigJson);

            if (config == null)
            {
                return(null);
            }
            RollbarClient rollbarClient = new RollbarClient(config);

            try
            {
                RollbarResponse?response =
                    rollbarClient.PostAsJson(config.RollbarDestinationOptions.AccessToken, payloadRecord.PayloadJson);
                return(response);
            }
            catch (System.Exception ex)
            {
                this.OnRollbarEvent(
                    new CommunicationErrorEventArgs(null, payloadRecord.PayloadJson, ex, 0)
                    );

                RollbarErrorUtility.Report(
                    null,
                    payloadRecord,
                    InternalRollbarError.PersistentPayloadRecordRepostError,
                    "While trying to report a stored payload...",
                    ex,
                    null
                    );

                return(null);
            }
        }