public JobManager(ForwardOptions options, IForwardDataAccessAgent fagent, IAeManagementDataAccessAgent aagent, IStorageDataAccessAgent sagent) { _Options = options; _forwardAgent = fagent; _aeAgent = aagent; _storageAgent = sagent; }
public override void AddServices( ) { Configuration configuration = DicomDemoSettingsManager.GetGlobalPacsAddinsConfiguration(ServiceDirectory); DicomServer server = ServiceLocator.Retrieve <DicomServer>(); string serviceName = server.Name; if (!DataAccessServices.IsDataAccessServiceRegistered <IForwardDataAccessAgent> ( )) { IForwardDataAccessAgent dataAccess = DataAccessFactory.GetInstance(new ForwardDataAccessConfigurationView(configuration, null, serviceName)).CreateDataAccessAgent <IForwardDataAccessAgent>(); DataAccessServices.RegisterDataAccessService <IForwardDataAccessAgent> (dataAccess); } RegisterGatewayServer( ); RegisterForwardService( ); SettingsChangedNotifier settingsChanged; if (!ServiceLocator.IsRegistered <SettingsChangedNotifier> ( )) { settingsChanged = new SettingsChangedNotifier(__Settings); ServiceLocator.Register <SettingsChangedNotifier> (settingsChanged); } else { settingsChanged = ServiceLocator.Retrieve <SettingsChangedNotifier> ( ); } settingsChanged.SettingsChanged += new EventHandler(settingsChanged_SettingsChanged); settingsChanged.Enabled = true; }
public bool CanAccessDatabase(out string error) { error = string.Empty; try { System.Configuration.Configuration configuration = DicomDemoSettingsManager.GetGlobalPacsAddinsConfiguration(Module.ServiceDirectory); IForwardDataAccessAgent forwardAgent = GetAgent <IForwardDataAccessAgent>(configuration, new ForwardDataAccessConfigurationView(configuration, null, Module.ServiceName)); IStorageDataAccessAgent storageAgent = GetAgent <IStorageDataAccessAgent>(configuration, new StorageDataAccessConfigurationView(configuration, null, Module.ServiceName)); IAeManagementDataAccessAgent aeManagementAgent = GetAgent <IAeManagementDataAccessAgent>(configuration, new AeManagementDataAccessConfigurationView(configuration, null, Module.ServiceName)); bool bContinue = true; if (forwardAgent == null) { error = string.Format("{0} {1}", AssemblyName, "Cannot create IForwardDataAccessAgent"); bContinue = false; } if (bContinue) { if (storageAgent == null) { error = string.Format("{0} {1}", AssemblyName, "Cannot create IStorageDataAccessAgent"); bContinue = false; } } if (bContinue) { if (aeManagementAgent == null) { error = string.Format("{0} {1}", AssemblyName, "Cannot create IAeManagementDataAccessAgent"); bContinue = false; } } if (bContinue) { forwardAgent.IsForwarded("notUsed"); storageAgent.MaxQueryResults = 10; storageAgent.IsPatientsExists("patientIdNotUsed"); aeManagementAgent.GetAeTitle("notUsed"); } } catch (Exception e) { error = string.Format("{0} {1}", AssemblyName, e.Message); } bool ret = string.IsNullOrEmpty(error); return(ret); }
public void RunThread(DicomScp scp, IForwardDataAccessAgent forwardAgent) { // int threadId = Thread.CurrentThread.ManagedThreadId; try { // Logger.Global.SystemMessage(LogType.Information, string.Format("[Forwarder] [{0:X8}] +++ InternalRunThread starting", threadId), _ServerAE); InternalRunThread(scp, forwardAgent); } finally { // Logger.Global.SystemMessage(LogType.Information, string.Format("[Forwarder] [{0:X8}] --- InternalRunThread ending", threadId), _ServerAE); } }
public void Run(IForwardDataAccessAgent forwardAgent, DateRange range) { lock (resetLock) { long count = forwardAgent.GetResetCount(range); string message = string.Format("[Forwarder] {0} {1} found to reset forward date", count, count == 1 ? "dataset" : "datasets"); Logger.Global.SystemMessage(LogType.Debug, message, _ServerAE); if (count > 0) { forwardAgent.Reset(range); message = string.Format("[Forwarder] {0} {1} forward date successfully reset", count, count == 1 ? "dataset" : "datasets"); Logger.Global.SystemMessage(LogType.Debug, message, _ServerAE); } } }
public void Run(DicomScp scp, IForwardDataAccessAgent forwardAgent) { if (_serviceShuttingDown) { return; } AeInfoExtended aeInfoExtended = Module._aeManagementAgent.GetAeTitle(scp.AETitle); if (aeInfoExtended != null) { _useTls = aeInfoExtended.ClientPortUsage == ClientPortUsageType.Secure || ((aeInfoExtended.ClientPortUsage == ClientPortUsageType.SameAsServer) && (Module._Server.Secure)); } Thread thread = new Thread(() => RunThread(scp, forwardAgent)); thread.Start(); }
public bool CanAccessDatabase(out string error) { error = string.Empty; bool ret = false; try { System.Configuration.Configuration configuration = DicomDemoSettingsManager.GetGlobalPacsAddinsConfiguration(GatewaySession.ServiceDirectory); IForwardDataAccessAgent forwardAgent = GetAgent <IForwardDataAccessAgent>(configuration, new ForwardDataAccessConfigurationView(configuration, null, GatewaySession.ServiceName)); IOptionsDataAccessAgent optionsAgent = GetAgent <IOptionsDataAccessAgent>(configuration, new OptionsDataAccessConfigurationView(configuration, null, GatewaySession.ServiceName)); bool bContinue = true; if (forwardAgent == null) { error = string.Format("{0} {1}", AssemblyName, "Cannot create IForwardDataAccessAgent"); bContinue = false; } if (bContinue) { if (optionsAgent == null) { error = string.Format("{0} {1}", AssemblyName, "Cannot create IOptionsDataAccessAgent"); bContinue = false; } } if (bContinue) { forwardAgent.IsForwarded("notUsed"); optionsAgent.GetDefaultOptions(); } } catch (Exception e) { error = string.Format("{0} {1}", AssemblyName, e.Message); } ret = string.IsNullOrEmpty(error); return(ret); }
private void InitializeDataAccess() { if (!DataAccessServices.IsDataAccessServiceRegistered <IForwardDataAccessAgent>()) { System.Configuration.Configuration configuration = DicomDemoSettingsManager.GetGlobalPacsConfiguration(); _forwardAgent = DataAccessFactory.GetInstance(new ForwardDataAccessConfigurationView(configuration, PacsProduct.ProductName, PacsProduct.ServiceName)).CreateDataAccessAgent <IForwardDataAccessAgent>(); DataAccessServices.RegisterDataAccessService <IForwardDataAccessAgent>(_forwardAgent); } else { _forwardAgent = DataAccessServices.GetDataAccessService <IForwardDataAccessAgent>(); } if (_forwardAgent != null) { _infoTimer = new System.Threading.Timer(new System.Threading.TimerCallback(UpdateCount)); VisibleChanged += new EventHandler(ForwardManagerConfigurationView_VisibleChanged); if (Visible) { _infoTimer.Change(REFRESH_INTERVAL, REFRESH_INTERVAL); } } }
public void RunThread(IForwardDataAccessAgent forwardAgent, IStorageDataAccessAgent storageAgent) { lock (cleanLock) { ForwardInstance[] instances = forwardAgent.GetCleanList(); StorageAddInsConfiguration storageSettings = Module.StorageConfigManager.GetStorageAddInsSettings(); string message = string.Format("[Forwarder] {0} {1} found to clean", instances.Length, instances.Length == 1 ? "dataset" : "datasets"); DicomFileDeleter deleter = new DicomFileDeleter(); MatchingParameterCollection mpc = new MatchingParameterCollection(); deleter.DicomFileDeleted += new EventHandler<Leadtools.Medical.Winforms.EventBrokerArgs.DicomFileDeletedEventArgs>(deleter_DicomFileDeleted); deleter.DicomFileDeleteFailed += new EventHandler<Leadtools.Medical.Winforms.EventBrokerArgs.DicomFileDeletedEventArgs>(deleter_DicomFileDeleteFailed); if (storageSettings != null) { deleter.DeleteFilesOnDatabaseDelete = storageSettings.StoreAddIn.DeleteFiles; deleter.BackupFilesOnDatabaseDelete = storageSettings.StoreAddIn.BackupFilesOnDelete; deleter.BackupFilesOnDeleteFolder = storageSettings.StoreAddIn.DeleteBackupLocation; } Logger.Global.SystemMessage(LogType.Debug, message, _ServerAE); foreach (ForwardInstance instance in instances) { #if LEADTOOLS_V18_OR_LATER if (_cancelClean) { _cancelClean = false; Logger.Global.SystemMessage(LogType.Information, string.Format("Cancelling Clean Process"), _ServerAE); break; } #endif // #if LEADTOOLS_V18_OR_LATER MatchingParameterList mpl = new MatchingParameterList(); ICatalogEntity instanceEntity = RegisteredEntities.GetInstanceEntity(instance.SOPInstanceUID); mpl.Add(instanceEntity); mpc.Add(mpl); try { DataSet ds = storageAgent.QueryCompositeInstances(mpc); // // Find the instance to delete // storageAgent.DeleteInstance(GetMatchingParameters(instance.SOPInstanceUID)); if (ds != null) { deleter.Delete(null, ds.Tables[DataTableHelper.InstanceTableName].Select()); } } catch (Exception e) { message = string.Format("[Forwarder] Error ({0}) deleting instance: {1}", e.Message, instance.SOPInstanceUID); Logger.Global.SystemMessage(LogType.Error, message, _ServerAE); } finally { mpc.Clear(); } } deleter.DicomFileDeleted -= deleter_DicomFileDeleted; deleter.DicomFileDeleteFailed -= deleter_DicomFileDeleteFailed; } }
public void Run(IForwardDataAccessAgent forwardAgent, IStorageDataAccessAgent storageAgent) { Thread thread = new Thread(() => RunThread(forwardAgent, storageAgent)); thread.Start(); }
public void InternalRunThread(DicomScp scp, IForwardDataAccessAgent forwardAgent) { lock (forwardLock) { if (_serviceShuttingDown) { return; } ForwardInstance[] instances; try { instances = forwardAgent.GetForwardList(); } catch (Exception ex) { Logger.Global.SystemMessage(LogType.Error, ex.ToString(), _ServerAE); // throw; instances = new ForwardInstance[0]; } string message = string.Format("[Forwarder] {0} {1} found to forward", instances.Length, instances.Length == 1 ? "dataset" : "datasets"); Logger.Global.SystemMessage(LogType.Debug, message, _ServerAE); if (instances.Length > 0 && _Options.Verify) { message = string.Format("[Forwarder] {0} {1} will be verified after forwarding", instances.Length, instances.Length == 1 ? "instance" : "instances"); Logger.Global.SystemMessage(LogType.Warning, message, _ServerAE); } foreach (ForwardInstance instance in instances) { #if LEADTOOLS_V18_OR_LATER if (_cancelForward) { _cancelForward = false; Logger.Global.SystemMessage(LogType.Information, string.Format("Cancelling Forward Process"), _ServerAE); break; } if (_serviceShuttingDown) { break; } #endif // #if LEADTOOLS_V18_OR_LATER try { if (!File.Exists(instance.ReferencedFile)) { message = string.Format("[Forwarder] Referenced file doesn't exist. Instance ({0}) will be removed from forwarding queue. [{1}]", instance.SOPInstanceUID, instance.ReferencedFile); Logger.Global.SystemMessage(LogType.Warning, message, _ServerAE); forwardAgent.SetInstanceForwarded(instance.SOPInstanceUID, DateTime.Now, null); continue; } // SendInstance can fail because DicomEngine may be locked DicomCommandStatusType status = DicomCommandStatusType.Success; try { status = SendInstance(scp, instance); } catch (Exception) { // Console.WriteLine(ex.Message); throw; } if (status == DicomCommandStatusType.Success || status == DicomCommandStatusType.DuplicateInstance) { DateTime?expires = null; DateTime forwardDate = DateTime.Now; if (_Options.ImageHold != null && _Options.ImageHold != 0) { switch (_Options.HoldInterval) { case HoldInterval.Days: expires = forwardDate.AddDays(_Options.ImageHold.Value); break; case HoldInterval.Months: expires = forwardDate.AddMonths(_Options.ImageHold.Value); break; default: expires = forwardDate.AddYears(_Options.ImageHold.Value); break; } } if (!_Options.Verify || VerifyInstance(scp, instance.SOPInstanceUID) == DicomCommandStatusType.Success) { if (_Options.Verify) { message = string.Format("[Forwarder] SOP instance successfully verified: {0}", instance.SOPInstanceUID); Logger.Global.SystemMessage(LogType.Debug, message, _ServerAE); } forwardAgent.SetInstanceForwarded(instance.SOPInstanceUID, forwardDate, expires); } else { message = string.Format("[Forwarder] Failed to verify SOP instance: {0}. Instance not marked as forwarded.", instance.SOPInstanceUID); Logger.Global.SystemMessage(LogType.Error, message, _ServerAE); } } } catch (Exception e) { Logger.Global.SystemMessage(LogType.Error, "[Forwarder] " + e.Message, _ServerAE); } } } }
private void OnSendCStoreResponse(object sender, CStoreResponseSentEventArgs response) { try { bool process = false; lock ( _instancesListLock ) { process = (__MovedInstances.Contains(response.Instance) && !__ForwardedInstances.Contains(response.Instance)); } if (process && response.Status == DicomCommandStatusType.Success) { if (ServiceLocator.IsRegistered <ForwardOptions> ( ) && DataAccessServices.IsDataAccessServiceRegistered <IForwardDataAccessAgent> ( )) { ForwardOptions forwardOptions = ServiceLocator.Retrieve <ForwardOptions> ( ); IForwardDataAccessAgent dataAccess = DataAccessServices.GetDataAccessService <IForwardDataAccessAgent> ( ); if (null != forwardOptions && null != dataAccess) { DateTime?expires = null; DateTime forwardDate = DateTime.Now; if (dataAccess.IsForwarded(response.Instance)) { return; } if (forwardOptions.ImageHold != null && forwardOptions.ImageHold != 0) { switch (forwardOptions.HoldInterval) { case HoldInterval.Days: { expires = forwardDate.AddDays(forwardOptions.ImageHold.Value); } break; case HoldInterval.Months: { expires = forwardDate.AddMonths(forwardOptions.ImageHold.Value); } break; default: { expires = forwardDate.AddYears(forwardOptions.ImageHold.Value); } break; } } dataAccess.SetInstanceForwarded(response.Instance, forwardDate, expires); } } } } catch (Exception ex) { GatewaySession.Log(__Client, DicomCommandType.CMove, LogType.Error, MessageDirection.Output, null, "[Gateway] Failed to set instance forwarding.\n" + ex.Message); } }