Commit 1951a11f authored by Joab Bremer's avatar Joab Bremer

painel failover

parent da7b7f72
# Default ignored files
/shelf/
/workspace.xml
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="PyPackageRequirementsInspection" enabled="true" level="WARNING" enabled_by_default="true">
<option name="ignoredPackages">
<value>
<list size="8">
<item index="0" class="java.lang.String" itemvalue="psycopg2-binary" />
<item index="1" class="java.lang.String" itemvalue="fastapi" />
<item index="2" class="java.lang.String" itemvalue="dask" />
<item index="3" class="java.lang.String" itemvalue="psycopg2" />
<item index="4" class="java.lang.String" itemvalue="PyJWT" />
<item index="5" class="java.lang.String" itemvalue="uvicorn" />
<item index="6" class="java.lang.String" itemvalue="Flask-Caching" />
<item index="7" class="java.lang.String" itemvalue="Pillow" />
</list>
</value>
</option>
</inspection_tool>
<inspection_tool class="PyPep8Inspection" enabled="true" level="WEAK WARNING" enabled_by_default="true">
<option name="ignoredErrors">
<list>
<option value="E501" />
</list>
</option>
</inspection_tool>
<inspection_tool class="PyPep8NamingInspection" enabled="true" level="WEAK WARNING" enabled_by_default="true">
<option name="ignoredErrors">
<list>
<option value="N806" />
</list>
</option>
</inspection_tool>
<inspection_tool class="PyUnresolvedReferencesInspection" enabled="true" level="WARNING" enabled_by_default="true">
<option name="ignoredIdentifiers">
<list>
<option value="test.attach" />
</list>
</option>
</inspection_tool>
</profile>
</component>
\ No newline at end of file
<component name="InspectionProjectProfileManager">
<settings>
<option name="USE_PROJECT_PROFILE" value="false" />
<version value="1.0" />
</settings>
</component>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.10" project-jdk-type="Python SDK" />
<component name="PyCharmProfessionalAdvertiser">
<option name="shown" value="true" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/rotas_failover.iml" filepath="$PROJECT_DIR$/.idea/rotas_failover.iml" />
</modules>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$/.." vcs="Git" />
</component>
</project>
\ No newline at end of file
from app import app
if __name__ == '__main__':
app.run(debug=True)
from flask import Flask
import logging
logging.basicConfig(filename='failover.log', level=logging.DEBUG)
app = Flask(__name__)
from app import views, view_failover
\ No newline at end of file
import psutil
import netifaces
import logging
import socket
logger = logging.getLogger(__name__)
class FailoverModel:
def get_failover_data(self):
try:
interfaces = self._get_interfaces_data()
return {"mensagem": "Página de Failover", "interfaces": interfaces}
except Exception as e:
logger.exception("Erro ao obter dados de failover: %s", str(e))
return {"mensagem": "Erro ao obter dados de failover", "interfaces": []}
def _get_interfaces_data(self):
result = []
gateways = netifaces.gateways()
for interface, addrs in psutil.net_if_addrs().items():
for addr in addrs:
if addr.family == socket.AF_INET and interface.startswith('eth'):
gateway_info = gateways.get('default', {}).get(netifaces.AF_INET, [])
gateway_address = gateway_info[0] if gateway_info else 'Gateway não encontrado'
interface_info = {
'INTERFACE_NAME': interface,
'IP': addr.address,
'MASK': addr.netmask,
'GATEWAY': gateway_address,
}
result.append(interface_info)
return result
class DadosModel:
def get_dados(self):
# Lógica para obter dados
return {"mensagem": "Olá, Mundo!"}
This source diff could not be displayed because it is too large. You can view the blob instead.
/* estilos para o menu lateral */
.sidebar {
height: 100%;
width: 10%;
position: fixed;
z-index: 1;
top: 0;
left: 0;
background-color: #f1f1f1; /* Cinza claro */
padding-top: 20px;
}
.sidebar a {
padding: 8px 8px 8px 32px;
text-decoration: none;
font-size: 18px;
color: black;
display: block;
}
.sidebar a:hover {
color: #007bff; /* Cor quando o mouse está sobre o link */
}
.content {
margin-left: 10%; /* Largura da barra lateral */
padding: 16px;
}
/* estilos para cards do failover */
/* Adicione estilos para a lista de cards */
.card-list {
display: flex;
flex-wrap: wrap;
gap: 20px;
margin-top: 20px;
}
.card {
width: 150px;
height: 110px;
background-color: #f7f7f8;
box-shadow: 2px 2px 5px #888888;
}
.card-body {
padding: 10px;
}
.card-title {
font-size: 14px;
margin-bottom: 5px;
}
.card-text {
font-size: 12px;
margin-bottom: 2px;
}
This diff is collapsed.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Meu App</title>
<link rel="stylesheet" href="{{ url_for('static', filename='css/bootstrap.min.css') }}">
<link rel="stylesheet" href="{{ url_for('static', filename='css/styles.css') }}"> <!-- Adicione esta linha -->
</head>
<body>
<div class="container-fluid">
<div class="row">
<!-- Barra lateral -->
<div class="col-md-2 sidebar">
<ul class="nav">
<li class="nav-item">
<a class="nav-link" href="{{ url_for('index') }}">Home</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{{ url_for('failover') }}">Failover</a>
</li>
</ul>
</div>
<!-- Conteúdo principal -->
<div class="col-md-10 content">
{% block content %}{% endblock %}
</div>
</div>
</div>
<script src="{{ url_for('static', filename='js/jquery.min.js') }}"></script>
<script src="{{ url_for('static', filename='js/bootstrap.min.js') }}"></script>
</body>
</html>
{% extends 'base.html' %}
{% block content %}
<h1>{{ failover_data.mensagem }}</h1>
<div class="card-list">
{% for interface in failover_data.interfaces %}
<div class="card">
<div class="card-body">
<h5 class="card-title">{{ interface['INTERFACE_NAME'] }}</h5>
<p class="card-text">IP: {{ interface['IP'] }}</p>
<p class="card-text">Mask: {{ interface['MASK'] }}</p>
<p class="card-text">Gateway: {{ interface['GATEWAY'] }}</p>
</div>
</div>
{% endfor %}
</div>
{% endblock %}
{% extends 'base.html' %}
{% block content %}
<h1>{{ dados.mensagem }}</h1>
{% endblock %}
from flask import render_template
from app import app
from app.model_failover import FailoverModel
import logging
logger = logging.basicConfig(filename='failover.log', level=logging.DEBUG)
@app.route('/failover')
def failover():
model = FailoverModel()
failover_data = model.get_failover_data()
return render_template('failover.html', failover_data=failover_data)
\ No newline at end of file
from flask import render_template
from app import app
from app.models import DadosModel
@app.route('/')
def index():
model = DadosModel()
dados = model.get_dados()
return render_template('index.html', dados=dados)
\ No newline at end of file
This diff is collapsed.
flask
psutil
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment