Skip to content
Snippets Groups Projects
Commit f2745000 authored by REIG Julien's avatar REIG Julien
Browse files

Merge branch 'pingNodes' into 'master'

create ping endpoint

See merge request !11
parents b3bfb811 2856db04
No related branches found
No related tags found
1 merge request!11create ping endpoint
import time
from flask import Blueprint, jsonify, request
from flask_restful import Api, Resource
from consts.status import Status, response_offline
from utils.database_utils import get_state
from utils.http_utils import normalize_url, ping
ping_controller = Blueprint('ping_controller', __name__)
api = Api(ping_controller)
class PingController(Resource):
def get(self):
if get_state() == Status.OFFLINE:
return response_offline, 403
node_addresses = request.headers.getlist("addresses")
if (node_addresses is None or len(node_addresses) == 0):
return {"message": "No addresses provided."}, 400
node_addresses = list(map(normalize_url, node_addresses))
results = ping(node_addresses)
if (normalize_url(request.host_url) in node_addresses):
results[normalize_url(request.host_url)] = True
return jsonify({ "reachable": True, "results": results })
api.add_resource(PingController, '/ping')
......@@ -2,11 +2,12 @@ import flask
from flask import Flask
from flask_cors import CORS
from controllers.duplicate_controller import duplicate_controller
from controllers.node_controller import node_controller
from controllers.ping_controller import ping_controller
from controllers.resource_controller import resource_controller
from controllers.resources_controller import resources_controller
from controllers.state_controller import state_controller
from controllers.duplicate_controller import duplicate_controller
from utils.init_database import init_database, init_queue_db
from utils.MessageAnnouncer import announcer
......@@ -18,6 +19,7 @@ app.register_blueprint(resource_controller, url_prefix='/api')
app.register_blueprint(resources_controller, url_prefix='/api')
app.register_blueprint(state_controller, url_prefix='/api')
app.register_blueprint(duplicate_controller, url_prefix='/api')
app.register_blueprint(ping_controller, url_prefix='/api')
@app.route('/api/subscribe', methods=['GET'])
......
......@@ -3,8 +3,8 @@ import sys
from urllib.parse import urlparse
import requests
from models.command import Command
from models.command import Command
from models.resource import Resource
from utils.database_utils import insert_command_queue, insert_resource_queue
......@@ -54,3 +54,20 @@ def send_command_to_other_nodes(addresses: list[str], resource_id: str, command:
except Exception as e:
print('Address', address, e, file=sys.stderr)
insert_command_queue(address, resource_id, command)
def ping(addresses: list[str]):
results = {}
for address in addresses:
try:
result = requests.get(f"{address}/api/ping")
if result.status_code != 200:
print('Address', address, 'Status code:',
result.status_code, file=sys.stderr)
results[address] = result.status_code == 200
except requests.exceptions.RequestException as e:
print('Address', address, e, file=sys.stderr)
results[address] = False
except Exception as e:
print('Address', address, e, file=sys.stderr)
results[address] = False
return results
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment