接上篇,通过salt-api拿到了想要的数据,但是这个数据包括很多内容。以内存为例,只需要内存大小,其他信息不需要。这时我们就要对内存数据做一些处理,返回我们真正想要的值。
下面是对通过salt-api获取的数据做处理,get_data.py的内容
def send_main(param):
salt = SaltApi(SALT_API_CON,param)
# print("salt---->",salt)
result1 = salt.salt_command()
#以内存为例,对获取结果做处理
mem_dict = {}
for host, value in result1.items():
if not value:
print(host, "内存信息获取失败,请验证dmidecode工具")
continue
if host not in mem_dict.keys():
mem_dict[host] = {}
memory = 0
li = value.split('\n\t')
for item in li:
if 'Memory Device' in item:
continue
k, v = item.split(':')
if k == 'Size':
num, company = v.rsplit(" ",maxsplit=1)
try:
num = int(num)/1024
except ValueError:
continue
memory += num
mem_dict[host]['memory']=memory
return mem_dict
获取内存的mem.py代码修改为
class Mem(Base):
def run(self):
self.method = "cmd.run"
self.tgt = "*"
self.arg = "dmidecode -q -t 17 2>/dev/null" #获取内存的命令
# self.arg = "free -m"
return {"client": "local", "fun": self.method, "tgt": self.tgt, "arg":self.arg }
通过处理后输出的就是如下dict类型的数据
{salt-id:{memory:32.0}}
在稍微处理下就可以存到数据库中。
通过salt-api获取memory数据进行处理的代码在get_data方法中,当获取其他信息如cpu、硬盘等信息时就不能使用这段代码来处理。为了方便维护,把处理数据的这部分代码放到每个获取元素的py文件中,如处理memory的代码可以放到mem.py文件中,在py的类中建一个处理数据的方法,当获取数据处理时调用该方法即可。