首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建LLD Zabbix发现输出

创建LLD Zabbix发现输出
EN

Stack Overflow用户
提问于 2018-12-28 10:00:32
回答 1查看 330关注 0票数 0

从这个剧本

代码语言:javascript
复制
items = items[0].split()
for emailid in items:
    resp, data = conn.uid("fetch",emailid, "(RFC822)")
    if resp == 'OK':
        email_body = data[0][1].decode('utf-8')
        mail = email.message_from_string(email_body)
        #print email_body
        if mail["Subject"].find("PA1") > 0 or mail["Subject"].find("PA2") > 0:
          regex1 = r'(?<!^)JOB:\s*(\S+)'
          #regex2 = r'Job finished'
          #c=re.findall(regex2, email_body, re.IGNORECASE)
          a=re.findall(regex1 ,email_body) #re.IGNORECASE)
          if a:
           b=set(a)
           seen = set()
           result = []
           for item in a:
              if item not in seen:
               seen.add(item)
               result.append(item)
               output = " ".join(result)

我得到了:

example_job_1

example_job_2

example_job_3

example_job_4

我希望从上面的输出中创建如下格式的JSON输出。从这个输出中,我尝试创建Zabbix外部脚本

期望输出

代码语言:javascript
复制
{
    "data": [
        {
            "{#job}": "example_job_1"
        },
        {
           "{#job}": "example_job_2"
        },        
        {
           "{#job}": "example_job_3"
        },
        {
           "{#job}": "example_job_3"
        },
        {
         "{#job}": "example_job_4" 
        }    
           ]
  }        

我修改了上面的脚本:

代码语言:javascript
复制
items = items[0].split()
for emailid in items:
    resp, data = conn.uid("fetch",emailid, "(RFC822)")
    if resp == 'OK':
        email_body = data[0][1].decode('utf-8')
        mail = email.message_from_string(email_body)
        #print email_body
        if mail["Subject"].find("PA1") > 0 or mail["Subject"].find("PA2") > 0:
          regex1 = r'(?<!^)JOB:\s*(\S+)'
          #regex2 = r'Job finished'
          #c=re.findall(regex2, email_body, re.IGNORECASE)
          a=re.findall(regex1 ,email_body) #re.IGNORECASE)
          if a:
           b=set(a)
           seen = set()
           result = []
           for item in a:
              if item not in seen:
               seen.add(item)
               result.append(item)
               output = " ".join(result)
    data = [{"{#job}": output}]
    print json.dumps({"data": data}, indent=4)

并得到的实际输出

代码语言:javascript
复制
{
    "data": [
        {
            "{#job}": "example_job_1"
        }
    ]
}
{
    "data": [
        {
            "{#job}": "example_job_2"
        }
    ]
}
{
    "data": [
        {
            "{#job}": "example_job_3"
        }
    ]
}
{
    "data": [
        {
            "{#job}": "example_job_4"
        }
    ]
}
EN

回答 1

Stack Overflow用户

发布于 2018-12-28 12:19:03

解决:“忘记”在"for循环“之前初始化空列表,因此每次迭代时都会重置列表。

代码语言:javascript
复制
tdata=[]



items = items[0].split()
for emailid in items:
    resp, data = conn.uid("fetch",emailid, "(RFC822)")
    if resp == 'OK':
        email_body = data[0][1].decode('utf-8')
        mail = email.message_from_string(email_body)
        if mail["Subject"].find("PA1") > 0 or mail["Subject"].find("PA2") > 0:
          regex1 = r'(?<!^)JOB:\s*(\S+)'
          #regex2 = r'Job finished'
          #c=re.findall(regex2, email_body, re.IGNORECASE)
          a=re.findall(regex1 ,email_body) #re.IGNORECASE)
          if a:
           b=set(a)
           seen = set()
           result = []
           for item in a:
              if item not in seen:
               seen.add(item)
               result.append(item)
               output = " ".join(result)
               tdata.append({'#job':output})
print json.dumps({"data": tdata}, indent=4)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53956666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档