Skip to content

Commit 08c3e1e

Browse files
Merge pull request #361 from Ratio1/develop
feat: save deeploy requests in cstore
2 parents d2792ee + b82d5b8 commit 08c3e1e

File tree

2 files changed

+51
-2
lines changed

2 files changed

+51
-2
lines changed

extensions/business/deeploy/deeploy_manager_api.py

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020

2121
from naeural_core.business.default.web_app.supervisor_fast_api_web_app import SupervisorFastApiWebApp as BasePlugin
2222

23+
DEEPLOY_REQUESTS_CSTORE_HKEY = "DEEPLOY_REQUESTS"
24+
DEEPLOY_REQUESTS_MAX_RECORDS = 5
2325

2426
__VER__ = '0.6.0'
2527

@@ -38,6 +40,7 @@
3840
'WARMUP_DELAY' : 300,
3941
'PIPELINES_CHECK_DELAY' : 300,
4042
'MIN_ETH_BALANCE' : 0.00005,
43+
'REQUESTS_LOG_INTERVAL' : 5 * 60,
4144

4245
'VALIDATION_RULES': {
4346
**BasePlugin.CONFIG['VALIDATION_RULES'],
@@ -82,8 +85,41 @@ def on_init(self):
8285
color='r', boxed=True
8386
)
8487
self.maybe_stop_tunnel_engine()
88+
# Request tracking state
89+
self.__recent_requests = self.deque(maxlen=DEEPLOY_REQUESTS_MAX_RECORDS)
90+
self.__last_requests_log_time = 0
8591
return
86-
92+
93+
94+
def on_request(self, request):
95+
"""
96+
Hook called when a new request arrives from the FastAPI side.
97+
Captures minimal request metadata and writes the last N records to cstore.
98+
99+
Parameters
100+
----------
101+
request : dict
102+
Raw request payload pulled from the server queue.
103+
Structure: {'id': str, 'value': tuple, 'profile': dict|None}
104+
"""
105+
try:
106+
value = request.get('value')
107+
endpoint = value[0] if isinstance(value, (list, tuple)) and len(value) > 0 else 'unknown'
108+
record = {
109+
'ts': self.datetime.now(self.timezone.utc).strftime('%Y-%m-%d %H:%M:%S'),
110+
'endpoint': endpoint,
111+
}
112+
self.__recent_requests.append(record)
113+
self.chainstore_hset(
114+
hkey=DEEPLOY_REQUESTS_CSTORE_HKEY,
115+
key=self.ee_id,
116+
value=list(self.__recent_requests),
117+
)
118+
except Exception as e:
119+
self.P(f"Error tracking request in cstore: {e}", color='r')
120+
return
121+
122+
87123
def __check_eth_balance(self):
88124
"""
89125
Check if the oracle has enough ETH to cover gas fees for web3 transactions.
@@ -1045,4 +1081,17 @@ def process(self):
10451081
self.P(f"Error checking running pipelines: {e}", color='r')
10461082
self.__last_pipelines_check_time = self.time()
10471083

1084+
# Periodic dump of all nodes' recent requests from cstore
1085+
if (self.time() - self.__last_requests_log_time) > self.cfg_requests_log_interval:
1086+
try:
1087+
all_requests = self.chainstore_hgetall(hkey=DEEPLOY_REQUESTS_CSTORE_HKEY)
1088+
if all_requests:
1089+
self.P(f"Deeploy requests across all nodes:\n{self.json_dumps(all_requests, indent=2)}")
1090+
else:
1091+
self.P("Deeploy requests across all nodes: no data")
1092+
except Exception as e:
1093+
self.P(f"Error dumping deeploy requests from cstore: {e}", color='r')
1094+
# end try
1095+
self.__last_requests_log_time = self.time()
1096+
# end if
10481097
return

ver.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__VER__ = '2.10.50'
1+
__VER__ = '2.10.60'

0 commit comments

Comments
 (0)