From c286106a7c09b0eb4f62b04123d571acef2ee3ae Mon Sep 17 00:00:00 2001 From: emmatveev Date: Fri, 22 Nov 2024 21:48:13 +0300 Subject: [PATCH 1/4] fix --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 224e023..13bc808 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,4 +8,4 @@ RUN pip install -r requirements.txt COPY . . -ENTRYPOINT ["python", "main.py"] +ENTRYPOINT ["python", "main.py"] \ No newline at end of file -- 2.45.2 From f5f55bc8cf33d63804cd5a8369c8cd74ea0ab25a Mon Sep 17 00:00:00 2001 From: emmatveev Date: Sun, 24 Nov 2024 11:00:54 +0300 Subject: [PATCH 2/4] fix --- .deploy/deploy-dev.yaml | 6 +++--- .deploy/deploy-prod.yaml | 2 +- .gitea/workflows/deploy-dev.yaml | 4 ++-- app/routers/configs.py | 18 ++++++++++++++++++ app/routers/experiments.py | 32 +++++++++++++++++++++++++++----- app/storage/mongo/configs.py | 8 ++++---- app/storage/mongo/experiments.py | 8 ++++---- 7 files changed, 59 insertions(+), 19 deletions(-) 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 -- 2.45.2 From eb6f3402f8713c09a9435db053bcae5bf14326c5 Mon Sep 17 00:00:00 2001 From: emmatveev Date: Sun, 24 Nov 2024 11:08:20 +0300 Subject: [PATCH 3/4] fix --- .gitea/workflows/deploy-dev.yaml | 2 ++ .gitea/workflows/deploy-prod.yaml | 2 ++ 2 files changed, 4 insertions(+) diff --git a/.gitea/workflows/deploy-dev.yaml b/.gitea/workflows/deploy-dev.yaml index 54d81bf..47d869f 100644 --- a/.gitea/workflows/deploy-dev.yaml +++ b/.gitea/workflows/deploy-dev.yaml @@ -37,6 +37,8 @@ jobs: uses: actions/checkout@v4 with: ref: dev + - name: network + run: docker network create -d overlay --attachable configurator-development || true - name: deploy env: MONGO_PASSWORD_DEV: ${{ secrets.MONGO_PASSWORD_DEV }} diff --git a/.gitea/workflows/deploy-prod.yaml b/.gitea/workflows/deploy-prod.yaml index 29a07eb..ebc3393 100644 --- a/.gitea/workflows/deploy-prod.yaml +++ b/.gitea/workflows/deploy-prod.yaml @@ -37,6 +37,8 @@ jobs: uses: actions/checkout@v4 with: ref: prod + - name: network + run: docker network create -d overlay --attachable configurator || true - name: deploy env: MONGO_PASSWORD_PROD: ${{ secrets.MONGO_PASSWORD_PROD }} -- 2.45.2 From 728fe12a1a1a7b06533380989238be8a7956ac7b Mon Sep 17 00:00:00 2001 From: emmatveev Date: Sun, 24 Nov 2024 11:31:32 +0300 Subject: [PATCH 4/4] fix --- app/storage/mongo/__init__.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/storage/mongo/__init__.py b/app/storage/mongo/__init__.py index e29b4e8..2d598dd 100644 --- a/app/storage/mongo/__init__.py +++ b/app/storage/mongo/__init__.py @@ -18,12 +18,10 @@ def create_indexes(): database.get_collection('configs').create_index([ ('stage', 1), ('project', 1), - ('name', 1) ]) database.get_collection('experiments').create_index([ ('stage', 1), ('project', 1), - ('name', 1) ]) database.get_collection('staff').create_index([ ('platform_id', 1), -- 2.45.2