diff --git a/.deploy/deploy-dev.yaml b/.deploy/deploy-dev.yaml index d58b2e5..f1816fd 100644 --- a/.deploy/deploy-dev.yaml +++ b/.deploy/deploy-dev.yaml @@ -2,10 +2,10 @@ version: "3.4" services: - queues: + configurator: image: mathwave/sprint-repo:configurator networks: - - configurator + - configurator-development environment: MONGO_HOST: "mongo.develop.sprinthub.ru" MONGO_PASSWORD: $MONGO_PASSWORD_DEV @@ -18,5 +18,5 @@ services: order: start-first networks: - configurator: + configurator-development: external: true diff --git a/.deploy/deploy-prod.yaml b/.deploy/deploy-prod.yaml index ebbe9c0..84153e5 100644 --- a/.deploy/deploy-prod.yaml +++ b/.deploy/deploy-prod.yaml @@ -2,7 +2,7 @@ version: "3.4" services: - queues: + configurator: image: mathwave/sprint-repo:configurator networks: - configurator diff --git a/.gitea/workflows/deploy-dev.yaml b/.gitea/workflows/deploy-dev.yaml index 2631236..54d81bf 100644 --- a/.gitea/workflows/deploy-dev.yaml +++ b/.gitea/workflows/deploy-dev.yaml @@ -28,7 +28,7 @@ jobs: run: docker push mathwave/sprint-repo:configurator deploy-dev: name: Deploy dev - runs-on: [dev] + runs-on: [prod] needs: push steps: - name: login @@ -40,4 +40,4 @@ jobs: - name: deploy env: MONGO_PASSWORD_DEV: ${{ secrets.MONGO_PASSWORD_DEV }} - run: docker stack deploy --with-registry-auth -c ./.deploy/deploy-dev.yaml infra + run: docker stack deploy --with-registry-auth -c ./.deploy/deploy-dev.yaml infra-development diff --git a/app/routers/configs.py b/app/routers/configs.py index 2467bdb..7b1a97d 100644 --- a/app/routers/configs.py +++ b/app/routers/configs.py @@ -20,6 +20,12 @@ class RequestDeleteBody(pydantic.BaseModel): id: str +class Config(pydantic.BaseModel): + id: str + name: str + value: dict + + router = fastapi.APIRouter() @@ -40,3 +46,15 @@ async def delete(body: RequestDeleteBody): changed = await configs.delete(id=bson.ObjectId(body.id)) if not changed: raise fastapi.HTTPException(404) + + +@router.get('/api/v1/configs') +async def get(stage: str, project: str) -> list[Config]: + return [ + Config( + id=str(config._id), + name=config.name, + value=config.value, + ) + for config in await configs.get(project=project, stage=stage) + ] diff --git a/app/routers/experiments.py b/app/routers/experiments.py index 468e549..a531114 100644 --- a/app/routers/experiments.py +++ b/app/routers/experiments.py @@ -11,9 +11,18 @@ class RequestPostBody(pydantic.BaseModel): class RequestPutBody(pydantic.BaseModel): + id: str + enabled: bool + condition: str + + +class RequestDeleteBody(pydantic.BaseModel): + id: str + + +class Experiment(pydantic.BaseModel): + id: str name: str - stage: str - project: str enabled: bool condition: str @@ -28,13 +37,26 @@ async def post(body: RequestPostBody): @router.put('/api/v1/experiments', status_code=fastapi.status.HTTP_202_ACCEPTED, responses={404: {'description': 'Not found'}}) async def put(body: RequestPutBody): - changed = await experiments.update(project=body.project, stage=body.stage, name=body.name, enabled=body.enabled, condition=body.condition) + changed = await experiments.update(id=body.id, enabled=body.enabled, condition=body.condition) if not changed: raise fastapi.HTTPException(404) @router.delete('/api/v1/experiments', status_code=fastapi.status.HTTP_202_ACCEPTED, responses={404: {'description': 'Not found'}}) -async def delete(body: RequestPostBody): - changed = await experiments.delete(project=body.project, stage=body.stage, name=body.name) +async def delete(body: RequestDeleteBody): + changed = await experiments.delete(id=body.id) if not changed: raise fastapi.HTTPException(404) + + +@router.get('/api/v1/experiments') +async def get(stage: str, project: str) -> list[Experiment]: + return [ + Experiment( + id=str(experiment._id), + name=experiment.name, + enabled=experiment.enabled, + condition=experiment.condition, + ) + for experiment in await experiments.get(project=project, stage=stage) + ] diff --git a/app/storage/mongo/configs.py b/app/storage/mongo/configs.py index 594a362..e3e374a 100644 --- a/app/storage/mongo/configs.py +++ b/app/storage/mongo/configs.py @@ -21,13 +21,13 @@ async def create(config: Config) -> str: return result.inserted_id -async def update_data(project: str, stage: str, name: str, value: dict) -> bool: - result = await collection.update_one({'project': project, 'stage': stage, 'name': name}, {'$set': {'value': value}}) +async def update_data(id: bson.ObjectId, value: dict) -> bool: + result = await collection.update_one({'_id': id}, {'$set': {'value': value}}) return result.modified_count != 0 -async def delete(project: str, stage: str, name: str) -> bool: - result = await collection.delete_one({'project': project, 'stage': stage, 'name': name}) +async def delete(id: bson.ObjectId) -> bool: + result = await collection.delete_one({'_id': id}) return result.deleted_count != 0 diff --git a/app/storage/mongo/experiments.py b/app/storage/mongo/experiments.py index 0049a05..eba4246 100644 --- a/app/storage/mongo/experiments.py +++ b/app/storage/mongo/experiments.py @@ -22,13 +22,13 @@ async def create(experiment: Experiment) -> str: return result.inserted_id -async def update(project: str, stage: str, name: str, enabled: bool, condition: str) -> bool: - result = await collection.update_one({'project': project, 'stage': stage, 'name': name}, {'$set': {'enabled': enabled, 'condition': condition}}) +async def update(id: bson.ObjectId, enabled: bool, condition: str) -> bool: + result = await collection.update_one({'_id': id}, {'$set': {'enabled': enabled, 'condition': condition}}) return result.modified_count != 0 -async def delete(project: str, stage: str, name: str) -> bool: - result = await collection.delete_one({'project': project, 'stage': stage, 'name': name}) +async def delete(id: bson.ObjectId) -> bool: + result = await collection.delete_one({'_id': id}) return result.deleted_count != 0