Skip to content

Commit bf5abcb

Browse files
HeloiseJoffealdbr
authored andcommitted
fix: remove deprecated tables and add FTS ResourceType
1 parent 0065335 commit bf5abcb

4 files changed

Lines changed: 83 additions & 58 deletions

File tree

diracx-core/src/diracx/core/models/rss.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@ def __bool__(self) -> bool:
2929

3030

3131
class ResourceType(StrEnum):
32-
Site = "Site"
3332
Compute = "ComputeElement"
3433
Storage = "StorageElement"
34+
FTS = "FTS"
3535

3636

3737
class StorageElementStatus(BaseModel):
@@ -45,6 +45,10 @@ class ComputeElementStatus(BaseModel):
4545
all: ResourceStatus
4646

4747

48+
class FTSStatus(BaseModel):
49+
all: ResourceStatus
50+
51+
4852
class SiteStatus(BaseModel):
4953
all: ResourceStatus
5054

diracx-db/src/diracx/db/sql/rss/db.py

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@
33
from sqlalchemy import select
44

55
from diracx.core.models.rss import (
6-
BannedStatus,
76
ComputeElementStatus,
7+
FTSStatus,
8+
ResourceType,
89
StorageElementStatus,
910
map_status,
1011
)
@@ -25,25 +26,27 @@ class ResourceStatusDB(BaseSQLDB):
2526

2627
metadata = RSSBase.metadata
2728

28-
async def get_site_status(
29-
self, name: str, statustype: str = "all", vo: str = "all"
30-
) -> SiteStatusModel:
29+
async def get_site_status(self, name: str, vo: str = "all") -> SiteStatusModel:
3130
stmt = select(SiteStatus.status, SiteStatus.reason).where(
3231
SiteStatus.name == name,
33-
SiteStatus.statustype == statustype,
32+
SiteStatus.statustype == "all",
3433
SiteStatus.vo == vo,
3534
)
3635
result = await self.conn.execute(stmt)
3736
row = result.first()
3837
if not row:
39-
return SiteStatusModel(all=BannedStatus(allowed=False, reason="Not found"))
38+
raise ValueError(f"Site {name} not found")
4039

4140
return SiteStatusModel(all=map_status(row.Status, row.Reason))
4241

43-
async def get_compute_status(
44-
self, name: str, vo: str = "all"
45-
) -> ComputeElementStatus:
46-
stmt = select(ResourceStatus.status, ResourceStatus.reason).where(
42+
async def get_resource_status(
43+
self,
44+
name: str,
45+
vo: str = "all",
46+
) -> ComputeElementStatus | FTSStatus:
47+
stmt = select(
48+
ResourceStatus.status, ResourceStatus.reason, ResourceStatus.elementtype
49+
).where(
4750
ResourceStatus.name == name,
4851
ResourceStatus.statustype == "all",
4952
ResourceStatus.vo == vo,
@@ -52,11 +55,16 @@ async def get_compute_status(
5255
row = result.first()
5356

5457
if not row:
55-
return ComputeElementStatus(
56-
all=BannedStatus(allowed=False, reason="Not found")
57-
)
58+
raise ValueError(f"Resource {name} not found")
59+
60+
element_type = ResourceType(row.ElementType)
61+
62+
if element_type == ResourceType.Compute:
63+
return ComputeElementStatus(all=map_status(row.Status, row.Reason))
64+
if element_type == ResourceType.FTS:
65+
return FTSStatus(all=map_status(row.Status, row.Reason))
5866

59-
return ComputeElementStatus(all=map_status(row.Status, row.Reason))
67+
raise ValueError(f"Unexpected resource type {element_type}")
6068

6169
async def get_storage_status(
6270
self, name: str, vo: str = "all"
@@ -72,7 +80,7 @@ async def get_status(statustype: str):
7280
row = result.first()
7381

7482
if not row:
75-
return BannedStatus(allowed=False, reason="Not found")
83+
raise ValueError(f"StorageElement {name} not found")
7684

7785
return map_status(row.Status, row.Reason)
7886

diracx-db/src/diracx/db/sql/rss/schema.py

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -84,10 +84,6 @@ class ResourceStatus(ElementStatusBase, RSSBase):
8484
__tablename__ = "ResourceStatus"
8585

8686

87-
class NodeStatus(ElementStatusBase, RSSBase):
88-
__tablename__ = "NodeStatus"
89-
90-
9187
# tables with schema defined in ElementStatusBaseWithID
9288

9389

@@ -105,11 +101,3 @@ class ResourceLog(ElementStatusBaseWithID, RSSBase):
105101

106102
class ResourceHistory(ElementStatusBaseWithID, RSSBase):
107103
__tablename__ = "ResourceHistory"
108-
109-
110-
class NodeLog(ElementStatusBaseWithID, RSSBase):
111-
__tablename__ = "NodeLog"
112-
113-
114-
class NodeHistory(ElementStatusBaseWithID, RSSBase):
115-
__tablename__ = "NodeHistory"

diracx-db/tests/rss/test_rss_db.py

Lines changed: 55 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
AllowedStatus,
1111
BannedStatus,
1212
ComputeElementStatus,
13+
FTSStatus,
1314
StorageElementStatus,
1415
map_status,
1516
)
@@ -76,17 +77,14 @@ async def test_site_status(rss_db: ResourceStatusDB):
7677
assert bool(result.all) is True
7778

7879
# Test with an unknow Site (should not be found)
79-
async with rss_db as rss_db:
80-
result = await rss_db.get_site_status("UnknownSite")
81-
assert isinstance(result, SiteStatusModel)
82-
assert isinstance(result.all, BannedStatus)
83-
assert bool(result.all) is False
84-
assert result.all.reason == "Not found"
80+
with pytest.raises(ValueError, match="Site Unknown not found"):
81+
async with rss_db as rss_db:
82+
await rss_db.get_site_status("Unknown")
8583

8684

87-
async def test_compute_status(rss_db: ResourceStatusDB):
88-
# Insert a test Compute Element
85+
async def test_resource_status(rss_db: ResourceStatusDB):
8986
async with rss_db.engine.begin() as conn:
87+
# Insert a test Compute Element
9088
await conn.execute(
9189
insert(rss_db.metadata.tables["ResourceStatus"]).values(
9290
Name="TestCompute",
@@ -101,21 +99,60 @@ async def test_compute_status(rss_db: ResourceStatusDB):
10199
TokenOwner="test",
102100
)
103101
)
102+
# Insert a test FTS
103+
await conn.execute(
104+
insert(rss_db.metadata.tables["ResourceStatus"]).values(
105+
Name="TestFTS",
106+
StatusType="all",
107+
VO="all",
108+
Status="Active",
109+
Reason="All good",
110+
DateEffective=_NOW,
111+
TokenExpiration=_FAR,
112+
LastCheckTime=_NOW,
113+
ElementType="FTS",
114+
TokenOwner="test",
115+
)
116+
)
117+
# Insert a wrong test
118+
await conn.execute(
119+
insert(rss_db.metadata.tables["ResourceStatus"]).values(
120+
Name="WrongTest",
121+
StatusType="all",
122+
VO="all",
123+
Status="Active",
124+
Reason="All good",
125+
DateEffective=_NOW,
126+
TokenExpiration=_FAR,
127+
LastCheckTime=_NOW,
128+
ElementType="WrongTest",
129+
TokenOwner="WrongTest",
130+
)
131+
)
104132

105133
# Test with the test Compute Element (should be found)
106134
async with rss_db as rss_db:
107-
result = await rss_db.get_compute_status("TestCompute")
135+
result = await rss_db.get_resource_status("TestCompute")
108136
assert isinstance(result, ComputeElementStatus)
109137
assert isinstance(result.all, AllowedStatus)
110138
assert bool(result.all) is True
111139

112-
# Test with an unknow Compute Element (should not be found)
140+
# Test with the test FTS (should be found)
113141
async with rss_db as rss_db:
114-
result = await rss_db.get_compute_status("UnknownCompute")
115-
assert isinstance(result, ComputeElementStatus)
116-
assert isinstance(result.all, BannedStatus)
117-
assert bool(result.all) is False
118-
assert result.all.reason == "Not found"
142+
result = await rss_db.get_resource_status("TestFTS")
143+
assert isinstance(result, FTSStatus)
144+
assert isinstance(result.all, AllowedStatus)
145+
assert bool(result.all) is True
146+
147+
# Test with a wrong Resource type
148+
with pytest.raises(ValueError, match="not a valid ResourceType"):
149+
async with rss_db as rss_db:
150+
await rss_db.get_resource_status("WrongTest")
151+
152+
# Test with an unknow Resource (should not be found)
153+
with pytest.raises(ValueError, match="Resource Unknown not found"):
154+
async with rss_db as rss_db:
155+
await rss_db.get_resource_status("Unknown")
119156

120157

121158
async def test_storage_status(rss_db: ResourceStatusDB):
@@ -151,18 +188,6 @@ async def test_storage_status(rss_db: ResourceStatusDB):
151188
assert bool(result.remove) is True
152189

153190
# Test with an unknow Storage Element (should not be found)
154-
async with rss_db as rss_db:
155-
result = await rss_db.get_storage_status("UnknownStorage")
156-
assert isinstance(result, StorageElementStatus)
157-
assert isinstance(result.read, BannedStatus)
158-
assert isinstance(result.write, BannedStatus)
159-
assert isinstance(result.check, BannedStatus)
160-
assert isinstance(result.remove, BannedStatus)
161-
assert bool(result.read) is False
162-
assert bool(result.write) is False
163-
assert bool(result.check) is False
164-
assert bool(result.remove) is False
165-
assert result.read.reason == "Not found"
166-
assert result.write.reason == "Not found"
167-
assert result.check.reason == "Not found"
168-
assert result.remove.reason == "Not found"
191+
with pytest.raises(ValueError, match="StorageElement Unknown not found"):
192+
async with rss_db as rss_db:
193+
await rss_db.get_storage_status("Unknown")

0 commit comments

Comments
 (0)