Coder Social home page Coder Social logo

job-scheduler's Introduction

Repo Cover - Person running inside of a Clock

Job Scheduler



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!



Como usar o job scheduler?

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 aquivo src/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.



Variáveis de Ambiente

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:

SERVER

NODE_ENV

SERVER_PORT

SERVER_BASE_URI

SERVER_ENABLED (true)

DATABASE

DB_DIALECT

DB_HOST

DB_USERNAME

DB_PASSWORD

DB_PORT

LOGGER

LOGGER_CONSOLE_LEVEL (debug)

LOGGER_DB_ENABLED (false)

CONSUMER

CONSUMER_ENABLED (false)

SCHEDULER

SCHEDULER_ENABLED (true)

JOB FILE UPLOAD

INPUT_NAME

FOLDER_NAME

FILTER_ENABLED

KEEP_ORIGINAL_FILENAME






Um pouco mais sobre o JobScheduler

Como ele funciona mesmo?

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;



Em que eu utilizaria?

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.






Outros detalhes sobre o Job Scheduler

- Principais Recursos & Tecnologias

  • NodeJS
  • TypeScript
  • Express
  • Multer
  • Knex
  • Cron expressions
  • Child Process (spawn)
  • DbDocs

- Design Patterns | Princípios | Metodologias

  • 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

- Jornada: da ideia à finalização

- Auxílio, contribuições

🧑 🤝 👩 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:

job-scheduler's People

Contributors

malu-ribeiro avatar malurt avatar

Stargazers

 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.