ArcGIS Server服务停止/关闭时,有什么方法可以接收电子邮件?


10

有时,但是不幸的是,我的AGS服务经常无故停止。我通常不会注意到这一点,直到用户打电话给我,问他们的地图为什么没有数据。

服务停止时,是否有任何方法(我在考虑Python)可以从AGS获得响应?其他AGS用户如何处理此问题?


使用ArcPy for ArcGIS Server(版本10.1)可以做到这一点。我正在就此问题进行工作。要获得更多帮助,请查看resources.arcgis.com/en/help/main/10.1/index.html#//…,让您知道什么时候对我有利: )
Sunil

+ 1您是否需要所有服务或特定服务?+下载ArcGIS Admin API了解更多详细信息
Sunil 2013年

我确实需要所有服务...但是有些服务比其他服务更重要,因为有些服务将数据传递给客户端,而另一些则供内部使用。
罗伯特·巴克利2013年

在这种情况下,任何服务的回收或健康检查设置的目的是什么?
2015年

Answers:


3

我已经解决了相同的问题,并且我有此解决方案。我用Python编写了以下代码(URL中的“ localhost”更改为AGS服务器的名称):

# -*- coding: cp1250 -*-
import smtplib, urllib


from email import Encoders
from email.MIMEBase import MIMEBase
from email.MIMEMultipart import MIMEMultipart
from email.Utils import formatdate
from email.MIMEText import MIMEText
from email.MIMEMessage import MIMEMessage

COMMASPACE = ', '
SERVER = "IP adresss of post server"
FROM = "email adress from"
TO = ['1.email adress to','2.email adress to']

SUBJECT = "Some services on ArcGIS Server are down"

ServicesDown = []
CountOfServicesDown=0
TEXT="No problem"


# 1. Service - mapservice1
print "Test of service - mapservice1"
opener = urllib.FancyURLopener({})

f = opener.open("http://"localhost"/arcgis/rest/services/mapservice1/MapServer?wsdl")
code = urllib.urlopen("http://"localhost"/arcgis/rest/services/mapservice1/MapServer?wsdl"?wsdl").getcode()

if code is not 200:
    print "code: ", code
    print "mapservice1 is down"
    ServicesDown.append("mapservice1")
    CountOfServicesDown=CountOfServicesDown+1
else:
    print "service is OK"


# 2. Service - mapservice2
print "Test of service - mapservice2"
opener = urllib.FancyURLopener({})

f = opener.open("http://"localhost"/arcgis/rest/services/mapservice2/MapServer?wsdl")
code = urllib.urlopen("http://"localhost"/arcgis/rest/services/mapservice2/MapServer?wsdl"?wsdl").getcode()

if code is not 200:
    print "code: ", code
    print "mapservice1 is down"
    ServicesDown.append("mapservice2")
    CountOfServicesDown=CountOfServicesDown+1
else:
    print "service is OK"


print "\r\n"+"ServicesDown: ",ServicesDown
print "CountOfServicesDown= ",CountOfServicesDown

if CountOfServicesDown > 0:
    TEXT = "There are down this services: "+str(ServicesDown[:CountOfServicesDown])
    print "TEXT: ", TEXT


    # Prepare actual message

    message = """\
From: %s
To: %s
Subject: %s

%s
""" % (FROM, ", ".join(TO), SUBJECT, TEXT)


    server = smtplib.SMTP(SERVER)
    server.sendmail(FROM, TO, message)
    server.quit()
    print "\r\n"+"Email was send"

else:
    print "\r\n"+"There is no problem on AGS services" 

嗨,是否可以为已停止的服务添加最终日志?
2015年

4

我将为此查看一下ArcGIS Server Admin REST API

看来您可以编写一个可在其上运行的python脚本并将其安排为定期运行。该脚本将获取群集中的所有服务,然后查看感兴趣的服务是否存在,如果有,请检查其状态

否则,通过电子邮件发送通知。

如果需要,脚本也可以(重新)启动服务。

我不确定,但是ArcPy管理软件包 admin可能提供使用此API的方法。


谢谢柯克...。我来看一看。这似乎是一种合乎逻辑的方法。
罗伯特·巴克利2013年

1

当前,我们使用此ServiceMonitor批处理脚本,该脚本执行电子邮件通知。我们将其设置为Windows预定任务,因此它每天早晨运行。

唯一的缺点是,由于我们拥有大量服务,因此需要花费相当长的时间才能运行,因此我们无法根据需要频繁运行它。也许Admin REST API或ArcPy会更快。


看来这仅适用于10.0?只是好奇是否使用10.1 / 10.2并使其适合您。
Alex Tereshenkov

1
我在10.2上简短地运行了它,看起来似乎还可以,但是我们在10.2服务器上遇到了其他问题,因此我没有对其进行广泛的测试。我根本没有在10.1上进行过测试,但是它应该在任何版本上都可以使用,因为它基本上只是在检查每个服务的WSDL是否可以访问。
mrohlf

我明白了,谢谢你的信息。如果您有机会试用Esri的Service Monitor(几个月前发布),我认为它会非常满足您的需求(arcgis.com/home/item.html?id=848f48b0f88e4de7a036377197453efe)。这里有一些其他有用的资源- gis.stackexchange.com/questions/73863/...
亚历Tereshenkov

哇,看起来真的很有用-谢谢!动态服务发现和监视听起来很符合我们的需求。
mrohlf 2013年

1

在空闲时间,我研究了Python脚本,该脚本生成对ArcGIS Server REST URL的Web请求并评估服务的响应。如果答案是否定的,将向特定的电子邮件地址发送电子邮件警报。

我认为这很简单,但是对于监视ArcGIS Server的单个服务很有用。我希望这对某人有帮助。

我们博客中的所有信息:http : //oneteamgis.wordpress.com/2014/03/24/uno-script-python-che-monitora-i-servizi-di-arcgis-server/

达米亚诺


不幸的是,该博客文章不再在线。
埃里卡
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.