1
0
mirror of https://gitlab.com/JKANetwork/CheckServer.git synced 2026-02-23 13:33:47 +01:00

16 Commits

Author SHA1 Message Date
c0d3912413 Latest 0.9.4 commit 2019-03-14 09:19:15 +00:00
635a223538 Test JSON API check 2018-01-16 09:36:53 +01:00
84cb21dcf3 Mini visual fix 2018-01-16 09:02:44 +01:00
f9e219ebb1 update.php to master 2018-01-15 12:50:29 +01:00
a478f8a587 Fixes 2018-01-15 12:47:23 +01:00
97ac06b224 Version 0.9.3 2018-01-14 21:14:10 +01:00
9e4982c838 Fixing cronchk and adding JSON API check (WIP) 2018-01-14 13:44:20 +01:00
1efecc2633 Bugfix for 0.9.2 2018-01-11 10:03:04 +01:00
a91347ca46 updater.php deleted without known 2018-01-09 23:41:22 +01:00
3547695245 README.md to V0.9.2 2018-01-09 23:35:35 +01:00
0aeaada922 Fix for new tests at index 2018-01-09 23:34:50 +01:00
5e33adbbaf Change connect to load and fix code 2018-01-09 23:27:59 +01:00
42583d198e Revert README, 0.9.2 not ready 2018-01-09 22:50:31 +01:00
cb20328a6a Version 0.9.2 2018-01-09 22:36:45 +01:00
f1b58a03f3 More info for checks activated 2018-01-09 13:26:26 +01:00
8b86e38361 Cron fixes 2018-01-09 09:35:44 +01:00
19 changed files with 505 additions and 212 deletions

View File

@@ -1,3 +1,5 @@
## Will not update more, we are writing a totally different CheckServer
# CheckServer, a light and great Check service for servers and pages # CheckServer, a light and great Check service for servers and pages
CheckServer is a PHP app that monitor (using crons) some parameters in servers, like http responses, pings to ports (http,ssh,...), databases, and views simple stadistics. CheckServer is a PHP app that monitor (using crons) some parameters in servers, like http responses, pings to ports (http,ssh,...), databases, and views simple stadistics.
@@ -39,13 +41,35 @@ For finishing it, you have to add a cron in your system for running checks. The
Decompress folder over your installation folder, and run "updater.php", Decompress folder over your installation folder, and run "updater.php",
it will update and say if something goes wrong. Its a good idea to make it will update and say if something goes wrong. Its a good idea to make
a backup of your sqlite.db3 database. a backup of your sqlite.db3 database before updating or data may lost.
## Changelog ## Changelog
### (WIP) Version 0.9.2 ### Version 0.9.4 - Lastest Legacy Version
-TODO: More info in admin page -TODO: Fix JSON GET/POST Check (Only add part works)
-Code fixes
### Version 0.9.3 (Beta)
-New JSON GET/POST Check
-Bugfix in cronchk!
-A bit cleaner code
### Version 0.9.2 (Beta)
-A bit more info in admin page (Checks->Errors/History info)
-Fix duplicate entries for failed checks (Less false failed tests)
-More optimizations when lot of pages/tests
-Fix dates and some texts in index
-Updater fixed, 0.9.1 not working right
### Version 0.9.1 (Beta) ### Version 0.9.1 (Beta)

View File

@@ -2,7 +2,7 @@
<div class="container-fluid"> <div class="container-fluid">
<div class="row"> <div class="row">
<div class="col-sm-6"> <div class="col-sm-6">
<p>JKA Network &copy; 2017-actualidad. Versión 0.1 Alpha</p> <p>JKA Network &copy; 2018. Versión {{version}}</p>
</div> </div>
<div class="col-sm-6 text-right"> <div class="col-sm-6 text-right">
<p>Design by <a href="https://bootstrapious.com" class="external">Bootstrapious</a></p> <p>Design by <a href="https://bootstrapious.com" class="external">Bootstrapious</a></p>

View File

@@ -30,45 +30,31 @@
{# "Switch" type #} {# "Switch" type #}
{% if check.ID_TC == 1 or check.ID_TC == 2 or check.ID_TC == 4 %} {# Ping, HttpCode, SQL DB #} {% if check.ID_TC != 3 %} {# Every except Visits that is different #}
{% if check.uptime != -1 %}{#Only if records exists#}
<td> <td>
{#IF/SWITCH uptime to text#} <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 #}
{%if check.uptime <= 100 and check.uptime > 90 %}
<span class='green' data-tooltip='Type of check: {{check.nameCheck}}' data-tooltip-position='top'>{{T_.status_right}}</span>
{%elseif check.uptime <= 95 and check.uptime > 60 %}
<span class='blue' data-tooltip='Type of check: {{check.nameCheck}}' data-tooltip-position='top'>{{T_.status_lproblems}}</span>
{%elseif check.uptime <= 60 and check.uptime > 15 %}
<span class='orange' data-tooltip='Type of check: {{check.nameCheck}}' data-tooltip-position='top'>{{T_.status_problems}}</span>
{%elseif check.uptime <= 15 and check.uptime >= 0 %}
<span class='red' data-tooltip='Type of check: {{check.nameCheck}}' data-tooltip-position='top'>{{T_.status_outofserv}}</span>
{%elseif check.uptime == 255 %}
<span class='blue' data-tooltip='Type of check: {{check.nameCheck}}' data-tooltip-position='top'>{{T_.status_maintenance}}</span>
{%else%}
<span class='grey' data-tooltip='Type of check: {{check.nameCheck}}' data-tooltip-position='top'>{{T_.status_empty}}</span>
{%endif%}
{#END IF/SWITCH#}
({{ check.uptime}}%) ({{ check.uptime}}%)
</td> </td>
{% if check.uptime != -1 %}{#Only if records exists#} <td>
<td> {{check.dateLastChk}} -
{{check.dateLastChk}} - {% if check.failedLastChk == 0 %}
{% if check.failedLastChk == 0 %} <span style="color:green">{{T_.status_right}}</span>
<span style="color:green">{{T_.status_right}}</span> {% else %}
{% else %} <span style="color:red">{{T_.failed}}</span>
<span style="color:red">{{T_.failed}}</span> {% endif %}
{% endif %} </td>
</td> {%else%} {#If not records yet#}
{%else%} <td colspan="2">Dame tiempo para recopilar estadísticas</td>
<td>Dame tiempo para recopilar estadísticas</td> {%endif%}
{%endif%} <td>
<td> {%if check.dateLastErr is not null%}
{%if check.dateLastErr is not null%} {{check.dateLastErr}}
{{check.dateLastErr}} {%else%}
{%else%} {{T_.no_errs}}
{{T_.no_errs}} {%endif%}
{%endif%} </td>
</td>
{% endif %} {% endif %}
{% if check.ID_TC == 3 %} {% if check.ID_TC == 3 %}
<td colspan="3"> <td colspan="3">

View File

@@ -29,4 +29,5 @@
</div> </div>
</div> </div>
</div> </div>
</section> </section>
{% include 'footer.twig' %}

View File

@@ -21,14 +21,14 @@
action="?page=savenewcheck" action="?page=savenewcheck"
{%endif%}> {%endif%}>
<div class="form-group row"> <div class="form-group row">
<label class="col-sm-2">Nombre</label> <label class="col-sm-2">{{T_.name}}</label>
<div class="col-sm-10"> <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> <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> </div>
<div class="form-group row"> <div class="form-group row">
<label class="col-sm-2 form-control-label">Grupo</label> <label class="col-sm-2 form-control-label">{{T_.group}}</label>
<div class="col-sm-10 select"> <div class="col-sm-10 select">
<select name="group" id="group" class="form-control"> <select name="group" id="group" class="form-control">
{% for group in groups %} {% for group in groups %}
@@ -54,15 +54,19 @@
</div> </div>
</div> </div>
{# Aquí empiezan los campos "opcionales" dependiendo del tipo de check #} {# Aquí empiezan los campos "opcionales" dependiendo del tipo de check (Estos vienen de la tabla, al campo) #}
{# Sacar variables #} {# Sacar variables #}
{% if check.ID_TC == 1%} {% if check.ID_TC == 1%}
{% set t1 = check.URL|split(':') %} {% set t1 = check.url|split(':') %}
{% elseif check.ID_TC == 2%} {% elseif check.ID_TC == 2%}
{% set t2_url = check.URL %} {% set t2_url = check.url %}
{% set t2_code = check.TCParam %} {% set t2_code = check.urlParam %}
{% elseif check.ID_TC == 4%} {% elseif check.ID_TC == 4%}
{% set t4_url = check.URL %} {% 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 %} {% endif %}
{# Trozos de formulario #} {# Trozos de formulario #}
@@ -119,7 +123,36 @@
</div> </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="form-group row">
<div class="col-sm-10 offset-sm-2"> <div class="col-sm-10 offset-sm-2">
<button type="submit" class="btn btn-primary">Guardar cambios</button> <button type="submit" class="btn btn-primary">Guardar cambios</button>
@@ -135,28 +168,23 @@
<script> <script>
function showOptData(valSel){ 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; optVal = valSel.value;
if(optVal == '1'){ if(optVal == '1'){
document.getElementById("t1").style.display = "block"; document.getElementById("t1").style.display = "block";
document.getElementById("t2").style.display = "none";
document.getElementById("t3").style.display = "none";
document.getElementById("t4").style.display = "none";
}else if(optVal == '2'){ }else if(optVal == '2'){
document.getElementById("t1").style.display = "none";
document.getElementById("t2").style.display = "block"; document.getElementById("t2").style.display = "block";
document.getElementById("t3").style.display = "none";
document.getElementById("t4").style.display = "none";
}else if(optVal == '3'){ }else if(optVal == '3'){
document.getElementById("t1").style.display = "none";
document.getElementById("t2").style.display = "none";
document.getElementById("t3").style.display = "block"; document.getElementById("t3").style.display = "block";
document.getElementById("t4").style.display = "none"; }else if(optVal == '4'){
}else {
document.getElementById("t1").style.display = "none";
document.getElementById("t2").style.display = "none";
document.getElementById("t3").style.display = "none";
document.getElementById("t4").style.display = "block"; document.getElementById("t4").style.display = "block";
}else {
document.getElementById("t5").style.display = "block";
} }
} }
showOptData(document.getElementById("tcheck")) showOptData(document.getElementById("tcheck"))

View File

@@ -36,7 +36,7 @@
{% set beforegroup = check.ID_G %} {% set beforegroup = check.ID_G %}
<tr> <tr>
<td>{{check.name}}</td> <td>{{check.name}}</td>
<td>{{check.nameTCheck}} - {{check.URL}}</td> <td>{{check.nameTCheck}} - {{check.url}}</td>
<td> <td>
<a href="?page=viewhist&ID_C={{check.ID_C}}" class="btn btn-info">{{T_.view_hist}}</a> <a href="?page=viewhist&ID_C={{check.ID_C}}" class="btn btn-info">{{T_.view_hist}}</a>
{% if you.fullRights == 1 %} {% if you.fullRights == 1 %}

View File

@@ -39,7 +39,7 @@
<div class="wrapper recent-updated"> <div class="wrapper recent-updated">
<div id="new-updates" class="card-header d-flex justify-content-between align-items-center"> <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">Ultimos fallos</a></h2> <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>
<div id="upadtes-box" role="tabpanel" class="collapse show"> <div id="upadtes-box" role="tabpanel" class="collapse show">
<ul class="news list-unstyled"> <ul class="news list-unstyled">
@@ -48,9 +48,9 @@
<li class="d-flex justify-content-between"> <li class="d-flex justify-content-between">
<div class="left-col d-flex"> <div class="left-col d-flex">
<div class="icon"><i class="icon-times"></i></div> <div class="icon"><i class="icon-times"></i></div>
<div class="title">{{fail.name}} - <strong>{{fail.groupName}}</strong> <div class="title"><a href="?page=viewhist&ID_C={{fail.ID_C}}">{{fail.name}} - <strong>{{fail.groupName}}</strong>
<p>{{fail.typeCheck}}</p> <p>{{fail.typeCheck}}</p>
</div> </a></div>
</div> </div>
<div class="right-col text-right"> <div class="right-col text-right">
<div class="update-date">{{fail.date}}<span class="month">{{fail.hour}}</span></div> <div class="update-date">{{fail.date}}<span class="month">{{fail.hour}}</span></div>

View File

@@ -0,0 +1,84 @@
{% 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' %}

View File

@@ -1,10 +1,13 @@
<?php <?php
//English (Use as a reference) - Maybe grammar can be fixed //English (Use as a reference) - Maybe grammar can be fixed
define('T_ENGVERSION',1); if (!defined('T_ENGVERSION')){
define('T_ENGVERSION',1);
}
//(indexpage.twig) In index, title //(indexpage.twig) In index, title
$T_['statdif1'] = 'Status of different checks'; $T_['statdif1'] = 'Status of different checks';
$T_['name'] = 'Name'; $T_['name'] = 'Name';
$T_['group'] = 'Group';
$T_['status'] = 'Status'; $T_['status'] = 'Status';
$T_['status_uptime'] = 'Status (Uptime)'; $T_['status_uptime'] = 'Status (Uptime)';
$T_['failed'] = 'Failed'; $T_['failed'] = 'Failed';
@@ -31,11 +34,13 @@ $T_['groups'] = 'Groups';
$T_['news'] = 'News'; $T_['news'] = 'News';
$T_['settings'] = 'Settings'; $T_['settings'] = 'Settings';
$T_['users'] = 'Users'; $T_['users'] = 'Users';
//[NEXT 4]Check texts //[NEXT 5]Check texts
$T_['PING_IP'] = 'Ping to IP:Port'; $T_['PING_IP'] = 'Ping to IP:Port';
$T_['HTTP_CODE'] = 'Http code'; $T_['HTTP_CODE'] = 'Http code';
$T_['VISIT_COUNT'] = 'Visit counter'; $T_['VISIT_COUNT'] = 'Visit counter';
$T_['DATABASE'] = 'Database check'; $T_['DATABASE'] = 'Database check';
$T_['JSON_API'] = 'JSON API';
$T_['add_grp_to_add_chk'] = 'Add a group for start adding checks'; $T_['add_grp_to_add_chk'] = 'Add a group for start adding checks';
$T_['view_hist'] = 'View history'; $T_['view_hist'] = 'View history';
$T_['lastest_fails'] = 'Lastest fails';
?> ?>

View File

@@ -1,10 +1,13 @@
<?php <?php
//Español (Oficial) //Español (Oficial)
define('T_VERSION',1); if (!defined('T_VERSION')){
define('T_VERSION',1);
}
//(indexpage.twig) In index, title //(indexpage.twig) In index, title
$T_['statdif1'] = 'Estado de los diferentes servicios'; $T_['statdif1'] = 'Estado de los diferentes servicios';
$T_['name'] = 'Nombre'; $T_['name'] = 'Nombre';
$T_['group'] = 'Grupo';
$T_['status'] = 'Estado'; $T_['status'] = 'Estado';
$T_['status_uptime'] = 'Estado (Uptime)'; $T_['status_uptime'] = 'Estado (Uptime)';
$T_['failed'] = 'Erróneo'; $T_['failed'] = 'Erróneo';
@@ -31,11 +34,13 @@ $T_['groups'] = 'Grupos';
$T_['news'] = 'Noticias'; $T_['news'] = 'Noticias';
$T_['settings'] = 'Opciones'; $T_['settings'] = 'Opciones';
$T_['users'] = 'Usuarios'; $T_['users'] = 'Usuarios';
//[NEXT 4]Check texts //[NEXT 5]Check texts
$T_['PING_IP'] = 'Ping a IP:Puerto'; $T_['PING_IP'] = 'Ping a IP:Puerto';
$T_['HTTP_CODE'] = 'Código HTTP'; $T_['HTTP_CODE'] = 'Código HTTP';
$T_['VISIT_COUNT'] = 'Contador de visitas'; $T_['VISIT_COUNT'] = 'Contador de visitas';
$T_['DATABASE'] = 'Conexión a base de datos'; $T_['DATABASE'] = 'Conexión a base de datos';
$T_['JSON_API'] = 'JSON API';
$T_['add_grp_to_add_chk'] = 'Añade un grupo para empezar a añadir checks'; $T_['add_grp_to_add_chk'] = 'Añade un grupo para empezar a añadir checks';
$T_['view_hist'] = 'Ver histórico'; $T_['view_hist'] = 'Ver histórico';
$T_['lastest_fails'] = 'Ultimos errores';
?> ?>

View File

@@ -1,37 +0,0 @@
<?php
define('VERSION','0.9.1');
session_start(); //Session in all page
require_once "lib/dbwrapper.php";
$db_file = __DIR__."/sqlite.db3";
if (!is_file($db_file)){ //Go to install if not.
header("Location: install.php");
die();
}
$db_conn = dbw_connect("sqlite",$db_file); //Database
/** In connect.php check if user SessionID exists, if not, delete Cookie */
if (isset($_SESSION['UserID'])){
$data = dbw_query_fetch_array($db_conn, "SELECT * FROM USERS WHERE ID_U='$_SESSION[UserID]'");
if ($data['ID_U'] != $_SESSION['UserID']){
session_destroy();
header("Location: index.php");
}
$you['ID_U'] = $data['ID_U'];
$you['nick'] = $data['nick'];
$you['fullRights'] = $data['fullRights'];
$you['webRoot'] = webRoot();
}
$lang=getSystemOpt($db_conn,'lang');
//Translations
require_once __DIR__."/assets/translations/en.php"; //Ever first English, and then your lang (Database)
require_once __DIR__."/assets/translations/$lang.php";
$ver=getSystemOpt($db_conn,'version');
if (getSystemOpt($db_conn,'version') != VERSION){
die("<p>Please run updater.php to update before using page");
}
?>

View File

@@ -1,33 +1,29 @@
<?php <?php
require_once "functions.php"; require_once "load.php";
function PING_IP($db_conn,$ID_C,$URL,$timestamp){ function PING_IP($ID_C,$URL){
if (strpos($URL, ":")){ //Si usa un puerto, dividir if (strpos($URL, ":")){ //Si usa un puerto, dividir
$host = explode(":", $URL)[0]; $host = explode(":", $URL)[0];
$port = explode(":", $URL)[1]; $port = explode(":", $URL)[1];
}else{$host=$URL;} }else{$host=$URL;}
$result = isset($port) ? ping($host,$port) : ping($host); //Ping IP with or without port $result = isset($port) ? ping($host,$port) : ping($host); //Ping IP with or without port
dbw_query($db_conn, "INSERT INTO `CHKHIST` (`ID_C`,`code`,`timestamp`) VALUES ('$ID_C','$result','$timestamp')");
return $result; //Returns result return $result; //Returns result
} }
function HTTP_CODE($db_conn,$ID_C,$URL,$Param,$timestamp){ function HTTP_CODE($ID_C,$URL,$Param){
$httpCode = httpCode($URL); //Code $httpCode = httpCode($URL); //Code
$code = (int)$Param != 0 ? $Param : 200; //Establish the code test want to see $code = (int)$Param != 0 ? $Param : 200; //Establish the code test want to see
if ($httpCode == $code){ //Si es igual if ($httpCode == $code){ //Si es igual
dbw_query($db_conn, "INSERT INTO `CHKHIST` (`ID_C`,`code`,`timestamp`) VALUES ('$ID_C','0','$timestamp')");
$ret = 0; //All right $ret = 0; //All right
}else{ //Si no es igual (Incluye false) }else{ //Si no es igual (Incluye false)
$httpCode = (int)$httpCode; //Force int $ret = (int)$httpCode; //Code not 0 (And it's received code)
dbw_query($db_conn, "INSERT INTO `CHKHIST` (`ID_C`,`code`,`codeText`,`timestamp`) VALUES ('$ID_C','1','$httpCode','$timestamp')");
$ret = 1;
} }
return $ret; return $ret;
} }
function DATABASE_CONN($db_conn,$ID_C,$URL,$timestamp){ function DATABASE_CONN($ID_C,$URL){
$ch = curl_init(); $ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $URL); curl_setopt($ch, CURLOPT_URL, $URL);
curl_setopt($ch, CURLOPT_HEADER, FALSE); curl_setopt($ch, CURLOPT_HEADER, FALSE);
@@ -37,19 +33,44 @@ function DATABASE_CONN($db_conn,$ID_C,$URL,$timestamp){
curl_close($ch); curl_close($ch);
$result = htmlentities($body); $result = htmlentities($body);
if($result == 'OK'){ if($result == 'OK'){
dbw_query($db_conn, "INSERT INTO `CHKHIST` (`ID_C`,`code`,`timestamp`) VALUES ('$ID_C','0','$timestamp')"); return 0;
$ret = 0; }else{ //Fail if it returns other than "OK".
}else{ //Fail if it's not ok. return 1;
dbw_query($db_conn, "INSERT INTO `CHKHIST` (`ID_C`,`code`,`timestamp`) VALUES ('$ID_C','1','$timestamp')");
$ret = 1;
} }
return $ret;
} }
function JSON_API($ID_C,$URL,$params,$exceptedRes){
$type = explode('|',$params)[0];
$JSONParams = explode('|',$params)[1];
$ch = curl_init();
if ($type == 'GET'){
curl_setopt($ch, CURLOPT_URL, $URL . $JSONParams);
}else if ($type == 'POST'){
curl_setopt($ch, CURLOPT_URL, $URL);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, $JSONParams);
}
curl_setopt($ch, CURLOPT_HEADER, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_TIMEOUT, 4); //timeout in seconds
$body = curl_exec($ch); //All file
curl_close($ch);
$json_ret = json_decode($body,true);
$json_param = json_decode($exceptedRes,true);
if ($json_ret == $json_param){
return 0;
}else{
return 1;
}
}
$db_conn = getconn();
$sites = dbw_query($db_conn,"SELECT * FROM CHECKS"); $sites = dbw_query($db_conn,"SELECT * FROM CHECKS");
while ($site = dbw_fetch_array($db_conn,$sites)){ while ($site = dbw_fetch_array($db_conn,$sites)){
$try = 0; $try = 0;
$extitC = 0;
$ID_C= $site['ID_C']; $ID_C= $site['ID_C'];
do { do {
$try++; //This is for avoiding posible "second" problems in some checks that are working but doesn't answer to first time $try++; //This is for avoiding posible "second" problems in some checks that are working but doesn't answer to first time
@@ -57,23 +78,36 @@ while ($site = dbw_fetch_array($db_conn,$sites)){
switch ($site['ID_TC']) { switch ($site['ID_TC']) {
case '1': //Ping to IP:Port case '1': //Ping to IP:Port
$exitC = PING_IP($db_conn,$ID_C,$site['URL'],time()); $exitC = PING_IP($ID_C,$site['url']);
break; break;
case '2': //HttpCode case '2': //HttpCode
$exitC = HTTP_CODE($db_conn,$ID_C,$site['URL'],$site['TCParam'],time()); $exitC = HTTP_CODE($ID_C,$site['url'],$site['urlParam']);
break; break;
case '4': //MySQL|Database connect case '4': //MySQL|Database connect
$exitC = DATABASE_CONN($db_conn,$ID_C,$site['URL'],time()); $exitC = DATABASE_CONN($ID_C,$site['url']);
break;
case '5': //JSON GET | POST
$exitC = JSON_API($ID_C,$site['url'],$site['urlParam'],$site['exceptedRes']);
break; break;
} }
}while($try <= 2 && $exitC == 1); }while($try <= 2 && $exitC == 1);
$timestamp = time();
if ($exitC == 0){ //Check successful
dbw_query($db_conn, "INSERT INTO `CHKHIST` (`ID_C`,`code`,`timestamp`) VALUES ('$ID_C','0','$timestamp')");
}else if ($exitC == 1){ //Normal check failed
dbw_query($db_conn, "INSERT INTO `CHKHIST` (`ID_C`,`code`,`timestamp`) VALUES ('$ID_C','1','$timestamp')");
}else{ //Other code of check failed
dbw_query($db_conn, "INSERT INTO `CHKHIST` (`ID_C`,`code`,`errorText`,`timestamp`) VALUES ('$ID_C','1','$exitC','$timestamp')");
}
} }
//Delete old Checks (Based on time to save, put in secs) //Delete old Checks (Based on time to save, put in secs)
$mintime = time()-(getSystemOpt($db_conn,"maxTimeSave")*24*3600); $mintime = time()-(getSystemOpt("maxTimeSave")*24*3600);
dbw_query($db_conn,"DELETE FROM CHKHIST WHERE `timestamp` < $mintime"); dbw_query($db_conn,"DELETE FROM CHKHIST WHERE `timestamp` < $mintime");
//Delete Checks stored for pages that not exist //Delete Checks stored for pages that not exist

View File

@@ -1,9 +1,8 @@
<?php <?php
/* First, db connection */ //Functions
require_once "connect.php";
require_once 'lib/loadTwig.php';
function checkUptime($db_conn,$ID_C,$precision = 0){ function getUptime($ID_C,$precision = 0){
$db_conn = getconn();
if ($precision == 0){ if ($precision == 0){
$time = time()-30*7*3600; //Last week $time = time()-30*7*3600; //Last week
}else{ }else{
@@ -16,7 +15,6 @@ function checkUptime($db_conn,$ID_C,$precision = 0){
$count++; $count++;
$err += $fila['code']; $err += $fila['code'];
} }
echo $count."-";
if ($count == 0){ if ($count == 0){
return '-1'; //No registers return '-1'; //No registers
}else{ }else{
@@ -27,7 +25,34 @@ function checkUptime($db_conn,$ID_C,$precision = 0){
return 100; return 100;
} }
} }
}
function getStatus($ID_C){
$T_ = loadLang();
$db_conn = getconn();
$resql = dbw_query($db_conn,"SELECT code FROM CHKHIST WHERE ID_C='$ID_C' ORDER BY `timestamp` DESC LIMIT 5");
$err = 0;
while ($x = dbw_fetch_array($db_conn,$resql)){
if ($x['code'] != 0){
$err++;
}
}
switch ($err){
case 0:
case 1:
return array($T_['status_right'],'green');
break;
case 2:
return array($T_['status_lproblems'],'blue');
break;
case 3:
case 4:
return array($T_['status_problems'],'orange');
break;
default: // > 4
return array($T_['status_outofserv'],'red');
break;
}
} }
@@ -40,16 +65,16 @@ function ping($host,$port = '80') {
/** Returns web root (ie. http://jkanetwork.com) */ /** Returns web root (ie. http://jkanetwork.com) */
function webRoot(){ function webRoot(){
$root = $_SERVER['HTTPS'] ? "https://" : "http://"; //Variable = condicion ? Verdadero : Falso $root = isset($_SERVER['HTTPS']) ? "https://" : "http://"; //Variable = condicion ? Verdadero : Falso
return $root . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']); return $root . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']);
} }
/** Returns a system option */ /** Returns a system option */
function getSystemOpt($db_conn,$sysopt){ function getSystemOpt($sysopt){
return dbw_query_fetch_array($db_conn,"SELECT * FROM SYS WHERE option = '$sysopt'")['value']; return dbw_query_fetch_array(getconn(),"SELECT * FROM SYS WHERE option = '$sysopt'")['value'];
} }
/** Return HttpCode of page. Returns false if page is not found */ /** Return HttpCode of page. Returns false if page is not found (Used in cron) */
function httpCode($url, $wait = 5) function httpCode($url, $wait = 5)
{ {
$ch = curl_init(); $ch = curl_init();
@@ -97,32 +122,59 @@ function requireLogin(){
} }
} }
function nameFromIDC($db_conn,$ID_C){ function nameFromIDC($ID_C){
return dbw_query_fetch_array($db_conn,"SELECT name FROM CHECKS WHERE ID_C='$ID_C'")[0]; return dbw_query_fetch_array(getconn(),"SELECT name FROM CHECKS WHERE ID_C='$ID_C'")[0];
} }
function nameGroupFromIDG($db_conn,$ID_G){ function nameGroupFromIDG($ID_G){
return dbw_query_fetch_array($db_conn,"SELECT * FROM GROUPS WHERE ID_G='$ID_G'")['name']; return dbw_query_fetch_array(getconn(),"SELECT ID_G,name FROM GROUPS WHERE ID_G='$ID_G'")['name'];
} }
function IDGFromIDC($db_conn,$ID_C){ function IDGFromIDC($ID_C){
return dbw_query_fetch_array($db_conn,"SELECT ID_G FROM CHECKS WHERE ID_C='$ID_C'")['ID_G']; return dbw_query_fetch_array(getconn(),"SELECT ID_G FROM CHECKS WHERE ID_C='$ID_C'")['ID_G'];
} }
/* This funtion returns the array with type of checks */ /* This funtion returns the array with type of checks */
function arrayTypeChk(){ function arrayTypeChk(){
return array( return array(
'1' => 'PING_IP', 1 => 'PING_IP',
'2' => 'HTTP_CODE', 2 => 'HTTP_CODE',
'3' => 'VISIT_COUNT', 3 => 'VISIT_COUNT',
'4' => 'DATABASE'); 4 => 'DATABASE',
5 => 'JSON_API');
} }
/* This funtion returns the translated text of a type check */ /* This funtion returns the translated text of a type check */
function textTypeChk($T_,$typeChk){ function textTypeChk($typeChk){
$T_ = loadLang();
$arr = array( $arr = array(
'1' => $T_['PING_IP'], 1 => $T_['PING_IP'],
'2' => $T_['HTTP_CODE'], 2 => $T_['HTTP_CODE'],
'3' => $T_['VISIT_COUNT'], 3 => $T_['VISIT_COUNT'],
'4' => $T_['DATABASE']); 4 => $T_['DATABASE'],
5 => $T_['JSON_API']
);
return $arr[$typeChk]; return $arr[$typeChk];
} }
//This function is an alias to Twig render, with "standard args" added
function renderPage($page,$array = array()){
$T_ = loadLang(); //Load transactions
//Default params to send
$allarray = array(
'version' => VERSION,
'T_' => $T_,
);
foreach ($array as $key => $value) {
$allarray[$key] = $value;
}
require 'lib/loadTwig.php';
echo $twig->render($page, $allarray);
}
function loadLang(){
//Translations
require __DIR__."/assets/translations/en.php"; //Ever first English, and then your lang (Database)
require __DIR__."/assets/translations/".LANG.".php";
return $T_;
}

View File

@@ -1,12 +1,12 @@
<?php <?php
require_once "functions.php"; require_once "load.php";
$results = dbw_query($db_conn,"SELECT * FROM GROUPS"); //All groups $results = dbw_query($db_conn,"SELECT * FROM GROUPS"); //All groups
while ($group = dbw_fetch_array($db_conn,$results)){ //Know name of all groups while ($group = dbw_fetch_array($db_conn,$results)){ //Know name of all groups
$groups[$group['ID_G']] = $group['name']; $groups[$group['ID_G']] = $group['name'];
} }
unset($results); //Free mem
$results = dbw_query($db_conn,"SELECT * FROM CHECKS ORDER BY ID_G"); //All checks $results = dbw_query($db_conn,"SELECT * FROM CHECKS ORDER BY ID_G"); //All checks
@@ -14,41 +14,44 @@ while ($onechk = dbw_fetch_array($db_conn,$results)){
$idchk = $onechk['ID_C']; $idchk = $onechk['ID_C'];
$chks[$idchk] = $onechk; //First array data $chks[$idchk] = $onechk; //First array data
$chks[$idchk]['nameGroup'] = $groups[$onechk['ID_G']]; //Know group of this check $chks[$idchk]['nameGroup'] = $groups[$onechk['ID_G']]; //Know group of this check
$ID_TC = $chks[$idchk]['ID_TC']; //Type of Check
switch ($chks[$idchk]['ID_TC']){ switch ($ID_TC){
// Case 1 and 2 are normal status, case 3 (Visits) is numeric, not status // Case 3 (Visits) is numeric, not status
case 1: //Ping case 1: //Ping
case 2: //HttpCode case 2: //HttpCode
case 4: //MySQL case 4: //MySQL
case 5: //JSON GET|POST
if (dbw_query_fetch_array($db_conn, "SELECT COUNT(`ID_CHist`) FROM CHKHIST WHERE ID_C = '$idchk'")[0] != 0){ //To enter or not, check if has history (Instead of count > 0, only see if there is any timestamp, is faster)
if (dbw_query_fetch_array($db_conn, "SELECT `timestamp` FROM CHKHIST WHERE ID_C = '$idchk' LIMIT 1")[0] != 0){
$consul = dbw_query_fetch_array($db_conn, "SELECT `code`,`timestamp` FROM CHKHIST WHERE ID_C = '$idchk' ORDER BY `timestamp` DESC LIMIT 1");
$consul = dbw_query_fetch_array($db_conn, "SELECT `code`,`timestamp` FROM CHKHIST WHERE ID_C = '$idchk' AND (select min(`timestamp`) FROM CHKHIST)");
$chks[$idchk]['dateLastChk'] = date('d/m H:i',$consul['timestamp']); $chks[$idchk]['dateLastChk'] = date('d/m H:i',$consul['timestamp']);
$chks[$idchk]['failedLastChk'] = $consul['code']; $chks[$idchk]['failedLastChk'] = $consul['code'];
$lastErr = dbw_query_fetch_array($db_conn, "SELECT MIN(`timestamp`) FROM CHKHIST WHERE ID_C = '$idchk' AND code != 0")[0]; //Record last error, for showing if there are any. $lastErr = dbw_query_fetch_array($db_conn, "SELECT MAX(`timestamp`) FROM CHKHIST WHERE ID_C = '$idchk' AND code != 0")[0]; //Record last error, for showing if there are any.
if ($lastErr != false){ if ($lastErr != false){
$chks[$idchk]['dateLastErr'] = date('d/m H:i',$lastErr); $chks[$idchk]['dateLastErr'] = date('d/m H:i',$lastErr);
} }
$ID_TC = $chks[$idchk]['ID_TC']; $chks[$idchk]['nameCheck'] = arrayTypeChk()[$ID_TC]; //To send array name and not the word
$chks[$idchk]['nameCheck'] = textTypeChk($T_,$ID_TC);
if ($onechk['manStatus'] != ''){ if ($onechk['manStatus'] != ''){
$chks[$idchk]['uptime'] = 255;//255 = Maintenance I suppose, not implemented $chks[$idchk]['uptime'] = 255;//255 = Maintenance I suppose, not implemented
}else{ }else{
$chks[$idchk]['uptime'] = checkUptime($db_conn,$idchk); $chks[$idchk]['uptime'] = getUptime($idchk);
} }
list($chks[$idchk]['statusText'],$chks[$idchk]['statusColor']) = getStatus($idchk);
}else{ //If nothing collected yet
$chks[$idchk]['uptime'] = -1; // -1 is nothing in twig page
} }
break; break;
case 3: //Visits case 3: //Visits
$visitsSite = dbw_query($db_conn, "SELECT * FROM (SELECT * FROM VISITS WHERE ID_C = '$idchk' ORDER BY `date` DESC LIMIT 0,5) sub ORDER BY `Date` ASC"); $visitsSite = dbw_query($db_conn, "SELECT * FROM (SELECT * FROM VISITS WHERE ID_C = '$idchk' ORDER BY `date` DESC LIMIT 0,5) sub ORDER BY `date` ASC"); //Subquery for reorder lastest days in reverse
//Create array from last 5 days //Create array from last 5 days
while ($visitsDay = dbw_fetch_array($db_conn, $visitsSite)){ while ($visitsDay = dbw_fetch_array($db_conn, $visitsSite)){
$dateArray[] = $visitsDay['date']; $dateArray[] = $visitsDay['date'];
@@ -81,6 +84,5 @@ while ($incident = dbw_fetch_array($db_conn,$incidents)){
->text($incident['text']); ->text($incident['text']);
$incs[$ID_N]['ID_N'] = $incident['ID_N']; $incs[$ID_N]['ID_N'] = $incident['ID_N'];
} }
renderPage('indexpage.twig',array('checks' => $chks, 'news' => $incs)); //Render
echo $twig->render('indexpage.twig', array('T_' => $T_, 'you' => $you, 'checks' => $chks, 'news' => $incs)); //Render
?> ?>

View File

@@ -1,5 +1,6 @@
<?php <?php
define('VERSION','0.9.1'); define('VERSION','0.9.4');
//define('INSTALLER_MODE','1');
require_once 'lib/loadTwig.php'; require_once 'lib/loadTwig.php';
$db_file = __DIR__."/sqlite.db3"; $db_file = __DIR__."/sqlite.db3";
@@ -62,16 +63,17 @@ CREATE TABLE "CHECKS" (
`ID_C` INTEGER PRIMARY KEY AUTOINCREMENT, `ID_C` INTEGER PRIMARY KEY AUTOINCREMENT,
`ID_G` INTEGER, `ID_G` INTEGER,
`name` TEXT NOT NULL, `name` TEXT NOT NULL,
`URL` TEXT, `url` TEXT,
`manStatus` INTEGER, `manStatus` INTEGER,
`ID_TC` INTEGER, `ID_TC` INTEGER,
`TCParam` TEXT, `urlParam` TEXT,
`exceptedRes` TEXT,
FOREIGN KEY(`ID_G`) REFERENCES `GROUPS`(`ID_G`), FOREIGN KEY(`ID_G`) REFERENCES `GROUPS`(`ID_G`),
FOREIGN KEY(`ID_TC`) REFERENCES `TYPECHK`(`ID_TC`) FOREIGN KEY(`ID_TC`) REFERENCES `TYPECHK`(`ID_TC`)
); );
COMMIT;'; COMMIT;';
dbw_multi_query($db_conn,$sqlcreate); //Create scheme dbw_multi_query($db_conn,$sqlcreate); //Create scheme
$user = $_POST[username]; $user = $_POST['username'];
$pass = hash("sha256",$_POST['passw1']); $pass = hash("sha256",$_POST['passw1']);
dbw_query($db_conn,"INSERT INTO USERS (nick,passw,fullRights) VALUES('$user','$pass',1)"); //Create user dbw_query($db_conn,"INSERT INTO USERS (nick,passw,fullRights) VALUES('$user','$pass',1)"); //Create user
@@ -80,6 +82,7 @@ COMMIT;';
dbw_query($db_conn,"INSERT INTO SYS VALUES ('lang','$_POST[lang]')"); dbw_query($db_conn,"INSERT INTO SYS VALUES ('lang','$_POST[lang]')");
dbw_query($db_conn,"INSERT INTO SYS VALUES ('websiteTitle','Status')"); dbw_query($db_conn,"INSERT INTO SYS VALUES ('websiteTitle','Status')");
dbw_query($db_conn,"INSERT INTO SYS VALUES ('version','".VERSION."')"); dbw_query($db_conn,"INSERT INTO SYS VALUES ('version','".VERSION."')");
dbw_query($db_conn,"INSERT INTO SYS VALUES ('maintenance','0')");
echo $twig->render('install.twig', array('part' => 2)); echo $twig->render('install.twig', array('part' => 2));
} }

41
load.php Normal file
View File

@@ -0,0 +1,41 @@
<?php
require_once 'functions.php'; //Preloads functions
require_once 'lib/dbwrapper.php';
define('VERSION','0.9.4');
session_start(); //Session in all page
//Preload file
//This function loads all things needed, with optional db things if needed
function getconn(){
$db_file = __DIR__."/sqlite.db3";
if (!is_file($db_file)){ //Go to install if not.
header("Location: install.php");
die();
}
return dbw_connect("sqlite",$db_file); //Database
}
$db_conn = getconn();
/** Check if user SessionID exists, if not, delete Cookie */
if (isset($_SESSION['UserID'])){
$data = dbw_query_fetch_array($db_conn, "SELECT * FROM USERS WHERE ID_U='$_SESSION[UserID]'");
if ($data['ID_U'] != $_SESSION['UserID']){
session_destroy();
header("Location: index.php");
}
$you['ID_U'] = $data['ID_U'];
$you['nick'] = $data['nick'];
$you['fullRights'] = $data['fullRights'];
$you['webRoot'] = webRoot();
}
define('LANG', getSystemOpt('lang'));
if (getSystemOpt('version') != VERSION){
die("<p>Please run updater.php to update before using page");
}
if (getSystemOpt('maintenance') == '1'){
die("<p>CheckStatus is in maintenance mode, wait for admin to disable maintenance mode</p>");
}

View File

@@ -1,10 +1,8 @@
<?php <?php
require "functions.php"; require "load.php";
if (isset($_GET['do'])){ if (isset($_GET['do'])){
if ($_GET['do'] == 'logout'){ if ($_GET['do'] == 'logout'){
require_once "connect.php";
//dbw_query($db_conn, "UPDATE USERS SET SessionID = NULL WHERE SessionID='$_COOKIE[SessionID]'");
session_destroy(); session_destroy();
header('Location: index.php'); header('Location: index.php');
} }
@@ -15,7 +13,7 @@ if (isset($_SESSION['UserID'])){ //Ya está logueado
} }
if (!isset($_POST['nick'])){ if (!isset($_POST['nick'])){
echo $twig->render('login.twig'); renderPage('login.twig');
} }
if (isset($_POST['nick'])){ if (isset($_POST['nick'])){
$nick=$_POST['nick']; $nick=$_POST['nick'];
@@ -27,7 +25,7 @@ if (isset($_POST['nick'])){
$_SESSION['UserID'] = $resql['ID_U']; $_SESSION['UserID'] = $resql['ID_U'];
header('Location: panel.php'); header('Location: panel.php');
}else{ }else{
echo $twig->render('login.twig', array('status' => 'error')); renderPage('login.twig', array('status' => 'error'));
} }
} }

View File

@@ -1,5 +1,5 @@
<?php <?php
require_once 'functions.php'; require_once 'load.php';
requirelogin(); requirelogin();
//Calculo día 1 del mes en curso //Calculo día 1 del mes en curso
@@ -18,7 +18,7 @@ if (in_array($page,$arrPagesFullRigths) && $you['fullRights'] != 1){
switch($page){ switch($page){
case 'notperm': case 'notperm':
echo $twig->render('panel/p_notperm.twig', array('T_' => $T_, 'you' => $you)); renderPage('panel/p_notperm.twig', array('you' => $you));
break; break;
case 'checks': case 'checks':
//Groups (For "fast-change-group option in html") //Groups (For "fast-change-group option in html")
@@ -38,7 +38,7 @@ switch($page){
$ID_G = $chks[$idchk]['ID_G']; //For nameGroup $ID_G = $chks[$idchk]['ID_G']; //For nameGroup
$chks[$idchk]['nameGroup'] = dbw_query_fetch_array($db_conn,"SELECT * FROM GROUPS WHERE ID_G='$ID_G'")['name']; $chks[$idchk]['nameGroup'] = dbw_query_fetch_array($db_conn,"SELECT * FROM GROUPS WHERE ID_G='$ID_G'")['name'];
$ID_TC = $chks[$idchk]['ID_TC']; $ID_TC = $chks[$idchk]['ID_TC'];
$chks[$idchk]['nameTCheck'] = textTypeChk($T_,$ID_TC); $chks[$idchk]['nameTCheck'] = textTypeChk($ID_TC);
} }
@@ -47,7 +47,7 @@ switch($page){
$emptyG[] = array('name' =>$emptygrp['name']); $emptyG[] = array('name' =>$emptygrp['name']);
} }
echo $twig->render('panel/p_checks.twig', array('T_' => $T_, 'mpage' => 'checks','you' => $you, 'checks' => $chks,'groups' => $groups,'emptygrp' => $emptyG)); renderPage('panel/p_checks.twig',array('mpage' => 'checks','you' => $you, 'checks' => $chks,'groups' => $groups,'emptygrp' => $emptyG));
break; break;
//Forms to add or edit a check (Not saving, only forms) //Forms to add or edit a check (Not saving, only forms)
@@ -65,17 +65,18 @@ switch($page){
foreach(arrayTypeChk() as $key => $value){ foreach(arrayTypeChk() as $key => $value){
$tchecks[] = array( $tchecks[] = array(
'ID_TC' =>$key, 'ID_TC' =>$key,
'name' => textTypeChk($T_,$key) 'name' => textTypeChk($key)
); );
} }
//En este if hago las diferencias entre add y edit, para no repetir código. //En este if hago las diferencias entre add y edit, para no repetir código.
if ($page == 'addcheck'){ if ($page == 'addcheck'){
echo $twig->render('panel/p_addedit.twig', array('T_' => $T_, 'mpage' => 'checks', 'type' => 'new','groups' => $groups,'tchecks' => $tchecks)); renderPage('panel/p_addedit.twig', array('mpage' => 'checks', 'type' => 'new','groups' => $groups,'tchecks' => $tchecks));
}elseif ($page == 'editcheck'){ }elseif ($page == 'editcheck'){
$ID_C = (int)$_GET['ID_C']; //Check to edit $ID_C = (int)$_GET['ID_C']; //Check to edit
$checkdata = dbw_query_fetch_array($db_conn,"SELECT * FROM CHECKS WHERE ID_C='$ID_C'"); //Checkdata $checkdata = dbw_query_fetch_array($db_conn,"SELECT * FROM CHECKS WHERE ID_C='$ID_C'"); //Checkdata
echo $twig->render('panel/p_addedit.twig', array('T_' => $T_, 'mpage' => 'checks', 'you' => $you, 'type' => 'edit','groups' => $groups,'tchecks' => $tchecks,'check' => $checkdata));
renderPage('panel/p_addedit.twig', array('mpage' => 'checks', 'you' => $you, 'type' => 'edit','groups' => $groups,'tchecks' => $tchecks,'check' => $checkdata));
} }
break; break;
@@ -89,17 +90,28 @@ switch($page){
$ID_G = $_POST['group']; $ID_G = $_POST['group'];
$ID_TC = $_POST['tcheck']; $ID_TC = $_POST['tcheck'];
//Datos que dependen del tipo de check //Datos que dependen del tipo de check
if ($ID_TC == 1){ switch ($ID_TC){
$URL = $_POST['t1url'] . ':' . $_POST['t1port']; case 1:
dbw_query($db_conn,"UPDATE CHECKS SET URL='$URL' WHERE ID_C='$ID_C'"); $url = $_POST['t1url'] . ':' . $_POST['t1port'];
}elseif ($ID_TC == 2){ dbw_query($db_conn,"UPDATE CHECKS SET url='$url' WHERE ID_C='$ID_C'");
$URL = $_POST['t2url']; break;
$TCParam = isset($_POST['t2code']) ? $_POST['t2code'] : ''; case 2:
dbw_query($db_conn,"UPDATE CHECKS SET URL='$URL',TCParam = '$TCParam' WHERE ID_C='$ID_C'"); $url = $_POST['t2url'];
}elseif ($ID_TC == 4){ $urlParam = isset($_POST['t2code']) ? $_POST['t2code'] : '';
$URL = $_POST['t4url']; dbw_queryurl($db_conn,"UPDATE CHECKS SET url='$url',urlParam = '$urlParam' WHERE ID_C='$ID_C'");
dbw_query($db_conn,"UPDATE CHECKS SET URL='$URL' WHERE ID_C='$ID_C'"); break;
case 4:
$url = $_POST['t4url'];
dbw_query($db_conn,"UPDATE CHECKS SET url='$url' WHERE ID_C='$ID_C'");
break;
case 5:
$url = $_POST['t5url'];
$urlParam = dbw_escape_string($db_conn,$_POST['t5type'].'|'.$_POST['t5params']);
$exceptedRes = dbw_escape_string($db_conn,$_POST['t5exceptedRes']);
dbw_query($db_conn,"UPDATE CHECKS SET url='$url', urlParam='$urlParam',exceptedRes='$exceptedRes' WHERE ID_C='$ID_C'");
break;
}//Si es 3 no hay datos que guardar (de momento) }//Si es 3 no hay datos que guardar (de momento)
//Guardamos el resto de datos //Guardamos el resto de datos
dbw_query($db_conn,"UPDATE CHECKS SET name='$name', ID_G='$ID_G', ID_TC='$ID_TC' WHERE ID_C='$ID_C'"); dbw_query($db_conn,"UPDATE CHECKS SET name='$name', ID_G='$ID_G', ID_TC='$ID_TC' WHERE ID_C='$ID_C'");
@@ -144,8 +156,7 @@ switch($page){
'checks' => $countchk 'checks' => $countchk
); );
} }
renderPage('panel/p_groups.twig', array('you' => $you, 'mpage' => 'groups', 'groups' => $groups));
echo $twig->render('panel/p_groups.twig', array('T_' => $T_, 'you' => $you, 'mpage' => 'groups', 'groups' => $groups));
break; break;
case 'addgroup': case 'addgroup':
@@ -186,8 +197,7 @@ switch($page){
->text($result['text']); ->text($result['text']);
$news[$ID_N]['mdtext'] = $result['text']; //Raw text $news[$ID_N]['mdtext'] = $result['text']; //Raw text
} }
renderPage('panel/p_news.twig', array('you' => $you, 'mpage' => 'news', 'allnews' => $news));
echo $twig->render('panel/p_news.twig', array('T_' => $T_, 'you' => $you, 'mpage' => 'news', 'allnews' => $news));
break; break;
case 'newnews': case 'newnews':
@@ -218,8 +228,7 @@ switch($page){
while ($syso = dbw_fetch_array($db_conn,$results)){ while ($syso = dbw_fetch_array($db_conn,$results)){
$sys[$syso['option']] = $syso['value']; $sys[$syso['option']] = $syso['value'];
} }
renderPage('panel/p_settings.twig', array('you' => $you, 'mpage' => 'settings', 'sys' => $sys));
echo $twig->render('panel/p_settings.twig', array('T_' => $T_, 'you' => $you, 'mpage' => 'settings', 'sys' => $sys));
break; break;
case 'users': case 'users':
@@ -233,8 +242,7 @@ switch($page){
'fullrights' => $us['fullRights'] 'fullrights' => $us['fullRights']
); );
} }
renderPage('panel/p_users.twig', array('mpage' => 'users', 'you' => $you, 'users' => $user));
echo $twig->render('panel/p_users.twig', array('T_' => $T_, 'mpage' => 'users', 'you' => $you, 'users' => $user));
break; break;
case 'adduser': case 'adduser':
@@ -271,6 +279,32 @@ switch($page){
header('Location: panel.php?page=users'); header('Location: panel.php?page=users');
break; break;
//History of checks for a ID_C
case 'viewhist':
//All page data
$ID_C = (int)$_GET['ID_C'];
$page = dbw_query_fetch_array($db_conn,"SELECT name FROM CHECKS WHERE ID_C='$ID_C'");
$cant = 100;
$results = dbw_query($db_conn,"SELECT * FROM CHKHIST WHERE ID_C='$ID_C' ORDER BY `timestamp` DESC LIMIT $cant");
//TODO TIMESTAMPS FAILS
$cgood = 0;$cbad = 0; $fails = array();
while ($us = dbw_fetch_array($db_conn,$results)){
if ($us['code'] == 0){
$cgood++;
}else{
$cbad++;
$fails[] = date('d/m/Y H:i',$us['timestamp']); //Record timestamps
}
}
$group = nameGroupFromIDG(IDGFromIDC($ID_C));
$pagedata = array('cgood' => $cgood,'cbad' => $cbad,'name' => nameFromIDC($db_conn,$ID_C), 'group' => $group,'cant' => $cant,'fails' => $fails);
renderPage('panel/p_viewhist.twig', array('mpage' => 'viewhist', 'you' => $you,'pagedata' => $pagedata));
break;
// Página principal // Página principal
case 'status': case 'status':
default: default:
@@ -283,9 +317,10 @@ switch($page){
if ($failssql != false){ if ($failssql != false){
while ($fail = dbw_fetch_array($db_conn,$failssql)){ //Create array while ($fail = dbw_fetch_array($db_conn,$failssql)){ //Create array
$fails[] = array ( $fails[] = array (
'name' => nameFromIDC($db_conn,$fail['ID_C']), 'ID_C' => $fail['ID_C'],
'groupName' => nameGroupFromIDG($db_conn,IDGFromIDC($db_conn,$fail['ID_C'])), 'name' => nameFromIDC($fail['ID_C']),
'typeCheck' => textTypeChk($T_,$fail['ID_TC']), 'groupName' => nameGroupFromIDG(IDGFromIDC($fail['ID_C'])),
/* 'typeCheck' => textTypeChk($fail['ID_TC']), Doesnt work yet */
'errorText' => $fail['errorText'], 'errorText' => $fail['errorText'],
'date' => date('j/n/Y',$fail['timestamp']), 'date' => date('j/n/Y',$fail['timestamp']),
'hour' => date('H:i',$fail['timestamp']) 'hour' => date('H:i',$fail['timestamp'])
@@ -295,7 +330,7 @@ switch($page){
$fails = array(); //Empty $fails = array(); //Empty
} }
echo $twig->render('panel/p_index.twig', array('T_' => $T_, 'you' => $you, 'mpage' => 'index', 'data' => $data,'fails' => $fails)); //Render renderPage('panel/p_index.twig', array('you' => $you, 'mpage' => 'index', 'data' => $data,'fails' => $fails)); //Render
break; break;
} }

View File

@@ -1,7 +1,14 @@
<?php <?php
echo "<h2>Updater of CheckServer</h2>"; echo "<h2>Updater of CheckServer</h2>";
echo "<p>Connecting to database</p>"; echo "<p>Connecting to database</p>";
require_once 'connect.php'; require_once 'lib/dbwrapper.php';
$db_file = __DIR__."/sqlite.db3";
if (!is_file($db_file)){ //Go to install if not.
header("Location: install.php");
die();
}
$db_conn = dbw_connect("sqlite",$db_file); //Database
dbw_query($db_conn,"UPDATE SYS SET value='1' WHERE option='maintenance'");
$version = dbw_query_fetch_array($db_conn,"SELECT value FROM SYS WHERE option = 'version'")[0]; $version = dbw_query_fetch_array($db_conn,"SELECT value FROM SYS WHERE option = 'version'")[0];
echo "<p>Your version: ".$version; echo "<p>Your version: ".$version;
echo "<p>Updating to lastest</p>"; echo "<p>Updating to lastest</p>";
@@ -11,11 +18,36 @@ switch ($version){
dbw_query($db_conn,"DELETE FROM SYS WHERE option='maxChecksSave'"); dbw_query($db_conn,"DELETE FROM SYS WHERE option='maxChecksSave'");
dbw_query($db_conn,"INSERT INTO SYS VALUES('maxTimeSave',14)"); dbw_query($db_conn,"INSERT INTO SYS VALUES('maxTimeSave',14)");
//Can not delete USERS.SessionID because sqlite3 not supports it, but doesn't do any harm. //Can not delete USERS.SessionID because sqlite3 not supports it, but doesn't do any harm.
case '0.9.1': case '0.9.1':
echo "0.9.1-Lastest"; echo "<p>0.9.1->0.9.2</p>";
case '0.9.2':
echo "<p>0.9.2->0.9.3</p>";
dbw_query($db_conn,'ALTER TABLE CHECKS RENAME TO CHECKS_orig;');
dbw_query($db_conn,'
CREATE TABLE "CHECKS" (
`ID_C` INTEGER PRIMARY KEY AUTOINCREMENT,
`ID_G` INTEGER,
`ID_TC` INTEGER,
`name` TEXT NOT NULL,
`url` TEXT,
`manStatus` INTEGER,
`urlParam` TEXT,
`exceptedRes` TEXT,
FOREIGN KEY(`ID_G`) REFERENCES `GROUPS`(`ID_G`),
FOREIGN KEY(`ID_TC`) REFERENCES `TYPECHK`(`ID_TC`)
);
');
dbw_query($db_conn,"INSERT INTO CHECKS(ID_C, ID_G,ID_TC,name,url,manStatus,urlParam) SELECT ID_C,ID_G,ID_TC,name,URL,manStatus,TCParam FROM CHECKS_orig;");
dbw_query($db_conn,"DROP TABLE CHECKS_orig");
dbw_query($db_conn,"INSERT INTO SYS VALUES ('maintenance','1')"); //New system opt
case '0.9.3':
echo "<p>0.9.3->0.9.4</p>";
case '0.9.4':
dbw_query($db_conn,"UPDATE SYS SET value='0.9.4' WHERE option='version'");
dbw_query($db_conn,"UPDATE SYS SET value='0' WHERE option='maintenance'");
echo "<p>0.9.4-Lastest</p>";
echo "<p>Updated to lastest. Close this and go to index</p>"; echo "<p>Updated to lastest. Close this and go to index</p>";
//Remove files on a good update echo "<p>Remember to delete updater.php and install.php for security!</p>";
unlink('updater.php');
unlink('installer.php'); }
}