コード例 #1
0
        /// <summary>
        /// Importa a massa de dados existente no diretório de logs
        /// </summary>
        private void ImportPreviousLogs(String logDirectory)
        {
            PrintLogSorter logSorter = new PrintLogSorter(logDirectory);

            String[] logFiles     = logSorter.GetOrderedFiles();
            DateTime?lastFileDate = null;

            // Importa os arquivos encontrados no diretório de log
            fileLogger.LogInfo("Importando logs pré-existentes no diretório " + logDirectory);
            foreach (String file in logFiles)
            {
                DateTime?fileDate = PrintLogFile.GetDate(file); // considera hora como sendo 00:00:00
                DateTime?today    = DateTime.Now.Date;          // considera hora como sendo 00:00:00

                // Importa todos com exceção do arquivo com as impressões de hoje, faz isso no final do dia
                if ((fileDate != null) && (fileDate != today))
                {
                    String fileName = PathFormat.Adjust(logDirectory) + file;
                    // Loga informações sem profundidade, para não sobrecarregar/poluir o arquivo de logs. Apenas
                    // em caso de falha acrescenta detalhes (processa as notificações)
                    fileLogger.LogInfo("Importando arquivo " + Path.GetFileName(fileName));
                    notifications.Clear();

                    Boolean imported = ImportFile(fileName, false);
                    if (!imported) // Falha ao importar o log
                    {
                        // São gravados logs detalhados para que se possa determinar a causa da falha
                        ProcessNotifications();
                        return;
                    }
                    lastFileDate = fileDate;
                }
            }

            // Grava a data do último acesso (baseada na data do último arquivo)
            if (lastFileDate != null)
            {
                PrintLogAccess printLogAccess = new PrintLogAccess(dataAccess.GetConnection());
                printLogAccess.SetLastAccess(lastFileDate.Value.AddDays(1));
            }
        }
コード例 #2
0
        public void Execute()
        {
            // Verifica se as dependências foram instanciadas (se o método InitializeTaskState foi chamado)
            if (taskParams == null)
            {
                return;
            }
            if (dataAccess == null)
            {
                return;
            }
            if (notifications == null)
            {
                return;
            }
            if (fileLogger == null)
            {
                return;
            }

            // Verifica os parâmetros recebidos
            String  logDirectory       = taskParams["logDirectory"];
            Boolean importPreviousLogs = Boolean.Parse(taskParams["importPreviousLogs"]);

            dataAccess.OpenConnection();

            // "lastAccess" é gravado e recuperado do banco com frequência, logo não pode ser obtido de "taskParams"
            PrintLogAccess printLogAccess = new PrintLogAccess(dataAccess.GetConnection());
            DateTime       lastAccess     = printLogAccess.GetLastAccess();

            // Importa a massa de dados existente
            if ((importPreviousLogs) && (firstExecution))
            {
                ImportPreviousLogs(logDirectory);
                firstExecution = false;
                dataAccess.CloseConnection();
                return;
            }

            // Procura pelo arquivo do último dia trabalhado
            String fileName = PrintLogFile.GetLastFile(logDirectory);

            if (fileName == null)
            {
                // Não processa (sai do método) se não achou o arquivo
                dataAccess.CloseConnection();
                return;
            }

            // Compara a data do arquivo com a data do último acesso
            DateTime?fileDate = PrintLogFile.GetDate(fileName);

            if ((fileDate == null) || (fileDate.Value.CompareTo(lastAccess) < 0))
            {
                // Não processa (sai do método) se o arquivo já foi processado
                dataAccess.CloseConnection();
                return;
            }

            // Inicia o append no arquivo de log (acrescentando o "startingDelimiter")
            fileLogger.LogInfo("Importação de log - Iniciando execução...", true);
            // Informa dados do arquivo
            fileLogger.LogInfo("Arquivo - fileName = " + fileName);
            fileLogger.LogInfo("Data - fileDate = " + fileDate.Value.ToShortDateString());
            notifications.Clear();
            // Persiste os registros do arquivo de log
            Boolean imported = ImportFile(fileName, true);

            ProcessNotifications();
            fileLogger.LogInfo("Execução concluída.");

            // Grava a data do último acesso no banco
            if (imported)
            {
                printLogAccess.SetLastAccess(DateTime.Now);
            }

            dataAccess.CloseConnection();
        }