2

With the risk to be a little off-topic I'll give it a try:

I have a small script written in python, which is supposed to POST some data on a specific URL. The problem is:

  • I am integrating this script in zenoss:

Here is the path from zenoss (GUI)

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

When the events are triggered, the script is called, but no data it's POSTed to the other IP (a different server) even if the script is running correctly - I don't get any error messages in logs or in the GUI. So, I guess there are some restrictions at the network level and somehow the POSTed data isn't sent by Zenoss.

Could you please guys tell me what should I modify (perhaps a .conf file or hosts file) or what should I do to be able to POST some data on another server ?

The code is here (if relevant):

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)))

So to be more specific:

I am trying to authenticate and then POST some data to: http://ip/txsms.cgi. If I am running the script directly from my CentOS machine (and remove the events - as they can be used only inside zenoss) it works and it accomplishes what I want, but when I copy-paste the code in Zenoss, the data isn't POSTed.

Any ideas on this ? (how can I have this done)

  • OT: IMO wrong design. Use notification, not transformation. Example how to use notification https://github.com/ssplatt/slack-zenoss; OT2: why you didn't post all details directly to zenoss forum (only brief question is there) - give right question and you will get right answer :-) – Jan Garaj Mar 18 '16 at 14:23
  • Can you give me some more details in an answer ? Why should I use slack ? I don't want to add a third party(only if really necessary). Will this installation affect my actual zenoss configs ? How should I access this ? Will using webhooks allow me to post the data I want to the other server ? Thanks ^^ –  Mar 18 '16 at 14:30
  • Slack is only example of notification implementation! It's your example not solution. – Jan Garaj Mar 18 '16 at 14:37

0 Answers0