O Job Scheduler automatiza a execução de arquivos com base em uma data (para execuções únicas) ou em uma cron expression (para execuções recorrentes)
Que tal conhecer o projeto para, depois, usufruir dele? Fique a vontade para navegar por entre os tópicos!
1. Para usufruir do projeto localmente, em primeiro lugar, é necessário que se tenha à disposição o código. Para isso, pode-se:
-
Clonar o projeto
git clone https://github.com/malurt/test_readme.git
-
Baixar o projeto 'zipado'
2. Após abrir o projeto no seu editor de código, determine no arquivo .env
as variáveis de ambiente de acordo com descrito na seção "Variáveis de Ambiente".
-
O banco de dados a ser utilizado deve estar de acordo com a modelagem;
-
Caso deseje filtrar os arquivos recebidos com os agendamentos, é necessário determinar as extensões válidas na propriedade
validExts
do aquivosrc/util/constants/schedule-job/upload/config/options.ts
3. Configurado o ambiente, pode-se:
-
iniciar a api, para que novos agendamentos sejam recebidos e computados
npm run server:dev
-
iniciar o scheduler, para que a busca por agendamentos a serem executados aconteça.
npm run scheduler:dev
4. Por fim, para agendar uma tarefa, basta enviar uma requisição http para a URL determinada no .env
cujo body contenha: a) o arquivo a ser executado; b) um campo executionRule
com uma string de data ou expressão cron.
- São aceitas datas em formato padrão (yyyy-MM-dd hh:mm) e em formato brasileiro (dd/MM/yyyy hh:mm)
5. A execução das tarefas agendadas acontece automaticamente. Toda execução é registrada no banco de dados, sendo possível por exemplo, com uma consulta a ele, verificar quais foram interrompidas devido a falhas e quais foram executadas com sucesso.
Abaixo estão listadas as variáveis de ambiente essenciais ao projeto, bem como algumas sugestões de valores para o bom funcionamento do projeto:
NODE_ENV
SERVER_PORT
SERVER_BASE_URI
SERVER_ENABLED
(true)
DB_DIALECT
DB_HOST
DB_USERNAME
DB_PASSWORD
DB_PORT
LOGGER_CONSOLE_LEVEL
(debug)
LOGGER_DB_ENABLED
(false)
CONSUMER_ENABLED
(false)
SCHEDULER_ENABLED
(true)
INPUT_NAME
FOLDER_NAME
FILTER_ENABLED
KEEP_ORIGINAL_FILENAME
Para saber mais sobre o Job Scheduler, leia abaixo a descrição de seu processo de funcionamento. Você também pode acessar uma versão visual de clicando aqui.
O Job Scheduler, como já explicado, trabalha em duas frentes: o agendamento e a execução de tarefas.
Os agendamentos acontecem através de uma API. O server http recebe requisições que trazem em si um arquivo (a tarefa a ser executada) e a regra de execução, que pode ser uma data específica ou um intervalo de repetição do tipo cron. O arquivo recebido é tratado (sendo possível nesta etapa, por exemplo, filtrar extensões) e, depois, armazenado localmente. A regra de execução pode ter dois tratamentos: caso seja do tipo cron, é convertida pra uma data que corresponda à próxima execução da série; se for do tipo data, é apenas formatada, caso esteja nos padrões brasileiros.
A execução por sua vez acontece paralelamente. Repetitivamente, busca-se no banco de dados registros de tarefas ainda não finalizadas cuja data de execução esteja próxima. Retornadas as tarefas que correspondem aos critérios, processos filhos são lançados para que os respectivos arquivos sejam executados separadamente. Ao fim da execução, dados sobre o seu resultado são registrados e as informações da tarefa, como o seus status (finalizada, em andamento, interrompida), são atualizados.
Detalhes do projeto atual que podem ser adaptados:
- O banco de dados é vistoriado a cada 1 minuto*;
- Os arquivos enviados são filtrados pela extensão .js;
- A regra de execução é aceita em formato padrão ou brasileiro;
* Deve-se tomar cuidado ao determinar o intervalo da vistoria para que tarefas não sejam esquecidas ou executadas em duplicidade;
Você pode utilizar o Job Scheduler para treinar suas habilidades na programação obviamente, mas também para se livrar da exaustão de executar tarefas repetitivas ou da responsabilidade de ter que lembrar de alguma tarefa do futuro sem se perder no prazo.
- NodeJS
- TypeScript
- Express
- Multer
- Knex
- Cron expressions
- Child Process (spawn)
- DbDocs
- Clean Architecture
- Keep It Simple, Silly (KISS)
- Single Responsibility Principle (SRP)
- Interface Segregation Principle (ISP)
- Don't Repeat Yourself (DRY)
- Dependency Inversion Principle (DIP)
- Separation of Concerns (SOC)
- You Aren't Gonna Need It (YAGNI)
- Design Patterns:
- Factory Method
- Singleton
- Adapter
- Dependency Injection
-
-
16h pesquisa & planejamento
-
52h programação
-
-
-
Child Process
-
Processos agendados em Node
Tipo Link ART Como executar tarefas agendadas com Node Schedule ART Scheduling Jobs with Node.js -
Multer & Uploads
Tipo Link DOC Multer VID [Uploading Images with Multer ART Multer: Easily upload files with Node.js and Express FÓRUM Can't get multer filefilter error handling to work -
Cron Expression
Tipo Link DOC cron-parser ART Javascript Cron: agendando e repetindo tarefas TOOL Crontab Guru
-
🧑 🤝 👩 Devo ao Lucas Santos, um dev extraordinário, a ideia (e o desafio) do Job Scheduler. É ele também a pessoa que pensou e criou o template com base no qual desenvolvi o projeto em questão. Além disso, foi ele quem me socorreu nos momentos de desespero hahaha. Um grande 'muito obrigada', Santos!! :star2: