如何使用python脚本将Zenoss中的数据发布到URL

时间:2016-03-18 12:51:28

标签: python zenoss

如果风险偏离主题,我会试一试:

我有一个用python编写的小脚本,它应该POST特定URL上的一些数据。问题是:

  • 我正在zenoss
  • 中整合此脚本

以下是zenoss(GUI)的路径

`Events(http://ip:port/zport/dmd/Events/evconsole)->click on some event class->settings->transform(here I copy-paste my script)`

当触发 events 时,会调用脚本,但没有数据POST编辑到其他IP(其他服务器 )即使脚本运行正常 - 我也没有在日志或GUI中收到任何错误消息。所以,我想在网络层面有一些限制,并且Zenoss不会以某种方式发送POST ed数据。

你能告诉我应该修改什么(可能是.conf文件或hosts文件),或者我应该怎么做才能POST另一台服务器上的某些数据?

代码在这里(如果相关):

import urllib2 as urllib
from urllib import urlencode
from os.path import join as joinPath
from traceback import print_tb
from os.path import isfile
from sys import exc_info


gh_url = 'http://ip/txsms.cgi'

APPLICATION_PATH = '/srv/sms_alert/'
ALERT_POINT_PATH = joinPath(APPLICATION_PATH, 'alert_contact')

try:
    evt.data = 'Some text'
    isInProduction = False

    if evt.prodState == 1000:
        isInProduction = True

        if isInProduction and isfile(ALERT_POINT_PATH):
            alertContactContent = None
            with open(ALERT_POINT_PATH, 'r') as alertContactFile:
                alertContactContent = alertContactFile.read()
            alertContactContent = alertContactContent.splitlines()

            if alertContactContent:
                evt.summary = '#[ SMS ALERT ]#  {}'.format(evt.summary)
                for alertContactContentLine in alertContactContent:
                    data = {'phonenr': alertContactContentLine, 'smstxt': evt.summary, 'Submit': 'SendSms'}
                    urllib.urlencode(data)
                    req = urllib.Request(gh_url, data)
                    password_manager = urllib.HTTPPasswordMgrWithDefaultRealm()
                    password_manager.add_password(None, gh_url, 'admin', 'password')

                    auth_manager = urllib.HTTPBasicAuthHandler(password_manager)
                    opener = urllib.build_opener(auth_manager)

                    urllib.install_opener(opener)

                    handler = urllib.urlopen(req)
        else:
            evt.summary = '#[ ERROR: SMS ALERT NO CONTACT ]#  {}'.format(evt.summary)

except Exception as e:
    ex_type, ex, tb = exc_info()
    print('\n #[ERROR]#  TRANSFORM: exception: {ex}\n'.format(ex=e))
    print('\n #[ERROR]#  TRANSFORM: exception traceback: {trace}\n'.format(trace=print_tb(tb)))

更具体地说:

我正在尝试进行身份验证,然后POST将一些数据发送到:http://ip/txsms.cgi。如果我直接从我的CentOS机器运行脚本(并删除事件 - 因为它们只能在zenoss中使用)它可以工作并完成我想要的,但是当我在Zenoss中复制粘贴代码时,数据不是' t POST ed。

有关于此的任何想法吗? (我怎么能这样做)

0 个答案:

没有答案