Skip to content

Commit 832f818

Browse files
authored
Merge pull request #165 from dataforgoodfr/164_dispatch_space_bytes
[FIX] /dispatch : free space expressed in bytes (#164_dispatch_space_…
2 parents 0b00cba + 985bb95 commit 832f818

File tree

9 files changed

+20
-14
lines changed

9 files changed

+20
-14
lines changed

.gitignore

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,4 +183,7 @@ temp/
183183

184184

185185
logs/
186-
output/
186+
output/
187+
188+
189+
dispatcher/api/data/allocations.json

dispatcher/api/data/allocations.json

Lines changed: 0 additions & 1 deletion
This file was deleted.

dispatcher/api/models/logic.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ def _save_json(file: Path, data: List[Dict]):
8080

8181
@staticmethod
8282
def _sort_helper(asset: Dict) -> tuple:
83-
"""Helper function to sort by priority (desc) and size (asc)"""
83+
"""Helper function to sort by priority (asc) and size (asc)"""
8484
return (
8585
asset['priority'],
8686
asset.get('size', float('inf')) if asset.get('size') is not None else float('inf')
@@ -95,6 +95,7 @@ async def get_available_assets(self) -> List[Dict]:
9595
try:
9696
logger.info("Récupération des assets depuis le priorizer")
9797
assets = await self._priorizer_client.get_ranking()
98+
logger.info(f"Assets retrieved from ranker: {len(assets)}")
9899

99100
# Conversion of AssetModel to dictionaries for compatibility
100101
result = [asset.model_dump() for asset in assets]
@@ -110,20 +111,23 @@ async def get_available_assets(self) -> List[Dict]:
110111
logger.info("Utilisation du cache local pour les assets")
111112
return self._load_json(self.ranker_cache_file)
112113

113-
async def allocate_assets(self, free_space_mb: float, node_id: str = None) -> Dict:
114+
async def allocate_assets(self, free_space: float, node_id: str = None) -> Dict:
114115
"""Priorise et alloue les assets (version multi-allocation)"""
115116
available = await self.get_available_assets()
116117
selected = []
117-
remaining_space = free_space_mb
118-
119-
# Tri par priorité (desc) puis taille (asc)
118+
remaining_space = free_space
119+
logger.info(f"Free space available: {remaining_space / (1024 * 1024)} GB")
120+
121+
# Tri par priorité (asc) puis taille (asc)
120122
for asset in sorted(available, key=self._sort_helper):
121123
# Asset size may not be known yet
122124
if asset['size'] is None or asset['size'] <= remaining_space:
123125
selected.append(asset)
124126
if asset['size'] is not None:
125127
remaining_space -= asset['size']
126128

129+
logger.info(f"Selected {len(selected)} assets")
130+
127131
if not selected:
128132
return None
129133

dispatcher/api/models/payload.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ class Status(Enum):
1313
class DispatchRequest(BaseModel):
1414
name: str = Field(..., description="Rescuer name")
1515
description: str = Field(..., description="Rescuer description")
16-
free_space_gb: float = Field(..., description="Rescuer available space")
16+
free_space: float = Field(..., description="Rescuer available space")
1717
node_id: Optional[str] = Field(None, description="Node id")
1818

1919
class BaseAssetModel(BaseModel):

dispatcher/api/routers/dispatch.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ async def dispatch(request: DispatchRequest):
4040
app_state._logger.info("________In dispatch")
4141
# Call dispatcher logic with priorizer integration
4242
result = await app_state._dispatcher.allocate_assets(
43-
free_space_mb=request.free_space_gb * 1024,
43+
free_space=request.free_space,
4444
node_id=request.node_id
4545
)
4646
app_state._logger.info(result)

priorizer/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ Allocates datasets to a node based on available storage space.
8282
**Request:**
8383
```json
8484
{
85-
"free_space_gb": 10,
85+
"free_space": 10,
8686
"node_id": "node-123"
8787
}
8888
```

priorizer/api/routers/priorizer.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ async def ranking():
4040
asset=result["assets"]
4141
)
4242
app_state._logger.info("Priorizer response ready")
43-
app_state._logger.info(f"Priorizer response: {priorizer_response}")
43+
# app_state._logger.info(f"Priorizer response: {priorizer_response}")
4444

4545
return priorizer_response
4646

test/dispatcher/test_dispatcher.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
payload_mock = {
55
"name": "mock_dispatch_request",
66
"description": "This is a test dispatch",
7-
"free_space_gb": 10
7+
"free_space": 10
88
}
99
print(payload_mock)
1010
response_mock = requests.post(url_mock, json=payload_mock)
@@ -17,7 +17,7 @@
1717
payload = {
1818
"name": "test_dispatch_request",
1919
"description": "This is a test dispatch",
20-
"free_space_gb": 10,
20+
"free_space": 10,
2121
"node_id": "1"
2222
}
2323
print(payload)

test/priorizer/test_priorizer.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
#payload = {
1414
# "name": "test_dispatch_request",
1515
# "description": "This is a test dispatch",
16-
# "free_space_gb": 10,
16+
# "free_space": 10,
1717
# "node_id": "1"
1818
# }
1919
#print(payload)

0 commit comments

Comments
 (0)