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}'")); }
public void DeleteJobLog(int JobLogId) { JobLog Joblog = _db.JobLog.Find(JobLogId); _db.JobLog.Remove(Joblog); _db.SaveChanges(); }
/// <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))); }
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); }
public static JobLog Insert(JobLog obj) { //if (logging == true) //{ return(repository.Insert(obj)); //} //else return obj; }
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); }
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); }
/// <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); }
public void Delete(JobLog obj) { using (InsightEntities db = new InsightEntities()) { db.JobLogs.Attach(obj); db.JobLogs.Remove(obj); db.SaveChanges(); } }
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); }
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); }
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); }
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); } }
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(); }
// 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); }
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(); } }
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()); }
///<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); }
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; } }
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); }
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(); } }
/// <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); } }
///<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)); } }
//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); } }