public void Log(JobLog log) => this.conn.Insert(new DbJobLog
 {
     Status    = log.Status,
     CreatedOn = log.CreatedOn,
     JobName   = log.JobName,
     Error     = log.Error
 });
        public async Task ProcessDeadLetteredMessage_GivenMessageAndLogIsUpdated_LogsInformation()
        {
            // Arrange
            const string jobId = "job-id-1";

            JobLog jobLog = new JobLog
            {
                Id = "job-log-id-1"
            };

            Message message = new Message();

            message.UserProperties.Add("jobId", jobId);

            IJobManagement jobManagement = CreateJobManagement();

            jobManagement
            .AddJobLog(Arg.Is(jobId), Arg.Any <JobLogUpdateModel>())
            .Returns(jobLog);

            ILogger logger = CreateLogger();

            IDeadletterService service = CreateJobHelperService(jobManagement, logger);

            // Act
            await service.Process(message);

            // Assert
            logger
            .Received(1)
            .Information(Arg.Is($"A new job log was added to inform of a dead lettered message with job log id '{jobLog.Id}' on job with id '{jobId}'"));
        }
Exemple #3
0
        public void DeleteJobLog(int JobLogId)
        {
            JobLog Joblog = _db.JobLog.Find(JobLogId);

            _db.JobLog.Remove(Joblog);
            _db.SaveChanges();
        }
Exemple #4
0
        /// <summary>
        /// 重置应用
        /// 清空作业、作业项、统计、错误,开始时间设为本月一号
        /// </summary>
        /// <returns></returns>
        public ActionResult ResetApp()
        {
            var ids = Request["keys"].SplitAsInt(",");

            if (!ids.Any())
            {
                return(JsonRefresh("未选中项!"));
            }

            var now = DateTime.Now;

            foreach (var appid in ids)
            {
                // 清空作业
                var jobs = JobX.FindAllByAppID2(appid);
                foreach (var job in jobs)
                {
                    job.Start = new DateTime(now.Year, now.Month, 1);
                    job.ResetOther();
                }

                // 清空日志
                var jobItems = JobLog.FindAllByAppID(appid);
                foreach (var jobItem in jobItems)
                {
                    jobItem.Delete();
                }

                // 清空错误
                JobError.DeleteByAppId(appid);
            }

            return(JsonRefresh("操作完毕!"));
        }
        public Task <ApiResponse <JobLog> > AddJobLog(string jobId, JobLogUpdateModel jobLogUpdateModel)
        {
            if (!_jobs.ContainsKey(jobId))
            {
                throw new Exception("Job not found");
            }

            if (!_jobLogs.ContainsKey(jobId))
            {
                _jobLogs.Add(jobId, new List <JobLog>());
            }

            Job job = _jobs[jobId];

            JobLog jobLog = new JobLog()
            {
                CompletedSuccessfully = jobLogUpdateModel.CompletedSuccessfully,
                Id             = Guid.NewGuid().ToString(),
                ItemsFailed    = jobLogUpdateModel.ItemsFailed,
                ItemsProcessed = jobLogUpdateModel.ItemsProcessed,
                ItemsSucceeded = jobLogUpdateModel.ItemsSucceeded,
                JobId          = jobId,
                Outcome        = jobLogUpdateModel.Outcome,
                Timestamp      = DateTime.UtcNow,
            };

            if (job.RunningStatus == RunningStatus.Queued)
            {
                job.RunningStatus = RunningStatus.InProgress;
            }

            _jobLogs[jobId].Add(jobLog);

            return(Task.FromResult(new ApiResponse <JobLog>(System.Net.HttpStatusCode.OK, jobLog)));
        }
Exemple #6
0
        public override void ExecuteCommand()
        {
            // Start by fetching the latest log
            var joblogs = JobLog.LoadJobLogs(StorageAccount);

            // Iterate over each log
            foreach (var joblog in joblogs)
            {
                Log.Info("Cleaning {0}", joblog.JobName);
                foreach (var blob in joblog.Blobs.Where(b => (DateTime.UtcNow - b.ArchiveTimestamp) > MaxAge.Value))
                {
                    try
                    {
                        if (!WhatIf)
                        {
                            // Only delete if it matches.
                            blob.Blob.DeleteIfExists(
                                accessCondition: AccessCondition.GenerateIfMatchCondition(blob.Blob.Properties.ETag));
                        }
                        Log.Info("Deleted {0}", blob.Blob.Name);
                    }
                    catch (Exception ex)
                    {
                        Log.ErrorException("Failed to delete " + blob.Blob.Name, ex);
                    }
                }
            }
        }
        public async Task AddJobLog_Called_ReturnsJobLog()
        {
            string jobId = "5678";

            IJobsApiClient jobsApiClient             = Substitute.For <IJobsApiClient>();
            JobManagementResiliencePolicies policies = new JobManagementResiliencePolicies
            {
                JobsApiClient = Policy.NoOpAsync()
            };
            IMessengerService messengerService = Substitute.For <IMessengerService>();
            ILogger           logger           = Substitute.For <ILogger>();

            JobLog jobLog = new JobLog
            {
                JobId = jobId
            };
            ApiResponse <JobLog> jobLogApiResponse = new ApiResponse <JobLog>(HttpStatusCode.OK, jobLog);

            JobLogUpdateModel jobLogUpdateModel = new JobLogUpdateModel();

            jobsApiClient
            .AddJobLog(jobId, jobLogUpdateModel)
            .Returns(jobLogApiResponse);

            JobManagement jobManagement = new JobManagement(jobsApiClient, logger, policies, messengerService);

            //Act
            JobLog result = await jobManagement.AddJobLog(jobId, jobLogUpdateModel);

            Assert.AreEqual(result, jobLog);

            await jobsApiClient
            .Received(1)
            .AddJobLog(jobId, jobLogUpdateModel);
        }
Exemple #8
0
 public static JobLog Insert(JobLog obj)
 {
     //if (logging == true)
     //{
     return(repository.Insert(obj));
     //}
     //else return obj;
 }
Exemple #9
0
        public async Task <JobLog> AddJobLog(string jobId, JobLogUpdateModel jobLogUpdateModel)
        {
            ApiResponse <JobLog> jobLogResponse = await _jobsApiClientPolicy.ExecuteAsync(() => _jobsApiClient.AddJobLog(jobId, jobLogUpdateModel));

            JobLog jobLog = jobLogResponse?.Content;

            return(jobLog);
        }
Exemple #10
0
        private async Task <JobLog> GetJobLog(ITurnContext turnContext)
        {
            // Get the job log.
            // The job log is a dictionary of all outstanding jobs in the system.
            JobLog jobLog = await _jobLogPropertyAccessor.GetAsync(turnContext, () => new JobLog());

            return(jobLog);
        }
Exemple #11
0
        /// <summary>
        /// Synchronizes the goods information execute.
        /// </summary>
        /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
        public override bool TaskExec(JobLog log, string mod, string rem)
        {
            foreach (var item in components)
            {
                item.TaskExec(log, mod, rem);
            }

            return(true);
        }
Exemple #12
0
 public void Delete(JobLog obj)
 {
     using (InsightEntities db = new InsightEntities())
     {
         db.JobLogs.Attach(obj);
         db.JobLogs.Remove(obj);
         db.SaveChanges();
     }
 }
Exemple #13
0
 public JobLog Put(int id, [FromBody] JobLog jobLog)
 {
     if (ModelState.IsValid)
     {
         jobLog = _jobLogs.UpdateJobLog(jobLog);
         _logger.Log(LogLevel.Information, this, LogFunction.Update, "Job Log Updated {JobLog}", jobLog);
     }
     return(jobLog);
 }
Exemple #14
0
 public JobLog Post([FromBody] JobLog jobLog)
 {
     if (ModelState.IsValid)
     {
         jobLog = _jobLogs.AddJobLog(jobLog);
         _logger.Log(LogLevel.Information, this, LogFunction.Create, "Job Log Added {JobLog}", jobLog);
     }
     return(jobLog);
 }
Exemple #15
0
 public void Update(JobLog obj)
 {
     using (InsightEntities db = new InsightEntities())
     {
         db.JobLogs.Attach(obj);
         db.Entry(obj).State = System.Data.Entity.EntityState.Modified;
         db.SaveChanges();
     }
 }
        public async Task BroadCastJobLog(string prefix, string message, ProgressLogType type)
        {
            var text = $"{prefix} => {message}";
            var log  = new JobLog {
                Type = type, Value = text
            };

            await _jobHubContext.Clients.All.SendAsync(JobReportLogMethod, log);
        }
Exemple #17
0
 public JobLog Insert(JobLog obj)
 {
     using (InsightEntities db = new InsightEntities())
     {
         db.JobLogs.Add(obj);
         db.SaveChanges();
         return(obj);
     }
 }
        public override void ExecuteCommand()
        {
            var joblogs = JobLog.LoadJobLogs(StorageAccount);

            // List logs!
            Log.Info("Available Logs: ");
            foreach (var log in joblogs)
            {
                Log.Info("* {0}", log.JobName);
            }
        }
Exemple #19
0
        void UpdateOnline(IApp app, JobLog ji, INetSession ns)
        {
            var online = GetOnline(app, ns);

            online.Total   += ji.Total;
            online.Success += ji.Success;
            online.Error   += ji.Error;
            online.Cost    += ji.Cost;
            online.Speed    = ji.Speed;
            online.LastKey  = ji.Key;
            online.SaveAsync();
        }
Exemple #20
0
        // Creates and "starts" a new job.
        private JobLog.JobData CreateJob(ITurnContext turnContext, JobLog jobLog)
        {
            JobLog.JobData jobInfo = new JobLog.JobData
            {
                TimeStamp    = DateTime.Now.ToBinary(),
                Conversation = turnContext.Activity.GetConversationReference(),
            };

            jobLog[jobInfo.TimeStamp] = jobInfo;

            return(jobInfo);
        }
Exemple #21
0
        public void Add(string details)
        {
            var jobLog = new JobLog();

            jobLog.DateRun = DateTime.Now;
            jobLog.Details = details;

            using (var context = new MusicEntities1())
            {
                context.JobLog.Add(jobLog);
                context.SaveChanges();
            }
        }
Exemple #22
0
        public Task LogAsync(Guid jobUid, string message, JobLogLevelEnum level, string Exception = null)
        {
            var newJobLog = new JobLog();

            newJobLog.JobLogId  = Guid.NewGuid();
            newJobLog.Exception = Exception;
            newJobLog.JobUid    = jobUid;
            newJobLog.LevelId   = (short)level;
            newJobLog.LogTime   = DateTime.UtcNow;
            newJobLog.Message   = message;
            _context.Add(newJobLog);
            return(_context.SaveChangesAsync());
        }
Exemple #23
0
        ///<summary>Inserts one JobLog into the database.  Provides option to use the existing priKey.  Doesn't use the cache.</summary>
        public static long InsertNoCache(JobLog jobLog, bool useExistingPK)
        {
            bool   isRandomKeys = Prefs.GetBoolNoCache(PrefName.RandomPrimaryKeys);
            string command      = "INSERT INTO joblog (";

            if (!useExistingPK && isRandomKeys)
            {
                jobLog.JobLogNum = ReplicationServers.GetKeyNoCache("joblog", "JobLogNum");
            }
            if (isRandomKeys || useExistingPK)
            {
                command += "JobLogNum,";
            }
            command += "JobNum,UserNumChanged,UserNumExpert,UserNumEngineer,DateTimeEntry,Description,MainRTF,Title,RequirementsRTF,TimeEstimate) VALUES(";
            if (isRandomKeys || useExistingPK)
            {
                command += POut.Long(jobLog.JobLogNum) + ",";
            }
            command +=
                POut.Long(jobLog.JobNum) + ","
                + POut.Long(jobLog.UserNumChanged) + ","
                + POut.Long(jobLog.UserNumExpert) + ","
                + POut.Long(jobLog.UserNumEngineer) + ","
                + DbHelper.Now() + ","
                + "'" + POut.String(jobLog.Description) + "',"
                + DbHelper.ParamChar + "paramMainRTF,"
                + "'" + POut.String(jobLog.Title) + "',"
                + DbHelper.ParamChar + "paramRequirementsRTF,"
                + "'" + POut.Long(jobLog.TimeEstimate.Ticks) + "')";
            if (jobLog.MainRTF == null)
            {
                jobLog.MainRTF = "";
            }
            OdSqlParameter paramMainRTF = new OdSqlParameter("paramMainRTF", OdDbType.Text, POut.StringParam(jobLog.MainRTF));

            if (jobLog.RequirementsRTF == null)
            {
                jobLog.RequirementsRTF = "";
            }
            OdSqlParameter paramRequirementsRTF = new OdSqlParameter("paramRequirementsRTF", OdDbType.Text, POut.StringParam(jobLog.RequirementsRTF));

            if (useExistingPK || isRandomKeys)
            {
                Db.NonQ(command, paramMainRTF, paramRequirementsRTF);
            }
            else
            {
                jobLog.JobLogNum = Db.NonQ(command, true, "JobLogNum", "jobLog", paramMainRTF, paramRequirementsRTF);
            }
            return(jobLog.JobLogNum);
        }
Exemple #24
0
        private string[] FormatExportRecord(object obj)
        {
            JobLog jobLog = (JobLog)obj;

            return(new string[] {
                jobLog.JobID,
                FormatHelper.TODateTimeString(FormatHelper.TODateInt(jobLog.StartDateTime), FormatHelper.TOTimeInt(jobLog.StartDateTime)),
                FormatHelper.TODateTimeString(FormatHelper.TODateInt(jobLog.EndDateTime), FormatHelper.TOTimeInt(jobLog.EndDateTime)),
                jobLog.UsedTime.ToString(),
                jobLog.ProcessCount.ToString(),
                jobLog.Result,
                jobLog.ErrorMessage
            });
        }
        private void FollowLog(JobLog log)
        {
            // Wait for PollingPeriod seconds
            Thread.Sleep(PollingPeriod.Value);

            // Grab new entries
            var entries = log.OrderedEntries().TakeWhile(l => l.Timestamp > _lastEntryUtc).Take(NumberOfEntries.Value);

            foreach (var entry in entries)
            {
                WriteEntry(log, entry);
                _lastEntryUtc = entry.Timestamp;
            }
        }
Exemple #26
0
        public async Task <int> EnterLog(Guid jobid, String logtext)
        {
            JobLog joblog = new JobLog()
            {
                JobId = jobid, Logcomment = logtext, Logdate = DateTime.Now, LogId = Guid.NewGuid()
            };

            _jobmanagementDBContext.JobLogs.Add(joblog);
            if (await _jobmanagementDBContext.SaveChangesAsync() > 0)
            {
                return(1);
            }
            return(0);
        }
Exemple #27
0
        private async Task WriteLog(JobLog info)
        {
            var log = new JobLog {
                BeginTime = info.BeginTime,
                EndTime   = info.EndTime,
                JobName   = info.JobName,
                Seconds   = info.Seconds,
                Result    = info.Result.Length > 1999 ? info.Result.Substring(0, 1999) : info.Result,
                ErrorMsg  = info.ErrorMsg,
                Level     = info.Level
            };
            //知识点:DbContext实例不能在OnConfiguring中使用。原因:任务随系统启动时,是从管道中(Configure)启动的,这里会使OnConfiguring创建第二个DbContext,从而报错
            //注意此处一定要在IOCJobFactory中创建scoped作用域,因为DbContex的作用域是scoped,否则将无法解析
            var unitOfWork = _serviceProvider.GetService(typeof(IAdmUnitOfWork)) as IAdmUnitOfWork;
            var dbContext  = unitOfWork.GetDbContext() as AdmDbContext;

            dbContext.JobLogs.Add(log);
            await dbContext.SaveChangesAsync();

            //输出log到控制台
            if (log.Level == "错误")
            {
                var msg = string.Format("--------------【{0} Job执行出错】-------------- \r\n开始时间:{1}\r\n结束时间:{2}\r\n耗    时:{3}\r\n错误消息:\r\n{4}\r\n -------------------------------------------",
                                        log.JobName, log.BeginTime, log.EndTime, log.Seconds, log.ErrorMsg);
                msg.WriteErrorLine();
                //发送邮件
                var mailSetting = dbContext.MailSettings.AsQueryable().FirstOrDefault();
                if (mailSetting != null && mailSetting.Notify)
                {
                    var config = new MailConfig {
                        Code    = mailSetting.Code,
                        Fr      = mailSetting.Fr,
                        FrHost  = mailSetting.FrHost,
                        ToArry  = mailSetting.To.Trim().Split(','),
                        CcArray = string.IsNullOrEmpty(mailSetting.Cc) ? Array.Empty <string>() : mailSetting.Cc.Trim().Split(',')
                    };
                    var mail = new MailModel {
                        Title = $"【Job[{log.JobName}]执行出错】",
                        Body  = msg
                    };
                    EmailService.PostEmail(config, mail);
                }
            }
            else
            {
                string.Format("--------------【{0} 执行成功】-------------- \r\n开始时间:{1}\r\n结束时间:{2}\r\n耗    时:{3} \r\n----------------------------------------------",
                              log.JobName, log.BeginTime, log.EndTime, log.Seconds).WriteSuccessLine();
            }
        }
Exemple #28
0
        /// <summary>
        /// job开始执行
        /// </summary>
        /// <param name="context"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public async Task JobToBeExecuted(IJobExecutionContext context, CancellationToken cancellationToken = default)
        {
            var jobInfo = context.Trigger.JobDataMap.GetMapData <JobInfo>();

            using (var scope = _provider.CreateScope())
                using (var _dbContext = scope.ServiceProvider.GetRequiredService <JobDbContext>())
                {
                    var jobExecutor = await _dbContext.JobExecuter.Include(x => x.RegistryHosts)
                                      .FirstOrDefaultAsync(x => x.Id == jobInfo.ExecutorId);

                    if (jobExecutor == null || jobExecutor.RegistryHosts.IsNullOrEmptyList())
                    {
                        _logger.LogError("没有找到执行器,任务中断");
                        context.Trigger.JobDataMap.Put(JobConstant.MAP_DATA_HAS_ERROR, true);
                        return;
                    }

                    // 找到合适的执行host
                    var registryHost = Enumeration.FromValue <SelectorType>(jobInfo.SelectorType)
                                       .Selector?.SelectHost(jobExecutor.RegistryHosts, jobInfo);
                    if (registryHost == null)
                    {
                        _logger.LogError("执行选择器没有设置,任务中断");
                        context.Trigger.JobDataMap.Put(JobConstant.MAP_DATA_HAS_ERROR, true);
                        return;
                    }

                    context.Trigger.JobDataMap.Put(JobConstant.MAP_DATA_HAS_ERROR, false);
                    context.Trigger.JobDataMap.SetMapData(registryHost);

                    var logInfo = new JobLog()
                    {
                        StartTime       = DateTime.Now,
                        JobId           = jobInfo.Id,
                        ExecuterHandler = jobInfo.ExecutorHandler,
                        ExecuterParam   = jobInfo.ExecutorParam,
                        ExecuterId      = jobInfo.ExecutorId,
                        ExecuterHost    = registryHost.Host,
                        Status          = JobLogStatus.Running
                    };

                    await _dbContext.JobLog.AddAsync(logInfo);

                    await _dbContext.SaveChangesAsync();

                    context.Trigger.JobDataMap.Put(JobConstant.MAP_DATA_EXECUTER_HOST_KEY, registryHost.Host);
                    context.Trigger.JobDataMap.SetMapData(logInfo);
                }
        }
Exemple #29
0
 ///<summary>Inserts one JobLog into the database.  Returns the new priKey.  Doesn't use the cache.</summary>
 public static long InsertNoCache(JobLog jobLog)
 {
     if (DataConnection.DBtype == DatabaseType.MySql)
     {
         return(InsertNoCache(jobLog, false));
     }
     else
     {
         if (DataConnection.DBtype == DatabaseType.Oracle)
         {
             jobLog.JobLogNum = DbHelper.GetNextOracleKey("joblog", "JobLogNum");                  //Cacheless method
         }
         return(InsertNoCache(jobLog, true));
     }
 }
Exemple #30
0
        //private List<VIPSummaryClass> VIPSummaryData(Guid guid)
        //{
        //	using (AppF5DataEntities db = new AppF5DataEntities())
        //	{
        //		List<VIPSummaryClass> vipdata = db.Database.SqlQuery<VIPSummaryClass>(string.Format(@"
        //							SELECT DeviceData.Name As f5Name, VIP.name As VIPNAME,  REPLACE(VIP.destination,'/Common/','') AS VIPIP, REPLACE(VIP.pool,'/Common/','') AS pool, VIPStats.StatusAvailabilityState, VIPStats.StatusEnabledState , VIPStats.StatusStatusReason
        //							FROM DeviceData
        //							INNER JOIN  JobLog ON DeviceData.jobguid = JobLog.guid
        //							INNER JOIN  VIP ON DeviceData.jobguid = VIP.jobguid AND DeviceData.hostname = VIP.f5HostName
        //							INNER JOIN  VIPStats ON VIP.guid = VIPStats.VIPGuid
        //							WHERE (DeviceData.failoverState = N'active') AND (JobLog.guid = '{0}') AND (DeviceData.selfDevice = N'true')
        //							", guid)).ToList();
        //		return vipdata;
        //	}
        //}

        public string EmailCertData()
        {
            try
            {
                using (AppF5DataEntities dc = new AppF5DataEntities())
                {
                    JobLog jl   = dc.JobLogs.OrderByDescending(a => a.endTime).FirstOrDefault();
                    var    data = GetCerts_(jl.guid);
                    return(SendCertEmail(data));
                }
            }
            catch (Exception ex)
            {
                return(ex.Message);
            }
        }