using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Tango.BL; using Tango.BL.Entities; using Tango.BL.Enumerations; using Tango.Core; using Tango.Core.DI; using Tango.Integration.ExternalBridge; using Tango.Integration.Operation; using Tango.MachineStudio.Common.StudioApplication; namespace Tango.MachineStudio.Common.JobRunsLogging { public class DefaultJobRunsLogger : ExtendedObject, IJobRunsLogger { private ObservablesContext _context; private DateTime _start_date; private Job _job; private IStudioApplicationManager applicationManager; public void Init(IStudioApplicationManager appManager) { applicationManager = appManager; _context = ObservablesContext.CreateDefault(); applicationManager.ConnectedMachineChanged += ApplicationManager_ConnectedMachineChanged; } private void ApplicationManager_ConnectedMachineChanged(object sender, IExternalBridgeClient machine) { if (machine != null) { machine.PrintingStarted -= Machine_PrintingStarted; machine.PrintingStarted += Machine_PrintingStarted; machine.PrintingCompleted -= Machine_PrintingCompleted; machine.PrintingCompleted += Machine_PrintingCompleted; machine.PrintingAborted -= Machine_PrintingAborted; machine.PrintingAborted += Machine_PrintingAborted; machine.PrintingFailed -= Machine_PrintingFailed; machine.PrintingFailed += Machine_PrintingFailed; } } private void Machine_PrintingFailed(object sender, PrintingFailedEventArgs e) { if (e.Job.Guid == _job.Guid) { Task.Factory.StartNew(() => { _context.JobRuns.Add(new JobRun() { StartDate = _start_date, EndDate = DateTime.UtcNow, JobGuid = _job.Guid, JobRunStatus = JobRunStatus.Failed, EndPosition = e.JobHandler.Status.Progress, FailedMessage = e.Exception.Message, }); _context.SaveChanges(); }); } } private void Machine_PrintingAborted(object sender, PrintingEventArgs e) { if (e.Job.Guid == _job.Guid) { Task.Factory.StartNew(() => { _context.JobRuns.Add(new JobRun() { StartDate = _start_date, EndDate = DateTime.UtcNow, JobGuid = _job.Guid, EndPosition = e.JobHandler.Status.Progress, JobRunStatus = JobRunStatus.Aborted, }); _context.SaveChanges(); }); } } private void Machine_PrintingCompleted(object sender, PrintingEventArgs e) { if (e.Job.Guid == _job.Guid) { Task.Factory.StartNew(() => { _context.JobRuns.Add(new JobRun() { StartDate = _start_date, EndDate = DateTime.UtcNow, JobGuid = _job.Guid, EndPosition = e.JobHandler.Status.Progress, JobRunStatus = JobRunStatus.Completed, }); _context.SaveChanges(); }); } } private void Machine_PrintingStarted(object sender, PrintingEventArgs e) { _job = e.Job; _start_date = DateTime.UtcNow; } } }