Existe alguma maneira de receber um email quando os serviços do ArcGIS Server são interrompidos / desativados?

10

Ocasionalmente, mas com muita frequência, infelizmente, meus serviços AGS simplesmente param sem motivo. Normalmente, não percebo isso até que os usuários me liguem e perguntem por que seus mapas não têm dados.

Existe alguma maneira (eu estava pensando em Python) de obter uma resposta do AGS quando os serviços são interrompidos? Como outros usuários do AGS lidam com esse problema?

Robert Buckley
fonte
Isso é possível usando o ArcPy for ArcGIS Server (versão 10.1). Estou trabalhando nessa questão do meu lado. Para obter mais ajuda, verifique resources.arcgis.com/en/help/main/10.1/index.html#//… e informe quando as coisas serão perfeitas para mim: )
Sunil
+ 1 Você precisa disso para todos os serviços ou serviços específicos? + Baixar ArcGIS administração API para mais detalhes
Sunil
Eu realmente preciso disso para todos os serviços ... mas alguns são mais importantes que outros, porque alguns serviços fornecem dados aos clientes e outros são para uso interno.
Robert Buckley
Em tal situação, qual será o objetivo da reciclagem ou da verificação de integridade de qualquer serviço?
Profundo

Respostas:

3

Eu resolvi o mesmo problema e tenho esta solução. Escrevi em Python este código abaixo ("localhost" na URL muda para o nome do seu servidor 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" 
Petr Trefil
fonte
Oi - Será possível adicionar o log final para o serviço parado?
Profundo
4

Eu daria uma olhada na API REST do ArcGIS Server Admin para isso.

Parece que você pode escrever um script python que é executado e agendá-lo para ser executado periodicamente. O script obteria todos os serviços em um cluster para verificar se o serviço de interesse está presente e, em caso afirmativo, verificar seu status .

Caso contrário, envie uma notificação por email.

O script também pode (re) iniciar o serviço, se você desejar.

Não tenho certeza, mas o pacote administrativo do ArcPy pode fornecer uma maneira de trabalhar com esta API.

Kirk Kuykendall
fonte
Obrigado Kirk .... Vou dar uma olhada nisso. Parece uma maneira lógica de fazer isso.
Robert Buckley
1

Atualmente, usamos esse script em lote do ServiceMonitor , que envia notificações por email. Nós a configuramos como uma tarefa agendada do Windows para que seja executada todas as manhãs.

A única desvantagem é que leva um tempo para ser executado, pois temos um grande número de serviços, portanto, não podemos executá-lo quantas vezes quisermos. Talvez a API REST do administrador ou o ArcPy seja mais rápido.

mrohlf
fonte
Parece que isso funciona apenas em 10.0? Apenas curioso se você usa 10.1 / 10.2 e fez o trabalho para você.
Alex Tereshenkov
1
Executei-o brevemente no 10.2 e parecia funcionar bem, mas tivemos outros problemas com o servidor 10.2, portanto não o testei muito. Não testei com a versão 10.1, mas deve funcionar em qualquer versão, pois é basicamente apenas verificar se o WSDL de cada serviço é acessível.
Mrohlf #
Entendo, obrigado pela informação. Se você tiver a chance de experimentar o Monitor de Serviço da Esri (lançado há alguns meses), acho que atenderia muito bem às suas necessidades ( arcgis.com/home/item.html?id=848f48b0f88e4de7a036377197453efe ). Aqui estão alguns outros recursos úteis - gis.stackexchange.com/questions/73863/...
Alex Tereshenkov
Uau, isso parece realmente útil - obrigado! A descoberta e o monitoramento dinâmicos de serviços parecem perfeitos para o que precisamos.
Mrhlf
1

No tempo livre, trabalhei em um script Python que gera uma solicitação da Web para o URL REST do servidor ArcGIS e avalia a resposta do serviço. Se a resposta for negativa, será enviado um alerta por email para um endereço de email específico.

Eu acho que é simples, mas útil para monitorar serviços individuais do ArcGIS Server. Espero que seja útil para alguém.

Todas as informações em nosso blog: http://oneteamgis.wordpress.com/2014/03/24/uno-script-python-che-monitora-i-servizi-di-arcgis-server/

Damiano

Damiano
fonte
Infelizmente, a postagem do blog não está mais online.
Erica