From 88f3dd348e05a42052991b9c3846beaa08b250a3 Mon Sep 17 00:00:00 2001 From: Keith Valin Date: Wed, 7 Feb 2024 11:04:34 -0500 Subject: [PATCH 01/14] feat: Add pbench user-tool start/stop scripts --- pbench_scripts/start.sh | 4 ++++ pbench_scripts/stop.sh | 4 ++++ 2 files changed, 8 insertions(+) create mode 100644 pbench_scripts/start.sh create mode 100644 pbench_scripts/stop.sh diff --git a/pbench_scripts/start.sh b/pbench_scripts/start.sh new file mode 100644 index 0000000..14d2d10 --- /dev/null +++ b/pbench_scripts/start.sh @@ -0,0 +1,4 @@ +#!/bin/bash +SCRIPT_DIR=$(dirname -- "$0") +python3 $SCRIPT_DIR/json_PRO3X.py --ip 10.27.242.2 --interval 5 --outlet 3 --output $1/result.json & +echo "$!" > $1/power.pid diff --git a/pbench_scripts/stop.sh b/pbench_scripts/stop.sh new file mode 100644 index 0000000..8cb5e77 --- /dev/null +++ b/pbench_scripts/stop.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +kill `cat $1/power.pid` +rm $1/power.pid From 7185c592558de069cc8bc98e17e784105a57e513 Mon Sep 17 00:00:00 2001 From: Keith Valin Date: Wed, 7 Feb 2024 11:10:38 -0500 Subject: [PATCH 02/14] Prevent result JSON from being committed --- .gitignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..94a2dd1 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.json \ No newline at end of file From 1d47a579fb73625c7ff663f26754e4bfd8c2f91b Mon Sep 17 00:00:00 2001 From: Keith Valin Date: Wed, 7 Feb 2024 11:10:54 -0500 Subject: [PATCH 03/14] Added handler for SIGTERM --- json_PRO3X.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/json_PRO3X.py b/json_PRO3X.py index 1b6facb..e21b8e9 100644 --- a/json_PRO3X.py +++ b/json_PRO3X.py @@ -53,7 +53,7 @@ ############################################################## # IMPORTS -import argparse, logging, requests +import argparse, logging, requests, signal import sys, time, statistics, json, io from datetime import datetime import pytz @@ -71,9 +71,14 @@ ############################################################## # GLOBAL VARS +active_loop = True ############################################################## # FUNCTIONS +def graceful_signal(_, __): + global active_loop + active_loop = False + def parseArgs(argv0): # Parse ARGs and return them parser = argparse.ArgumentParser(argv0, @@ -186,6 +191,9 @@ def get_curtime(): ############ # BEGIN MAIN def main(): + global active_loop + signal.signal(signal.SIGTERM, graceful_signal) # Handle `kill` gracefully + # Dictionaries testrun_dict = {} # complete testrun results testcfg_dict = {} # test Configuration @@ -242,7 +250,7 @@ def main(): begin_ts = time.perf_counter() try: - while True: + while active_loop: # Get Readings for the requested Outlet number # Measure time to probe and report in the Summary Report start_ts = time.perf_counter() @@ -273,6 +281,7 @@ def main(): except KeyboardInterrupt: print('Interrupted!') + active_loop = False ####################################### # Monitoring loop Interrupted - cleanup and write JSON Output From e1737f180e2a5645d7a1eb443b58395d81021ab9 Mon Sep 17 00:00:00 2001 From: Keith Valin Date: Wed, 7 Feb 2024 11:16:00 -0500 Subject: [PATCH 04/14] feat: Add option to specify result json file name/path --- json_PRO3X.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/json_PRO3X.py b/json_PRO3X.py index e21b8e9..bc9205a 100644 --- a/json_PRO3X.py +++ b/json_PRO3X.py @@ -95,6 +95,8 @@ def parseArgs(argv0): help='user name (Redfish Server)', default="labuser") parser.add_argument('--passwd', type=str, help='password (Redfish Server)', default="100Yard-") + parser.add_argument('--output', type=str, + help="Output file name for resulting json", default=str("Results" + "_" + str(get_curtime()))) theArgs = parser.parse_args() return theArgs @@ -222,6 +224,7 @@ def main(): # Optional args dev_user = args.user # Over-rides default dev_passwd = args.passwd # Over-rides default + outfilename = args.output # Basename for JSON output file # Establish Connection conn, root = prepConn(dev_ip, dev_user, dev_passwd) @@ -233,9 +236,6 @@ def main(): # Record Monitoring Start Time start_curtime = get_curtime() - # Basename for JSON output file - outfilename = str("Results" + "_" + str(start_curtime)) - # Initialize Test Run and Test Config dicts testrun_dict = init_rundict(get_curtime(), "power-usage") testcfg_dict = init_cfgdict(dev_type, dev_ip, pause_secs, outlet_number) From 1e9ca16955d2a716f906a6d1fc95c4c60198fff7 Mon Sep 17 00:00:00 2001 From: Keith Valin Date: Wed, 7 Feb 2024 11:26:32 -0500 Subject: [PATCH 05/14] fix pbench-scripts: Correct path to python script --- pbench_scripts/start.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pbench_scripts/start.sh b/pbench_scripts/start.sh index 14d2d10..a4ff077 100644 --- a/pbench_scripts/start.sh +++ b/pbench_scripts/start.sh @@ -1,4 +1,4 @@ #!/bin/bash SCRIPT_DIR=$(dirname -- "$0") -python3 $SCRIPT_DIR/json_PRO3X.py --ip 10.27.242.2 --interval 5 --outlet 3 --output $1/result.json & +python3 $SCRIPT_DIR/../json_PRO3X.py --ip 10.27.242.2 --interval 5 --outlet 3 --output $1/result.json & echo "$!" > $1/power.pid From ce03e9ce7ad21636119cfa6864185bdd1fa39e5f Mon Sep 17 00:00:00 2001 From: Keith Valin Date: Wed, 7 Feb 2024 11:27:00 -0500 Subject: [PATCH 06/14] fix pbench-script: Make scripts executable --- pbench_scripts/start.sh | 0 pbench_scripts/stop.sh | 0 2 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 pbench_scripts/start.sh mode change 100644 => 100755 pbench_scripts/stop.sh diff --git a/pbench_scripts/start.sh b/pbench_scripts/start.sh old mode 100644 new mode 100755 diff --git a/pbench_scripts/stop.sh b/pbench_scripts/stop.sh old mode 100644 new mode 100755 From 04de16c617a66620a3fa552aa8e3ced2d69b1f6c Mon Sep 17 00:00:00 2001 From: Keith Valin Date: Wed, 7 Feb 2024 14:21:12 -0500 Subject: [PATCH 07/14] fix: Remove trailing json extension --- pbench_scripts/start.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pbench_scripts/start.sh b/pbench_scripts/start.sh index a4ff077..3dce888 100755 --- a/pbench_scripts/start.sh +++ b/pbench_scripts/start.sh @@ -1,4 +1,4 @@ #!/bin/bash SCRIPT_DIR=$(dirname -- "$0") -python3 $SCRIPT_DIR/../json_PRO3X.py --ip 10.27.242.2 --interval 5 --outlet 3 --output $1/result.json & +python3 $SCRIPT_DIR/../json_PRO3X.py --ip 10.27.242.2 --interval 5 --outlet 3 --output $1/result & echo "$!" > $1/power.pid From ecc9964e5aa96d3eb81a97c3a9a1eba44eb72d39 Mon Sep 17 00:00:00 2001 From: Keith Valin Date: Thu, 15 Feb 2024 12:06:08 -0500 Subject: [PATCH 08/14] Update to use a config file --- pbench_scripts/start.sh | 4 +++- pbench_scripts/vars.sh | 3 +++ 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 pbench_scripts/vars.sh diff --git a/pbench_scripts/start.sh b/pbench_scripts/start.sh index 3dce888..01a6792 100755 --- a/pbench_scripts/start.sh +++ b/pbench_scripts/start.sh @@ -1,4 +1,6 @@ #!/bin/bash SCRIPT_DIR=$(dirname -- "$0") -python3 $SCRIPT_DIR/../json_PRO3X.py --ip 10.27.242.2 --interval 5 --outlet 3 --output $1/result & +source $SCRIPT_DIR/vars.sh +python3 $SCRIPT_DIR/../json_PRO3X.py --ip $IP --interval $INTERVAL --outlet $OUTLET --output $1/result & + echo "$!" > $1/power.pid diff --git a/pbench_scripts/vars.sh b/pbench_scripts/vars.sh new file mode 100644 index 0000000..a2a06ec --- /dev/null +++ b/pbench_scripts/vars.sh @@ -0,0 +1,3 @@ +IP="10.27.242.5" +INTERVAL=5 +OUTLET=3 From 362765dc15d7eda10de3d9a14a6e547fd8003009 Mon Sep 17 00:00:00 2001 From: Keith Valin Date: Mon, 4 Mar 2024 09:31:30 -0500 Subject: [PATCH 09/14] Remove automatic addition of json extension to ensure output flag operates as expected --- PRO3Xmultiple.py | 6 ++---- pbench_scripts/start.sh | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/PRO3Xmultiple.py b/PRO3Xmultiple.py index c69ec20..90de9cc 100644 --- a/PRO3Xmultiple.py +++ b/PRO3Xmultiple.py @@ -100,7 +100,7 @@ def parseArgs(argv0): parser.add_argument('--passwd', type=str, help='password (Redfish Server)', default="100Yard-") parser.add_argument('--output', type=str, - help="Output file name for resulting json", default=str("Results" + "_" + str(get_curtime()))) + help="Output file name for resulting json", default=str(f"Results_{str(get_curtime())}.json")) theArgs = parser.parse_args() return theArgs @@ -267,8 +267,6 @@ def main(): # Record Start Time - used to calculate total Monitoring runtime start_curtime = get_curtime() - # Basename for JSON output file - outfilename = str("Results" + "_" + str(start_curtime)) # Print opening message print(f"Monitoring Outlet numbers: {outlets_list}. Pausing {pause_secs} seconds between Readings") @@ -340,7 +338,7 @@ def main(): testrun_dict["test_summary"] = testsum_dict # Write JSON output file - write_json(testrun_dict, outfilename + ".json") + write_json(testrun_dict, outfilename) # END MAIN ########## diff --git a/pbench_scripts/start.sh b/pbench_scripts/start.sh index 01a6792..98e87a9 100755 --- a/pbench_scripts/start.sh +++ b/pbench_scripts/start.sh @@ -1,6 +1,6 @@ #!/bin/bash SCRIPT_DIR=$(dirname -- "$0") source $SCRIPT_DIR/vars.sh -python3 $SCRIPT_DIR/../json_PRO3X.py --ip $IP --interval $INTERVAL --outlet $OUTLET --output $1/result & +python3 $SCRIPT_DIR/../json_PRO3X.py --ip $IP --interval $INTERVAL --outlet $OUTLET --output $1/result.json & echo "$!" > $1/power.pid From d27d8023a4dc910d00c72dc0be8db6b34e7d689f Mon Sep 17 00:00:00 2001 From: Keith Valin Date: Mon, 4 Mar 2024 09:36:03 -0500 Subject: [PATCH 10/14] Update Readme for pbench usage --- README.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index f5624ec..1569fd7 100644 --- a/README.md +++ b/README.md @@ -14,4 +14,10 @@ PRO3Xmultiple.py - probes Redfish URI /redfish/v1/PowerEquipment for per Outlet universal_resources.py - function definitions required by PRO3Xmultiple.py

Ansible/ - folder with playbook and supporting scripts.
-> - Coordinates Power Script and Workload processes
+> - Coordinates Power Script and Workload processes
+ +## PBENCH USAGE +To register this repo as a pbench tool, use the following command to do so. +```bash +pbench-register-tool --name=user-tool -- --tool-name=powermon --start-script="/pbench_scripts/start.sh" --stop-script="/pbench_scripts/stop.sh" +``` From e1e068a8e19390aac6e8f27414f5cc285a19e9d2 Mon Sep 17 00:00:00 2001 From: Keith Valin Date: Tue, 2 Apr 2024 14:04:49 -0400 Subject: [PATCH 11/14] Add Redfish username and password to vars file --- pbench_scripts/start.sh | 2 +- pbench_scripts/vars.sh | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/pbench_scripts/start.sh b/pbench_scripts/start.sh index 98e87a9..e51a523 100755 --- a/pbench_scripts/start.sh +++ b/pbench_scripts/start.sh @@ -1,6 +1,6 @@ #!/bin/bash SCRIPT_DIR=$(dirname -- "$0") source $SCRIPT_DIR/vars.sh -python3 $SCRIPT_DIR/../json_PRO3X.py --ip $IP --interval $INTERVAL --outlet $OUTLET --output $1/result.json & +python3 $SCRIPT_DIR/../json_PRO3X.py --ip $IP --interval $INTERVAL --outlet $OUTLET --user $RF_USER --password $RF_PASSWORD --output $1/result.json & echo "$!" > $1/power.pid diff --git a/pbench_scripts/vars.sh b/pbench_scripts/vars.sh index a2a06ec..0e0278d 100644 --- a/pbench_scripts/vars.sh +++ b/pbench_scripts/vars.sh @@ -1,3 +1,5 @@ IP="10.27.242.5" INTERVAL=5 OUTLET=3 +RF_USER=labuser +RF_PASSWORD=100Yard- \ No newline at end of file From 937d9085d37c46eecf9994d78752256e0680172b Mon Sep 17 00:00:00 2001 From: Keith Valin Date: Tue, 2 Apr 2024 14:14:29 -0400 Subject: [PATCH 12/14] Update python script name --- pbench_scripts/start.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pbench_scripts/start.sh b/pbench_scripts/start.sh index e51a523..fd0f4b9 100755 --- a/pbench_scripts/start.sh +++ b/pbench_scripts/start.sh @@ -1,6 +1,6 @@ #!/bin/bash SCRIPT_DIR=$(dirname -- "$0") source $SCRIPT_DIR/vars.sh -python3 $SCRIPT_DIR/../json_PRO3X.py --ip $IP --interval $INTERVAL --outlet $OUTLET --user $RF_USER --password $RF_PASSWORD --output $1/result.json & +python3 $SCRIPT_DIR/../PRO3Xmultiple.py.py --ip $IP --interval $INTERVAL --outlet $OUTLET --user $RF_USER --password $RF_PASSWORD --output $1/result.json & echo "$!" > $1/power.pid From 4ed1b7b1b4cc98c5503e4ff9a734d182857e0ae4 Mon Sep 17 00:00:00 2001 From: Keith Valin Date: Tue, 2 Apr 2024 14:22:04 -0400 Subject: [PATCH 13/14] Fix duplicate extension --- pbench_scripts/start.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pbench_scripts/start.sh b/pbench_scripts/start.sh index fd0f4b9..d4f5893 100755 --- a/pbench_scripts/start.sh +++ b/pbench_scripts/start.sh @@ -1,6 +1,6 @@ #!/bin/bash SCRIPT_DIR=$(dirname -- "$0") source $SCRIPT_DIR/vars.sh -python3 $SCRIPT_DIR/../PRO3Xmultiple.py.py --ip $IP --interval $INTERVAL --outlet $OUTLET --user $RF_USER --password $RF_PASSWORD --output $1/result.json & +python3 $SCRIPT_DIR/../PRO3Xmultiple.py --ip $IP --interval $INTERVAL --outlet $OUTLET --user $RF_USER --password $RF_PASSWORD --output $1/result.json & echo "$!" > $1/power.pid From a55e529b7926b70b7732d57ba66a44aa1a4ddbc8 Mon Sep 17 00:00:00 2001 From: Keith Valin Date: Tue, 2 Apr 2024 14:32:30 -0400 Subject: [PATCH 14/14] Update password argument in pbench script --- pbench_scripts/start.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pbench_scripts/start.sh b/pbench_scripts/start.sh index d4f5893..817d3b1 100755 --- a/pbench_scripts/start.sh +++ b/pbench_scripts/start.sh @@ -1,6 +1,6 @@ #!/bin/bash SCRIPT_DIR=$(dirname -- "$0") source $SCRIPT_DIR/vars.sh -python3 $SCRIPT_DIR/../PRO3Xmultiple.py --ip $IP --interval $INTERVAL --outlet $OUTLET --user $RF_USER --password $RF_PASSWORD --output $1/result.json & +python3 $SCRIPT_DIR/../PRO3Xmultiple.py --ip $IP --interval $INTERVAL --outlet $OUTLET --user $RF_USER --passwd $RF_PASSWORD --output $1/result.json & echo "$!" > $1/power.pid