protected override QCServiceWorkState Work() { bool idle = true; Logger.Info("Start Main service Work()!"); foreach (var source in EventSources) { try { if (source.HasNextEvent()) { Logger.Info("source.HasNextEvent()"); QCEvent e = source.NextEvent(); Debug.Assert(e != null, "Event can't be null"); bool eventHasNotBeenAccept = true; foreach (IQCEventJobFactory handlerFactory in EventJobFactories) { if (handlerFactory.AcceptEvent(e)) { eventHasNotBeenAccept = false; IQCEventJob handler = handlerFactory.NewJob(e); Logger.Info(" Handler: " + handlerFactory.GetType() + " Event: " + source.GetType()); if (IsSTAThread) { Logger.Info("STAThread, do without new thread"); HandlerWork(e, handler, false); } else { Semaphore.WaitOne(); // need to be the last line Task.Factory.StartNew(() => { HandlerWork(e, handler, true); }); } } } if (eventHasNotBeenAccept) { Logger.Debug("Event " + e + " has not been accepted by any factory. Skipped"); } idle = false; } } catch (QCEventIOException e) { Logger.Debug("Event Fetching Error: " + e); } catch (SendMessageException smse) { throw smse; } } if (idle) { return(QCServiceWorkState.Idle); } else { return(QCServiceWorkState.Working); } }
protected void PrepareUpdate(QCEvent entity) { entity.LastUpdated = DateTime.UtcNow; }
public IDictionary <string, object> GetQCEventDynamic( QCEvent row, QCEventQueryProjection projection, QCEventQueryOptions options, string qcFolderPath, IFileService fileService) { var obj = new Dictionary <string, object>(); foreach (var f in projection.GetFieldsArr()) { switch (f) { case QCEventQueryProjection.INFO: { var entity = row; obj["id"] = entity.Id; var details = entity.Details.Select(o => new { id = o.Id, defect_type_id = o.DefectTypeId, defect_type = new { id = o.DefectType.Id, code = o.DefectType.Code, name = o.DefectType.Name } }).ToList(); obj["details"] = details; obj["description"] = entity.Description; obj["production_batch_id"] = entity.ProductionBatchId; obj["qc_device_id"] = entity.QCDeviceId; var time = entity.CreatedTime .ToDefaultTimeZone(); var timeStr = time.ToString(options.date_format); obj["created_time"] = new { display = timeStr, iso = $"{time.ToUniversalTime():s}Z" }; time = entity.LastUpdated .ToDefaultTimeZone(); timeStr = time.ToString(options.date_format); obj["last_updated"] = new { display = timeStr, iso = $"{time.ToUniversalTime():s}Z" }; obj["seen"] = entity.Seen; } break; case QCEventQueryProjection.BATCH: { var entity = row.Batch; if (entity != null) { obj["batch"] = new { id = entity.Id, code = entity.Code, } } ; } break; case QCEventQueryProjection.IMAGE: { if (!options.single_only) { throw new Exception("Only single option can query image field"); } var entity = row; if (entity.LeftImage != null) { var finalPath = Path.Combine(qcFolderPath, entity.LeftImage); if (File.Exists(finalPath)) { var img = File.ReadAllBytes(finalPath); var img64 = Convert.ToBase64String(img); obj["left_image"] = img64; } } if (entity.RightImage != null) { var finalPath = Path.Combine(qcFolderPath, entity.RightImage); if (File.Exists(finalPath)) { var img = File.ReadAllBytes(finalPath); var img64 = Convert.ToBase64String(img); obj["right_image"] = img64; } } if (entity.SideImages != null) { var sideImages = JsonConvert.DeserializeObject <IEnumerable <string> >(entity.SideImages); var sideImagesB64 = new List <string>(); obj["side_images"] = sideImagesB64; foreach (var iPath in sideImages) { var fullPath = fileService.GetFilePath(qcFolderPath, null, iPath).Item2; if (File.Exists(fullPath)) { var img = File.ReadAllBytes(fullPath); var img64 = Convert.ToBase64String(img); sideImagesB64.Add(img64); } } } } break; } } return(obj); }
public QCEvent CreateQCEvent(QCEvent entity) { PrepareCreate(entity); return(context.QCEvent.Add(entity).Entity); }
protected void PrepareCreate(QCEvent entity) { entity.LastUpdated = entity.CreatedTime; }
public ValidationData ValidateDeleteQCEvent(ClaimsPrincipal principal, QCEvent entity) { return(new ValidationData()); }
public QCEvent DeleteQCEvent(QCEvent entity) { return(context.QCEvent.Remove(entity).Entity); }
public void ProduceEventToKafkaServer(IProducer <Null, string> producer, QCEvent entity, DeviceConfig currentConfig, string dataFolder, string statePath) { var mess = new Message <Null, string>(); string leftImgB64 = null; string rightImgB64 = null; List <string> sideImagesB64 = null; var imgPath = Path.Combine(dataFolder, entity.LeftImage); if (File.Exists(imgPath)) { var img = File.ReadAllBytes(imgPath); leftImgB64 = Convert.ToBase64String(img); } imgPath = Path.Combine(dataFolder, entity.RightImage); if (File.Exists(imgPath)) { var img = File.ReadAllBytes(imgPath); rightImgB64 = Convert.ToBase64String(img); } var sideImages = entity.SideImages == null ? null : JsonConvert.DeserializeObject <IEnumerable <string> >(entity.SideImages); if (sideImages != null && sideImages.Count() > 0) { sideImagesB64 = new List <string>(); foreach (var iPath in sideImages) { imgPath = Path.Combine(dataFolder, iPath); } if (File.Exists(imgPath)) { var img = File.ReadAllBytes(imgPath); var b64 = Convert.ToBase64String(img); sideImagesB64.Add(b64); } } var details = entity.Details.Select(o => new QCEventDetailMessage { Id = o.Id, QCDefectCode = o.DefectTypeCode }).ToList(); mess.Value = JsonConvert.SerializeObject(new QCEventMessage { Id = entity.Id, CreatedTime = entity.CreatedTime, Identifier = currentConfig.Identifier, LeftB64Image = leftImgB64, RightB64Image = rightImgB64, SideB64Images = sideImagesB64, Details = details, LeftImage = entity.LeftImage, RightImage = entity.RightImage, SideImages = entity.SideImages == null ? null : JsonConvert.DeserializeObject <IList <string> >(entity.SideImages) }); producer.Produce(Kafka.Constants.KafkaTopic.TOPIC_QC_EVENT, mess, report => { if (report.Status == PersistenceStatus.Persisted) { State.Instance.LastEventTime = entity.CreatedTime; SaveCurrentState(statePath); } }); }