【问题标题】:Python way to check how many SMS have been sentPython检查已发送多少条短信的方法
【发布时间】:2018-09-21 13:58:54
【问题描述】:

我的 check_mk 安装中有一个 python 脚本,用于在紧急情况下为虚拟主机和服务发送电子邮件和短信。 我想确保在一个小时内发送的短信/电子邮件不超过 15 条,以避免在物理服务器无法访问或关闭时发送垃圾邮件,这样就不会为每个虚拟机和服务发送通知。 没有计数器文件有没有办法做到这一点?也许是一个正在运行的服务器?

我会这样做:

import urllib
import urllib2
from os import environ


# parameters
hosts = ['192.168.1.10', '192.168.1.11']
login = 'user'
password = 'secret'
number = 'xxxxxxxxxxxx'

def message():
    if environ['NOTIFY_WHAT'] == 'HOST':
        msg = "%s %s: %s (%s)" % (
            environ['NOTIFY_NOTIFICATIONTYPE'],
            environ['NOTIFY_HOSTNAME'],
            environ['NOTIFY_HOSTOUTPUT'],
            environ['NOTIFY_SHORTDATETIME'])
    elif environ['NOTIFY_WHAT'] == 'SERVICE':
        msg = "%s %s: %s %s (%s)" % (
            environ['NOTIFY_NOTIFICATIONTYPE'],
            environ['NOTIFY_HOSTNAME'],
            environ['NOTIFY_SERVICEDESC'],
            environ['NOTIFY_SERVICEOUTPUT'],
            environ['NOTIFY_SHORTDATETIME'])
    else:
        msg = "Unknown: " + environ['NOTIFY_WHAT']
    return msg

def sendSMS(receiver, message):
    args = {'login': login, 'pass': password, 'to': receiver, 'message': message}
    enc_args = urllib.urlencode(args)
    sent = False
    error = ''

    for host in hosts:
        url = 'http://%s/index.php/http_api/send_sms?%s' % (host, enc_args)
        if not sent:
            try:
                result = urllib2.urlopen(url).read()
            except urllib2.HTTPError, e:
                print('sending sms via host %s failed: %s' % (host, str(e.code)))
            except urllib2.URLError, e:
                print('sending sms via host %s failed: %s' % (host, str(e.args)))
            else:
                if result.startswith('OK;'):
                    sent = True
                    print('SMS successfully sent via %s to %s.' % (host, receiver))
                    break
                else:
                    sent = False
                    print 'Sending SMS via host %s failed: %s' % (host, result.rstrip()))
    return

    message = message()
    sendSMS(number, message)

脚本由 check_mk 读取和执行,通过 WATO 控制。所以我对执行没有权力。

非常感谢

【问题讨论】:

  • 你是如何调用脚本的?发送短信的代码是什么?我们需要更多信息。
  • 我编辑了我的帖子并添加了我将如何处理它。

标签: python email time count sms


【解决方案1】:

您需要能够记录在给定时间段内发送了多少条短信。您可以将您的 sendSMS 函数移动到一个简单的 Web 服务中,您的脚本只是发布到该 Web 服务中。这样它就可以跟踪调用 sendSMS 的速率并采取相应的行动。

另一种方法是使用 redis 作为存储计数而不是文件的地方。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多