public void Must_Log_To_File()
        {
            // Arrange

            ILogRepository logRepository = new FakeLogRepository();
            var            log           = new JobLogger(AppDomain.CurrentDomain.BaseDirectory + "/logger6.cfg.json", logRepository);

            var expected =
                string.Format(
                    DateTime.Now.ToShortDateString() + " - [INFO]: This must be INFO File log{0}" +
                    DateTime.Now.ToShortDateString() + " - [WARNING]: This must be WARNING File log{0}" +
                    DateTime.Now.ToShortDateString() + " - [ERROR]: This must be ERROR File log{0}", Environment.NewLine);

            // Act

            log.Info("This must be INFO File log");
            log.Warning("This must be WARNING File log");
            log.Error("This must be ERROR File log");

            var result = File.ReadAllText("C:/Temp/Logs/log" + DateTime.Now.Day + DateTime.Now.Month + DateTime.Now.Year + ".txt");

            // Assert

            Assert.IsTrue(File.Exists("C:/Temp/Logs/log" + DateTime.Now.Day + DateTime.Now.Month + DateTime.Now.Year + ".txt"));
            Assert.AreEqual(result, expected);
            File.Delete("C:/Temp/Logs/log" + DateTime.Now.Day + DateTime.Now.Month + DateTime.Now.Year + ".txt");
        }
        public void Must_Log_To_Console()
        {
            // Arrange

            var log = new JobLogger(AppDomain.CurrentDomain.BaseDirectory + "/logger4.cfg.json");



            using (var sw = new StringWriter())
            {
                Console.SetOut(sw);

                var expected =
                    string.Format(
                        DateTime.Now.ToShortDateString() + " - [INFO]: This must be INFO{0}" +
                        DateTime.Now.ToShortDateString() + " - [WARNING]: This must be WARNING{0}" +
                        DateTime.Now.ToShortDateString() + " - [ERROR]: This must be ERROR{0}", Environment.NewLine);

                // Act

                log.Info("This must be INFO");
                log.Warning("This must be WARNING");
                log.Error("This must be ERROR");

                //Assert

                Assert.AreEqual(sw.ToString(), expected);
            }
        }
        public void JobLogger_Test_MockFactory_Disable_Source()
        {
            // arrange
            var Mensaje           = "Hi!";
            var mockConfiguration = new Mock <ILogConfiguration>();

            mockConfiguration.Setup(x => x.AllowLevels).Returns(LogLevel.INFO);
            mockConfiguration.Setup(x => x.AllowSource).Returns(null);
            JobLogger.SetLogConfiguration(mockConfiguration.Object);

            var mocksource = new Mock <LogSourceBase>();

            mocksource.Setup(x => x.Log(Mensaje, LogLevel.WARNING)).Returns(Task.CompletedTask);

            var mockFactory = new Mock <ILogSourceFactory>();

            mockFactory.Setup(x => x.Create(LogSource.DATABASE)).Returns(mocksource.Object);
            JobLogger.SetLogSourceFactory(mockFactory.Object);

            // act
            JobLogger.Info(Mensaje).Wait();


            // assert
            mocksource.Verify(x => x.Log(Mensaje, LogLevel.WARNING), Times.Never());
            mocksource.Verify(x => x.Log(Mensaje, LogLevel.ERROR), Times.Never());
            mocksource.Verify(x => x.Log(Mensaje, LogLevel.INFO), Times.Never());

            mockFactory.Verify(x => x.Create(LogSource.DATABASE), Times.Never());
            mockFactory.Verify(x => x.Create(LogSource.CONSOLE), Times.Never());
            mockFactory.Verify(x => x.Create(LogSource.FILE), Times.Never());
        }
        /// <summary>
        /// 重载基类算法
        /// </summary>
        /// <returns></returns>
        internal override string GenerateData()
        {
            var start    = DateTime.Parse($"{DateTime.Now.Year}-{DateTime.Now.Month}-{DateTime.Now.Day}"); //统计当天时间
            var end      = DateTime.Parse($"{DateTime.Now.Year}-{DateTime.Now.Month}-{DateTime.Now.Day + 1}").AddSeconds(-1);
            var startStr = DateTime.Now.ToString("yyyyMMdd000000");                                        //统计当天时间
            var endStr   = end.ToString("yyyyMMddHHmmss");
            var week     = DateTime.Now.DayOfWeek;

            if (week == DayOfWeek.Saturday || week == DayOfWeek.Sunday)//周末跳过
            {
                return(string.Empty);
            }
            //获取当前登录状态
            List <BsonDocument> loginList = dataOp.FindAllByQuery("SysBehaviorLog", Query.And(Query.GTE("timeSort", startStr), Query.LTE("timeSort", endStr))).ToList();

            //2015.4.13 新增错误日志发送到125.77.255.2:8023端口进行存储,后续迁移
            JobLogger.Info($"登陆统计个数:{loginList.Count()}");
            if (loginList.Any())
            {
                return(string.Empty);
            }
            var errorMessage =
                $"截止{start.ToString()}至{end.ToString()} {DateTime.Now:ddd} 系统目前无任何用户登录进行操作请注意";

            var messageInfo = new PushMessageInfo()
            {
                content        = "系统登录预警",
                approvalUserId = this.JobParamsDoc.Text("approvalUserId"),
                errorMessage   = errorMessage,
                customerCode   = SysAppConfig.CustomerCode,
                logType        = "1"
            };

            return(messageInfo.ToJson());
        }
 protected override void OnStart(string[] args)
 {
     //Debugger.Launch();
     JobLogger.Info(string.Format("ServiceBaseOnStartV2"));
     scheduler.ListenerManager.AddJobListener(new SchedulerJobListener(), GroupMatcher <JobKey> .AnyGroup());
     scheduler.Start();
     JobLogger.Info(string.Format("添加首次执行任务,判断需要执行的事物"));
     ///默认调度器
     new QuartzManager().JobSchedulerMain(scheduler);
     JobLogger.Info(string.Format("{0} Start", _ServiceName));
 }
Esempio n. 6
0
 static void Main(string[] args)
 {
     //log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(AppDomain.CurrentDomain.BaseDirectory + "log4net.config"));
     //MZServiceRunner();
     //return;
     JobLogger.Info(string.Format("TopshelfOnStart"));
     HostFactory.Run(x =>
     {
         x.RunAsLocalSystem();
         x.Service <ServiceRunner>();
         x.SetDescription(string.Format("{0} Ver:{1}", System.Configuration.ConfigurationManager.AppSettings.Get("ServiceName"), System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString()));
         x.SetDisplayName(System.Configuration.ConfigurationManager.AppSettings.Get("ServiceDisplayName"));
         x.SetServiceName(System.Configuration.ConfigurationManager.AppSettings.Get("ServiceName"));
         x.EnablePauseAndContinue();
     });
 }
        public void JobLogger_Test_INFO_Only_Console()
        {
            // arrange
            var Mensaje           = "Hi!";
            var mockConfiguration = new Mock <ILogConfiguration>();

            mockConfiguration.Setup(x => x.AllowLevels).Returns(LogLevel.INFO);
            mockConfiguration.Setup(x => x.AllowSource).Returns(LogSource.CONSOLE);
            JobLogger.SetLogConfiguration(mockConfiguration.Object);

            // act
            JobLogger.Info(Mensaje).Wait();

            // assert
            mockConfiguration.VerifyGet(x => x.AllowLevels);
        }
Esempio n. 8
0
 /// <summary>
 /// 基类执行器初始化
 /// </summary>
 /// <param name="context"></param>
 internal void Init(IJobExecutionContext context)
 {
     try
     {
         _IJobExecutionContext = context;
         //初始化执行器
         _jobParamsDoc  = CustomerConfig.GetJobArgDoc(context.MergedJobDataMap.GetString("Parameters"));
         _statementData = CustomerConfig.GetJobArgDoc(context.MergedJobDataMap.GetString("statementData"));
     }
     catch (Exception ex)
     {
         JobLogger.Info("Job基类 初始化发生异常:" + ex.ToString());
     }
     finally
     {
         // JobLogger.Info("Job基类 结束执行 ");
     }
 }
        public void Must_Log_To_Database()
        {
            // Arrange

            ILogRepository logRepository = new FakeLogRepository();
            var            log           = new JobLogger(AppDomain.CurrentDomain.BaseDirectory + "/logger5.cfg.json", logRepository);
            IList <Log>    expected      = new List <Log>();

            expected.Add(new Log
            {
                Message = "This must be INFO Database log",
                Type    = "Info",
                Date    = DateTime.Now
            });

            expected.Add(new Log
            {
                Message = "This must be WARNING Database log",
                Type    = "Warning",
                Date    = DateTime.Now
            });

            expected.Add(new Log
            {
                Message = "This must be ERROR Database log",
                Type    = "Error",
                Date    = DateTime.Now
            });

            // Act

            log.Info("This must be INFO Database log");
            log.Warning("This must be WARNING Database log");
            log.Error("This must be ERROR Database log");

            var logs = logRepository.GetAll();

            // Assert

            Assert.AreEqual(logs.ToList().Count(), 3);
            Assert.AreEqual(logs.ToList()[0].ToString(), expected[0].ToString());
            Assert.AreEqual(logs.ToList()[1].ToString(), expected[1].ToString());
            Assert.AreEqual(logs.ToList()[2].ToString(), expected[2].ToString());
        }
Esempio n. 10
0
 /// <summary>
 /// 抽象方法
 /// </summary>
 /// <returns></returns>
 internal void Start(IJobExecutionContext context)
 {
     Init(context);//基类初始化对象;
     // Version Ver = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;
     //JobLogger.Info("{0} 开始执行", this.ClassName);
     try
     {
         var messageDoc = GenerateData();
         this.PushInfo(messageDoc);
     }
     catch (Exception ex)
     {
         JobLogger.Info("{0} 执行过程中发生异常:{1}", this.ClassName, ex.ToString());
     }
     finally
     {
         // JobLogger.Info("{0} 结束执行", this.ClassName);
     }
 }
        /// <summary>
        /// 重载基类算法,注意如果重复读取可能发生数据重复发送邮件
        /// </summary>
        /// <returns></returns>
        internal override string GenerateData()
        {
            var rabbitQueueMessageType = JobParamsDoc.Text("MQMessageType");
            var rabbitMQVirtualHost    = JobParamsDoc.Text("MQVirtualHost");
            var RetryCount             = JobParamsDoc.Text("RetryCount");
            var tableName = $"{rabbitQueueMessageType}_{rabbitMQVirtualHost}_{DateTime.Now.ToString("yyyy-MM")}";

            var week           = DateTime.Now.DayOfWeek;
            var retryTimeQuery = Query.And(Query.NE("DeQueueStage", 1), Query.GTE("EnQueueStage", 3)); //重试入队多次
            var query          = Query.Or(retryTimeQuery, Query.Exists("errorMsgs", true));            //有错误消息
            var limit          = 20;
            //获取当前登录状态
            var recordCount    = dataOp.FindCount(tableName, query);
            var topRecoredList = dataOp.FindLimitFieldsByQuery(tableName, query, new MongoDB.Driver.SortByDocument()
            {
            }, 0, limit, new string[] { "messageID", "errorMsgs", "MessageRouter", "MessageBody", "EnQueueStage" }).ToList();

            //2015.4.13 新增错误日志发送到125.77.255.2:8023端口进行存储,后续迁移
            if (!topRecoredList.Any())
            {
                return(string.Empty);
            }
            JobLogger.Info($"队列执行错误个数:{recordCount}");
            var errorMessage = new StringBuilder();

            errorMessage.AppendLine($"{DateTime.Now.ToString("yyyy-MM")}捕获到队列执行异常数据${recordCount}条.前{limit}内容如下:\n\r");
            topRecoredList.ForEach(doc =>
            {
                errorMessage.AppendLine($"{doc.ToJson()}");
            });
            var approvalUserId = this.JobParamsDoc.Text("approvalUserId");

            var messageInfo = new PushMessageInfo()
            {
                content        = $"小票上传重试错误预警,失败条数:{recordCount}",
                approvalUserId = approvalUserId,
                errorMessage   = errorMessage.ToString(),
                customerCode   = SysAppConfig.CustomerCode,
                logType        = "1"
            };

            return(messageInfo.ToJson());
        }
Esempio n. 12
0
        public void Execute(DataSet dataSet, CancellationToken cancellationToken)
        {
            try
            {
                //SubscriptionShippingNotificationDays = this.UnitOfWork.GetTypedRepository<IWebsiteConfigurationRepository>().GetOrCreateByName("SmartSupplyShippingNotification", SiteContext.Current.Website.Id);
                SubscriptionShippingNotificationDays = customSettings.Value.SmartSupplyShippingNotification;
                int priorDays = !string.IsNullOrEmpty(SubscriptionShippingNotificationDays) ? int.Parse(SubscriptionShippingNotificationDays) : 0;
                //BUSA-1168 : Added status check on SubscriptionBrasseler row to avoid cancelled smartsupply.
                var notifyDate = DateTimeOffset.Now.AddDays(priorDays);

                var subscriptionOrders = from sb in this.UnitOfWork.GetRepository <SubscriptionBrasseler>().GetTable()
                                         join co in this.UnitOfWork.GetRepository <CustomerOrder>().GetTable()
                                         on sb.CustomerOrderId equals co.Id
                                         where co.Status == "SubscriptionOrder" && (DbFunctions.TruncateTime(sb.NextDelieveryDate) == DbFunctions.TruncateTime(notifyDate))
                                         select sb;

                if (subscriptionOrders.Count() == 0)
                {
                    return;
                }
                this.UnitOfWork.BeginTransaction();
                var repository = this.UnitOfWork.GetRepository <CustomerOrder>().GetTable();

                if (repository != null)
                {
                    var emailList = this.UnitOfWork.GetTypedRepository <IEmailListRepository>().GetOrCreateByName("SmartSupplyShippingNotificationEmailList", "SmartSupply Shipping Notification");
                    foreach (var subscriptionOrder in subscriptionOrders)
                    {
                        JobLogger.Info("id" + subscriptionOrder.Id + " /n   custmrordrid" + subscriptionOrder.CustomerOrderId + "  parentid"
                                       + subscriptionOrder.ParentCustomerOrderId);
                        dynamic emailModel = new ExpandoObject();
                        PopulateEmailModel(subscriptionOrder, emailModel, repository);
                        EmailService.SendEmailList(emailList.Id, emailTo, emailModel, emailList.Subject + " " + subscriptionOrder.NextDelieveryDate.ToString("MM-dd-yy"), this.UnitOfWork);
                    }
                }
            }
            catch (Exception ex)
            {
                LogHelper.For(this).Error(ex);
                throw;
            }
        }
 /// <summary>
 /// Job运行日志记录,SchedulerJobListener的运行日志
 /// </summary>
 /// <param name="jobInfo"></param>
 /// <param name="executionTime"></param>
 /// <param name="executionDuration"></param>
 /// <param name="runLog"></param>
 public void WriteBackgroundJoLog(BackgroundJob jobInfo, DateTime executionTime, double executionDuration, string runLog)
 {
     JobLogger.Info($"WriteBackgroundJoLog调度{jobInfo.name} job内容:{runLog.Length}");
     //默认发送通过配置文件判断是否发送日志信息,后续可通过任务进行调度进行配置文件修改,更新各大站点最新的配置信息
     if (CustomerConfig.NeedSendLog)
     {
         BackgroundJobLog backgroundJobLog = new BackgroundJobLog
         {
             logId         = System.Guid.NewGuid().ToString(),
             jobId         = jobInfo.jobId,
             name          = jobInfo.name,
             accemblyName  = jobInfo.assemblyName,
             className     = jobInfo.className,
             jobType       = jobInfo.jobType,
             executionTime = executionTime.ToString("yyyy-MM-dd HH:mm:ss"),
             // ReSharper disable once SpecifyACultureInStringConversionExplicitly
             executionDuration = executionDuration.ToString(),
             createDate        = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
             runLog            = runLog
         };
         BackgroundJobWebAPIHelper.WriteBackgroundJoLog(backgroundJobLog);
     }
 }
        public virtual void Execute(DataSet dataSet, CancellationToken cancellationToken)
        {
            try
            {
                var date = DateTimeOffset.Now.Date;

                var subscriptionOrder = from co in this.UnitOfWork.GetRepository <CustomerOrder>().GetTable()
                                        join sb in this.UnitOfWork.GetRepository <SubscriptionBrasseler>().GetTable()
                                        on co.Id equals sb.CustomerOrderId
                                        where co.Status == "SubscriptionOrder" && (DbFunctions.TruncateTime(sb.NextDelieveryDate) == DbFunctions.TruncateTime(date))
                                        select sb;

                JobLogger.Info(subscriptionOrder.Count() + " :Count of Subscription Order");

                if (subscriptionOrder.Count() == 0)
                {
                    return;
                }

                JobDefinition jobDefinition = (from jd in this.UnitOfWork.GetRepository <JobDefinition>().GetTable()
                                               join jds in this.UnitOfWork.GetRepository <JobDefinitionStep>().GetTable()
                                               on jd.Id equals jds.JobDefinitionId
                                               join jdsp in this.UnitOfWork.GetRepository <JobDefinitionStepParameter>().GetTable()
                                               on jds.Id equals jdsp.JobDefinitionStepId
                                               where jd.Name == "SmartSupply Submit Job"
                                               select jd).FirstOrDefault();

                JobLogger.Info(jobDefinition.Name + " :Job Definition");

                if (jobDefinition == null)
                {
                    return;
                }

                foreach (var subscriptionOrderJob in subscriptionOrder)
                {
                    // Check if Subscription Submit job is already scheduled.
                    var scheduleDateTime = from ijp in this.UnitOfWork.GetRepository <IntegrationJobParameter>().GetTable()
                                           join ij in this.UnitOfWork.GetRepository <IntegrationJob>().GetTable()
                                           on ijp.IntegrationJobId equals ij.Id
                                           join jd in this.UnitOfWork.GetRepository <JobDefinition>().GetTable()
                                           on ij.JobDefinitionId equals jd.Id
                                           where jd.Name.ToUpper() == "SMARTSUPPLY SUBMIT JOB" && subscriptionOrderJob.CustomerOrderId.ToString().ToUpper() == ijp.Value.ToUpper() && DbFunctions.TruncateTime(ij.ScheduleDateTime) == DbFunctions.TruncateTime(DateTimeOffset.Now)
                                           select DbFunctions.TruncateTime(ij.ScheduleDateTime);

                    // If Subscription Submit job is not scheduled, then schedule it.
                    if (scheduleDateTime.Count() == 0)
                    {
                        Collection <JobDefinitionStepParameter> parameters = new Collection <JobDefinitionStepParameter>();
                        if (jobDefinition != null)
                        {
                            foreach (JobDefinitionStepParameter definitionStepParameter in jobDefinition.JobDefinitionSteps.SelectMany <JobDefinitionStep, JobDefinitionStepParameter>((Func <JobDefinitionStep, IEnumerable <JobDefinitionStepParameter> >)(s => (IEnumerable <JobDefinitionStepParameter>)s.JobDefinitionStepParameters)))
                            {
                                if (definitionStepParameter.Name.EqualsIgnoreCase("SmartSupplyOrderId"))
                                {
                                    definitionStepParameter.Value = subscriptionOrderJob.CustomerOrderId.ToString();
                                }
                                else if (definitionStepParameter.Name.EqualsIgnoreCase("Ship Now"))
                                {
                                    definitionStepParameter.Value = "false";
                                }
                                parameters.Add(definitionStepParameter);
                            }

                            if (parameters.Count() == 0)
                            {
                                return;
                            }

                            this.IntegrationJobSchedulingService.Value.ScheduleBatchIntegrationJob("SmartSupply Submit Job", null, parameters, null, new DateTime?(), false);
                            JobLogger.Info("Scheduled for Customer Order ID = " + subscriptionOrderJob.CustomerOrderId + " : Scheduled Date = " + subscriptionOrderJob.NextDelieveryDate.ToString());
                        }
                    }
                    else
                    {
                        JobLogger.Info("Already Scheduled for Customer Order ID = " + subscriptionOrderJob.CustomerOrderId + " : Scheduled Date = " + subscriptionOrderJob.NextDelieveryDate.ToString());
                    }
                }
            }
            catch (Exception ex)
            {
                LogHelper.For(this).Error(ex);
                throw;
            }
            finally
            {
            }
        }
Esempio n. 15
0
 protected override void OnPause()
 {
     scheduler.PauseAll();
     JobLogger.Info(string.Format("{0} Pause", _ServiceName));
 }
Esempio n. 16
0
        /// <summary>
        /// 重载基类算法
        /// </summary>
        /// <returns></returns>
        internal override string GenerateData()
        {
            var now = DateTime.Now;                                                                        //统一记录当前运行时刻

            var start    = DateTime.Parse($"{DateTime.Now.Year}-{DateTime.Now.Month}-{DateTime.Now.Day}"); //统计当天时间
            var end      = DateTime.Parse($"{DateTime.Now.Year}-{DateTime.Now.Month}-{DateTime.Now.Day + 1}").AddSeconds(-1);
            var startStr = DateTime.Now.ToString("yyyy-MM-dd 00:00:00");                                   //统计当天时间
            var endStr   = end.ToString("yyyy-MM-dd-HH HH:mm:ss");
            var extArray = SysAppConfig.needCutThumbExtArray;

            var limitCondition = this.JobParamsDoc.Double("limitCondition");

            if (limitCondition <= 0)
            {
                limitCondition = 0.05;
            }
            //2015.4.13 新增错误日志发送到125.77.255.2:8023端口进行存储,后续迁移
            var serverDiskAlertLimit = SysAppConfig.ServerDiskAlertLimit;

            System.IO.DriveInfo[] drives = System.IO.DriveInfo.GetDrives();
            var pushInfoStr    = new StringBuilder();
            var detaileContent = new StringBuilder();
            var needSend       = false;

            foreach (System.IO.DriveInfo drive in drives.Where(c => c.DriveType == DriveType.Fixed || c.DriveType == DriveType.Network))
            {
                try
                {
                    if (drive.IsReady)
                    {
                        long totalSize          = drive.TotalSize / 1024 / 1024 / 1024;          //MB//总大小
                        long availableFreeSpace = drive.AvailableFreeSpace / 1024 / 1024 / 1024; //MB//可用大小
                        var  usedSpace          = totalSize - availableFreeSpace;                //MB//
                        var  avaiablePercent    = double.Parse(availableFreeSpace.ToString()) / totalSize;

                        if (availableFreeSpace <= serverDiskAlertLimit || avaiablePercent <= limitCondition) //空间剩余5%报警
                        {
                            if (pushInfoStr.Length <= 0)
                            {
                                pushInfoStr.AppendFormat("磁盘空间提醒:", drive.Name);
                            }
                            pushInfoStr.AppendFormat("{0}空间不足 ", drive.Name);
                            detaileContent.AppendFormat("{0}总:{1}G 已用:{2}G 可用:{3}G\n\r", drive.Name, totalSize, usedSpace, availableFreeSpace);
                            needSend = true;
                        }
                    }
                }
                catch (System.IO.IOException ex)
                {
                    JobLogger.Info(ex.Message);
                }
                catch (Exception ex)
                {
                    JobLogger.Info(ex.Message);
                }
            }

            if (!needSend)
            {
                return(string.Empty);
            }
            JobLogger.Info("磁盘进入警告");
            var errorMessage = $"截止{start.ToString()}至{end.ToString()} {DateTime.Now:ddd} {pushInfoStr}";

            var messageInfo = new PushMessageInfo()
            {
                approvalUserId = this.JobParamsDoc.Text("approvalUserId"),
                errorMessage   = errorMessage,
                content        = detaileContent.ToString(),
                logType        = "4",
                customerCode   = SysAppConfig.CustomerCode,
                fileStatisDate = now.ToString("yyyy-MM-dd")
            };

            return(messageInfo.ToJson());
            //模拟发送post请求
        }
Esempio n. 17
0
 protected override void OnContinue()
 {
     scheduler.ResumeAll();
     JobLogger.Info(string.Format("{0} Continue", _ServiceName));
 }
Esempio n. 18
0
 protected override void OnStop()
 {
     scheduler.Shutdown(false);
     JobLogger.Info(string.Format("{0} Stop", _ServiceName));
 }