Skip to content

Commit f9566a4

Browse files
ayushjariyalGeigerJ2danielhollas
authored
Show first and last node ctime for verdi storage info --detailed (#6829)
Co-authored-by: Julian Geiger <[email protected]> Co-authored-by: Daniel Hollas <[email protected]>
1 parent 761764d commit f9566a4

File tree

2 files changed

+31
-2
lines changed

2 files changed

+31
-2
lines changed

src/aiida/orm/implementation/storage_backend.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -471,6 +471,22 @@ def get_orm_entities(self, detailed: bool = False) -> dict:
471471
count = QueryBuilder(self).append(Node).count()
472472
data['Nodes'] = {'count': count}
473473
if detailed:
474+
first_time = (
475+
QueryBuilder(self)
476+
.append(Node, project=['ctime'], tag='node')
477+
.order_by({'node': {'ctime': 'asc'}})
478+
.first(flat=True)
479+
)
480+
last_time = (
481+
QueryBuilder(self)
482+
.append(Node, project=['ctime'], tag='node')
483+
.order_by({'node': {'ctime': 'desc'}})
484+
.first(flat=True)
485+
)
486+
487+
data['Nodes']['first_created'] = str(first_time) if first_time else None
488+
data['Nodes']['last_created'] = str(last_time) if last_time else None
489+
474490
node_types = sorted(
475491
{typ for (typ,) in QueryBuilder(self).append(Node, project=['node_type']).iterall() if typ is not None}
476492
)

tests/storage/psql_dos/test_backend.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,8 @@ def mock_maintain(self, live=True, dry_run=False, compress=False, **kwargs):
108108

109109
def test_get_info(monkeypatch):
110110
"""Test the ``get_info`` method."""
111+
from aiida import orm
112+
111113
storage_backend = get_manager().get_profile_storage()
112114

113115
def mock_get_info(self, detailed=False, **kwargs):
@@ -128,13 +130,24 @@ def mock_get_info(self, detailed=False, **kwargs):
128130
assert 'extra_value' not in repository_info_out
129131
assert repository_info_out['value'] == 42
130132

131-
storage_info_out = storage_backend.get_info(detailed=True)
132-
repository_info_out = storage_info_out['repository']
133+
node1 = orm.Data().store()
134+
node2 = orm.Data().store()
135+
136+
detailed_storage_info_out = storage_backend.get_info(detailed=True)
137+
repository_info_out = detailed_storage_info_out['repository']
133138
assert 'value' in repository_info_out
134139
assert 'extra_value' in repository_info_out
135140
assert repository_info_out['value'] == 42
136141
assert repository_info_out['extra_value'] == 0
137142

143+
# Test first_created and last_created timestamps
144+
nodes_info = detailed_storage_info_out['entities']['Nodes']
145+
146+
assert 'first_created' in nodes_info
147+
assert 'last_created' in nodes_info
148+
assert nodes_info['first_created'] == str(node1.ctime)
149+
assert nodes_info['last_created'] == str(node2.ctime)
150+
138151

139152
def test_unload_profile():
140153
"""Test that unloading the profile closes all sqla sessions.

0 commit comments

Comments
 (0)