private void toolStripButtonViewInfo_Click(object sender, EventArgs e) { StoreFailure failure = listViewDatasets.SelectedItems[0].Tag as StoreFailure; ViewDatasetDialog dlgView = new ViewDatasetDialog(failure.Dataset); dlgView.ShowDialog(this); }
private Dictionary <string, StoreFailure> LoadStoreFailures(string failureDirectory) { Dictionary <string, StoreFailure> failures = new Dictionary <string, StoreFailure>(); IEnumerable <FileInfo> files = FileSearcher.GetFiles(new DirectoryInfo(failureDirectory), "store*.fail", SearchOption.TopDirectoryOnly); foreach (FileInfo file in files.OrderBy(f => f.CreationTime)) { try { StoreFailure failure = Utils.LoadFromXml <StoreFailure>(file.FullName); if (!string.IsNullOrEmpty(failure.FileName)) { failure.Dataset = new DicomDataSet(); failure.Dataset.Load(failure.FileName, DicomDataSetLoadFlags.None); } failures.Add(file.FullName, failure); } catch (Exception e) { Messager.ShowError(_View as Form, e); } } return(failures); }
public void Store() { StoreFailure storeFailures = new StoreFailure(); DicomServer dcmServer = ServiceLocator.Retrieve <DicomServer>(); try { foreach (DicomScp scp in _Scps) { string lastStatus = string.Empty; string clientAE = Module._Options.AETitle.Length > 0 ? Module._Options.AETitle : dcmServer.AETitle; // // If the store operation failed and we have enabled retry we need to schedule this action to be retried again // if (!Store(clientAE, scp, _DataSet, ref lastStatus)) { ResendServer server = new ResendServer(scp); server.AETitle = clientAE; server.RetryCount = NumberOfRetries; server.LastStatus = lastStatus; server.IPAddress = scp.PeerAddress.ToString(); storeFailures.Scps.Add(server); } } } catch (Exception ex) { Logger.Global.SystemException(string.Empty, ex); } if (storeFailures.Scps.Count > 0) { storeFailures.Dataset = _DataSet; if (EnableRetry && NumberOfRetries > 0) { Job <StoreFailure> retryJob = new Job <StoreFailure>() { Loops = 1, Data = storeFailures }; retryJob.StartTime = Timeout.Milliseconds().FromNow(); Module.Scheduler.SubmitJob <StoreFailure>(retryJob, Retry); } else { // // Since we have no retries we will send this to manual resend // storeFailures.Save(); } } }
private void RemoveServerItem(ListViewItem item) { ResendServer server = item.Tag as ResendServer; ListViewItem failureItem = listViewDatasets.SelectedItems[0]; StoreFailure failure = failureItem.Tag as StoreFailure; listViewServers.Items.Remove(item); failure.Scps.Remove(server); if (failure.Scps.Count == 0) { RemoveFailureItem(failureItem); } }
private void LoadServers() { StoreFailure failure = listViewDatasets.SelectedItems[0].Tag as StoreFailure; listViewServers.BeginUpdate(); listViewServers.Items.Clear(); foreach (ResendServer server in failure.Scps) { ListViewItem item = listViewServers.Items.Add(server.LastStatus); item.SubItems.Add(server.Scp.AETitle); item.SubItems.Add(server.IPAddress); item.SubItems.Add(server.Scp.Port.ToString()); item.Tag = server; } if (listViewServers.Items.Count > 0) { listViewServers.Items[0].Selected = true; } listViewServers.EndUpdate(); }
private void RemoveFailureItem(ListViewItem item) { try { StoreFailure failure = item.Tag as StoreFailure; string fileName = item.SubItems[5].Text; listViewServers.Items.Clear(); if (failure != null && failure.Dataset != null) { failure.Dataset.Dispose(); failure.Dataset = null; } listViewDatasets.Items.Remove(item); failure.Delete(); File.Delete(fileName); } catch (Exception e) { MessageBox.Show(this, e.Message, "Error Deleteting Failure Item", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
private void SendStoreItem(ListViewItem item) { StoreFailure failure = item.Tag as StoreFailure; using (ProgressDialog progress = new ProgressDialog()) { progress.Title = "Retrying"; progress.CancelMessage = "Please wait..."; progress.Line1 = failure.Dataset.GetValue <string>(DicomTag.PatientName, string.Empty) + "(" + failure.Dataset.GetValue <string>(DicomTag.StudyID, string.Empty) + ")"; progress.ShowDialog(this, DialogFlags.Modal | DialogFlags.NoMinimize | DialogFlags.AutoTime | DialogFlags.NoProgressBar); foreach (ResendServer server in failure.Scps.ToArray()) { string status = string.Empty; progress.Line2 = server.Scp.AETitle + " - " + server.IPAddress + ":" + server.Scp.Port.ToString(); server.Scp.PeerAddress = IPAddress.Parse(server.IPAddress); if (!StoreClient.Store(ProcessorConfiguration.Settings.AETitle, server.Scp, failure.Dataset, ref status)) { UpdateServerStatus(server, status); } else { failure.Scps.Remove(server); RemoveServer(server); } } } if (failure.Scps.Count > 0) { failure.Save(); } else { listViewDatasets.Items.Remove(item); failure.Delete(); } }
private void Retry(Job <StoreFailure> job, StoreFailure storeFailure) { int count = storeFailure.Scps.Count; DicomServer dcmServer = ServiceLocator.Retrieve <DicomServer>(); foreach (ResendServer server in storeFailure.Scps.ToList()) { string lastStatus = string.Empty; bool success; string aetitle = !string.IsNullOrEmpty(server.AETitle) ? server.AETitle : dcmServer.AETitle; server.Scp.PeerAddress = IPAddress.Parse(server.IPAddress); success = Store(aetitle, server.Scp, storeFailure.Dataset, ref lastStatus); server.RetryCount--; // // If the store operation failed and we do not have not exhausted our retry count we // will try to send this dataset again later // if (!success && server.RetryCount > 0) { string retryMessage = server.RetryCount > 0 ? string.Format("are {0} retries", server.RetryCount) : "is only 1 retry"; string message = string.Format("[Rules] Failed to successfully store dataset to {0}. There {1} left.", server.Scp.AETitle, retryMessage); Logger.Global.SystemMessage(LogType.Error, message, string.Empty); } else { // // If the dataset is not successfully store we need to save the info so that it can be manually sent to // its destination. // if (!success) { try { string message = string.Format("[Rules] Failed to successfully store dataset to {0} after {1} retries. Dataset will be added to manual resend queue", server.Scp.AETitle, NumberOfRetries); Logger.Global.SystemMessage(LogType.Error, message, string.Empty); } catch (Exception e) { Logger.Global.SystemException(string.Empty, e); } } else { storeFailure.Scps.Remove(server); } } } // // Some items still failed so we need to resubmit // if (storeFailure.Scps.Count > 0) { int itemsToRetry = (from scp in storeFailure.Scps where scp.RetryCount > 0 select scp).Count(); if (itemsToRetry > 0) { Job <StoreFailure> retryJob = new Job <StoreFailure>() { Loops = 1, Data = storeFailure }; retryJob.StartTime = Timeout.Milliseconds().FromNow(); Module.Scheduler.SubmitJob <StoreFailure>(retryJob, Retry); } else { storeFailure.Save(); } } }