예제 #1
0
        static void CheckDefaultStructureAndPredicate(LogifyAlert client, Predicate <IExceptionReportSender> predicate)
        {
            IExceptionReportSender sender = ExceptionLoggerFactory.Instance.PlatformReportSender;

            Assert.AreEqual(true, sender != null);
            Assert.AreEqual(typeof(EmptyBackgroundExceptionReportSender), sender.GetType());
            CheckSenderConsistency(client, sender);
            predicate(sender);

            sender = ((EmptyBackgroundExceptionReportSender)sender).InnerSender;
            Assert.AreEqual(true, sender != null);
            Assert.AreEqual(typeof(CompositeExceptionReportSender), sender.GetType());
            CheckSenderConsistency(client, sender);
            predicate(sender);

            CompositeExceptionReportSender compositeSender = (CompositeExceptionReportSender)sender;

            CheckSenderConsistency(client, compositeSender);
            predicate(compositeSender);
            Assert.AreEqual(true, compositeSender.Senders != null);
            Assert.AreEqual(2, compositeSender.Senders.Count);

            sender = compositeSender.Senders[0];
            Assert.AreEqual(true, sender != null);
            Assert.AreEqual(typeof(WebExceptionReportSender), sender.GetType());
            CheckSenderConsistency(client, sender);
            predicate(sender);

            sender = compositeSender.Senders[1];
            Assert.AreEqual(true, sender != null);
            Assert.AreEqual(typeof(OfflineDirectoryExceptionReportSender), sender.GetType());
            CheckSenderConsistency(client, sender);
            predicate(sender);
        }
예제 #2
0
        void ApplyRecursively <TSender>(IExceptionReportSender sender, Action <TSender> action) where TSender : class
        {
            if (sender == null)
            {
                return;
            }
            TSender typedSender = sender as TSender;

            if (typedSender != null)
            {
                action(typedSender);
            }

            IExceptionReportSenderWrapper wrapper = sender as IExceptionReportSenderWrapper;

            if (wrapper != null)
            {
                ApplyRecursively <TSender>(wrapper.InnerSender, action);
            }

            CompositeExceptionReportSender composite = sender as CompositeExceptionReportSender;

            if (composite != null)
            {
                if (composite.Senders != null && composite.Senders.Count > 0)
                {
                    int count = composite.Senders.Count;
                    for (int i = 0; i < count; i++)
                    {
                        ApplyRecursively <TSender>(composite.Senders[i], action);
                    }
                }
            }
        }
예제 #3
0
        void CheckReportToDevExpressFileNameSpecified(IExceptionReportSender rootSender)
        {
            const string apiKey     = "12345678FEE1DEADBEEF4B1DBABEFACE";
            const string serviceUrl = "https://logify.devexpress.com";
            EmptyBackgroundExceptionReportSender root = rootSender as EmptyBackgroundExceptionReportSender;

            Assert.AreEqual(true, root != null);
            Assert.AreEqual(apiKey, root.ApiKey);
            Assert.AreEqual(serviceUrl, root.ServiceUrl);

            CompositeExceptionReportSender composite = root.InnerSender as CompositeExceptionReportSender;

            Assert.AreEqual(true, composite != null);
            Assert.AreEqual(apiKey, composite.ApiKey);
            Assert.AreEqual(serviceUrl, composite.ServiceUrl);

            ExternalProcessExceptionReportSender externalSender = composite.Senders[0] as ExternalProcessExceptionReportSender;

            Assert.AreEqual(true, externalSender != null);
            Assert.AreEqual(apiKey, externalSender.ApiKey);
            Assert.AreEqual(serviceUrl, externalSender.ServiceUrl);

            WinFormsExceptionReportSender winFormsSender = composite.Senders[1] as WinFormsExceptionReportSender;

            Assert.AreEqual(true, winFormsSender != null);
            Assert.AreEqual(apiKey, winFormsSender.ApiKey);
            Assert.AreEqual(serviceUrl, winFormsSender.ServiceUrl);

            //FileExceptionReportSender file = composite.Senders[2] as FileExceptionReportSender;
            //Assert.AreEqual(true, file != null);
            //Assert.AreEqual(apiKey, file.ApiKey);
            //Assert.AreEqual(serviceUrl, file.ServiceUrl);
            //Assert.AreEqual("exception.log", file.FileName);
        }
예제 #4
0
        //const string serviceInfo = "/RW+Wzq8wasJP6LuHZcAbT2ShAvheOdnptsr/RI8zeCCfF6a+zXeWOhG0STFbxoLDjpzWj49DMTp0KZXufp4gz45nsSUwhcnrJC280vWliI=";
        protected void ReportToDevExpressCore(string uniqueUserId, string lastExceptionReportFileName, Assembly asm, IDictionary <string, string> customData)
        {
            IExceptionReportSender sender = ExceptionLoggerFactory.Instance.PlatformReportSender;

            if (sender != null && sender.CanSendExceptionReport())
            {
                return;
            }

            IExceptionReportSender reportSender = CreateExceptionReportSender();

            CompositeExceptionReportSender compositeSender = reportSender as CompositeExceptionReportSender;

            if (compositeSender == null)
            {
                compositeSender = new CompositeExceptionReportSender();
                compositeSender.Senders.Add(reportSender);
            }

            /*if (!String.IsNullOrEmpty(lastExceptionReportFileName)) {
             *  FileExceptionReportSender fileSender = new FileExceptionReportSender();
             *  fileSender.FileName = lastExceptionReportFileName;
             *  compositeSender.Senders.Add(fileSender);
             * }*/
            string[] info = GetServiceInfo(asm);
            if (info != null && info.Length == 2)
            {
                this.ServiceUrl = info[0]; // "http://logify.devexpress.com";
                this.ApiKey     = info[1]; // "12345678FEE1DEADBEEF4B1DBABEFACE";
                //if (this.ServiceUrl.StartsWith("http://", StringComparison.InvariantCultureIgnoreCase)) {
                if (CultureInfo.InvariantCulture.CompareInfo.IsPrefix(this.ServiceUrl, "http://", CompareOptions.IgnoreCase))
                {
                    this.ServiceUrl = "https://" + this.ServiceUrl.Substring("http://".Length);
                }
            }
            //this.MiniDumpServiceUrl = "http://logifydump.devexpress.com/";
            compositeSender.ServiceUrl = this.ServiceUrl;
            //compositeSender.ApiKey = "dx$" + logId;
            compositeSender.ApiKey = this.ApiKey;
            //compositeSender.MiniDumpServiceUrl = this.MiniDumpServiceUrl;
            this.AppName                = "DevExpress Demo or Design Time";
            this.AppVersion             = DetectDevExpressVersion(asm);
            this.UserId                 = uniqueUserId;
            this.ConfirmSendReport      = false;
            this.CollectBreadcrumbsCore = false;
            if (customData != null)
            {
                this.customData = customData;
            }

            //TODO:
            Config.CollectMiniDump = true;

            //apply values to config

            ExceptionLoggerFactory.Instance.PlatformReportSender = CreateBackgroundExceptionReportSender(compositeSender);
        }
예제 #5
0
        protected override IExceptionReportSender CreateExceptionReportSender()
        {
            IExceptionReportSender defaultSender = CreateConfiguredPlatformExceptionReportSender();

            if (ConfirmSendReport)
            {
                return(defaultSender);
            }

            CompositeExceptionReportSender sender = new CompositeExceptionReportSender();

            sender.StopWhenFirstSuccess = true;
            //sender.Senders.Add(new ExternalProcessExceptionReportSender());
            sender.Senders.Add(defaultSender);
            sender.Senders.Add(new OfflineDirectoryExceptionReportSender());
            return(sender);
        }