Пример #1
0
        /// <summary>
        /// Send a report to Backtrace API
        /// </summary>
        /// <param name="report">Report to send</param>
        public virtual void Send(BacktraceReportBase <T> report)
        {
            //check rate limiting
            bool watcherValidation = _reportWatcher.WatchReport(report);

            if (!watcherValidation)
            {
                OnClientReportLimitReached?.Invoke();
                return;
            }
            //generate minidump and add minidump to report
            string minidumpPath = _database.GenerateMiniDump(report, MiniDumpType);

            if (!string.IsNullOrEmpty(minidumpPath))
            {
                report._attachmentPaths.Add(minidumpPath);
            }
            //create a JSON payload instance
            var data = new BacktraceData <T>(report, Attributes);

            //valid user custom events
            data = BeforeSend?.Invoke(data) ?? data;
            _backtraceApi.Send(data);

            //clear minidumps generated by app
            _database.ClearMiniDump(minidumpPath);
        }
Пример #2
0
        /// <summary>
        /// Concat two attributes dictionary
        /// </summary>
        /// <param name="report">Current report</param>
        /// <param name="attributes">Attributes to concatenate</param>
        /// <returns></returns>
        internal static Dictionary <string, T> ConcatAttributes(
            BacktraceReportBase <T> report, Dictionary <string, T> attributes)
        {
            var reportAttributes = report.Attributes;

            if (attributes == null)
            {
                return(reportAttributes);
            }
            ;
            return(reportAttributes.Merge(attributes));
        }