1

I'm trying to fetch the CPU utilization on remote servers by using python paramiko.

import paramiko
from socket import error as socket_error
import os 
try:
    ssh_remote =paramiko.SSHClient()
    ssh_remote.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    privatekeyfile = os.path.expanduser('~/.ssh/id')
    mykey = paramiko.RSAKey.from_private_key_file(privatekeyfile, password='test123')
    ssh_remote.connect('10.10.0.1', username = 'test1', pkey = mykey)
    idin, idout, iderr = ssh_remote.exec_command("ps aux | grep -i 'test' | grep -v grep | awk '{print $2}'")
    id_out = idout.read().decode().splitlines()
    id_out_1 = id_out[0]
    rein, reout, reerr = ssh_remote.exec_command("ps -p %s -o %s" %(id_out_1 ,'cpu'))
    cp = reout.read().decode().splitlines()
    print cp
except paramiko.SSHException as sshException:
    print "Unable to establish SSH connection:{0}".format(hostname)
except socket_error as socket_err:
    print "Unable to connect connection refused"

Receiving below output

[u'CPU', u'  -']

Instead of

[u'%CPU', u'0.1']

Not sure what is the wrong here. Please help on this.

Victory
  • 121
  • 1
  • 3
  • 18

1 Answers1

1

You need the %cpu not cpu so you need to change:

rein, reout, reerr = ssh_remote.exec_command("ps -p %s -o %s" %(id_out_1 ,'cpu'))

to

rein, reout, reerr = ssh_remote.exec_command("ps -p %s -o %s" %(id_out_1 ,'%cpu'))

That would give you the CPU usage in percentage.

Eman
  • 81
  • 1
  • 5