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 diff --git a/PRO3Xmultiple.py b/PRO3Xmultiple.py index af1aa63..90de9cc 100644 --- a/PRO3Xmultiple.py +++ b/PRO3Xmultiple.py @@ -55,7 +55,7 @@ ############################################################## # IMPORTS -import argparse, logging, requests +import argparse, logging, requests, signal import sys, time, statistics, json, io from datetime import datetime import pytz @@ -73,9 +73,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, @@ -94,6 +99,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(f"Results_{str(get_curtime())}.json")) theArgs = parser.parse_args() return theArgs @@ -192,6 +199,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 @@ -227,6 +237,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) @@ -256,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") @@ -270,7 +279,7 @@ def main(): # For each outlet (in outlets_list[]), probe for power reading # Contue monitoring until Interrupted try: - while True: + while active_loop: # Get Readings for each Outlet in the outlets_list[] for outlet_number in outlets_list: uri = outlets_uri + '/' + str(outlet_number) @@ -307,6 +316,7 @@ def main(): except KeyboardInterrupt: print('Interrupted!') + active_loop = False ####################################### # Monitoring loop Interrupted - cleanup and write JSON Output @@ -328,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/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" +``` diff --git a/pbench_scripts/start.sh b/pbench_scripts/start.sh new file mode 100755 index 0000000..817d3b1 --- /dev/null +++ b/pbench_scripts/start.sh @@ -0,0 +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 --passwd $RF_PASSWORD --output $1/result.json & + +echo "$!" > $1/power.pid diff --git a/pbench_scripts/stop.sh b/pbench_scripts/stop.sh new file mode 100755 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 diff --git a/pbench_scripts/vars.sh b/pbench_scripts/vars.sh new file mode 100644 index 0000000..0e0278d --- /dev/null +++ b/pbench_scripts/vars.sh @@ -0,0 +1,5 @@ +IP="10.27.242.5" +INTERVAL=5 +OUTLET=3 +RF_USER=labuser +RF_PASSWORD=100Yard- \ No newline at end of file