時折、残念ながら残念ながら、私のAGSサービスは理由もなく停止します。ユーザーが私に電話して、地図にデータがない理由を尋ねるまで、私は通常これに気づきません。
サービスが停止したときにAGSから応答を受け取る方法(私はPythonを考えていました)はありますか?他のAGSユーザーはこの問題にどのように対処しますか?
時折、残念ながら残念ながら、私のAGSサービスは理由もなく停止します。ユーザーが私に電話して、地図にデータがない理由を尋ねるまで、私は通常これに気づきません。
サービスが停止したときにAGSから応答を受け取る方法(私はPythonを考えていました)はありますか?他のAGSユーザーはこの問題にどのように対処しますか?
回答:
私は同じ問題を解決し、この解決策を持っています。以下のコードを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"
これについては、ArcGIS Server Admin REST APIを見てみましょう。
実行するPythonスクリプトを記述して、定期的に実行するようにスケジュールできるようです。スクリプトはクラスター内のすべてのサービスを取得し、対象のサービスが存在するかどうかを確認し、存在する場合はそのステータスを確認します。
それ以外の場合は、通知を電子メールで送信します。
スクリプトは、必要に応じてサービスを(再)開始することもできます。
わかりませんが、ArcPy管理パッケージの管理者がこのAPIを使用する方法を提供している可能性があります。
現在、このServiceMonitorバッチスクリプトを使用しており、電子メール通知を行います。毎朝実行されるように、Windowsスケジュールタスクとして設定しました。
唯一の欠点は、多数のサービスがあるため、実行にかなり時間がかかるため、必要な頻度で実行できないことです。おそらく、管理REST APIまたはArcPyの方が速いでしょう。
暇なときに、ArcGISサーバーのREST URLへのWebリクエストを生成し、サービスの応答を評価するPythonスクリプトを作成しました。回答が否定的である場合、特定の電子メールアドレスに電子メールアラートが送信されます。
シンプルですが、ArcGIS Serverの個々のサービスを監視するのに役立ちます。私はそれが誰かのために役立つことを願っています。
ブログのすべての情報:http : //oneteamgis.wordpress.com/2014/03/24/uno-script-python-che-monitora-i-servizi-di-arcgis-server/
ダミアーノ