Fix health page not working

- Fix formatting
- Add references to App
- Fix parse error
- Fix a bunch of notices
- Remove inexplicable killme() for *_content pages preventing them from
displaying
This commit is contained in:
Hypolite Petovan 2017-08-01 21:06:33 -04:00
parent 4601c4bd8a
commit c6d60df8ac
2 changed files with 136 additions and 135 deletions

View File

@ -73,8 +73,6 @@ if ($a->module_loaded) {
if ((!$a->error) && (function_exists($a->module . '_content'))) {
$func = $a->module . '_content';
$a->page['content'] = $func($a);
killme();
}
}

View File

@ -1,35 +1,32 @@
<?php
require_once('include/site-health.php');
require_once 'include/site-health.php';
function health_content(&$a) {
if($a->argc > 1){
use Friendica\Directory\App;
function health_content(App $a)
{
if ($a->argc > 1) {
return health_details($a, $a->argv[1]);
}
if($_GET['s']){
if (isset($_GET['s']) && $_GET['s']) {
return health_search($a, $_GET['s']);
}
return health_summary($a);
}
function health_search(&$a, $search)
function health_search(App $a, $search)
{
if(strlen($search) < 3){
if (strlen($search) < 3) {
$result = 'Please use at least 3 characters in your search';
}
else {
} else {
$r = q("SELECT * FROM `site-health` WHERE `base_url` LIKE '%%%s%%' ORDER BY `health_score` DESC LIMIT 100", dbesc($search));
if(count($r)){
if (count($r)) {
$result = '';
foreach($r as $site){
foreach ($r as $site) {
//Get user count.
$site['users'] = 0;
$r = q(
@ -37,107 +34,105 @@ function health_search(&$a, $search)
WHERE `homepage` LIKE '%s%%'",
dbesc($site['base_url'])
);
if(count($r)){
if (count($r)) {
$site['users'] = $r[0]['users'];
}
$result .=
'<span class="health '.health_score_to_name($site['health_score']).'">&hearts;</span> '.
'<a href="/health/'.$site['id'].'">' . $site['base_url'] . '</a> '.
'(' . $site['users'] . ')'.
($site['effective_base_url'] ? ' -&gt; <abbr title="Redirects to this domain.">'.$site['effective_base_url'].'</abbr>' : '').
'<span class="health ' . health_score_to_name($site['health_score']) . '">&hearts;</span> ' .
'<a href="/health/' . $site['id'] . '">' . $site['base_url'] . '</a> ' .
'(' . $site['users'] . ')' .
($site['effective_base_url'] ? ' -&gt; <abbr title="Redirects to this domain.">' . $site['effective_base_url'] . '</abbr>' : '') .
"<br />\r\n";
}
}
else {
} else {
$result = 'No results';
}
}
$tpl .= file_get_contents('view/health_search.tpl');
return replace_macros($tpl, array(
'$searched' => $search,
'$result' => $result
));
}
function health_summary(&$a){
function health_summary(App $a)
{
$sites = array();
//Find the user count per site.
$r = q("SELECT `homepage` FROM `profile`");
if(count($r)) {
foreach($r as $rr) {
if (count($r)) {
foreach ($r as $rr) {
$site = parse_site_from_url($rr['homepage']);
if($site) {
if(!isset($sites[$site]))
$sites[$site] = 0;
if ($site) {
if (!isset($sites[$site])) {
$sites[$site] = 0;
}
$sites[$site] ++;
}
}
}
//See if we have a health for them AND they provide SSL.
$sites_with_health = array();
$site_healths = array();
$r = q("SELECT * FROM `site-health` WHERE `reg_policy`='REGISTER_OPEN' AND `ssl_state` = 1");
if(count($r)) {
foreach($r as $rr) {
$sites_with_health[$rr['base_url']] = (($sites[$rr['base_url']] / 100) + 10) * intval($rr['health_score']);
$site_healths[$rr['base_url']] = $rr;
if (count($r)) {
foreach ($r as $rr) {
if (isset($sites[$rr['base_url']])) {
$sites_with_health[$rr['base_url']] = (($sites[$rr['base_url']] / 100) + 10) * intval($rr['health_score']);
$site_healths[$rr['base_url']] = $rr;
}
}
}
arsort($sites_with_health);
$total = 0;
$public_sites = '';
foreach($sites_with_health as $k => $v)
{
foreach ($sites_with_health as $k => $v) {
//Stop at unhealthy sites.
$site = $site_healths[$k];
if($site['health_score'] <= 20) break;
if ($site['health_score'] <= 20) {
break;
}
//Skip small sites.
$users = $sites[$k];
if($users < 5) continue;
if ($users < 5) {
continue;
}
$public_sites .=
'<span class="health '.health_score_to_name($site['health_score']).'">&hearts;</span> '.
'<a href="/health/'.$site['id'].'">' . $k . '</a> '.
'(' . $users . ')'.
'<span class="health ' . health_score_to_name($site['health_score']) . '">&hearts;</span> ' .
'<a href="/health/' . $site['id'] . '">' . $k . '</a> ' .
'(' . $users . ')' .
"<br />\r\n";
$total ++;
}
$public_sites .= "<br>Total: $total<br />\r\n";
$tpl .= file_get_contents('view/health_summary.tpl');
$tpl = file_get_contents('view/health_summary.tpl');
return replace_macros($tpl, array(
'$versions' => $versions,
'$public_sites' => $public_sites
));
}
function health_details($a, $id)
function health_details(App $a, $id)
{
//Max data age in MySQL date.
$maxDate = date('Y-m-d H:i:s', time()-($a->config['stats']['maxDataAge']));
$maxDate = date('Y-m-d H:i:s', time() - ($a->config['stats']['maxDataAge']));
//Include graphael line charts.
$a->page['htmlhead'] .= '<script type="text/javascript" src="'.$a->get_baseurl().'/assets/js/raphael/smoothing.js"></script>'.PHP_EOL;
$a->page['htmlhead'] .= '<script type="text/javascript" src="'.$a->get_baseurl().'/assets/js/raphael/raphael.js"></script>'.PHP_EOL;
$a->page['htmlhead'] .= '<script type="text/javascript" src="'.$a->get_baseurl().'/assets/js/raphael/g_raphael.js"></script>'.PHP_EOL;
$a->page['htmlhead'] .= '<script type="text/javascript" src="'.$a->get_baseurl().'/assets/js/raphael/g_line-min.js"></script>'.PHP_EOL;
$a->page['htmlhead'] .= '<script type="text/javascript" src="' . $a->get_baseurl() . '/assets/js/raphael/smoothing.js"></script>' . PHP_EOL;
$a->page['htmlhead'] .= '<script type="text/javascript" src="' . $a->get_baseurl() . '/assets/js/raphael/raphael.js"></script>' . PHP_EOL;
$a->page['htmlhead'] .= '<script type="text/javascript" src="' . $a->get_baseurl() . '/assets/js/raphael/g_raphael.js"></script>' . PHP_EOL;
$a->page['htmlhead'] .= '<script type="text/javascript" src="' . $a->get_baseurl() . '/assets/js/raphael/g_line-min.js"></script>' . PHP_EOL;
$a->page['htmlhead'] .= '<script type="text/javascript">
window.smoothingFactor = 0.3;
window.smoothingBracket = 2;
@ -165,49 +160,50 @@ function health_details($a, $id)
});
});
</script>';
//The overall health status.
$r = q(
"SELECT * FROM `site-health`
WHERE `id`=%u",
intval($id)
);
if(!count($r)){
if (!count($r)) {
$a->error = 404;
return;
}
$site = $r[0];
//Does it redirect to a known site?
$redirectStatement = '';
if($site['effective_base_url']){
if ($site['effective_base_url']) {
//The effective health status.
$r = q(
"SELECT * FROM `site-health`
WHERE `base_url`= '%s'",
dbesc($site['effective_base_url'])
);
if(count($r)){
$redirectStatement = '<a href="/health/'.$r[0]['id'].'">Redirects to '.$site['effective_base_url'].'</a>';
if (count($r)) {
$redirectStatement = '<a href="/health/' . $r[0]['id'] . '">Redirects to ' . $site['effective_base_url'] . '</a>';
}
}
//Figure out SSL state.
$urlMeta = parse_url($site['base_url']);
if($urlMeta['scheme'] !== 'https'){
if ($urlMeta['scheme'] !== 'https') {
$ssl_state = 'No';
}else{
} else {
switch ($site['ssl_state']) {
case null: $ssl_state = 'Yes, but not yet verified.'; break;
case '0': $ssl_state = 'Certificate error!'; break;
case '1': $ssl_state = '&radic; Yes, verified.'; break;
case null: $ssl_state = 'Yes, but not yet verified.';
break;
case '0': $ssl_state = 'Certificate error!';
break;
case '1': $ssl_state = '&radic; Yes, verified.';
break;
}
$ssl_state .= ' <a href="https://www.ssllabs.com/ssltest/analyze.html?d='.$urlMeta['host'].'" target="_blank">Detailed test</a>';
$ssl_state .= ' <a href="https://www.ssllabs.com/ssltest/analyze.html?d=' . $urlMeta['host'] . '" target="_blank">Detailed test</a>';
}
//Get user count.
$site['users'] = 0;
$r = q(
@ -215,10 +211,10 @@ function health_details($a, $id)
WHERE `homepage` LIKE '%s%%'",
dbesc($site['base_url'])
);
if(count($r)){
if (count($r)) {
$site['users'] = $r[0]['users'];
}
//Get avg probe speed.
$r = q(
"SELECT AVG(`request_time`) as `avg_probe_time` FROM `site-probe`
@ -227,10 +223,10 @@ function health_details($a, $id)
intval($site['id']),
$maxDate
);
if(count($r)){
if (count($r)) {
$site['avg_probe_time'] = $r[0]['avg_probe_time'];
}
//Get scraping / submit speeds.
$r = q(
"SELECT
@ -244,13 +240,13 @@ function health_details($a, $id)
intval($site['id']),
$maxDate
);
if(count($r)){
if (count($r)) {
$site['avg_profile_time'] = $r[0]['avg_profile_time'];
$site['avg_scrape_time'] = $r[0]['avg_scrape_time'];
$site['avg_photo_time'] = $r[0]['avg_photo_time'];
$site['avg_submit_time'] = $r[0]['avg_submit_time'];
}
//Get probe speed data.
$r = q(
"SELECT AVG(`request_time`) as `avg_time`, date(`dt_performed`) as `date` FROM `site-probe`
@ -260,34 +256,38 @@ function health_details($a, $id)
intval($site['id']),
$maxDate
);
if(count($r)){
if (count($r)) {
//Include graphael line charts.
$a->page['htmlhead'] .= '<script type="text/javascript" src="'.$a->get_baseurl().'/js/raphael/raphael.js"></script>'.PHP_EOL;
$a->page['htmlhead'] .= '<script type="text/javascript" src="'.$a->get_baseurl().'/js/raphael/g_raphael.js"></script>'.PHP_EOL;
$a->page['htmlhead'] .= '<script type="text/javascript" src="'.$a->get_baseurl().'/js/raphael/g_line.js?v=0.51"></script>';
$a->page['htmlhead'] .= '<script type="text/javascript" src="' . $a->get_baseurl() . '/js/raphael/raphael.js"></script>' . PHP_EOL;
$a->page['htmlhead'] .= '<script type="text/javascript" src="' . $a->get_baseurl() . '/js/raphael/g_raphael.js"></script>' . PHP_EOL;
$a->page['htmlhead'] .= '<script type="text/javascript" src="' . $a->get_baseurl() . '/js/raphael/g_line.js?v=0.51"></script>';
$speeds = array();
$times = array();
$mintime = time();
foreach($r as $row){
foreach ($r as $row) {
$speeds[] = $row['avg_time'];
$time = strtotime($row['date']);
$times[] = $time;
if($mintime > $time) $mintime = $time;
if ($mintime > $time)
$mintime = $time;
}
for($i=0; $i < count($times); $i++){
for ($i = 0; $i < count($times); $i++) {
$times[$i] -= $mintime;
$times[$i] = floor($times[$i] / (24*3600));
$times[$i] = floor($times[$i] / (24 * 3600));
}
$a->page['htmlhead'] .=
'<script type="text/javascript">
(function(){
var x = ['.implode(',', $times).'];
var y = ['.implode(',', $speeds).'];
var x = [' . implode(',', $times) . '];
var y = [' . implode(',', $speeds) . '];
var smoothY = Smoothing.exponentialMovingAverage(y, smoothingFactor, smoothingBracket);
availableCharts.push(function($){
var id = "probe-chart";
$("#"+id+" svg").remove();
var r = Raphael(id);
@ -295,16 +295,14 @@ function health_details($a, $id)
if(drawRaw){
values.push(y);
}
r.linechart(30, 15, 400, 295, x, values, {axis:"0 0 1 1", shade:true, width:0.8, axisxstep:6})
.hoverColumn(onHoverPoint(r), onUnHoverPoint(r));
});
})();
</script>';
}
//Get scrape speed data.
$r = q(
"SELECT AVG(`total_time`) as `avg_time`, date(`dt_performed`) as `date` FROM `site-scrape`
@ -314,34 +312,38 @@ function health_details($a, $id)
intval($site['id']),
$maxDate
);
if($r && count($r)){
if ($r && count($r)) {
//Include graphael line charts.
$a->page['htmlhead'] .= '<script type="text/javascript" src="'.$a->get_baseurl().'/js/raphael/raphael.js"></script>'.PHP_EOL;
$a->page['htmlhead'] .= '<script type="text/javascript" src="'.$a->get_baseurl().'/js/raphael/g_raphael.js"></script>'.PHP_EOL;
$a->page['htmlhead'] .= '<script type="text/javascript" src="'.$a->get_baseurl().'/js/raphael/g_line.js?v=0.51"></script>';
$a->page['htmlhead'] .= '<script type="text/javascript" src="' . $a->get_baseurl() . '/js/raphael/raphael.js"></script>' . PHP_EOL;
$a->page['htmlhead'] .= '<script type="text/javascript" src="' . $a->get_baseurl() . '/js/raphael/g_raphael.js"></script>' . PHP_EOL;
$a->page['htmlhead'] .= '<script type="text/javascript" src="' . $a->get_baseurl() . '/js/raphael/g_line.js?v=0.51"></script>';
$speeds = array();
$times = array();
$mintime = time();
foreach($r as $row){
foreach ($r as $row) {
$speeds[] = $row['avg_time'];
$time = strtotime($row['date']);
$times[] = $time;
if($mintime > $time) $mintime = $time;
if ($mintime > $time)
$mintime = $time;
}
for($i=0; $i < count($times); $i++){
for ($i = 0; $i < count($times); $i++) {
$times[$i] -= $mintime;
$times[$i] = floor($times[$i] / (24*3600));
$times[$i] = floor($times[$i] / (24 * 3600));
}
$a->page['htmlhead'] .=
'<script type="text/javascript">
(function(){
var x = ['.implode(',', $times).'];
var y = ['.implode(',', $speeds).'];
var x = [' . implode(',', $times) . '];
var y = [' . implode(',', $speeds) . '];
var smoothY = Smoothing.exponentialMovingAverage(y, smoothingFactor, smoothingBracket);
availableCharts.push(function($){
var id = "scrape-chart";
$("#"+id+" svg").remove();
var r = Raphael(id);
@ -349,25 +351,25 @@ function health_details($a, $id)
if(drawRaw){
values.push(y);
}
r.linechart(30, 15, 400, 295, x, values, {shade:true, axis:"0 0 1 1", width:0.8, axisxstep:6})
.hoverColumn(onHoverPoint(r), onUnHoverPoint(r));
});
})();
</script>';
}
//Nice name for registration policy.
switch ($site['reg_policy']) {
case 'REGISTER_OPEN': $policy = "Open"; break;
case 'REGISTER_APPROVE': $policy = "Admin approved"; break;
case 'REGISTER_CLOSED': $policy = "Closed"; break;
default: $policy = $site['reg_policy']; break;
case 'REGISTER_OPEN': $policy = "Open"; break;
case 'REGISTER_APPROVE': $policy = "Admin approved"; break;
case 'REGISTER_CLOSED': $policy = "Closed"; break;
default: $policy = $site['reg_policy']; break;
}
$tpl .= file_get_contents('view/health_details.tpl');
$tpl = file_get_contents('view/health_details.tpl');
return replace_macros($tpl, array(
'$name' => $site['name'],
'$redirectStatement' => $redirectStatement,
@ -393,3 +395,4 @@ function health_details($a, $id)
'$avg_photo_time' => round($site['avg_photo_time']),
'$avg_submit_time' => round($site['avg_submit_time'])
));
}