Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

POST /jobs #151

Merged
Merged

Conversation

@daltonmatos
Copy link
Member

daltonmatos commented Jul 26, 2019

No description provided.

daltonmatos added 3 commits Jul 25, 2019
@@ -9,8 +9,13 @@
class ChronosClient:
def __init__(self, url: str) -> None:
self.address = url
self.base_url = f"{self.address}/v1/scheduler"

This comment has been minimized.

Copy link
@pabrrs

pabrrs Jul 26, 2019

Collaborator

Tem alguma forma de obter esse endereço de rota dinamicamente ?

No django é possível com o método reverse( ) passando o alias da rota onde o retorno é a url declarada.

Existe algo análogo a isso no asgard ?

This comment has been minimized.

Copy link
@daltonmatos

daltonmatos Jul 26, 2019

Author Member

O aiohttp possui uma mecanismo semelhante, mas nesse caso aqui esse address é um endereço de um serviço externo, passado via envvar.

Ref. https://docs.aiohttp.org/en/stable/web_quickstart.html#reverse-url-constructing-using-named-resources

daltonmatos added 2 commits Jul 26, 2019
Sempre que criamos um novo job ele precisa receber uma constraint que é
quem vai definir em qual grupo de máquinas esse job vai rodar.

Essa constraint é a `owner`. **Todo** job precisa ter constraint
`owner:LIKE:{account.owner}` onde o {account} é a conta que esse job
pertence.
if item.split(":")[0] != constraint_name:
result.append(item)
self.constraints = result
return self

This comment has been minimized.

Copy link
@pabrrs

pabrrs Jul 26, 2019

Collaborator

Algumas considerações:

1

Aqui você pode utilizar list comprehension para remover contraint_name da lista contraints, enclausurando a execução para retornar a nova lista e reatrirbuir self.contraints:

def _remove_constraint_by_name(self, constraint_name: str):
    self.constraints = [
        item
        for item in self.constraints or []
        if item.split(':')[0] != constraint_name
    ]

2

Acredito que os métodos add_constraint( ) e _remove_constraint_by_name( ) não precisam retornar o próprio objeto da classe, considerando que já são métodos da classe e já causam side-effects ao objeto quando executados. Dessa forma, podemos ter os métodos sem retorno:

def add_constraint(self, constraint: ConstraintSpecItem):
def _remove_constraint_by_name(self, constraint_name: str):

3

Esse comportamento item.split(":")[0] de extrair a constraint name de uma constraint pode ser abstraido a um helper ? Pois esse código tem se repetido em alguns métodos da classe.

This comment has been minimized.

Copy link
@daltonmatos

daltonmatos Jul 26, 2019

Author Member
  1. 🎉 Farei.
  2. Só retornei self para poder fazer chamadas encadeadas. No método list_jobs() isso foi útil pois consigo percorrer a lista de jobs apenas uma vez. Aqui: https://github.com/B2W-BIT/asgard-api/pull/150/files#diff-f46acc79d683f5cf2fc7132c04622180R40-R46 Sem retornar self eu precisaria ter percorrido a lista novamente apenas para chamar o .remove_namespace().
  3. Podemos pensar em algo. Eu quero mudar esse formato completamente, sair dessa string para um objeto complexo:
{
  "name": "workload",
  "operator": "LIKE",
  "value": "general"
}
@codecov

This comment has been minimized.

Copy link

codecov bot commented Jul 26, 2019

Codecov Report

Merging #151 into feature/scheduled-jobs-list will increase coverage by 0.14%.
The diff coverage is 95.07%.

Impacted file tree graph

@@                       Coverage Diff                       @@
##           feature/scheduled-jobs-list     #151      +/-   ##
===============================================================
+ Coverage                        91.56%   91.71%   +0.14%     
===============================================================
  Files                              103      104       +1     
  Lines                             3046     3221     +175     
  Branches                           174      209      +35     
===============================================================
+ Hits                              2789     2954     +165     
- Misses                             244      254      +10     
  Partials                            13       13
Flag Coverage Δ
#typehint 45.15% <52.69%> (+0.84%) ⬆️
#unittest 95.79% <98.27%> (+0.11%) ⬆️
Impacted Files Coverage Δ
asgard/api/resources/users.py 100% <ø> (ø) ⬆️
asgard/api/users.py 91.08% <100%> (+0.08%) ⬆️
asgard/api/resources/__init__.py 100% <100%> (ø)
asgard/http/exceptions.py 100% <100%> (ø) ⬆️
asgard/api/resources/jobs.py 100% <100%> (ø) ⬆️
asgard/services/jobs.py 100% <100%> (ø) ⬆️
asgard/backends/chronos/models/converters.py 100% <100%> (ø) ⬆️
asgard/backends/jobs.py 100% <100%> (ø) ⬆️
asgard/models/job.py 98.36% <100%> (+0.44%) ⬆️
asgard/exceptions/__init__.py 100% <100%> (ø) ⬆️
... and 5 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 77511c4...4d01317. Read the comment docs.

daltonmatos added 3 commits Jul 26, 2019
@daltonmatos daltonmatos changed the title Feature/scheduled jobs create POST /jobs Jul 26, 2019
daltonmatos added 15 commits Jul 29, 2019
Muitas vezes quando buscamos um conteúdo no chronos logo após esse
conteúdo ter sido criado o chronos responde como não encontrado.
Deve apenas retornar um HTTP e a exception deve ser lançada pelo código
do backend.

O ajuste aqui foi apenas no mock, o código estava correto
Essa implementação é um paliativo enquando nao refazemos a API do
`asgard.http.client`. Quando fizermos essa re-implementação poderemos
voltar a usar o client padrão aqui.
A auth vem de uma nova envvar: SCHEDULED_JOBS_SERVICE_AUTH
Dessa forma evitamos os `.split(":")` e deixamos a validação para o
Pydantic, pagando o preço de ter uma envvar com um conteúdo mais complexo.
@pabrrs
pabrrs approved these changes Aug 1, 2019
daltonmatos added 5 commits Aug 1, 2019
O código não estava checando se a env já existe antes de setar o valor
final
…d-jobs-create
…s-jobs-delete
…obs-update
…obs-create
@daltonmatos daltonmatos merged commit 4d01317 into feature/scheduled-jobs-list Aug 1, 2019
0 of 3 checks passed
0 of 3 checks passed
ci/circleci: py368 Your tests are queued behind your running builds
Details
ci/circleci: py36x Your tests are queued behind your running builds
Details
ci/circleci: py37x Your tests are queued behind your running builds
Details
@daltonmatos daltonmatos deleted the feature/scheduled-jobs-create branch Aug 29, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Linked issues

Successfully merging this pull request may close these issues.

None yet

2 participants
You can’t perform that action at this time.