Skip to content

Commit 2849e43

Browse files
Merge pull request #610 from AutomationSolutionz/bug-111-added-debug-skpi
Collect logs for datastore
2 parents c01d87d + 682bf97 commit 2849e43

1 file changed

Lines changed: 164 additions & 7 deletions

File tree

Framework/Built_In_Automation/Sequential_Actions/common_functions.py

Lines changed: 164 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5900,15 +5900,63 @@ def data_store_read(data_set):
59005900

59015901
sModuleInfo = inspect.currentframe().f_code.co_name + " : " + MODULE_NAME
59025902

5903+
import logging
5904+
from datetime import datetime
5905+
from settings import ZEUZ_NODE_ARTIFACTS_DIR
5906+
5907+
log_dir = ZEUZ_NODE_ARTIFACTS_DIR / "data_store_logs"
5908+
log_dir.mkdir(parents=True, exist_ok=True)
5909+
5910+
current_time = datetime.now()
5911+
log_filename = f"data_store_read_{current_time.strftime('%Y-%m-%d_%H')}.log"
5912+
log_file = log_dir / log_filename
5913+
5914+
logger = logging.getLogger(f"data_store_read_{current_time.strftime('%Y%m%d%H')}")
5915+
logger.setLevel(logging.DEBUG)
5916+
5917+
# Remove existing handlers to avoid duplicate logs
5918+
if logger.handlers:
5919+
logger.handlers.clear()
5920+
5921+
handler = logging.FileHandler(str(log_file), mode='a')
5922+
handler.setFormatter(logging.Formatter(
5923+
'%(asctime)s - %(name)s - %(levelname)s - %(message)s'
5924+
))
5925+
logger.addHandler(handler)
5926+
5927+
logger.info("="*80)
5928+
logger.info(f"Function data_store_read called")
5929+
logger.info(f"Module Info: {sModuleInfo}")
5930+
logger.info(f"Received data_set: {data_set}")
5931+
5932+
5933+
59035934
try:
5935+
test_id = None
5936+
node_id = sr.Get_Shared_Variables("node_id") or None
5937+
action_no = CommonUtil.current_action_no
5938+
step_no = CommonUtil.current_step_no
5939+
if sr.Test_Shared_Variables("zeuz_current_tc"):
5940+
current_tc = sr.Get_Shared_Variables("zeuz_current_tc")
5941+
if isinstance(current_tc, dict) and "testcase_no" in current_tc:
5942+
test_id = current_tc["testcase_no"]
59045943
table_name = columns = var_name = ""
5905-
params = {}
5944+
params = {
5945+
'test_id': test_id,
5946+
'node_id': node_id,
5947+
'action_no': action_no,
5948+
'step_no': step_no
5949+
}
5950+
logger.debug("Starting to parse data_set")
59065951
for left, mid, right in data_set:
5952+
logger.debug(f"Processing row: left='{left}', mid='{mid}', right='{right}'")
59075953
if left.strip() == 'table name':
59085954
table_name = right.strip()
59095955
params['table_name'] = table_name
5956+
logger.info(f"Table name set to: {table_name}")
59105957
if left.strip() == 'where':
59115958
q = right.strip()
5959+
logger.info(f"Processing WHERE clause: {q}")
59125960
# q = re.sub(r"\band\b",",",q)
59135961
# q = re.sub(r"\bor\b",",",q)
59145962
logic=[]
@@ -5917,10 +5965,12 @@ def data_store_read(data_set):
59175965
logic.append('and')
59185966
elif s=='or':
59195967
logic.append('or')
5968+
logger.debug(f"Detected logic operators: {logic}")
59205969
q = right.strip()
59215970
q = re.sub(r"\band\b",",",q)
59225971
q = re.sub(r"\bor\b",",",q)
59235972
temp= q.split(',')
5973+
logger.debug(f"Split WHERE clause into: {temp}")
59245974
t = temp[0].split('=')
59255975
params['and_' + t[0].strip()] = [t[1].strip()]
59265976
i = 1
@@ -5941,26 +5991,54 @@ def data_store_read(data_set):
59415991

59425992
i += 1
59435993
j+=1
5994+
logger.info(f"Final WHERE params: {params}")
59445995
if mid.strip() == "action":
59455996
var_name = right.strip()
5997+
logger.info(f"Variable name set to: {var_name}")
5998+
5999+
logger.info(f"Final table_name: {table_name}")
6000+
logger.info(f"Final params: {params}")
6001+
logger.info(f"Final var_name: {var_name}")
6002+
6003+
logger.debug("Preparing request headers")
59466004
headers = RequestFormatter.add_api_key_to_headers({})
59476005
headers['headers']['content-type'] = 'application/json'
59486006
headers['headers']['X-API-KEY'] = ConfigModule.get_config_value("Authentication", "api-key")
6007+
logger.debug(f"Headers prepared (API key masked)")
6008+
6009+
logger.info(f"Making GET request to data_store/data_store/custom_operation/")
6010+
logger.debug(f"Request params: {json.dumps(params)}")
6011+
59496012
res = RequestFormatter.request("get",
59506013
RequestFormatter.form_uri('data_store/data_store/custom_operation/'),
59516014
params=json.dumps(params),
59526015
verify=False,
59536016
**headers
59546017
)
6018+
6019+
logger.info(f"Response status code: {res.status_code}")
6020+
logger.debug(f"Response text: {res.text}")
6021+
59556022
if res.status_code == 200:
59566023
response_json = json.loads(res.text)
59576024
response_json = response_json["data"]
5958-
return sr.Set_Shared_Variables(var_name, response_json, pretty=True)
6025+
logger.info(f"Successfully retrieved {len(response_json) if isinstance(response_json, (list, dict)) else 'N/A'} items from datastore")
6026+
logger.debug(f"Response data: {response_json}")
6027+
result = sr.Set_Shared_Variables(var_name, response_json, pretty=True)
6028+
logger.info(f"Data stored in variable '{var_name}' successfully")
6029+
logger.info("="*80)
6030+
return result
59596031
else:
59606032
CommonUtil.ExecLog(sModuleInfo, "No data found, please check your dataset", 1)
6033+
logger.warning("No data found in datastore, please check your dataset")
6034+
logger.info("="*80)
6035+
return "zeuz_failed"
59616036
return "passed"
59626037

5963-
except Exception:
6038+
except Exception as e:
6039+
logger.error(f"Exception occurred: {str(e)}", exc_info=True)
6040+
logger.error(f"Traceback: {traceback.format_exc()}")
6041+
logger.info("="*80)
59646042
return CommonUtil.Exception_Handler(sys.exc_info())
59656043

59666044
def data_store_get_data(data_set):
@@ -6063,16 +6141,62 @@ def data_store_write(data_set):
60636141

60646142
sModuleInfo = inspect.currentframe().f_code.co_name + " : " + MODULE_NAME
60656143

6144+
import logging
6145+
from datetime import datetime
6146+
from settings import ZEUZ_NODE_ARTIFACTS_DIR
6147+
6148+
log_dir = ZEUZ_NODE_ARTIFACTS_DIR / "data_store_logs"
6149+
log_dir.mkdir(parents=True, exist_ok=True)
6150+
6151+
current_time = datetime.now()
6152+
log_filename = f"data_store_write_{current_time.strftime('%Y-%m-%d_%H')}.log"
6153+
log_file = log_dir / log_filename
6154+
6155+
logger = logging.getLogger(f"data_store_write_{current_time.strftime('%Y%m%d%H')}")
6156+
logger.setLevel(logging.DEBUG)
6157+
6158+
# Remove existing handlers to avoid duplicate logs
6159+
if logger.handlers:
6160+
logger.handlers.clear()
6161+
6162+
handler = logging.FileHandler(str(log_file), mode='a')
6163+
handler.setFormatter(logging.Formatter(
6164+
'%(asctime)s - %(name)s - %(levelname)s - %(message)s'
6165+
))
6166+
logger.addHandler(handler)
6167+
6168+
logger.info("="*80)
6169+
logger.info("Function data_store_write called")
6170+
logger.info(f"Module Info: {sModuleInfo}")
6171+
logger.info(f"Received data_set: {data_set}")
6172+
60666173
try:
6174+
test_id = None
6175+
node_id = sr.Get_Shared_Variables("node_id") or None
6176+
action_no = CommonUtil.current_action_no
6177+
step_no = CommonUtil.current_step_no
6178+
if sr.Test_Shared_Variables("zeuz_current_tc"):
6179+
current_tc = sr.Get_Shared_Variables("zeuz_current_tc")
6180+
if isinstance(current_tc, dict) and "testcase_no" in current_tc:
6181+
test_id = current_tc["testcase_no"]
60676182
table_name = columns = var_name = ""
6068-
params = {}
6183+
params = {
6184+
'test_id': test_id,
6185+
'node_id': node_id,
6186+
'action_no': action_no,
6187+
'step_no': step_no
6188+
}
60696189
data={}
6190+
logger.debug("Starting to parse data_set")
60706191
for left, mid, right in data_set:
6192+
logger.debug(f"Processing row: left='{left}', mid='{mid}', right='{right}'")
60716193
if left.strip() == 'table name':
60726194
table_name = right.strip()
60736195
params['table_name'] = table_name
6196+
logger.info(f"Table name set to: {table_name}")
60746197
if left.strip() == 'where':
60756198
q = right.strip()
6199+
logger.info(f"Processing WHERE clause: {q}")
60766200
# q = re.sub(r"\band\b",",",q)
60776201
# q = re.sub(r"\bor\b",",",q)
60786202
logic=[]
@@ -6081,10 +6205,12 @@ def data_store_write(data_set):
60816205
logic.append('and')
60826206
elif s=='or':
60836207
logic.append('or')
6208+
logger.debug(f"Detected logic operators: {logic}")
60846209
q = right.strip()
60856210
q = re.sub(r"\band\b",",",q)
60866211
q = re.sub(r"\bor\b",",",q)
60876212
temp= q.split(',')
6213+
logger.debug(f"Split WHERE clause into: {temp}")
60886214
t = temp[0].split('=')
60896215
params['and_' + t[0].strip()] = [t[1].strip()]
60906216
i = 1
@@ -6105,40 +6231,71 @@ def data_store_write(data_set):
61056231

61066232
i += 1
61076233
j+=1
6234+
logger.info(f"Final WHERE params: {params}")
61086235
if left.strip() == 'data':
61096236
temp = [right.strip()]
6237+
logger.debug(f"Processing data field: {temp}")
61106238
print(temp)
61116239
for t in temp:
61126240
tt = t.split('=', 1)
6241+
logger.debug(f"Split data into: {tt}")
61136242
print(tt)
61146243
data[tt[0].strip()]=tt[1].strip()
6244+
logger.debug(f"Data field '{tt[0].strip()}' = '{tt[1].strip()}'")
61156245
print(data[tt[0].strip()])
6246+
logger.info(f"Complete data dict: {data}")
61166247
if mid.strip() == "action":
61176248
var_name = right.strip()
6249+
logger.info(f"Variable name set to: {var_name}")
61186250

6251+
logger.info(f"Final table_name: {table_name}")
6252+
logger.info(f"Final params: {params}")
6253+
logger.info(f"Final data: {data}")
6254+
logger.info(f"Final var_name: {var_name}")
61196255

6256+
logger.debug("Preparing request headers")
61206257
headers = RequestFormatter.add_api_key_to_headers({})
61216258
headers['headers']['content-type'] = 'application/json'
61226259
headers['headers']['X-API-KEY'] = ConfigModule.get_config_value("Authentication", "api-key")
6260+
logger.debug("Headers prepared (API key masked)")
6261+
6262+
logger.info("Making PATCH request to data_store/data_store/custom_operation/")
6263+
logger.debug(f"Request params: {json.dumps(params)}")
6264+
logger.debug(f"Request data: {json.dumps(data)}")
6265+
61236266
res = requests.patch(
61246267
RequestFormatter.form_uri('data_store/data_store/custom_operation/'),
61256268
params=json.dumps(params),
61266269
data=json.dumps(data),
61276270
verify=False,
61286271
**headers
61296272
)
6273+
6274+
logger.info(f"Response status code: {res.status_code}")
6275+
logger.debug(f"Response text: {res.text}")
61306276
#
61316277

61326278
# print(res.text)
61336279
if res.status_code == 200:
61346280
# CommonUtil.ExecLog(sModuleInfo, f"Captured following output:\n{res.text}", 1)
6135-
6136-
return sr.Set_Shared_Variables(var_name, json.loads(res.text),pretty=True)
6281+
response_json = json.loads(res.text)
6282+
logger.info(f"Successfully updated datastore")
6283+
logger.debug(f"Response data: {response_json}")
6284+
result = sr.Set_Shared_Variables(var_name, response_json, pretty=True)
6285+
logger.info(f"Response stored in variable '{var_name}' successfully")
6286+
logger.info("="*80)
6287+
return result
61376288
else:
61386289
CommonUtil.ExecLog(sModuleInfo, "No data found to update , please check your dataset", 1)
6290+
logger.warning("No data found to update in datastore, please check your dataset")
6291+
logger.info("="*80)
6292+
return "zeuz_failed"
61396293
return "passed"
61406294

6141-
except Exception:
6295+
except Exception as e:
6296+
logger.error(f"Exception occurred: {str(e)}", exc_info=True)
6297+
logger.error(f"Traceback: {traceback.format_exc()}")
6298+
logger.info("="*80)
61426299
return CommonUtil.Exception_Handler(sys.exc_info())
61436300

61446301

0 commit comments

Comments
 (0)