Bon pas de secret pour le script en lui même :
import subprocess
import os
import time
import string
def B(b):
return int(float(b))
def KB(b):
return int(float(b) * 1024)
def MB(b):
return int(float(b) * 1024 * 1024)
def GB(b):
return int(float(b) * 1024 * 1024 * 1024)
def TB(b):
return int(float(b) * 1024 * 1024 * 1024 * 1024)
size_options = {
'k':KB,
'kB':KB,
'KB':KB,
'KiB':KB,
'K':KB,
'm':MB,
'mB':MB,
'MB':MB,
'MiB':MB,
'M':MB,
'g':GB,
'GB':GB,
'GiB':GB,
'G':GB,
't':TB,
'T':TB,
'b':B,
'B':B
}
def pcpu(data):
pdata=data.split()
pcpu_data=pdata[2].split('%')[0]
return pcpu_data
def umem(data):
pdata=data.split('/')[0].split()
fdata=pdata[3][:-3] + " " + pdata[3][-3:]
value = size_options[fdata.split()[2][0]](fdata.split()[0])
return value
#return fdata
def lmem(data):
pdata=data.split('/')[1].split()
value = size_options[pdata[1][0]](pdata[0])
return value
def pmem(data):
pdata=data.split()
pmem_data=pdata[6].split('%')[0]
return pmem_data
def inet(data):
pdata=data.split('/')[1].split()
value = size_options[pdata[0][0]](pdata[2])
return value
def onet(data):
pdata=data.split('/')[2].split()
value = size_options[pdata[0][0]](pdata[0])
return value
options = {
'pcpu':pcpu,
'umem':umem,
'lmem':lmem,
'pmem':pmem,
'inet':inet,
'onet':onet
}
def local_run_command(cmd,file):
cmd = cmd + " | tee > " + file
if os.path.isfile(file) == False:
os.system(cmd)
else:
(mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime) = os.stat(file)
ticks=int(time.time())
delta=ticks-mtime
if (delta > 60):
os.system(cmd)
strings = open(file,"r").readlines()
return strings
container=sys.argv[1]
key=sys.argv[2]
cmd="docker stats --no-stream=true " + container
strings = local_run_command(cmd,"/tmp/zabbix-docker-stats-"+container+".out")
print options[key](strings[1])
Bon nickel j’arrive à reformater ma sortie correctement me reste maintenant à finir de traiter la donnée correctement et la c’est pas gagné
PS je commente la suite du recalcul afin de m’assurer de la bonne valeur de fdata :
# python /usr/local/bin/zabbix-docker-stats.py 692e07792052 umem
78.24 MiB
Par contre si je tente avec le script de retrouver la valeur renvoyé en B je me tape encore une erreur, je suppose que j’ai pas pigé comment fonctionne l’appel à la fonction size_options
# python /usr/local/bin/zabbix-docker-stats.py 692e07792052 umem
Traceback (most recent call last):
File "/usr/local/bin/zabbix-docker-stats.py", line 120, in <module>
print options[key](strings[1])
File "/usr/local/bin/zabbix-docker-stats.py", line 66, in umem
value = size_options[fdata.split()[2][0]](fdata.split()[0])
IndexError: list index out of range