Example #1
0
        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();
        }
Example #3
0
        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();
        }