1
0
mirror of https://gitlab.com/JKANetwork/CheckServer.git synced 2026-02-17 02:31:35 +01:00

Optimize index and fix delete older checks from hist

This commit is contained in:
Kevin Puertas
2017-12-16 20:17:00 +01:00
parent 1be1751a3d
commit 344f837c30
24 changed files with 262 additions and 158 deletions

View File

@@ -5,19 +5,19 @@ without dependencies and installable only coping repository and ajusting some pa
Also can show stadistics for all sites
Demo can be viewed in https://status.jkanetwork.com/
Real using index 'demo' can be viewed in https://status.jkanetwork.com/
## Disclaimer
This is an beta, opensource, and human made program. **There may be bugs and problems**, and
although we can help or fix things, JKANetwork is **not** responsable for derivated problems.
This is an beta, opensource, and a human made program. **There may be bugs and problems**, and
although we can update and fix things, JKANetwork is **not** responsable for derivated problems.
You can see the master code and tell us any improvment or bug. Plase see indications for installing if you want
to install instead of downloading master and install, that it will not work right. Master is like beta, and tags its like releases.
to install without problems. Master is bleeding edge, use tags for versions and not having problems.
## Requirements
-Modern PHP (5.6+) with SQLite enabled
-Modern PHP (5.6+) with SQLite3 enabled
-Cron support
@@ -36,11 +36,15 @@ For finishing it, you have to add a cron in your system for running checks. The
*/5 * * * * root cd /srv/http/checkserver/ && /usr/bin/php -f cronchk.php >/dev/null 2>&1
```
## Update
## Changelog
### (NEXT) Version 0.9.1 (Beta)
### (WIP) Version 0.9.1
-TODO: See uptime percent
-See uptime percent
-Optimized index webpage, times went down to half when have a lot of pages
-TODO: Better index admin page (More data)

View File

@@ -32,16 +32,16 @@
{# "Switch" type #}
{% if check.ID_TC == 1 or check.ID_TC == 2 or check.ID_TC == 4 %} {# Ping, HttpCode, SQL DB #}
<td>
{#IF/SWITCH status text#}
{%if check.status == 0%}
{#IF/SWITCH uptime to text#}
{%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.status == 1%}
{%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.status == 2%}
{%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.status == 3%}
{%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.status == 4%}
{%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>
@@ -49,7 +49,7 @@
{#END IF/SWITCH#}
({{ check.uptime}}%)
</td>
{% if check.status is defined %}{#Only if records exists#}
{% if check.uptime != -1 %}{#Only if records exists#}
<td>
{{check.dateLastChk}} -
{% if check.failedLastChk == 0 %}

View File

@@ -38,10 +38,11 @@
<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-info" data-toggle="modal" data-target="#countercode_{{check.ID_C}}">Código del contador</button>
<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>

View File

@@ -10,18 +10,18 @@
<div class="col-lg-12">
<div class="card">
<div class="card-block">
<form class="form-horizontal" method="POST" action="?page=saveopts">
<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 del check" value="{{sys.name}}" class="form-control form-control-success"><small class="form-text">Nombre para sacar en titulos.</small>
<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 resultados (Individuales) a guardar en historial por cada check</label>
<label class="col-sm-2">Cantidad de tiempo a guardar historial de resultados en días.</label>
<div class="col-sm-10">
<input name="maxChecksSave" type="numeric" placeholder="Nombre del check" value="{{sys.maxChecksSave}}" class="form-control form-control-success"><small class="form-text">300 es un buen numero</small>
<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>

View File

@@ -37,4 +37,5 @@ $T_['HTTP_CODE'] = 'Http code';
$T_['VISIT_COUNT'] = 'Visit counter';
$T_['DATABASE'] = 'Database check';
$T_['add_grp_to_add_chk'] = 'Add a group for start adding checks';
$T_['view_hist'] = 'View history';
?>

View File

@@ -37,4 +37,5 @@ $T_['HTTP_CODE'] = 'Código HTTP';
$T_['VISIT_COUNT'] = 'Contador de visitas';
$T_['DATABASE'] = 'Conexión a base de datos';
$T_['add_grp_to_add_chk'] = 'Añade un grupo para empezar a añadir checks';
$T_['view_hist'] = 'Ver histórico';
?>

View File

@@ -1,4 +1,6 @@
<?php
define('VERSION','0.9.1');
session_start(); //Session in all page
require_once "lib/dbwrapper.php";
$db_file = __DIR__."/sqlite.db3";
@@ -10,19 +12,17 @@ if (!is_file($db_file)){ //Go to install if not.
$db_conn = dbw_connect("sqlite",$db_file); //Database
/** In connect.php check if user SessionID exists, if not, delete Cookie */
if (isset($_COOKIE['SessionID'])){
$data = dbw_query_fetch_array($db_conn, "SELECT * FROM USERS WHERE SessionID='$_COOKIE[SessionID]'");
if (!isset($data['SessionID'])){
setcookie("SessionID", "", time()-3600,"/");
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['SessionID'] = $data['SessionID'];
$you['webRoot'] = webRoot();
}
$lang=getSystemOpt($db_conn,'lang');
@@ -30,4 +30,8 @@ $lang=getSystemOpt($db_conn,'lang');
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

@@ -72,16 +72,10 @@ while ($site = dbw_fetch_array($db_conn,$sites)){
}
//Delete old Checks (Based on user input)
$sites = dbw_query($db_conn,"SELECT * FROM CHECKS");
while ($site = dbw_fetch_array($db_conn,$sites)){
$count = dbw_query_fetch_array($db_conn,"SELECT COUNT(*) FROM CHKHIST WHERE ID_C='$site[ID_C]'")[0]; //Count how much checks has a site
if ($count > getSystemOpt($db_conn,"maxChecksSave")){
$todelete = $count - getSystemOpt($db_conn,"maxChecksSave"); //How much to delete
dbw_query($db_conn, "DELETE FROM CHKHIST WHERE ID_C='$site[ID_C]' ORDER BY `timestamp` ASC LIMIT $todelete");
}
}
//Delete old Checks (Based on time to save, put in secs)
$mintime = time()-(getSystemOpt($db_conn,"maxTimeSave")*24*3600);
dbw_query($db_conn,"DELETE FROM CHKHIST WHERE `timestamp` < $mintime");
//Delete Checks stored for pages that not exist
dbw_query($db_conn, "DELETE FROM CHKHIST WHERE ID_C NOT IN (SELECT ID_C FROM CHECKS)");

View File

@@ -3,49 +3,31 @@
require_once "connect.php";
require_once 'lib/loadTwig.php';
/** Function checkStatus checks last "Checks" and their return
Return can be:
A value from 0-1-2 for status. 3 for Out Of Service. 3 and 4 can be turned up manually (
0-Perfect
1-Little problems
2-Problems
3-Out of service
4-In maintenance
255-Not results recolected (grey)
*/
function checkStatus($db_conn,$ID_C){
//First, check if the status is marked to any manual value
$manualPage = dbw_query_fetch_array($db_conn,"SELECT ID_C,manStatus FROM CHECKS WHERE ID_C='$ID_C'")['manStatus'];
if ($manualPage != NULL){return $manualPage;}
//If it's not manual-setted, see real status
$result = checkUptime($db_conn,$ID_C);
//Return status
if ($result == 255){return 255;}
if ($result > 95 && $result <= 100){return 0;}
if ($result > 60 && $result <= 95){return 1;}
if ($result > 10 && $result <= 60){return 2;}
if ($result >= 0 && $result <= 10){return 3;} //If test fail much (90% fail)
}
function checkUptime($db_conn,$ID_C,$precision = 0){
if ($precision == 0){
$time = time()-30*24*3600; //Last month
$time = time()-30*7*3600; //Last week
}else{
$time = $precision;
}
if ($precision != 0){
$good = dbw_query_fetch_array($db_conn,"SELECT COUNT(*) FROM CHKHIST WHERE ID_C = '$ID_C' AND code == 0 AND `timestamp` > $time")[0];
$all = dbw_query_fetch_array($db_conn,"SELECT COUNT(*) FROM CHKHIST WHERE ID_C = '$ID_C' AND `timestamp` > $time")[0];
}else{ //Uptime of all time
$good = dbw_query_fetch_array($db_conn,"SELECT COUNT(*) FROM CHKHIST WHERE ID_C = '$ID_C' AND code == 0")[0];
$all = dbw_query_fetch_array($db_conn,"SELECT COUNT(*) FROM CHKHIST WHERE ID_C = '$ID_C'")[0];
$res = dbw_query($db_conn,"SELECT code FROM CHKHIST WHERE ID_C='$ID_C' AND `timestamp` > $time");
$count = 0;
$err = 0;
while ($fila = dbw_fetch_array($db_conn,$res)){
$count++;
$err += $fila['code'];
}
if ($all != 0){
$uptime = round(($good/$all)*100,2);
return $uptime;
echo $count."-";
if ($count == 0){
return '-1'; //No registers
}else{
return 100;
if ($err != 0){
$uptime = (100 - round(($err/$count)*100,2));
return $uptime;
}else{
return 100;
}
}
}
@@ -103,13 +85,12 @@ function RandomString($length)
/** 1 if its logued, 0 if not */
function isLogued(){
if (isset($_COOKIE['SessionID'])){
if (isset($_SESSION['UserID'])){
return 1;
}else{
return 0;
}
}
function requireLogin(){
if (isLogued() == 0){
die('You dont have admin rights'); //This blocks edit or create nothing if its not logued

View File

@@ -1,4 +1,5 @@
<?php
$d_time = microtime(true);
require_once "functions.php";
$results = dbw_query($db_conn,"SELECT * FROM GROUPS"); //All groups
@@ -21,20 +22,28 @@ while ($onechk = dbw_fetch_array($db_conn,$results)){
case 2: //HttpCode
case 4: //MySQL
if (dbw_query_fetch_array($db_conn, "SELECT COUNT(*) FROM CHKHIST WHERE ID_C = '$idchk'")[0] != 0){
$chks[$idchk]['status'] = checkStatus($db_conn,$idchk); //Check status of a site
$chks[$idchk]['dateLastChk'] = date('d/m H:i',dbw_query_fetch_array($db_conn, "SELECT `timestamp` FROM CHKHIST WHERE ID_C = '$idchk' ORDER BY `timestamp` DESC")['timestamp']);
if (dbw_query_fetch_array($db_conn, "SELECT COUNT(`ID_CHist`) FROM CHKHIST WHERE ID_C = '$idchk'")[0] != 0){
$chks[$idchk]['failedLastChk'] = dbw_query_fetch_array($db_conn, "SELECT `code` FROM CHKHIST WHERE ID_C = '$idchk' ORDER BY `timestamp` DESC LIMIT 0,1")['code'];
$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']);
$lastErr = dbw_query_fetch_array($db_conn, "SELECT `timestamp` FROM CHKHIST WHERE ID_C = '$idchk' AND code != 0 ORDER BY `timestamp` DESC LIMIT 0,1")['timestamp']; //Record last error, for showing if there are any.
$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.
if ($lastErr != false){
$chks[$idchk]['dateLastErr'] = date('d/m H:i',$lastErr);
}
$ID_TC = $chks[$idchk]['ID_TC'];
$chks[$idchk]['nameCheck'] = textTypeChk($T_,$ID_TC);
$chks[$idchk]['uptime'] = checkUptime($db_conn,$ID_C);
if ($onechk['manStatus'] != ''){
$chks[$idchk]['uptime'] = 255;//255 = Maintenance I suppose, not implemented
}else{
$chks[$idchk]['uptime'] = checkUptime($db_conn,$idchk);
}
}
break;
@@ -75,5 +84,5 @@ while ($incident = dbw_fetch_array($db_conn,$incidents)){
}
echo $twig->render('indexpage.twig', array('T_' => $T_, 'you' => $you, 'checks' => $chks, 'news' => $incs)); //Render
echo "<p>Página creada en ".round(microtime(true)-$d_time,2)." segundos</p>";
?>

View File

@@ -1,6 +1,5 @@
<?php
$ver = '0.9';
//require "functions.php"; //THIS FILE CAN'T BE USED THERE, BECAUSE IT HAS connect.php dependence
define('VERSION','0.9.1');
require_once 'lib/loadTwig.php';
$db_file = __DIR__."/sqlite.db3";
@@ -12,7 +11,7 @@ if (!isset($_POST['websiteName']) && !isset($_POST['username']) && !isset($_POST
echo $twig->render('install.twig');
}else{
if ($_POST['passw1'] !== $_POST['passw2']){
die("NONO");
die("Passwords didn't match");
}else{
//Creamos toda la base de datos
require_once "lib/dbwrapper.php"; //For using database
@@ -30,7 +29,6 @@ CREATE TABLE "USERS" (
`ID_U` INTEGER PRIMARY KEY AUTOINCREMENT,
`nick` TEXT NOT NULL UNIQUE,
`passw` TEXT,
`SessionID` INTEGER UNIQUE,
`fullRights` INTEGER NOT NULL
);
CREATE TABLE "TOKENS" (
@@ -78,10 +76,10 @@ COMMIT;';
dbw_query($db_conn,"INSERT INTO USERS (nick,passw,fullRights) VALUES('$user','$pass',1)"); //Create user
//System opts
dbw_query($db_conn,"INSERT INTO SYS VALUES ('maxChecksSave',300)");
dbw_query($db_conn,"INSERT INTO SYS VALUES ('maxTimeSave',14)");
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 ('version','$ver')");
dbw_query($db_conn,"INSERT INTO SYS VALUES ('version','".VERSION."')");
echo $twig->render('install.twig', array('part' => 2));
}

View File

@@ -1,3 +1,13 @@
* 2.4.4 (2017-09-27)
* added Twig_Profiler_Profile::reset()
* fixed use TokenParser to return an empty Node
* added RuntimeExtensionInterface
* added circular reference detection when loading templates
* added support for runtime loaders in IntegrationTestCase
* fixed deprecation when using Twig_Profiler_Dumper_Html
* removed @final from Twig_Profiler_Dumper_Text
* 2.4.3 (2017-06-07)
* fixed namespaces introduction
@@ -69,9 +79,17 @@
* improved the performance of the filesystem loader
* removed features that were deprecated in 1.x
* 1.34.4 (2017-XX-XX)
* 1.35.0 (2017-XX-XX)
* n/a
* added Twig_Profiler_Profile::reset()
* fixed use TokenParser to return an empty Node
* added RuntimeExtensionInterface
* added circular reference detection when loading templates
* 1.34.4 (2017-07-04)
* added support for runtime loaders in IntegrationTestCase
* fixed deprecation when using Twig_Profiler_Dumper_Html
* 1.34.3 (2017-06-07)
@@ -212,7 +230,7 @@
* fixed reserved keywords (forbids true, false, null and none keywords for variables names)
* fixed support for PHP7 (Throwable support)
* marked the following methods as being internals on Twig_Environment:
* marked the following methods as being internals on Twig_Environment:
getFunctions(), getFilters(), getTests(), getFunction(), getFilter(), getTest(),
getTokenParsers(), getTags(), getNodeVisitors(), getUnaryOperators(), getBinaryOperators(),
getFunctions(), getFilters(), getGlobals(), initGlobals(), initExtensions(), and initExtension()

View File

@@ -16,11 +16,11 @@
*/
class Twig_Environment
{
const VERSION = '2.4.3';
const VERSION_ID = 20403;
const VERSION = '2.4.4';
const VERSION_ID = 20404;
const MAJOR_VERSION = 2;
const MINOR_VERSION = 4;
const RELEASE_VERSION = 3;
const RELEASE_VERSION = 4;
const EXTRA_VERSION = '';
private $charset;
@@ -42,6 +42,7 @@ class Twig_Environment
private $runtimeLoaders = array();
private $runtimes = array();
private $optionsHash;
private $loading = array();
/**
* Constructor.
@@ -308,6 +309,10 @@ class Twig_Environment
*
* @param string|Twig_TemplateWrapper|Twig_Template $name The template name
*
* @throws Twig_Error_Loader When the template cannot be found
* @throws Twig_Error_Runtime When a previously generated cache is corrupted
* @throws Twig_Error_Syntax When an error occurred during compilation
*
* @return Twig_TemplateWrapper
*/
public function load($name)
@@ -382,7 +387,19 @@ class Twig_Environment
// to be removed in 3.0
$this->extensionSet->initRuntime($this);
return $this->loadedTemplates[$cls] = new $cls($this);
if (isset($this->loading[$cls])) {
throw new Twig_Error_Runtime(sprintf('Circular reference detected for Twig template "%s", path: %s.', $name, implode(' -> ', array_merge($this->loading, array($name)))));
}
$this->loading[$cls] = $name;
try {
$this->loadedTemplates[$cls] = new $cls($this);
} finally {
unset($this->loading[$cls]);
}
return $this->loadedTemplates[$cls];
}
/**

View File

@@ -1430,8 +1430,6 @@ function twig_array_batch($items, $size, $fill = null)
*/
function twig_get_attribute(Twig_Environment $env, Twig_Source $source, $object, $item, array $arguments = array(), $type = Twig_Template::ANY_CALL, $isDefinedTest = false, $ignoreStrictCheck = false)
{
static $cache = array();
// array
if (Twig_Template::METHOD_CALL !== $type) {
$arrayItem = is_bool($item) || is_float($item) ? (int) $item : $item;
@@ -1518,6 +1516,8 @@ function twig_get_attribute(Twig_Environment $env, Twig_Source $source, $object,
}
}
static $cache = array();
$class = get_class($object);
// object method

View File

@@ -0,0 +1,62 @@
<?php
/*
* This file is part of Twig.
*
* (c) Fabien Potencier
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* @author Fabien Potencier <fabien@symfony.com>
*/
abstract class Twig_Profiler_Dumper_Base
{
private $root;
public function dump(Twig_Profiler_Profile $profile)
{
return $this->dumpProfile($profile);
}
abstract protected function formatTemplate(Twig_Profiler_Profile $profile, $prefix);
abstract protected function formatNonTemplate(Twig_Profiler_Profile $profile, $prefix);
abstract protected function formatTime(Twig_Profiler_Profile $profile, $percent);
private function dumpProfile(Twig_Profiler_Profile $profile, $prefix = '', $sibling = false)
{
if ($profile->isRoot()) {
$this->root = $profile->getDuration();
$start = $profile->getName();
} else {
if ($profile->isTemplate()) {
$start = $this->formatTemplate($profile, $prefix);
} else {
$start = $this->formatNonTemplate($profile, $prefix);
}
$prefix .= $sibling ? '│ ' : ' ';
}
$percent = $this->root ? $profile->getDuration() / $this->root * 100 : 0;
if ($profile->getDuration() * 1000 < 1) {
$str = $start."\n";
} else {
$str = sprintf("%s %s\n", $start, $this->formatTime($profile, $percent));
}
$nCount = count($profile->getProfiles());
foreach ($profile as $i => $p) {
$str .= $this->dumpProfile($p, $prefix, $i + 1 !== $nCount);
}
return $str;
}
}
class_alias('Twig_Profiler_Dumper_Base', 'Twig\Profiler\Dumper\BaseDumper', false);
class_exists('Twig_Profiler_Profile');

View File

@@ -12,7 +12,7 @@
/**
* @author Fabien Potencier <fabien@symfony.com>
*/
final class Twig_Profiler_Dumper_Html extends Twig_Profiler_Dumper_Text
final class Twig_Profiler_Dumper_Html extends Twig_Profiler_Dumper_Base
{
private static $colors = array(
'block' => '#dfd',

View File

@@ -11,18 +11,9 @@
/**
* @author Fabien Potencier <fabien@symfony.com>
*
* @final
*/
class Twig_Profiler_Dumper_Text
final class Twig_Profiler_Dumper_Text extends Twig_Profiler_Dumper_Base
{
private $root;
public function dump(Twig_Profiler_Profile $profile)
{
return $this->dumpProfile($profile);
}
protected function formatTemplate(Twig_Profiler_Profile $profile, $prefix)
{
return sprintf('%s└ %s', $prefix, $profile->getTemplate());
@@ -37,36 +28,6 @@ class Twig_Profiler_Dumper_Text
{
return sprintf('%.2fms/%.0f%%', $profile->getDuration() * 1000, $percent);
}
private function dumpProfile(Twig_Profiler_Profile $profile, $prefix = '', $sibling = false)
{
if ($profile->isRoot()) {
$this->root = $profile->getDuration();
$start = $profile->getName();
} else {
if ($profile->isTemplate()) {
$start = $this->formatTemplate($profile, $prefix);
} else {
$start = $this->formatNonTemplate($profile, $prefix);
}
$prefix .= $sibling ? '│ ' : ' ';
}
$percent = $this->root ? $profile->getDuration() / $this->root * 100 : 0;
if ($profile->getDuration() * 1000 < 1) {
$str = $start."\n";
} else {
$str = sprintf("%s %s\n", $start, $this->formatTime($profile, $percent));
}
$nCount = count($profile->getProfiles());
foreach ($profile as $i => $p) {
$str .= $this->dumpProfile($p, $prefix, $i + 1 !== $nCount);
}
return $str;
}
}
class_alias('Twig_Profiler_Dumper_Text', 'Twig\Profiler\Dumper\TextDumper', false);

View File

@@ -149,6 +149,12 @@ class Twig_Profiler_Profile implements IteratorAggregate, Serializable
);
}
public function reset()
{
$this->starts = $this->ends = $this->profiles = array();
$this->enter();
}
public function getIterator()
{
return new ArrayIterator($this->profiles);

View File

@@ -24,6 +24,14 @@ abstract class Twig_Test_IntegrationTestCase extends TestCase
*/
abstract protected function getFixturesDir();
/**
* @return Twig_RuntimeLoaderInterface[]
*/
protected function getRuntimeLoaders()
{
return array();
}
/**
* @return Twig_ExtensionInterface[]
*/
@@ -143,6 +151,10 @@ abstract class Twig_Test_IntegrationTestCase extends TestCase
), $match[2] ? eval($match[2].';') : array());
$twig = new Twig_Environment($loader, $config);
$twig->addGlobal('global', 'global');
foreach ($this->getRuntimeLoaders() as $runtimeLoader) {
$twig->addRuntimeLoader($runtimeLoader);
}
foreach ($this->getExtensions() as $extension) {
$twig->addExtension($extension);
}

View File

@@ -55,6 +55,8 @@ final class Twig_TokenParser_Use extends Twig_TokenParser
$stream->expect(Twig_Token::BLOCK_END_TYPE);
$this->parser->addTrait(new Twig_Node(array('template' => $template, 'targets' => new Twig_Node($targets))));
return new Twig_Node();
}
public function getTag()

View File

@@ -49,14 +49,20 @@ function dbw_escape_string($conn,$string){
/** Make query */
function dbw_query($conn,$query){
$time = microtime(true);
switch ($conn[1]){
case "mysqli":
return mysqli_query($conn[0],$query);
$ret = mysqli_query($conn[0],$query);
break;
case "sqlite":
return $conn[0]->query($query);
$ret = $conn[0]->query($query);
break;
case "PgSQL":
return pg_query($query); //Last error (pg_last_error()) not implemented
$ret = pg_query($query);
break;
}
//echo "<p>".$query."->".(microtime(true)-$time)." milisegundos</p>";
return $ret;
}
/** Fetch array from query */
@@ -83,23 +89,27 @@ function dbw_fetch_array($conn,$result,$typearray = NULL){
/** Make query and fetch array */
function dbw_query_fetch_array($conn,$query){
$time = microtime(true);
switch ($conn[1]){
case "mysqli":
$query = mysqli_query($conn[0],$query);
if ($query == false || $query == NULL){return false;}
return mysqli_fetch_array($query);
$result = mysqli_query($conn[0],$query);
if (!$result){return false;}
$ret = mysqli_fetch_array($result);
break;
case "sqlite":
$query = $conn[0]->query($query);
if ($query == false || $query == NULL){return false;}
return $query->fetchArray();
$result = $conn[0]->query($query);
if (!$result){return false;}
$ret = $result->fetchArray();
break;
case "PgSQL":
$query = pg_query($query);
if ($query == false || $query == NULL){return false;}
return pg_fetch_array($query); //Last error (pg_last_error()) not implemented
$result = pg_query($query);
if (!$result){return false;}
$ret = pg_fetch_array($result); //Last error (pg_last_error()) not implemented
break;
}
//echo "<p>".$query."->".(microtime(true)-$time)." milisegundos</p>";
return $ret;
}
/** Goes a query to $row. $row starts in 0 as first row as if not specified */
@@ -155,7 +165,8 @@ function dbw_num_rows($conn,$result){
case "mysqli":
return mysqli_num_rows($result);
case "sqlite":
return $result->numRows();
die("Sqlite3 not supports numRows, use query with COUNT(*)");
return $result->numRows(); //ERROR
case "PgSQL":
return pg_num_rows ($result);
}

View File

@@ -4,13 +4,13 @@ require "functions.php";
if (isset($_GET['do'])){
if ($_GET['do'] == 'logout'){
require_once "connect.php";
dbw_query($db_conn, "UPDATE USERS SET SessionID = NULL WHERE SessionID='$_COOKIE[SessionID]'");
setcookie("SessionID", "", time()-3600,"/");
//dbw_query($db_conn, "UPDATE USERS SET SessionID = NULL WHERE SessionID='$_COOKIE[SessionID]'");
session_destroy();
header('Location: index.php');
}
}
if (isset($_COOKIE['SessionID'])){ //Ya está logueado
if (isset($_SESSION['UserID'])){ //Ya está logueado
header('Location: panel.php');
}
@@ -20,14 +20,12 @@ if (!isset($_POST['nick'])){
if (isset($_POST['nick'])){
$nick=$_POST['nick'];
$pass= hash("sha256",$_POST['pass']);
$finalpass = dbw_query_fetch_array($db_conn,"SELECT `Passw` FROM `USERS` WHERE nick ='$nick'");
$passcomprobar = $finalpass[0];
$resql = dbw_query_fetch_array($db_conn,"SELECT ID_U,`passw` FROM `USERS` WHERE nick ='$nick'");
$passcomprobar = $resql['passw'];
if ($pass == $passcomprobar)
{
$sesid = RandomString(12);
dbw_query($db_conn, "UPDATE USERS SET SessionID = '$sesid' WHERE nick = '$nick'");
setcookie("SessionID",$sesid,"0","/");
header('Location: panel.php');
$_SESSION['UserID'] = $resql['ID_U'];
header('Location: panel.php');
}else{
echo $twig->render('login.twig', array('status' => 'error'));
}

View File

@@ -208,7 +208,10 @@ switch($page){
header('Location: panel.php?page=news');
break;
case 'savesettings':
//All group names and IDs
dbw_query($db_conn,"UPDATE SYS SET `value`='$_POST[name]' WHERE `option`='name'");
dbw_query($db_conn,"UPDATE SYS SET `value`='$_POST[maxTimeSave]' WHERE `option`='maxTimeSave'");
case 'settings':
//All group names and IDs
$results = dbw_query($db_conn,"SELECT * FROM SYS"); //All groups

21
updater.php Normal file
View File

@@ -0,0 +1,21 @@
<?php
echo "<h2>Updater of CheckServer</h2>";
echo "<p>Connecting to database</p>";
require_once 'connect.php';
$version = dbw_query_fetch_array($db_conn,"SELECT value FROM SYS WHERE option = 'version'")[0];
echo "<p>Your version: ".$version;
echo "<p>Updating to lastest</p>";
switch ($version){
case '0.9':
echo "<p>0.9->0.9.1<p>";
dbw_query($db_conn,"DELETE FROM SYS WHERE option='maxChecksSave'");
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.
case '0.9.1':
echo "0.9.1-Lastest";
echo "<p>Updated to lastest. Close this and go to index</p>";
//Remove files on a good update
unlink('updater.php');
unlink('installer.php');
}