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