You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
125 lines
3.6 KiB
125 lines
3.6 KiB
4 years ago
|
"""
|
||
|
Licensed to the Apache Software Foundation (ASF) under one
|
||
|
or more contributor license agreements. See the NOTICE file
|
||
|
distributed with this work for additional information
|
||
|
regarding copyright ownership. The ASF licenses this file
|
||
|
to you under the Apache License, Version 2.0 (the
|
||
|
"License"); you may not use this file except in compliance
|
||
|
with the License. You may obtain a copy of the License at
|
||
|
|
||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||
|
|
||
|
Unless required by applicable law or agreed to in writing, software
|
||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
See the License for the specific language governing permissions and
|
||
|
limitations under the License.
|
||
|
"""
|
||
|
|
||
|
import socket
|
||
|
import urllib2
|
||
|
import os
|
||
|
import logging
|
||
|
import ambari_simplejson as json
|
||
|
from resource_management.libraries.script.script import Script
|
||
|
import sys
|
||
|
reload(sys)
|
||
|
sys.setdefaultencoding('utf-8')
|
||
|
|
||
|
logger = logging.getLogger('ambari_alerts')
|
||
|
|
||
|
config = Script.get_config()
|
||
|
|
||
|
|
||
|
def get_tokens():
|
||
|
"""
|
||
|
Returns a tuple of tokens in the format {{site/property}} that will be used
|
||
|
to build the dictionary passed into execute
|
||
|
|
||
|
:rtype tuple
|
||
|
"""
|
||
|
|
||
|
def get_info(url, connection_timeout):
|
||
|
response = None
|
||
|
|
||
|
try:
|
||
|
response = urllib2.urlopen(url, timeout=connection_timeout)
|
||
|
json_data = response.read()
|
||
|
return json_data
|
||
|
finally:
|
||
|
if response is not None:
|
||
|
try:
|
||
|
response.close()
|
||
|
except:
|
||
|
pass
|
||
|
|
||
|
|
||
|
def execute(configurations={}, parameters={}, host_name=None):
|
||
|
"""
|
||
|
Returns a tuple containing the result code and a pre-formatted result label
|
||
|
|
||
|
Keyword arguments:
|
||
|
configurations : a mapping of configuration key to value
|
||
|
parameters : a mapping of script parameter key to value
|
||
|
host_name : the name of this host where the alert is running
|
||
|
|
||
|
:type configurations dict
|
||
|
:type parameters dict
|
||
|
:type host_name str
|
||
|
"""
|
||
|
|
||
|
alert_name = parameters['alertName']
|
||
|
|
||
|
dolphin_pidfile_dir = "/opt/soft/run/dolphinscheduler"
|
||
|
|
||
|
pid = "0"
|
||
|
|
||
|
|
||
|
from resource_management.core import sudo
|
||
|
|
||
|
is_running = True
|
||
|
pid_file_path = ""
|
||
|
if alert_name == 'DOLPHIN_MASTER':
|
||
|
pid_file_path = dolphin_pidfile_dir + "/master-server.pid"
|
||
|
elif alert_name == 'DOLPHIN_WORKER':
|
||
|
pid_file_path = dolphin_pidfile_dir + "/worker-server.pid"
|
||
|
elif alert_name == 'DOLPHIN_ALERT':
|
||
|
pid_file_path = dolphin_pidfile_dir + "/alert-server.pid"
|
||
|
elif alert_name == 'DOLPHIN_LOGGER':
|
||
|
pid_file_path = dolphin_pidfile_dir + "/logger-server.pid"
|
||
|
elif alert_name == 'DOLPHIN_API':
|
||
|
pid_file_path = dolphin_pidfile_dir + "/api-server.pid"
|
||
|
|
||
|
if not pid_file_path or not os.path.isfile(pid_file_path):
|
||
|
is_running = False
|
||
|
|
||
|
try:
|
||
|
pid = int(sudo.read_file(pid_file_path))
|
||
|
except:
|
||
|
is_running = False
|
||
|
|
||
|
try:
|
||
|
# Kill will not actually kill the process
|
||
|
# From the doc:
|
||
|
# If sig is 0, then no signal is sent, but error checking is still
|
||
|
# performed; this can be used to check for the existence of a
|
||
|
# process ID or process group ID.
|
||
|
sudo.kill(pid, 0)
|
||
|
except OSError:
|
||
|
is_running = False
|
||
|
|
||
|
if host_name is None:
|
||
|
host_name = socket.getfqdn()
|
||
|
|
||
|
if not is_running:
|
||
|
result_code = "CRITICAL"
|
||
|
else:
|
||
|
result_code = "OK"
|
||
|
|
||
|
label = "The comment {0} of DOLPHIN_SCHEDULER on {1} is {2}".format(alert_name, host_name, result_code)
|
||
|
|
||
|
return ((result_code, [label]))
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
pass
|