Skip to content

Commit

Permalink
fixing issues with gateway
Browse files Browse the repository at this point in the history
  • Loading branch information
soumodiptab committed May 1, 2022
1 parent be937f8 commit c354146
Show file tree
Hide file tree
Showing 10 changed files with 474 additions and 217 deletions.
93 changes: 62 additions & 31 deletions ai_manager/server.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from re import M
from flask_cors import CORS
from asyncio import tasks
from flask import Flask, current_app, flash, redirect, render_template, session, request, jsonify, url_for
from pathlib import Path
Expand All @@ -21,38 +23,35 @@
from utils import copy_files_from_child_to_parent_folder_and_delete_child_folder, json_config_loader
from heartbeat_client import HeartBeatClientForService
ALLOWED_EXTENSIONS = {'zip', 'rar'}
# PORT = 6500
log = get_logger('app_manager', json_config_loader(
'config/kafka.json')["bootstrap_servers"])

app = Flask(__name__)

app.config['SECRET_KEY'] = 'secret'
#CORS(app, supports_credentials=True)
# CORS(app)
MONGO_DB_URL = json_config_loader('config/db.json')['DATABASE_URI']
INITIALIZER_ADDRESS = json_config_loader('config/initialiser.json')["ADDRESS"]
#PORT = sys.argv[1]
PORT = 6500


def getServiceUrl(service_name):
URL = "http://" + INITIALIZER_ADDRESS + \
"/initialiser/getService/" + service_name
r = requests.get(url=URL)
data = r.json()
ip = data["ip"]
port = data["port"]
url = "http://" + ip + ":" + port
return url


INITIALIZER_URL = "http:/initialiser/getService/"
PORT = sys.argv[1]
#PORT = 6500


@app.route('/model/upload', methods=['POST', 'GET'])
def model_upload():
find_session()
if request.method == "GET":
choice = "upload"
homeurl = getServiceUrl('request_manager')
return render_template('home.html', choice=choice, homeurl=homeurl)
print("hello")
client = MongoClient(MONGO_DB_URL)
db = client.initialiser_db
request_ip = db.running_services.find_one(
{"service": "request_manager"})
# print(request_ip)
url = "http://"
ip = request_ip["ip"]
port = request_ip["port"]
homeurl = url + ip + ":" + port+'/'
client.close()
return render_template('model_upload.html', homeurl=homeurl)
else:
UPLOAD_FOLDER = modelFolder = modelId = uuid.uuid4().hex
if 'file' not in request.files:
Expand Down Expand Up @@ -136,14 +135,53 @@ def model_upload():
return redirect(request.url)


def find_session():
mongo_client = MongoClient(MONGO_DB_URL)
session_inst = mongo_client.session_db.session_data
if session_inst.count_documents({}) > 0:
session['user'] = session_inst.find_one({})['user']
return True
else:
return False


@app.route('/model/display', methods=['POST', 'GET'])
def model_display():
try:
find_session()
# MONGO_DB_URL = "mongodb://localhost:27017/"
client = MongoClient(MONGO_DB_URL)
db = client.ai_data
ai_model_list = []
Project_List_Col = db.model_info
db = client.initialiser_db
request_ip = db.running_services.find_one(
{"service": "request_manager"})
# print(request_ip)
url = "http://"
ip = request_ip["ip"]
port = request_ip["port"]
homeurl = url + ip + ":" + port+'/'

app_ip = db.running_services.find_one({"service": "app_manager"})
url1 = "http://"
ip = app_ip["ip"]
port = app_ip["port"]
url1 = url1 + ip + ":" + port+'/'

sc_ip = db.running_services.find_one({"service": "sc_manager"})
url2 = "http://"
ip = sc_ip["ip"]
port = sc_ip["port"]
url2 = url2 + ip + ":" + port+'/'

mydb = client["user_db"] # database_name
mycol = mydb["users"] # collection_name

print(session)

role_check = list(mycol.find({"username": session['user']}))
user_role = role_check[0]['role']
for model_record in list(Project_List_Col.find()):
display_record = {
"modelId": model_record["modelId"],
Expand All @@ -156,21 +194,14 @@ def model_display():
}
ai_model_list.append(display_record)
client.close()
choice = "display"
homeurl = getServiceUrl("request_manager")
print("Render error")
return render_template('home.html', choice=choice, tasks=ai_model_list, homeurl=homeurl)

return render_template('model_display.html', tasks=ai_model_list, role=user_role, homeurl=homeurl, app_url=url1, sc_url=url2)
except Exception as e:
log.error({'error': str(e)})
return redirect(request.url)


if __name__ == '__main__':
client = HeartBeatClientForService('ai_manager')
client.start()
heartbeat_client = HeartBeatClientForService('ai_manager')
heartbeat_client.start()
app.run(host="0.0.0.0", port=PORT, debug=True, use_debugger=False,
use_reloader=False, passthrough_errors=True)

# app.run(port=PORT, debug=True, use_debugger=False,
# use_reloader=False, passthrough_errors=True)
Binary file added ai_manager/templates/AI_manager.zip
Binary file not shown.
135 changes: 135 additions & 0 deletions ai_manager/templates/model_display.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
<html>
<head>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
</head>
<body>
{% with messages = get_flashed_messages(with_categories=true) %}
{% if messages %}
{% for category, message in messages %}
{% if category == 'success' %}
<div class="alert alert-success alert-dismissible fade show" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close" class="fade close">
<span aria-hidden="true">x</span>
</button>
<strong>{{message}}</strong>
</div>
{% endif %}

{% if category == 'error' %}
<div class="alert alert-danger alert-dismissible fade show" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close" class="fade close">
<span aria-hidden="true">x</span>
</button>
<strong>{{message}}</strong>
</div>
{% endif %}

{% if category == 'info' %}
<div class="alert alert-info alert-dismissible fade show" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close" class="fade close">
<span aria-hidden="true">x</span>
</button>
<strong>{{message}}</strong>
</div>
{% endif %}
{% endfor %}
{% endif %}
{% endwith %}
{% if role == 'Application Developer' %}
<nav class="navbar navbar-expand-lg navbar-dark bg-dark" >
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav ">
<li class="nav-item active">
<a class="nav-link" href="{{homeurl}}/home">Home <span class="sr-only">(current)</span></a>
</li>
<li class="nav-item active">
<a class="nav-link" href="{{ app_url }}/app/display">Application Display</a>
</li>
<li class="nav-item active">
<a class="nav-link" href="{{ app_url}}/app/upload ">Application Upload</a>
</li>
<li class="nav-item active">
<a class="nav-link" href="{{ sc_url}}/sc_type/display ">Sensors/Controllers</a>
</li>
<li class="nav-item active">
<a class="nav-link" href="{{ url_for('model_display') }}">Models</a>
</li>
</ul>
<ul class="navbar-nav ml-auto">
<li class="nav-item active" >
<a class="nav-link" href="#" >Notification</a>
</li>
<li class="nav-item active" >
<a class="nav-link" href= "{{homeurl}}/signout" >Logout</a>
</li>
</div>
</nav>
{% else %}

<nav class="navbar navbar-expand-lg navbar-dark bg-dark" >
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav ">
<li class="nav-item active">
<a class="nav-link" href="{{homeurl}}/home">Home <span class="sr-only">(current)</span></a>
</li>
<li class="nav-item active">
<a class="nav-link" href="{{ url_for('model_display') }}">Models</a>
</li>
<li class="nav-item active">
<a class="nav-link" href="{{ url_for('model_upload') }}">Model Upload</a>
</li>

</ul>
<ul class="navbar-nav ml-auto">
<li class="nav-item active" >
<a class="nav-link" href="#" >Notification</a>
</li>
<li class="nav-item active" >
<a class="nav-link" href= "{{homeurl}}/signout" >Logout</a>
</li>
</div>
</nav>

{% endif %}

<div style="margin-top: 5%;">

<table class="table table-hover table-bordered" style = "text-align:center; margin: auto; width: 50% !important;">
<thead class = "thead-dark">
<tr class="table-active">
<th scope="col" style="font-size: 1.4rem; font-family: Verdana, Geneva, Tahoma, sans-serif;">Model ID</th>
<th scope="col" style="font-size: 1.4rem; font-family: Verdana, Geneva, Tahoma, sans-serif;">Model Name</th>
<!-- <th scope="col" style="font-size: 1.4rem; font-family: Verdana, Geneva, Tahoma, sans-serif;">Deployed IP</th> -->
<!-- <th scope="col" style="font-size: 1.4rem; font-family: Verdana, Geneva, Tahoma, sans-serif;">PORT</th> -->
<th scope="col" style="font-size: 1.4rem; font-family: Verdana, Geneva, Tahoma, sans-serif;">Running Status</th>
<th scope="col" style="font-size: 1.4rem; font-family: Verdana, Geneva, Tahoma, sans-serif;">Input</th>
<th scope="col" style="font-size: 1.4rem; font-family: Verdana, Geneva, Tahoma, sans-serif;">Output</th>
</tr>
</thead>

<tbody>

{% for event in tasks %}
<tr class="table-success">
<!-- <th> 1 </th> -->

<td>{{ event['modelId'] }}</td>
<td>{{ event['modelName'] }}</td>
<!-- <td>{{ event['deployedIP'] }}</td> -->
<!-- <td>{{ event['PORT'] }}</td> -->
<td>{{ event['runningStatus'] }}</td>
<td>{{ event['input'] }}</td>
<td>{{ event['output'] }}</td>
<!-- <td><input class="btn btn-primary" id="testRedirect" onclick="startTest({{ event['id']}})" type="button" value="start test"></td> -->
</tr>
{% endfor %}
</tbody>
</table>

</div>
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>

</body>
</html>
98 changes: 98 additions & 0 deletions ai_manager/templates/model_upload.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
<html>
<head>

<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">

<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">


<script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script>
</head>
<body>
{% with messages = get_flashed_messages(with_categories=true) %}
{% if messages %}
{% for category, message in messages %}
{% if category == 'success' %}
<div class="alert alert-success alert-dismissible fade show" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close" class="fade close">
<span aria-hidden="true">x</span>
</button>
<strong>{{message}}</strong>
</div>
{% endif %}

{% if category == 'error' %}
<div class="alert alert-danger alert-dismissible fade show" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close" class="fade close">
<span aria-hidden="true">x</span>
</button>
<strong>{{message}}</strong>
</div>
{% endif %}

{% if category == 'info' %}
<div class="alert alert-info alert-dismissible fade show" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close" class="fade close">
<span aria-hidden="true">x</span>
</button>
<strong>{{message}}</strong>
</div>
{% endif %}
{% endfor %}
{% endif %}
{% endwith %}

<nav class="navbar navbar-expand-lg navbar-dark bg-dark" >
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav ">
<li class="nav-item active">
<a class="nav-link" href="{{homeurl}}/home">Home <span class="sr-only">(current)</span></a>
</li>
<li class="nav-item active">
<a class="nav-link" href="{{ url_for('model_display') }}">Model Display</a>
</li>
<li class="nav-item active">
<a class="nav-link" href="{{ url_for('model_upload') }}">Model Upload</a>
</li>
</ul>
<ul class="navbar-nav ml-auto">
<li class="nav-item active" >
<a class="nav-link" href="#" >Notification</a>
</li>
<li class="nav-item active" >
<a class="nav-link" href= "{{homeurl}}/signout" >Logout</a>
</li>
</div>
</nav>

<div style="margin-top: 10%">

<p style="height:15%; text-align:center; margin: auto; width: 20% !important;">
<a href="https://docs.google.com/document/d/1UUl-8RozI7h9qbfUEtmrcNZyLvFKjDYr0QA7b1a-qfA/edit?usp=sharing" target="_blank" class="btn btn-primary" style="text-align:center"> Instruction Manual
</a>
</p>

<form method="post" action="{{ url_for('model_upload') }}" enctype="multipart/form-data">


<div class="card text-center" style="height:50%; text-align:center; margin: auto; width: 50% !important;">
<div class="card-header" >
MODEL UPLOAD
</div>
<div class="card-body">
<div class = "form-group" >
<input type="file" name="file" id="customFile" class="btn btn-secondary" required style="margin: auto;" >
</div>
<p>
<input type="submit" class="btn btn-primary" value="Submit">
</p>
</div>
</div>
</form>

</div>
</body>

</html>
Loading

0 comments on commit c354146

Please sign in to comment.