1
0
mirror of https://gitlab.com/JKANetwork/CheckServer.git synced 2026-03-02 00:43:46 +01:00

Start again

This commit is contained in:
2020-10-04 17:14:00 +02:00
parent c0d3912413
commit 091f119048
4382 changed files with 1762543 additions and 9606 deletions

68
assets/html/a_footer.twig Normal file
View File

@@ -0,0 +1,68 @@
<div id="custom_notifications" class="custom-notifications dsp_none">
<ul class="list-unstyled notifications clearfix" data-tabbed_notifications="notif-group">
</ul>
<div class="clearfix"></div>
<div id="notif-group" class="tabbed_notifications"></div>
</div>
<!-- footer content -->
<footer>
<div class="pull-right">
Gentelella - Bootstrap Admin Template by <a href="https://colorlib.com">Colorlib</a>
</div>
<div class="clearfix"></div>
</footer>
<!-- /footer content -->
</div>
</div>
<div id="custom_notifications" class="custom-notifications dsp_none">
<ul class="list-unstyled notifications clearfix" data-tabbed_notifications="notif-group">
</ul>
<div class="clearfix"></div>
<div id="notif-group" class="tabbed_notifications"></div>
</div>
<!-- Bootstrap -->
<script src="vendors/bootstrap/dist/js/bootstrap.min.js"></script>
<!-- FastClick -->
<script src="vendors/fastclick/lib/fastclick.js"></script>
<!-- gauge.js -->
<script src="vendors/gauge.js/dist/gauge.min.js"></script>
<!-- bootstrap-progressbar -->
<script src="vendors/bootstrap-progressbar/bootstrap-progressbar.min.js"></script>
<!-- Skycons -->
<script src="vendors/skycons/skycons.js"></script>
<!-- DateJS -->
<script src="vendors/DateJS/build/date.js"></script>
<!-- bootstrap-daterangepicker -->
<script src="vendors/moment/min/moment.min.js"></script>
<script src="vendors/bootstrap-daterangepicker/daterangepicker.js"></script>
<!-- Datatables -->
<script src="vendors/datatables.net/js/jquery.dataTables.min.js"></script>
<script src="vendors/datatables.net-bs/js/dataTables.bootstrap.min.js"></script>
<script src="vendors/datatables.net-buttons/js/dataTables.buttons.min.js"></script>
<script src="vendors/datatables.net-buttons-bs/js/buttons.bootstrap.min.js"></script>
<script src="vendors/datatables.net-buttons/js/buttons.flash.min.js"></script>
<script src="vendors/datatables.net-buttons/js/buttons.html5.min.js"></script>
<script src="vendors/datatables.net-buttons/js/buttons.print.min.js"></script>
<script src="vendors/datatables.net-fixedheader/js/dataTables.fixedHeader.min.js"></script>
<script src="vendors/datatables.net-keytable/js/dataTables.keyTable.min.js"></script>
<script src="vendors/datatables.net-responsive/js/dataTables.responsive.min.js"></script>
<script src="vendors/datatables.net-responsive-bs/js/responsive.bootstrap.js"></script>
<script src="vendors/datatables.net-scroller/js/dataTables.scroller.min.js"></script>
<!-- PNotify -->
<!--<script src="vendors/pnotify/dist/pnotify.js"></script>
<script src="vendors/pnotify/dist/pnotify.buttons.js"></script>-->
<!-- Custom Theme Scripts -->
<script src="assets/js/custom.js"></script>
</body>
</html>

115
assets/html/a_groups.twig Normal file
View File

@@ -0,0 +1,115 @@
{% include 'a_header.twig' %}
<div class="row">
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="x_panel">
<div class="x_title">
<h2>Opciones grupos.</h2>
<div class="clearfix"></div>
</div>
<div class="x_content">
<form method="POST" data-parsley-validate class="form-horizontal form-label-left">
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="newgrp">Añadir grupo: </span>
</label>
<div class="col-md-6 col-sm-6 col-xs-12">
<input type="text" id="newgrp" name="newgrp" required="required" class="form-control col-md-7 col-xs-12">
</div>
</div>
<button type="submit" class="btn btn-primary">Añadir</button>
</form>
</div>
<hr/>
<h3 class="text-muted font-13 m-b-30">
Tabla de grupos</code>
</h3>
<table id="datatable" class="table table-striped table-bordered">
<thead>
<tr>
<th># </th>
<th>Grupo </th>
<th>Acciones </th>
</tr>
</thead>
<tbody>
{% for group in groups %}
<tr>
<td>{{group.ID_G}}</td>
<td>{{group.Name}}</td>
<td>
<button type="button" class="btn btn-primary" data-toggle="modal" data-target=".bs-modal-changename_{{group.ID_G}}">Editar nombre</button>
<button type="button" class="btn btn-danger" data-toggle="modal" data-target=".bs-modal-delete_{{group.ID_G}}">Borrar</button>
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% for group in groups %}
<div class="modal fade bs-modal-changename_{{group.ID_G}}" tabindex="-1" role="dialog" aria-hidden="true" style="display: none;">
<div class="modal-dialog modal-lg">
<form method="POST" action="?page=groups&id_g={{group.ID_G}}&do=changename" data-parsley-validate class="form-horizontal form-label-left">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span>
</button>
<h4 class="modal-title" id="myModalLabel">Cambiando el nombre de {{group.Name}}</h4>
</div>
<div class="modal-body">
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="name">Nuevo nombre: <span class="required">*</span>
</label>
<div class="col-md-6 col-sm-6 col-xs-12">
<input type="text" id="name{{group.ID_G}}" name="name{{group.ID_G}}" required="required" class="form-control col-md-7 col-xs-12" value="{{group.Name}}">
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Cerrar</button>
<button type="submit" class="btn btn-danger">Cambiar nombre</button>
</div>
</div>
</form>
</div>
</div>
<div class="modal fade bs-modal-delete_{{group.ID_G}}" tabindex="-1" role="dialog" aria-hidden="true" style="display: none;">
<div class="modal-dialog modal-lg">
<form method="POST" action="?page=groups&id_g={{group.ID_G}}&do=deletegrp" data-parsley-validate class="form-horizontal form-label-left">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span>
</button>
<h4 class="modal-title" id="myModalLabel">¿Borrar el grupo {{group.Name}}?</h4>
</div>
<div class="modal-body">
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Cerrar</button>
<button type="submit" class="btn btn-danger">Borrar</button>
</div>
</div>
</form>
</div>
</div>
{% endfor %}
</div>
</div>
</div>
</div>
<!-- /page content -->
{% include 'a_footer.twig' %}

216
assets/html/a_header.twig Normal file
View File

@@ -0,0 +1,216 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<!-- Meta, title, CSS, favicons, etc. -->
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" href="assets/images/favicon.ico" type="image/ico" />
<title>Panel de administración</title>
<!-- Bootstrap -->
<link href="vendors/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet">
<!-- Font Awesome -->
<link href="vendors/font-awesome/css/font-awesome.min.css" rel="stylesheet">
<!-- NProgress -->
<link href="vendors/nprogress/nprogress.css" rel="stylesheet">
<!-- bootstrap-progressbar -->
<link href="vendors/bootstrap-progressbar/css/bootstrap-progressbar-3.3.4.min.css" rel="stylesheet">
<!-- bootstrap-daterangepicker -->
<link href="vendors/bootstrap-daterangepicker/daterangepicker.css" rel="stylesheet">
<!-- Datatables-->
<link href="vendors/datatables.net-bs/css/dataTables.bootstrap.min.css" rel="stylesheet">
<link href="vendors/datatables.net-buttons-bs/css/buttons.bootstrap.min.css" rel="stylesheet">
<link href="vendors/datatables.net-fixedheader-bs/css/fixedHeader.bootstrap.min.css" rel="stylesheet">
<link href="vendors/datatables.net-responsive-bs/css/responsive.bootstrap.min.css" rel="stylesheet">
<link href="vendors/datatables.net-scroller-bs/css/scroller.bootstrap.min.css" rel="stylesheet">
<!-- Custom Theme Style -->
<link href="assets/css/custom.css" rel="stylesheet">
<!-- jQuery -->
<script src="vendors/jquery/dist/jquery.min.js"></script>
<!-- Chart.js -->
<script src="vendors/Chart.js/dist/Chart.min.js"></script>
</head>
<body class="nav-md">
<div class="container body">
<div class="main_container">
<div class="col-md-3 left_col">
<div class="left_col scroll-view">
<div class="navbar nav_title" style="border: 0;">
<a href="admin.php" class="site_title"><i class="fa fa-server"></i> <span>CheckServer</span></a>
</div>
<div class="clearfix"></div>
<!-- menu profile quick info -->
<div class="profile clearfix">
<div class="profile_pic">
<!--<img src="images/img.jpg" alt="..." class="img-circle profile_img">-->
</div>
<div class="profile_info">
<span>Bienvenido, {{user.Name}}</span>
</div>
</div>
<!-- /menu profile quick info -->
<br />
<!-- sidebar menu -->
<div id="sidebar-menu" class="main_menu_side hidden-print main_menu">
<div class="menu_section">
<h3>General</h3>
<ul class="nav side-menu">
<li>
<a><i class="fa fa-home"></i> Inicio <span class="fa fa-chevron-down"></span></a>
<ul class="nav child_menu">
<li {% if namepage == 'index' or namepage == 'servers' %}class="current-page" {% endif %}><a href="admin.php">Vista general</a></li>
<li><a href="admin.php">Vista Servidores</a></li>
<!--<li><a href="index3.html">Vista Switchs</a></li>-->
</ul>
</li>
<li><a><i class="fa fa-edit"></i> Gestiones <span class="fa fa-chevron-down"></span></a>
<ul class="nav child_menu">
<li {% if namepage == 'newserver' or namepage =='savenewserver' %}class="current-page" {% endif %}><a href="admin.php?page=newserver">Nuevo servidor</a></li>
<li {% if namepage == 'users' %}class="current-page" {% endif %}><a href="admin.php?page=users">Usuarios</a></li>
<li {% if namepage == 'groups' %}class="current-page" {% endif %}><a href="admin.php?page=groups">Grupos</a></li>
<li {% if namepage == 'settings' %}class="current-page" {% endif %}><a href="admin.php?page=settings">Opciones</a></li>
</ul>
</li>
</ul>
</div>
</div>
<!-- /sidebar menu -->
<!-- /menu footer buttons -->
<div class="sidebar-footer hidden-small">
<a data-toggle="tooltip" data-placement="top" title="Configuración" href="admin.php?page=settings">
<span class="glyphicon glyphicon-cog" aria-hidden="true"></span>
</a>
<a data-toggle="tooltip" data-placement="top" title="Pantalla completa">
<span class="glyphicon glyphicon-fullscreen" aria-hidden="true"></span>
</a>
<a data-toggle="tooltip" data-placement="top" title="Lock" href="index.php?logout=1">
<span class="glyphicon glyphicon-eye-close" aria-hidden="true"></span>
</a>
<a data-toggle="tooltip" data-placement="top" title="Cerrar sesión" href="index.php?logout=1">
<span class="glyphicon glyphicon-off" aria-hidden="true"></span>
</a>
</div>
<!-- /menu footer buttons -->
</div>
</div>
<!-- top navigation -->
<div class="top_nav">
<div class="nav_menu">
<nav>
<div class="nav toggle">
<a id="menu_toggle"><i class="fa fa-bars"></i></a>
</div>
<ul class="nav navbar-nav navbar-right">
<li class="">
<a href="javascript:;" class="user-profile dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
<!--<img src="images/img.jpg" alt="">-->{{user.Name}}
<span class=" fa fa-angle-down"></span>
</a>
<ul class="dropdown-menu dropdown-usermenu pull-right">
<!--<li><a href="javascript:;"> Profile</a></li>-->
<li>
<a href="javascript:;">
<span>Opciones</span>
</a>
</li>
<li><a href="index.php?logout=1"><i class="fa fa-sign-out pull-right"></i> Salir</a></li>
</ul>
</li>
<li role="presentation" class="dropdown">
<a href="javascript:;" class="dropdown-toggle info-number" data-toggle="dropdown" aria-expanded="false">
<i class="fa fa-envelope-o"></i>
<span class="badge bg-red">{{alerts|length}}</span>
</a>
<ul id="menu1" class="dropdown-menu list-unstyled msg_list" role="menu">
{% for alert in alerts %}
<li>
<a href="admin.php?page=servers&id_serv={{alert.ID_SERV}}">
<!--<span class="image"><img src="images/img.jpg" alt="Profile Image" /></span>-->
<span>
<span>{{alert.ServName}}</span>
<span class="time">{{alert.Timestamp}}</span>
</span>
<span class="message">
{{alert.Text}}
</span>
</a>
</li>
{% endfor %}
</ul>
</li>
</ul>
</nav>
</div>
</div>
<!-- /top navigation -->
<!-- page content -->
<div class="right_col" role="main">
{% if msg_e %}
{% for string in msg_e %}
<div class="row">
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="alert alert-warning alert-dismissible fade in" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span>
</button>
{{string}}
</div>
</div>
</div>
{% endfor %}
{% endif %}
{% if msg %}
{% for string in msg %}
<div class="row">
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="alert alert-success alert-dismissible fade in" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span>
</button>
{{string}}
</div>
</div>
</div>
{% endfor %}
{% endif %}
{% if msg_i %}
{% for string in msg_i %}
<div class="row">
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="alert alert-info alert-dismissible fade in" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span>
</button>
{{string}}
</div>
</div>
</div>
{% endfor %}
{% endif %}

108
assets/html/a_index.twig Normal file
View File

@@ -0,0 +1,108 @@
{% include 'a_header.twig' %}
<!-- top tiles -->
<div class="row tile_count">
<div class="col-md-2 col-sm-4 col-xs-6 tile_stats_count">
<span class="count_top"><i class="fa fa-user"></i> Servidores</span>
<div class="count">{{numrows.all}}</div>
<span class="count_bottom"><i class="green">{{numrows.enabled}} </i> Monitorizando</span>
</div>
<div class="col-md-2 col-sm-4 col-xs-6 tile_stats_count">
<span class="count_top"><i class="fa fa-clock-o"></i> Servidores encendidos</span>
<div class="count">{{numrows.on}}</div>
<span class="count_bottom"><i class="green"><i class="fa fa-sort-asc"></i>{{numrows.off}} </i> Apagados</span>
</div>
<div class="col-md-2 col-sm-4 col-xs-6 tile_stats_count">
<span class="count_top"><i class="fa fa-user"></i> Sensores</span>
<div class="count">{{numrows.allsensors}}</div>
<span class="count_bottom"><i class="green">{{numrows.activesensors}} </i> Activos</span>
</div>
</div>
<!-- /top tiles -->
<!-- Table -->
<div class="row">
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="x_panel">
<div class="x_title">
<h2>Servidores <small>Estado rápido de los servidores</small> {% if user.PE_editserv == 1 or user.PE_admin == 1 %} <a class="btn btn-success" href="?page=newserver">Añadir servidor</a> {% endif %}</h2>
<div class="clearfix"></div>
</div>
<div class="x_content">
<p class="text-muted font-13 m-b-30">
Tabla de servidores</code>
</p>
<table id="datatable" class="table table-striped table-bordered">
<thead>
<tr>
<th>Servidor </th>
<th>Grupo(s) </th>
<th>Sistema Operativo </th>
<th>RAM libre </th>
<th class="column-title" style="display: table-cell;">Espacio libre (%) </th>
<th>Servicios</th>
<th>Uptime </th>
<th>Ping </th>
<th><span class="nobr">Action</span>
</th>
<th class="bulk-actions" colspan="7" style="display: none;">
<a class="antoo" style="color:#fff; font-weight:500;">Bulk Actions ( <span class="action-cnt">1 Records Selected</span> ) <i class="fa fa-chevron-down"></i></a>
</th>
</tr>
</thead>
<tbody>
{% for server in servers %}
<tr {% if server.BadCreds == 1 and server.Enabled == 1 %}class="bgcolor-badinfo" data-toggle="tooltip" data-placement="top" title="Credenciales no válidas o faltantes."
{% elseif server.BadCreds == 2 and server.Enabled == 1 %}
class="bgcolor-badinfo" data-toggle="tooltip" data-placement="top" title="El servidor tiene problemas con WMI (Error 0x80041045)"
{%else%}
{% if server.Enabled == 1 %} {%if server.Online == 1 %}class="bgcolor-ok" {%endif%}{% elseif server.Enabled == 0 %}class="bgcolor-secondary"{%endif%}
{%endif%}
>
<td data-toggle="tooltip" data-placement="top" title="{{server.Description}}">{{server.Name}} ({{server.IP}}) {% if server.Online == 0 and server.Enabled == 1 %}<br/><i>Offline</i>{%endif%}{% if server.Enabled == 0 %}<br/><i>Deshabilitado</i>{%endif%}</td>
<td>
{% for ingrp in server.InGroups %}
{{ingrp.Name}}
{% if not loop.last %},{%endif%}
{% endfor %}
</td>
<td>{% if server.Version != "" %} {{server.Version}} {%else%}{{server.SO}}{%endif%} </td>
<td class=" ">
{{server.Freeram}}
</td>
<td {% if server.AlertHDD > 0 %} class="bg-danger" {% endif %}>
{{server.HDDFastStats | raw}}
</td>
<td {% if server.SInactive > 0 %} class="bgcolor-warn" {%endif%}>
Monitorizando: {{server.SEnabled}}
{% if server.SEnabled > 0 %}<br>Funcionando: {{server.SActive}} {% endif %}
{% if server.SInactive > 0 %}<br>Parados: {{server.SInactive}} {% endif %}
{% if server.SDisabled > 0 %}<br>Monitorización en pausa: {{server.SDisabled}} {% endif %}
</td>
<td>{{server.Uptime}}</td>
{% if server.Enabled == 1 %}
<td {% if server.Ping > -1 %}class="bgcolor-ok"{%else%}class="bgcolor-warn"{%endif%}>{{server.Ping}}ms</td>
{% else %}
<td></td>
{% endif %}
<td class=" last"><a class="btn btn-success" href="admin.php?page=servers&id_serv={{server.ID_SERV}}">Ver</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div>
</div>
<!-- /page content -->
{% include 'a_footer.twig' %}

View File

@@ -0,0 +1,138 @@
{% include 'a_header.twig' %}
<div class="row">
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="x_panel">
{% if mode != 'edit' %}
<h2>Añadir nuevo servidor</h2>
{% else %}
<h2>Editar servidor {{server.Name}}</h2>
{% endif %}
<ul class="nav navbar-right panel_toolbox">
</ul>
<div class="clearfix"></div>
</div>
<div class="x_content">
<br />
<form id="demo-form2" method="POST" action="?page={% if mode == 'edit' %}saveeditserver{% else %}savenewserver{% endif %}&id_serv={{server.ID_SERV}}" data-parsley-validate class="form-horizontal form-label-left">
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="name">Nombre del servidor <span class="required">*</span>
</label>
<div class="col-md-6 col-sm-6 col-xs-12">
<input type="text" id="name" name="name" required="required" class="form-control col-md-7 col-xs-12" value="{{server.Name}}"/>
</div>
</div>
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="IP">IP del servidor <span class="required">*</span>
</label>
<div class="col-md-6 col-sm-6 col-xs-12">
<input type="text" id="IP" name="IP" required="required" class="form-control col-md-7 col-xs-12" value="{{server.IP}}"/>
</div>
</div>
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="description">Descripción <span class="required">*</span>
</label>
<div class="col-md-6 col-sm-6 col-xs-12">
<input type="text" id="description" name="description" required="required" class="form-control col-md-7 col-xs-12" value="{{server.Description}}"/>
</div>
</div>
{% if mode != 'edit' %}
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12">Sistema operativo</label>
<div class="col-md-9 col-sm-9 col-xs-12">
<div id="so" class="btn-group" data-toggle="buttons">
<label class="btn btn-default {%if server.SO == 'WINDOWS' %} active {%endif%}" data-toggle-class="btn-primary" data-toggle-passive-class="btn-default" data-toggle="tooltip" data-placement="top" title="Trabaja con WMI para recoger datos. Soporte bueno desde Windows 2003/XP">
<input type="radio" name="so" value="WINDOWS" {%if server.SO == 'WINDOWS' %} checked="checked" {%endif%}> Windows
</label>
{#<label class="btn btn-default {%if server.SO == 'LINUX_SYSTEMD' %} active {%endif%}" data-toggle-class="btn-primary" data-toggle-passive-class="btn-default" data-toggle="tooltip" data-placement="top" title="Sistemas Linux que usen Systemd como Ubuntu 14.04+, Debian 8+...">
<input type="radio" name="so" value="LINUX_SYSTEMD" {%if server.SO == 'LINUX_SYSTEMD' %} checked="checked" {%endif%}> Linux (Systemd)
</label>
<label class="btn btn-default {%if server.SO == 'LINUX_SERVICE' %} active {%endif%}" data-toggle-class="btn-primary" data-toggle-passive-class="btn-default" data-toggle="tooltip" data-placement="top" title="Sistemas Linux que usen el comando service. Puede ser Centos o Ubuntu anterior a 14.04">
<input type="radio" name="so" value="LINUX_SERVICE" {%if server.SO == 'LINUX_SERVICE' %} checked="checked" {%endif%}> Linux (Service)
</label>#}
<label class="btn btn-default {%if server.SO == 'LINUX' %} active {%endif%}" data-toggle-class="btn-primary" data-toggle-passive-class="btn-default" data-toggle="tooltip" data-placement="top" title="Sistemas Linux. Soporta Systemd y service, y como fallback por procesos">
<input type="radio" name="so" value="LINUX" {%if server.SO == 'LINUX' %} checked="checked" {%endif%}> Linux
</label>
</div>
</div>
</div>
{% endif %}
{% if mode == 'edit' %}
<p>Cambio de usuario y password si se escribe una</p>
{% else %}
<p>Usuario y contraseña son necesarias para monitorizar sus datos y servicios, no así para el ping</p>
{% endif %}
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="userserv">Usuario (Opcional)<br/><small>Dominio\Usuario</small>
</label>
<div class="col-md-6 col-sm-6 col-xs-12">
<input type="text" id="userserv" name="userserv" class="form-control col-md-7 col-xs-12" autocomplete="off" value="{{server.User}}"/>
</div>
</div>
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="passw">Contraseña (Opcional)
</label>
<div class="col-md-6 col-sm-6 col-xs-12">
<input type="password" id="passw" name="passw" class="form-control col-md-7 col-xs-12" autocomplete="off" value="{{server.Password}}"/>
</div>
</div>
<script>
document.getElementById('userserv').value='';
document.getElementById('passw').value='';
</script>
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="ssh">Puerto SSH (Linux)<br/><small>Solo si no es el 22</small>
</label>
<div class="col-md-6 col-sm-6 col-xs-12">
<input type="text" id="ssh" name="ssh" class="form-control col-md-7 col-xs-12" value="{{server.ssh}}"/>
</div>
</div>
<div class="ln_solid"></div>
<div class="form-group">
<div class="col-md-6 col-sm-6 col-xs-12 col-md-offset-3">
<button class="btn btn-warning" onClick="history.back();" type="button">Cancelar</button>
<!--<button class="btn btn-primary" type="reset">Poner en blanco</button>-->
<button type="submit" class="btn btn-success">{% if mode == 'edit' %}Guardar{% else %}Añadir{% endif %}</button>
{% if mode == 'edit' %}
<button onClick="return false;" class="btn btn-danger" data-toggle="modal" data-target=".bs-modal-deletesrv">Borrar servidor</button>
{% endif %}
</div>
</div>
</form>
{# Modal de borrado de servidor #}
{% if mode == 'edit' %}
<div class="modal fade bs-modal-deletesrv" tabindex="-1" role="dialog" aria-hidden="true" style="display: none;">
<div class="modal-dialog modal-lg">
<form method="POST" action="?page=deleteserver&id_serv={{server.ID_SERV}}" data-parsley-validate class="form-horizontal form-label-left">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span>
</button>
<h4 class="modal-title" id="myModalLabel">Borrar servidor</h4>
</div>
<div class="modal-body">
<p>Se procederá a borrar el servidor {{server.Name}}, es irreversible</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="submit" class="btn btn-error">Borrar</button>
</div>
</div>
</form>
</div>
</div>
{% endif %}
</div>
</div>
</div>
</div>
</div>
<!-- /page content -->
{% include 'a_footer.twig' %}

384
assets/html/a_server.twig Normal file
View File

@@ -0,0 +1,384 @@
{% include 'a_header.twig' %}
<!-- Table -->
<div class="row">
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="x_panel">
<div class="x_title">
<h2>Servidor: {{server.Name}} <small><i>{{server.IP}}</i></small> </h2>
<div class="clearfix"></div>
<p>{{server.Version}}</p>
<div class="clearfix"></div>
{% if server.Online == 0 %}<h2 class="text-danger">Offline</h2>{%endif%}
{% if server.BadCreds == 1 %}<h4 class="text-warning">Credenciales no válidas o inexistentes</h4>{%endif%}
{% if server.BadCreds == 2 %}<h4 class="text-warning">El servidor tiene problemas con WMI (Error 0x80041045)</h4>{%endif%}
<div class="clearfix"></div>
{% if server.Description != "" %}
<p>Descripción: {{server.Description}}</p>
<div class="clearfix"></div>
{% endif %}
</div>
<div class="x_content">
<p class="text-muted font-13 m-b-30">
<p>
<button type="button" class="btn btn-secondary" onClick="togglesrv({{server.ID_SERV}});" >{% if server.Enabled == 1 %}Deshabilitar monitorización{% else %}Habilitar monitorización{% endif %}</button>
<button type="button" class="btn btn-info" onClick="updatesrv({{server.ID_SERV}});" >Refrescar información</button>
<a class="btn btn-success" href="?page=editserver&id_serv={{server.ID_SERV}}">Editar datos</a>
<button type="button" class="btn btn-primary" data-toggle="modal" data-target=".bs-modal-changegrp">Editar grupos</button>
</p>
Uptime: {{server.Uptime}}
<br>
Discos duros:
<p><div style="margin-left:1em;">{{server.HDDFastStats | raw}}</div></p>
{% if server.Detram > 0 %}
<p>Ram: {{server.Usedram}} / {{server.Detram}}
{%else%}
<p>Ram libre: {{server.Freeram}}
{%endif%}
<br>Último Ping: {{server.Ping}}ms
</p>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="x_panel">
<div class="x_title">
<h2>Servicios</h2>
<div class="clearfix"></div>
</div>
<div class="x_content">
<p><button type="button" class="btn btn-primary" data-toggle="modal" data-target=".bs-modal-createsvc">Nuevo servicio</button></p>
{% if server.SO == 'LINUX' %}<p>No se pueden reiniciar los servicios en los Linux que no funcionen con "service" o "systemd"</p>{%endif%}
<table id="datatable" class="table table-striped table-bordered">
<thead>
<tr>
<th>Servicio </th>
<th>Descripción </th>
<th>Estado </th>
<th>Acción </th>
</tr>
</thead>
<tbody>
{% for service in services %}
<tr {% if service.Status == 1 %}style="background-color: #eaffde;"{%else%}style="background-color: #ffe6e6;"{%endif%} >
<td class=" ">{{service.Name}} {% if service.Enabled == 0 %}<br/><i>Deshabilitado</i>{% endif %}</td>
<td class=" ">{{service.Description}} </td>
<td class=" ">
{% if service.Status == "NODATA" %}<i>Sin datos</i>
{% else %}
{% if service.Status == '1' %}Operativo{% else %}No funcionando {% endif %}
{% endif %} </td>
<td class=" last">
<button type="button" class="btn btn-primary" id="btn-{{service.ID_SERV}}-{{service.Name}}" data-toggle="modal" data-target=".bs-modal-toggle-{{service.ID_SERV}}-{{service.Name}}" >{% if service.Status == 0 %}Arrancar{% else %}Apagar{% endif %}</button>
<button type="button" class="btn btn-warning" data-toggle="modal" data-target=".bs-modal-deletesvc-{{service.ID_SERV}}-{{service.Name}}">Borrar servicio</button>
</td>
</tr>
<div class="modal fade bs-modal-toggle-{{service.ID_SERV}}-{{service.Name}}" tabindex="-1" role="dialog" aria-hidden="true" style="display: none;">
<div class="modal-dialog modal-lg">
<form method="POST" action="?page=servers&id_serv={{service.ID_SERV}}&do=togglesvc&name={{service.Name}}" data-parsley-validate class="form-horizontal form-label-left">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span>
</button>
<h4 class="modal-title" id="myModalLabel">{% if service.Status == 0 %}Arrancar{% else %}Apagar{% endif %} servicio {{service.Name}}</h4>
</div>
<div class="modal-body">
<p>¿Estas seguro de {% if service.Status == 0 %}Arrancar{% else %}Apagar{% endif %} el servicio {{service.Name}}?
<br>Importante: Recuerda que se necesita una cuenta de administrador para reiniciar servicios
<br>Puede tardar un par de minutos en reflejarse aquí. Refresca con el botón para verlo más rapidamente
</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="submit" class="btn btn-primary">{% if service.Status == 0 %}Arrancar{% else %}Apagar{% endif %}</button>
</div>
</div>
</form>
</div>
</div>
<div class="modal fade bs-modal-deletesvc-{{service.ID_SERV}}-{{service.Name}}" tabindex="-1" role="dialog" aria-hidden="true" style="display: none;">
<div class="modal-dialog modal-lg">
<form method="POST" action="?page=servers&id_serv={{service.ID_SERV}}&do=deletesvc&name={{service.Name}}" data-parsley-validate class="form-horizontal form-label-left">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span>
</button>
<h4 class="modal-title" id="myModalLabel">Borrar servicio</h4>
</div>
<div class="modal-body">
<p>Se procederá a borrar el servicio {{service.Name}}, es irreversible</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="submit" class="btn btn-error">Borrar</button>
</div>
</div>
</form>
</div>
</div>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div>
</div>
<!-- Stadistics HDD -->
<div class="row">
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="x_panel">
<div class="x_title">
<h2>Estadísticas de discos duros</h2>
<div class="clearfix"></div>
</div>
<div class="x_content">
<form method="POST" action="?page=servers&id_serv={{server.ID_SERV}}">
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-3" for="backto">Ver resumen de los últimos:<br/></label>
<div class="col-md-1 col-sm-1 col-xs-1">
<input type="number" id="backto" name="backto" required="required" class="form-control col-md-3 col-xs-3" min="1" value="5">
</div>
días<button type="submit" class="btn btn-primary">Ver</button>
</div>
</form>
{% for key,value in server.HDDData %}
{% set maxspace = 0%}
<p>{{key}}</p>
<canvas id="canvashdd_{{loop.index0}}" style="display: block; height: 100px;" height="100"></canvas>
<script>
var ctxh_{{loop.index0}} = document.getElementById("canvashdd_{{loop.index0}}");
var lineCharth_{{loop.index0}} = new Chart(ctxh_{{loop.index0}}, {
type: 'line',
data: {
labels: [
{% for subdata in value %}
{% set lasttimestamp = subdata.Timestamp %}
"{{subdata.HumanTimestamp}}"
{% if not loop.last %},{% endif %}
{% endfor %}
],
datasets: [{
label: "{{key}} (GB)",
backgroundColor: "rgba(38, 185, 154, 0.31)",
borderColor: "rgba(38, 185, 154, 0.7)",
pointBorderColor: "rgba(38, 185, 154, 0.7)",
pointBackgroundColor: "rgba(38, 185, 154, 0.7)",
pointHoverBackgroundColor: "#fff",
pointHoverBorderColor: "rgba(220,220,220,1)",
pointBorderWidth: 1,
data: [
{% for subdata in value %}
{{subdata.Space - subdata.Freespace }}
{% if not loop.last %},{% endif %}
{% if maxspace < subdata.Space %}{% set maxspace = subdata.Space %}{% endif %}
{% endfor %}
]
}]
},
options: {
scales: {
yAxes: [{
ticks: {
beginAtZero:true,
max: {{maxspace}},
}
}]
}
}
});
</script>
{% endfor %}
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="x_panel">
<div class="x_title">
<h2>Estadísticas de RAM</h2>
<div class="clearfix"></div>
</div>
<div class="x_content">
<p>Histórico de RAM en uso (en MB)</p>
<canvas id="canvas_ram" style="display: block; height: 100px;" height="100"></canvas>
<script>
var ctx = document.getElementById("canvas_ram");
var lineChart = new Chart(ctx, {
type: 'line',
data: {
labels: [
{% for ram in histram|reverse %}
"{{ram.Timestamp}}"
{% if not loop.last %}, {% endif %}
{% endfor %}
],
datasets: [{
label: "RAM",
backgroundColor: "rgba(38, 185, 154, 0.31)",
borderColor: "rgba(38, 185, 154, 0.7)",
pointBorderColor: "rgba(38, 185, 154, 0.7)",
pointBackgroundColor: "rgba(38, 185, 154, 0.7)",
pointHoverBackgroundColor: "#fff",
pointHoverBorderColor: "rgba(220,220,220,1)",
pointBorderWidth: 1,
data: [
{% for ram in histram|reverse %}
{{ram.Detram - ram.Freeram}}
{% if not loop.last %}, {% endif %}
{% endfor %}
]
}]
},
options: {
scales: {
yAxes: [{
ticks: {
beginAtZero:true,
max: {{server.Detram |split('M')[0]|split('G')[0] }},
}
}]
}
},
});
</script>
</div>
</div>
</div>
</div>
<div class="modal fade bs-modal-createsvc" tabindex="-1" role="dialog" aria-hidden="true" style="display: none;">
<div class="modal-dialog modal-lg">
<form method="POST" action="?page=servers&id_serv={{server.ID_SERV}}" data-parsley-validate class="form-horizontal form-label-left">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span>
</button>
<h4 class="modal-title" id="myModalLabel">Crear servicio <small>Se crea un servicio habilitado para monitorizar</small></h4>
</div>
<div class="modal-body">
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="name">Nombre intero del servicio <span class="required">*</span><br/><small>En windows es el nombre corto<br/>En linux es el nombre del <i>demonio</i></small>
</label>
<div class="col-md-6 col-sm-6 col-xs-12">
<input type="text" id="name" name="name" required="required" class="form-control col-md-7 col-xs-12">
</div>
</div>
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="descr">Descripción del servicio <span class="required">*</span>
</label>
<div class="col-md-6 col-sm-6 col-xs-12">
<input type="text" id="descr" name="descr" required="required" class="form-control col-md-7 col-xs-12">
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Cerrar</button>
<button type="submit" class="btn btn-primary">Añadir</button>
</div>
</div>
</form>
</div>
</div>
<div class="modal fade bs-modal-changegrp" tabindex="-1" role="dialog" aria-hidden="true" style="display: none;">
<div class="modal-dialog modal-lg">
<form method="POST" action="?page=servers&id_serv={{server.ID_SERV}}&do=changegrp" data-parsley-validate class="form-horizontal form-label-left">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span>
</button>
<h4 class="modal-title" id="myModalLabel">Cambiar los grupos para el servidor {{server.Name}}</h4>
</div>
<div class="modal-body">
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="name">Grupos: </small>
</label>
<div class="col-md-6 col-sm-6 col-xs-12">
{% for group in groups %}
<input type="checkbox" name="groupsel[]" value="{{group.ID_G}}" {% if group.ID_G in server.listinidg|keys %}checked="checked"{% endif %}> {{group.Name}}
{% endfor %}
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Cerrar</button>
<button type="submit" class="btn btn-primary">Editar</button>
</div>
</div>
</form>
</div>
</div>
<script>
function togglesrv(ID_SERV){ //Enable or disable monitoring
conexion = new XMLHttpRequest();
// Preparar la funcion de respuesta
conexion.onreadystatechange = function() { /* Mostrar */
if(conexion.readyState == 4 && conexion.status == 200) {
location.reload(true);
console.log(textdata.data);
}
}
// Realizar peticion HTTP
conexion.open('POST', 'ajaxfunc.php');
conexion.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
conexion.send("do=togglesrv&ID_SERV="+ID_SERV);
}
function updatesrv(ID_SERV){
conexion = new XMLHttpRequest();
// Preparar la funcion de respuesta
conexion.onreadystatechange = function() { /* Mostrar */
if(conexion.readyState == 4 && conexion.status == 200) {
alert("En curso, recargue la pagina");
window.location.href = "admin.php?page=servers&id_serv={{server.ID_SERV}}";
}
}
// Realizar peticion HTTP
conexion.open('POST', 'ajaxfunc.php');
conexion.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
conexion.send("do=updatesrv&ID_SERV="+ID_SERV);
}
</script>
</div>
<!-- /page content -->
{% include 'a_footer.twig' %}

106
assets/html/a_settings.twig Normal file
View File

@@ -0,0 +1,106 @@
{% include 'a_header.twig' %}
<div class="row">
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="x_panel">
<div class="x_title">
<h2>Opciones de alertas y logs. <small><i>0 deshabilita la alerta</i></small> </h2>
<div class="clearfix"></div>
</div>
<div class="x_content">
<form method="POST" data-parsley-validate class="form-horizontal form-label-left">
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="alerthdd">Porcentaje mínimo de espacio libre en HDD <span class="required">*</span>
</label>
<div class="col-md-6 col-sm-6 col-xs-12">
<input type="number" id="alerthdd" name="alerthdd" required="required" min="0" max="99" class="form-control col-md-7 col-xs-12" value="{{sys.HDDALERT}}">
</div>
</div>
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="alertram">Porcentaje libre mínimo de RAM <span class="required">*</span>
</label>
<div class="col-md-6 col-sm-6 col-xs-12">
<input type="number" id="alertram" name="alertram" required="required" min="0" max="99" class="form-control col-md-7 col-xs-12" value="{{sys.RAMALERT}}">
</div>
</div>
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="autodelete">Limpieza de datos automática que tengan más de <span class="required">*</span>
</label>
<div class="col-md-6 col-sm-6 col-xs-12">
<input type="number" id="autodelete" name="autodelete" required="required" min="1" max="180" class="form-control col-md-7 col-xs-12" value="{{sys.AUTODELETE}}"> días
</div>
</div>
</div>
<button type="submit" class="btn btn-primary">Enviar</button>
</div>
</form>
</div>
</div>
</div>
</div>
<script>
function dellogs(){
conexion = new XMLHttpRequest();
// Preparar la funcion de respuesta
conexion.onreadystatechange = function() { /* Mostrar */
if(conexion.readyState == 4 && conexion.status == 200) {
console.log("Eliminados");
alert("Eliminados");
}
}
// Realizar peticion HTTP
conexion.open('POST', 'ajaxfunc.php');
conexion.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
conexion.send("do=dellogs");
}
</script>
<!-- Modal nuevo usuario -->
<div class="modal fade bs-modal-createuser" tabindex="-1" role="dialog" aria-hidden="true" style="display: none;">
<div class="modal-dialog modal-lg">
<form method="POST" data-parsley-validate class="form-horizontal form-label-left">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span>
</button>
<h4 class="modal-title" id="myModalLabel">Crear usuario <small>Se crearán con permisos básicos que luego se pueden editar</small></h4>
</div>
<div class="modal-body">
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="name">Nombre del usuario <span class="required">*</span>
</label>
<div class="col-md-6 col-sm-6 col-xs-12">
<input type="text" id="name" name="name" required="required" class="form-control col-md-7 col-xs-12">{{POST.name}}
</div>
</div>
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="password">Contraseña <span class="required">*</span>
</label>
<div class="col-md-6 col-sm-6 col-xs-12">
<input type="password" id="password" name="password" required="required" class="form-control col-md-7 col-xs-12">{{POST.IP}}
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="submit" class="btn btn-primary">Crear</button>
</div>
</div>
</form>
</div>
</div>
</div>
<!-- /page content -->
{% include 'a_footer.twig' %}

209
assets/html/a_users.twig Normal file
View File

@@ -0,0 +1,209 @@
{% include 'a_header.twig' %}
<!-- Table -->
<div class="row">
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="x_panel">
<div class="x_title">
<h2>Usuarios </h2>
<div class="clearfix"></div>
</div>
<div class="x_content">
<p><button type="button" class="btn btn-primary" data-toggle="modal" data-target=".bs-modal-createuser">Crear usuario</button></p>
<p class="text-muted font-13 m-b-30">
Tabla de usuarios
</p>
<table id="datatable" class="table table-striped table-bordered">
<thead>
<tr>
<th># </th>
<th>Usuario</th>
<th>Habilitado</th>
<th>Editar servidores</th>
<th>Recibir email de incidencias</th>
<th>Admin</th>
<th>Editar</th>
</tr>
</thead>
<tbody>
{% for userp in users %}
<tr {% if userp.Enabled == 1 %}style="background-color: #eaffde;"{%else%}style="background-color: #ffe6e6;"{% endif %} >
<td class=" "><b>{{userp.ID_U}}</b></td>
<td class=" ">{{userp.Name}} {% if userp.Enabled == 0 %}<br/><i>Disabled</i>{%endif%}</td>
<td class=" ">
<input onClick="permajax('{{userp.ID_U}}','Enabled');" type="checkbox" {%if userp.Enabled == 1 %} checked="checked" {% endif %} {%if userp.ID_U == user.ID_U %} onclick="return false;" onkeydown="return false;" {% endif %}>
</td>
<td class=" ">
<input onClick="permajax('{{userp.ID_U}}','PE_editserv');" type="checkbox" {%if userp.PE_editserv == 1 %} checked="checked" {% endif %} {%if userp.ID_U == user.ID_U %} onclick="return false;" onkeydown="return false;" {% endif %}>
</td>
<td class=" ">
<input onClick="permajax('{{userp.ID_U}}','SendMail');" type="checkbox" {%if userp.SendMail == 1 %} checked="checked" {% endif %}>
</td>
<td class=" ">
<input onClick="permajax('{{userp.ID_U}}','PE_admin');" type="checkbox" {%if userp.PE_admin == 1 %} checked="checked" {% endif %} {%if userp.ID_U == user.ID_U %} onclick="return false;" onkeydown="return false;" {% endif %}>
</td>
<td class=" last">
{% if userp.ID_U == user.ID_U %} {# Change password if is your user #}
<button type="button" class="btn btn-info" data-toggle="modal" data-target=".bs-modal-changepass-{{userp.ID_U}}">Cambiar tu contraseña</button>
<!-- Modal cambiar password -->
<div class="modal fade bs-modal-changepass-{{userp.ID_U}}" tabindex="-1" role="dialog" aria-hidden="true" style="display: none;">
<div class="modal-dialog modal-lg">
<form method="POST" data-parsley-validate class="form-horizontal form-label-left">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span>
</button>
<h4 class="modal-title" id="myModalLabel">Cambiar contraseña para el usuario {{userp.Name}}</h4>
</div>
<div class="modal-body">
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="pass1">Nueva contraseña <span class="required">*</span>
</label>
<div class="col-md-6 col-sm-6 col-xs-12">
<input type="password" id="pass1" name="pass1" required="required" class="form-control col-md-7 col-xs-12">
</div>
</div>
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="pass2">Repita la contraseña <span class="required">*</span>
</label>
<div class="col-md-6 col-sm-6 col-xs-12">
<input type="password" id="pass2" name="pass2" required="required" class="form-control col-md-7 col-xs-12">
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Cerrar</button>
<button type="submit" class="btn btn-primary">Cambiar</button>
</div>
</div>
</form>
</div>
</div>
</td>
{% elseif user.PE_admin == 1 %}
<button type="button" class="btn btn-warning" data-toggle="modal" data-target=".bs-modal-deleteuser-{{userp.ID_U}}">Borrar usuario</button>
<!-- Modal borrar usuario -->
<div class="modal fade bs-modal-deleteuser-{{userp.ID_U}}" tabindex="-1" role="dialog" aria-hidden="true" style="display: none;">
<div class="modal-dialog modal-lg">
<form method="POST" action="?page=users&delete={{userp.ID_U}}" data-parsley-validate class="form-horizontal form-label-left">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span>
</button>
<h4 class="modal-title" id="myModalLabel">Borrar usuario <small>No se puede recuperar un usuario que se borre</small></h4>
</div>
<div class="modal-body">
<p>No hay vuelta atrás, si aceptas se borrará el usuario {{userp.Name}}</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Cerrar</button>
<button type="submit" class="btn btn-primary">Borrar</button>
</div>
</div>
</form>
</div>
</div>
</td>
{% endif %}
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div>
</div>
<script>
function permajax(ID_U,perm){
conexion = new XMLHttpRequest();
// Preparar la funcion de respuesta
conexion.onreadystatechange = function() { /* Mostrar */
if(conexion.readyState == 4 && conexion.status == 200) {
console.log("OK")
}
}
// Realizar peticion HTTP
conexion.open('POST', 'ajaxfunc.php');
conexion.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
conexion.send("do=toggleperm&ID_U="+ID_U+"&perm="+perm);
}
</script>
<!-- Modal nuevo usuario -->
<div class="modal fade bs-modal-createuser" tabindex="-1" role="dialog" aria-hidden="true" style="display: none;">
<div class="modal-dialog modal-lg">
<form method="POST" data-parsley-validate class="form-horizontal form-label-left">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span>
</button>
<h4 class="modal-title" id="myModalLabel">Crear usuario <small>Se crearán con permisos básicos que luego se pueden editar</small></h4>
</div>
<div class="modal-body">
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="name">Nombre del usuario <span class="required">*</span>
</label>
<div class="col-md-6 col-sm-6 col-xs-12">
<input type="text" id="name" name="name" required="required" class="form-control col-md-7 col-xs-12">
</div>
</div>
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="password">Contraseña <span class="required">*</span>
</label>
<div class="col-md-6 col-sm-6 col-xs-12">
<input type="password" id="password" name="password" required="required" class="form-control col-md-7 col-xs-12">
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="submit" class="btn btn-primary">Crear</button>
</div>
</div>
</form>
</div>
</div>
<!-- Modal borrar usuario -->
<div class="modal fade bs-modal-deleteuser" tabindex="-1" role="dialog" aria-hidden="true" style="display: none;">
<div class="modal-dialog modal-lg">
<form method="POST" data-parsley-validate class="form-horizontal form-label-left">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span>
</button>
<h4 class="modal-title" id="myModalLabel">Borrar usuario <small>No se puede recuperar un usuario que se borre</small></h4>
</div>
<div class="modal-body">
<p>No hay vuelta atrás, si aceptas se borrará el usuario</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Cerrar</button>
<button type="submit" class="btn btn-primary">Borrar</button>
</div>
</div>
</form>
</div>
</div>
</div>
<!-- /page content -->
{% include 'a_footer.twig' %}

28
assets/html/err_403.twig Normal file
View File

@@ -0,0 +1,28 @@
{% include 'a_header.twig' %}
<!-- Table -->
<div class="row">
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="x_panel">
<div class="x_title">
<h2>Acceso denegado </h2>
<div class="clearfix"></div>
</div>
<div class="x_content">
<p><a onClick="window.history.back();" class="btn btn-primary">Volver Atrás</a></p>
<p class="text-muted font-13 m-b-30">
Acceso denegado
</p>
</div>
</div>
</div>
</div>
</div>
<!-- /page content -->
{% include 'a_footer.twig' %}

28
assets/html/err_404.twig Normal file
View File

@@ -0,0 +1,28 @@
{% include 'a_header.twig' %}
<!-- Table -->
<div class="row">
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="x_panel">
<div class="x_title">
<h2>Página no válida </h2>
<div class="clearfix"></div>
</div>
<div class="x_content">
<p><a onClick="window.history.back();" class="btn btn-primary">Volver Atrás</a></p>
<p class="text-muted font-13 m-b-30">
Esta página no es válida, vuelva atrás.
</p>
</div>
</div>
</div>
</div>
</div>
<!-- /page content -->
{% include 'a_footer.twig' %}

View File

@@ -1,13 +0,0 @@
<footer class="main-footer">
<div class="container-fluid">
<div class="row">
<div class="col-sm-6">
<p>JKA Network &copy; 2018. Versión {{version}}</p>
</div>
<div class="col-sm-6 text-right">
<p>Design by <a href="https://bootstrapious.com" class="external">Bootstrapious</a></p>
<!-- Please do not remove the backlink to us unless you support further theme's development at https://bootstrapious.com/donate. It is part of the license conditions. Thank you for understanding :)-->
</div>
</div>
</div>
</footer>

View File

@@ -1,42 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<!-- Credits to https://bootstrapious.com/p/bootstrap-4-dashboard -->
<meta charset="utf-8">
<title>CheckServer - Estado de los servicios</title>
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="assets/css/bootstrap.min.css">
<link rel="stylesheet" href="assets/css/panel.css" id="theme-stylesheet">
<link rel="stylesheet" href="assets/css/patchpanel.css" id="theme-stylesheet">
<link rel="stylesheet" href="assets/fonts/roboto/stylesheet.css">
<!-- Fonts CSS-->
<link rel="stylesheet" href="assets/fonts/styles.css">
<script src="assets/js/Chart.min.js"></script> <!-- For charts -->
</head>
<body>
<div class="page forms-page" style="width:100%;">
<!-- navbar-->
<header class="header">
<nav class="navbar">
<div class="container-fluid">
<div class="navbar-holder d-flex align-items-center justify-content-between">
<div class="navbar-header"><a href="index.php" class="navbar-brand">
<div class="brand-text hidden-sm-down"><span>CheckServer</span></div></a></div>
<ul class="nav-menu list-unstyled d-flex flex-md-row align-items-md-center">
<li class="nav-item"><a href="login.php" class="nav-link logout">Entrar<i class="icon-sign-in"></i></a></li>
</ul>
</div>
</div>
</nav>
</header>
<div class="breadcrumb-holder">
<div class="container-fluid">
<ul class="breadcrumb">
<li class="breadcrumb-item"><a href="index.html">Inicio</a></li>
<li class="breadcrumb-item active">Estado</li>
</ul>
</div>
</div>

109
assets/html/index.twig Normal file
View File

@@ -0,0 +1,109 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<!-- Meta, title, CSS, favicons, etc. -->
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" href="assets/images/favicon.ico" type="image/ico" />
<title>Panel de administración</title>
<!-- Bootstrap -->
<link href="vendors/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet">
<!-- Font Awesome -->
<link href="vendors/font-awesome/css/font-awesome.min.css" rel="stylesheet">
<!-- NProgress -->
<link href="vendors/nprogress/nprogress.css" rel="stylesheet">
<!-- Custom Theme Style -->
<link href="assets/css/custom.css" rel="stylesheet">
<!-- jQuery -->
<script src="vendors/jquery/dist/jquery.min.js"></script>
</head>
<!-- Basic top navigation -->
<div class="top_nav">
<div class="nav_menu">
<nav>
<ul class="nav navbar-nav navbar-right">
{% if user.Name %}
<li class=""><a href="index.php?logout=1"><i class="fa fa-sign-out"></i> Cerrar sesión</a></li>
<li class=""><a href="admin.php"><i class="fa fa-database"></i> Administración</a></li>
<li class=""><a href="#"> Bienvenido, {{user.Name}}</a></li>
{% else %}
<li class=""><a href="login.php"><i class="fa fa-sign-out"></i> Iniciar sesión</a></li>
{% endif %}
</ul>
</nav>
</div>
</div>
<!-- /Basic top navigation -->
<body class="nav-md">
<div class="container body">
<!-- Table -->
<div class="row">
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="x_panel">
<div class="x_title">
<h2>CheckServer. Página de estado <small>Estado rápido de los servidores</small> </h2>
<div class="clearfix"></div>
</div>
<div class="x_content">
<table id="datatable" class="table table-striped table-bordered">
<thead>
<tr>
<th>Servidor </th>
<th>Servicios</th>
<th>Uptime </th>
<th>Encendido </th>
<th>Ultimo fallo </th>
</tr>
</thead>
<tbody>
{% for server in servers %}
<tr
{% if server.Enabled == 1 %} {%if server.Online == 1 %}class="bgcolor-ok" {%endif%}{% elseif server.Enabled == 0 %}class="bgcolor-secondary"{% endif %}>
<td data-toggle="tooltip" data-placement="top" {#title="{{server.Description}}"#} >{{server.Name}} {% if server.Online == 0 and server.Enabled == 1 %}<br/><i>Offline</i>{%endif%}{% if server.Enabled == 0 %}<br/><i>Deshabilitado</i>{%endif%}</td>
<td {% if server.SInactive > 0 %} class="bgcolor-warn" {% endif %}>
Monitorizando: {{server.SEnabled}}
{% if server.SEnabled > 0 %}<br>Funcionando: {{server.SActive}} {% endif %}
{% if server.SInactive > 0 %}<br>Parados: {{server.SInactive}} {% endif %}
{% if server.SDisabled > 0 %}<br>Monitorización en pausa: {{server.SDisabled}} {% endif %}
</td>
<td>{% if server.BadCreds == 0 %} {{server.Uptime}} {% endif %}</td>
{% if server.Enabled == 1 %}
<td {% if server.Ping > -1 %}class="bgcolor-ok">On {% else %}class="bgcolor-warn">Off{% endif %}</td>
{% else %}
<td></td>
{% endif %}
<td></td> {#TODO: Know last error #}
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div>
</div>
<!-- /page content -->
{% include 'a_footer.twig' %}

View File

@@ -1,135 +0,0 @@
{% include 'header.twig' %}
<!-- Pages -->
<section>
<div class="col-lg-10 mhcenter">
<div class="card">
<div class="card-header d-flex align-items-center">
<h2 class="h5 display">{{T_.statdif1}}</h2>
</div>
<div class="card-block">
<table class="table table-striped table-hover">
<thead>
<tr>
<!--<th>#</th>-->
<th>{{T_.name}}</th>
<th>{{T_.status_uptime}}</th>
<th>{{T_.last_check}}</th>
<th>{{T_.last_err}}</th>
</tr>
</thead>
<tbody>
{% for check in checks %}
{% if check.ID_G != beforegroup %}
<tr>
<th colspan="4" class="thgrp">{{check.nameGroup}}</th>
</tr>
{% endif %}
{% set beforegroup = check.ID_G %}
<tr>
<td>{{check.name}}</td>
{# "Switch" type #}
{% if check.ID_TC != 3 %} {# Every except Visits that is different #}
{% if check.uptime != -1 %}{#Only if records exists#}
<td>
<span class='{{check.statusColor}}' data-tooltip='Type of check: {{T_[check.nameCheck]}}' data-tooltip-position='top'>{{check.statusText}}</span> {# Use T_[Var] to merge var to array #}
({{ check.uptime}}%)
</td>
<td>
{{check.dateLastChk}} -
{% if check.failedLastChk == 0 %}
<span style="color:green">{{T_.status_right}}</span>
{% else %}
<span style="color:red">{{T_.failed}}</span>
{% endif %}
</td>
{%else%} {#If not records yet#}
<td colspan="2">Dame tiempo para recopilar estadísticas</td>
{%endif%}
<td>
{%if check.dateLastErr is not null%}
{{check.dateLastErr}}
{%else%}
{{T_.no_errs}}
{%endif%}
</td>
{% endif %}
{% if check.ID_TC == 3 %}
<td colspan="3">
<div style="width:170px;height:90px;">
<canvas id="visits{{ check.ID_C }}"></canvas>
</div>
<script>
var visits{{ check.ID_C }} = document.getElementById("visits{{ check.ID_C }}").getContext("2d");
var Chart{{ check.ID_C }} = new Chart(visits{{ check.ID_C }}, {
type: 'bar',
data: {
labels: [{{ check.dateArray | raw}}],
datasets: [
{
label: "Visitas",
backgroundColor: "rgba(100,176,243,1)", // Color del sombreado de la grafica en ese lugar
borderColor: "#4ba4f3", // Colores de la linea y punteado
pointBorderColor: "#4ba4f3",
pointBackgroundColor: "#fff",
data: [{{ check.visitsArray }}],
}
]
},
options: {
legend: {display: false},
scales:{
yAxes:[{ticks:{beginAtZero: true}}]
}
},
});
</script>
</td>
{% endif %}
{# Fin Switch #}
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div>
</section>
<div style="margin-top: 3em;"></div>
<!-- Noticias -->
<section>
<div class="col-lg-10" style="margin: 0 auto;">
<div class="card">
<div class="card-header d-flex align-items-center">
<h2 class="h5 display">Noticias sobre los servicios</h2>
</div>
<div class="card-block">
{# {% if user.nick != "" %}
<h3>Añadir incidencia: (Usa Markdown)</h3>
<form action="index.php?do=addincident" method="POST">
<textarea name="text" style="width:90%;height:150px;"></textarea>
<br/><button type="submit">Enviar</button>
</form>
{% endif %} #}
{% for onenews in news %}
<h3>Day {{ onenews.day }}</h3>
<div class="incident">
{{ onenews.text | raw }}
{% if user.nick != "" %}
<hr/>
<button type="submit" onclick="window.location.href='?do=delincident&ID_Inc={{ incident.ID_Inc }}">Delete</button>
{% endif %}
</div>
{% endfor %}
</div>
</div>
</section>
{% include 'footer.twig' %}

251
assets/html/install.twig Executable file → Normal file
View File

@@ -1,122 +1,129 @@
<!DOCTYPE html>
<html>
<head>
<!-- Credits to https://bootstrapious.com/p/bootstrap-4-dashboard -->
<meta charset="utf-8">
<title>CheckServer - Installer</title>
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="assets/css/bootstrap.min.css">
<link rel="stylesheet" href="assets/css/panel.css" id="theme-stylesheet">
<link rel="stylesheet" href="assets/css/patchpanel.css" id="theme-stylesheet">
<link rel="stylesheet" href="assets/fonts/roboto/stylesheet.css">
<!-- Fonts CSS-->
<link rel="stylesheet" href="assets/fonts/styles.css">
</head>
<body>
<div class="page forms-page" style="width:100%;">
<!-- navbar-->
<header class="header">
<nav class="navbar">
<div class="container-fluid">
<div class="navbar-holder d-flex align-items-center justify-content-between">
<div class="navbar-header">
<div class="brand-text hidden-sm-down"><span style="color:white;">CheckServer</span></div></div>
</div>
</div>
</nav>
</header>
<section class="forms">
<div class="container-fluid">
<header>
<h1 class="h3 display">CheckServer installer</h1>
</header>
{% if part != 2 %}
<div class="row">
<div class="col-lg-12">
<div class="card">
<div class="card-block">
<div class="form-group row">
<div class="col-sm-12">
<p>Welcome to the "one-minute" installer of CheckServer. We only need the lang and admin data to configure the site and take the control to you</p>
</div>
</div>
<form class="form-horizontal" method="POST" action="?page=install">
<div class="form-group row">
<label class="col-sm-2">Language</label>
<div class="col-sm-10">
<select name="lang">
<option value="es">Spanish</option>
<option value="en">English</option>
</select>
</div>
</div>
<div class="form-group row">
<label class="col-sm-2">Site name</label>
<div class="col-sm-10">
<input name="websiteName" type="text" placeholder="Nombre del sitio." value="CheckServer" class="form-control form-control-success"><small class="form-text">For "naming" CheckServer</small>
</div>
</div>
<div class="form-group row">
<label class="col-sm-2">Admin username</label>
<div class="col-sm-10">
<input name="username" type="text" placeholder="Nombre de usuario" value="" class="form-control form-control-success"><small class="form-text">Your username</small>
</div>
</div>
<div class="form-group row">
<label class="col-sm-2">Password</label>
<div class="col-sm-10">
<input name="passw1" type="password" placeholder="" value="" class="form-control form-control-success"><small class="form-text">Your password</small>
</div>
</div>
<div class="form-group row">
<label class="col-sm-2">Repeat password</label>
<div class="col-sm-10">
<input name="passw2" type="password" placeholder="" value="" class="form-control form-control-success"><small class="form-text">Your password, again.</small>
</div>
</div>
<div class="form-group row">
<div class="col-sm-10 offset-sm-2">
<button type="submit" class="btn btn-primary">Install</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
{%else%}
<div class="row">
<div class="col-lg-12">
<div class="card">
<div class="card-block">
<div class="form-group row">
<div class="col-sm-12">
<p>Installed!<br/>Well, not all, there is one manual step left to you. You have to
configure your cron service (If using cpanel is in cron jobs, in standard linux see distro cron).
</p>
<p>You have to create a cron that executes using php the file cronchk.php that is here.<br/>
Example using cron of Linux:</p>
<pre>
*/5 * * * * root cd /srv/http/checkserver/ &amp;&amp; /usr/bin/php -f cronchk.php >/dev/null 2>&amp;1
</pre>
<p>In this example, cron runs every 5 mins, you can adjust it, but I do not recommend less than 3 mins if you have somewhat much checks, it can slow server.</p>
<p>Go to <a href="index.php">home</a> to start using CheckServer! Welcome</p>
</div>
</div>
</div>
</div>
</div>
</div>
{%endif%}
</div>
</section>
</body>
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<!-- Meta, title, CSS, favicons, etc. -->
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" href="assets/images/favicon.ico" type="image/ico" />
<title>Panel de administración</title>
<!-- Bootstrap -->
<link href="vendors/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet">
<!-- Font Awesome -->
<link href="vendors/font-awesome/css/font-awesome.min.css" rel="stylesheet">
<!-- NProgress -->
<link href="vendors/nprogress/nprogress.css" rel="stylesheet">
<!-- Custom Theme Style -->
<link href="assets/css/custom.css" rel="stylesheet">
</head>
<body class="nav-md">
<div class="container body">
<div class="row">
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="x_panel">
<div class="x_title">
<h2>Instalación de CheckServer</h2>
<ul class="nav navbar-right panel_toolbox">
</ul>
<div class="clearfix"></div>
</div>
<div class="x_content">
<br />
<form id="demo-form2" method="POST" data-parsley-validate class="form-horizontal form-label-left">
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="adminname">Nombre de usuario admin <span class="required">*</span>
</label>
<div class="col-md-6 col-sm-6 col-xs-12">
<input type="text" id="adminname" name="adminname" required="required" class="form-control col-md-7 col-xs-12" value="{{POST.adminname}}"/>
</div>
</div>
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="adminmail">Correo de admin <span class="required">*</span>
</label>
<div class="col-md-6 col-sm-6 col-xs-12">
<input type="text" id="adminmail" name="adminmail" required="required" class="form-control col-md-7 col-xs-12" value="{{POST.adminname}}"/>
</div>
</div>
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="adminpass">Contraseña
</label>
<div class="col-md-6 col-sm-6 col-xs-12">
<input type="password" id="adminpass" name="adminpass" class="form-control col-md-7 col-xs-12" value="{{POST.adminpass}}"/>
</div>
</div>
<h2>Base de datos:</h2>
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="dbhost">Ubicación BBDD <span class="required">*</span>
</label>
<div class="col-md-6 col-sm-6 col-xs-12">
<input type="text" id="dbhost" name="dbhost" required="required" class="form-control col-md-7 col-xs-12" value="{{POST.dbhost}}"/>
</div>
</div>
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="dbuser">Nombre de usuario de BBDD <span class="required">*</span>
</label>
<div class="col-md-6 col-sm-6 col-xs-12">
<input type="text" id="dbuser" name="dbuser" required="required" class="form-control col-md-7 col-xs-12" value="{{POST.dbuser}}"/>
</div>
</div>
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="dbpass">Contraseña BBDD
</label>
<div class="col-md-6 col-sm-6 col-xs-12">
<input type="password" id="dbpass" name="dbpass" class="form-control col-md-7 col-xs-12" value="{{POST.dbpass}}"/>
</div>
</div>
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="dbdata">Base de datos a usar <span class="required">*</span>
</label>
<div class="col-md-6 col-sm-6 col-xs-12">
<input type="text" id="dbdata" name="dbdata" required="required" class="form-control col-md-7 col-xs-12" value="{{POST.dbdata}}"/>
</div>
</div>
<div class="ln_solid"></div>
<div class="form-group">
<div class="col-md-6 col-sm-6 col-xs-12 col-md-offset-3">
<button class="btn btn-primary" type="reset">Poner en blanco</button>
<button type="submit" class="btn btn-success">Instalar</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<!-- /page content -->
</div>
</div>
<!-- jQuery -->
<script src="vendors/jquery/dist/jquery.min.js"></script>
<!-- Bootstrap -->
<script src="vendors/bootstrap/dist/js/bootstrap.min.js"></script>
<!-- FastClick -->
<script src="vendors/fastclick/lib/fastclick.js"></script>
<!-- bootstrap-progressbar -->
<script src="vendors/bootstrap-progressbar/bootstrap-progressbar.min.js"></script>
<!-- Skycons -->
<script src="vendors/skycons/skycons.js"></script>
<script src="js/custom.js"></script>
</body>
</html>

116
assets/html/login.twig Executable file → Normal file
View File

@@ -1,33 +1,83 @@
{% include 'header.twig' %}
<section>
<div class="col-lg-10 mhcenter">
<div class="card">
<div class="card-header d-flex align-items-center">
<h2 class="h5 display">Inicio de sesión de CheckServer</h2>
</div>
<div class="card-block">
{% if status == 'error' %}
<h2>Datos incorrectos, vuelva a intentarlo</h2>
{% endif %}
<form id="form1" method="post" action="login.php">
<table>
<tbody>
<tr>
<td class="textT">Nick:</td>
<td style="padding-left:10px;"><input name="nick" type="text" id="nick"></td>
</tr>
<tr>
<td class="textT">Contraseña:</td>
<td style="padding-left:10px;"><input name="pass" type="password" id="pass" required="required"></td>
</tr>
<tr>
<td></td><td><button type="submit" class="btn">Enviar</button></td>
</tr>
</tbody>
</table>
</form>
</div>
</div>
</div>
</section>
{% include 'footer.twig' %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<!-- Meta, title, CSS, favicons, etc. -->
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" href="assets/images/favicon.ico" type="image/ico" />
<title>CheckServer | JKANetwork</title>
<!-- Bootstrap -->
<link href="vendors/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet">
<!-- Font Awesome -->
<link href="vendors/font-awesome/css/font-awesome.min.css" rel="stylesheet">
<!-- NProgress -->
<link href="vendors/nprogress/nprogress.css" rel="stylesheet">
<!-- Animate.css -->
<link href="vendors/animate.css/animate.min.css" rel="stylesheet">
<!-- Custom Theme Style -->
<link href="assets/css/custom.css" rel="stylesheet">
</head>
<body class="login">
<div>
<a class="hiddenanchor" id="signup"></a>
<a class="hiddenanchor" id="signin"></a>
<div class="login_wrapper">
<div class="animate form login_form">
<section class="login_content">
<form method="POST">
<h1>Iniciar sesión</h1>
{% if msg_e %}
{% for string in msg_e %}
<div>
<div class="alert alert-error alert-dismissible fade in" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span>
</button>
{{string}}
</div>
</div>
{% endfor %}
{% endif %}
<div>
<input type="text" name="user" class="form-control" placeholder="Username" required="" />
</div>
<div>
<input type="password" name="password" class="form-control" placeholder="Password" required="" />
</div>
<div>
<button class="btn btn-default submit" type="submit" >Entrar</button>
<!--<a class="reset_pass" href="#">Lost your password?</a>-->
</div>
<div class="clearfix"></div>
<div class="separator">
<div class="clearfix"></div>
<br />
<div>
<h1><i class="fa fa-server"></i> CheckServer - 2019</h1>
<p>©2016 All Rights Reserved. Tema Gentelella Alela! is a Bootstrap 3 template. Privacy and Terms</p>
</div>
</div>
</form>
</section>
</div>
</div>
</div>
<!-- jQuery -->
<script src="vendors/jquery/dist/jquery.min.js"></script>
<!-- Bootstrap -->
<script src="vendors/bootstrap/dist/js/bootstrap.min.js"></script>
</body>
</html>

View File

@@ -1,193 +0,0 @@
{% include 'panel/p_header.twig' %}
<!-- Add/edit form -->
<section class="forms">
<div class="container-fluid">
<header>
{%if type == 'edit' %}
<h1 class="h3 display">Editando {{check.name}}</h1>
{%else%}
<h1 class="h3 display">Nuevo check</h1>
{%endif%}
</header>
<div class="row">
<div class="col-lg-12">
<div class="card">
<div class="card-block">
<form class="form-horizontal" method="POST"
{%if type == 'edit'%}
action="?page=updatecheck&ID_C={{check.ID_C}}"
{%else%}
action="?page=savenewcheck"
{%endif%}>
<div class="form-group row">
<label class="col-sm-2">{{T_.name}}</label>
<div class="col-sm-10">
<input name="name" type="text" placeholder="Nombre del check" value="{{check.name}}" class="form-control form-control-success"><small class="form-text">Nombre del checkeo.</small>
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 form-control-label">{{T_.group}}</label>
<div class="col-sm-10 select">
<select name="group" id="group" class="form-control">
{% for group in groups %}
<option value="{{group.ID_G}}" {%if group.ID_G == check.ID_G %} selected="selected" {%endif%}>
{{group.name}}
</option>
{%endfor%}
</select>
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 form-control-label">Tipo de check</label>
<div class="col-sm-10 select">
<select name="tcheck" id="tcheck" class="form-control" onchange="showOptData(this);">
{% for tchk in tchecks %}
<option value="{{tchk.ID_TC}}" {%if tchk.ID_TC == check.ID_TC %} selected="selected" {%endif%}>
{{tchk.name}}
</option>
{%endfor%}
</select>
</div>
</div>
{# Aquí empiezan los campos "opcionales" dependiendo del tipo de check (Estos vienen de la tabla, al campo) #}
{# Sacar variables #}
{% if check.ID_TC == 1%}
{% set t1 = check.url|split(':') %}
{% elseif check.ID_TC == 2%}
{% set t2_url = check.url %}
{% set t2_code = check.urlParam %}
{% elseif check.ID_TC == 4%}
{% set t4_url = check.url %}
{% elseif check.ID_TC == 5 %}
{% set t5_url = check.url %}
{% set t5_params = check.urlParam|split('|') %}
{% set t5_exceptedRes = check.exceptedRes %}
{% endif %}
{# Trozos de formulario #}
{# Tipo 1 - Ping IP #}
<div id="t1" style="display:none;">
<div class="form-group row">
<label class="col-sm-2">IP</label>
<div class="col-sm-10">
<input name="t1url" type="text" placeholder="URL" value="{{t1[0]}}" class="form-control form-control-success"><small class="form-text">IP/Web a hacer "ping".</small>
</div>
</div>
<div class="form-group row">
<label class="col-sm-2">Puerto</label>
<div class="col-sm-10">
<input name="t1port" type="text" placeholder="Puerto" value="{{t1[1]}}" class="form-control form-control-success"><small class="form-text">Puerto que comprobar. Por defecto es el 80/www.</small>
</div>
</div>
</div>
{# Tipo 2 - HttpCode (WWW) #}
<div id="t2" style="display:none;">
<div class="form-group row">
<label class="col-sm-2">URL</label>
<div class="col-sm-10">
<input name="t2url" type="text" placeholder="URL" value="{{t2_url}}" class="form-control form-control-success"><small class="form-text">URL a la que comprobar si funciona o no.</small>
</div>
</div>
<div class="form-group row">
<label class="col-sm-2">Codigo esperado</label>
<div class="col-sm-10">
<input name="t2code" type="text" placeholder="Puerto" value="{{t2_code}}" class="form-control form-control-success"><small class="form-text">Codigo esperado, si no se pone nada, es el 200 (Ok)</small>
</div>
</div>
</div>
{# Tipo 3 - Visit Counter #}
<div id="t3" style="display:none;">
<div class="form-group row">
<label class="col-sm-2"></label>
<div class="col-sm-10">
<p><small class="form-text">Al aceptar, en las opciones del check, está el código HTML para añadir a la web</small></p>
</div>
</div>
</div>
{# Tipo 4 - Database #}
<div id="t4" style="display:none;">
<div class="form-group row">
<label class="col-sm-2">Lugar donde estará el fichero PHP de la comprobación en tu servidor</label>
<div class="col-sm-10">
<input name="t4url" type="text" placeholder="URL" value="{{t4_url}}" class="form-control form-control-success"><small class="form-text">Aquí debes poner la URL completa al fichero php que se te dará para comprobar el estado de la base de datos (Por seguridad, sus datos no se guardan en CheckServer)</small>
</div>
</div>
</div>
{# Tipo 5 - Json API #}
<div id="t5" style="display:none;">
<div class="form-group row">
<label class="col-sm-2">JSON</label>
<div class="col-sm-10">
<input name="t5url" type="text" placeholder="URL" value="{{t5_url}}" class="form-control form-control-success"><small class="form-text">URL de la API</small>
</div>
</div>
<div class="form-group row">
<label class="col-sm-2">Tipo de request</label>
<div class="col-sm-10">
<select name="t5type" class="form-control">
<option value="GET" {%if t5_params[0] == 'GET' %} selected="selected" {%endif%}>GET</option>
<option value="POST" {%if t5_params[0] == 'POST' %} selected="selected" {%endif%}>POST</option>
</select>
</div>
</div>
<div class="form-group row">
<label class="col-sm-2">Parametros enviados</label>
<div class="col-sm-10">
<input name="t5params" type="text" placeholder="?params" value="{{t5_params[1]}}" class="form-control form-control-success"><small class="form-text">Parametros de la API (Si es GET, empezar con ? o /)</small>
</div>
</div>
<div class="form-group row">
<label class="col-sm-2">Respuesta esperada</label>
<div class="col-sm-10">
<textarea name="t5exceptedRes" placeholder="Respuesta en formato JSON" class="form-control form-control-success">{{t5_exceptedRes}}</textarea>
</div>
</div>
</div>
<div class="form-group row">
<div class="col-sm-10 offset-sm-2">
<button type="submit" class="btn btn-primary">Guardar cambios</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</section>
<script>
function showOptData(valSel){
document.getElementById("t1").style.display = "none";
document.getElementById("t2").style.display = "none";
document.getElementById("t3").style.display = "none";
document.getElementById("t4").style.display = "none";
document.getElementById("t5").style.display = "none";
optVal = valSel.value;
if(optVal == '1'){
document.getElementById("t1").style.display = "block";
}else if(optVal == '2'){
document.getElementById("t2").style.display = "block";
}else if(optVal == '3'){
document.getElementById("t3").style.display = "block";
}else if(optVal == '4'){
document.getElementById("t4").style.display = "block";
}else {
document.getElementById("t5").style.display = "block";
}
}
showOptData(document.getElementById("tcheck"))
</script>
{% include 'footer.twig' %}

View File

@@ -1,251 +0,0 @@
{% include 'panel/p_header.twig' %}
<!-- Checks -->
<section>
<div class="col-lg-12">
<div class="card">
<div class="card-header d-flex align-items-center">
<h2 class="h5 display">Checks de la web. Desde aquí puedes ver, editar, y añadir nuevos checkeos a tus servidores</h2>
</div>
<div class="card">
{% if you.fullRights == 1 %}
<div class="card-header d-flex align-items-center">
{% if groups is not empty %}
<h2><a href="?page=addcheck" class="btn btn-info">{{T_.add}}</a></h2>
{%else%}
<h5>{{T_.add_grp_to_add_chk}}</h5>
{%endif%}
</div>
{% endif %}
<div class="card-block">
<table class="table table-striped table-hover">
<thead>
<tr>
<th>{{T_.name}}</th>
<th>Tipo Check</th>
<th>{{T_.edit}}</th>
</tr>
</thead>
<tbody>
{% for check in checks %}
{% if check.ID_G != beforegroup %}
<tr>
<th colspan="4" class="thgrp">{{check.nameGroup}}</th>
</tr>
{% endif %}
{% set beforegroup = check.ID_G %}
<tr>
<td>{{check.name}}</td>
<td>{{check.nameTCheck}} - {{check.url}}</td>
<td>
<a href="?page=viewhist&ID_C={{check.ID_C}}" class="btn btn-info">{{T_.view_hist}}</a>
{% if you.fullRights == 1 %}
<a href="?page=editcheck&ID_C={{check.ID_C}}" class="btn btn-primary">{{T_.edit}}</a>
{% if check.ID_TC == 3 %}{#Visitas#}
<button type="button" class="btn btn-secondary" data-toggle="modal" data-target="#countercode_{{check.ID_C}}">Código del contador</button>
{% elseif check.ID_TC == 4 %}{#Database#}
<a href="#" data-toggle="modal" data-target="#dbcode_{{check.ID_C}}" class="btn btn-info">Codigo para check database</a>
{% endif %}
<div class="dropdown show"> <!-- Dropdown más opciones -->
<a class="btn btn-secondary dropdown-toggle" href="#" id="more_{{check.ID_C}}" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
{{T_.more_opts}}
</a>
<div class="dropdown-menu" aria-labelledby="more_{{check.ID_C}}">
<a class="dropdown-item" href="#" data-toggle="modal" data-target="#editGrp_{{check.ID_C}}">Cambiar de grupo</a>
<a class="dropdown-item" href="#" data-toggle="modal" data-target="#editName_{{check.ID_C}}">Editar nombre</a>
<a class="dropdown-item" href="#" data-toggle="modal" data-target="#delChk_{{check.ID_C}}">{{T_.delete}}</a>
</div>
</div>
{% endif %}
</td>
</tr>
<!-- Modal de "Cambiar de grupo" -->
<div id="editGrp_{{check.ID_C}}" class="modal fade" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content" role="document">
<div class="modal-header">
<h5 class="modal-title">Nuevo grupo para {{check.name}}</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<form action="?page=modcheckgrp&ID_C={{check.ID_C}}" method="POST">
<div class="modal-body">
<select name="group_{{check.ID_C}}" class="form-control">
{% for group in groups %}
<option value="{{group.ID_G}}" {%if group.ID_G == check.ID_G %} selected="selected" {%endif%}>
{{group.name}}
</option>
{%endfor%}
</select>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-primary">Cambiar grupo</button>
</div>
</form>
</div>
</div>
</div>
<!-- Fin modal -->
<!-- Modal de "Editar nombre" -->
<div id="editName_{{check.ID_C}}" class="modal fade" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content" role="document">
<div class="modal-header">
<h5 class="modal-title">Editando el nombre de {{check.name}}</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<form action="?page=modcheckname&ID_C={{check.ID_C}}" method="POST">
<div class="modal-body">
<input type="text" name="name_{{check.ID_C}}" value="{{check.name}}"/>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-primary">Cambiar nombre</button>
</div>
</form>
</div>
</div>
</div>
<!-- Fin modal -->
<!-- Modal de "Eliminar" -->
<div id="delChk_{{check.ID_C}}" class="modal fade" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content" role="document">
<div class="modal-header">
<h5 class="modal-title">{{T_.delete}} {{check.name}}</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<form action="?page=delcheck&ID_C={{check.ID_C}}" method="POST">
<div class="modal-body">
<p>¿Estas seguro de eliminar el check {{check.name}}? Es irreversible</p>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-danger">{{T_.delete}}</button>
</div>
</form>
</div>
</div>
</div>
<!-- Fin modal -->
{# Modales concretos #}
{% if check.ID_TC == 3 %} {#Contador de visitas #}
<!-- Modal para descargar el codigo de comprobación de DB -->
<div id="countercode_{{check.ID_C}}" class="modal fade" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content" role="document">
<div class="modal-header">
<h5 class="modal-title">Código HTML del contador de visitas</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<h3>Código a copiar para que el contador de visitas funcione:</h3>
<pre style="width:100%;">
&lt;script type=&quot;text/javascript&quot;&gt;
var SiteID={{check.ID_C}};
&lt;/script&gt;
&lt;script src=&quot;{{you.webRoot}}counter.js&quot;&gt;&lt;/script&gt;
</pre>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" data-dismiss="modal" class="btn btn-primary">Cerrar</button>
</div>
</div>
</div>
</div>
<!-- Fin modal -->
{% elseif check.ID_TC == 4 %}
<!-- Modal para descargar el codigo de comprobación de DB -->
<div id="dbcode_{{check.ID_C}}" class="modal fade" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content" role="document">
<div class="modal-header">
<h5 class="modal-title">{{T_.delete}} {{check.name}}</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<form action="downdbcode.php?ID_C={{check.ID_C}}" method="POST">
<div class="modal-body">
<h3>Datos de la conexión (Para generar el fichero)</h3>
<p>Tipo de base de datos:
<select id="dbcode_type" name="dbcode_type" onchange="showOptD(this);">
<option value="sqlite3">SQLite3</option>
<option value="mysqli">MySql</option>
<option value="pgsql">PostgreSQL</option>
</select>
</p>
<p><small>En sqlite, el host es la ubicación relativa al fichero</small></p>
<p>Host (Usualmente localhost): <input type="text" name="dbcode_host" placeholder="Host" /></p>
<p id="userBD">Usuario bd<input type="text" name="dbcode_user" placeholder="Usuario" /></p>
<p id="passBD">Contraseña bd<input type="password" name="dbcode_pass" placeholder="Contraseña" /></p>
<p id="baseBD">Base de datos<input type="text" name="dbcode_db" placeholder="Base de datos" /></p>
</div>
<!-- Script for showing options -->
<script>
function showOptD(valSel){
optVal = valSel.value;
if(optVal == 'sqlite3'){
document.getElementById("userBD").style.display = "none";
document.getElementById("passBD").style.display = "none";
document.getElementById("baseBD").style.display = "none";
}else if(optVal == 'mysqli'){
document.getElementById("userBD").style.display = "block";
document.getElementById("passBD").style.display = "block";
document.getElementById("baseBD").style.display = "none";
}else if(optVal == 'pgsql'){
document.getElementById("userBD").style.display = "block";
document.getElementById("passBD").style.display = "block";
document.getElementById("baseBD").style.display = "block";
}
}
showOptD(document.getElementById("dbcode_type"))
</script>
<div class="modal-footer">
<button type="submit" class="btn btn-primary">Enviar y descargar php</button>
</div>
</form>
</div>
</div>
</div>
<!-- Fin modal -->
{% endif %}
{% endfor %}
{% for group in emptygrp %}
<tr>
<th colspan="4" class="thgrp">{{group.name}}</th>
</tr>
<tr>
<td>Este grupo está vacío. Puedes eliminarlo desde grupos</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div>
</section>
{% include 'footer.twig' %}

View File

@@ -1,105 +0,0 @@
{% include 'panel/p_header.twig' %}
<!-- Grupos -->
<section>
<div class="col-lg-12">
<div class="card">
<div class="card-header d-flex align-items-center">
<h2 class="h5 display">Aquí se pueden crear, renombrar y borrar grupos para ordenar tus checkeos.</h2>
</div>
<div class="card">
<div class="card-block">
<table class="table table-striped table-hover">
<thead>
<tr>
<th>{{T_.name}}</th>
<th>{{T_.edit}}</th>
</tr>
</thead>
<tbody>
{% if you.fullRights == 1 %}{#New group only admins #}
<form action="?page=addgroup" method="POST">
<tr>
<td><input type="text" name="grpname" placeholder="Nombre del nuevo grupo"/></td>
<td>
<button type="submit" class="btn btn-info">{{T_.add}}</button>
</td>
</tr>
</form>
{% endif %}
{% for group in groups %}
<tr>
<td>{{group.name}}</td>
<td>
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#editName_{{group.ID_G}}">{{T_.edit}}</button>
<!-- Modal Editar -->
<div id="editName_{{group.ID_G}}" class="modal fade" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content" role="document">
<div class="modal-header">
<h5 class="modal-title">Nuevo nombre para {{group.name}}</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<form action="?page=changegroup&ID_G={{group.ID_G}}" method="POST">
<div class="modal-body">
<p><input type="text" name="GN_{{group.ID_G}}" value="{{group.name}}"/></p>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-primary">Cambiar</button>
</div>
</form>
</div>
</div>
</div>
<!-- Fin modal -->
<button type="button" class="btn btn-danger" data-toggle="modal" data-target="#delGrp_{{group.ID_G}}">{{T_.delete}}</button>
<!-- Modal borrar -->
<div id="delGrp_{{group.ID_G}}" class="modal fade" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content" role="document">
<div class="modal-header">
<h5 class="modal-title">Se va a borrar {{group.name}}</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<form action="?page=delgroup&ID_G={{group.ID_G}}" method="POST">
<div class="modal-body">
<p class="black">Borrar un grupo es irreversible</p>
{% if group.checks > 0 %}
<h3 class="black">Hay checks dentro de {{group.name}}. Si continúa, se borrarán también.</h3>
{% endif %}
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-danger">{{T_.delete}}</button>
</div>
</form>
</div>
</div>
</div>
<!-- Fin modal -->
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div>
</section>
<script>
function changeName(Id_G,name){
var retVal = prompt("Nuevo nombre para "+name+" ", name);
alert("You have entered : " + retVal);
}
</script>
{% include 'footer.twig' %}

View File

@@ -1,79 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<!-- Credits to https://bootstrapious.com/p/bootstrap-4-dashboard -->
<meta charset="utf-8">
<title>Panel de administración</title>
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="assets/css/bootstrap.min.css">
<link rel="stylesheet" href="assets/css/panel.css" id="theme-stylesheet">
<link rel="stylesheet" href="assets/css/patchpanel.css" id="theme-stylesheet">
<link rel="stylesheet" href="assets/fonts/roboto/stylesheet.css">
<!-- Fonts CSS-->
<link rel="stylesheet" href="assets/fonts/styles.css">
<script src="assets/js/Chart.min.js"></script> <!-- For charts -->
<script src="assets/js/jquery-3.2.1.min.js"></script> <!-- For bootstrap -->
<script src="assets/js/popper.min.js"></script> <!-- For bootstrap dropdown -->
<script src="assets/js/bootstrap-util-modal-dropdown.min.js"></script>
</head>
<body>
<!-- Side Navbar -->
<nav class="side-navbar">
<div class="side-navbar-wrapper">
<div class="sidenav-header d-flex align-items-center justify-content-center">
<div><p class="text-center"> Panel de control</p></div>
</div>
<div class="main-menu">
<ul id="side-main-menu" class="side-menu list-unstyled">
<li {%if mpage == 'index'%} class="active"{%endif%}>
<a href="panel.php?page=index"> <i class="icon-home-house-streamline"></i><span>{{T_.home}}</span></a>
</li>
<li {%if mpage == 'checks'%} class="active"{%endif%}>
<a href="panel.php?page=checks"><i class="icon-browser-streamline-window"></i><span>{{T_.checks}}</span></a>
</li>
<li {%if mpage == 'groups'%} class="active"{%endif%}>
<a href="panel.php?page=groups"><i class="icon-coffee-streamline"></i><span>{{T_.groups}}</span></a>
</li>
<li {%if mpage == 'news'%} class="active"{%endif%}>
<a href="panel.php?page=news"><i class="icon-notebook-streamline"></i><span>{{T_.news}}</span></a>
</li>
{% if you.fullRights == 1 %}
<li {%if mpage == 'settings'%} class="active"{%endif%}>
<a href="panel.php?page=settings"><i class="icon-settings-streamline-1"></i><span>{{T_.settings}}</span></a>
</li>
{% endif %}
<li {%if mpage == 'users'%} class="active"{%endif%}>
<a href="panel.php?page=users"><i class="icon-man-people-streamline-user"></i><span>{{T_.users}}</span></a>
</li>
</ul>
</div>
</div>
</nav>
<div class="page forms-page">
<!-- navbar-->
<header class="header">
<nav class="navbar">
<div class="container-fluid">
<div class="navbar-holder d-flex align-items-center justify-content-between">
<div class="navbar-header"><a href="index.php" class="navbar-brand">
<div class="brand-text hidden-sm-down"><span>CheckServer</span></div></a></div>
<ul class="nav-menu list-unstyled d-flex flex-md-row align-items-md-center">
<li class="nav-item"><a href="login.php?do=logout" class="nav-link logout">Salir<i class="icon-sign-out"></i></a></li>
</ul>
</div>
</div>
</nav>
</header>
<div class="breadcrumb-holder">
<div class="container-fluid">
<ul class="breadcrumb">
<li class="breadcrumb-item"><a href="index.html">Inicio</a></li>
<li class="breadcrumb-item active">Estado</li>
</ul>
</div>
</div>

View File

@@ -1,70 +0,0 @@
{% include 'panel/p_header.twig' %}
<!-- Controles numéricos -->
<section class="dashboard-counts section-padding">
<div class="container-fluid">
<div class="row">
<div class="col-xl-3 col-md-4 col-6">
<div class="wrapper count-title d-flex">
<div class="icon"><i class="icon-eye"></i></div>
<div class="name"><strong class="text-uppercase">Tests</strong><span>Controles activos</span>
<div class="count-number">{{data.checks}}</div>
</div>
</div>
</div>
<div class="col-xl-3 col-md-4 col-6">
<div class="wrapper count-title d-flex">
<div class="icon"><i class="icon-exclamation-triangle"></i></div>
<div class="name"><strong class="text-uppercase">Test erróneos</strong><span>Desde el {{data.errinidate}}</span>
<div class="count-number">{{data.err}}</div>
</div>
</div>
</div>
<!--<div class="col-xl-2 col-md-4 col-6">
<div class="wrapper count-title d-flex">
<div class="icon"><i class="icon-padnote"></i></div>
<div class="name"><strong class="text-uppercase">Incidencias</strong><span>Desde el</span>
<div class="count-number">{{data.err}}</div>
</div>
</div>
</div>-->
</div><!--Row-->
</div>
</section>
<!-- Lastest fails -->
<section class="updates section-padding">
<div class="container-fluid">
<div class="row">
<div class="col-lg-12">
<div class="wrapper recent-updated">
<div id="new-updates" class="card-header d-flex justify-content-between align-items-center">
<h2 class="h5 display"><a data-toggle="collapse" data-parent="#accordion" href="#upadtes-box" aria-expanded="true" aria-controls="upadtes-box">{{T_.lastest_fails}}</a></h2>
</div>
<div id="upadtes-box" role="tabpanel" class="collapse show">
<ul class="news list-unstyled">
<!-- Item-->
{% for fail in fails %}
<li class="d-flex justify-content-between">
<div class="left-col d-flex">
<div class="icon"><i class="icon-times"></i></div>
<div class="title"><a href="?page=viewhist&ID_C={{fail.ID_C}}">{{fail.name}} - <strong>{{fail.groupName}}</strong>
<p>{{fail.typeCheck}}</p>
</a></div>
</div>
<div class="right-col text-right">
<div class="update-date">{{fail.date}}<span class="month">{{fail.hour}}</span></div>
</div>
</li>
{% endfor %}
</ul>
</div>
</div>
</div>
</div>
</div>
</section>
{% include 'footer.twig' %}

View File

@@ -1,114 +0,0 @@
{% include 'panel/p_header.twig' %}
<!-- Noticias -->
<section>
<div class="col-lg-12">
<div class="card">
<div class="card-header d-flex align-items-center">
<h2 class="h5 display">Vista rápida de noticias.</h2>
</div>
<div class="card">
<div class="card-header d-flex align-items-center">
<button type="button" class="btn btn-info" data-toggle="modal" data-target="#new_{{news.ID_N}}">Nueva noticia</button>
<!-- Modal Editar -->
<div id="new_{{news.ID_N}}" class="modal fade" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content" role="document">
<div class="modal-header">
<h5 class="modal-title">Nueva noticia.</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<form action="?page=newnews" method="POST">
<div class="modal-body">
<p>Se acepta el uso de MarkDown y/o texto plano.</p>
<p><textarea style="width:100%;height:250px;" name="text_new"></textarea></p>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-primary">Nueva noticia</button>
</div>
</form>
</div>
</div>
</div>
<!-- Fin modal -->
</div>
<div class="card-block">
<table class="table table-striped table-hover">
<thead>
<tr>
<th>Fecha</th>
<th>Noticia</th>
<th>Opciones</th>
</tr>
</thead>
<tbody>
{% for news in allnews %}
<tr>
<td>{{news.date}}</td>
<td>{{news.text | raw}}</td>
<td>
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#edit_{{news.ID_N}}">Editar</button>
<!-- Modal Editar -->
<div id="edit_{{news.ID_N}}" class="modal fade" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content" role="document">
<div class="modal-header">
<h5 class="modal-title">Editando noticia...</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<form action="?page=editnews&ID_N={{news.ID_N}}" method="POST">
<div class="modal-body">
<p><textarea style="width:100%;height:250px;" name="text_{{news.ID_N}}">{{news.mdtext}}</textarea></p>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-primary">Cambiar</button>
</div>
</form>
</div>
</div>
</div>
<!-- Fin modal -->
<button type="button" class="btn btn-danger" data-toggle="modal" data-target="#delnews_{{news.ID_N}}">Borrar</button>
<!-- Modal borrar -->
<div id="delnews_{{news.ID_N}}" class="modal fade" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content" role="document">
<div class="modal-header">
<h5 class="modal-title">Se va a borrar la noticia</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<form action="?page=delnews&ID_N={{news.ID_N}}" method="POST">
<div class="modal-body">
<p class="black">Borrar una noticia es irreversible</p>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-danger">Borrar</button>
</div>
</form>
</div>
</div>
</div>
<!-- Fin modal -->
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div>
</section>
{% include 'footer.twig' %}

View File

@@ -1,21 +0,0 @@
{% include 'panel/p_header.twig' %}
<!-- Add/edit form -->
<section class="forms">
<div class="container-fluid">
<header>
<h1 class="h3 display">No tienes permisos</h1>
</header>
<div class="row">
<div class="col-lg-12">
<div class="card">
<div class="card-block">
<p class="black">No tienes permisos para entrar en esta página</p>
</div>
</div>
</div>
</div>
</div>
</section>
{% include 'footer.twig' %}

View File

@@ -1,41 +0,0 @@
{% include 'panel/p_header.twig' %}
<!-- Add/edit form -->
<section class="forms">
<div class="container-fluid">
<header>
<h1 class="h3 display">Opciones de CheckServer</h1>
</header>
<div class="row">
<div class="col-lg-12">
<div class="card">
<div class="card-block">
<form class="form-horizontal" method="POST" action="?page=savesettings">
<div class="form-group row">
<label class="col-sm-2">Nombre de la web</label>
<div class="col-sm-10">
<input name="name" type="text" placeholder="Nombre de la web" value="{{sys.name}}" class="form-control form-control-success"><small class="form-text">Nombre para sacar en titulos.</small>
</div>
</div>
<div class="form-group row">
<label class="col-sm-2">Cantidad de tiempo a guardar historial de resultados en días.</label>
<div class="col-sm-10">
<input name="maxTimeSave" type="numeric" placeholder="Nombre del check" value="{{sys.maxTimeSave}}" class="form-control form-control-success"><small class="form-text">Por defecto, dos semanas</small>
</div>
</div>
<div class="form-group row">
<div class="col-sm-10 offset-sm-2">
<button type="submit" class="btn btn-primary">Guardar cambios</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</section>
{% include 'footer.twig' %}

View File

@@ -1,191 +0,0 @@
{% include 'panel/p_header.twig' %}
<!-- Checks -->
<section>
<div class="col-lg-12">
<div class="card">
<div class="card-header d-flex align-items-center">
<h2 class="h5 display">Usuarios</h2>
</div>
<div class="card">
<div class="card-header d-flex align-items-center">
<h2><button type="button" class="btn btn-primary" data-toggle="modal" data-target="#changepass">Editar tu contraseña</button></h2>
</div>
<!-- Modal editar password -->
<div id="changepass" class="modal fade" role="dialog">
<div class="modal-dialog">
<div class="modal-content" role="document">
<div class="modal-header">
<h5 class="modal-title">Cambiar tu contraseña</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<form action="?page=edituserpass" method="POST">
<div class="modal-body">
<p>Contraseña nueva: <input name="userpass1" type="password" value=""/><br/>
Repetir contraseña: <input name="userpass2" type="password" value=""/></p>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-primary">Cambiar contraseña</button>
</div>
</form>
</div>
</div>
</div>
<!-- Fin modal -->
{% if you.fullRights == 1 %} {#Only for admins #}
<div class="card-header d-flex align-items-center">
<h2><button type="button" class="btn btn-info" data-toggle="modal" data-target="#newUser">Añadir usuario</button></h2>
</div>
<!-- Modal nuevo usuario -->
<div id="newUser" class="modal fade" role="dialog">
<div class="modal-dialog">
<div class="modal-content" role="document">
<div class="modal-header">
<h5 class="modal-title">Nuevo usuario</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<form action="?page=adduser" method="POST">
<div class="modal-body">
<p>
Nombre: <input name="nuser_name" type="text"/><br/>
Contraseña (Luego se puede cambiar): <input name="nuser_pass" type="password"/><br/>
Permisos:
<select name="nuser_type">
<option value="1">Permisos completos</option>
<option value="0">Solo visualización y noticias</option>
</select>
</p>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-primary">Crear usuario</button>
</div>
</form>
</div>
</div>
</div>
<!-- Fin modal -->
{%endif%}
<div class="card-block">
<table class="table table-striped table-hover">
<thead>
<tr>
<th>Nombre</th>
<th>Tipo de acceso</th>
<th>Editar</th>
</tr>
</thead>
<tbody>
{% for user in users %}
<tr>
<td>{{user.nick}}</td>
<td>
{% if user.fullrights == 0 %}
Acceso limitado
{% else %}
Derechos de administración
{% endif %}
</td>
<td>
{% if you.ID_U == user.ID_U %} {#Only you can edit your name#}
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#editName_{{user.ID_U}}">Editar nombre</button>
{% endif %}
{% if you.ID_U != user.ID_U and you.fullRights == 1 %}
<button type="button" class="btn btn-info" data-toggle="modal" data-target="#editPerm_{{user.ID_U}}">Cambiar permisos</button>
<button type="button" class="btn btn-danger" data-toggle="modal" data-target="#deleteUser_{{user.ID_U}}">Borrar usuario</button>
{% endif %}
</td>
</tr>
<!-- Modal editar nombre -->
<div id="editName_{{user.ID_U}}" class="modal fade" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content" role="document">
<div class="modal-header">
<h5 class="modal-title">Cambiar nombre de usuario para {{user.nick}}</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<form action="?page=editusername&ID_U={{user.ID_U}}" method="POST">
<div class="modal-body">
<p>Nick: <input name="name_{{user.ID_U}}" type="text" value="{{user.nick}}"/></p>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-primary">Cambiar nombre</button>
</div>
</form>
</div>
</div>
</div>
<!-- Fin modal -->
<!-- Modal cambiar permisos -->
<div id="editPerm_{{user.ID_U}}" class="modal fade" role="dialog">
<div class="modal-dialog">
<div class="modal-content" role="document">
<div class="modal-header">
<h5 class="modal-title">Cambio de permisos de {{user.nick}}</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<form action="?page=edituserperm&ID_U={{user.ID_U}}" method="POST">
<div class="modal-body">
<p>
Permisos:
<select name="nperm_{{user.ID_U}}">
<option value="1">Permisos completos</option>
<option value="0">Solo visualización y noticias</option>
</select>
</p>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-primary">Cambiar permisos</button>
</div>
</form>
</div>
</div>
</div>
<!-- Fin modal -->
<!-- Modal borrar -->
<div id="deleteUser_{{user.ID_U}}" class="modal fade" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content" role="document">
<div class="modal-header">
<h5 class="modal-title">Borrar el usuario {{user.nick}}</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<form action="?page=deluser&ID_U={{user.ID_U}}" method="POST">
<div class="modal-body">
<p>Borrar un usuario no es reversible, no pulses el botón si no estás seguro.</p>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-danger">Borrar usuario</button>
</div>
</form>
</div>
</div>
</div>
<!-- Fin modal -->
{% endfor %}
</tbody>
</table>
</div>
</div>
</div>
</section>
{% include 'footer.twig' %}

View File

@@ -1,84 +0,0 @@
{% include 'panel/p_header.twig' %}
<script src="assets/js/Chart.min.js"></script>
<!-- Checks -->
<section>
<div class="col-lg-12">
<div class="card">
<div class="card-header d-flex align-items-center">
<h2 class="h5 display">Historial de los últimos {{pagedata.cant}} checks de {{pagedata.name}} - {{pagedata.group}}</h2>
</div>
<div class="card">
<div class="card-block">
<div style="width:75%;">
<canvas id="canvas"></canvas>
</div>
<!-- Lastest fails -->
<h2>{{T_.lastest_fails}}</h2>
<table class="table table-striped table-hover">
<thead>
<tr>
<th>Fecha</th>
</tr>
</thead>
<tbody>
{% for err in pagedata.fails %}
<tr>
<td>{{err}}</td>
</td>
</tr>
{% endfor %}
</tbody>
</table>
<!-- Script Chartjs -->
<script>
var barChartData = {
//labels: ["Correctos", "Errores"],
datasets: [{
label: "Correctos",
backgroundColor: "#2B86FF",
borderColor: "#2B86FF",
data: [ {{ pagedata.cgood }} ]
},{
label: "Errores",
backgroundColor: "#ff2a2a",
borderColor: "#ff2a2a",
data: [ {{ pagedata.cbad }} ]
}]
};
var config = {
type: 'bar',
data: barChartData,
options: {
responsive: true,
legend: {
position: 'top',
},
title: {
display: true,
text: 'Checks correctos y erroneos'
},
scales: {
yAxes: [{
ticks: {
beginAtZero: true
}
}]
}
}
};
window.onload = function() {
var ctx = document.getElementById("canvas").getContext("2d");
window.myBar = new Chart(ctx, config);
};
</script>
</div>
</div>
</div>
</div>
</section>
{% include 'footer.twig' %}