예제 #1
0
	def request_admin_api():
		print request.method
		if request.method == 'GET':
			return jsonify(ResourceAdmin()._show_help())
		else:
			print request.json
			if not 'server_name' in request.json \
			or not 'action' in request.json \
			or not 'network' in request.json:
				return jsonify({'error': 'missing required data'})
			response_object = GenericDataObject(request.json)
			roledefs = literal_eval(DW.cache_key_get('roledefs'))
			if response_object.action == 'remove':
				changed_roles = {}
				try:
					for name in roledefs:
						if response_object.server_name in name:
							host = roledefs[name][response_object.network]
					for name in roledefs:
						if host in roledefs[name]:
							roledefs[name].remove(host)
							changed_roles[name] = roledefs[name]
					DW.cache_key_set('roledefs', roledefs)
				except Exception, e:
					return jsonify({'error':e})
				return jsonify({
					'host':host,
					'changed_roles': changed_roles
					})
			elif response_object.action == 'list':
				return jsonify(roledefs)
예제 #2
0
 def request_admin_api():
     print request.method
     if request.method == 'GET':
         return jsonify(ResourceAdmin()._show_help())
     else:
         print request.json
         if not 'server_name' in request.json \
         or not 'action' in request.json \
         or not 'network' in request.json:
             return jsonify({'error': 'missing required data'})
         response_object = GenericDataObject(request.json)
         roledefs = literal_eval(DW.cache_key_get('roledefs'))
         if response_object.action == 'remove':
             changed_roles = {}
             try:
                 for name in roledefs:
                     if response_object.server_name in name:
                         host = roledefs[name][response_object.network]
                 for name in roledefs:
                     if host in roledefs[name]:
                         roledefs[name].remove(host)
                         changed_roles[name] = roledefs[name]
                 DW.cache_key_set('roledefs', roledefs)
             except Exception, e:
                 return jsonify({'error': e})
             return jsonify({'host': host, 'changed_roles': changed_roles})
         elif response_object.action == 'list':
             return jsonify(roledefs)
예제 #3
0
		def process_notification(name, AxolTask, key):
			notification_status = DW.cache_key_get(key)
			print '<Notification Status>: %s' % notification_status
			if notification_status == None:
				default = {
					'warn_threshold': 0,
					'silence_threshold': 0
					}
				DW.cache_key_set(key, default)
				notification_status = DW.cache_key_get(key)
			ns = literal_eval(notification_status)
			ns['warn_threshold'] += 1
			if (7 >= ns['warn_threshold'] > 4 and ns['silence_threshold'] == 0):
				self.send_notice(
					name=AxolTask.name,
					data=AxolTask.value,
					group='default',
					alert_type=['email', 'text']
					)
				DW.cache_key_set(key, ns)
				return 1
			elif (ns['warn_threshold'] > 4 and ns['silence_threshold'] <= 12):
				ns['silence_threshold'] += 1
				DW.cache_key_set(key, ns)
				return 1
			elif ns['silence_threshold'] > 12:
				ns['warn_threshold'] = 5
				ns['silence_threshold'] = 0
				DW.cache_key_set(key, ns)
				return 1
			DW.cache_key_set(key, ns)
			return 1
	def populate_cache(self, response):
		server_dict = {}
		print response
		print '##################'
		response['api'] = api
		response['api']['api_name'] = 'health'
		for item in response['value']:
			print '1111'
			print response['value'][item]
			response['value'][item] = response['value'][item]
			for item_2 in response['value'][item]:
				if item_2 != 'name' and item_2 != 'warnings':
					print '2222'
					print response['value'][item][item_2]
					response['value'][item][item_2] = response['value'][item][item_2]
					key = 'ro_%s_%s' % (item_2, item)
					print '-------------------'
					print key
					DW.cache_key_set(key, response['value'][item][item_2])
예제 #5
0
 def populate_cache(self, response):
     server_dict = {}
     print response
     print '##################'
     response['api'] = api
     response['api']['api_name'] = 'health'
     for item in response['value']:
         print '1111'
         print response['value'][item]
         response['value'][item] = response['value'][item]
         for item_2 in response['value'][item]:
             if item_2 != 'name' and item_2 != 'warnings':
                 print '2222'
                 print response['value'][item][item_2]
                 response['value'][item][item_2] = response['value'][item][
                     item_2]
                 key = 'ro_%s_%s' % (item_2, item)
                 print '-------------------'
                 print key
                 DW.cache_key_set(key, response['value'][item][item_2])
예제 #6
0
class ResourceRemoveAlertServer(AxolResource):
	"""docstring for ResourceRemoveAlertServer
	Must implement:
		_show_help
		self.methods = {<method_type>: function}
		self.source = {keyword}
		request_{keyword}_api
		calculate_new_fields
	"""
	required_post = {
		'server_name': (True, u's'),
		'profile': (False, u's')
		}

	def __init__(self):
		super(ResourceRemoveAlertServer, self).__init__()
		self.source = 'remove_alert_servers'
		self.local = True

	def _show_help(self):
		return {
			'Help': {
				'api': '/api/remove_alert_servers',
				'method': 'POST',
				'required data':  {
					'server_name': '<name of the server to remove>'
					},
				'version': api
				}
			}

	@staticmethod
	@app.route('/api/remove_alert_server', methods=['POST', 'GET'])
	def api_remove_alert_server():
		role = 'production_servers'
		if request.method == 'GET':
			return jsonify(ResourceRemoveAlertServer()._show_help())
		try:
			data = CommonResource.handle_request(request, ResourceRemoveAlertServer.required_post)
		except Exception, e:
			CommonLogger.log(e, 'remove_alert_server', 'api_remove_alert_server')
			return jsonify({'response': {'error': str(e)}})
		try:
			roledefs = literal_eval(DW.cache_key_get('roledefs'))
			server_dict = ResourceRemoveAlertServer.create_server_list(roledefs, role)
			if server_dict[data.server_name] in roledefs[role]:
				roledefs[role].remove(server_dict[data.server_name])
				DW.cache_key_set('roledefs', roledefs)
			if data.server_name in server_dict.keys():
				del server_dict[data.server_name]
		except Exception, e:
			CommonLogger.log(e, 'remove_alert_server', 'api_remove_alert_server')
			return jsonify({'response': {'error': str(e)}})
예제 #7
0
 def process_notification(name, AxolTask, key):
     notification_status = DW.cache_key_get(key)
     print "<Notification Status>: %s" % notification_status
     if notification_status == None:
         default = {"warn_threshold": 0, "silence_threshold": 0}
         DW.cache_key_set(key, default)
         notification_status = DW.cache_key_get(key)
     ns = literal_eval(notification_status)
     ns["warn_threshold"] += 1
     if 7 >= ns["warn_threshold"] > 4 and ns["silence_threshold"] == 0:
         self.send_notice(name=AxolTask.name, data=AxolTask.value, group="default", alert_type=["email", "text"])
         DW.cache_key_set(key, ns)
         return 1
     elif ns["warn_threshold"] > 4 and ns["silence_threshold"] <= 12:
         ns["silence_threshold"] += 1
         DW.cache_key_set(key, ns)
         return 1
     elif ns["silence_threshold"] > 12:
         ns["warn_threshold"] = 5
         ns["silence_threshold"] = 0
         DW.cache_key_set(key, ns)
         return 1
     DW.cache_key_set(key, ns)
     return 1
예제 #8
0
class ResourceAdmin(AxolResource):
    """docstring for ResourceProcessor
	Must implement:
		_show_help
		self.source = {keyword}
		request_{keyword}_api
		calculate_new_fields
	"""
    def __init__(self):
        super(ResourceAdmin, self).__init__()
        self.source = 'version'
        self.local = True

    def _show_help(self):
        return {
            'Help': {
                'roles administration': {
                    'api': '/api/system/admin/roles',
                    'available_methods': {
                        'POST': {
                            'required data': [
                                'network=<internal, external>',
                                'action=<remove, list, list_ec2, restore>',
                                'server_name=<name of server>'
                            ]
                        }
                    }
                }
            }
        }

    @staticmethod
    @app.route('/api/manage_alerts', methods=['POST', 'GET'])
    def request_admin_api():
        print request.method
        if request.method == 'GET':
            return jsonify(ResourceAdmin()._show_help())
        else:
            print request.json
            if not 'server_name' in request.json \
            or not 'action' in request.json \
            or not 'network' in request.json:
                return jsonify({'error': 'missing required data'})
            response_object = GenericDataObject(request.json)
            roledefs = literal_eval(DW.cache_key_get('roledefs'))
            if response_object.action == 'remove':
                changed_roles = {}
                try:
                    for name in roledefs:
                        if response_object.server_name in name:
                            host = roledefs[name][response_object.network]
                    for name in roledefs:
                        if host in roledefs[name]:
                            roledefs[name].remove(host)
                            changed_roles[name] = roledefs[name]
                    DW.cache_key_set('roledefs', roledefs)
                except Exception, e:
                    return jsonify({'error': e})
                return jsonify({'host': host, 'changed_roles': changed_roles})
            elif response_object.action == 'list':
                return jsonify(roledefs)
            elif response_object.action == 'restore':
                roledefs = generate_base_roles()
                DW.cache_key_set('roledefs', roledefs)
                return jsonify(roledefs)
예제 #9
0
		key = 'notification_threshold'
		if len(AxolTask.value) > 0:
			for server in AxolTask.value:
				if server != 'status':
					if AxolTask.value[server] != []:
						print '<Task Warnings>: %s' % AxolTask.value[server]
						try:
							process_notification(server, AxolTask, key)
						except Exception, e:
							CommonLogger.log(e, 'axol_resource', 'process_notification')
		else:
			default = {
				'warn_threshold': 0,
				'silence_threshold': 0
				}
			DW.cache_key_set(key, default)
		return 1

	def process_queue(self, result):
		t = 0
		while True:
			if result.ready() == True:
				g = result.get()
				return g, t
				break
			else:
				t = t + 0.001
				time.sleep(0.001)
				if t >= 10:
					tmp = {
						'Response': {
예제 #10
0
            DW.cache_key_set(key, ns)
            return 1

        key = "notification_threshold"
        if len(AxolTask.value) > 0:
            for server in AxolTask.value:
                if server != "status":
                    if AxolTask.value[server] != []:
                        print "<Task Warnings>: %s" % AxolTask.value[server]
                        try:
                            process_notification(server, AxolTask, key)
                        except Exception, e:
                            CommonLogger.log(e, "axol_resource", "process_notification")
        else:
            default = {"warn_threshold": 0, "silence_threshold": 0}
            DW.cache_key_set(key, default)
        return 1

    def process_queue(self, result):
        t = 0
        while True:
            if result.ready() == True:
                g = result.get()
                return g, t
                break
            else:
                t = t + 0.001
                time.sleep(0.001)
                if t >= 10:
                    tmp = {"Response": {"failed_request": True}}
                    return tmp, t