/// <summary>
        /// Logs the entry via datalogger - either creating a new entry or updating an existing
        /// </summary>
        /// <param name="logEntry">The log entry.</param>
        private void LogOutput(string docId, JobLogItem logEntry)
        {
            PhysicalDeviceJobLogger logger = _logData.FirstOrDefault(x => x.JobName.Contains(docId, StringComparison.OrdinalIgnoreCase));

            if (logger == null)
            {
                // Create new entry if we don't already have one
                logger = CreateDataLogItem(docId);
                if (logEntry == null)
                {
                    return;
                }
            }

            if (logger != null && logEntry != null)
            {
                // Update the existing log entry with the new information
                logger.JobApplicationName = logEntry.ApplicationName;
                logger.JobCategory        = logEntry.JobCategory;
                logger.JobEndStatus       = logEntry.JobDoneStatus;
                logger.JobEndDateTime     = Convert.ToDateTime(logEntry.JobDoneTimestamp);
                logger.JobId              = logEntry.UUID;
                logger.JobName            = logEntry.DeviceJobName;
                logger.JobStartDateTime   = Convert.ToDateTime(logEntry.JobStartedTimestamp);
                logger.MonitorEndDateTime = DateTime.Now;
                _dataLogger.Update(logger);
            }
        }
        private PhysicalDeviceJobLogger CreateDataLogItem(string docId)
        {
            var logItem = new PhysicalDeviceJobLogger()
            {
                SessionId           = _sessionId,
                DeviceId            = _deviceId,
                ActivityExecutionId = _transactionId,
                JobName             = docId,
            };

            _dataLogger.Submit(logItem);
            return(logItem);
        }
 /// <summary>
 /// If the job name wasn't found and timeout threshold was exceeded update the monitor end field for the record.
 /// </summary>
 /// <param name="docId">string</param>
 private void LogFailedOutput(string docId)
 {
     try
     {
         PhysicalDeviceJobLogger logger = _logData.FirstOrDefault(x => x.JobName.Contains(docId, StringComparison.OrdinalIgnoreCase) && !x.MonitorEndDateTime.HasValue);
         if (logger != null)
         {
             logger.MonitorEndDateTime = DateTime.Now;
             _dataLogger.Update(logger);
         }
     }
     catch (Exception)
     {
         TraceFactory.Logger.Error("Failed to mark MonitorEnd time for {0}".FormatWith(docId));
     }
 }