Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
*.json
20 changes: 15 additions & 5 deletions PRO3Xmultiple.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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,
Expand All @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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")
Expand All @@ -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)
Expand Down Expand Up @@ -307,6 +316,7 @@ def main():

except KeyboardInterrupt:
print('Interrupted!')
active_loop = False

#######################################
# Monitoring loop Interrupted - cleanup and write JSON Output
Expand All @@ -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
##########
Expand Down
8 changes: 7 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,10 @@ PRO3Xmultiple.py - probes Redfish URI /redfish/v1/PowerEquipment for per Outlet
universal_resources.py - function definitions required by PRO3Xmultiple.py<br>
<br>
Ansible/ - folder with playbook and supporting scripts.<br>
> - Coordinates Power Script and Workload processes<br>
> - Coordinates Power Script and Workload processes<br>

## 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="<PATH TO REPO>/pbench_scripts/start.sh" --stop-script="<PATH TO REPO>/pbench_scripts/stop.sh"
```
6 changes: 6 additions & 0 deletions pbench_scripts/start.sh
Original file line number Diff line number Diff line change
@@ -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
4 changes: 4 additions & 0 deletions pbench_scripts/stop.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#!/bin/bash

kill `cat $1/power.pid`
rm $1/power.pid
5 changes: 5 additions & 0 deletions pbench_scripts/vars.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
IP="10.27.242.5"
INTERVAL=5
OUTLET=3
RF_USER=labuser
RF_PASSWORD=100Yard-