void TimerCallback(object sender, ElapsedEventArgs e) { ClientActionHelper.TryCatchWithLogger <DocumentsClient, IDocuments>((DocumentsClient client) => { if (!client.IsAlive()) { Logging.WriteLogEvent(LoggingSource.BiblosDS_WindowsService_WCFHost, "WCFHost.GetAliveTimer_Tick", "ServiceDocument IsAlive() return false", LoggingOperationType.BiblosDS_GetAlive, LoggingLevel.BiblosDS_Warning); } }, TimeSpan.FromMinutes(5), string.Empty, _logger); ClientActionHelper.TryCatchWithLogger <ServiceDocumentStorageClient, IServiceDocumentStorage>((ServiceDocumentStorageClient client) => { if (!client.IsAlive()) { Logging.WriteLogEvent(LoggingSource.BiblosDS_WindowsService_WCFHost, "WCFHost.GetAliveTimer_Tick", "ServiceDocumentStorage IsAlive() return false", LoggingOperationType.BiblosDS_GetAlive, LoggingLevel.BiblosDS_Warning); } }, TimeSpan.FromMinutes(5), string.Empty, _logger); _timer.Start(); }
private void TimerCallback(object sender, ElapsedEventArgs e) { _logger.Info("TimerCallback -> init process transit documents"); ClientActionHelper.TryCatchWithLogger <ServiceDocumentStorageClient, IServiceDocumentStorage>((ServiceDocumentStorageClient client) => { _logger.Info("TimerCallback -> get documents from transit"); BindingList <Document> documents = DocumentService.GetDocumentInTransito(3); _logger.DebugFormat("TimerCallback -> found {0} documents on transit", documents.Count); Document document; foreach (Document item in documents) { try { document = DocumentService.GetDocument(item.IdDocument); _logger.InfoFormat("TimerCallback -> processing document {0}", item.IdDocument); client.AddDocument(document); } catch (Exception ex) { _logger.Error(string.Concat("TimerCallback -> error on process document ", item.IdDocument), ex); Logging.WriteLogEvent(LoggingSource.BiblosDS_WS, "ProcessCheckInTransitoDocument", e.ToString(), LoggingOperationType.BiblosDS_CheckInTransitoDocument, LoggingLevel.BiblosDS_Errors); if (client.State == CommunicationState.Faulted) { client.Close(); client = new ServiceDocumentStorageClient(SERVICE_STORAGE_ENDPOINT_NAME); client.InnerChannel.OperationTimeout = TimeSpan.FromMinutes(30); client.Open(); } } } _logger.Info("TimerCallback -> get document attaches from transit"); BindingList <DocumentAttach> documentAttaches = DocumentService.GetDocumentAttachesInTransito(3); _logger.DebugFormat("TimerCallback -> found {0} document attaches on transit", documentAttaches.Count); foreach (DocumentAttach attach in documentAttaches) { try { _logger.InfoFormat("processing document", attach.IdDocument); client.AddAttachToDocument(attach); } catch (Exception ex) { _logger.Error(string.Concat("TimerCallback -> error on process document ", attach.IdDocument), ex); Logging.WriteLogEvent(LoggingSource.BiblosDS_WS, "ProcessCheckInTransitoDocument", e.ToString(), LoggingOperationType.BiblosDS_CheckInTransitoDocument, LoggingLevel.BiblosDS_Errors); if (client.State == CommunicationState.Faulted) { client.Close(); client = new ServiceDocumentStorageClient(SERVICE_STORAGE_ENDPOINT_NAME); client.InnerChannel.OperationTimeout = TimeSpan.FromMinutes(30); client.Open(); } } } }, TimeSpan.FromMinutes(30), SERVICE_STORAGE_ENDPOINT_NAME, _logger); _timer.Start(); }
private void TimerCallback(object sender, ElapsedEventArgs e) { try { _logger.Debug("TimerCallback -> init clean service process"); _logger.Info("TimerCallback -> read archives from db"); ICollection <DocumentArchive> archives = ArchiveService.GetArchives(); if (archives == null || archives.Count == 0) { _logger.Info("TimerCallback -> no archives found from db"); _timer.Start(); return; } if (ArchiveRestrictions != null && ArchiveRestrictions.Count > 0) { _logger.Info("TimerCallback -> restrict archives from configuration"); archives = archives.Where(x => ArchiveRestrictions.Any(xx => xx == x.IdArchive)).ToList(); } _logger.InfoFormat("TimerCallback -> found {0} archives to process", archives.Count); foreach (DocumentArchive archive in archives) { _logger.InfoFormat("TimerCallback -> process archive {0}({1})", archive.Name, archive.IdArchive); ICollection <Document> documentsToDelete = DocumentService.GetRemovableDetachedDocuments(archive.IdArchive, FromDate, ToDate); _logger.InfoFormat("TimerCallback -> found {0} documents detached from archive {1}({2})", documentsToDelete.Count, archive.Name, archive.IdArchive); foreach (Document document in documentsToDelete) { ClientActionHelper.TryCatchWithLogger <ServiceDocumentStorageClient, IServiceDocumentStorage>((ServiceDocumentStorageClient client) => { _logger.InfoFormat("TimerCallback -> deleting document {0} from storage {1}...", document.IdDocument, document.Storage?.Name); client.DeleteDocument(document.IdDocument); _logger.InfoFormat("TimerCallback -> deleting document {0} from db...", document.IdDocument); DocumentService.DeleteDocumentDetached(document.IdDocument); if (document.DocumentParentVersion != null) { _logger.InfoFormat("TimerCallback -> document {0} has parent version. Remove all versioned document.", document.IdDocument); ICollection <Document> allVersionedDocuments = DocumentService.GetAllVersionedDocuments(document.DocumentParentVersion); allVersionedDocuments = allVersionedDocuments.Where(x => x.IdDocument != document.IdDocument).ToList(); _logger.InfoFormat("TimerCallback -> found {0} versioned documents to delete.", allVersionedDocuments.Count); foreach (Document versionDocument in allVersionedDocuments) { _logger.InfoFormat("TimerCallback -> deleting document {0} with version {1} from storage...", versionDocument.IdDocument, versionDocument.Version); client.DeleteDocument(versionDocument.IdDocument); _logger.InfoFormat("TimerCallback -> deleting document {0} with version {1} from db...", versionDocument.IdDocument, versionDocument.Version); DocumentService.DeleteDocumentDetached(versionDocument.IdDocument); } } _logger.InfoFormat("TimerCallback -> document {0} deleted", document.IdDocument); }, TimeSpan.FromMinutes(5), SERVICE_STORAGE_ENDPOINT_NAME, _logger); } } _logger.Debug("TimerCallback -> end clean service process"); } catch (Exception ex) { _logger.Error("TimerCallback -> error on clean detached document process", ex); } _timer.Start(); }