Edit file File name : check_a2_cpu_throttle.shared Content :#!/usr/bin/python3 import os import subprocess import socket # Check if the hostname contains "vplatform" - BFENG-1670 hostname = socket.gethostname() if "vplatform" in hostname: print("check not applicable this is vplatform server - OK") exit(0) # allow our agents to whitelist SEL events if os.path.isfile('/opt/hwflags/event.whitelist'): with open('/opt/hwflags/event.whitelist','r') as f: whitelist = f.read().split('\n') else: whitelist = [] try: # Start off assumning no issues problem = False # Parse ipmitool output o = subprocess.check_output(['/bin/ipmitool','sel','elist']) s = str(o,encoding='utf-8',errors='replace') lines = s.split('\n') # Go through each line of output. for l in lines: f = l.split('|') # look only for lines which mention processor throttling if len(f) >= 5 and 'Processor' in f[3] and 'Throttled' in f[4]: eid = f[0].strip() if 'Asserted' in f[5] and not eid in whitelist: # Asserted means thottling has started. We might have a problem. problem = True elif 'Deasserted' in f[5]: # Deasserted means throttling has stopped. We no longer have a problem. problem = False if problem: # An assertion not followed by deassertion is found, CPU is probably throttled. print ("throttling detected!") exit(2) else: # No assertions in SEL or all are followed by deassertion. print ("no throttling detected.") exit(0) except FileNotFoundError: # ipmitool returned a file not found error. print ("ipmitool binary missing.") exit(3) except subprocess.CalledProcessError: # ipmitool returned a different error. print ("error running ipmitool.") exit(3) Save